From fef938d8cdf7139084384fd74b27e03abf61ae4f Mon Sep 17 00:00:00 2001 From: WPT Sync Bot Date: Thu, 8 Oct 2020 08:19:53 +0000 Subject: [PATCH] Update web-platform-tests to revision cd19ab5a91cc07cb42923c72cfad7c0af8ef8fbc --- .../CSS2/floats/hit-test-floats-002.html.ini | 4 - .../CSS2/floats/hit-test-floats-005.html.ini | 4 + .../cssom-view/elementFromPoint-001.html.ini | 4 - .../cssom-view/elementFromPosition.html.ini | 3 - .../matchMedia-display-none-iframe.html.ini | 2 + .../fetch/content-type/response.window.js.ini | 18 +- .../nosniff/parsing-nosniff.window.js.ini | 3 - .../traverse_the_history_4.html.ini} | 2 +- .../supported-elements.html.ini | 3 +- .../iframe_sandbox_popups_escaping-1.html.ini | 2 +- ...rame_sandbox_popups_nonescaping-2.html.ini | 2 +- ...rame_sandbox_popups_nonescaping-3.html.ini | 3 +- .../script-onerror-insertion-point-2.html.ini | 2 - ...le-event-handler-settings-objects.html.ini | 3 + .../realtimeanalyser-fft-scaling.html.ini | 1 + .../audiocontext-not-fully-active.html.ini | 1 - .../transferred-buffer-output.html.ini | 4 + .../webmessaging/with-ports/017.html.ini | 5 - .../Worker/Worker-constructor.html.ini | 2 - tests/wpt/metadata/MANIFEST.json | 225 ++++-- .../CSS2/floats/hit-test-floats-002.html.ini | 4 - .../CSS2/floats/hit-test-floats-005.html.ini | 4 + .../cssom-view/elementFromPoint-001.html.ini | 4 - .../cssom-view/elementFromPosition.html.ini | 3 - .../matchMedia-display-none-iframe.html.ini | 2 + .../fetch/content-type/response.window.js.ini | 18 +- .../nosniff/parsing-nosniff.window.js.ini | 3 - .../traverse_the_history_4.html.ini} | 2 +- .../supported-elements.html.ini | 3 +- .../iframe_sandbox_popups_escaping-1.html.ini | 2 +- ...rame_sandbox_popups_nonescaping-2.html.ini | 2 +- ...rame_sandbox_popups_nonescaping-3.html.ini | 3 +- .../script-onerror-insertion-point-2.html.ini | 2 - ...le-event-handler-settings-objects.html.ini | 3 + .../realtimeanalyser-fft-scaling.html.ini | 1 + .../audiocontext-not-fully-active.html.ini | 1 - .../transferred-buffer-output.html.ini | 4 + .../webmessaging/with-ports/017.html.ini | 5 - .../Worker/Worker-constructor.html.ini | 2 - .../content-visibility-075-ref.html | 4 +- .../content-visibility-075.html | 4 +- .../content-visibility-076-ref.html | 4 +- .../content-visibility-076.html | 4 +- .../css-multicol/multicol-span-all-015.html | 16 + ...rash.html => overflow-clip-001-crash.html} | 0 .../css-overflow/overflow-clip-002-crash.html | 12 + .../overflow-clip-cant-scroll-ref.html | 15 + .../overflow-clip-cant-scroll.html | 46 ++ .../interfaces/remote-playback.idl | 6 +- .../interfaces/sanitizer-api.tentative.idl | 16 +- .../{wake-lock.idl => screen-wake-lock.idl} | 0 ...ild-shift-with-parent-overflow-hidden.html | 2 +- ...ild-shift-with-parent-overflow-x-clip.html | 30 + .../child-shift-with-parent.html | 8 +- .../MediaRecorder-error.html | 4 +- .../MediaRecorder-stop.html | 38 ++ .../sanitizer-config.tentative.html | 70 +- .../sanitizer-sanitize.tentative.html | 2 - .../sanitizer-sanitizeToString.tentative.html | 2 - .../sanitizer-api/support/testcases.sub.js | 32 +- .../idlharness.https.window.js | 2 +- .../streams/transferable/readable-stream.html | 255 +++++++ .../streams/transferable/reason.html | 132 ++++ .../transferable/resources/echo-iframe.html | 7 + .../transferable/resources/echo-worker.js | 2 + .../streams/transferable/resources/helpers.js | 121 ++++ .../resources/receiving-shared-worker.js | 11 + .../resources/receiving-worker.js | 7 + .../resources/sending-shared-worker.js | 12 + .../transferable/resources/sending-worker.js | 5 + .../resources/service-worker-iframe.html | 39 ++ .../transferable/resources/service-worker.js | 30 + .../transferable/service-worker.https.html | 28 + .../streams/transferable/shared-worker.html | 25 + .../transferable/transform-stream.html | 104 +++ .../streams/transferable/window.html | 60 ++ .../streams/transferable/worker.html | 76 +++ .../streams/transferable/writable-stream.html | 136 ++++ .../wpt/web-platform-tests/tools/lint/lint.py | 17 +- .../tools/lint/tests/test_lint.py | 7 +- .../web-platform-tests/tools/serve/serve.py | 10 +- .../tools/wptserve/tests/functional/base.py | 26 +- .../tests/functional/test_handlers.py | 21 +- .../tools/wptserve/wptserve/handlers.py | 78 ++- .../transferred-buffer-output.html | 107 +++ .../web-platform-tests/webrtc-quic/META.yml | 5 - .../webrtc-quic/RTCQuicStream-helper.js | 98 --- .../webrtc-quic/RTCQuicStream.https.html | 646 ------------------ .../webrtc-quic/RTCQuicTransport-helper.js | 69 -- .../webrtc-quic/RTCQuicTransport.https.html | 399 ----------- 90 files changed, 1701 insertions(+), 1510 deletions(-) delete mode 100644 tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini delete mode 100644 tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini rename tests/wpt/{metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini => metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini} (71%) delete mode 100644 tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini create mode 100644 tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-convolvernode-interface/transferred-buffer-output.html.ini delete mode 100644 tests/wpt/metadata-layout-2020/webmessaging/with-ports/017.html.ini delete mode 100644 tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini delete mode 100644 tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini create mode 100644 tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini delete mode 100644 tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini create mode 100644 tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini rename tests/wpt/{metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini => metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini} (71%) delete mode 100644 tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini create mode 100644 tests/wpt/metadata/webaudio/the-audio-api/the-convolvernode-interface/transferred-buffer-output.html.ini delete mode 100644 tests/wpt/metadata/webmessaging/with-ports/017.html.ini delete mode 100644 tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini create mode 100644 tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-015.html rename tests/wpt/web-platform-tests/css/css-overflow/{overflow-clip-crash.html => overflow-clip-001-crash.html} (100%) create mode 100644 tests/wpt/web-platform-tests/css/css-overflow/overflow-clip-002-crash.html create mode 100644 tests/wpt/web-platform-tests/css/css-overflow/overflow-clip-cant-scroll-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-overflow/overflow-clip-cant-scroll.html rename tests/wpt/web-platform-tests/interfaces/{wake-lock.idl => screen-wake-lock.idl} (100%) create mode 100644 tests/wpt/web-platform-tests/layout-instability/child-shift-with-parent-overflow-x-clip.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/readable-stream.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/reason.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/echo-iframe.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/echo-worker.js create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/helpers.js create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/receiving-shared-worker.js create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/receiving-worker.js create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/sending-shared-worker.js create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/sending-worker.js create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/service-worker-iframe.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/resources/service-worker.js create mode 100644 tests/wpt/web-platform-tests/streams/transferable/service-worker.https.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/shared-worker.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/transform-stream.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/window.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/worker.html create mode 100644 tests/wpt/web-platform-tests/streams/transferable/writable-stream.html create mode 100644 tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/transferred-buffer-output.html delete mode 100644 tests/wpt/web-platform-tests/webrtc-quic/META.yml delete mode 100644 tests/wpt/web-platform-tests/webrtc-quic/RTCQuicStream-helper.js delete mode 100644 tests/wpt/web-platform-tests/webrtc-quic/RTCQuicStream.https.html delete mode 100644 tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport-helper.js delete mode 100644 tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport.https.html diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini deleted file mode 100644 index f64b45fea6b..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-002.html] - [Hit test float] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini new file mode 100644 index 00000000000..baa9f1a7541 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-005.html] + [Miss clipped float] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini deleted file mode 100644 index e38782d8c85..00000000000 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[elementFromPoint-001.html] - [CSSOM View - 5 - extensions to the Document interface] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini index 23c61ede1a1..c131078eace 100644 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini @@ -17,6 +17,3 @@ [test the top of layer] expected: FAIL - [test some point of the element: top left corner] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini new file mode 100644 index 00000000000..e6e1f29e274 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini @@ -0,0 +1,2 @@ +[matchMedia-display-none-iframe.html] + expected: ERROR diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini index ee0dec816f3..03edd399d2b 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini @@ -312,12 +312,6 @@ [Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK] expected: NOTRUN - [ diff --git a/tests/wpt/web-platform-tests/streams/transferable/worker.html b/tests/wpt/web-platform-tests/streams/transferable/worker.html new file mode 100644 index 00000000000..c5dc9fc62f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/streams/transferable/worker.html @@ -0,0 +1,76 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/streams/transferable/writable-stream.html b/tests/wpt/web-platform-tests/streams/transferable/writable-stream.html new file mode 100644 index 00000000000..adc6f457c27 --- /dev/null +++ b/tests/wpt/web-platform-tests/streams/transferable/writable-stream.html @@ -0,0 +1,136 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 5027da70577..38225ec9588 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -957,6 +957,8 @@ def create_parser(): "working directory, not just files that changed") parser.add_argument("--github-checks-text-file", type=ensure_text, help="Path to GitHub checks output file for Taskcluster runs") + parser.add_argument("-j", "--jobs", type=int, default=0, + help="Level to parallelism to use (defaults to 0, which detects the number of CPUs)") return parser @@ -984,18 +986,23 @@ def main(**kwargs_str): github_checks_outputter = get_gh_checks_outputter(kwargs["github_checks_text_file"]) - return lint(repo_root, paths, output_format, ignore_glob, github_checks_outputter) + jobs = kwargs.get("jobs", 0) + + return lint(repo_root, paths, output_format, ignore_glob, github_checks_outputter, jobs) # best experimental guess at a decent cut-off for using the parallel path MIN_FILES_FOR_PARALLEL = 80 -def lint(repo_root, paths, output_format, ignore_glob=None, github_checks_outputter=None): - # type: (Text, List[Text], Text, Optional[List[Text]], Optional[GitHubChecksOutputter]) -> int +def lint(repo_root, paths, output_format, ignore_glob=None, github_checks_outputter=None, jobs=0): + # type: (Text, List[Text], Text, Optional[List[Text]], Optional[GitHubChecksOutputter], int) -> int error_count = defaultdict(int) # type: Dict[Text, int] last = None + if jobs == 0: + jobs = multiprocessing.cpu_count() + with io.open(os.path.join(repo_root, "lint.ignore"), "r") as f: ignorelist, skipped_files = parse_ignorelist(f) @@ -1053,8 +1060,8 @@ def lint(repo_root, paths, output_format, ignore_glob=None, github_checks_output paths = [p for p in paths if p not in skip] - if len(to_check_content) >= MIN_FILES_FOR_PARALLEL: - pool = multiprocessing.Pool() + if jobs > 1 and len(to_check_content) >= MIN_FILES_FOR_PARALLEL: + pool = multiprocessing.Pool(jobs) # submit this job first, as it's the longest running all_paths_result = pool.apply_async(check_all_paths, (repo_root, paths)) # each item tends to be quick, so pass things in large chunks to avoid too much IPC overhead diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py index e9925180f20..55dbbe92dfc 100644 --- a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py @@ -531,7 +531,8 @@ def test_main_with_args(): for x in ['a', 'b', 'c']], "normal", None, - None) + None, + 0) finally: sys.argv = orig_argv @@ -543,7 +544,7 @@ def test_main_no_args(): with _mock_lint('lint', return_value=True) as m: with _mock_lint('changed_files', return_value=['foo', 'bar']): lint_mod.main(**vars(create_parser().parse_args())) - m.assert_called_once_with(repo_root, ['foo', 'bar'], "normal", None, None) + m.assert_called_once_with(repo_root, ['foo', 'bar'], "normal", None, None, 0) finally: sys.argv = orig_argv @@ -555,6 +556,6 @@ def test_main_all(): with _mock_lint('lint', return_value=True) as m: with _mock_lint('all_filesystem_paths', return_value=['foo', 'bar']): lint_mod.main(**vars(create_parser().parse_args())) - m.assert_called_once_with(repo_root, ['foo', 'bar'], "normal", None, None) + m.assert_called_once_with(repo_root, ['foo', 'bar'], "normal", None, None, 0) finally: sys.argv = orig_argv diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py index 8243acc5eb8..b1b9e931317 100644 --- a/tests/wpt/web-platform-tests/tools/serve/serve.py +++ b/tests/wpt/web-platform-tests/tools/serve/serve.py @@ -73,7 +73,9 @@ class WrapperHandler(object): self.handler(request, response) def handle_request(self, request, response): - for header_name, header_value in self.headers: + headers = self.headers + handlers.load_headers( + request, self._get_filesystem_path(request)) + for header_name, header_value in headers: response.headers.set(header_name, header_value) self.check_exposure(request) @@ -111,13 +113,17 @@ class WrapperHandler(object): path = replace_end(path, src, dest) return path + def _get_filesystem_path(self, request): + """Get the path of the underlying resource file on disk.""" + return self._get_path(filesystem_path(self.base_path, request, self.url_base), False) + def _get_metadata(self, request): """Get an iterator over script metadata based on // META comments in the associated js file. :param request: The Request being processed. """ - path = self._get_path(filesystem_path(self.base_path, request, self.url_base), False) + path = self._get_filesystem_path(request) try: with open(path, "rb") as f: for key, value in read_script_metadata(f, js_meta_re): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py index 8b34eb7cd0c..d3ffff61762 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py @@ -85,6 +85,7 @@ class TestUsingServer(unittest.TestCase): else: assert resp.info()[name] == ", ".join(values) + @pytest.mark.skipif(not wptserve.utils.http2_compatible(), reason="h2 server only works in python 2.7.15") class TestUsingH2Server: def setup_method(self, test_method): @@ -114,36 +115,39 @@ class TestWrapperHandlerUsingServer(TestUsingServer): the html file. This class extends the TestUsingServer and do some some extra work: it tries to generate the dummy .js file in setUp and remove it in tearDown.''' - dummy_js_files = {} + dummy_files = {} - def gen_js_file(self, filename, empty=True, content=b''): - self.remove_js_file(filename) + def gen_file(self, filename, empty=True, content=b''): + self.remove_file(filename) with open(filename, 'wb') as fp: if not empty: fp.write(content) - def remove_js_file(self, filename): + def remove_file(self, filename): if os.path.exists(filename): os.remove(filename) def setUp(self): super(TestWrapperHandlerUsingServer, self).setUp() - for filename, content in self.dummy_js_files.items(): + for filename, content in self.dummy_files.items(): filepath = os.path.join(doc_root, filename) if content == '': - self.gen_js_file(filepath) + self.gen_file(filepath) else: - self.gen_js_file(filepath, False, content) + self.gen_file(filepath, False, content) - def run_wrapper_test(self, req_file, header_data, wrapper_handler): + def run_wrapper_test(self, req_file, content_type, wrapper_handler, + headers=None): route = ('GET', req_file, wrapper_handler()) self.server.router.register(*route) resp = self.request(route[1]) self.assertEqual(200, resp.getcode()) - self.assertEqual(header_data, resp.info()['Content-Type']) + self.assertEqual(content_type, resp.info()['Content-Type']) + for key, val in headers or []: + self.assertEqual(val, resp.info()[key]) with open(os.path.join(doc_root, req_file), 'rb') as fp: self.assertEqual(fp.read(), resp.read()) @@ -151,6 +155,6 @@ class TestWrapperHandlerUsingServer(TestUsingServer): def tearDown(self): super(TestWrapperHandlerUsingServer, self).tearDown() - for filename, _ in self.dummy_js_files.items(): + for filename, _ in self.dummy_files.items(): filepath = os.path.join(doc_root, filename) - self.remove_js_file(filepath) + self.remove_file(filepath) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py index 965a214f166..7866e641e6a 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py @@ -13,6 +13,7 @@ from .base import TestWrapperHandlerUsingServer from serve import serve + class TestFileHandler(TestUsingServer): def test_GET(self): resp = self.request("/document.txt") @@ -388,8 +389,8 @@ class TestH2Handler(TestUsingH2Server): class TestWorkersHandler(TestWrapperHandlerUsingServer): - dummy_js_files = {'foo.worker.js': b'', - 'foo.any.js': b''} + dummy_files = {'foo.worker.js': b'', + 'foo.any.js': b''} def test_any_worker_html(self): self.run_wrapper_test('foo.any.worker.html', @@ -401,7 +402,7 @@ class TestWorkersHandler(TestWrapperHandlerUsingServer): class TestWindowHandler(TestWrapperHandlerUsingServer): - dummy_js_files = {'foo.window.js': b''} + dummy_files = {'foo.window.js': b''} def test_window_html(self): self.run_wrapper_test('foo.window.html', @@ -409,15 +410,19 @@ class TestWindowHandler(TestWrapperHandlerUsingServer): class TestAnyHtmlHandler(TestWrapperHandlerUsingServer): - dummy_js_files = {'foo.any.js': b''} + dummy_files = {'foo.any.js': b'', + 'foo.any.js.headers': b'X-Foo: 1', + '__dir__.headers': b'X-Bar: 2'} def test_any_html(self): self.run_wrapper_test('foo.any.html', - 'text/html', serve.AnyHtmlHandler) + 'text/html', + serve.AnyHtmlHandler, + headers=[('X-Foo', '1'), ('X-Bar', '2')]) class TestSharedWorkersHandler(TestWrapperHandlerUsingServer): - dummy_js_files = {'foo.any.js': b'// META: global=sharedworker\n'} + dummy_files = {'foo.any.js': b'// META: global=sharedworker\n'} def test_any_sharedworkers_html(self): self.run_wrapper_test('foo.any.sharedworker.html', @@ -425,7 +430,7 @@ class TestSharedWorkersHandler(TestWrapperHandlerUsingServer): class TestServiceWorkersHandler(TestWrapperHandlerUsingServer): - dummy_js_files = {'foo.any.js': b'// META: global=serviceworker\n'} + dummy_files = {'foo.any.js': b'// META: global=serviceworker\n'} def test_serviceworker_html(self): self.run_wrapper_test('foo.any.serviceworker.html', @@ -433,7 +438,7 @@ class TestServiceWorkersHandler(TestWrapperHandlerUsingServer): class TestAnyWorkerHandler(TestWrapperHandlerUsingServer): - dummy_js_files = {'bar.any.js': b''} + dummy_files = {'bar.any.js': b''} def test_any_work_js(self): self.run_wrapper_test('bar.any.worker.js', 'text/javascript', diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py index 6677ab394b7..d1e9614c031 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py @@ -32,7 +32,6 @@ def guess_content_type(path): return "application/octet-stream" - def filesystem_path(base_path, request, url_base="/"): if base_path is None: base_path = request.doc_root @@ -53,6 +52,7 @@ def filesystem_path(base_path, request, url_base="/"): return new_path + class DirectoryHandler(object): def __init__(self, base_path=None, url_base="/"): self.base_path = base_path @@ -121,6 +121,7 @@ class DirectoryHandler(object): {"link": link, "name": escape(item), "class": class_, "headers": dot_headers_markup}) + def parse_qs(qs): """Parse a query string given as a string argument (data of type application/x-www-form-urlencoded). Data are returned as a dictionary. The @@ -140,7 +141,12 @@ def parse_qs(qs): rv[name].append(value) return dict(rv) + def wrap_pipeline(path, request, response): + """Applies pipelines to a response. + + Pipelines are specified in the filename (.sub.) or the query param (?pipe). + """ query = parse_qs(request.url_parts.query) pipe_string = "" @@ -161,6 +167,36 @@ def wrap_pipeline(path, request, response): return response +def load_headers(request, path): + """Loads headers from files for a given path. + + Attempts to load both the neighbouring __dir__{.sub}.headers and + PATH{.sub}.headers (applying template substitution if needed); results are + concatenated in that order. + """ + def _load(request, path): + headers_path = path + ".sub.headers" + if os.path.exists(headers_path): + use_sub = True + else: + headers_path = path + ".headers" + use_sub = False + + try: + with open(headers_path, "rb") as headers_file: + data = headers_file.read() + except IOError: + return [] + else: + if use_sub: + data = template(request, data, escape_type="none") + return [tuple(item.strip() for item in line.split(b":", 1)) + for line in data.splitlines() if line] + + return (_load(request, os.path.join(os.path.dirname(path), "__dir__")) + + _load(request, path)) + + class FileHandler(object): def __init__(self, base_path=None, url_base="/"): self.base_path = base_path @@ -197,33 +233,13 @@ class FileHandler(object): raise HTTPException(404) def get_headers(self, request, path): - rv = (self.load_headers(request, os.path.join(os.path.dirname(path), "__dir__")) + - self.load_headers(request, path)) + rv = load_headers(request, path) if not any(key.lower() == b"content-type" for (key, _) in rv): rv.insert(0, (b"Content-Type", guess_content_type(path).encode("ascii"))) return rv - def load_headers(self, request, path): - headers_path = path + ".sub.headers" - if os.path.exists(headers_path): - use_sub = True - else: - headers_path = path + ".headers" - use_sub = False - - try: - with open(headers_path, "rb") as headers_file: - data = headers_file.read() - except IOError: - return [] - else: - if use_sub: - data = template(request, data, escape_type="none") - return [tuple(item.strip() for item in line.split(b":", 1)) - for line in data.splitlines() if line] - def get_data(self, response, path, byte_ranges): """Return either the handle to a file, or a string containing the content of a chunk of the file, if we have a range request.""" @@ -312,7 +328,6 @@ class PythonScriptHandler(object): self._set_path_and_load_file(request, response, func) - def frame_handler(self, request): """ This creates a FunctionHandler with one or more of the handling functions. @@ -340,8 +355,10 @@ class PythonScriptHandler(object): return handler return self._set_path_and_load_file(request, None, func) + python_script_handler = PythonScriptHandler() + class FunctionHandler(object): def __init__(self, func): self.func = func @@ -370,10 +387,11 @@ class FunctionHandler(object): wrap_pipeline('', request, response) -#The generic name here is so that this can be used as a decorator +# The generic name here is so that this can be used as a decorator def handler(func): return FunctionHandler(func) + class JsonHandler(object): def __init__(self, func): self.func = func @@ -395,9 +413,11 @@ class JsonHandler(object): response.headers.set("Content-Length", length) return value + def json_handler(func): return JsonHandler(func) + class AsIsHandler(object): def __init__(self, base_path=None, url_base="/"): self.base_path = base_path @@ -414,8 +434,10 @@ class AsIsHandler(object): except IOError: raise HTTPException(404) + as_is_handler = AsIsHandler() + class BasicAuthHandler(object): def __init__(self, handler, user, password): """ @@ -442,8 +464,10 @@ class BasicAuthHandler(object): return response return self.handler(request, response) + basic_auth_handler = BasicAuthHandler(file_handler, None, None) + class ErrorHandler(object): def __init__(self, status): self.status = status @@ -454,7 +478,7 @@ class ErrorHandler(object): class StringHandler(object): def __init__(self, data, content_type, **headers): - """Hander that reads a file from a path and substitutes some fixed data + """Handler that returns a fixed data string and headers :param data: String to use :param content_type: Content type header to server the response with @@ -478,7 +502,9 @@ class StringHandler(object): class StaticHandler(StringHandler): def __init__(self, path, format_args, content_type, **headers): - """Hander that reads a file from a path and substitutes some fixed data + """Handler that reads a file from a path and substitutes some fixed data + + Note that *.headers files have no effect in this handler. :param path: Path to the template file to use :param format_args: Dictionary of values to substitute into the template file diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/transferred-buffer-output.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/transferred-buffer-output.html new file mode 100644 index 00000000000..e37a98c3861 --- /dev/null +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/transferred-buffer-output.html @@ -0,0 +1,107 @@ + + + + + Test Convolver Output with Transferred Buffer + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/webrtc-quic/META.yml b/tests/wpt/web-platform-tests/webrtc-quic/META.yml deleted file mode 100644 index 740c8d2fe84..00000000000 --- a/tests/wpt/web-platform-tests/webrtc-quic/META.yml +++ /dev/null @@ -1,5 +0,0 @@ -spec: https://github.com/w3c/webrtc-quic -suggested_reviewers: - - aboba - - henbos - - steveanton diff --git a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicStream-helper.js b/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicStream-helper.js deleted file mode 100644 index 5e1f6030bd8..00000000000 --- a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicStream-helper.js +++ /dev/null @@ -1,98 +0,0 @@ -'use strict'; - -// This file depends on RTCQuicTransport-helper.js which should be loaded from -// the main HTML file. -// The following helper methods are called from RTCQuicTransport-helper.js: -// makeTwoConnectedQuicTransports - -// Run a test function for as many ways as an RTCQuicStream can transition to -// the 'closed' state. -// |test_func| will be called with the test as the first argument and the closed -// RTCQuicStream as the second argument. -function closed_stream_test(test_func, description) { - promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - const localStream = localQuicTransport.createStream(); - localStream.reset(); - assert_equals(localStream.state, 'closed'); - return test_func(t, localStream); - }, 'Stream closed by local reset(): ' + description); - - promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - const localStream = localQuicTransport.createStream(); - localStream.write({ data: new Uint8Array(1) }); - const remoteWatcher = - new EventWatcher(t, remoteQuicTransport, 'quicstream'); - const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); - localStream.reset(); - const remoteStreamWatcher = - new EventWatcher(t, remoteStream, 'statechange'); - await remoteStreamWatcher.wait_for('statechange'); - assert_equals(remoteStream.state, 'closed'); - return test_func(t, remoteStream); - }, 'Stream closed by remote reset(): ' + description); - - promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - const localStream = localQuicTransport.createStream(); - localStream.write({ finish: true }); - const remoteWatcher = - new EventWatcher(t, remoteQuicTransport, 'quicstream'); - const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); - remoteStream.write({ finish: true }); - await localStream.waitForReadable(localStream.maxReadBufferedAmount); - assert_object_equals( - localStream.readInto(new Uint8Array(10)), - { amount: 0, finished: true }); - assert_equals(localStream.state, 'closed'); - return test_func(t, localStream); - }, 'Stream closed by writing a finish, followed by reading remote finish: ' + - description); - - promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - const localStream = localQuicTransport.createStream(); - localStream.write({ finish: true }); - const remoteWatcher = - new EventWatcher(t, remoteQuicTransport, 'quicstream'); - const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); - await remoteStream.waitForReadable(10); - assert_object_equals( - remoteStream.readInto(new Uint8Array(10)), - { amount: 0, finished: true }); - remoteStream.write({ finish: true }); - assert_equals(remoteStream.state, 'closed'); - return test_func(t, remoteStream); - }, 'Stream closed by by reading remote finish, followed by writing a ' + - 'finish: ' + description); - - promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - const localStream = localQuicTransport.createStream(); - localQuicTransport.stop(); - assert_equals(localStream.state, 'closed'); - return test_func(t, localStream); - }, 'Stream closed by local RTCQuicTransport stop(): ' + description); - - promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - const localStream = localQuicTransport.createStream(); - localStream.write({ data: new Uint8Array(1) }); - const remoteWatcher = - new EventWatcher(t, remoteQuicTransport, - [ 'quicstream', 'statechange' ]); - const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); - localQuicTransport.stop(); - await remoteWatcher.wait_for('statechange'); - assert_equals(remoteStream.state, 'closed'); - return test_func(t, remoteStream); - }, 'Stream closed by remote RTCQuicTransport stop(): ' + description); -} - diff --git a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicStream.https.html b/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicStream.https.html deleted file mode 100644 index e99914ad403..00000000000 --- a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicStream.https.html +++ /dev/null @@ -1,646 +0,0 @@ - - -RTCQuicStream.https.html - - - - - - diff --git a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport-helper.js b/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport-helper.js deleted file mode 100644 index b8d9eaed5aa..00000000000 --- a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport-helper.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; - -// This file depends on RTCIceTransport-extension-helper.js which should be -// loaded from the main HTML file. -// The following helper functions are called from -// RTCIceTransport-extension-helper.js: -// makeIceTransport -// makeGatherAndStartTwoIceTransports - -// Construct an RTCQuicTransport instance with the given RTCIceTransport -// instance and the given certificates. The RTCQuicTransport instance will be -// automatically cleaned up when the test finishes. -function makeQuicTransport(t, iceTransport) { - const quicTransport = new RTCQuicTransport(iceTransport); - t.add_cleanup(() => quicTransport.stop()); - return quicTransport; -} - -// Construct an RTCQuicTransport instance with a new RTCIceTransport instance -// and a single, newly-generated certificate. The RTCQuicTransport and -// RTCIceTransport instances will be automatically cleaned up when the test -// finishes. -function makeStandaloneQuicTransport(t) { - return makeQuicTransport(t, makeIceTransport(t)); -} - -// Construct two RTCQuicTransport instances and each call start() with the other -// transport's local parameters. -// Returns a 2-list: -// [ server RTCQuicTransport, -// client RTCQuicTransport ] -function makeAndStartTwoQuicTransports(t) { - const [ localIceTransport, remoteIceTransport ] = - makeGatherAndStartTwoIceTransports(t); - const localQuicTransport = - makeQuicTransport(t, localIceTransport); - const remoteQuicTransport = - makeQuicTransport(t, remoteIceTransport); - const remote_key = remoteQuicTransport.getKey(); - localQuicTransport.listen(remote_key); - remoteQuicTransport.connect(); - return [ localQuicTransport, remoteQuicTransport ]; -} - -// Construct two RTCQuicTransport instances and wait for them to connect. -// Returns a 2-list: -// [ server RTCQuicTransport, -// client RTCQuicTransport ] -async function makeTwoConnectedQuicTransports(t) { - // Returns a promise that resolves when the transport fires a 'statechange' - // event to 'connected'. - function waitForConnected(transport) { - return new Promise((resolve, reject) => { - const eventHandler = t.step_func(() => { - assert_equals(transport.state, 'connected'); - transport.removeEventListener('statechange', eventHandler, false); - resolve(); - }); - transport.addEventListener('statechange', eventHandler, false); - }); - } - const [ localQuicTransport, remoteQuicTransport ] = - await makeAndStartTwoQuicTransports(t); - await Promise.all([ - waitForConnected(localQuicTransport), - waitForConnected(remoteQuicTransport), - ]); - return [ localQuicTransport, remoteQuicTransport ]; -} diff --git a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport.https.html b/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport.https.html deleted file mode 100644 index cdccaac6c86..00000000000 --- a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport.https.html +++ /dev/null @@ -1,399 +0,0 @@ - - -RTCQuicTransport.https.html - - - - - - - -