Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 10.36 KB | None | 0 0
  1. diff --git a/tools/wptrunner/wptrunner/executors/base.py b/tools/wptrunner/wptrunner/executors/base.py
  2. index 27be0c54b7..3ccca03a99 100644
  3. --- a/tools/wptrunner/wptrunner/executors/base.py
  4. +++ b/tools/wptrunner/wptrunner/executors/base.py
  5. @@ -348,6 +348,7 @@ class WdspecExecutor(TestExecutor):
  6.          success, data = WdspecRun(self.do_wdspec,
  7.                                    self.protocol.session_config,
  8.                                    test.abs_path,
  9. +                                  test.filter,
  10.                                    timeout).run()
  11.  
  12.          if success:
  13. @@ -355,9 +356,10 @@ class WdspecExecutor(TestExecutor):
  14.  
  15.          return (test.result_cls(*data), [])
  16.  
  17. -    def do_wdspec(self, session_config, path, timeout):
  18. +    def do_wdspec(self, session_config, path, filter, timeout):
  19.          harness_result = ("OK", None)
  20.          subtest_results = pytestrunner.run(path,
  21. +                                           filter,
  22.                                             self.server_config,
  23.                                             session_config,
  24.                                             timeout=timeout)
  25. @@ -388,11 +390,12 @@ class Protocol(object):
  26.  
  27.  
  28.  class WdspecRun(object):
  29. -    def __init__(self, func, session, path, timeout):
  30. +    def __init__(self, func, session, path, filter, timeout):
  31.          self.func = func
  32.          self.result = (None, None)
  33.          self.session = session
  34.          self.path = path
  35. +        self.filter = filter
  36.          self.timeout = timeout
  37.          self.result_flag = threading.Event()
  38.  
  39. @@ -414,7 +417,7 @@ class WdspecRun(object):
  40.  
  41.      def _run(self):
  42.          try:
  43. -            self.result = True, self.func(self.session, self.path, self.timeout)
  44. +            self.result = True, self.func(self.session, self.path, self.filter, self.timeout)
  45.          except (socket.timeout, IOError):
  46.              self.result = False, ("CRASH", None)
  47.          except Exception as e:
  48. diff --git a/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py b/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
  49. index 043fccb1fe..1d70b4e9c7 100644
  50. --- a/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
  51. +++ b/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
  52. @@ -23,7 +23,7 @@ def do_delayed_imports():
  53.      import pytest
  54.  
  55.  
  56. -def run(path, server_config, session_config, timeout=0):
  57. +def run(path, filter, server_config, session_config, timeout=0):
  58.      """Run Python test at ``path`` in pytest.  The provided ``session``
  59.      is exposed as a fixture available in the scope of the test functions.
  60.  
  61. @@ -52,14 +52,17 @@ def run(path, server_config, session_config, timeout=0):
  62.      # TODO(ato): Deal with timeouts
  63.  
  64.      with TemporaryDirectory() as cache:
  65. -        pytest.main(["--strict",  # turn warnings into errors
  66. -                     "--verbose",  # show each individual subtest
  67. -                     "--capture", "no",  # enable stdout/stderr from tests
  68. -                     "--basetemp", cache,  # temporary directory
  69. -                     "-p", "no:mozlog",  # use the WPT result recorder
  70. -                     "-p", "no:cacheprovider",  # disable state preservation across invocations
  71. -                     path],
  72. -                    plugins=plugins)
  73. +        cmd = ["--strict",  # turn warnings into errors
  74. +               "--verbose",  # show each individual subtest
  75. +               "--capture", "no",  # enable stdout/stderr from tests
  76. +               "--basetemp", cache,  # temporary directory
  77. +               "-p", "no:mozlog",  # use the WPT result recorder
  78. +               "-p", "no:cacheprovider",  # disable state preservation across invocations
  79. +               path]
  80. +        if filter is not None:
  81. +            cmd.extend(["-k", filter])
  82. +
  83. +        pytest.main(cmd, plugins=plugins)
  84.  
  85.      return recorder.results
  86.  
  87. diff --git a/tools/wptrunner/wptrunner/testloader.py b/tools/wptrunner/wptrunner/testloader.py
  88. index 10f3586f14..3f74b8c1db 100644
  89. --- a/tools/wptrunner/wptrunner/testloader.py
  90. +++ b/tools/wptrunner/wptrunner/testloader.py
  91. @@ -343,9 +343,13 @@ class TestFilter(object):
  92.              self.manifest = manifestinclude.IncludeManifest.create()
  93.              self.manifest.set_defaults()
  94.  
  95. +        self._test_filters = defaultdict()
  96.          if include:
  97.              self.manifest.set("skip", "true")
  98.              for item in include:
  99. +                if "::" in item:
  100. +                    item, filter = item.rsplit("::", 1)
  101. +                    self._test_filters[item] = filter
  102.                  self.manifest.add_include(test_manifests, item)
  103.  
  104.          if exclude:
  105. @@ -358,9 +362,8 @@ class TestFilter(object):
  106.              for test in tests:
  107.                  if self.manifest.include(test):
  108.                      include_tests.add(test)
  109. -
  110.              if include_tests:
  111. -                yield test_type, test_path, include_tests
  112. +                yield test_type, test_path, include_tests, self._test_filters
  113.  
  114.  class TagFilter(object):
  115.      def __init__(self, tags):
  116. @@ -486,12 +489,17 @@ class TestLoader(object):
  117.                      self._test_ids += [item.id for item in test_dict[test_type]]
  118.          return self._test_ids
  119.  
  120. -    def get_test(self, manifest_test, inherit_metadata, test_metadata):
  121. +    def get_test(self, manifest_test, inherit_metadata, test_metadata, filters):
  122.          if test_metadata is not None:
  123.              inherit_metadata.append(test_metadata)
  124.              test_metadata = test_metadata.get_test(manifest_test.id)
  125.  
  126. -        return wpttest.from_manifest(manifest_test, inherit_metadata, test_metadata)
  127. +        if manifest_test.path in filters:
  128. +            test_filter = filters[manifest_test.path]
  129. +        else:
  130. +            test_filter = None
  131. +
  132. +        return wpttest.from_manifest(manifest_test, inherit_metadata, test_metadata, test_filter)
  133.  
  134.      def load_dir_metadata(self, test_manifest, metadata_path, test_path):
  135.          rv = []
  136. @@ -523,18 +531,18 @@ class TestLoader(object):
  137.          if self.chunker is not None:
  138.              manifest_items = self.chunker(manifest_items)
  139.  
  140. -        for test_type, test_path, tests in manifest_items:
  141. +        for test_type, test_path, tests, filters in manifest_items:
  142.              manifest_file = iter(tests).next().manifest
  143.              metadata_path = self.manifests[manifest_file]["metadata_path"]
  144.              inherit_metadata, test_metadata = self.load_metadata(manifest_file, metadata_path, test_path)
  145.  
  146.              for test in iterfilter(self.meta_filters,
  147. -                                   self.iter_wpttest(inherit_metadata, test_metadata, tests)):
  148. +                                   self.iter_wpttest(inherit_metadata, test_metadata, tests, filters)):
  149.                  yield test_path, test_type, test
  150.  
  151. -    def iter_wpttest(self, inherit_metadata, test_metadata, tests):
  152. +    def iter_wpttest(self, inherit_metadata, test_metadata, tests, filters):
  153.          for manifest_test in tests:
  154. -            yield self.get_test(manifest_test, inherit_metadata, test_metadata)
  155. +            yield self.get_test(manifest_test, inherit_metadata, test_metadata, filters)
  156.  
  157.      def _load_tests(self):
  158.          """Read in the tests from the manifest file and add them to a queue"""
  159. diff --git a/tools/wptrunner/wptrunner/wpttest.py b/tools/wptrunner/wptrunner/wpttest.py
  160. index 86320f8ff8..0d1a54d7a7 100644
  161. --- a/tools/wptrunner/wptrunner/wpttest.py
  162. +++ b/tools/wptrunner/wptrunner/wpttest.py
  163. @@ -128,7 +128,7 @@ class Test(object):
  164.          return metadata
  165.  
  166.      @classmethod
  167. -    def from_manifest(cls, manifest_item, inherit_metadata, test_metadata):
  168. +    def from_manifest(cls, manifest_item, inherit_metadata, test_metadata, test_filter=None):
  169.          timeout = cls.long_timeout if manifest_item.timeout == "long" else cls.default_timeout
  170.          protocol = "https" if hasattr(manifest_item, "https") and manifest_item.https else "http"
  171.          return cls(manifest_item.source_file.tests_root,
  172. @@ -277,6 +277,7 @@ class ReftestTest(Test):
  173.                        manifest_test,
  174.                        inherit_metadata,
  175.                        test_metadata,
  176. +                      test_filter=None,
  177.                        nodes=None,
  178.                        references_seen=None):
  179.  
  180. @@ -321,8 +322,8 @@ class ReftestTest(Test):
  181.                  reference = ReftestTest.from_manifest(manifest_node,
  182.                                                        [],
  183.                                                        None,
  184. -                                                      nodes,
  185. -                                                      references_seen)
  186. +                                                      nodes=nodes,
  187. +                                                      references_seen=references_seen)
  188.              else:
  189.                  reference = ReftestTest(manifest_test.source_file.tests_root,
  190.                                          ref_url,
  191. @@ -363,6 +364,24 @@ class WdspecTest(Test):
  192.      default_timeout = 25
  193.      long_timeout = 120
  194.  
  195. +    def __init__(self, tests_root, url, inherit_metadata, test_metadata, test_filter, timeout=None, path=None, protocol="http"):
  196. +        Test.__init__(self, tests_root, url, inherit_metadata, test_metadata, timeout,
  197. +                      path, protocol)
  198. +
  199. +        self.filter = test_filter
  200. +
  201. +    @classmethod
  202. +    def from_manifest(cls, manifest_item, inherit_metadata, test_metadata, test_filter):
  203. +        timeout = cls.long_timeout if manifest_item.timeout == "long" else cls.default_timeout
  204. +        return cls(manifest_item.source_file.tests_root,
  205. +                   manifest_item.url,
  206. +                   inherit_metadata,
  207. +                   test_metadata,
  208. +                   timeout=timeout,
  209. +                   path=manifest_item.source_file.path,
  210. +                   test_filter=test_filter)
  211. +
  212. +
  213.  
  214.  manifest_test_cls = {"reftest": ReftestTest,
  215.                       "testharness": TestharnessTest,
  216. @@ -370,6 +389,6 @@ manifest_test_cls = {"reftest": ReftestTest,
  217.                       "wdspec": WdspecTest}
  218.  
  219.  
  220. -def from_manifest(manifest_test, inherit_metadata, test_metadata):
  221. +def from_manifest(manifest_test, inherit_metadata, test_metadata, test_filter):
  222.      test_cls = manifest_test_cls[manifest_test.item_type]
  223. -    return test_cls.from_manifest(manifest_test, inherit_metadata, test_metadata)
  224. +    return test_cls.from_manifest(manifest_test, inherit_metadata, test_metadata, test_filter)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement