Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/tools/wptrunner/wptrunner/executors/base.py b/tools/wptrunner/wptrunner/executors/base.py
- index 27be0c54b7..3ccca03a99 100644
- --- a/tools/wptrunner/wptrunner/executors/base.py
- +++ b/tools/wptrunner/wptrunner/executors/base.py
- @@ -348,6 +348,7 @@ class WdspecExecutor(TestExecutor):
- success, data = WdspecRun(self.do_wdspec,
- self.protocol.session_config,
- test.abs_path,
- + test.filter,
- timeout).run()
- if success:
- @@ -355,9 +356,10 @@ class WdspecExecutor(TestExecutor):
- return (test.result_cls(*data), [])
- - def do_wdspec(self, session_config, path, timeout):
- + def do_wdspec(self, session_config, path, filter, timeout):
- harness_result = ("OK", None)
- subtest_results = pytestrunner.run(path,
- + filter,
- self.server_config,
- session_config,
- timeout=timeout)
- @@ -388,11 +390,12 @@ class Protocol(object):
- class WdspecRun(object):
- - def __init__(self, func, session, path, timeout):
- + def __init__(self, func, session, path, filter, timeout):
- self.func = func
- self.result = (None, None)
- self.session = session
- self.path = path
- + self.filter = filter
- self.timeout = timeout
- self.result_flag = threading.Event()
- @@ -414,7 +417,7 @@ class WdspecRun(object):
- def _run(self):
- try:
- - self.result = True, self.func(self.session, self.path, self.timeout)
- + self.result = True, self.func(self.session, self.path, self.filter, self.timeout)
- except (socket.timeout, IOError):
- self.result = False, ("CRASH", None)
- except Exception as e:
- diff --git a/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py b/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
- index 043fccb1fe..1d70b4e9c7 100644
- --- a/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
- +++ b/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
- @@ -23,7 +23,7 @@ def do_delayed_imports():
- import pytest
- -def run(path, server_config, session_config, timeout=0):
- +def run(path, filter, server_config, session_config, timeout=0):
- """Run Python test at ``path`` in pytest. The provided ``session``
- is exposed as a fixture available in the scope of the test functions.
- @@ -52,14 +52,17 @@ def run(path, server_config, session_config, timeout=0):
- # TODO(ato): Deal with timeouts
- with TemporaryDirectory() as cache:
- - pytest.main(["--strict", # turn warnings into errors
- - "--verbose", # show each individual subtest
- - "--capture", "no", # enable stdout/stderr from tests
- - "--basetemp", cache, # temporary directory
- - "-p", "no:mozlog", # use the WPT result recorder
- - "-p", "no:cacheprovider", # disable state preservation across invocations
- - path],
- - plugins=plugins)
- + cmd = ["--strict", # turn warnings into errors
- + "--verbose", # show each individual subtest
- + "--capture", "no", # enable stdout/stderr from tests
- + "--basetemp", cache, # temporary directory
- + "-p", "no:mozlog", # use the WPT result recorder
- + "-p", "no:cacheprovider", # disable state preservation across invocations
- + path]
- + if filter is not None:
- + cmd.extend(["-k", filter])
- +
- + pytest.main(cmd, plugins=plugins)
- return recorder.results
- diff --git a/tools/wptrunner/wptrunner/testloader.py b/tools/wptrunner/wptrunner/testloader.py
- index 10f3586f14..3f74b8c1db 100644
- --- a/tools/wptrunner/wptrunner/testloader.py
- +++ b/tools/wptrunner/wptrunner/testloader.py
- @@ -343,9 +343,13 @@ class TestFilter(object):
- self.manifest = manifestinclude.IncludeManifest.create()
- self.manifest.set_defaults()
- + self._test_filters = defaultdict()
- if include:
- self.manifest.set("skip", "true")
- for item in include:
- + if "::" in item:
- + item, filter = item.rsplit("::", 1)
- + self._test_filters[item] = filter
- self.manifest.add_include(test_manifests, item)
- if exclude:
- @@ -358,9 +362,8 @@ class TestFilter(object):
- for test in tests:
- if self.manifest.include(test):
- include_tests.add(test)
- -
- if include_tests:
- - yield test_type, test_path, include_tests
- + yield test_type, test_path, include_tests, self._test_filters
- class TagFilter(object):
- def __init__(self, tags):
- @@ -486,12 +489,17 @@ class TestLoader(object):
- self._test_ids += [item.id for item in test_dict[test_type]]
- return self._test_ids
- - def get_test(self, manifest_test, inherit_metadata, test_metadata):
- + def get_test(self, manifest_test, inherit_metadata, test_metadata, filters):
- if test_metadata is not None:
- inherit_metadata.append(test_metadata)
- test_metadata = test_metadata.get_test(manifest_test.id)
- - return wpttest.from_manifest(manifest_test, inherit_metadata, test_metadata)
- + if manifest_test.path in filters:
- + test_filter = filters[manifest_test.path]
- + else:
- + test_filter = None
- +
- + return wpttest.from_manifest(manifest_test, inherit_metadata, test_metadata, test_filter)
- def load_dir_metadata(self, test_manifest, metadata_path, test_path):
- rv = []
- @@ -523,18 +531,18 @@ class TestLoader(object):
- if self.chunker is not None:
- manifest_items = self.chunker(manifest_items)
- - for test_type, test_path, tests in manifest_items:
- + for test_type, test_path, tests, filters in manifest_items:
- manifest_file = iter(tests).next().manifest
- metadata_path = self.manifests[manifest_file]["metadata_path"]
- inherit_metadata, test_metadata = self.load_metadata(manifest_file, metadata_path, test_path)
- for test in iterfilter(self.meta_filters,
- - self.iter_wpttest(inherit_metadata, test_metadata, tests)):
- + self.iter_wpttest(inherit_metadata, test_metadata, tests, filters)):
- yield test_path, test_type, test
- - def iter_wpttest(self, inherit_metadata, test_metadata, tests):
- + def iter_wpttest(self, inherit_metadata, test_metadata, tests, filters):
- for manifest_test in tests:
- - yield self.get_test(manifest_test, inherit_metadata, test_metadata)
- + yield self.get_test(manifest_test, inherit_metadata, test_metadata, filters)
- def _load_tests(self):
- """Read in the tests from the manifest file and add them to a queue"""
- diff --git a/tools/wptrunner/wptrunner/wpttest.py b/tools/wptrunner/wptrunner/wpttest.py
- index 86320f8ff8..0d1a54d7a7 100644
- --- a/tools/wptrunner/wptrunner/wpttest.py
- +++ b/tools/wptrunner/wptrunner/wpttest.py
- @@ -128,7 +128,7 @@ class Test(object):
- return metadata
- @classmethod
- - def from_manifest(cls, manifest_item, inherit_metadata, test_metadata):
- + def from_manifest(cls, manifest_item, inherit_metadata, test_metadata, test_filter=None):
- timeout = cls.long_timeout if manifest_item.timeout == "long" else cls.default_timeout
- protocol = "https" if hasattr(manifest_item, "https") and manifest_item.https else "http"
- return cls(manifest_item.source_file.tests_root,
- @@ -277,6 +277,7 @@ class ReftestTest(Test):
- manifest_test,
- inherit_metadata,
- test_metadata,
- + test_filter=None,
- nodes=None,
- references_seen=None):
- @@ -321,8 +322,8 @@ class ReftestTest(Test):
- reference = ReftestTest.from_manifest(manifest_node,
- [],
- None,
- - nodes,
- - references_seen)
- + nodes=nodes,
- + references_seen=references_seen)
- else:
- reference = ReftestTest(manifest_test.source_file.tests_root,
- ref_url,
- @@ -363,6 +364,24 @@ class WdspecTest(Test):
- default_timeout = 25
- long_timeout = 120
- + def __init__(self, tests_root, url, inherit_metadata, test_metadata, test_filter, timeout=None, path=None, protocol="http"):
- + Test.__init__(self, tests_root, url, inherit_metadata, test_metadata, timeout,
- + path, protocol)
- +
- + self.filter = test_filter
- +
- + @classmethod
- + def from_manifest(cls, manifest_item, inherit_metadata, test_metadata, test_filter):
- + timeout = cls.long_timeout if manifest_item.timeout == "long" else cls.default_timeout
- + return cls(manifest_item.source_file.tests_root,
- + manifest_item.url,
- + inherit_metadata,
- + test_metadata,
- + timeout=timeout,
- + path=manifest_item.source_file.path,
- + test_filter=test_filter)
- +
- +
- manifest_test_cls = {"reftest": ReftestTest,
- "testharness": TestharnessTest,
- @@ -370,6 +389,6 @@ manifest_test_cls = {"reftest": ReftestTest,
- "wdspec": WdspecTest}
- -def from_manifest(manifest_test, inherit_metadata, test_metadata):
- +def from_manifest(manifest_test, inherit_metadata, test_metadata, test_filter):
- test_cls = manifest_test_cls[manifest_test.item_type]
- - return test_cls.from_manifest(manifest_test, inherit_metadata, test_metadata)
- + return test_cls.from_manifest(manifest_test, inherit_metadata, test_metadata, test_filter)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement