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