Home | History | Annotate | Download | only in layout_tests
      1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 """Bug module that is necessary for the layout analyzer."""
      6 
      7 import re
      8 
      9 from webkitpy.layout_tests.models.test_expectations import *
     10 
     11 
     12 class Bug(object):
     13   """A class representing a bug.
     14 
     15   TODO(imasaki): add more functionalities here if bug-tracker API is available.
     16   For example, you can get the name of a bug owner.
     17   """
     18   # Type enum for the bug.
     19   WEBKIT = 0
     20   CHROMIUM = 1
     21   OTHERS = 2
     22 
     23   def __init__(self, bug_modifier):
     24     """Initialize the object using raw bug text (such as BUGWK2322).
     25 
     26     The bug modifier used in the test expectation file.
     27 
     28     Args:
     29       bug_modifier: a string representing a bug modifier. According to
     30         http://www.chromium.org/developers/testing/webkit-layout-tests/\
     31         testexpectations
     32         Bug identifiers are of the form "webkit.org/b/12345", "crbug.com/12345",
     33          "code.google.com/p/v8/issues/detail?id=12345" or "Bug(username)"
     34     """
     35     match = re.match('Bug\((\w+)\)$', bug_modifier)
     36     if match:
     37       self.type = self.OTHERS
     38       self.url = 'mailto:%s (at] chromium.org' % match.group(1).lower()
     39       self.bug_txt = bug_modifier
     40       return
     41 
     42     self.type = self.GetBugType(bug_modifier)
     43     self.url = bug_modifier
     44     self.bug_txt = bug_modifier
     45 
     46 
     47   def GetBugType(self, bug_modifier):
     48     """Returns type of the bug based on URL."""
     49     if bug_modifier.startswith(WEBKIT_BUG_PREFIX):
     50       return self.WEBKIT;
     51     if bug_modifier.startswith(CHROMIUM_BUG_PREFIX):
     52       return self.CHROMIUM;
     53     return self.OTHERS
     54 
     55   def __str__(self):
     56     """Get a string representation of a bug object.
     57 
     58     Returns:
     59       a string for HTML link representation of a bug.
     60     """
     61     return '<a href="%s">%s</a>' % (self.url, self.bug_txt)
     62