Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py

Issue 2341173002: Move tokenize_line method from TestExpectationParser to TestExpectationLine. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py
index 6f2e74f11512d6ccab3552f1f20e412c8d275b3a..b55a2d8fe769793346a1e17b0094069733a04f6f 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py
@@ -105,7 +105,7 @@ class TestExpectationParser(object):
line_number = 0
for line in expectations_string.split("\n"):
line_number += 1
- test_expectation = self._tokenize_line(filename, line, line_number)
+ test_expectation = TestExpectationLine.tokenize_line(filename, line, line_number)
self._parse_line(test_expectation)
expectation_lines.append(test_expectation)
return expectation_lines
@@ -128,7 +128,7 @@ class TestExpectationParser(object):
_log.warning('The following test %s from the Skipped list doesn\'t exist', test_name)
expectation_line = self._create_expectation_line(test_name, [TestExpectationParser.PASS_EXPECTATION], '<Skipped file>')
expectation_line.expectations = [TestExpectationParser.SKIP_MODIFIER, TestExpectationParser.WONTFIX_MODIFIER]
- expectation_line.is_skipped_outside_expectations_file = True
+ expectation_line.is_extra_skipped_test = True
self._parse_line(expectation_line)
return expectation_line
@@ -221,6 +221,62 @@ class TestExpectationParser(object):
if expectation_line.path in self._all_tests:
expectation_line.matching_tests.append(expectation_line.path)
+
+class TestExpectationLine(object):
+ """Represents a line in test expectations file."""
+
+ def __init__(self):
+ """Initializes a blank-line equivalent of an expectation."""
+ self.original_string = None
+ self.filename = None # this is the path to the expectations file for this line
+ self.line_numbers = "0"
+ self.name = None # this is the path in the line itself
+ self.path = None # this is the normpath of self.name
+ self.bugs = []
+ self.specifiers = []
+ self.parsed_specifiers = []
+ self.matching_configurations = set()
+ self.expectations = []
+ self.parsed_expectations = set()
+ self.comment = None
+ self.matching_tests = []
+ self.warnings = []
+ self.is_extra_skipped_test = False
+
+ def __str__(self):
+ return "TestExpectationLine{name=%s, matching_configurations=%s, original_string=%s}" % (
+ self.name, self.matching_configurations, self.original_string)
+
+ def __eq__(self, other):
+ return (self.original_string == other.original_string
+ and self.filename == other.filename
+ and self.line_numbers == other.line_numbers
+ and self.name == other.name
+ and self.path == other.path
+ and self.bugs == other.bugs
+ and self.specifiers == other.specifiers
+ and self.parsed_specifiers == other.parsed_specifiers
+ and self.matching_configurations == other.matching_configurations
+ and self.expectations == other.expectations
+ and self.parsed_expectations == other.parsed_expectations
+ and self.comment == other.comment
+ and self.matching_tests == other.matching_tests
+ and self.warnings == other.warnings
+ and self.is_extra_skipped_test == other.is_extra_skipped_test)
+
+ def is_invalid(self):
+ return bool(self.warnings and self.warnings != [TestExpectationParser.MISSING_BUG_WARNING])
+
+ def is_flaky(self):
+ return len(self.parsed_expectations) > 1
+
+ def is_comment(self):
+ return bool(re.match(r"^\s*#.*$", self.original_string))
+
+ def is_whitespace(self):
+ return not self.original_string.strip()
+
+
# FIXME: Update the original specifiers and remove this once the old syntax is gone.
_configuration_tokens_list = [
'Mac', 'Mac10.9', 'Mac10.10', 'Mac10.11', 'Retina',
@@ -250,13 +306,12 @@ class TestExpectationParser(object):
'WontFix': 'WONTFIX',
}
- _inverted_expectation_tokens = dict(
+ inverted_expectation_tokens = dict(
[(value, name) for name, value in _expectation_tokens.iteritems()] +
[('TEXT', 'Failure'), ('IMAGE', 'Failure'), ('IMAGE+TEXT', 'Failure'), ('AUDIO', 'Failure')])
- # FIXME: Seems like these should be classmethods on TestExpectationLine instead of TestExpectationParser.
@classmethod
- def _tokenize_line(cls, filename, expectation_string, line_number):
+ def tokenize_line(cls, filename, expectation_string, line_number):
"""Tokenizes a line from TestExpectations and returns an unparsed TestExpectationLine instance using the old format.
The new format for a test expectation line is:
@@ -387,66 +442,6 @@ class TestExpectationParser(object):
expectation_line.warnings = warnings
return expectation_line
- @classmethod
- def _split_space_separated(cls, space_separated_string):
- """Splits a space-separated string into an array."""
- return [part.strip() for part in space_separated_string.strip().split(' ')]
qyearsley 2016/09/15 21:02:31 Note: This CL removes this method which appears un
-
-
-class TestExpectationLine(object):
- """Represents a line in test expectations file."""
-
- def __init__(self):
- """Initializes a blank-line equivalent of an expectation."""
- self.original_string = None
- self.filename = None # this is the path to the expectations file for this line
- self.line_numbers = "0"
- self.name = None # this is the path in the line itself
- self.path = None # this is the normpath of self.name
- self.bugs = []
- self.specifiers = []
- self.parsed_specifiers = []
- self.matching_configurations = set()
- self.expectations = []
- self.parsed_expectations = set()
- self.comment = None
- self.matching_tests = []
- self.warnings = []
- self.is_skipped_outside_expectations_file = False
qyearsley 2016/09/15 21:02:31 Note: This CL renames this variable to is_extra_sk
-
- def __str__(self):
- return "TestExpectationLine{name=%s, matching_configurations=%s, original_string=%s}" % (
- self.name, self.matching_configurations, self.original_string)
-
- def __eq__(self, other):
- return (self.original_string == other.original_string
- and self.filename == other.filename
- and self.line_numbers == other.line_numbers
- and self.name == other.name
- and self.path == other.path
- and self.bugs == other.bugs
- and self.specifiers == other.specifiers
- and self.parsed_specifiers == other.parsed_specifiers
- and self.matching_configurations == other.matching_configurations
- and self.expectations == other.expectations
- and self.parsed_expectations == other.parsed_expectations
- and self.comment == other.comment
- and self.matching_tests == other.matching_tests
- and self.warnings == other.warnings
- and self.is_skipped_outside_expectations_file == other.is_skipped_outside_expectations_file)
-
- def is_invalid(self):
- return bool(self.warnings and self.warnings != [TestExpectationParser.MISSING_BUG_WARNING])
-
- def is_flaky(self):
- return len(self.parsed_expectations) > 1
-
- def is_comment(self):
- return bool(re.match(r"^\s*#.*$", self.original_string))
-
- def is_whitespace(self):
- return not self.original_string.strip()
-
@staticmethod
def create_passing_expectation(test):
expectation_line = TestExpectationLine()
@@ -484,8 +479,7 @@ class TestExpectationLine(object):
result.matching_configurations = set(line1.matching_configurations) | set(line2.matching_configurations)
result.matching_tests = list(list(set(line1.matching_tests) | set(line2.matching_tests)))
result.warnings = list(set(line1.warnings) | set(line2.warnings))
- result.is_skipped_outside_expectations_file = (line1.is_skipped_outside_expectations_file or
- line2.is_skipped_outside_expectations_file)
+ result.is_extra_skipped_test = line1.is_extra_skipped_test or line2.is_extra_skipped_test
return result
def to_string(self, test_configuration_converter=None, include_specifiers=True,
@@ -538,19 +532,19 @@ class TestExpectationLine(object):
return ['Slow']
return expectations
- @staticmethod
- def _format_line(bugs, specifiers, name, expectations, comment, include_specifiers=True,
+ @classmethod
+ def _format_line(cls, bugs, specifiers, name, expectations, comment, include_specifiers=True,
include_expectations=True, include_comment=True):
new_specifiers = []
new_expectations = []
for specifier in specifiers:
# FIXME: Make this all work with the mixed-cased specifiers (e.g. WontFix, Slow, etc).
specifier = specifier.upper()
- new_specifiers.append(TestExpectationParser._inverted_configuration_tokens.get(specifier, specifier))
+ new_specifiers.append(cls._inverted_configuration_tokens.get(specifier, specifier))
qyearsley 2016/09/15 21:02:31 Note: This CL changes this to a classmethod to ind
for expectation in expectations:
expectation = expectation.upper()
- new_expectations.append(TestExpectationParser._inverted_expectation_tokens.get(expectation, expectation))
+ new_expectations.append(cls.inverted_expectation_tokens.get(expectation, expectation))
result = ''
if include_specifiers and (bugs or new_specifiers):
@@ -671,7 +665,7 @@ class TestExpectationsModel(object):
"""Returns the expectations for the given test as an uppercase string.
If there are no expectations for the test, then "PASS" is returned.
"""
- if self.get_expectation_line(test).is_skipped_outside_expectations_file:
+ if self.get_expectation_line(test).is_extra_skipped_test:
return 'NOTRUN'
expectations = self.get_expectations(test)
« no previous file with comments | « no previous file | third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698