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