| # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Bug module that is necessary for the layout analyzer.""" |
| |
| import re |
| |
| from webkitpy.layout_tests.models.test_expectations import * |
| |
| |
| class Bug(object): |
| """A class representing a bug. |
| |
| TODO(imasaki): add more functionalities here if bug-tracker API is available. |
| For example, you can get the name of a bug owner. |
| """ |
| # Type enum for the bug. |
| WEBKIT = 0 |
| CHROMIUM = 1 |
| OTHERS = 2 |
| |
| def __init__(self, bug_modifier): |
| """Initialize the object using raw bug text (such as BUGWK2322). |
| |
| The bug modifier used in the test expectation file. |
| |
| Args: |
| bug_modifier: a string representing a bug modifier. According to |
| http://www.chromium.org/developers/testing/webkit-layout-tests/\ |
| testexpectations |
| Bug identifiers are of the form "webkit.org/b/12345", "crbug.com/12345", |
| "code.google.com/p/v8/issues/detail?id=12345" or "Bug(username)" |
| """ |
| match = re.match('Bug\((\w+)\)$', bug_modifier) |
| if match: |
| self.type = self.OTHERS |
| self.url = 'mailto:%s@chromium.org' % match.group(1).lower() |
| self.bug_txt = bug_modifier |
| return |
| |
| self.type = self.GetBugType(bug_modifier) |
| self.url = bug_modifier |
| self.bug_txt = bug_modifier |
| |
| |
| def GetBugType(self, bug_modifier): |
| """Returns type of the bug based on URL.""" |
| if bug_modifier.startswith(WEBKIT_BUG_PREFIX): |
| return self.WEBKIT; |
| if bug_modifier.startswith(CHROMIUM_BUG_PREFIX): |
| return self.CHROMIUM; |
| return self.OTHERS |
| |
| def __str__(self): |
| """Get a string representation of a bug object. |
| |
| Returns: |
| a string for HTML link representation of a bug. |
| """ |
| return '<a href="%s">%s</a>' % (self.url, self.bug_txt) |