| Index: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
|
| diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
|
| index 329d27cdf65d1d2fda5a7e2cd5f321f83c4788bc..80fe591f846d834dc0ae41483ce1cf52befe7a28 100644
|
| --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
|
| +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
|
| @@ -57,6 +57,7 @@ from webkitpy.layout_tests.port.factory import PortFactory
|
| from webkitpy.layout_tests.servers import apache_http
|
| from webkitpy.layout_tests.servers import pywebsocket
|
| from webkitpy.layout_tests.servers import wptserve
|
| +from webkitpy.w3c.wpt_manifest import WPTManifest
|
|
|
| _log = logging.getLogger(__name__)
|
|
|
| @@ -668,13 +669,9 @@ class Port(object):
|
| if not match:
|
| return []
|
| path_in_wpt = match.group(1)
|
| - all_items = self._wpt_manifest()['items']
|
| - if path_in_wpt not in all_items['reftest']:
|
| - return []
|
| - for item in all_items['reftest'][path_in_wpt]:
|
| - for ref_path_in_wpt, expectation in item[1]:
|
| - ref_absolute_path = self._filesystem.join(self.layout_tests_dir(), 'external/wpt' + ref_path_in_wpt)
|
| - reftest_list.append((expectation, ref_absolute_path))
|
| + for expectation, ref_path_in_wpt in self._wpt_manifest().extract_reference_list(path_in_wpt):
|
| + ref_absolute_path = self._filesystem.join(self.layout_tests_dir(), 'external/wpt' + ref_path_in_wpt)
|
| + reftest_list.append((expectation, ref_absolute_path))
|
| return reftest_list
|
|
|
| def tests(self, paths):
|
| @@ -723,7 +720,7 @@ class Port(object):
|
| path_in_wpt = match.group(1)[1:].replace('\\', '/') + '/' + filename
|
| else:
|
| path_in_wpt = filename
|
| - return self._manifest_items_for_path(path_in_wpt) is not None
|
| + return self._wpt_manifest().is_test_file(path_in_wpt)
|
| if 'inspector-unit' in dirname:
|
| return filesystem.splitext(filename)[1] == '.js'
|
| return Port._has_supported_extension(
|
| @@ -737,57 +734,21 @@ class Port(object):
|
| if not match:
|
| tests.append(file_path)
|
| continue
|
| - path_in_wpt = match.group(1)
|
| - manifest_items = self._manifest_items_for_path(path_in_wpt)
|
| - assert manifest_items is not None
|
| - if len(manifest_items) != 1:
|
| - continue
|
| - url = manifest_items[0][0]
|
| - if url[1:] != path_in_wpt:
|
| - # TODO(tkent): foo.any.js and bar.worker.js should be accessed
|
| - # as foo.any.html, foo.any.worker, and bar.worker with WPTServe.
|
| - continue
|
| - tests.append(file_path)
|
| + urls = self._wpt_manifest().file_path_to_url_paths(match.group(1))
|
| + for url in urls:
|
| + tests.append(file_path[0:match.start(1)] + url)
|
| return tests
|
|
|
| @memoized
|
| def _wpt_manifest(self):
|
| - path = self._filesystem.join(self.layout_tests_dir(), 'external', 'wpt', 'MANIFEST.json')
|
| - return json.loads(self._filesystem.read_text_file(path))
|
| -
|
| - def _manifest_items_for_path(self, path_in_wpt):
|
| - """Returns a manifest item for the given WPT path, or None if not found.
|
| -
|
| - The format of a manifest item depends on
|
| - https://github.com/w3c/wpt-tools/blob/master/manifest/item.py
|
| - and is assumed to be a list of the format [url, extras],
|
| - or [url, references, extras] for reftests, or None if not found.
|
| -
|
| - For most testharness tests, the returned manifest_items is expected
|
| - to look like this:: [["/some/test/path.html", {}]]
|
| - """
|
| - items = self._wpt_manifest()['items']
|
| - if path_in_wpt in items['manual']:
|
| - return items['manual'][path_in_wpt]
|
| - elif path_in_wpt in items['reftest']:
|
| - return items['reftest'][path_in_wpt]
|
| - elif path_in_wpt in items['testharness']:
|
| - return items['testharness'][path_in_wpt]
|
| - return None
|
| -
|
| - @staticmethod
|
| - def _get_extras_from_manifest_item(item):
|
| - return item[-1]
|
| + manifest_path = self._filesystem.join(self.layout_tests_dir(), 'external', 'wpt', 'MANIFEST.json')
|
| + return WPTManifest(self._filesystem.read_text_file(manifest_path))
|
|
|
| def is_slow_wpt_test(self, test_file):
|
| match = re.match(r'external/wpt/(.*)', test_file)
|
| if not match:
|
| return False
|
| - items = self._manifest_items_for_path(match.group(1))
|
| - if not items:
|
| - return False
|
| - extras = Port._get_extras_from_manifest_item(items[0])
|
| - return 'timeout' in extras and extras['timeout'] == 'long'
|
| + return self._wpt_manifest().is_slow_test(match.group(1))
|
|
|
| ALL_TEST_TYPES = ['audio', 'harness', 'pixel', 'ref', 'text', 'unknown']
|
|
|
|
|