diff options
author | bors-servo <infra@servo.org> | 2023-01-26 17:14:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-26 17:14:46 +0100 |
commit | 9dfae50c5e9802fce718bfac49f1023d80e13680 (patch) | |
tree | 369eb4c928dc99ddeb623abf9dbeac88c761aa4e | |
parent | 5a0b67cfc422796b6981ed4ffb6ec92997ef7b27 (diff) | |
parent | cda7a1049826810ad88dc184b466d7e2fb43b345 (diff) | |
download | servo-9dfae50c5e9802fce718bfac49f1023d80e13680.tar.gz servo-9dfae50c5e9802fce718bfac49f1023d80e13680.zip |
Auto merge of #29300 - servo:wpt_update_26-01-2023, r=jdm
Sync WPT with upstream (26-01-2023)
Automated downstream sync of changes from upstream as of 26-01-2023
[no-wpt-sync]
r? @servo-wpt-sync
98 files changed, 2786 insertions, 1167 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini index cdeaf7f7080..282ab0b2525 100644 --- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini @@ -7,7 +7,7 @@ expected: FAIL [Opening a blob URL in a new window immediately before revoking it works.] - expected: TIMEOUT + expected: FAIL [Opening a blob URL in a noopener about:blank window immediately before revoking it works.] expected: TIMEOUT diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index a6796b61be3..9e39bb43f96 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -216863,6 +216863,32 @@ {} ] ], + "scoped-reference-animation-001.html": [ + "891bda52a39b42322cf15cb01727f9cad58cf026", + [ + null, + [ + [ + "/css/css-scoping/scoped-reference-animation-ref.html", + "==" + ] + ], + {} + ] + ], + "scoped-reference-animation-002.html": [ + "d5c25f06c0aa73269615ec9bf2b6399729ea261a", + [ + null, + [ + [ + "/css/css-scoping/scoped-reference-animation-ref.html", + "==" + ] + ], + {} + ] + ], "shadow-assign-dynamic-001.html": [ "b9a0d1a2991c071bb3654995f93c4ac7ff495aee", [ @@ -231462,7 +231488,7 @@ ] ], "line-break-normal-015a.xht": [ - "db3ee2a586fb90433f85b626cf05c2da5eb143cb", + "d2e0fe34995f43ffc1e4da10209efb9a71912ceb", [ null, [ @@ -231657,7 +231683,7 @@ ] ], "line-break-strict-015a.xht": [ - "9114120bc86e2b629a555539fd97682c8bfe6d6e", + "ad31e4fc54d80cd815e09889ae11a6bc633d80a8", [ null, [ @@ -237907,6 +237933,19 @@ {} ] ], + "break-spaces-011.html": [ + "8c40a31a35688512742727639c11091ac8163dd8", + [ + null, + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], "break-spaces-051.html": [ "2626511808335491910d3c14d752bb08494fcbc2", [ @@ -385291,6 +385330,10 @@ [] ] }, + "scoped-reference-animation-ref.html": [ + "9f407eb690e0fb3d033afba0817082f84e30b783", + [] + ], "slotted-placeholder-ref.html": [ "f99c0385d061766b49d55e7703bf596fe69d6ec2", [] @@ -388560,7 +388603,7 @@ [] ], "line-break-normal-015a-ref.xht": [ - "941e18242d9868a45dbde986a189feecaed8b05c", + "23cf1487b1b3c11d67787b5d4dfc422f61495254", [] ], "line-break-normal-015b-ref.xht": [ @@ -388616,7 +388659,7 @@ [] ], "line-break-strict-015a-ref.xht": [ - "f8a1222a3334edb8117e9141359958c9b8f51748", + "252818c22a0c0cce5d2844a283d447a32f4b5420", [] ], "line-break-strict-015b-ref.xht": [ @@ -410106,8 +410149,12 @@ ] }, "tools": { + "PRESUBMIT.py": [ + "048e96b7012b70b276922ace2d7cdd811ebb3291", + [] + ], "gentest.py": [ - "cb1f720590ce8b41fe6bcb113ee24a60e173d263", + "bca7b9ecfcb72dccec216b5435f9071f47fde0be", [] ], "gentest_union.py": [ @@ -410115,11 +410162,11 @@ [] ], "gentestutils.py": [ - "1206aa91bfbe737b55a1ba500713e18cbf8e07fd", + "16ca5f410c0dd1182271b151fc2fa3e0530248e6", [] ], "gentestutilsunion.py": [ - "c6fba8453d0ebbe389f6b9103f6272869076e641", + "047dd6c802b14f375f8049afa211ba921715ca6c", [] ], "name2dir-canvas.yaml": [ @@ -410967,10 +411014,6 @@ "d5c99062d2bb8f9660b68c172754867b598ed43f", [] ], - "named_targeting.https.html.headers": [ - "d5c99062d2bb8f9660b68c172754867b598ed43f", - [] - ], "popup-so.https.html.headers": [ "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", [] @@ -422136,7 +422179,7 @@ }, "server": { "context.any.js.ini": [ - "72009c61e6efb374ff3ce0aa9470d994a737789d", + "49220324f2f08b8e2bd700e2161615ba93f78b59", [] ], "http2-context.sub.h2.any.js.ini": [ @@ -423153,7 +423196,7 @@ [] ], "payment-handler.idl": [ - "d0e5bd9fda832377e89a8b2b62fb4f597847a780", + "65b64bdf31c7dfed778ba475e154cd780ca44e86", [] ], "payment-request.idl": [ @@ -423830,7 +423873,7 @@ [] ], "largest-contentful-paint-helpers.js": [ - "043587ca654c44fb97ae41e32cff094852199365", + "b0fe1b08cb44b1871ba6dac4c1d25018c6032019", [] ], "lcp-sw-from-cache.js": [ @@ -423912,7 +423955,7 @@ ] }, "lint.ignore": [ - "11821957cf4db2a454da4f7b135198797ceb437f", + "011f05c607e24b53f0d1120dc9c8a6cf5fdf06d9", [] ], "loading": { @@ -426772,10 +426815,6 @@ "f97229762ce388ff0695d56684099b9286326a29", [] ], - "register-and-activate-service-worker.js": [ - "fb54c5c06488f319b0b4152837cc6a1b530cab7a", - [] - ], "supports-shipping-contact-delegation-manual-manifest.json": [ "fd6bc89ef6d38e0cee82bfadcc697e36a2952070", [] @@ -429882,7 +429921,7 @@ [] ], "entry-invariants.js": [ - "dc907533946b383ccadd62ce1c81135ee6c1d19c", + "bbc913b722903085963a133dab0a8a96f77b2506", [] ], "eventsource.py": [ @@ -430062,7 +430101,7 @@ [] ], "resource-loaders.js": [ - "70889b709f15a40f9cdc12cfeafb7a46c88b9a0c", + "37fea16b1750faa5df8983cc88ce197125c21490", [] ], "resource-timing-content-length.py": [ @@ -444681,7 +444720,7 @@ [] ], "test_update_expectations.py": [ - "92022e9b1ea1bcc516a654e1e4975db851c6ac92", + "1635dce7ec67809e7824ba39806cf16e2f40b31a", [] ], "test_wpt.py": [ @@ -445043,7 +445082,7 @@ [] ], "manifestupdate.py": [ - "ce12bc3370a3fb06a85ffc0db2e93a42eb093159", + "0bc25187976ddd9f970506ff74f63b9720e62588", [] ], "metadata.py": [ @@ -445095,7 +445134,7 @@ [] ], "testloader.py": [ - "0e24c0deaa1adb34e401aa4effebbe816b2892f1", + "93e2a87826c59926a649bcfb16949aa5c6c93342", [] ], "testrunner.py": [ @@ -445162,7 +445201,7 @@ [] ], "test_wpttest.py": [ - "d11b3a22451b9659a362461f0259239098e65af2", + "2d3578a903ccc45f03eef2fc29f4a54e3b87983e", [] ] }, @@ -488120,6 +488159,27 @@ {} ] ], + "anchor-transition-001.html": [ + "b5849510e838b47fd5ddcf30489842e755225d5b", + [ + null, + {} + ] + ], + "anchor-transition-002.html": [ + "b6a1ff4511ac9ddfb20a531086137741b137b36b", + [ + null, + {} + ] + ], + "anchor-transition-003.html": [ + "e7441275141176078e14fc16aadf134bf9b65a37", + [ + null, + {} + ] + ], "at-fallback-position-allowed-declarations.html": [ "873fa13140047c0943dde64faa8ab7dc54b28203", [ @@ -501598,7 +501658,7 @@ ] ], "parsing.html": [ - "66d1566586cd7d94f3c1da014e1ef3e4134daeac", + "8e445faf1c9b8b0942f684d5093c5a7071d43a91", [ null, {} @@ -503271,7 +503331,7 @@ ] ], "at-property.html": [ - "d996091dc203eab079fff2d2b980d064300af39b", + "b91b143e368ff5371bce34d9b0e43ca78ed358cf", [ null, {} @@ -504684,6 +504744,13 @@ {} ] ], + "focus-element-no-snap.html": [ + "9ec004c6287008693e73bb51d0503f99e2f0b087", + [ + null, + {} + ] + ], "move-current-target.html": [ "ccadc884c5ba23f90b4b7d273e5aaf355cf648d1", [ @@ -515806,21 +515873,21 @@ ] ], "only-child-group.html": [ - "034df41dde165f7624effddf70209472ea74a322", + "c3e9d669a30e24c93cbe0dc20c211b8e3e92d9a8", [ null, {} ] ], "only-child-image-pair.html": [ - "830b37313eaaa3165d5739b39f2ccb415886e724", + "93fcc0a5ea8bcfce67c6f375ecd19602337949ef", [ null, {} ] ], "only-child-new.html": [ - "2f8a7a4023ec7ffde81a6eeda6a65ca4533540ce", + "62328f27cf259d5b50fbea43e02ba3200364b8e7", [ null, {} @@ -515834,7 +515901,14 @@ ] ], "only-child-old.html": [ - "4ca6fed20ce7b2f092de2c324ad6197caed22bc9", + "56dfa168e253eddc61e41db8bcd766c3282ae726", + [ + null, + {} + ] + ], + "only-child-on-root-element-with-view-transition.html": [ + "0bf6d8b84b397f6818b133374b4ba0446af70842", [ null, {} @@ -519079,6 +519153,13 @@ {} ] ], + "match-media-parsing.html": [ + "9d9aa3dd581579dfb6e14e2ad82ee54f8f575696", + [ + null, + {} + ] + ], "media-query-matches-in-iframe.html": [ "5828936732e7133d4365eb288b99e99cb428fb19", [ @@ -521219,7 +521300,7 @@ ] ], "form-disabled-callback.html": [ - "954c3f3f6eecc95b12ffb235ffe287675f734429", + "c61a7719fc628c21d380e7f16c8c19921e3ceb2b", [ null, {} @@ -588362,7 +588443,7 @@ ] ], "iframe-popup.https.html": [ - "2c6f0b62822f61bc4aac8a9bdd50cdbd724c07eb", + "17840724d9e342aa52cdcc474356b25d554dfd63", [ "html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html?1-2", { @@ -588447,7 +588528,7 @@ ] ], "popup-with-same-origin.https.html": [ - "491cbc3b9d091e91976624b807a76f254fa68958", + "c0020fa23a478fd75aa27b69edb95c84f3e3789a", [ null, { @@ -601923,6 +602004,13 @@ {} ] ], + "popover-target-element-disabled.tentative.html": [ + "3d139c5950eb6bc1048c10e0ea6053369cb93403", + [ + null, + {} + ] + ], "popover-top-layer-combinations.tentative.html": [ "001bf88a25ef851e6607dc6e0ba7a7cf3b8cf4f8", [ @@ -614775,7 +614863,7 @@ ] ], "image-upscaling.html": [ - "a4f7d8079d3b9a75f79b896743cbc018cc81c9ce", + "5cb3767ca7d29a30103797c8c8abe1c692787466", [ null, {} @@ -625798,7 +625886,7 @@ ] ], "idlharness.https.any.js": [ - "dfb0190abacb96c61cf5c125c68a1ad346f60205", + "d34e20630bf7d60faa5aa8333d1595754420c080", [ "payment-handler/idlharness.https.any.html", { @@ -625912,13 +626000,6 @@ } ] ], - "payment-instruments.https.html": [ - "121c131568852eafe1b9ce5f9ec148c2cbee3fb6", - [ - null, - {} - ] - ], "payment-request-event-constructor.https.html": [ "31ac8cafa78fb52fb7c02722003b5359ceadb7e2", [ @@ -625941,7 +626022,7 @@ ] ], "same-object-attributes.https.html": [ - "2e5dea3a4aed33378f25b09b6e58929e22f2f72c", + "27c204484359d6b1afbb3412ae4feabf1295d6b1", [ null, {} @@ -643761,7 +643842,7 @@ ] ], "cross-origin-start-end-time-with-redirects.html": [ - "1b107d3aef7764d9b9603ea2658cf469cf285980", + "8e368d13807745761083b090bc097217ff22e598", [ null, {} @@ -644212,7 +644293,7 @@ ] ], "object-not-found-after-cross-origin-redirect.html": [ - "4d5d121fe32c4232dc8094906f92b7c8ac8d2ef1", + "6990c6c06082e5d62ba3aa576eccd42d13246d2a", [ null, { @@ -644342,7 +644423,7 @@ ] ], "response-status-code.html": [ - "3c606c5496e6c7f9b0ecd5a7bfec9a611ad4f86f", + "3a184c6f016b28c7003ea4650b7827b74388faf8", [ null, { @@ -652672,6 +652753,13 @@ } ] ], + "delegatesFocus-tabindex-change.html": [ + "f159c22164bb62064b62bc089faf5bd05cba555f", + [ + null, + {} + ] + ], "focus-autofocus.html": [ "75a50b84c6df5525b5da0df86192637b70247820", [ @@ -677573,7 +677661,7 @@ ] ], "getcredential-prf.https.html": [ - "6f8670f64d19e1a7366eb6cf42a83a3b6eedd387", + "61b52ac5958c7b242168285ad5e83581b4c1497e", [ null, { diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini index ee34bc91078..51432362d66 100644 --- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini +++ b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini @@ -1,6 +1,3 @@ [block-in-inline-hittest-002.html] [elementsFromPoint] expected: FAIL - - [elementFromPoint] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini b/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini new file mode 100644 index 00000000000..eb3cf41a070 --- /dev/null +++ b/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini @@ -0,0 +1,2 @@ +[opacity-animation-ending-correctly-002.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini b/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini deleted file mode 100644 index b8f8d45a31f..00000000000 --- a/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[hittest-anonymous-box.html] - [Hit-testing within an anonymous flex-item should return the flexbox as the hittest result.] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini index e37df87f114..68d900bb5b0 100644 --- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini +++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini @@ -319,3 +319,18 @@ [Matching font-style: 'oblique -21deg' should prefer 'oblique -21deg' over 'oblique -60deg -40deg'] expected: FAIL + + [Matching font-weight: '399' should prefer '340 360' over '200 300'] + expected: FAIL + + [Matching font-stretch: '110%' should prefer '100%' over '50% 80%'] + expected: FAIL + + [Matching font-style: 'oblique 21deg' should prefer 'oblique 40deg 50deg' over 'oblique 20deg'] + expected: FAIL + + [Matching font-style: 'oblique 10deg' should prefer 'oblique 10deg' over 'oblique 5deg'] + expected: FAIL + + [Matching font-style: 'oblique -10deg' should prefer 'oblique -1deg 0deg' over 'oblique -20deg -15deg'] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-normal-015a.xht.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-normal-015a.xht.ini deleted file mode 100644 index 71680f4af31..00000000000 --- a/tests/wpt/metadata/css/css-text/line-break/line-break-normal-015a.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[line-break-normal-015a.xht] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-strict-015a.xht.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-strict-015a.xht.ini deleted file mode 100644 index 881ee8aa238..00000000000 --- a/tests/wpt/metadata/css/css-text/line-break/line-break-strict-015a.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[line-break-strict-015a.xht] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-011.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-011.html.ini new file mode 100644 index 00000000000..1f5e74a33d4 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-011.html.ini @@ -0,0 +1,2 @@ +[break-spaces-011.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini index a94867c6dfe..2b9002f0e0c 100644 --- a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini +++ b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini @@ -53,152 +53,425 @@ [background-position length(px) / events] expected: FAIL - [margin-right length(cm) / values] + [background-color color(rgba) / values] expected: FAIL - [margin-right length(in) / values] + [border-top-width length(pt) / values] expected: FAIL - [margin-top length(pt) / values] + [border-top-width length(pc) / values] expected: FAIL - [margin-top length(pc) / values] + [border-top-width length(px) / values] expected: FAIL - [margin-top length(px) / values] + [border-top-width length(em) / values] expected: FAIL - [margin-top length(em) / values] + [border-top-width length(ex) / values] expected: FAIL - [margin-top length(ex) / values] + [border-top-width length(mm) / values] expected: FAIL - [margin-top length(mm) / values] + [border-top-width length(cm) / values] expected: FAIL - [margin-top length(cm) / values] + [border-top-width length(in) / values] expected: FAIL - [margin-top length(in) / values] + [border-right-width length(pt) / values] expected: FAIL - [height length(pt) / values] + [border-right-width length(pc) / values] expected: FAIL - [height length(pc) / values] + [border-right-width length(px) / values] expected: FAIL - [height length(px) / values] + [border-right-width length(em) / values] expected: FAIL - [height length(em) / values] + [border-right-width length(ex) / values] expected: FAIL - [height length(ex) / values] + [border-right-width length(mm) / values] expected: FAIL - [height length(mm) / values] + [border-right-width length(cm) / values] expected: FAIL - [height length(cm) / values] + [border-right-width length(in) / values] expected: FAIL - [height length(in) / values] + [border-bottom-width length(pt) / values] expected: FAIL - [height percentage(%) / values] + [border-bottom-width length(pc) / values] expected: FAIL - [width length(pt) / values] + [border-bottom-width length(px) / values] expected: FAIL - [width length(pc) / values] + [border-bottom-width length(em) / values] expected: FAIL - [width length(px) / values] + [border-bottom-width length(ex) / values] expected: FAIL - [width length(em) / values] + [border-bottom-width length(mm) / values] expected: FAIL - [width length(ex) / values] + [border-bottom-width length(cm) / values] expected: FAIL - [width length(mm) / values] + [border-bottom-width length(in) / values] expected: FAIL - [width length(cm) / values] + [border-left-width length(pt) / values] expected: FAIL - [width length(in) / values] + [border-left-width length(pc) / values] expected: FAIL - [width percentage(%) / values] + [border-left-width length(px) / values] expected: FAIL - [min-height length(pt) / values] + [border-left-width length(em) / values] expected: FAIL - [min-height length(pc) / values] + [border-left-width length(ex) / values] expected: FAIL - [min-height length(px) / values] + [border-left-width length(mm) / values] expected: FAIL - [min-height length(em) / values] + [border-left-width length(cm) / values] expected: FAIL - [min-height length(ex) / values] + [border-left-width length(in) / values] expected: FAIL - [min-height length(mm) / values] + [border-top-color color(rgba) / values] expected: FAIL - [min-height length(cm) / values] + [border-right-color color(rgba) / values] expected: FAIL - [min-height length(in) / values] + [border-bottom-color color(rgba) / values] expected: FAIL - [min-height percentage(%) / values] + [border-left-color color(rgba) / values] expected: FAIL - [min-width length(pt) / values] + [padding-bottom length(pt) / values] expected: FAIL - [min-width length(pc) / values] + [padding-bottom length(pc) / values] expected: FAIL - [min-width length(px) / values] + [padding-bottom length(px) / values] expected: FAIL - [min-width length(em) / values] + [padding-bottom length(em) / values] expected: FAIL - [min-width length(ex) / values] + [padding-bottom length(ex) / values] expected: FAIL - [min-width length(mm) / values] + [padding-bottom length(mm) / values] expected: FAIL - [min-width length(cm) / values] + [padding-bottom length(cm) / values] expected: FAIL - [min-width length(in) / values] + [padding-bottom length(in) / values] expected: FAIL - [min-width percentage(%) / values] + [padding-left length(pt) / values] expected: FAIL - [max-height length(pt) / values] + [padding-left length(pc) / values] expected: FAIL - [max-height length(pc) / values] + [padding-left length(px) / values] expected: FAIL - [max-height length(px) / values] + [padding-left length(em) / values] expected: FAIL - [max-height length(em) / values] + [padding-left length(ex) / values] + expected: FAIL + + [padding-left length(mm) / values] + expected: FAIL + + [padding-left length(cm) / values] + expected: FAIL + + [padding-left length(in) / values] + expected: FAIL + + [padding-right length(pt) / values] + expected: FAIL + + [padding-right length(pc) / values] + expected: FAIL + + [padding-right length(px) / values] + expected: FAIL + + [padding-right length(em) / values] + expected: FAIL + + [padding-right length(ex) / values] + expected: FAIL + + [padding-right length(mm) / values] + expected: FAIL + + [padding-right length(cm) / values] + expected: FAIL + + [padding-right length(in) / values] + expected: FAIL + + [padding-top length(pt) / values] + expected: FAIL + + [padding-top length(pc) / values] + expected: FAIL + + [padding-top length(px) / values] + expected: FAIL + + [padding-top length(em) / values] + expected: FAIL + + [padding-top length(ex) / values] + expected: FAIL + + [padding-top length(mm) / values] + expected: FAIL + + [padding-top length(cm) / values] + expected: FAIL + + [padding-top length(in) / values] + expected: FAIL + + [margin-bottom length(pt) / values] + expected: FAIL + + [margin-bottom length(pc) / values] + expected: FAIL + + [margin-bottom length(px) / values] + expected: FAIL + + [margin-bottom length(em) / values] + expected: FAIL + + [margin-bottom length(ex) / values] + expected: FAIL + + [margin-bottom length(mm) / values] + expected: FAIL + + [margin-bottom length(cm) / values] + expected: FAIL + + [margin-bottom length(in) / values] + expected: FAIL + + [margin-left length(pt) / values] + expected: FAIL + + [margin-left length(pc) / values] + expected: FAIL + + [margin-left length(px) / values] + expected: FAIL + + [margin-left length(em) / values] + expected: FAIL + + [margin-left length(ex) / values] + expected: FAIL + + [margin-left length(mm) / values] + expected: FAIL + + [margin-left length(cm) / values] + expected: FAIL + + [margin-left length(in) / values] + expected: FAIL + + [margin-right length(pt) / values] + expected: FAIL + + [margin-right length(pc) / values] + expected: FAIL + + [margin-right length(px) / values] + expected: FAIL + + [margin-right length(em) / values] + expected: FAIL + + [margin-right length(ex) / values] + expected: FAIL + + [margin-right length(mm) / values] + expected: FAIL + + [color color(rgba) / values] + expected: FAIL + + [font-size length(pt) / values] + expected: FAIL + + [font-size length(pc) / values] + expected: FAIL + + [font-size length(px) / values] + expected: FAIL + + [font-size length(em) / values] + expected: FAIL + + [font-size length(ex) / values] + expected: FAIL + + [font-size length(mm) / values] + expected: FAIL + + [font-size length(cm) / values] + expected: FAIL + + [font-size length(in) / values] + expected: FAIL + + [font-size percentage(%) / values] + expected: FAIL + + [font-weight font-weight(keyword) / values] + expected: FAIL + + [font-weight font-weight(numeric) / values] + expected: FAIL + + [line-height number(integer) / values] + expected: FAIL + + [line-height number(decimal) / values] + expected: FAIL + + [line-height length(pt) / values] + expected: FAIL + + [line-height length(pc) / values] + expected: FAIL + + [line-height length(px) / values] + expected: FAIL + + [line-height length(em) / values] + expected: FAIL + + [line-height length(ex) / values] + expected: FAIL + + [line-height length(mm) / values] + expected: FAIL + + [line-height length(cm) / values] + expected: FAIL + + [line-height length(in) / values] + expected: FAIL + + [line-height percentage(%) / values] + expected: FAIL + + [letter-spacing length(pt) / values] + expected: FAIL + + [letter-spacing length(pc) / values] + expected: FAIL + + [letter-spacing length(px) / values] + expected: FAIL + + [letter-spacing length(em) / values] + expected: FAIL + + [letter-spacing length(ex) / values] + expected: FAIL + + [letter-spacing length(mm) / values] + expected: FAIL + + [letter-spacing length(cm) / values] + expected: FAIL + + [letter-spacing length(in) / values] + expected: FAIL + + [word-spacing length(pt) / values] + expected: FAIL + + [word-spacing length(pc) / values] + expected: FAIL + + [word-spacing length(px) / values] + expected: FAIL + + [word-spacing length(em) / values] + expected: FAIL + + [word-spacing length(ex) / values] + expected: FAIL + + [word-spacing length(mm) / values] + expected: FAIL + + [word-spacing length(cm) / values] + expected: FAIL + + [word-spacing length(in) / values] + expected: FAIL + + [word-spacing percentage(%) / values] + expected: FAIL + + [text-indent length(pt) / values] + expected: FAIL + + [text-indent length(pc) / values] + expected: FAIL + + [text-indent length(px) / values] + expected: FAIL + + [text-indent length(em) / values] + expected: FAIL + + [text-indent length(ex) / values] + expected: FAIL + + [text-indent length(mm) / values] + expected: FAIL + + [text-indent length(cm) / values] + expected: FAIL + + [text-indent length(in) / values] + expected: FAIL + + [text-indent percentage(%) / values] + expected: FAIL + + [text-shadow shadow(shadow) / values] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini index e87f8c08864..f4caeba01db 100644 --- a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini +++ b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini @@ -55,3 +55,726 @@ [background-position length(px) / events] expected: FAIL + + [background-color color(rgba) / events] + expected: FAIL + + [border-top-width length(pt) / events] + expected: FAIL + + [border-top-width length(pc) / events] + expected: FAIL + + [border-top-width length(px) / events] + expected: FAIL + + [border-top-width length(em) / events] + expected: FAIL + + [border-top-width length(ex) / events] + expected: FAIL + + [border-top-width length(mm) / events] + expected: FAIL + + [border-top-width length(cm) / events] + expected: FAIL + + [border-top-width length(in) / events] + expected: FAIL + + [border-right-width length(pt) / events] + expected: FAIL + + [border-right-width length(pc) / events] + expected: FAIL + + [border-right-width length(px) / events] + expected: FAIL + + [border-right-width length(em) / events] + expected: FAIL + + [border-right-width length(ex) / events] + expected: FAIL + + [border-right-width length(mm) / events] + expected: FAIL + + [border-right-width length(cm) / events] + expected: FAIL + + [border-right-width length(in) / events] + expected: FAIL + + [border-bottom-width length(pt) / events] + expected: FAIL + + [border-bottom-width length(pc) / events] + expected: FAIL + + [border-bottom-width length(px) / events] + expected: FAIL + + [border-bottom-width length(em) / events] + expected: FAIL + + [border-bottom-width length(ex) / events] + expected: FAIL + + [border-bottom-width length(mm) / events] + expected: FAIL + + [border-bottom-width length(cm) / events] + expected: FAIL + + [border-bottom-width length(in) / events] + expected: FAIL + + [border-left-width length(pt) / events] + expected: FAIL + + [border-left-width length(pc) / events] + expected: FAIL + + [border-left-width length(px) / events] + expected: FAIL + + [border-left-width length(em) / events] + expected: FAIL + + [border-left-width length(ex) / events] + expected: FAIL + + [border-left-width length(mm) / events] + expected: FAIL + + [border-left-width length(cm) / events] + expected: FAIL + + [border-left-width length(in) / events] + expected: FAIL + + [border-top-color color(rgba) / events] + expected: FAIL + + [border-right-color color(rgba) / events] + expected: FAIL + + [border-bottom-color color(rgba) / events] + expected: FAIL + + [border-left-color color(rgba) / events] + expected: FAIL + + [padding-bottom length(pt) / events] + expected: FAIL + + [padding-bottom length(pc) / events] + expected: FAIL + + [padding-bottom length(px) / events] + expected: FAIL + + [padding-bottom length(em) / events] + expected: FAIL + + [padding-bottom length(ex) / events] + expected: FAIL + + [padding-bottom length(mm) / events] + expected: FAIL + + [padding-bottom length(cm) / events] + expected: FAIL + + [padding-bottom length(in) / events] + expected: FAIL + + [padding-left length(pt) / events] + expected: FAIL + + [padding-left length(pc) / events] + expected: FAIL + + [padding-left length(px) / events] + expected: FAIL + + [padding-left length(em) / events] + expected: FAIL + + [padding-left length(ex) / events] + expected: FAIL + + [padding-left length(mm) / events] + expected: FAIL + + [padding-left length(cm) / events] + expected: FAIL + + [padding-left length(in) / events] + expected: FAIL + + [padding-right length(pt) / events] + expected: FAIL + + [padding-right length(pc) / events] + expected: FAIL + + [padding-right length(px) / events] + expected: FAIL + + [padding-right length(em) / events] + expected: FAIL + + [padding-right length(ex) / events] + expected: FAIL + + [padding-right length(mm) / events] + expected: FAIL + + [padding-right length(cm) / events] + expected: FAIL + + [padding-right length(in) / events] + expected: FAIL + + [padding-top length(pt) / events] + expected: FAIL + + [padding-top length(pc) / events] + expected: FAIL + + [padding-top length(px) / events] + expected: FAIL + + [padding-top length(em) / events] + expected: FAIL + + [padding-top length(ex) / events] + expected: FAIL + + [padding-top length(mm) / events] + expected: FAIL + + [padding-top length(cm) / events] + expected: FAIL + + [padding-top length(in) / events] + expected: FAIL + + [margin-bottom length(pt) / events] + expected: FAIL + + [margin-bottom length(pc) / events] + expected: FAIL + + [margin-bottom length(px) / events] + expected: FAIL + + [margin-bottom length(em) / events] + expected: FAIL + + [margin-bottom length(ex) / events] + expected: FAIL + + [margin-bottom length(mm) / events] + expected: FAIL + + [margin-bottom length(cm) / events] + expected: FAIL + + [margin-bottom length(in) / events] + expected: FAIL + + [margin-left length(pt) / events] + expected: FAIL + + [margin-left length(pc) / events] + expected: FAIL + + [margin-left length(px) / events] + expected: FAIL + + [margin-left length(em) / events] + expected: FAIL + + [margin-left length(ex) / events] + expected: FAIL + + [margin-left length(mm) / events] + expected: FAIL + + [margin-left length(cm) / events] + expected: FAIL + + [margin-left length(in) / events] + expected: FAIL + + [margin-right length(pt) / events] + expected: FAIL + + [margin-right length(pc) / events] + expected: FAIL + + [margin-right length(px) / events] + expected: FAIL + + [margin-right length(em) / events] + expected: FAIL + + [margin-right length(ex) / events] + expected: FAIL + + [margin-right length(mm) / events] + expected: FAIL + + [margin-right length(cm) / events] + expected: FAIL + + [margin-right length(in) / events] + expected: FAIL + + [margin-top length(pt) / events] + expected: FAIL + + [margin-top length(pc) / events] + expected: FAIL + + [margin-top length(px) / events] + expected: FAIL + + [margin-top length(em) / events] + expected: FAIL + + [margin-top length(ex) / events] + expected: FAIL + + [margin-top length(mm) / events] + expected: FAIL + + [margin-top length(cm) / events] + expected: FAIL + + [margin-top length(in) / events] + expected: FAIL + + [height length(pt) / events] + expected: FAIL + + [height length(pc) / events] + expected: FAIL + + [height length(px) / events] + expected: FAIL + + [height length(em) / events] + expected: FAIL + + [height length(ex) / events] + expected: FAIL + + [height length(mm) / events] + expected: FAIL + + [height length(cm) / events] + expected: FAIL + + [height length(in) / events] + expected: FAIL + + [height percentage(%) / events] + expected: FAIL + + [width length(pt) / events] + expected: FAIL + + [width length(pc) / events] + expected: FAIL + + [width length(px) / events] + expected: FAIL + + [width length(em) / events] + expected: FAIL + + [width length(ex) / events] + expected: FAIL + + [width length(mm) / events] + expected: FAIL + + [width length(cm) / events] + expected: FAIL + + [width length(in) / events] + expected: FAIL + + [width percentage(%) / events] + expected: FAIL + + [min-height length(pt) / events] + expected: FAIL + + [min-height length(pc) / events] + expected: FAIL + + [min-height length(px) / events] + expected: FAIL + + [min-height length(em) / events] + expected: FAIL + + [min-height length(ex) / events] + expected: FAIL + + [min-height length(mm) / events] + expected: FAIL + + [min-height length(cm) / events] + expected: FAIL + + [min-height length(in) / events] + expected: FAIL + + [min-height percentage(%) / events] + expected: FAIL + + [min-width length(pt) / events] + expected: FAIL + + [min-width length(pc) / events] + expected: FAIL + + [min-width length(px) / events] + expected: FAIL + + [min-width length(em) / events] + expected: FAIL + + [min-width length(ex) / events] + expected: FAIL + + [min-width length(mm) / events] + expected: FAIL + + [min-width length(cm) / events] + expected: FAIL + + [min-width length(in) / events] + expected: FAIL + + [min-width percentage(%) / events] + expected: FAIL + + [max-height length(pt) / events] + expected: FAIL + + [max-height length(pc) / events] + expected: FAIL + + [max-height length(px) / events] + expected: FAIL + + [max-height length(em) / events] + expected: FAIL + + [max-height length(ex) / events] + expected: FAIL + + [max-height length(mm) / events] + expected: FAIL + + [max-height length(cm) / events] + expected: FAIL + + [max-height length(in) / events] + expected: FAIL + + [max-height percentage(%) / events] + expected: FAIL + + [max-width length(pt) / events] + expected: FAIL + + [max-width length(pc) / events] + expected: FAIL + + [max-width length(px) / events] + expected: FAIL + + [max-width length(em) / events] + expected: FAIL + + [max-width length(ex) / events] + expected: FAIL + + [max-width length(mm) / events] + expected: FAIL + + [max-width length(cm) / events] + expected: FAIL + + [max-width length(in) / events] + expected: FAIL + + [max-width percentage(%) / events] + expected: FAIL + + [top length(pt) / events] + expected: FAIL + + [top length(pc) / events] + expected: FAIL + + [top length(px) / events] + expected: FAIL + + [top length(em) / events] + expected: FAIL + + [top length(ex) / events] + expected: FAIL + + [top length(mm) / events] + expected: FAIL + + [top length(cm) / events] + expected: FAIL + + [top length(in) / events] + expected: FAIL + + [top percentage(%) / events] + expected: FAIL + + [right length(pt) / events] + expected: FAIL + + [right length(pc) / events] + expected: FAIL + + [right length(px) / events] + expected: FAIL + + [right length(em) / events] + expected: FAIL + + [right length(ex) / events] + expected: FAIL + + [right length(mm) / events] + expected: FAIL + + [right length(cm) / events] + expected: FAIL + + [right length(in) / events] + expected: FAIL + + [right percentage(%) / events] + expected: FAIL + + [bottom length(pt) / events] + expected: FAIL + + [bottom length(pc) / events] + expected: FAIL + + [bottom length(px) / events] + expected: FAIL + + [bottom length(em) / events] + expected: FAIL + + [bottom length(ex) / events] + expected: FAIL + + [bottom length(mm) / events] + expected: FAIL + + [bottom length(cm) / events] + expected: FAIL + + [bottom length(in) / events] + expected: FAIL + + [bottom percentage(%) / events] + expected: FAIL + + [left length(pt) / events] + expected: FAIL + + [left length(pc) / events] + expected: FAIL + + [left length(px) / events] + expected: FAIL + + [left length(em) / events] + expected: FAIL + + [left length(ex) / events] + expected: FAIL + + [left length(mm) / events] + expected: FAIL + + [left length(cm) / events] + expected: FAIL + + [left length(in) / events] + expected: FAIL + + [left percentage(%) / events] + expected: FAIL + + [color color(rgba) / events] + expected: FAIL + + [font-size length(pt) / events] + expected: FAIL + + [font-size length(pc) / events] + expected: FAIL + + [font-size length(px) / events] + expected: FAIL + + [font-size length(em) / events] + expected: FAIL + + [font-size length(ex) / events] + expected: FAIL + + [font-size length(mm) / events] + expected: FAIL + + [font-size length(cm) / events] + expected: FAIL + + [font-size length(in) / events] + expected: FAIL + + [font-size percentage(%) / events] + expected: FAIL + + [font-weight font-weight(keyword) / events] + expected: FAIL + + [font-weight font-weight(numeric) / events] + expected: FAIL + + [line-height number(integer) / events] + expected: FAIL + + [line-height number(decimal) / events] + expected: FAIL + + [line-height length(pt) / events] + expected: FAIL + + [line-height length(pc) / events] + expected: FAIL + + [line-height length(px) / events] + expected: FAIL + + [line-height length(em) / events] + expected: FAIL + + [line-height length(ex) / events] + expected: FAIL + + [line-height length(mm) / events] + expected: FAIL + + [line-height length(cm) / events] + expected: FAIL + + [line-height length(in) / events] + expected: FAIL + + [line-height percentage(%) / events] + expected: FAIL + + [letter-spacing length(pt) / events] + expected: FAIL + + [letter-spacing length(pc) / events] + expected: FAIL + + [letter-spacing length(px) / events] + expected: FAIL + + [letter-spacing length(em) / events] + expected: FAIL + + [letter-spacing length(ex) / events] + expected: FAIL + + [letter-spacing length(mm) / events] + expected: FAIL + + [letter-spacing length(cm) / events] + expected: FAIL + + [letter-spacing length(in) / events] + expected: FAIL + + [word-spacing length(pt) / events] + expected: FAIL + + [word-spacing length(pc) / events] + expected: FAIL + + [word-spacing length(px) / events] + expected: FAIL + + [word-spacing length(em) / events] + expected: FAIL + + [word-spacing length(ex) / events] + expected: FAIL + + [word-spacing length(mm) / events] + expected: FAIL + + [word-spacing length(cm) / events] + expected: FAIL + + [word-spacing length(in) / events] + expected: FAIL + + [word-spacing percentage(%) / events] + expected: FAIL + + [text-indent length(pt) / events] + expected: FAIL + + [text-indent length(pc) / events] + expected: FAIL + + [text-indent length(px) / events] + expected: FAIL + + [text-indent length(em) / events] + expected: FAIL + + [text-indent length(ex) / events] + expected: FAIL + + [text-indent length(mm) / events] + expected: FAIL + + [text-indent length(cm) / events] + expected: FAIL + + [text-indent length(in) / events] + expected: FAIL + + [text-indent percentage(%) / events] + expected: FAIL + + [text-shadow shadow(shadow) / events] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini index 526e81e6310..242ba44bbca 100644 --- a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini +++ b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini @@ -52,153 +52,3 @@ [background-position length(px) / events] expected: FAIL - - [color color(rgba) / values] - expected: FAIL - - [font-size length(pt) / values] - expected: FAIL - - [font-size length(pc) / values] - expected: FAIL - - [font-size length(px) / values] - expected: FAIL - - [font-size length(em) / values] - expected: FAIL - - [font-size length(ex) / values] - expected: FAIL - - [font-size length(mm) / values] - expected: FAIL - - [font-size length(cm) / values] - expected: FAIL - - [font-size length(in) / values] - expected: FAIL - - [font-size percentage(%) / values] - expected: FAIL - - [font-weight font-weight(keyword) / values] - expected: FAIL - - [font-weight font-weight(numeric) / values] - expected: FAIL - - [line-height number(integer) / values] - expected: FAIL - - [line-height number(decimal) / values] - expected: FAIL - - [line-height length(pt) / values] - expected: FAIL - - [line-height length(pc) / values] - expected: FAIL - - [line-height length(px) / values] - expected: FAIL - - [line-height length(em) / values] - expected: FAIL - - [line-height length(ex) / values] - expected: FAIL - - [line-height length(mm) / values] - expected: FAIL - - [line-height length(cm) / values] - expected: FAIL - - [line-height length(in) / values] - expected: FAIL - - [line-height percentage(%) / values] - expected: FAIL - - [letter-spacing length(pt) / values] - expected: FAIL - - [letter-spacing length(pc) / values] - expected: FAIL - - [letter-spacing length(px) / values] - expected: FAIL - - [letter-spacing length(em) / values] - expected: FAIL - - [letter-spacing length(ex) / values] - expected: FAIL - - [letter-spacing length(mm) / values] - expected: FAIL - - [letter-spacing length(cm) / values] - expected: FAIL - - [letter-spacing length(in) / values] - expected: FAIL - - [word-spacing length(pt) / values] - expected: FAIL - - [word-spacing length(pc) / values] - expected: FAIL - - [word-spacing length(px) / values] - expected: FAIL - - [word-spacing length(em) / values] - expected: FAIL - - [word-spacing length(ex) / values] - expected: FAIL - - [word-spacing length(mm) / values] - expected: FAIL - - [word-spacing length(cm) / values] - expected: FAIL - - [word-spacing length(in) / values] - expected: FAIL - - [word-spacing percentage(%) / values] - expected: FAIL - - [text-indent length(pt) / values] - expected: FAIL - - [text-indent length(pc) / values] - expected: FAIL - - [text-indent length(px) / values] - expected: FAIL - - [text-indent length(em) / values] - expected: FAIL - - [text-indent length(ex) / values] - expected: FAIL - - [text-indent length(mm) / values] - expected: FAIL - - [text-indent length(cm) / values] - expected: FAIL - - [text-indent length(in) / values] - expected: FAIL - - [text-indent percentage(%) / values] - expected: FAIL - - [text-shadow shadow(shadow) / values] - expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini new file mode 100644 index 00000000000..f18b8d2fcf9 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini @@ -0,0 +1,3 @@ +[CaretPosition-001.html] + [Element at (400, 100)] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini index 7ba6df407e1..758c26f2a2d 100644 --- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini +++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini @@ -1,6 +1,3 @@ [MediaQueryList-extends-EventTarget-interop.html] [listeners are called in order they were added, ignoring capture parameter] expected: FAIL - - [listener added with addListener and addEventListener (capture) is called twice] - expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini index 8ae9bae3500..54775e607a3 100644 --- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini @@ -13,3 +13,9 @@ [<li>Outside 3</li>] expected: FAIL + + [<li>Inside 2</li>] + expected: FAIL + + [<li>Image Inside 1</li>] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini index 57cbb5a4948..ceb43099040 100644 --- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini @@ -17,6 +17,3 @@ [test some point of the element: bottom right corner] expected: FAIL - - [test some point of the element: top left corner] - expected: FAIL diff --git a/tests/wpt/metadata/css/mediaqueries/match-media-parsing.html.ini b/tests/wpt/metadata/css/mediaqueries/match-media-parsing.html.ini new file mode 100644 index 00000000000..4d5ecd0b127 --- /dev/null +++ b/tests/wpt/metadata/css/mediaqueries/match-media-parsing.html.ini @@ -0,0 +1,18 @@ +[match-media-parsing.html] + [Test parsing '(color)' with matchMedia] + expected: FAIL + + [Test parsing '(color' with matchMedia] + expected: FAIL + + [Test parsing ' (color)' with matchMedia] + expected: FAIL + + [Test parsing ' ( color ) ' with matchMedia] + expected: FAIL + + [Test parsing ' ( color ' with matchMedia] + expected: FAIL + + [Test parsing ' color ), ( color' with matchMedia] + expected: FAIL diff --git a/tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini b/tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini index fb4fc58bf90..73ce3fa9a20 100644 --- a/tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini +++ b/tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini @@ -15,3 +15,8 @@ [Adding/removing disabled content attribute] expected: FAIL + [Toggling "disabled" attribute on a custom element inside disabled <fieldset> does not trigger a callback] + expected: FAIL + + [Toggling "disabled" attribute on a <fieldset> does not trigger a callback on disabled custom element descendant] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini b/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini index 3285a4f15ac..e0663d34a38 100644 --- a/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini +++ b/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini @@ -76,3 +76,6 @@ [Input: "Content-Length: ". Expected: 42.] expected: FAIL + + [Input: "Content-Length: 42\\r\\nContent-Length: 42". Expected: 42.] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini index 741af78eff8..cd15896eae7 100644 --- a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini +++ b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini @@ -147,8 +147,8 @@ [list-style-image sec-fetch-site - HTTPS downgrade-upgrade] expected: FAIL - [background-image sec-fetch-site - HTTPS downgrade (header not sent)] - expected: TIMEOUT - [border-image sec-fetch-site - HTTPS downgrade (header not sent)] expected: FAIL + + [background-image sec-fetch-site - Not sent to non-trustworthy same-site destination] + expected: TIMEOUT diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index 736ff6130a5..e153b408731 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -7,3 +7,9 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL + + [X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff] + expected: FAIL + + [X-Content-Type-Options%3A%20%22nosniFF%22] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index dc1144214ef..856bb1c9901 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -1,9 +1,10 @@ [iframe-src-aboutblank-navigate-immediately.html] + expected: TIMEOUT [Navigating to a different document with window.open] expected: FAIL [Navigating to a different document with form submission] - expected: FAIL + expected: TIMEOUT [Navigating to a different document with link click] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini index bcda478adb1..5a245d61359 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini @@ -1,10 +1,6 @@ [javascript-url-referrer.window.html] - expected: TIMEOUT [unsafe-url referrer policy used to create the starting page] expected: FAIL [origin referrer policy used to create the starting page] expected: FAIL - - [no-referrer referrer policy used to create the starting page] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini deleted file mode 100644 index 4ecd6d9f753..00000000000 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[navigation-unload-cross-origin.sub.window.html] - [Cross-origin navigation started from unload handler must be ignored] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini new file mode 100644 index 00000000000..7dc346632a4 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini @@ -0,0 +1,3 @@ +[navigation-unload-same-origin.window.html] + [Same-origin navigation started from unload handler must be ignored] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini new file mode 100644 index 00000000000..60a4fa51f8a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini @@ -0,0 +1,3 @@ +[a-click.html] + [aElement.click() before the load event must NOT replace] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini new file mode 100644 index 00000000000..f5b7b25324f --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini @@ -0,0 +1,4 @@ +[traverse-during-unload.html] + expected: TIMEOUT + [Traversing the history during unload] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini deleted file mode 100644 index ba0aed26689..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[traverse_the_history_1.html] - [Multiple history traversals from the same task] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini deleted file mode 100644 index 4b4820d1729..00000000000 --- a/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[creating_browsing_context_test_01.html] - [first argument: absolute url] - expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini b/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini index 2a54f2f8814..5cdcce07c65 100644 --- a/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini +++ b/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini @@ -1,2 +1,2 @@ [canvas.2d.disconnected.html] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini index 830aeb8ae48..fdc27d37788 100644 --- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini @@ -1,7 +1,6 @@ [autofocus-dialog.html] - expected: TIMEOUT [<dialog> can contain autofocus, without stopping page autofocus content from working] expected: FAIL [<dialog>-contained autofocus element gets focused when the dialog is shown] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini index 8acae84e1e4..d169bd2e9fa 100644 --- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini @@ -1,5 +1,4 @@ [supported-elements.html] - expected: TIMEOUT [Contenteditable element should support autofocus] expected: FAIL @@ -10,7 +9,7 @@ expected: FAIL [Area element should support autofocus] - expected: TIMEOUT + expected: FAIL [Host element with delegatesFocus should support autofocus] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_canplay.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_canplay.html.ini deleted file mode 100644 index 580b0c7a8e4..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_canplay.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[event_canplay.html] - expected: ERROR diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini index 47b45e65a1c..3cdeb8ebcbc 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini @@ -1,9 +1,3 @@ [non-active-document.html] [DOMParser] expected: FAIL - - [createHTMLDocument] - expected: FAIL - - [<template>] - expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini index 9101c169754..35bc899ff38 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini @@ -14,9 +14,6 @@ [multipart/form-data: 0x00 in name (formdata event)] expected: FAIL - [multipart/form-data: 0x00 in value (normal form)] - expected: FAIL - [multipart/form-data: 0x00 in value (formdata event)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini index 200022641d0..0372084c73b 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini @@ -11,9 +11,6 @@ [text/plain: 0x00 in name (normal form)] expected: FAIL - [text/plain: 0x00 in name (formdata event)] - expected: FAIL - [text/plain: 0x00 in value (normal form)] expected: FAIL @@ -167,9 +164,6 @@ [text/plain: character not in encoding in filename (formdata event)] expected: FAIL - [text/plain: Basic test (formdata event)] - expected: FAIL - [text/plain: 0x00 in filename (formdata event)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/historical.html.ini b/tests/wpt/metadata/html/semantics/forms/historical.html.ini new file mode 100644 index 00000000000..5d8289307cc --- /dev/null +++ b/tests/wpt/metadata/html/semantics/forms/historical.html.ini @@ -0,0 +1,3 @@ +[historical.html] + [<input name=isindex> should not be supported] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.tentative.html.ini b/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.tentative.html.ini new file mode 100644 index 00000000000..371d5a57c10 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.tentative.html.ini @@ -0,0 +1,18 @@ +[popover-target-element-disabled.tentative.html] + [Disabled popover*target buttons should not affect the popover heirarchy.] + expected: FAIL + + [Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly outer popover is closed.] + expected: FAIL + + [Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly inner popover is closed.] + expected: FAIL + + [Setting the form attribute on popover*target buttons when popovers are open should close all popovers.] + expected: FAIL + + [Changing the input type on a popover*target button when popovers are open should close all popovers.] + expected: FAIL + + [Disconnecting popover*target buttons when popovers are open should close all popovers.] + expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini deleted file mode 100644 index fc0233f5241..00000000000 --- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[module-delayed.html] - [async document.write in a module] - expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini new file mode 100644 index 00000000000..53acb938c1b --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini @@ -0,0 +1,3 @@ +[module-static-import-delayed.html] + [document.write in an imported module] + expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini index 7237f5792de..dbe1def99e3 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini @@ -1,10 +1,9 @@ [promise-job-entry-different-function-realm.html] - expected: TIMEOUT [Fulfillment handler on fulfilled promise] expected: FAIL [Rejection handler on pending-then-rejected promise] - expected: TIMEOUT + expected: FAIL [Thenable resolution] expected: FAIL @@ -13,4 +12,4 @@ expected: FAIL [Fulfillment handler on pending-then-fulfilled promise] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini index 6ab46a7862c..31bfd644df0 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini @@ -1,5 +1,4 @@ [promise-job-entry.html] - expected: TIMEOUT [Fulfillment handler on fulfilled promise] expected: FAIL @@ -7,7 +6,7 @@ expected: FAIL [Sanity check: this all works as expected with no promises involved] - expected: TIMEOUT + expected: FAIL [Thenable resolution] expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini b/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini index 9783c3ac379..b232fd58335 100644 --- a/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini +++ b/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini @@ -7,13 +7,13 @@ expected: FAIL [content-type 2 : text/html,text/plain] - expected: TIMEOUT + expected: FAIL [content-type 3 : text/plain;charset=gbk,text/html] - expected: NOTRUN + expected: FAIL [content-type 4 : text/plain;charset=gbk,text/html;charset=windows-1254] - expected: NOTRUN + expected: TIMEOUT [content-type 5 : text/plain;charset=gbk,text/plain] expected: NOTRUN diff --git a/tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini b/tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini index 09c24f00b13..55121e9289c 100644 --- a/tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini +++ b/tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini @@ -1,5 +1,4 @@ [nextHopProtocol-is-tao-protected.https.html] - expected: TIMEOUT [Add TAO-less iframe from remote origin. Make sure nextHopProtocol is the empty string] expected: TIMEOUT @@ -25,28 +24,16 @@ expected: FAIL [Fetch TAO'd object from remote origin. Make sure nextHopProtocol is not the empty string.] - expected: TIMEOUT - - [Fetch TAO-less script from remote origin. Make sure nextHopProtocol is the empty string.] - expected: NOTRUN + expected: FAIL [Fetch TAO'd script from remote origin. Make sure nextHopProtocol is not the empty string.] - expected: NOTRUN - - [Fetch TAO-less stylesheet from remote origin. Make sure nextHopProtocol is the empty string.] - expected: NOTRUN + expected: FAIL [Fetch TAO'd stylesheet from remote origin. Make sure nextHopProtocol is not the empty string.] - expected: NOTRUN - - [Fetch TAO-less synchronous xhr from remote origin. Make sure nextHopProtocol is the empty string.] - expected: NOTRUN + expected: FAIL [Fetch TAO'd synchronous xhr from remote origin. Make sure nextHopProtocol is not the empty string.] - expected: NOTRUN - - [Fetch TAO-less asynchronous xhr from remote origin. Make sure nextHopProtocol is the empty string.] - expected: NOTRUN + expected: FAIL [Fetch TAO'd asynchronous xhr from remote origin. Make sure nextHopProtocol is not the empty string.] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini b/tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini index 76a5e178ab0..ded983b5baa 100644 --- a/tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini +++ b/tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini @@ -1,5 +1,4 @@ [object-not-found-adds-entry.html] - expected: TIMEOUT [Test that an navigation object with a 200 response displays an entry] expected: FAIL @@ -16,4 +15,4 @@ expected: FAIL [Verify that a 404 img-typed object emits an entry.] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/response-status-code.html.ini b/tests/wpt/metadata/resource-timing/response-status-code.html.ini index 3c8127e59f6..38df5f01300 100644 --- a/tests/wpt/metadata/resource-timing/response-status-code.html.ini +++ b/tests/wpt/metadata/resource-timing/response-status-code.html.ini @@ -238,37 +238,37 @@ expected: FAIL [This test validates the response status of resources. 79] - expected: TIMEOUT + expected: FAIL [This test validates the response status of resources. 80] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 81] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 82] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 83] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 84] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 85] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 86] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 87] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 88] - expected: NOTRUN + expected: FAIL [This test validates the response status of resources. 89] - expected: NOTRUN + expected: TIMEOUT [This test validates the response status of resources. 90] expected: NOTRUN @@ -899,3 +899,153 @@ [This test validates the response status of resources. 299] expected: NOTRUN + + [This test validates the response status of resources. 300] + expected: NOTRUN + + [This test validates the response status of resources. 301] + expected: NOTRUN + + [This test validates the response status of resources. 302] + expected: NOTRUN + + [This test validates the response status of resources. 303] + expected: NOTRUN + + [This test validates the response status of resources. 304] + expected: NOTRUN + + [This test validates the response status of resources. 305] + expected: NOTRUN + + [This test validates the response status of resources. 306] + expected: NOTRUN + + [This test validates the response status of resources. 307] + expected: NOTRUN + + [This test validates the response status of resources. 308] + expected: NOTRUN + + [This test validates the response status of resources. 309] + expected: NOTRUN + + [This test validates the response status of resources. 310] + expected: NOTRUN + + [This test validates the response status of resources. 311] + expected: NOTRUN + + [This test validates the response status of resources. 312] + expected: NOTRUN + + [This test validates the response status of resources. 313] + expected: NOTRUN + + [This test validates the response status of resources. 314] + expected: NOTRUN + + [This test validates the response status of resources. 315] + expected: NOTRUN + + [This test validates the response status of resources. 316] + expected: NOTRUN + + [This test validates the response status of resources. 317] + expected: NOTRUN + + [This test validates the response status of resources. 318] + expected: NOTRUN + + [This test validates the response status of resources. 319] + expected: NOTRUN + + [This test validates the response status of resources. 320] + expected: NOTRUN + + [This test validates the response status of resources. 321] + expected: NOTRUN + + [This test validates the response status of resources. 322] + expected: NOTRUN + + [This test validates the response status of resources. 323] + expected: NOTRUN + + [This test validates the response status of resources. 324] + expected: NOTRUN + + [This test validates the response status of resources. 325] + expected: NOTRUN + + [This test validates the response status of resources. 326] + expected: NOTRUN + + [This test validates the response status of resources. 327] + expected: NOTRUN + + [This test validates the response status of resources. 328] + expected: NOTRUN + + [This test validates the response status of resources. 329] + expected: NOTRUN + + [This test validates the response status of resources. 330] + expected: NOTRUN + + [This test validates the response status of resources. 331] + expected: NOTRUN + + [This test validates the response status of resources. 332] + expected: NOTRUN + + [This test validates the response status of resources. 333] + expected: NOTRUN + + [This test validates the response status of resources. 334] + expected: NOTRUN + + [This test validates the response status of resources. 335] + expected: NOTRUN + + [This test validates the response status of resources. 336] + expected: NOTRUN + + [This test validates the response status of resources. 337] + expected: NOTRUN + + [This test validates the response status of resources. 338] + expected: NOTRUN + + [This test validates the response status of resources. 339] + expected: NOTRUN + + [This test validates the response status of resources. 340] + expected: NOTRUN + + [This test validates the response status of resources. 341] + expected: NOTRUN + + [This test validates the response status of resources. 342] + expected: NOTRUN + + [This test validates the response status of resources. 343] + expected: NOTRUN + + [This test validates the response status of resources. 344] + expected: NOTRUN + + [This test validates the response status of resources. 345] + expected: NOTRUN + + [This test validates the response status of resources. 346] + expected: NOTRUN + + [This test validates the response status of resources. 347] + expected: NOTRUN + + [This test validates the response status of resources. 348] + expected: NOTRUN + + [This test validates the response status of resources. 349] + expected: NOTRUN diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini index b7537329068..eed03df37f3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini @@ -1,5 +1,4 @@ [audiocontext-not-fully-active.html] - expected: TIMEOUT [frame in navigated remote-site frame] expected: FAIL diff --git a/tests/wpt/metadata/webmessaging/with-ports/017.html.ini b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini new file mode 100644 index 00000000000..c7946fc91b4 --- /dev/null +++ b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini @@ -0,0 +1,4 @@ +[017.html] + expected: TIMEOUT + [origin of the script that invoked the method, about:blank] + expected: TIMEOUT diff --git a/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini b/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini new file mode 100644 index 00000000000..f78f699f620 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini @@ -0,0 +1,3 @@ +[scrollBy.html] + [Ensure that the window.scrollBy function affects scroll position as expected] + expected: FAIL diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-001.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-001.html new file mode 100644 index 00000000000..b5849510e83 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-001.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<title>Tests CSS transition of anchor() and anchor-size() functions</title> +<link rel="help" href="https://drafts4.csswg.org/css-anchor-1/"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8180"></script> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +body { + margin: 0; +} + +#anchor1 { + margin-left: 0px; + margin-top: 0px; + width: 200px; + height: 100px; + background: orange; + anchor-name: --a1; +} + +#anchor2 { + margin-left: 400px; + margin-top: 200px; + width: 100px; + height: 200px; + background: orange; + anchor-name: --a2; +} + +#target { + position: fixed; + width: 100px; + height: 100px; + background-color: lime; + transition: all 10s -5s linear; +} + +#target.before { + top: anchor(--a1 top); + left: anchor(--a1 right); + width: anchor-size(--a1 width); + height: anchor-size(--a1 height); +} + +#target.after { + top: anchor(--a2 bottom); + left: anchor(--a2 left); + width: anchor-size(--a2 width); + height: anchor-size(--a2 height); +} +</style> + +<div id="anchor1"></div> +<div id="anchor2"></div> +<div id="target" class="before"></div> + +<script> +setup(() => { + // Forces layout + target.offsetLeft; + // Triggers transition starting at 50% immediately + target.classList.remove('before'); + target.classList.add('after'); +}); + +test(() => { + assert_equals(target.offsetLeft, 300); + assert_equals(target.offsetTop, 250); +}, 'Transition of anchor() when changing target anchor element name'); + +test(() => { + assert_equals(target.offsetWidth, 150); + assert_equals(target.offsetHeight, 150); +}, 'Transition of anchor-size() when changing target anchor element name'); +</script> + diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-002.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-002.html new file mode 100644 index 00000000000..b6a1ff4511a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-002.html @@ -0,0 +1,70 @@ +<!DOCTYPE html> +<title>Tests CSS transition of anchor() across tree scopes</title> +<link rel="help" href="https://drafts4.csswg.org/css-anchor-1/"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8180"></script> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +body { + margin: 0; +} + +#anchor1 { + width: 100px; + height: 100px; + background: orange; + anchor-name: --a; +} + +#anchor2 { + width: 100px; + height: 100px; + margin-top: 200px; + margin-left: 300px; + background: orange; +} + +#anchor2.after::part(target) { + top: anchor(--a top); + left: anchor(--a right); +} +</style> + +<div id="anchor1"></div> +<div id="anchor2"></div> + +<script> +setup(() => { + let shadow = anchor2.attachShadow({mode: 'open'}); + shadow.innerHTML = ` + <style> + :host { anchor-name: --a; } + #target { + position: fixed; + width: 100px; + height: 100px; + background: lime; + top: anchor(--a top); + left: anchor(--a right); + transition: all 10s -5s linear; + } + </style> + <div id="target" part="target"></div> + `; +}); + +test(() => { + let target = anchor2.shadowRoot.getElementById('target'); + + // Forces layout + target.offsetLeft; + + // Triggers a transition from using #anchor2 to using #anchor1, + // starting immediately at 50% progress. + anchor2.classList.add('after'); + assert_equals(target.offsetLeft, 250); + assert_equals(target.offsetTop, 150); +}, 'Transition with anchor names defined in different tree scopes'); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-003.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-003.html new file mode 100644 index 00000000000..e7441275141 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-003.html @@ -0,0 +1,89 @@ +<!DOCTYPE html> +<title>Tests CSS transition of anchor() across three tree scopes</title> +<link rel="help" href="https://drafts4.csswg.org/css-anchor-1/"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8180"></script> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +body { + margin: 0; +} + +#anchor1 { + width: 100px; + height: 100px; + background: orange; + anchor-name: --a; +} + +#host.after::part(target) { + left: anchor(--a left); +} +</style> + +<div id="anchor1"></div> +<div id="host"></div> + +<script> +setup(() => { +let shadow = host.attachShadow({mode: 'open'}); +shadow.innerHTML = ` + <style> + div { + width: 100px; + height: 100px; + background: orange; + } + #anchor2 { + margin-left: 200px; + anchor-name: --a; + } + #anchor3 { + margin-left: 400px; + } + #target { + position: fixed; + background: lime; + top: 300px; + transition: left 10s -5s linear; + } + #target.after { + left: anchor(--a left); + } + </style> + <div id="anchor2"></div> + <div id="anchor3"> + <div id="target" part="target"></div> + </div> +`; + +let anchor3 = shadow.getElementById('anchor3'); +let innerShadow = anchor3.attachShadow({mode: 'open'}); +innerShadow.innerHTML = ` + <style> + :host { anchor-name: --a; } + ::slotted(*) { left: anchor(--a left); } + </style> + <slot></slot> +`; +}); + +test(() => { + let target = host.shadowRoot.getElementById('target'); + + // Forces layout + target.offsetLeft; + + // Triggers a transition from using #anchor3 to using #anchor2, + // starting immediately at 50% progress + target.classList.add('after'); + assert_equals(target.offsetLeft, 300); + + // Triggers another transition to using #anchor1 while the previous + // transition is still in progress. + host.classList.add('after'); + assert_equals(target.offsetLeft, 150); +}, 'Transition with anchor names defined in three different tree scopes'); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-nesting/parsing.html b/tests/wpt/web-platform-tests/css/css-nesting/parsing.html index 66d1566586c..8e445faf1c9 100644 --- a/tests/wpt/web-platform-tests/css/css-nesting/parsing.html +++ b/tests/wpt/web-platform-tests/css/css-nesting/parsing.html @@ -25,7 +25,6 @@ `.foo {\n .bar > & { color: green; }\n}`, `.foo, .bar {\n & + .baz, &.qux { color: green; }\n}`, `.foo {\n & .bar & .baz & .qux { color: green; }\n}`, - `.foo {\n @media (min-width: 50px) {\n & { color: green; }\n}\n}`, `.foo {\n @media (min-width: 50px) { color: green; }\n}`, `main {\n & > section, & > article {\n & > header { color: green; }\n}\n}`, ] diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html index d996091dc20..b91b143e368 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html @@ -148,6 +148,11 @@ test_not_applied('gandalf', 'grey', false); test_not_applied('<color>', 'notacolor', false); test_not_applied('<length>', '10em', false); +test_not_applied('<transform-function>', 'translateX(1em)', false); +test_not_applied('<transform-function>', 'translateY(1lh)', false); +test_not_applied('<transform-list>', 'rotate(10deg) translateX(1em)', false); +test_not_applied('<transform-list>', 'rotate(10deg) translateY(1lh)', false); + // Inheritance test_with_at_property({ diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html new file mode 100644 index 00000000000..891bda52a39 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<title>Tests animation with tree-scoped names and references</title> +<meta name="assert" content="Custom counter style references should work in keyframes"> +<link rel="help" href="https://drafts.csswg.org/css-scoping/#shadow-names"> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<link rel="match" href="scoped-reference-animation-ref.html"> + +<style> +/* Overrides predefined lower-roman counter-style */ +@counter-style lower-roman { + system: cyclic; + symbols: 'X'; +} + +/* Overrides predefined upper-roman counter-style */ +@counter-style upper-roman { + system: cyclic; + symbols: 'O'; +} + +/* Should resolve to the custom counter styles, not the predefined ones */ +@keyframes list-style-type-anim { + from { list-style-type: lower-roman; } + to { list-style-type: upper-roman; } +} + +#target1 { + animation: list-style-type-anim 2s -0.9s linear paused; +} + +#target2 { + animation: list-style-type-anim 2s -1s linear paused; +} +</style> + +<ul id="target1"> + <li>List marker should be X +</ul> + +<ul id="target2"> + <li>List marker should be O +</ul> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html new file mode 100644 index 00000000000..d5c25f06c0a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<title>Tests animation with tree-scoped names and references</title> +<meta name="assert" content="Custom counter style references should work in shadow DOM keyframes"> +<link rel="help" href="https://drafts.csswg.org/css-scoping/#shadow-names"> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<link rel="match" href="scoped-reference-animation-ref.html"> + +<style> +@counter-style lower-roman { system: extends disc; } +@counter-style upper-roman { system: extends disc; } +</style> + +<div id="host"> +</div> + +<script> +host.attachShadow({mode: 'open'}).innerHTML = ` +<style> +/* Overrides predefined and outer tree scope's custom lower-roman counter-style */ +@counter-style lower-roman { + system: cyclic; + symbols: 'X'; +} + +/* Overrides predefined and outer tree scope's upper-roman counter-style */ +@counter-style upper-roman { + system: cyclic; + symbols: 'O'; +} + +/* Should resolve to the custom counter styles, not the predefined or the outer + tree scope's ones */ +@keyframes list-style-type-anim { + from { list-style-type: lower-roman; } + to { list-style-type: upper-roman; } +} + +#target1 { + animation: list-style-type-anim 2s -0.9s linear paused; +} + +#target2 { + animation: list-style-type-anim 2s -1s linear paused; +} +</style> + +<ul id="target1"> + <li>List marker should be X +</ul> + +<ul id="target2"> + <li>List marker should be O +</ul> +`; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html new file mode 100644 index 00000000000..9f407eb690e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<title>Tests animation with tree-scoped names and references</title> + +<style> +@counter-style from-counter-style { + system: cyclic; + symbols: 'X'; +} + +@counter-style to-counter-style { + system: cyclic; + symbols: 'O'; +} + +#target1 { + list-style-type: from-counter-style; +} + +#target2 { + list-style-type: to-counter-style; +} +</style> + +<ul id="target1"> + <li>List marker should be X +</ul> + +<ul id="target2"> + <li>List marker should be O +</ul> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-after-relayout/focus-element-no-snap.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-after-relayout/focus-element-no-snap.html new file mode 100644 index 00000000000..9ec004c6287 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-after-relayout/focus-element-no-snap.html @@ -0,0 +1,51 @@ +<!doctype html> +<title>Resnap to focused element after relayout</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + +#snapper { + width: 100px; + height: 200px; + overflow-x: scroll; + scroll-snap-type: x mandatory; + color: white; + background-color: oldlace; + display: flex; + align-items: center; +} +.child { + margin-right: 0.5rem; + height: 90%; + scroll-snap-align: start; + padding: 1rem; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + width: 100px; + height: 100px; + background-color: indigo; +} +</style> + +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap/#re-snap"> + +<div id=snapper> + <div class="child no-snap" tabindex=-1></div> + <div class=child></div> + <div class="child" id ="focus" tabindex=-1></div> + <div class="child" tabindex=-1></div> + <div class=child></div> + <div class=child></div> +</div> + +<script> + +test(t => { + document.getElementById("focus").focus(); + const element = document.getElementById("snapper"); + element.style.width = "101px"; + assert_equals(element.scrollLeft, 0); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht index db3ee2a586f..d2e0fe34995 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht @@ -50,7 +50,7 @@ <span>サンプルサンプル文<span class="target">‥‥</span>サンプル文</span> </p> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">‥‥</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">‥‥</span>サンプル文</span> </p> </div> <div class="wrapper"> @@ -59,7 +59,7 @@ <span>サンプルサンプル文<span class="target">……</span>サンプル文</span> </p> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">……</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">……</span>サンプル文</span> </p> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht index 9114120bc86..ad31e4fc54d 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht @@ -50,7 +50,7 @@ <span>サンプルサンプル文<span class="target">‥‥</span>サンプル文</span> </p> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">‥‥</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">‥‥</span>サンプル文</span> </p> </div> <div class="wrapper"> @@ -59,7 +59,7 @@ <span>サンプルサンプル文<span class="target">……</span>サンプル文</span> </p> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">……</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">……</span>サンプル文</span> </p> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht index 941e18242d9..23cf1487b1b 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht @@ -41,19 +41,19 @@ <div class="wrapper"> <!-- inseparable characters TWO DOT LEADER --> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">‥‥</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">‥‥</span>サンプル文</span> </p> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">‥‥</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">‥‥</span>サンプル文</span> </p> </div> <div class="wrapper"> <!-- inseparable characters HORIZONTAL ELLIPSIS --> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">……</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">……</span>サンプル文</span> </p> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">……</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">……</span>サンプル文</span> </p> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht index f8a1222a333..252818c22a0 100644 --- a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht +++ b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht @@ -41,19 +41,19 @@ <div class="wrapper"> <!-- inseparable characters TWO DOT LEADER --> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">‥‥</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">‥‥</span>サンプル文</span> </p> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">‥‥</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">‥‥</span>サンプル文</span> </p> </div> <div class="wrapper"> <!-- inseparable characters HORIZONTAL ELLIPSIS --> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">……</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">……</span>サンプル文</span> </p> <p class="control" lang="ja"> - <span>サンプルサンプル文<br /><span class="target">……</span>サンプル文</span> + <span>サンプルサンプル<br />文<span class="target">……</span>サンプル文</span> </p> </div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-011.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-011.html new file mode 100644 index 00000000000..8c40a31a356 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-011.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: line breaking with white-space: break-spaces and element boundaries</title> +<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="assert" content="An element boundary doesn't allow breaking if white-space is set to break-spaces at both sides of the boundary"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +.fail span { color: green; } +.test { + color: green; + width: 4ch; + white-space: break-spaces; +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> +<div class="fail">XXXX<br>X<span>X</span>X<span>X</span><br>XX<span>XX</span><br>X<span>X</span>X<span>X</span></div> +<div class="test"><span>XXXX</span> X X XX<span> </span><span> </span>X X</div> diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html index 034df41dde1..c3e9d669a30 100644 --- a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html +++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<html class=reftest-wait> +<html class="reftest-wait foo"> <title>View transitions: ensure :only-child is supported on view-transition-group</title> <link rel="help" href="https://github.com/WICG/view-transitions"> <link rel="author" href="mailto:khushalsagar@chromium.org"> @@ -8,6 +8,22 @@ <script src="/resources/testharnessreport.js"></script> <style> +::view-transition { + background-color: black; +} +html:only-child { + background-color: black; +} +:root:only-child { + background-color: black; +} +:only-child { + background-color: black; +} +.foo:only-child { + background-color: black; +} + ::view-transition-group(root) { background-color: blue; } diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html index 830b37313ea..93fcc0a5ea8 100644 --- a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html +++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<html class=reftest-wait> +<html class="reftest-wait foo"> <title>View transitions: ensure :only-child is supported on view-transition-image-pair</title> <link rel="help" href="https://github.com/WICG/view-transitions"> <link rel="author" href="mailto:khushalsagar@chromium.org"> @@ -8,6 +8,22 @@ <script src="/resources/testharnessreport.js"></script> <style> +::view-transition { + background-color: black; +} +html:only-child { + background-color: black; +} +:root:only-child { + background-color: black; +} +:only-child { + background-color: black; +} +.foo:only-child { + background-color: black; +} + ::view-transition-image-pair(root):only-child { background-color: red; } diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html index 2f8a7a4023e..62328f27cf2 100644 --- a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html +++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<html class=reftest-wait> +<html class="reftest-wait foo"> <title>View transitions: ensure :only-child is supported on view-transition-new</title> <link rel="help" href="https://github.com/WICG/view-transitions"> <link rel="author" href="mailto:khushalsagar@chromium.org"> @@ -8,6 +8,22 @@ <script src="/resources/testharnessreport.js"></script> <style> +::view-transition { + background-color: black; +} +html:only-child { + background-color: black; +} +:root:only-child { + background-color: black; +} +:only-child { + background-color: black; +} +.foo:only-child { + background-color: black; +} + ::view-transition-new(root) { background-color: blue; } diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html index 4ca6fed20ce..56dfa168e25 100644 --- a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html +++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<html class=reftest-wait> +<html class="reftest-wait foo"> <title>View transitions: ensure :only-child is supported on view-transition-old</title> <link rel="help" href="https://github.com/WICG/view-transitions"> <link rel="author" href="mailto:khushalsagar@chromium.org"> @@ -8,6 +8,22 @@ <script src="/resources/testharnessreport.js"></script> <style> +::view-transition { + background-color: black; +} +html:only-child { + background-color: black; +} +:root:only-child { + background-color: black; +} +:only-child { + background-color: black; +} +.foo:only-child { + background-color: black; +} + ::view-transition-old(root) { background-color: blue; } diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-on-root-element-with-view-transition.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-on-root-element-with-view-transition.html new file mode 100644 index 00000000000..0bf6d8b84b3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-on-root-element-with-view-transition.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html class="reftest-wait foo"> +<title>View transitions: ensure :only-child is supported on view-transition</title> +<link rel="help" href="https://github.com/WICG/view-transitions"> +<link rel="author" href="mailto:khushalsagar@chromium.org"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +::view-transition { + background-color: red; +} + +html:only-child { + background-color: blue; +} + +:root:only-child { + background-color: blue; +} + +:only-child { + background-color: blue; +} + +.foo:only-child { + background-color: blue; +} +</style> + +<script> +promise_test(() => { + return new Promise(async (resolve, reject) => { + let transition = document.startViewTransition(); + transition.ready.then(() => { + let style = getComputedStyle( + document.documentElement, ":view-transition"); + if (style.backgroundColor == "rgb(255, 0, 0)") + resolve(); + else + reject(style.backgroundColor); + }); + }); +}, ":only-child is not supported on view-transition"); +</script> diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/match-media-parsing.html b/tests/wpt/web-platform-tests/css/mediaqueries/match-media-parsing.html new file mode 100644 index 00000000000..9d9aa3dd581 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/mediaqueries/match-media-parsing.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-syntax-3/#parse-comma-separated-list-of-component-values"> +<script type="text/javascript" src="/resources/testharness.js"></script> +<script type="text/javascript" src="/resources/testharnessreport.js"></script> + +<script> +function test_parsing(query, expected) { + test(() => { + const match = window.matchMedia(query); + assert_equals(match.media, expected) + }, "Test parsing '" + query + "' with matchMedia"); +} +test_parsing("", ""); +test_parsing(" ", ""); +test_parsing("all", "all"); +test_parsing(" all", "all"); +test_parsing(" all ", "all"); +test_parsing("all,all", "all, all"); +test_parsing(" all , all ", "all, all"); +test_parsing("(color)", "(color)"); +test_parsing("(color", "(color)"); +test_parsing(" (color)", "(color)"); +test_parsing(" ( color ) ", "(color)"); +test_parsing(" ( color ", "(color)"); +test_parsing("color)", "not all"); +test_parsing(" color)", "not all"); +test_parsing(" color ), ( color", "not all, (color)"); +test_parsing(" foo ", "foo"); +test_parsing(",", "not all, not all"); +test_parsing(" , ", "not all, not all"); +test_parsing(",,", "not all, not all, not all"); +test_parsing(" , , ", "not all, not all, not all"); +test_parsing(" foo,", "foo, not all"); +</script> diff --git a/tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html b/tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html index 954c3f3f6ee..c61a7719fc6 100644 --- a/tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html +++ b/tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html @@ -110,5 +110,27 @@ test(() => { container.innerHTML = '<fieldset disabled><my-control>'; assert_array_equals(container.querySelector('my-control').disabledHistory(), [true]); }, 'Upgrading an element with disabled content attribute'); + +test(() => { + const container = document.createElement('div'); + document.body.appendChild(container); + container.innerHTML = '<fieldset disabled><my-control></my-control></fieldset>'; + + const control = container.querySelector('my-control'); + control.setAttribute('disabled', ''); + control.removeAttribute('disabled'); + assert_array_equals(control.disabledHistory(), [true]); +}, 'Toggling "disabled" attribute on a custom element inside disabled <fieldset> does not trigger a callback'); + +test(() => { + const container = document.createElement('div'); + document.body.appendChild(container); + container.innerHTML = '<fieldset><my-control disabled></my-control></fieldset>'; + + const fieldset = container.firstElementChild; + fieldset.disabled = true; + fieldset.disabled = false; + assert_array_equals(container.querySelector('my-control').disabledHistory(), [true]); +}, 'Toggling "disabled" attribute on a <fieldset> does not trigger a callback on disabled custom element descendant'); </script> </body> diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py b/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py new file mode 100644 index 00000000000..048e96b7012 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py @@ -0,0 +1,22 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Presubmit script for t/b/web_tests/external/wpt/html/canvas/tools. + +See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts +for more details about the presubmit API built into depot_tools. +""" + +USE_PYTHON3 = True + + +def CommonChecks(input_api, output_api): + return input_api.canned_checks.RunPylint(input_api, output_api) + + +def CheckChangeOnUpload(input_api, output_api): + return CommonChecks(input_api, output_api) + + +def CheckChangeOnCommit(input_api, output_api): + return CommonChecks(input_api, output_api) diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentest.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentest.py index cb1f720590c..bca7b9ecfcb 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/gentest.py +++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentest.py @@ -1,6 +1,8 @@ from gentestutils import genTestUtils from gentestutilsunion import genTestUtils_union -genTestUtils('../element', '../element', 'templates.yaml', 'name2dir-canvas.yaml', False) -genTestUtils('../offscreen', '../offscreen', 'templates.yaml', 'name2dir-offscreen.yaml', True) -genTestUtils_union('templates-new.yaml', 'name2dir.yaml')
\ No newline at end of file +genTestUtils('../element', '../element', 'templates.yaml', + 'name2dir-canvas.yaml', False) +genTestUtils('../offscreen', '../offscreen', 'templates.yaml', + 'name2dir-offscreen.yaml', True) +genTestUtils_union('templates-new.yaml', 'name2dir.yaml') diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py index 1206aa91bfb..16ca5f410c0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py +++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py @@ -6,19 +6,20 @@ # It has been adapted for use with the Web Platform Test Suite suite at # https://github.com/web-platform-tests/wpt/ # -# The original version had a number of now-removed features (multiple versions of -# each test case of varying verbosity, Mozilla mochitests, semi-automated test -# harness). It also had a different directory structure. +# The original version had a number of now-removed features (multiple versions +# of each test case of varying verbosity, Mozilla mochitests, semi-automated +# test harness). It also had a different directory structure. # To update or add test cases: # # * Modify the tests*.yaml files. -# 'name' is an arbitrary hierarchical name to help categorise tests. -# 'desc' is a rough description of what behaviour the test aims to test. -# 'code' is JavaScript code to execute, with some special commands starting with '@' -# 'expected' is what the final canvas output should be: a string 'green' or 'clear' -# (100x50 images in both cases), or a string 'size 100 50' (or any other size) -# followed by Python code using Pycairo to generate the image. +# - 'name' is an arbitrary hierarchical name to help categorise tests. +# - 'desc' is a rough description of what behaviour the test aims to test. +# - 'code' is JavaScript code to execute, with some special commands starting +# with '@' +# - 'expected' is what the final canvas output should be: a string 'green' or +# 'clear' (100x50 images in both cases), or a string 'size 100 50' (or any +# other size) followed by Python code using Pycairo to generate the image. # # * Run "./build.sh". # This requires a few Python modules which might not be ubiquitous. @@ -27,43 +28,49 @@ # # * Test the tests, add new ones to Git, remove deleted ones from Git, etc. -from __future__ import print_function +from typing import List, Optional import re import codecs -import time +import importlib import os -import shutil import sys -import xml.dom.minidom -from xml.dom.minidom import Node try: - import cairocffi as cairo + import cairocffi as cairo # type: ignore except ImportError: import cairo try: - import syck as yaml # compatible and lots faster + # Compatible and lots faster. + import syck as yaml # type: ignore except ImportError: import yaml -def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOFFSCREENCANVAS): - MISCOUTPUTDIR = './output' +class Error(Exception): + """Base class for all exceptions raised by this module""" + + +class InvalidTestDefinitionError(Error): + """Raised on invalid test definition.""" + + +def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str, + NAME2DIRFILE: str, ISOFFSCREENCANVAS: bool) -> None: - def simpleEscapeJS(str): - return str.replace('\\', '\\\\').replace('"', '\\"') + MISCOUTPUTDIR = './output' - def escapeJS(str): - str = simpleEscapeJS(str) - str = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', str) # kind of an ugly hack, for nicer failure-message output - return str + def simpleEscapeJS(string: str) -> str: + return string.replace('\\', '\\\\').replace('"', '\\"') - def escapeHTML(str): - return str.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"') + def escapeJS(string: str) -> str: + string = simpleEscapeJS(string) + # Kind of an ugly hack, for nicer failure-message output. + string = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', string) + return string - def expand_nonfinite(method, argstr, tail): + def expand_nonfinite(method: str, argstr: str, tail: str) -> str: """ >>> print expand_nonfinite('f', '<0 a>, <0 b>', ';') f(a, 0); @@ -80,14 +87,18 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF f(0, b, d); """ # argstr is "<valid-1 invalid1-1 invalid2-1 ...>, ..." (where usually - # 'invalid' is Infinity/-Infinity/NaN) + # 'invalid' is Infinity/-Infinity/NaN). args = [] for arg in argstr.split(', '): - a = re.match('<(.*)>', arg).group(1) + match = re.match('<(.*)>', arg) + if match is None: + raise InvalidTestDefinitionError( + f"Expected arg to match format '<(.*)>', but was: {arg}") + a = match.group(1) args.append(a.split(' ')) calls = [] - # Start with the valid argument list - call = [ args[j][0] for j in range(len(args)) ] + # Start with the valid argument list. + call = [args[j][0] for j in range(len(args))] # For each argument alone, try setting it to all its invalid values: for i in range(len(args)): for a in args[i][1:]: @@ -97,39 +108,45 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF # For all combinations of >= 2 arguments, try setting them to their # first invalid values. (Don't do all invalid values, because the # number of combinations explodes.) - def f(c, start, depth): + def f(c: List[str], start: int, depth: int) -> None: for i in range(start, len(args)): if len(args[i]) > 1: a = args[i][1] c2 = c[:] c2[i] = a - if depth > 0: calls.append(c2) - f(c2, i+1, depth+1) + if depth > 0: + calls.append(c2) + f(c2, i + 1, depth + 1) + f(call, 0, 0) - return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) for c in calls) + return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) + for c in calls) # Run with --test argument to run unit tests if len(sys.argv) > 1 and sys.argv[1] == '--test': - import doctest + doctest = importlib.import_module('doctest') doctest.testmod() sys.exit() - templates = yaml.safe_load(open(TEMPLATEFILE, "r").read()) - name_mapping = yaml.safe_load(open(NAME2DIRFILE, "r").read()) + templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read()) + name_mapping = yaml.safe_load(open(NAME2DIRFILE, 'r').read()) tests = [] - test_yaml_directory = "yaml/element" + test_yaml_directory = 'yaml/element' if ISOFFSCREENCANVAS: - test_yaml_directory = "yaml/offscreen" + test_yaml_directory = 'yaml/offscreen' TESTSFILES = [ - os.path.join(test_yaml_directory, f) for f in os.listdir(test_yaml_directory) - if f.endswith(".yaml")] - for t in sum([ yaml.safe_load(open(f, "r").read()) for f in TESTSFILES], []): + os.path.join(test_yaml_directory, f) + for f in os.listdir(test_yaml_directory) if f.endswith('.yaml') + ] + for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES], + []): if 'DISABLED' in t: continue if 'meta' in t: - eval(compile(t['meta'], '<meta test>', 'exec'), {}, {'tests':tests}) + eval(compile(t['meta'], '<meta test>', 'exec'), {}, + {'tests': tests}) else: tests.append(t) @@ -137,98 +154,85 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF category_contents_direct = {} category_contents_all = {} - def backref_html(name): + def backref_html(name: str) -> str: backrefs = [] c = '' for p in name.split('.')[:-1]: - c += '.'+p + c += '.' + p backrefs.append('<a href="index%s.html">%s</a>.' % (c, p)) backrefs.append(name.split('.')[-1]) return ''.join(backrefs) - def make_flat_image(filename, w, h, r,g,b,a): - if os.path.exists('%s/%s' % (IMAGEOUTPUTDIR, filename)): - return filename - surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h) - cr = cairo.Context(surface) - cr.set_source_rgba(r, g, b, a) - cr.rectangle(0, 0, w, h) - cr.fill() - surface.write_to_png('%s/%s' % (IMAGEOUTPUTDIR, filename)) - return filename - - # Ensure the test output directories exist + # Ensure the test output directories exist. testdirs = [TESTOUTPUTDIR, IMAGEOUTPUTDIR, MISCOUTPUTDIR] for map_dir in set(name_mapping.values()): - testdirs.append("%s/%s" % (TESTOUTPUTDIR, map_dir)) + testdirs.append('%s/%s' % (TESTOUTPUTDIR, map_dir)) for d in testdirs: - try: os.mkdir(d) - except: pass # ignore if it already exists + try: + os.mkdir(d) + except FileExistsError: + pass # Ignore if it already exists. used_images = {} - def map_name(name): + def map_name(name: str) -> Optional[str]: mapped_name = None for mn in sorted(name_mapping.keys(), key=len, reverse=True): if name.startswith(mn): - mapped_name = "%s/%s" % (name_mapping[mn], name) + mapped_name = '%s/%s' % (name_mapping[mn], name) break if not mapped_name: - print("LIKELY ERROR: %s has no defined target directory mapping" % name) + print('LIKELY ERROR: %s has no defined target directory mapping' % + name) + return None if 'manual' in test: - mapped_name += "-manual" + mapped_name += '-manual' return mapped_name - def expand_test_code(code): - code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m: expand_nonfinite(m.group(1), m.group(2), m.group(3)), code) # must come before '@assert throws' + def expand_test_code(code: str) -> str: + code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m: + expand_nonfinite(m.group(1), m.group(2), m.group(3)), + code) # Must come before '@assert throws'. code = re.sub(r'@assert pixel (\d+,\d+) == (\d+,\d+,\d+,\d+);', - r'_assertPixel(canvas, \1, \2);', - code) + r'_assertPixel(canvas, \1, \2);', code) code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+);', - r'_assertPixelApprox(canvas, \1, \2, 2);', - code) + r'_assertPixelApprox(canvas, \1, \2, 2);', code) - code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);', - r'_assertPixelApprox(canvas, \1, \2, \3);', - code) + code = re.sub( + r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);', + r'_assertPixelApprox(canvas, \1, \2, \3);', code) code = re.sub(r'@assert throws (\S+_ERR) (.*);', - r'assert_throws_dom("\1", function() { \2; });', - code) + r'assert_throws_dom("\1", function() { \2; });', code) code = re.sub(r'@assert throws (\S+Error) (.*);', - r'assert_throws_js(\1, function() { \2; });', - code) + r'assert_throws_js(\1, function() { \2; });', code) - code = re.sub(r'@assert (.*) === (.*);', - lambda m: '_assertSame(%s, %s, "%s", "%s");' - % (m.group(1), m.group(2), escapeJS(m.group(1)), escapeJS(m.group(2))) - , code) + code = re.sub( + r'@assert (.*) === (.*);', lambda m: + '_assertSame(%s, %s, "%s", "%s");' % (m.group(1), m.group( + 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code) - code = re.sub(r'@assert (.*) !== (.*);', - lambda m: '_assertDifferent(%s, %s, "%s", "%s");' - % (m.group(1), m.group(2), escapeJS(m.group(1)), escapeJS(m.group(2))) - , code) + code = re.sub( + r'@assert (.*) !== (.*);', lambda m: + '_assertDifferent(%s, %s, "%s", "%s");' % (m.group(1), m.group( + 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code) - code = re.sub(r'@assert (.*) =~ (.*);', - lambda m: 'assert_regexp_match(%s, %s);' - % (m.group(1), m.group(2)) - , code) + code = re.sub( + r'@assert (.*) =~ (.*);', lambda m: 'assert_regexp_match(%s, %s);' + % (m.group(1), m.group(2)), code) - code = re.sub(r'@assert (.*);', - lambda m: '_assert(%s, "%s");' - % (m.group(1), escapeJS(m.group(1))) - , code) + code = re.sub( + r'@assert (.*);', lambda m: '_assert(%s, "%s");' % (m.group( + 1), escapeJS(m.group(1))), code) code = re.sub(r' @moz-todo', '', code) - code = re.sub(r'@moz-UniversalBrowserRead;', - "" - , code) + code = re.sub(r'@moz-UniversalBrowserRead;', '', code) - assert('@' not in code) + assert ('@' not in code) return code @@ -237,29 +241,29 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF test = tests[i] name = test['name'] - print("\r(%s)" % name, " "*32, "\t") + print('\r(%s)' % name, ' ' * 32, '\t') if name in used_tests: - print("Test %s is defined twice" % name) + print('Test %s is defined twice' % name) used_tests[name] = 1 mapped_name = map_name(name) if not mapped_name: if ISOFFSCREENCANVAS: continue - else: - mapped_name = name - + mapped_name = name cat_total = '' for cat_part in [''] + name.split('.')[:-1]: - cat_total += cat_part+'.' - if not cat_total in category_names: category_names.append(cat_total) + cat_total += cat_part + '.' + if not cat_total in category_names: + category_names.append(cat_total) category_contents_all.setdefault(cat_total, []).append(name) category_contents_direct.setdefault(cat_total, []).append(name) - if test.get('expected', '') == 'green' and re.search(r'@assert pixel .* 0,0,0,0;', test['code']): - print("Probable incorrect pixel test in %s" % name) + if test.get('expected', '') == 'green' and re.search( + r'@assert pixel .* 0,0,0,0;', test['code']): + print('Probable incorrect pixel test in %s' % name) code = expand_test_code(test['code']) @@ -268,74 +272,86 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF expected = test['expected'] expected_img = None if expected == 'green': - expected_img = "/images/green-100x50.png" + expected_img = '/images/green-100x50.png' elif expected == 'clear': - expected_img = "/images/clear-100x50.png" + expected_img = '/images/clear-100x50.png' else: if ';' in expected: - print("Found semicolon in %s" % name) - expected = re.sub(r'^size (\d+) (\d+)', - r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)\ncr = cairo.Context(surface)', - expected) - - if mapped_name.endswith("-manual"): - png_name = mapped_name[:-len("-manual")] + print('Found semicolon in %s' % name) + expected = re.sub( + r'^size (\d+) (\d+)', + r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)' + r'\ncr = cairo.Context(surface)', expected) + + if mapped_name.endswith('-manual'): + png_name = mapped_name[:-len('-manual')] else: png_name = mapped_name - expected += "\nsurface.write_to_png('%s/%s.png')\n" % (IMAGEOUTPUTDIR, png_name) - eval(compile(expected, '<test %s>' % test['name'], 'exec'), {}, {'cairo':cairo}) - expected_img = "%s.png" % name + expected += "\nsurface.write_to_png('%s/%s.png')\n" % ( + IMAGEOUTPUTDIR, png_name) + eval(compile(expected, '<test %s>' % test['name'], 'exec'), {}, + {'cairo': cairo}) + expected_img = '%s.png' % name if expected_img: - expectation_html = ('<p class="output expectedtext">Expected output:' + - '<p><img src="%s" class="output expected" id="expected" alt="">' % (expected_img)) + expectation_html = ( + '<p class="output expectedtext">Expected output:<p>' + '<img src="%s" class="output expected" id="expected" ' + 'alt="">' % expected_img) canvas = test.get('canvas', 'width="100" height="50"') - prev = tests[i-1]['name'] if i != 0 else 'index' - next = tests[i+1]['name'] if i != len(tests)-1 else 'index' + prev_test = tests[i - 1]['name'] if i != 0 else 'index' + next_test = tests[i + 1]['name'] if i != len(tests) - 1 else 'index' name_wrapped = name.replace('.', '.​') notes = '<p class="notes">%s' % test['notes'] if 'notes' in test else '' - timeout = '\n<meta name="timeout" content="%s">' % test['timeout'] if 'timeout' in test else '' + timeout = ('\n<meta name="timeout" content="%s">' % + test['timeout'] if 'timeout' in test else '') scripts = '' for s in test.get('scripts', []): scripts += '<script src="%s"></script>\n' % (s) variants = test.get('script-variants', {}) - script_variants = [(v, '<script src="%s"></script>\n' % (s)) for (v, s) in variants.items()] + script_variants = [(v, '<script src="%s"></script>\n' % (s)) + for (v, s) in variants.items()] if not script_variants: script_variants = [('', '')] images = '' - for i in test.get('images', []): - id = i.split('/')[-1] - if '/' not in i: - used_images[i] = 1 - i = '../images/%s' % i - images += '<img src="%s" id="%s" class="resource">\n' % (i,id) - for i in test.get('svgimages', []): - id = i.split('/')[-1] - if '/' not in i: - used_images[i] = 1 - i = '../images/%s' % i - images += '<svg><image xlink:href="%s" id="%s" class="resource"></svg>\n' % (i,id) - images = images.replace("../images/", "/images/") + for src in test.get('images', []): + img_id = src.split('/')[-1] + if '/' not in src: + used_images[src] = 1 + src = '../images/%s' % src + images += '<img src="%s" id="%s" class="resource">\n' % (src, + img_id) + for src in test.get('svgimages', []): + img_id = src.split('/')[-1] + if '/' not in src: + used_images[src] = 1 + src = '../images/%s' % src + images += ('<svg><image xlink:href="%s" id="%s" class="resource">' + '</svg>\n' % (src, img_id)) + images = images.replace('../images/', '/images/') fonts = '' fonthack = '' - for i in test.get('fonts', []): - fonts += '@font-face {\n font-family: %s;\n src: url("/fonts/%s.ttf");\n}\n' % (i, i) - # Browsers require the font to actually be used in the page + for font in test.get('fonts', []): + fonts += ('@font-face {\n font-family: %s;\n' + ' src: url("/fonts/%s.ttf");\n}\n' % (font, font)) + # Browsers require the font to actually be used in the page. if test.get('fonthack', 1): - fonthack += '<span style="font-family: %s; position: absolute; visibility: hidden">A</span>\n' % i + fonthack += ('<span style="font-family: %s; position: ' + 'absolute; visibility: hidden">A</span>\n' % font) if fonts: fonts = '<style>\n%s</style>\n' % fonts - fallback = test.get('fallback', '<p class="fallback">FAIL (fallback content)</p>') + fallback = test.get('fallback', + '<p class="fallback">FAIL (fallback content)</p>') desc = test.get('desc', '') escaped_desc = simpleEscapeJS(desc) @@ -351,26 +367,43 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF name_variant = '' if not variant else '.' + variant template_params = { - 'name':name + name_variant, - 'name_wrapped':name_wrapped, 'backrefs':backref_html(name), - 'mapped_name':mapped_name, - 'desc':desc, 'escaped_desc':escaped_desc, - 'prev':prev, 'next':next, 'notes':notes, 'images':images, - 'fonts':fonts, 'fonthack':fonthack, 'timeout': timeout, - 'canvas':canvas, 'expected':expectation_html, 'code':code, - 'scripts':scripts + extra_script, - 'fallback':fallback, 'attributes':attributes, + 'name': name + name_variant, + 'name_wrapped': name_wrapped, + 'backrefs': backref_html(name), + 'mapped_name': mapped_name, + 'desc': desc, + 'escaped_desc': escaped_desc, + 'prev': prev_test, + 'next': next_test, + 'notes': notes, + 'images': images, + 'fonts': fonts, + 'fonthack': fonthack, + 'timeout': timeout, + 'canvas': canvas, + 'expected': expectation_html, + 'code': code, + 'scripts': scripts + extra_script, + 'fallback': fallback, + 'attributes': attributes, 'context_args': context_args } if ISOFFSCREENCANVAS: - f = codecs.open('%s/%s%s.html' % (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') + f = codecs.open( + '%s/%s%s.html' % + (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') f.write(templates['w3coffscreencanvas'] % template_params) - timeout = '// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else '' + timeout = ('// META: timeout=%s\n' % + test['timeout'] if 'timeout' in test else '') template_params['timeout'] = timeout - f = codecs.open('%s/%s%s.worker.js' % (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') + f = codecs.open( + '%s/%s%s.worker.js' % + (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') f.write(templates['w3cworker'] % template_params) else: - f = codecs.open('%s/%s%s.html' % (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') + f = codecs.open( + '%s/%s%s.html' % + (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') f.write(templates['w3ccanvas'] % template_params) print() diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py index c6fba8453d0..047dd6c802b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py +++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py @@ -6,19 +6,20 @@ # It has been adapted for use with the Web Platform Test Suite suite at # https://github.com/web-platform-tests/wpt/ # -# The original version had a number of now-removed features (multiple versions of -# each test case of varying verbosity, Mozilla mochitests, semi-automated test -# harness). It also had a different directory structure. +# The original version had a number of now-removed features (multiple versions +# of each test case of varying verbosity, Mozilla mochitests, semi-automated +# test harness). It also had a different directory structure. # To update or add test cases: # # * Modify the tests*.yaml files. -# 'name' is an arbitrary hierarchical name to help categorise tests. -# 'desc' is a rough description of what behaviour the test aims to test. -# 'code' is JavaScript code to execute, with some special commands starting with '@' -# 'expected' is what the final canvas output should be: a string 'green' or 'clear' -# (100x50 images in both cases), or a string 'size 100 50' (or any other size) -# followed by Python code using Pycairo to generate the image. +# - 'name' is an arbitrary hierarchical name to help categorise tests. +# - 'desc' is a rough description of what behaviour the test aims to test. +# - 'code' is JavaScript code to execute, with some special commands starting +# with '@'. +# - 'expected' is what the final canvas output should be: a string 'green' or +# 'clear' (100x50 images in both cases), or a string 'size 100 50' (or any +# other size) followed by Python code using Pycairo to generate the image. # # * Run "./build.sh". # This requires a few Python modules which might not be ubiquitous. @@ -27,46 +28,51 @@ # # * Test the tests, add new ones to Git, remove deleted ones from Git, etc. -from __future__ import print_function +from typing import List import re import codecs -import time +import importlib import os -import shutil import sys -import xml.dom.minidom -from xml.dom.minidom import Node try: - import cairocffi as cairo + import cairocffi as cairo # type: ignore except ImportError: import cairo try: - import syck as yaml # compatible and lots faster + # Compatible and lots faster. + import syck as yaml # type: ignore except ImportError: import yaml -def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE): + +class Error(Exception): + """Base class for all exceptions raised by this module""" + + +class InvalidTestDefinitionError(Error): + """Raised on invalid test definition.""" + + +def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None: CANVASOUTPUTDIR = '../element' CANVASIMAGEOUTPUTDIR = '../element' OFFSCREENCANVASOUTPUTDIR = '../offscreen' OFFSCREENCANVASIMAGEOUTPUTDIR = '../offscreen' MISCOUTPUTDIR = './output' - def simpleEscapeJS(str): - return str.replace('\\', '\\\\').replace('"', '\\"') - - def escapeJS(str): - str = simpleEscapeJS(str) - str = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', str) # kind of an ugly hack, for nicer failure-message output - return str + def simpleEscapeJS(string: str) -> str: + return string.replace('\\', '\\\\').replace('"', '\\"') - def escapeHTML(str): - return str.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"') + def escapeJS(string: str) -> str: + string = simpleEscapeJS(string) + # Kind of an ugly hack, for nicer failure-message output. + string = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', string) + return string - def expand_nonfinite(method, argstr, tail): + def expand_nonfinite(method: str, argstr: str, tail: str) -> str: """ >>> print expand_nonfinite('f', '<0 a>, <0 b>', ';') f(a, 0); @@ -83,14 +89,18 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE): f(0, b, d); """ # argstr is "<valid-1 invalid1-1 invalid2-1 ...>, ..." (where usually - # 'invalid' is Infinity/-Infinity/NaN) + # 'invalid' is Infinity/-Infinity/NaN). args = [] for arg in argstr.split(', '): - a = re.match('<(.*)>', arg).group(1) + match = re.match('<(.*)>', arg) + if match is None: + raise InvalidTestDefinitionError( + f"Expected arg to match format '<(.*)>', but was: {arg}") + a = match.group(1) args.append(a.split(' ')) calls = [] - # Start with the valid argument list - call = [ args[j][0] for j in range(len(args)) ] + # Start with the valid argument list. + call = [args[j][0] for j in range(len(args))] # For each argument alone, try setting it to all its invalid values: for i in range(len(args)): for a in args[i][1:]: @@ -100,37 +110,43 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE): # For all combinations of >= 2 arguments, try setting them to their # first invalid values. (Don't do all invalid values, because the # number of combinations explodes.) - def f(c, start, depth): + def f(c: List[str], start: int, depth: int) -> None: for i in range(start, len(args)): if len(args[i]) > 1: a = args[i][1] c2 = c[:] c2[i] = a - if depth > 0: calls.append(c2) - f(c2, i+1, depth+1) + if depth > 0: + calls.append(c2) + f(c2, i + 1, depth + 1) + f(call, 0, 0) - return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) for c in calls) + return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) + for c in calls) - # Run with --test argument to run unit tests + # Run with --test argument to run unit tests. if len(sys.argv) > 1 and sys.argv[1] == '--test': - import doctest + doctest = importlib.import_module('doctest') doctest.testmod() sys.exit() - templates = yaml.safe_load(open(TEMPLATEFILE, "r").read()) - name_mapping = yaml.safe_load(open(NAME2DIRFILE, "r").read()) + templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read()) + name_mapping = yaml.safe_load(open(NAME2DIRFILE, 'r').read()) tests = [] - test_yaml_directory = "yaml-new" + test_yaml_directory = 'yaml-new' TESTSFILES = [ - os.path.join(test_yaml_directory, f) for f in os.listdir(test_yaml_directory) - if f.endswith(".yaml")] - for t in sum([ yaml.safe_load(open(f, "r").read()) for f in TESTSFILES], []): + os.path.join(test_yaml_directory, f) + for f in os.listdir(test_yaml_directory) if f.endswith('.yaml') + ] + for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES], + []): if 'DISABLED' in t: continue if 'meta' in t: - eval(compile(t['meta'], '<meta test>', 'exec'), {}, {'tests':tests}) + eval(compile(t['meta'], '<meta test>', 'exec'), {}, + {'tests': tests}) else: tests.append(t) @@ -138,88 +154,89 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE): category_contents_direct = {} category_contents_all = {} - def backref_html(name): + def backref_html(name: str) -> str: backrefs = [] c = '' for p in name.split('.')[:-1]: - c += '.'+p + c += '.' + p backrefs.append('<a href="index%s.html">%s</a>.' % (c, p)) backrefs.append(name.split('.')[-1]) return ''.join(backrefs) - # Ensure the test output directories exist - testdirs = [CANVASOUTPUTDIR, OFFSCREENCANVASOUTPUTDIR, CANVASIMAGEOUTPUTDIR, OFFSCREENCANVASIMAGEOUTPUTDIR, MISCOUTPUTDIR] + # Ensure the test output directories exist. + testdirs = [ + CANVASOUTPUTDIR, OFFSCREENCANVASOUTPUTDIR, CANVASIMAGEOUTPUTDIR, + OFFSCREENCANVASIMAGEOUTPUTDIR, MISCOUTPUTDIR + ] for map_dir in set(name_mapping.values()): - testdirs.append("%s/%s" % (CANVASOUTPUTDIR, map_dir)) - testdirs.append("%s/%s" % (OFFSCREENCANVASOUTPUTDIR, map_dir)) + testdirs.append('%s/%s' % (CANVASOUTPUTDIR, map_dir)) + testdirs.append('%s/%s' % (OFFSCREENCANVASOUTPUTDIR, map_dir)) for d in testdirs: - try: os.mkdir(d) - except: pass # ignore if it already exists + try: + os.mkdir(d) + except FileExistsError: + pass # Ignore if it already exists, used_images = {} - def map_name(name): + def map_name(name: str) -> str: mapped_name = None for mn in sorted(name_mapping.keys(), key=len, reverse=True): if name.startswith(mn): - mapped_name = "%s/%s" % (name_mapping[mn], name) + mapped_name = '%s/%s' % (name_mapping[mn], name) break if not mapped_name: - print("LIKELY ERROR: %s has no defined target directory mapping" % name) + print('LIKELY ERROR: %s has no defined target directory mapping' % + name) + return name if 'manual' in test: - mapped_name += "-manual" + mapped_name += '-manual' return mapped_name - def expand_test_code(code): - code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m: expand_nonfinite(m.group(1), m.group(2), m.group(3)), code) # must come before '@assert throws' + def expand_test_code(code: str) -> str: + code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m: + expand_nonfinite(m.group(1), m.group(2), m.group(3)), + code) # Must come before '@assert throws'. code = re.sub(r'@assert pixel (\d+,\d+) == (\d+,\d+,\d+,\d+);', - r'_assertPixel(canvas, \1, \2);', - code) + r'_assertPixel(canvas, \1, \2);', code) code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+);', - r'_assertPixelApprox(canvas, \1, \2, 2);', - code) + r'_assertPixelApprox(canvas, \1, \2, 2);', code) - code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);', - r'_assertPixelApprox(canvas, \1, \2, \3);', - code) + code = re.sub( + r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);', + r'_assertPixelApprox(canvas, \1, \2, \3);', code) code = re.sub(r'@assert throws (\S+_ERR) (.*);', - r'assert_throws_dom("\1", function() { \2; });', - code) + r'assert_throws_dom("\1", function() { \2; });', code) code = re.sub(r'@assert throws (\S+Error) (.*);', - r'assert_throws_js(\1, function() { \2; });', - code) + r'assert_throws_js(\1, function() { \2; });', code) - code = re.sub(r'@assert (.*) === (.*);', - lambda m: '_assertSame(%s, %s, "%s", "%s");' - % (m.group(1), m.group(2), escapeJS(m.group(1)), escapeJS(m.group(2))) - , code) + code = re.sub( + r'@assert (.*) === (.*);', lambda m: + '_assertSame(%s, %s, "%s", "%s");' % (m.group(1), m.group( + 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code) - code = re.sub(r'@assert (.*) !== (.*);', - lambda m: '_assertDifferent(%s, %s, "%s", "%s");' - % (m.group(1), m.group(2), escapeJS(m.group(1)), escapeJS(m.group(2))) - , code) + code = re.sub( + r'@assert (.*) !== (.*);', lambda m: + '_assertDifferent(%s, %s, "%s", "%s");' % (m.group(1), m.group( + 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code) - code = re.sub(r'@assert (.*) =~ (.*);', - lambda m: 'assert_regexp_match(%s, %s);' - % (m.group(1), m.group(2)) - , code) + code = re.sub( + r'@assert (.*) =~ (.*);', lambda m: 'assert_regexp_match(%s, %s);' + % (m.group(1), m.group(2)), code) - code = re.sub(r'@assert (.*);', - lambda m: '_assert(%s, "%s");' - % (m.group(1), escapeJS(m.group(1))) - , code) + code = re.sub( + r'@assert (.*);', lambda m: '_assert(%s, "%s");' % (m.group( + 1), escapeJS(m.group(1))), code) code = re.sub(r' @moz-todo', '', code) - code = re.sub(r'@moz-UniversalBrowserRead;', - "" - , code) + code = re.sub(r'@moz-UniversalBrowserRead;', '', code) - assert('@' not in code) + assert ('@' not in code) return code @@ -231,33 +248,32 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE): if test.get('canvasType', []): HTMLCanvas_test = False OffscreenCanvas_test = False - for type in test.get('canvasType'): - if type.lower() == 'htmlcanvas': + for canvas_type in test.get('canvasType'): + if canvas_type.lower() == 'htmlcanvas': HTMLCanvas_test = True - elif type.lower() == 'offscreencanvas': + elif canvas_type.lower() == 'offscreencanvas': OffscreenCanvas_test = True name = test['name'] - print("\r(%s)" % name, " "*32, "\t") + print('\r(%s)' % name, ' ' * 32, '\t') if name in used_tests: - print("Test %s is defined twice" % name) + print('Test %s is defined twice' % name) used_tests[name] = 1 mapped_name = map_name(name) - if not mapped_name: - mapped_name = name - cat_total = '' for cat_part in [''] + name.split('.')[:-1]: - cat_total += cat_part+'.' - if not cat_total in category_names: category_names.append(cat_total) + cat_total += cat_part + '.' + if not cat_total in category_names: + category_names.append(cat_total) category_contents_all.setdefault(cat_total, []).append(name) category_contents_direct.setdefault(cat_total, []).append(name) - if test.get('expected', '') == 'green' and re.search(r'@assert pixel .* 0,0,0,0;', test['code']): - print("Probable incorrect pixel test in %s" % name) + if test.get('expected', '') == 'green' and re.search( + r'@assert pixel .* 0,0,0,0;', test['code']): + print('Probable incorrect pixel test in %s' % name) code_canvas = expand_test_code(test['code']).strip() @@ -266,78 +282,97 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE): expected = test['expected'] expected_img = None if expected == 'green': - expected_img = "/images/green-100x50.png" + expected_img = '/images/green-100x50.png' elif expected == 'clear': - expected_img = "/images/clear-100x50.png" + expected_img = '/images/clear-100x50.png' else: if ';' in expected: - print("Found semicolon in %s" % name) - expected = re.sub(r'^size (\d+) (\d+)', - r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)\ncr = cairo.Context(surface)', - expected) - - if mapped_name.endswith("-manual"): - png_name = mapped_name[:-len("-manual")] + print('Found semicolon in %s' % name) + expected = re.sub( + r'^size (\d+) (\d+)', + r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)' + r'\ncr = cairo.Context(surface)', expected) + + if mapped_name.endswith('-manual'): + png_name = mapped_name[:-len('-manual')] else: png_name = mapped_name - expected_canvas = expected + "\nsurface.write_to_png('%s/%s.png')\n" % (CANVASIMAGEOUTPUTDIR, png_name) - eval(compile(expected_canvas, '<test %s>' % test['name'], 'exec'), {}, {'cairo':cairo}) - - expected_offscreencanvas = expected + "\nsurface.write_to_png('%s/%s.png')\n" % (OFFSCREENCANVASIMAGEOUTPUTDIR, png_name) - eval(compile(expected_offscreencanvas, '<test %s>' % test['name'], 'exec'), {}, {'cairo':cairo}) - - expected_img = "%s.png" % name + expected_canvas = (expected + + "\nsurface.write_to_png('%s/%s.png')\n" % + (CANVASIMAGEOUTPUTDIR, png_name)) + eval( + compile(expected_canvas, '<test %s>' % test['name'], + 'exec'), {}, {'cairo': cairo}) + + expected_offscreencanvas = ( + expected + "\nsurface.write_to_png('%s/%s.png')\n" % + (OFFSCREENCANVASIMAGEOUTPUTDIR, png_name)) + eval( + compile(expected_offscreencanvas, + '<test %s>' % test['name'], 'exec'), {}, + {'cairo': cairo}) + + expected_img = '%s.png' % name if expected_img: - expectation_html = ('<p class="output expectedtext">Expected output:' + - '<p><img src="%s" class="output expected" id="expected" alt="">' % (expected_img)) + expectation_html = ( + '<p class="output expectedtext">Expected output:<p>' + '<img src="%s" class="output expected" id="expected" ' + 'alt="">' % expected_img) canvas = test.get('canvas', 'width="100" height="50"') - prev = tests[i-1]['name'] if i != 0 else 'index' - next = tests[i+1]['name'] if i != len(tests)-1 else 'index' + prev_test = tests[i - 1]['name'] if i != 0 else 'index' + next_test = tests[i + 1]['name'] if i != len(tests) - 1 else 'index' name_wrapped = name.replace('.', '.​') notes = '<p class="notes">%s' % test['notes'] if 'notes' in test else '' - timeout = '\n<meta name="timeout" content="%s">' % test['timeout'] if 'timeout' in test else '' + timeout = ('\n<meta name="timeout" content="%s">' % + test['timeout'] if 'timeout' in test else '') scripts = '' for s in test.get('scripts', []): scripts += '<script src="%s"></script>\n' % (s) variants = test.get('script-variants', {}) - script_variants = [(v, '<script src="%s"></script>\n' % (s)) for (v, s) in variants.items()] + script_variants = [(v, '<script src="%s"></script>\n' % (s)) + for (v, s) in variants.items()] if not script_variants: script_variants = [('', '')] images = '' - for i in test.get('images', []): - id = i.split('/')[-1] - if '/' not in i: - used_images[i] = 1 - i = '../images/%s' % i - images += '<img src="%s" id="%s" class="resource">\n' % (i,id) - for i in test.get('svgimages', []): - id = i.split('/')[-1] - if '/' not in i: - used_images[i] = 1 - i = '../images/%s' % i - images += '<svg><image xlink:href="%s" id="%s" class="resource"></svg>\n' % (i,id) - images = images.replace("../images/", "/images/") + for src in test.get('images', []): + img_id = src.split('/')[-1] + if '/' not in src: + used_images[src] = 1 + src = '../images/%s' % src + images += '<img src="%s" id="%s" class="resource">\n' % (src, + img_id) + for src in test.get('svgimages', []): + img_id = src.split('/')[-1] + if '/' not in src: + used_images[src] = 1 + src = '../images/%s' % src + images += ('<svg><image xlink:href="%s" id="%s" class="resource">' + '</svg>\n' % (src, img_id)) + images = images.replace('../images/', '/images/') fonts = '' fonthack = '' - for i in test.get('fonts', []): - fonts += '@font-face {\n font-family: %s;\n src: url("/fonts/%s.ttf");\n}\n' % (i, i) - # Browsers require the font to actually be used in the page + for font in test.get('fonts', []): + fonts += ('@font-face {\n font-family: %s;\n' + ' src: url("/fonts/%s.ttf");\n}\n' % (font, font)) + # Browsers require the font to actually be used in the page. if test.get('fonthack', 1): - fonthack += '<span style="font-family: %s; position: absolute; visibility: hidden">A</span>\n' % i + fonthack += ('<span style="font-family: %s; position: ' + 'absolute; visibility: hidden">A</span>\n' % font) if fonts: fonts = '<style>\n%s</style>\n' % fonts - fallback = test.get('fallback', '<p class="fallback">FAIL (fallback content)</p>') + fallback = test.get('fallback', + '<p class="fallback">FAIL (fallback content)</p>') desc = test.get('desc', '') escaped_desc = simpleEscapeJS(desc) @@ -353,35 +388,58 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE): name_variant = '' if not variant else '.' + variant template_params = { - 'name':name + name_variant, - 'name_wrapped':name_wrapped, 'backrefs':backref_html(name), - 'mapped_name':mapped_name, - 'desc':desc, 'escaped_desc':escaped_desc, - 'prev':prev, 'next':next, 'notes':notes, 'images':images, - 'fonts':fonts, 'fonthack':fonthack, 'timeout': timeout, - 'canvas':canvas, 'expected':expectation_html, 'code':code_canvas, - 'scripts':scripts + extra_script, - 'fallback':fallback, 'attributes':attributes, + 'name': name + name_variant, + 'name_wrapped': name_wrapped, + 'backrefs': backref_html(name), + 'mapped_name': mapped_name, + 'desc': desc, + 'escaped_desc': escaped_desc, + 'prev': prev_test, + 'next': next_test, + 'notes': notes, + 'images': images, + 'fonts': fonts, + 'fonthack': fonthack, + 'timeout': timeout, + 'canvas': canvas, + 'expected': expectation_html, + 'code': code_canvas, + 'scripts': scripts + extra_script, + 'fallback': fallback, + 'attributes': attributes, 'context_args': context_args } # Create test cases for canvas and offscreencanvas. if HTMLCanvas_test: - f = codecs.open('%s/%s%s.html' % (CANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') + f = codecs.open( + '%s/%s%s.html' % + (CANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') f.write(templates['w3ccanvas'] % template_params) if OffscreenCanvas_test: - f_html = codecs.open('%s/%s%s.html' % (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') - f_worker = codecs.open('%s/%s%s.worker.js' % (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8') - if ("then(t_pass, t_fail);" in code_canvas): - temp_offscreen = templates['w3coffscreencanvas'].replace("t.done();\n", "") - temp_worker = templates['w3cworker'].replace("t.done();\n", "") + f_html = codecs.open( + '%s/%s%s.html' % + (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w', + 'utf-8') + f_worker = codecs.open( + '%s/%s%s.worker.js' % + (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w', + 'utf-8') + if ('then(t_pass, t_fail);' in code_canvas): + temp_offscreen = templates['w3coffscreencanvas'].replace( + 't.done();\n', '') + temp_worker = templates['w3cworker'].replace( + 't.done();\n', '') f_html.write(temp_offscreen % template_params) - timeout = '// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else '' + timeout = ('// META: timeout=%s\n' % + test['timeout'] if 'timeout' in test else '') template_params['timeout'] = timeout f_worker.write(temp_worker % template_params) else: - f_html.write(templates['w3coffscreencanvas'] % template_params) - timeout = '// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else '' + f_html.write(templates['w3coffscreencanvas'] % + template_params) + timeout = ('// META: timeout=%s\n' % + test['timeout'] if 'timeout' in test else '') template_params['timeout'] = timeout f_worker.write(templates['w3cworker'] % template_params) print() diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html index 2c6f0b62822..17840724d9e 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html @@ -20,25 +20,26 @@ // This document has COOP: restrict-properties. The popup has COOP: // restrict-properties. Opening from an iframe should not be different from -// opening from the main frame and the opener should be severed. +// opening from the main frame and the opener should be restricted if +// cross-origin. [ { "title": "same origin iframe, same origin popup", "iframeOrigin": SAME_ORIGIN, "popupOrigin": SAME_ORIGIN, - "opener": "restricted" + "opener": "preserved" }, { "title": "same site iframe, same origin popup", "iframeOrigin": SAME_SITE, "popupOrigin": SAME_ORIGIN, - "opener": "restricted" + "opener": "preserved" }, { "title": "cross origin iframe, same origin popup", "iframeOrigin": CROSS_ORIGIN, "popupOrigin": SAME_ORIGIN, - "opener": "restricted" + "opener": "preserved" }, { "title": "same origin iframe, same site popup", diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers deleted file mode 100644 index d5c99062d2b..00000000000 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers +++ /dev/null @@ -1 +0,0 @@ -Cross-Origin-Opener-Policy: restrict-properties diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html index 491cbc3b9d0..c0020fa23a4 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html @@ -34,7 +34,7 @@ { "title": "popup with coop restrict-properties", "coop": "restrict-properties", - "opener": "restricted" + "opener": "preserved" } ].forEach(variant => { popup_test(`Same-origin ${variant.title}`, SAME_ORIGIN, diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.tentative.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.tentative.html new file mode 100644 index 00000000000..3d139c5950e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.tentative.html @@ -0,0 +1,126 @@ +<!DOCTYPE html> +<link rel=author href="mailto:jarhar@chromium.org"> +<link rel=help href="https://github.com/whatwg/html/pull/8221#discussion_r1049379113"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<div id=outerpopover popover=auto> + <button popovertoggletarget=innerpopover disabled>toggle popover</button> +</div> +<div id=innerpopover popover=auto>popover</div> +<script> +test(() => { + outerpopover.showPopover(); + innerpopover.showPopover(); + assert_true(innerpopover.matches(':open'), + 'The inner popover should be able to open successfully.'); + assert_false(outerpopover.matches(':open'), + 'The outer popover should be closed by opening the inner one.'); +}, 'Disabled popover*target buttons should not affect the popover heirarchy.'); +</script> + +<div id=outerpopover2 popover=auto> + <button id=togglebutton2 popovertoggletarget=innerpopover2>toggle popover</button> +</div> +<div id=innerpopover2 popover=auto>popover</div> +<script> +test(() => { + outerpopover2.showPopover(); + innerpopover2.showPopover(); + assert_true(innerpopover2.matches(':open'), + 'The inner popover should be able to open successfully.'); + assert_true(outerpopover2.matches(':open'), + 'The outer popover should stay open when opening the inner one.'); + + togglebutton2.disabled = true; + assert_false(innerpopover2.matches(':open'), + 'The inner popover should be closed when the hierarchy is broken.'); + assert_false(outerpopover2.matches(':open'), + 'The outer popover should be closed when the hierarchy is broken.'); +}, 'Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly outer popover is closed.'); +</script> + +<div id=outerpopover3 popover=auto> + <button id=togglebutton3 popovertoggletarget=innerpopover3>toggle popover</button> +</div> +<div id=innerpopover3 popover=auto>popover</div> +<script> +test(() => { + outerpopover3.showPopover(); + innerpopover3.showPopover(); + assert_true(innerpopover3.matches(':open'), + 'The inner popover should be able to open successfully.'); + assert_true(outerpopover3.matches(':open'), + 'The outer popover should stay open when opening the inner one.'); + + togglebutton3.disabled = true; + assert_false(innerpopover3.matches(':open'), + 'The inner popover be should be closed when the hierarchy is broken.'); + assert_false(outerpopover3.matches(':open'), + 'The outer popover be should be closed when the hierarchy is broken.'); +}, 'Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly inner popover is closed.'); +</script> + +<div id=outerpopover4 popover=auto> + <button id=togglebutton4 popovertoggletarget=innerpopover4>toggle popover</button> +</div> +<div id=innerpopover4 popover=auto>popover</div> +<form id=submitform>form</form> +<script> +test(() => { + outerpopover4.showPopover(); + innerpopover4.showPopover(); + assert_true(innerpopover4.matches(':open'), + 'The inner popover should be able to open successfully.'); + assert_true(outerpopover4.matches(':open'), + 'The outer popover should stay open when opening the inner one.'); + + togglebutton4.setAttribute('form', 'submitform'); + assert_false(innerpopover4.matches(':open'), + 'The inner popover be should be closed when the hierarchy is broken.'); + assert_false(outerpopover4.matches(':open'), + 'The outer popover be should be closed when the hierarchy is broken.'); +}, 'Setting the form attribute on popover*target buttons when popovers are open should close all popovers.'); +</script> + +<div id=outerpopover5 popover=auto> + <input type=button id=togglebutton5 popovertoggletarget=innerpopover5>toggle popover</button> +</div> +<div id=innerpopover5 popover=auto>popover</div> +<script> +test(() => { + outerpopover5.showPopover(); + innerpopover5.showPopover(); + assert_true(innerpopover5.matches(':open'), + 'The inner popover should be able to open successfully.'); + assert_true(outerpopover5.matches(':open'), + 'The outer popover should stay open when opening the inner one.'); + + togglebutton5.setAttribute('type', 'text'); + assert_false(innerpopover5.matches(':open'), + 'The inner popover be should be closed when the hierarchy is broken.'); + assert_false(outerpopover5.matches(':open'), + 'The outer popover be should be closed when the hierarchy is broken.'); +}, 'Changing the input type on a popover*target button when popovers are open should close all popovers.'); +</script> + +<div id=outerpopover6 popover=auto> + <button id=togglebutton6 popovertoggletarget=innerpopover6>toggle popover</button> +</div> +<div id=innerpopover6 popover=auto>popover</div> +<script> +test(() => { + outerpopover6.showPopover(); + innerpopover6.showPopover(); + assert_true(innerpopover6.matches(':open'), + 'The inner popover should be able to open successfully.'); + assert_true(outerpopover6.matches(':open'), + 'The outer popover should stay open when opening the inner one.'); + + togglebutton6.remove(); + assert_false(innerpopover6.matches(':open'), + 'The inner popover be should be closed when the hierarchy is broken.'); + assert_false(outerpopover6.matches(':open'), + 'The outer popover be should be closed when the hierarchy is broken.'); +}, 'Disconnecting popover*target buttons when popovers are open should close all popovers.'); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini index 72009c61e6e..49220324f2f 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini @@ -1,7 +1,3 @@ -[context.any.worker-module.html] - expected: - if product == "firefox": [TIMEOUT, OK] # https://bugzilla.mozilla.org/show_bug.cgi?id=1247687 - [context.any.sharedworker-module.html] expected: if product == "firefox": TIMEOUT # https://bugzilla.mozilla.org/show_bug.cgi?id=1247687 diff --git a/tests/wpt/web-platform-tests/interfaces/payment-handler.idl b/tests/wpt/web-platform-tests/interfaces/payment-handler.idl index d0e5bd9fda8..65b64bdf31c 100644 --- a/tests/wpt/web-platform-tests/interfaces/payment-handler.idl +++ b/tests/wpt/web-platform-tests/interfaces/payment-handler.idl @@ -9,7 +9,6 @@ partial interface ServiceWorkerRegistration { [SecureContext, Exposed=(Window,Worker)] interface PaymentManager { - [SameObject] readonly attribute PaymentInstruments instruments; attribute DOMString userHint; Promise<undefined> enableDelegations(sequence<PaymentDelegation> delegations); }; @@ -21,28 +20,6 @@ enum PaymentDelegation { "payerEmail" }; -[SecureContext, Exposed=(Window,Worker)] -interface PaymentInstruments { - Promise<boolean> delete(DOMString instrumentKey); - Promise<any> get(DOMString instrumentKey); - Promise<sequence<DOMString>> keys(); - Promise<boolean> has(DOMString instrumentKey); - Promise<undefined> set(DOMString instrumentKey, PaymentInstrument details); - Promise<undefined> clear(); -}; - -dictionary PaymentInstrument { - required DOMString name; - sequence<ImageObject> icons; - DOMString method; -}; - -dictionary ImageObject { - required USVString src; - DOMString sizes; - DOMString type; -}; - partial interface ServiceWorkerGlobalScope { attribute EventHandler oncanmakepayment; }; diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html b/tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html index a4f7d8079d3..5cb3767ca7d 100644 --- a/tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html @@ -29,15 +29,18 @@ applyStyle(image, imageStyle); applyStyle(container, containerStyle); image.id = token(); + container.id = token(); const entryReported = new Promise(resolve => new popup.PerformanceObserver(entryList => { entryList.getEntries().forEach(entry => { - if (entry.id === image.id) + if (entry.id === image.id || entry.id === container.id) resolve(entry.size); }); }).observe({type: 'largest-contentful-paint'})); popup.document.body.appendChild(container); - const timeout = new Promise(resolve => t.step_timeout(() => resolve('not reported'), 1000)); - return {lcpSize: (await Promise.any([entryReported, timeout])), naturalSize}; + return { + lcpSize: (await await_with_timeout(1000, 'not reported', entryReported)), + naturalSize + }; } // We set the image to display: none when testing background, so that only the background is reported diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js b/tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js index 043587ca654..b0fe1b08cb4 100644 --- a/tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js @@ -1,6 +1,22 @@ const image_delay = 1000; const delay_pipe_value = image_delay / 1000; +const await_with_timeout = async (delay, message, promise, cleanup = ()=>{}) => { + let timeout_id; + const timeout = new Promise((_, reject) => { + timeout_id = step_timeout(() => + reject(new DOMException(message, "TimeoutError")), delay) + }); + let result = null; + try { + result = await Promise.race([promise, timeout]); + clearTimeout(timeout_id); + } finally { + cleanup(); + } + return result; +}; + // Receives an image LargestContentfulPaint |entry| and checks |entry|'s attribute values. // The |timeLowerBound| parameter is a lower bound on the loadTime value of the entry. // The |options| parameter may contain some string values specifying the following: diff --git a/tests/wpt/web-platform-tests/lint.ignore b/tests/wpt/web-platform-tests/lint.ignore index 11821957cf4..011f05c607e 100644 --- a/tests/wpt/web-platform-tests/lint.ignore +++ b/tests/wpt/web-platform-tests/lint.ignore @@ -116,8 +116,6 @@ CONSOLE: service-workers/service-worker/navigation-redirect.https.html CONSOLE: service-workers/service-worker/resources/clients-get-other-origin.html CONSOLE: webrtc/tools/* CONSOLE: webaudio/resources/audit.js:41 -CONSOLE: resource-timing/resources/resource-loaders.js -CONSOLE: resource-timing/resources/entry-invariants.js # use of console in a public library - annotation-model ensures # it is not actually used diff --git a/tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js b/tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js index dfb0190abac..d34e20630bf 100644 --- a/tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js +++ b/tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js @@ -20,7 +20,6 @@ idl_test( idl_array.add_objects({ ServiceWorkerRegistration: ['registration'], PaymentManager: ['paymentManager'], - PaymentInstruments: ['instruments'], }); } if (isServiceWorker) { @@ -41,7 +40,6 @@ idl_test( } if (hasRegistration) { self.paymentManager = self.registration.paymentManager; - self.instruments = self.paymentManager.instruments; } } ); diff --git a/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html b/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html deleted file mode 100644 index 121c1315688..00000000000 --- a/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html +++ /dev/null @@ -1,379 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>Tests for PaymentInstruments interface</title> -<link rel="help" href="https://w3c.github.io/payment-handler/#paymentinstruments-interface"> -<link rel="manifest" href="manifest.json"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="register-and-activate-service-worker.js"></script> -<script> -function runTests(registration) { - const methodName = window.location.origin + '/payment-handler/payment-app/'; - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - await registration.paymentManager.instruments.set('instrument-key-1', { - name: 'Instrument Name 1', - }); - await registration.paymentManager.instruments.set('instrument-key-2', { - name: 'Instrument Name 2', - }); - await registration.paymentManager.instruments.delete('instrument-key-1'); - await registration.paymentManager.instruments.set('instrument-key-1', { - name: 'Instrument Name 1', - }); - const keys = await registration.paymentManager.instruments.keys(); - assert_array_equals(keys, ['instrument-key-2', 'instrument-key-1']); - }, 'Instrument keys are returned in the original insertion order'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - await registration.paymentManager.instruments.set( - 'existing-instrument-key', - { - name: 'Instrument Name', - }, - ); - const result = await registration.paymentManager.instruments.delete( - 'existing-instrument-key', - ); - assert_true(result); - }, 'Deleting an existing instrument returns true'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - await registration.paymentManager.instruments.set( - 'existing-instrument-key', - { - name: 'Instrument Name', - }, - ); - await registration.paymentManager.instruments.delete( - 'existing-instrument-key', - ); - const result = await registration.paymentManager.instruments.delete( - 'existing-instrument-key', - ); - assert_false(result); - }, 'Deleting an existing instrument the second time returns false'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - const result = await registration.paymentManager.instruments.delete( - 'non-existing-instrument-key', - ); - assert_false(result); - }, 'Deleting a non-existing instrument returns false'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - await registration.paymentManager.instruments.set( - 'existing-instrument-key', - { - name: 'Instrument Name', - icons: [ - { - src: '/images/rgrg-256x256.png', - sizes: '256x256', - type: 'image/png', - }, - ], - method: methodName, - }, - ); - const result = await registration.paymentManager.instruments.get( - 'existing-instrument-key', - ); - assert_equals(result.name, 'Instrument Name'); - }, 'Getting an existing instrument returns the instrument'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - const result = await registration.paymentManager.instruments.get( - 'non-existing-instrument-key', - ); - assert_equals(result, undefined); - }, 'Getting a non-existing instrument returns undefined'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - await registration.paymentManager.instruments.set( - 'existing-instrument-key', - { - name: 'Instrument Name v1', - icons: [ - {src: '/images/green-16x16.png', sizes: '16x16', type: 'image/png'}, - ], - method: methodName, - }, - ); - let result = await registration.paymentManager.instruments.get( - 'existing-instrument-key', - ); - assert_equals(result.name, 'Instrument Name v1'); - assert_equals(result.icons.length, 1); - assert_equals( - result.icons[0].src, - new URL('/images/green-16x16.png', window.location.href).href, - ); - assert_equals(result.icons[0].sizes, '16x16'); - assert_equals(result.icons[0].type, 'image/png'); - assert_equals(result.method, methodName); - assert_array_equals(result.capabilities.supportedNetworks, ['mir']); - await registration.paymentManager.instruments.set( - 'existing-instrument-key', - { - name: 'Instrument Name v2', - icons: [ - { - src: '/images/rgrg-256x256.png', - sizes: '256x256', - type: 'image/png', - }, - ], - method: methodName, - }, - ); - result = await registration.paymentManager.instruments.get( - 'existing-instrument-key', - ); - assert_equals(result.name, 'Instrument Name v2'); - assert_equals(result.icons.length, 1); - assert_equals( - result.icons[0].src, - new URL('/images/rgrg-256x256.png', window.location.href).href, - ); - assert_equals(result.icons[0].sizes, '256x256'); - assert_equals(result.icons[0].type, 'image/png'); - assert_equals(result.method, methodName); - }, 'Resetting an existing instrument updates the instrument'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - await registration.paymentManager.instruments.set( - 'existing-instrument-key', - { - name: 'Instrument Name', - icons: [ - { - src: '/images/rgrg-256x256.png', - sizes: '256x256', - type: 'image/png', - }, - ], - method: methodName, - }, - ); - await registration.paymentManager.instruments.clear(); - const result = await registration.paymentManager.instruments.get( - 'existing-instrument-key', - ); - assert_equals(result, undefined); - }, 'Clearing the instruments'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - const setPromise = registration.paymentManager.instruments.set( - 'instrument-key', - { - name: 'Instrument Name', - icons: [ - { - src: '/images/rgrg-256x256.png', - sizes: '256x256', - type: 'image/jif', - }, - ], - method: methodName, - }, - ); - return promise_rejects_js(t, TypeError, setPromise); - }, 'Cannot register instruments with invalid icon media type image/jif'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - const setPromise = registration.paymentManager.instruments.set( - 'instrument-key', - { - name: 'Instrument Name', - icons: [ - { - src: '/images/rgrg-256x256.png', - sizes: '256x256', - type: 'image/pn' + 'g'.repeat(100000), - }, - ], - method: methodName, - }, - ); - return promise_rejects_js(t, TypeError, setPromise); - }, "Don't crash when registering instruments with very long icon media type image/pngggggg..."); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - return registration.paymentManager.instruments.set('instrument-key', { - name: 'Instrument Name', - icons: [ - { - src: '/images/rgrg-256x256.png', - sizes: '8'.repeat(100000) + 'x' + '8'.repeat(100000), - type: 'image/png', - }, - ], - method: methodName, - }); - }, "Don't crash when registering an instrument with a very long icon size 888...x888..."); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - return registration.paymentManager.instruments.set('instrument-key', { - name: 'Instrument Name', - icons: [ - { - src: '/images/rgrg-256x256.png', - type: 'image/png', - }, - ], - method: methodName, - }); - }, "Don't crash when 'sizes' missing from icon definition"); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - return registration.paymentManager.instruments.set('instrument-key', { - name: 'Instrument Name', - icons: [ - { - src: '/images/rgrg-256x256.png', - sizes: '256x256', - }, - ], - method: methodName, - }); - }, "Don't crash when 'type' missing from icon definition"); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - const setPromise = registration.paymentManager.instruments.set( - 'instrument-key', - { - name: 'Instrument Name', - icons: [ - { - src: '/images/rgrg-256x256.png', - sizes: '256 256', - type: 'image/png', - }, - ], - method: methodName, - }, - ); - return promise_rejects_js(t, TypeError, setPromise); - }, 'Cannot register instruments with invalid icon size "256 256" (missing "x")'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - const setPromise = registration.paymentManager.instruments.set( - 'instrument-key', - { - name: 'Instrument Name', - icons: [ - { - src: '/images/rg\0rg-256x256.png', - sizes: '256x256', - type: 'image/png', - }, - ], - method: methodName, - }, - ); - return promise_rejects_js(t, TypeError, setPromise); - }, 'Cannot register instruments with invalid icon URL (has a null character)'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - const setPromise = registration.paymentManager.instruments.set( - 'instrument-key', - { - name: 'Instrument Name', - icons: [ - { - src: 'http://test.example/images/rgrg-256x256.png', - sizes: '256x256', - type: 'image/png', - }, - ], - method: methodName, - }, - ); - return promise_rejects_js(t, TypeError, setPromise); - }, 'Cannot register instruments with non-existing non-https icon URL'); - - promise_test(async t => { - await registration.paymentManager.instruments.clear(); - const setPromise = registration.paymentManager.instruments.set( - 'instrument-key', - { - name: 'Instrument Name', - icons: [ - { - src: - 'http://www.chromium.org/_/rsrc/1438879449147/config/customLogo.gif', - sizes: '48x48', - type: 'image/gif', - }, - ], - method: methodName, - }, - ); - return promise_rejects_js(t, TypeError, setPromise); - }, 'Cannot register instruments with an existing non-https icon URL'); - - async function testUnusualStrings(existingKey, nonExistingKey) { - await registration.paymentManager.instruments.clear(); - await registration.paymentManager.instruments.set(existingKey, { - name: existingKey, - icons: [ - {src: '/images/rgrg-256x256.png', sizes: '256x256', type: 'image/png'}, - ], - method: existingKey, - capabilities: {aCapabilityName: existingKey}, - }); - const hasExistingInstrument = await registration.paymentManager.instruments.has( - existingKey, - ); - assert_true(hasExistingInstrument); - const hasNonExistingInstrument = await registration.paymentManager.instruments.has( - nonExistingKey, - ); - assert_false(hasNonExistingInstrument); - const existingInstrument = await registration.paymentManager.instruments.get( - existingKey, - ); - assert_equals(existingInstrument.name, existingKey); - const nonExistingInstrument = await registration.paymentManager.instruments.get( - nonExistingKey, - ); - assert_equals(nonExistingInstrument, undefined); - const deletedExistingInstrument = await registration.paymentManager.instruments.delete( - existingKey, - ); - assert_true(deletedExistingInstrument); - const deletedNonExistingInstrument = await registration.paymentManager.instruments.delete( - nonExistingKey, - ); - assert_false(deletedNonExistingInstrument); - } - - promise_test(async t => { - const length = 100000; - await testUnusualStrings('0'.repeat(length), '1'.repeat(length)); - }, "Don't crash on very long key, name, method, and capability strings."); - - promise_test(async t => { - await testUnusualStrings('foo\0bar', 'foo\0baz'); - }, "Don't crash on null characters in key, name, method, and capability strings."); -} - -registerAndActiveServiceWorker('app-simple.js', 'payment-app/', runTests); -</script> diff --git a/tests/wpt/web-platform-tests/payment-handler/register-and-activate-service-worker.js b/tests/wpt/web-platform-tests/payment-handler/register-and-activate-service-worker.js deleted file mode 100644 index fb54c5c0648..00000000000 --- a/tests/wpt/web-platform-tests/payment-handler/register-and-activate-service-worker.js +++ /dev/null @@ -1,28 +0,0 @@ -async function registerAndActiveServiceWorker(script, scope, callback) { - const registration = await navigator.serviceWorker.register(script, {scope}); - const serviceWorker = - registration.installing || registration.waiting || registration.active; - if (serviceWorker) { - waitForServiceWorkerActivation(scope, callback); - return; - } - - registration.addEventListener('updatefound', event => { - waitForServiceWorkerActivation(scope, callback); - }); -} - -async function waitForServiceWorkerActivation(scope, callback) { - const registration = await navigator.serviceWorker.getRegistration(scope); - if (registration.active) { - callback(registration); - return; - } - - const serviceWorker = registration.installing || registration.waiting; - serviceWorker.addEventListener('statechange', event => { - if (event.target.state == 'activated') { - callback(registration); - } - }); -} diff --git a/tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html b/tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html index 2e5dea3a4ae..27c20448435 100644 --- a/tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html +++ b/tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html @@ -13,7 +13,6 @@ promise_test(async t => { await wait_for_state(t, registration.installing, 'activated'); assert_equals(registration.paymentManager, registration.paymentManager); - assert_equals(registration.paymentManager.instruments, registration.paymentManager.instruments); }); </script> diff --git a/tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html b/tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html index 1b107d3aef7..8e368d13807 100644 --- a/tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html +++ b/tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html @@ -19,13 +19,19 @@ const delay = 2 const blank_page = `/resource-timing/resources/blank_page_green.htm`; const destUrl = `/common/slow-redirect.py?delay=${delay}&location=${REMOTE_ORIGIN}/${blank_page}`; -const timeBefore = performance.now() -attribute_test(load.iframe, destUrl, entry => { - assert_equals(entry.startTime, entry.fetchStart, 'startTime and fetchStart should be equal'); - assert_greater_than(entry.startTime, timeBefore, 'startTime and fetchStart should be greater than the time before fetching'); - // See https://github.com/w3c/resource-timing/issues/264 - assert_less_than(Math.round(entry.startTime - timeBefore), delay * 1000, 'startTime should not expose redirect delays'); -}, "Verify that cross-origin resources don't implicitly expose their redirect timings") +const timeBefore = performance.now(); +(async () => { + // Wait 10 ms, to ensure the difference between startTime and timeBefore is + // larger than 1 ms, to avoid flakiness in browsers that clamp timestamps to + // 1 ms. + await new Promise(r => step_timeout(r, 10)); + attribute_test(load.iframe, destUrl, entry => { + assert_equals(entry.startTime, entry.fetchStart, 'startTime and fetchStart should be equal'); + assert_greater_than(entry.startTime, timeBefore, 'startTime and fetchStart should be greater than the time before fetching'); + // See https://github.com/w3c/resource-timing/issues/264 + assert_less_than(Math.round(entry.startTime - timeBefore), delay * 1000, 'startTime should not expose redirect delays'); + }, "Verify that cross-origin resources don't implicitly expose their redirect timings") +})(); </script> </body> diff --git a/tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html b/tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html index 4d5d121fe32..6990c6c0608 100644 --- a/tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html +++ b/tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html @@ -23,13 +23,19 @@ const load_null_object = async path => { } const destUrl = `/common/slow-redirect.py?delay=${delay}&location=${REMOTE_ORIGIN}${not_found_page}`; -const timeBefore = performance.now() -attribute_test(load_null_object, destUrl, entry => { - assert_equals(entry.startTime, entry.fetchStart, 'startTime and fetchStart should be equal'); - assert_greater_than(entry.startTime, timeBefore, 'startTime and fetchStart should be greater than the time before fetching'); - // See https://github.com/w3c/resource-timing/issues/264 - assert_less_than(Math.round(entry.startTime - timeBefore), delay * 1000, 'startTime should not expose redirect delays'); -}, "Verify that cross-origin object resources don't implicitly expose their redirect timings") +const timeBefore = performance.now(); +(async () => { + // Wait 10 ms, to ensure the difference between startTime and timeBefore is + // larger than 1 ms, to avoid flakiness in browsers that clamp timestamps to + // 1 ms. + await new Promise(r => step_timeout(r, 10)); + attribute_test(load_null_object, destUrl, entry => { + assert_equals(entry.startTime, entry.fetchStart, 'startTime and fetchStart should be equal'); + assert_greater_than(entry.startTime, timeBefore, 'startTime and fetchStart should be greater than the time before fetching'); + // See https://github.com/w3c/resource-timing/issues/264 + assert_less_than(Math.round(entry.startTime - timeBefore), delay * 1000, 'startTime should not expose redirect delays'); + }, "Verify that cross-origin object resources don't implicitly expose their redirect timings") +})(); </script> </body> diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js b/tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js index dc907533946..bbc913b7229 100644 --- a/tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js +++ b/tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js @@ -1,3 +1,19 @@ +const await_with_timeout = async (delay, message, promise, cleanup = ()=>{}) => { + let timeout_id; + const timeout = new Promise((_, reject) => { + timeout_id = step_timeout(() => + reject(new DOMException(message, "TimeoutError")), delay) + }); + let result = null; + try { + result = await Promise.race([promise, timeout]); + clearTimeout(timeout_id); + } finally { + cleanup(); + } + return result; +}; + // Asserts that the given attributes are present in 'entry' and hold equal // values. const assert_all_equal_ = (entry, attributes) => { @@ -451,12 +467,10 @@ const attribute_test_internal = (loader, path, validator, run_test, test_label) }); await loader(path, validator); - const timeout = new Promise(r => step_timeout(() => { - console.log("Timeout was reached before entry fired"); - r(null); - }, 2000)); - const entry = await Promise.race([loaded_entry, timeout]); - assert_not_equals(entry, null, 'No entry was recieved'); + const entry = await await_with_timeout(2000, + "Timeout was reached before entry fired", + loaded_entry); + assert_not_equals(entry, null, 'No entry was received'); run_test(entry); }, test_label); }; diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js b/tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js index 70889b709f1..37fea16b175 100644 --- a/tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js +++ b/tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js @@ -135,7 +135,7 @@ const load = { // object. object: async (path, type) => { const object = document.createElement("object"); - const loaded = new Promise(resolve => { + const object_load_settled = new Promise(resolve => { object.onload = object.onerror = resolve; }); object.data = load.cache_bust(path); @@ -143,12 +143,11 @@ const load = { object.type = type; } document.body.appendChild(object); - const timeout = new Promise(r => step_timeout(() => { - console.log("Timeout was reached before load or error events fired"); - r(); - }, 2000)); - await Promise.race([loaded, timeout]); - document.body.removeChild(object); + await await_with_timeout(2000, + "Timeout was reached before load or error events fired", + object_load_settled, + () => { document.body.removeChild(object) } + ); }, // Returns a promise that settles once the given path has been fetched diff --git a/tests/wpt/web-platform-tests/resource-timing/response-status-code.html b/tests/wpt/web-platform-tests/resource-timing/response-status-code.html index 3c606c5496e..3a184c6f016 100644 --- a/tests/wpt/web-platform-tests/resource-timing/response-status-code.html +++ b/tests/wpt/web-platform-tests/resource-timing/response-status-code.html @@ -24,6 +24,10 @@ const load_image_object = async path => { return load.object(path, "image/png"); } +const load_frame_object = async path => { + return load.object(path, "text/html"); +} + const load_null_object = async path => { return load.object(path, null); } @@ -38,6 +42,7 @@ for(const loader of [ load.xhr_async, load.iframe, load_image_object, + load_frame_object, load_null_object ]) { for(const status of status_codes) { @@ -88,6 +93,7 @@ for(const loader of [ load.stylesheet, load.iframe, load_image_object, + load_frame_object, load_null_object ]) { for(const tao of [false, true]) { @@ -113,6 +119,7 @@ for(const loader of [ // Same-Origin => Cross-Origin => Same-Origin => Same-Origin redirect chain for(const loader of [ load.iframe, + load_frame_object, load_null_object ]) { for(const status of status_codes) { @@ -136,6 +143,7 @@ for(const loader of [ // Response status for iframes is exposed for same origin redirects for(const loader of [ load.iframe, + load_frame_object, load_null_object ]) { for(const status of status_codes) { diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus/delegatesFocus-tabindex-change.html b/tests/wpt/web-platform-tests/shadow-dom/focus/delegatesFocus-tabindex-change.html new file mode 100644 index 00000000000..f159c22164b --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/focus/delegatesFocus-tabindex-change.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<link rel=author href="mailto:jarhar@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<body> +<script> +test(() => { + const host = document.createElement('div'); + document.body.appendChild(host); + + const shadowRoot = host.attachShadow({mode: 'open', delegatesFocus: true}); + + const shadowInput = document.createElement('input'); + shadowRoot.appendChild(shadowInput); + + host.focus(); + assert_equals(document.activeElement, host, 'The shadow host should be focused.'); + + host.setAttribute('tabindex', '0'); + assert_equals(document.activeElement, host, 'The shadow host should remain focused after changing tabindex.'); +}, 'Setting tabindex on the shadow host of a focused element with delegatesFocus should not change focus.'); +</script> diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py index 92022e9b1ea..1635dce7ec6 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py @@ -7,6 +7,7 @@ import pytest from tools.wpt import wpt from tools.wptrunner.wptrunner import manifestexpected +from tools.wptrunner.wptrunner.manifestupdate import get_test_name from localpaths import repo_root @pytest.fixture @@ -118,11 +119,11 @@ def test_update(tmp_path, metadata_file): run_info_firefox) # Default expected isn't stored with pytest.raises(KeyError): - assert firefox_expected.get_test(test_id.rpartition('/')[-1]).get("expected") - assert firefox_expected.get_test(test_id.rpartition('/')[-1]).get_subtest(subtest_name).expected == "FAIL" + assert firefox_expected.get_test(get_test_name(test_id)).get("expected") + assert firefox_expected.get_test(get_test_name(test_id)).get_subtest(subtest_name).expected == "FAIL" chrome_expected = manifestexpected.get_manifest(metadata_path, test_path, run_info_chrome) - assert chrome_expected.get_test(test_id.rpartition('/')[-1]).expected == "ERROR" - assert chrome_expected.get_test(test_id.rpartition('/')[-1]).get_subtest(subtest_name).expected == "NOTRUN" + assert chrome_expected.get_test(get_test_name(test_id)).expected == "ERROR" + assert chrome_expected.get_test(get_test_name(test_id)).get_subtest(subtest_name).expected == "NOTRUN" diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py index ce12bc3370a..0bc25187976 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py @@ -60,6 +60,10 @@ def data_cls_getter(output_node, visited_node): else: raise ValueError +def get_test_name(test_id): + # test name is base name of test path + query string + frament + return test_id[len(urlsplit(test_id).path.rsplit("/", 1)[0]) + 1:] + class UpdateProperties: def __init__(self, manifest, **kwargs): @@ -218,7 +222,7 @@ class TestNode(ManifestItem): :param test_type: The type of the test :param test_id: The id of the test""" - name = test_id[len(urlsplit(test_id).path.rsplit("/", 1)[0]) + 1:] + name = get_test_name(test_id) node = DataNode(name) self = cls(node) 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 0e24c0deaa1..93e2a87826c 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py @@ -11,6 +11,7 @@ from collections import defaultdict, deque, namedtuple from . import manifestinclude from . import manifestexpected +from . import manifestupdate from . import mpcontext from . import wpttest from mozlog import structured @@ -267,7 +268,7 @@ class TestLoader: def get_test(self, manifest_file, manifest_test, inherit_metadata, test_metadata): if test_metadata is not None: inherit_metadata.append(test_metadata) - test_metadata = test_metadata.get_test(manifest_test.id.rpartition('/')[-1]) + test_metadata = test_metadata.get_test(manifestupdate.get_test_name(manifest_test.id)) return wpttest.from_manifest(manifest_file, manifest_test, inherit_metadata, test_metadata) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py index d11b3a22451..2d3578a903c 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py @@ -7,7 +7,7 @@ from manifest import manifest as wptmanifest from manifest.item import TestharnessTest, RefTest from manifest.utils import to_os_path from . test_update import tree_and_sourcefile_mocks -from .. import manifestexpected, wpttest +from .. import manifestexpected, manifestupdate, wpttest dir_ini_0 = b"""\ @@ -111,7 +111,8 @@ def make_test_object(test_name, test_path=test_path) test = next(iter(tests[index][2])) if iterate else tests[index][2].pop() - return wpttest.from_manifest(tests, test, inherit_metadata, test_metadata.get_test(test.id.rpartition('/')[-1])) + return wpttest.from_manifest(tests, test, inherit_metadata, + test_metadata.get_test(manifestupdate.get_test_name(test.id))) def test_run_info(): @@ -224,7 +225,8 @@ def test_metadata_fuzzy(): test_path="a/fuzzy.html") test = next(manifest.iterpath(to_os_path("a/fuzzy.html"))) - test_obj = wpttest.from_manifest(manifest, test, [], test_metadata.get_test(test.id.rpartition('/')[-1])) + test_obj = wpttest.from_manifest(manifest, test, [], + test_metadata.get_test(manifestupdate.get_test_name(test.id))) assert test_obj.fuzzy == {('/a/fuzzy.html', '/a/fuzzy-ref.html', '=='): [[2, 3], [10, 15]]} assert test_obj.fuzzy_override == {'/a/fuzzy-ref.html': ((1, 1), (200, 200))} diff --git a/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html b/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html index 6f8670f64d1..61b52ac5958 100644 --- a/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html +++ b/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html @@ -131,7 +131,7 @@ standardSetup(async function(authenticator) { first: new Uint8Array([1,2,3,4]).buffer, }; return promise_rejects_dom( - t, "NotSupportedError", assert(id, {evalByCredential: byCred })); + t, "SyntaxError", assert(id, {evalByCredential: byCred })); }, "navigator.credentials.get() using invalid base64url credential ID"); promise_test(async t => { |