bug.py revision 558790d6acca3451cf3a6b497803a5f07d0bec58
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Bug module that is necessary for the layout analyzer."""
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import re
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochfrom webkitpy.layout_tests.models.test_expectations import *
10558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Bug(object):
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """A class representing a bug.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TODO(imasaki): add more functionalities here if bug-tracker API is available.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  For example, you can get the name of a bug owner.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Type enum for the bug.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WEBKIT = 0
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMIUM = 1
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OTHERS = 2
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def __init__(self, bug_modifier):
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Initialize the object using raw bug text (such as BUGWK2322).
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The bug modifier used in the test expectation file.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Args:
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bug_modifier: a string representing a bug modifier. According to
30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        http://www.chromium.org/developers/testing/webkit-layout-tests/\
31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        testexpectations
32558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        Bug identifiers are of the form "webkit.org/b/12345", "crbug.com/12345",
33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch         "code.google.com/p/v8/issues/detail?id=12345" or "Bug(username)"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
35558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    match = re.match('Bug\((\w+)\)$', bug_modifier)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.type = self.OTHERS
38558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      self.url = 'mailto:%s@chromium.org' % match.group(1).lower()
39558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      self.bug_txt = bug_modifier
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return
41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    self.type = self.GetBugType(bug_modifier)
43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    self.url = bug_modifier
44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    self.bug_txt = bug_modifier
45558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  def GetBugType(self, bug_modifier):
48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    """Returns type of the bug based on URL."""
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    if bug_modifier.startswith(WEBKIT_BUG_PREFIX):
50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      return self.WEBKIT;
51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    if bug_modifier.startswith(CHROMIUM_BUG_PREFIX):
52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      return self.CHROMIUM;
53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    return self.OTHERS
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def __str__(self):
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Get a string representation of a bug object.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Returns:
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      a string for HTML link representation of a bug.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return '<a href="%s">%s</a>' % (self.url, self.bug_txt)
62