Changeset 126135 in webkit


Ignore:
Timestamp:
Aug 20, 2012 10:56:44 PM (12 years ago)
Author:
rniwa@webkit.org
Message:

Cleanup TestExpectationParser.parse
https://bugs.webkit.org/show_bug.cgi?id=94545

Reviewed by Dirk Pranke.

Refactor TestExpectations to simplify the code.

  • Scripts/webkitpy/layout_tests/models/test_expectations.py:

(TestExpectationParser.parse): Merged _tokenize_list.
(TestExpectationParser._parse_line): Removed the call to _check_modifiers_against_expectations
since the check is now done in _parser_modifiers.
(TestExpectationParser._parse_modifiers): Merged _check_modifiers_against_expectations.
(TestExpectationParser._tokenize_line): Renamed from _tokenize.
(TestExpectationParser._split_space_separated): No longer calls lower() on all modifiers.
This is done on a local variable in _parse_modifiers, preserving the original case.
(TestExpectations.remove_rebaselined_tests.without_rebaseline_modifier): Check the existence
of 'rebaseline' against parsed modifiers.

  • Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:

(TestExpectationParserTests._tokenize):
(TestExpectationParserTests.test_tokenize_valid_with_comment): Preserves case.
(TestExpectationParserTests.test_tokenize_valid_with_multiple_modifiers): Ditto.
(TestExpectationSerializerTests._tokenize):
(TestExpectationSerializerTests.assert_list_round_trip): Call parse since _tokenize_list has
been merged into parse.

  • Scripts/webkitpy/tool/commands/queries_unittest.py:

(PrintExpectationsTest.test_csv): Preserves the case.

