diff --git a/tests/wpt/metadata-layout-2020/2dcontext/2d.filter.value.html.ini b/tests/wpt/metadata-layout-2020/2dcontext/2d.filter.value.html.ini new file mode 100644 index 00000000000..c64d43962d9 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/2dcontext/2d.filter.value.html.ini @@ -0,0 +1,4 @@ +[2d.filter.value.html] + [test if ctx.filter works correctly] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini similarity index 67% rename from tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini rename to tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini index 4bfb0c2053a..f29da48a2a0 100644 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini @@ -1,4 +1,4 @@ -[hit-test-floats-004.html] +[hit-test-floats-003.html] [Miss float below something else] 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 c131078eace..23c61ede1a1 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,3 +17,6 @@ [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/elementsFromPoint-iframes.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-iframes.html.ini index 171592fc08f..6ef8bb1049f 100644 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-iframes.html.ini +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-iframes.html.ini @@ -2,3 +2,6 @@ [elementsFromPoint on the root document for points in iframe elements] expected: FAIL + [elementsFromPoint on inner documents] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/custom-elements/customized-built-in-constructor-exceptions.html.ini b/tests/wpt/metadata-layout-2020/custom-elements/customized-built-in-constructor-exceptions.html.ini new file mode 100644 index 00000000000..10c7e55eab6 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/custom-elements/customized-built-in-constructor-exceptions.html.ini @@ -0,0 +1,2 @@ +[customized-built-in-constructor-exceptions.html] + expected: CRASH diff --git a/tests/wpt/metadata-layout-2020/dom/nodes/ParentNode-replaceChildren.html.ini b/tests/wpt/metadata-layout-2020/dom/nodes/ParentNode-replaceChildren.html.ini new file mode 100644 index 00000000000..ae9d14fd80b --- /dev/null +++ b/tests/wpt/metadata-layout-2020/dom/nodes/ParentNode-replaceChildren.html.ini @@ -0,0 +1,76 @@ +[ParentNode-replaceChildren.html] + [DocumentFragment.replaceChildren() with null as an argument, on a parent having a child.] + expected: FAIL + + [DocumentFragment.replaceChildren() with only text as an argument, on a parent having no child.] + expected: FAIL + + [Element.replaceChildren() with null as an argument, on a parent having no child.] + expected: FAIL + + [Element.replaceChildren() without any argument, on a parent having no child.] + expected: FAIL + + [If node is a host-including inclusive ancestor of parent, then throw a HierarchyRequestError DOMException.] + expected: FAIL + + [If node is an Element and parent is a document with another element, then throw a HierarchyRequestError DOMException.] + expected: FAIL + + [DocumentFragment.replaceChildren() with null as an argument, on a parent having no child.] + expected: FAIL + + [DocumentFragment.replaceChildren() with one element and text as argument, on a parent having a child.] + expected: FAIL + + [Element.replaceChildren() with null as an argument, on a parent having a child.] + expected: FAIL + + [DocumentFragment.replaceChildren() with only one element as an argument, on a parent having no child.] + expected: FAIL + + [Element.replaceChildren() should move nodes in the right order] + expected: FAIL + + [If node is a Text node and parent is a document, then throw a HierarchyRequestError DOMException.] + expected: FAIL + + [If node is a DocumentFragment with an element and parent is a document with another element, then throw a HierarchyRequestError DOMException.] + expected: FAIL + + [DocumentFragment.replaceChildren() with undefined as an argument, on a parent having no child.] + expected: FAIL + + [If node is a doctype and parent is not a document, then throw a HierarchyRequestError DOMException.] + expected: FAIL + + [If node is a doctype and parent is a document with another doctype, then throw a HierarchyRequestError DOMException.] + expected: FAIL + + [If node is a DocumentFragment with multiple elements and parent is a document, then throw a HierarchyRequestError DOMException.] + expected: FAIL + + [Element.replaceChildren() with undefined as an argument, on a parent having no child.] + expected: FAIL + + [Element.replaceChildren() with only one element as an argument, on a parent having no child.] + expected: FAIL + + [Element.replaceChildren() with one element and text as argument, on a parent having a child.] + expected: FAIL + + [DocumentFragment.replaceChildren() should move nodes in the right order] + expected: FAIL + + [If node is a doctype and parent is a document with an element, then throw a HierarchyRequestError DOMException.] + expected: FAIL + + [Element.replaceChildren() with only text as an argument, on a parent having no child.] + expected: FAIL + + [DocumentFragment.replaceChildren() without any argument, on a parent having no child.] + expected: FAIL + + [If node is not a DocumentFragment, DocumentType, Element, Text, ProcessingInstruction, or Comment node, then throw a HierarchyRequestError DOMException.] + expected: FAIL + 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 ae125a215ca..867aa1150a7 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 @@ -315,18 +315,21 @@ [ - diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py index bfc3ab9a2be..9532bd03cb7 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py @@ -272,6 +272,9 @@ class FirefoxInstanceManager(object): if self.enable_webrender: env["MOZ_WEBRENDER"] = "1" env["MOZ_ACCELERATED"] = "1" + # Set MOZ_X_SYNC and GDK_SYNCHRONIZE for investigation; bug 1625250. + env["MOZ_X_SYNC"] = "1" + env["GDK_SYNCHRONIZE"] = "1" else: env["MOZ_WEBRENDER"] = "0" diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py index c559c94debc..78967371537 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py @@ -359,6 +359,10 @@ class SingleTestSource(TestSource): return test_queue + @classmethod + def tests_by_group(cls, tests, **kwargs): + return {cls.group_metadata(None)['scope']: [t.id for t in tests]} + class PathGroupedSource(GroupedSource): @classmethod diff --git a/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/focus-management-expectations.html b/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/focus-management-expectations.html new file mode 100644 index 00000000000..1845c15d716 --- /dev/null +++ b/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/focus-management-expectations.html @@ -0,0 +1,48 @@ + + + + + + Focus management event expectations + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-operations.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-operations.https.html index a0921d315a3..28ae3afcd73 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-operations.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-operations.https.html @@ -248,10 +248,38 @@ promise_test(async t => { t.add_cleanup(() => pc.close()); const transceiver = pc.addTransceiver("audio"); await new Promise(r => pc.onnegotiationneeded = r); - assert_false(await isOperationsChainEmpty(pc), "Empty chain"); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); await new Promise(r => t.step_timeout(r, 0)); assert_true(await isOperationsChainEmpty(pc), "Empty chain"); -}, "Firing of negotiationneeded uses operations chain"); +}, "Firing of negotiationneeded does NOT use operations chain"); + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + pc1.addTransceiver("audio"); + pc1.addTransceiver("video"); + const offer = await pc1.createOffer(); + await pc1.setLocalDescription(offer); + const candidates = []; + for (let c; (c = (await new Promise(r => pc1.onicecandidate = r)).candidate);) { + candidates.push(c); + } + pc2.addTransceiver("video"); + let fired = false; + const p = new Promise(r => pc2.onnegotiationneeded = () => r(fired = true)); + await Promise.all([ + pc2.setRemoteDescription(offer), + ...candidates.map(candidate => pc2.addIceCandidate(candidate)), + pc2.setLocalDescription() + ]); + assert_false(fired, "Negotiationneeded mustn't have fired yet."); + await new Promise(r => t.step_timeout(r, 0)); + assert_true(fired, "Negotiationneeded must have fired by now."); + await p; +}, "Negotiationneeded only fires once operations chain is empty"); promise_test(async t => { const pc = new RTCPeerConnection(); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-perfect-negotiation.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-perfect-negotiation.https.html new file mode 100644 index 00000000000..ad2725c33ca --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-perfect-negotiation.https.html @@ -0,0 +1,186 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js index c9f7e81b094..65c39844b15 100644 --- a/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js +++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_util.js @@ -22,6 +22,11 @@ function xr_promise_test(name, func, properties) { xr_debug = navigator.xr.test.Debug; } + if (self.internals && internals.xrTest && navigator.xr) { + // WebKit setup + await setupWebKitWebXRTestAPI; + } + // Ensure that any devices are disconnected when done. If this were done in // a .then() for the success case, a test that expected failure would // already be marked done at the time that runs and the shutdown would @@ -199,3 +204,16 @@ let loadChromiumResources = Promise.resolve().then(() => { return chain; }); + +let setupWebKitWebXRTestAPI = Promise.resolve().then(() => { + if (!self.internals) { + // Do nothing on non-WebKit-based browsers. + return; + } + + // WebKit setup. The internals object is used by the WebKit test runner + // to provide JS access to internal APIs. In this case it's used to + // ensure that XRTest is only exposed to wpt tests. + navigator.xr.test = internals.xrTest; + return Promise.resolve(); +}); diff --git a/tests/wpt/web-platform-tests/wpt.py b/tests/wpt/web-platform-tests/wpt.py index affba7343ea..c38fe78e917 100644 --- a/tests/wpt/web-platform-tests/wpt.py +++ b/tests/wpt/web-platform-tests/wpt.py @@ -1,3 +1,7 @@ # This file exists to allow `python wpt ` to work on Windows: -# https://github.com/web-platform-tests/wpt/pull/6907 +# https://github.com/web-platform-tests/wpt/pull/6907 and +# https://github.com/web-platform-tests/wpt/issues/23095 +import os +abspath = os.path.abspath(__file__) +os.chdir(os.path.dirname(abspath)) exec(compile(open("wpt", "r").read(), "wpt", 'exec')) diff --git a/tests/wpt/web-platform-tests/xhr/event-abort.any.js b/tests/wpt/web-platform-tests/xhr/event-abort.any.js index 9b38ccf9c9e..5b17ece0085 100644 --- a/tests/wpt/web-platform-tests/xhr/event-abort.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-abort.any.js @@ -12,4 +12,4 @@ test.step(function () { test.step_timeout(() => { assert_unreached("onabort not called after 4 ms"); }, 4); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-error.sub.any.js b/tests/wpt/web-platform-tests/xhr/event-error.sub.any.js index df63dc05bfa..62a158cdcfb 100644 --- a/tests/wpt/web-platform-tests/xhr/event-error.sub.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-error.sub.any.js @@ -10,4 +10,4 @@ async_test(function (t) { client.open("GET", "http://nonexistent.{{host}}:{{ports[http][0]}}"); client.send("null"); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-load.any.js b/tests/wpt/web-platform-tests/xhr/event-load.any.js index 72e46a5cea8..dcb92cc980d 100644 --- a/tests/wpt/web-platform-tests/xhr/event-load.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-load.any.js @@ -18,4 +18,4 @@ test.step(function () { }); client.open("GET", "resources/well-formed.xml"); client.send(null); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-loadend.any.js b/tests/wpt/web-platform-tests/xhr/event-loadend.any.js index 7bd1844b378..16087b52967 100644 --- a/tests/wpt/web-platform-tests/xhr/event-loadend.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-loadend.any.js @@ -16,4 +16,4 @@ test.step(function () { }; client.open("GET", "resources/well-formed.xml"); client.send(null); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-loadstart-upload.any.js b/tests/wpt/web-platform-tests/xhr/event-loadstart-upload.any.js index 0f41cd1286b..3918adb66a9 100644 --- a/tests/wpt/web-platform-tests/xhr/event-loadstart-upload.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-loadstart-upload.any.js @@ -16,4 +16,4 @@ test.step(function () { }); client.open("POST", "resources/trickle.py?ms=5&count=8"); client.send('foo=bar'); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-loadstart.any.js b/tests/wpt/web-platform-tests/xhr/event-loadstart.any.js index 4778404a00e..55af4c31631 100644 --- a/tests/wpt/web-platform-tests/xhr/event-loadstart.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-loadstart.any.js @@ -14,4 +14,4 @@ test.step(function () { }, 500); client.open("GET", "resources/well-formed.xml"); client.send(null); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-progress.any.js b/tests/wpt/web-platform-tests/xhr/event-progress.any.js index 0e7c3a42c7d..094d3618117 100644 --- a/tests/wpt/web-platform-tests/xhr/event-progress.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-progress.any.js @@ -15,4 +15,4 @@ test.step(function () { }); client.open("GET", "resources/trickle.py?count=4&delay=150"); client.send(null); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-readystate-sync-open.any.js b/tests/wpt/web-platform-tests/xhr/event-readystate-sync-open.any.js index 321635e7dea..a8a4fe7f9a1 100644 --- a/tests/wpt/web-platform-tests/xhr/event-readystate-sync-open.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-readystate-sync-open.any.js @@ -20,4 +20,4 @@ test(function () { } client.open('GET', "...", true) assert_array_equals(eventsFired, [1]) -}, title + ' (async)'); \ No newline at end of file +}, title + ' (async)'); diff --git a/tests/wpt/web-platform-tests/xhr/event-readystatechange-loaded.any.js b/tests/wpt/web-platform-tests/xhr/event-readystatechange-loaded.any.js index 1e4467aaebd..a33e6f89227 100644 --- a/tests/wpt/web-platform-tests/xhr/event-readystatechange-loaded.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-readystatechange-loaded.any.js @@ -20,4 +20,4 @@ test.step(function () { client.open("GET", "resources/trickle.py?count=10"); // default timeout in trickle.py is 1/2 sec, so this request will take 5 seconds to complete client.send(null); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-timeout-order.any.js b/tests/wpt/web-platform-tests/xhr/event-timeout-order.any.js index b35e908a9d8..55319814a90 100644 --- a/tests/wpt/web-platform-tests/xhr/event-timeout-order.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-timeout-order.any.js @@ -18,4 +18,4 @@ test.step(function () { test.step_timeout(() => { assert_unreached("ontimeout not called."); }, 10); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-timeout.any.js b/tests/wpt/web-platform-tests/xhr/event-timeout.any.js index d114b08b3e1..da8ca11bb8e 100644 --- a/tests/wpt/web-platform-tests/xhr/event-timeout.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-timeout.any.js @@ -15,4 +15,4 @@ test.step(function () { test.step_timeout(() => { assert_unreached("ontimeout not called."); }, 10); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-upload-progress-crossorigin.any.js b/tests/wpt/web-platform-tests/xhr/event-upload-progress-crossorigin.any.js index 1036f2b14f0..9f4c44aabe7 100644 --- a/tests/wpt/web-platform-tests/xhr/event-upload-progress-crossorigin.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-upload-progress-crossorigin.any.js @@ -23,4 +23,4 @@ const remote = get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/corsenabled. client.upload.onloadstart = test.unreached_func(); // registered too late client.upload.onprogress = test.unreached_func(); // registered too late }, "Upload events registered too late (" + url + ")"); -}); \ No newline at end of file +}); diff --git a/tests/wpt/web-platform-tests/xhr/event-upload-progress.any.js b/tests/wpt/web-platform-tests/xhr/event-upload-progress.any.js index 5d1546757ba..87223c172d5 100644 --- a/tests/wpt/web-platform-tests/xhr/event-upload-progress.any.js +++ b/tests/wpt/web-platform-tests/xhr/event-upload-progress.any.js @@ -23,4 +23,4 @@ const remote = get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/corsenabled. client.upload.onloadstart = test.unreached_func(); // registered too late client.upload.onprogress = test.unreached_func(); // registered too late }, "Upload events registered too late (" + url + ")"); -}); \ No newline at end of file +}); diff --git a/tests/wpt/webgl/meta/conformance2/rendering/draw-buffers.html.ini b/tests/wpt/webgl/meta/conformance2/rendering/draw-buffers.html.ini index dd299c6c0c2..2fb72d9c465 100644 --- a/tests/wpt/webgl/meta/conformance2/rendering/draw-buffers.html.ini +++ b/tests/wpt/webgl/meta/conformance2/rendering/draw-buffers.html.ini @@ -83,3 +83,24 @@ [WebGL test #40: attachment 3 should be 0,255,0,255\nat (0, 0) expected: 0,255,0,255 was 0,0,255,0] expected: FAIL + [WebGL test #48: attachment 3 should be 0,255,0,255\nat (0, 0) expected: 0,255,0,255 was 0,255,0,0] + expected: FAIL + + [WebGL test #44: attachment 7 should be 0,255,0,255\nat (4, 0) expected: 0,255,0,255 was 255,255,0,0] + expected: FAIL + + [WebGL test #49: attachment 4 should be 0,255,0,255\nat (0, 0) expected: 0,255,0,255 was 23,0,0,0] + expected: FAIL + + [WebGL test #43: attachment 6 should be 0,255,0,255\nat (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #52: attachment 7 should be 0,255,0,255\nat (0, 0) expected: 0,255,0,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #51: attachment 6 should be 0,255,0,255\nat (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #42: attachment 5 should be 0,255,0,255\nat (0, 0) expected: 0,255,0,255 was 0,255,0,0] + expected: FAIL +