import-w3c-tests should rely on <meta name="flags"> to detect CSS manual tests
authorfred.wang@free.fr <fred.wang@free.fr@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Jun 2018 09:18:09 +0000 (09:18 +0000)
committerfred.wang@free.fr <fred.wang@free.fr@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Jun 2018 09:18:09 +0000 (09:18 +0000)
https://bugs.webkit.org/show_bug.cgi?id=186261

Patch by Frederic Wang <fwang@igalia.com> on 2018-06-04
Reviewed by Youenn Fablet.

* Scripts/webkitpy/w3c/test_parser.py:
(TestParser.is_wpt_manualtest): Add code to detect whether a file is a manual test
from its <meta name="flags"> tags. This is based on SourceFile::content_is_css_manual from
the WPT repository.
* Scripts/webkitpy/w3c/test_parser_unittest.py: Add a test to verify whether files with
<meta name="flags"> are manual or non-manual according to CSS WG rules.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@232506 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/webkitpy/w3c/test_parser.py
Tools/Scripts/webkitpy/w3c/test_parser_unittest.py

index afd96e3..4e05bdd 100644 (file)
@@ -1,3 +1,17 @@
+2018-06-04  Frederic Wang  <fwang@igalia.com>
+
+        import-w3c-tests should rely on <meta name="flags"> to detect CSS manual tests
+        https://bugs.webkit.org/show_bug.cgi?id=186261
+
+        Reviewed by Youenn Fablet.
+
+        * Scripts/webkitpy/w3c/test_parser.py:
+        (TestParser.is_wpt_manualtest): Add code to detect whether a file is a manual test
+        from its <meta name="flags"> tags. This is based on SourceFile::content_is_css_manual from
+        the WPT repository.
+        * Scripts/webkitpy/w3c/test_parser_unittest.py: Add a test to verify whether files with
+        <meta name="flags"> are manual or non-manual according to CSS WG rules.
+
 2018-06-04  Dan Bernstein  <mitz@apple.com>
 
         Fixed building ImageDiff with the default build system in the Xcode 10 developer beta.
index 719cb8f..0afbf56 100644 (file)
@@ -138,8 +138,23 @@ class TestParser(object):
         return bool(self.test_doc.find(src=re.compile('[\'\"/]?/resources/testharness')))
 
     def is_wpt_manualtest(self):
-        """Returns whether the test is a manual test according WPT rules (i.e. file ends with -manual.htm path)."""
-        return self.filename.endswith('-manual.htm') or self.filename.endswith('-manual.html')
+        """Returns whether the test is a manual test according WPT rules."""
+        # General rule for manual test i.e. file ends with -manual.htm path
+        # See https://web-platform-tests.org/writing-tests/manual.html#requirements-for-a-manual-test
+        if self.filename.endswith('-manual.htm') or self.filename.endswith('-manual.html'):
+            return True
+
+        # Rule specific to CSS WG manual tests i.e. rely on <meta name="flags">
+        # See https://web-platform-tests.org/writing-tests/css-metadata.html#requirement-flags
+        # For further details and discussions, see the following links:
+        # https://github.com/web-platform-tests/wpt/issues/5381
+        # https://github.com/web-platform-tests/wpt/issues/5293
+        for match in self.test_doc.findAll(name='meta', attrs={'name': 'flags', 'content': True}):
+            css_flags = set(match['content'].split())
+            if bool(css_flags & {"animated", "font", "history", "interact", "paged", "speech", "userstyle"}):
+                return True
+
+        return False
 
     def is_slow_test(self):
         return any([match.name == 'meta' and match['name'] == 'timeout' for match in self.test_doc.findAll(content='long')])
index 580a991..ae8fcd8 100644 (file)
@@ -168,6 +168,31 @@ class TestParserTest(unittest.TestCase):
 
         self.assertTrue(test_info['manualtest'], 'test_info is None')
 
+    def test_analyze_css_manual_test(self):
+        """ Tests analyze_test() using a css manual test """
+
+        test_path = os.path.join(os.path.sep, 'some', 'madeup', 'path')
+        parser = TestParser(options, os.path.join(test_path, 'somefile.html'))
+
+        for content in ["", "flag1", "flag1 flag2", "flag1 flag2 flag3", "asis"]:
+            test_html = """
+<head>
+  <meta name="flags" content="%s">
+</head>""" % content
+            test_info = parser.analyze_test(test_contents=test_html)
+            self.assertEqual(test_info, None, 'test_info should be None')
+
+        for flag in ["animated", "font", "history", "interact", "paged", "speech", "userstyle"]:
+            test_html = """
+<head>
+  <meta name="flags" content="flag1 flag2">
+  <meta name="flags" content="flag3 %s flag4 flag5">
+  <meta name="flags" content="flag6">
+</head>
+""" % flag
+            test_info = parser.analyze_test(test_contents=test_html)
+            self.assertTrue(test_info['manualtest'], 'test with CSS flag %s should be manual' % flag)
+
     def test_analyze_pixel_test_all_true(self):
         """ Tests analyze_test() using a test that is neither a reftest or jstest with all=False """