bug.py revision 5821806d5e7f356e8fa4b058a389a808ea183019
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)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Bug(object):
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """A class representing a bug.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TODO(imasaki): add more functionalities here if bug-tracker API is available.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  For example, you can get the name of a bug owner.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROME_BUG_URL = 'http://crbug.com/'
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WEBKIT_BUG_URL = 'http://webkit.org/b/'
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
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        http://trac.webkit.org/wiki/TestExpectations#Modifiers,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        currently, BUGWK12345, BUGCR12345, BUGV8_12345, BUGDPRANKE are
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        possible.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pattern_for_webkit_bug = r'(BUGWK(\d+))'
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = re.search(pattern_for_webkit_bug, bug_modifier)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.type = self.WEBKIT
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.url = self.WEBKIT_BUG_URL + match.group(2)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.bug_txt = match.group(1)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pattern_for_chrome_bug = r'(BUGCR(\d+))'
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = re.search(pattern_for_chrome_bug, bug_modifier)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.type = self.CHROMIUM
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.url = self.CHROME_BUG_URL + match.group(2)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.bug_txt = match.group(1)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pattern_for_other_bug = r'(BUG(\S+))'
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = re.search(pattern_for_other_bug, bug_modifier)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match:
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.type = self.OTHERS
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.url = 'mailto:%s@chromium.org' % match.group(2).lower()
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.bug_txt = match.group(1)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.url = ''
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.bug_txt = ''
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def __str__(self):
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Get a string representation of a bug object.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Returns:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      a string for HTML link representation of a bug.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return '<a href="%s">%s</a>' % (self.url, self.bug_txt)
65