Location:
trunk/Tools
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r126133 r126135  
     12012-08-20  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Cleanup TestExpectationParser.parse
     4        https://bugs.webkit.org/show_bug.cgi?id=94545
     5
     6        Reviewed by Dirk Pranke.
     7
     8        Refactor TestExpectations to simplify the code.
     9
     10        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
     11        (TestExpectationParser.parse): Merged _tokenize_list.
     12        (TestExpectationParser._parse_line): Removed the call to _check_modifiers_against_expectations
     13        since the check is now done in _parser_modifiers.
     14        (TestExpectationParser._parse_modifiers): Merged _check_modifiers_against_expectations.
     15        (TestExpectationParser._tokenize_line): Renamed from _tokenize.
     16        (TestExpectationParser._split_space_separated): No longer calls lower() on all modifiers.
     17        This is done on a local variable in _parse_modifiers, preserving the original case.
     18        (TestExpectations.remove_rebaselined_tests.without_rebaseline_modifier): Check the existence
     19        of 'rebaseline' against parsed modifiers.
     20        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
     21        (TestExpectationParserTests._tokenize):
     22        (TestExpectationParserTests.test_tokenize_valid_with_comment): Preserves case.
     23        (TestExpectationParserTests.test_tokenize_valid_with_multiple_modifiers): Ditto.
     24        (TestExpectationSerializerTests._tokenize):
     25        (TestExpectationSerializerTests.assert_list_round_trip): Call parse since _tokenize_list has
     26        been merged into parse.
     27        * Scripts/webkitpy/tool/commands/queries_unittest.py:
     28        (PrintExpectationsTest.test_csv): Preserves the case.
     29
    1302012-08-20  Gustavo Noronha Silva  <gns@gnome.org>
    231
  • trunk/Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py

    r125115 r126135  
    207207
    208208    def parse(self, filename, expectations_string):
    209         expectations = TestExpectationParser._tokenize_list(filename, expectations_string)
    210         for expectation_line in expectations:
    211             self._parse_line(expectation_line)
    212         return expectations
     209        expectation_lines = []
     210        line_number = 0
     211        for line in expectations_string.split("\n"):
     212            line_number += 1
     213            test_expectation = self._tokenize_line(filename, line, line_number)
     214            self._parse_line(test_expectation)
     215            expectation_lines.append(test_expectation)
     216        return expectation_lines
    213217
    214218    def expectation_for_skipped_test(self, test_name):
     
    232236            return
    233237
    234         self._check_modifiers_against_expectations(expectation_line)
    235 
    236238        expectation_line.is_file = self._port.test_isfile(expectation_line.name)
    237239        if not expectation_line.is_file and self._check_path_does_not_exist(expectation_line):
     
    252254        has_bugid = False
    253255        parsed_specifiers = set()
    254         for modifier in expectation_line.modifiers:
     256
     257        modifiers = [modifier.lower() for modifier in expectation_line.modifiers]
     258        expectations = [expectation.lower() for expectation in expectation_line.expectations]
     259
     260        if self.SLOW_MODIFIER in modifiers and self.TIMEOUT_EXPECTATION in expectations:
     261            expectation_line.warnings.append('A test can not be both SLOW and TIMEOUT. If it times out indefinitely, then it should be just TIMEOUT.')
     262
     263        for modifier in modifiers:
    255264            if modifier in TestExpectations.MODIFIERS:
    256265                expectation_line.parsed_modifiers.append(modifier)
     
    269278            expectation_line.warnings.append('Test lacks BUG modifier.')
    270279
    271         if self._allow_rebaseline_modifier and self.REBASELINE_MODIFIER in expectation_line.modifiers:
     280        if self._allow_rebaseline_modifier and self.REBASELINE_MODIFIER in modifiers:
    272281            expectation_line.warnings.append('REBASELINE should only be used for running rebaseline.py. Cannot be checked in.')
    273282
     
    283292            result.add(expectation)
    284293        expectation_line.parsed_expectations = result
    285 
    286     def _check_modifiers_against_expectations(self, expectation_line):
    287         if self.SLOW_MODIFIER in expectation_line.modifiers and self.TIMEOUT_EXPECTATION in expectation_line.expectations:
    288             expectation_line.warnings.append('A test can not be both SLOW and TIMEOUT. If it times out indefinitely, then it should be just TIMEOUT.')
    289294
    290295    def _check_path_does_not_exist(self, expectation_line):
     
    325330
    326331    @classmethod
    327     def _tokenize(cls, filename, expectation_string, line_number):
     332    def _tokenize_line(cls, filename, expectation_string, line_number):
    328333        """Tokenizes a line from TestExpectations and returns an unparsed TestExpectationLine instance.
    329334
     
    365370
    366371    @classmethod
    367     def _tokenize_list(cls, filename, expectations_string):
    368         """Returns a list of TestExpectationLines, one for each line in expectations_string."""
    369         expectation_lines = []
    370         line_number = 0
    371         for line in expectations_string.split("\n"):
    372             line_number += 1
    373             expectation_lines.append(cls._tokenize(filename, line, line_number))
    374         return expectation_lines
    375 
    376     @classmethod
    377372    def _split_space_separated(cls, space_separated_string):
    378373        """Splits a space-separated string into an array."""
    379         # FIXME: Lower-casing is necessary to support legacy code. Need to eliminate.
    380         return [part.strip().lower() for part in space_separated_string.strip().split(' ')]
     374        return [part.strip() for part in space_separated_string.strip().split(' ')]
    381375
    382376
     
    858852            return not (not expectation.is_invalid() and
    859853                        expectation.name in except_these_tests and
    860                         "rebaseline" in expectation.modifiers and
     854                        'rebaseline' in expectation.parsed_modifiers and
    861855                        filename == expectation.filename)
    862856
  • trunk/Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py

    r125115 r126135  
    489489class TestExpectationParserTests(unittest.TestCase):
    490490    def _tokenize(self, line):
    491         return TestExpectationParser._tokenize('path', line, 0)
     491        return TestExpectationParser._tokenize_line('path', line, 0)
    492492
    493493    def test_tokenize_blank(self):
     
    530530        expectation = self._tokenize('FOO : bar = BAZ //Qux.')
    531531        self.assertEqual(expectation.comment, 'Qux.')
    532         self.assertEqual(str(expectation.modifiers), '[\'foo\']')
    533         self.assertEqual(str(expectation.expectations), '[\'baz\']')
     532        self.assertEqual(str(expectation.modifiers), "['FOO']")
     533        self.assertEqual(str(expectation.expectations), "['BAZ']")
    534534        self.assertEqual(len(expectation.warnings), 0)
    535535
     
    537537        expectation = self._tokenize('FOO1 FOO2 : bar = BAZ //Qux.')
    538538        self.assertEqual(expectation.comment, 'Qux.')
    539         self.assertEqual(str(expectation.modifiers), '[\'foo1\', \'foo2\']')
    540         self.assertEqual(str(expectation.expectations), '[\'baz\']')
     539        self.assertEqual(str(expectation.modifiers), "['FOO1', 'FOO2']")
     540        self.assertEqual(str(expectation.expectations), "['BAZ']")
    541541        self.assertEqual(len(expectation.warnings), 0)
    542542
     
    561561
    562562    def _tokenize(self, line):
    563         return TestExpectationParser._tokenize('path', line, 0)
     563        return TestExpectationParser._tokenize_line('path', line, 0)
    564564
    565565    def assert_round_trip(self, in_string, expected_string=None):
     
    570570
    571571    def assert_list_round_trip(self, in_string, expected_string=None):
    572         expectations = TestExpectationParser._tokenize_list('path', in_string)
     572        host = MockHost()
     573        parser = TestExpectationParser(host.port_factory.get('test-win-xp', None), [], allow_rebaseline_modifier=False)
     574        expectations = parser.parse('path', in_string)
    573575        if expected_string is None:
    574576            expected_string = in_string
  • trunk/Tools/Scripts/webkitpy/tool/commands/queries_unittest.py

    r121269 r126135  
    218218    def test_csv(self):
    219219        self.run_test(['failures/expected/text.html', 'failures/expected/image.html'],
    220                       ('test-win-xp,failures/expected/image.html,wontfix,image\n'
    221                        'test-win-xp,failures/expected/text.html,wontfix,text\n'),
     220                      ('test-win-xp,failures/expected/image.html,WONTFIX,IMAGE\n'
     221                       'test-win-xp,failures/expected/text.html,WONTFIX,TEXT\n'),
    222222                      csv=True)
    223223
Note: See TracChangeset for help on using the changeset viewer.