diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2020-01-29 01:43:40 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-29 01:43:40 -0500 |
commit | 7e4d0534c3dcb54a6721c24ecae91942b019daaa (patch) | |
tree | 047f53430a0f037d7b5d3a144c1c39dce311d5ea | |
parent | 271a30f22f741afa6e036e4c45fff078dacf5e84 (diff) | |
parent | 81d0cdbb2cc73a263740569138ef2a67aa0cd106 (diff) | |
download | servo-7e4d0534c3dcb54a6721c24ecae91942b019daaa.tar.gz servo-7e4d0534c3dcb54a6721c24ecae91942b019daaa.zip |
Auto merge of #25631 - servo-wpt-sync:wpt_update_28-01-2020, r=servo-wpt-sync
Sync WPT with upstream (28-01-2020)
Automated downstream sync of changes from upstream as of 28-01-2020.
[no-wpt-sync]
r? @servo-wpt-sync
159 files changed, 2805 insertions, 963 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 558903fe28b..33bc60aa83c 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -126987,6 +126987,54 @@ {} ] ], + "css/css-grid/grid-item-non-auto-height-stretch-001.html": [ + [ + "css/css-grid/grid-item-non-auto-height-stretch-001.html", + [ + [ + "/css/css-grid/grid-item-non-auto-height-stretch-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-item-non-auto-height-stretch-002.html": [ + [ + "css/css-grid/grid-item-non-auto-height-stretch-002.html", + [ + [ + "/css/css-grid/grid-item-non-auto-height-stretch-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-item-non-auto-height-stretch-003.html": [ + [ + "css/css-grid/grid-item-non-auto-height-stretch-003.html", + [ + [ + "/css/css-grid/grid-item-non-auto-height-stretch-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-item-non-auto-height-stretch-004.html": [ + [ + "css/css-grid/grid-item-non-auto-height-stretch-004.html", + [ + [ + "/css/css-grid/grid-item-non-auto-height-stretch-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/grid-items/anonymous-grid-item-001.html": [ [ "css/css-grid/grid-items/anonymous-grid-item-001.html", @@ -129435,6 +129483,42 @@ {} ] ], + "css/css-grid/subgrid/subgrid-mbp-overflow-001.html": [ + [ + "css/css-grid/subgrid/subgrid-mbp-overflow-001.html", + [ + [ + "/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/subgrid-mbp-overflow-002.html": [ + [ + "css/css-grid/subgrid/subgrid-mbp-overflow-002.html", + [ + [ + "/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/subgrid-mbp-overflow-003.html": [ + [ + "css/css-grid/subgrid/subgrid-mbp-overflow-003.html", + [ + [ + "/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-images/css-image-fallbacks-and-annotations.html": [ [ "css/css-images/css-image-fallbacks-and-annotations.html", @@ -165007,6 +165091,42 @@ {} ] ], + "css/css-transforms/transformed-preserve-3d-1.html": [ + [ + "css/css-transforms/transformed-preserve-3d-1.html", + [ + [ + "/css/css-transforms/reference/transformed-preserve-3d-1-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transformed-rotateX-3.html": [ + [ + "css/css-transforms/transformed-rotateX-3.html", + [ + [ + "/css/css-transforms/reference/transformed-rotateX-3-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transformed-rotateY-1.html": [ + [ + "css/css-transforms/transformed-rotateY-1.html", + [ + [ + "/css/css-transforms/reference/transformed-rotateY-1-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-transforms/transforms-rotate-degree-45.html": [ [ "css/css-transforms/transforms-rotate-degree-45.html", @@ -166051,42 +166171,6 @@ {} ] ], - "css/css-transforms/transofrmed-preserve-3d-1.html": [ - [ - "css/css-transforms/transofrmed-preserve-3d-1.html", - [ - [ - "/css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/transofrmed-rotateX-3.html": [ - [ - "css/css-transforms/transofrmed-rotateX-3.html", - [ - [ - "/css/css-transforms/reference/transofrmed-rotateX-3-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-transforms/transofrmed-rotateY-1.html": [ - [ - "css/css-transforms/transofrmed-rotateY-1.html", - [ - [ - "/css/css-transforms/reference/transofrmed-rotateY-1-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-transforms/ttwf-css-3d-polygon-cycle-mismatch.html": [ [ "css/css-transforms/ttwf-css-3d-polygon-cycle-mismatch.html", @@ -253112,6 +253196,9 @@ "css/css-grid/grid-definition/support/testing-utils.js": [ [] ], + "css/css-grid/grid-item-non-auto-height-stretch-ref.html": [ + [] + ], "css/css-grid/grid-items/grid-item-overflow-auto-max-height-percentage-ref.html": [ [] ], @@ -253361,6 +253448,12 @@ "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [ [] ], + "css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html": [ + [] + ], "css/css-grid/test-plan/index.html": [ [] ], @@ -258689,6 +258782,15 @@ "css/css-transforms/reference/transform-translateX-001-ref.html": [ [] ], + "css/css-transforms/reference/transformed-preserve-3d-1-ref.html": [ + [] + ], + "css/css-transforms/reference/transformed-rotateX-3-ref.html": [ + [] + ], + "css/css-transforms/reference/transformed-rotateY-1-ref.html": [ + [] + ], "css/css-transforms/reference/transforms-rotate-degree-45-ref.html": [ [] ], @@ -258710,15 +258812,6 @@ "css/css-transforms/reference/translate-optional-second-ref.html": [ [] ], - "css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html": [ - [] - ], - "css/css-transforms/reference/transofrmed-rotateX-3-ref.html": [ - [] - ], - "css/css-transforms/reference/transofrmed-rotateY-1-ref.html": [ - [] - ], "css/css-transforms/reference/ttwf-css-3d-polygon-cycle-ref.html": [ [] ], @@ -266636,6 +266729,9 @@ "document-policy/required-policy/required-document-policy.html.headers": [ [] ], + "document-policy/required-policy/separate-document-policies.html.headers": [ + [] + ], "dom/META.yml": [ [] ], @@ -325365,6 +325461,24 @@ {} ] ], + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html": [ + [ + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html", + {} + ] + ], + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html": [ + [ + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html", + {} + ] + ], + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html": [ + [ + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html", + {} + ] + ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html": [ [ "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html", @@ -340761,6 +340875,12 @@ {} ] ], + "document-policy/required-policy/separate-document-policies.html": [ + [ + "document-policy/required-policy/separate-document-policies.html", + {} + ] + ], "dom/abort/event.any.js": [ [ "dom/abort/event.any.html", @@ -368729,12 +368849,6 @@ {} ] ], - "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html": [ - [ - "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html", - {} - ] - ], "html/semantics/interfaces.html": [ [ "html/semantics/interfaces.html", @@ -438563,6 +438677,12 @@ {} ] ], + "web-animations/interfaces/Animation/onremove.html": [ + [ + "web-animations/interfaces/Animation/onremove.html", + {} + ] + ], "web-animations/interfaces/Animation/pause.html": [ [ "web-animations/interfaces/Animation/pause.html", @@ -448290,6 +448410,12 @@ {} ] ], + "webxr/hit-test/ar_hittest_subscription_states.https.html": [ + [ + "webxr/hit-test/ar_hittest_subscription_states.https.html", + {} + ] + ], "webxr/hit-test/xrRay_constructor.https.html": [ [ "webxr/hit-test/xrRay_constructor.https.html", @@ -450266,6 +450392,23 @@ } ] ], + "workers/modules/shared-worker-import-data-url.any.js": [ + [ + "workers/modules/shared-worker-import-data-url.any.html", + { + "script_metadata": [ + [ + "global", + "!worker" + ], + [ + "script", + "/workers/modules/resources/import-test-cases.js" + ] + ] + } + ] + ], "workers/modules/shared-worker-import-failure.html": [ [ "workers/modules/shared-worker-import-failure.html", @@ -476987,7 +477130,7 @@ "testharness" ], "2dcontext/imagebitmap/createImageBitmap-transfer.html": [ - "6e836db9b96eea6668fd703c1f6ab090e8d88323", + "3ec02fcbf486f2f43c4c090b65ece7ad1d55f218", "testharness" ], "2dcontext/imagebitmap/createImageBitmap-worker.js": [ @@ -478951,11 +479094,11 @@ "testharness" ], "FileAPI/blob/Blob-constructor-endings.html": [ - "e5426bb979d6fbec0c0693ec6de1dd70fde38135", + "04edd2a303b1359d7f00c154c9b109df3610a1c6", "testharness" ], "FileAPI/blob/Blob-constructor.html": [ - "d2b1777b86bed3d54303de9be0cd85d51d8ace92", + "62a649aed66418494e9f06db833b25dcc477db1a", "testharness" ], "FileAPI/blob/Blob-in-worker.worker.js": [ @@ -478979,11 +479122,11 @@ "testharness" ], "FileAPI/file/File-constructor-endings.html": [ - "f76d33295218c50553edab8a3075b9d192b35f10", + "1282b6c5ac2c790803eea11ad74183ae8d78bd07", "testharness" ], "FileAPI/file/File-constructor.html": [ - "60dbb233f018f0bab078daf6969218aff2bff73b", + "63fda5e8d17d0f1d297014c0ff3f721edb122bb6", "testharness" ], "FileAPI/file/Worker-read-file-constructor.worker.js": [ @@ -479271,7 +479414,7 @@ "testharness" ], "IndexedDB/clone-before-keypath-eval.html": [ - "8b99e1ae16c47a4b34e4c3c579ce7d1fea863d27", + "c885620e292219ec4cf23514a49a9044a866322a", "testharness" ], "IndexedDB/close-in-upgradeneeded.html": [ @@ -479355,11 +479498,11 @@ "testharness" ], "IndexedDB/idbcursor-advance-exception-order.html": [ - "893c179e24f588249d075f9b8583b8c6984dd189", + "a0294e9b7a1e7342270ba7837dd44f0ae26dcfb6", "testharness" ], "IndexedDB/idbcursor-advance-invalid.htm": [ - "02c7fde0c4959b6524f9385a0b29dfa389ddf474", + "67e03187c0fc5cd1ff76404440439aa52cd0f26b", "testharness" ], "IndexedDB/idbcursor-advance.htm": [ @@ -479907,11 +480050,11 @@ "testharness" ], "IndexedDB/idbindex-getAll-enforcerange.html": [ - "198253550042120a94dea1f8cf74c4ded9bd3aad", + "ab0c18b04ff53fdf78932fe86189bd7cc3322c14", "testharness" ], "IndexedDB/idbindex-getAllKeys-enforcerange.html": [ - "40cad527bb0893f8191f337fc58880eb3cb41306", + "fc65311a5644827c2ffe341ac61833699715fcc7", "testharness" ], "IndexedDB/idbindex-multientry-arraykeypath.htm": [ @@ -480111,15 +480254,15 @@ "testharness" ], "IndexedDB/idbobjectstore-getAll-enforcerange.html": [ - "80c653b38642443b595487b35e2e838ad249e584", + "0c4eb89905dc001a6e6293f43da1c646e5ea0ed0", "testharness" ], "IndexedDB/idbobjectstore-getAllKeys-enforcerange.html": [ - "3653d1d5a1f41f3a0e23a7d5b18c51dfea9c0f1e", + "23fe5966912e8ff955a82a1612a219301ad31ca2", "testharness" ], "IndexedDB/idbobjectstore-index-finished.html": [ - "cc8dceaf42e6094bb613f27ffd1d9749d86fe859", + "67b0945cc982711153f6d062db05cd5710f40571", "testharness" ], "IndexedDB/idbobjectstore-query-exception-order.html": [ @@ -480467,11 +480610,11 @@ "testharness" ], "IndexedDB/idbrequest_error.html": [ - "651a844d29dae291da08af72fa704860c5b913fd", + "c140c59e2de9b2bd1343fb6720e66db143b106f7", "testharness" ], "IndexedDB/idbrequest_result.html": [ - "f77aba7dfe4114d56eebcea895dd00f919324209", + "e7516d52e8f0d7259db255657ae7adffce722a0a", "testharness" ], "IndexedDB/idbtransaction-db-SameObject.html": [ @@ -480479,11 +480622,11 @@ "testharness" ], "IndexedDB/idbtransaction-objectStore-exception-order.html": [ - "4b7659ff0bf9ea671bb43488a231760db7656baa", + "bc0357a13115d0398668b88c62284feff5455a9d", "testharness" ], "IndexedDB/idbtransaction-objectStore-finished.html": [ - "e1a8500b17a915a787ece533b2803d805410d901", + "78d2777e63cd2734c48681562cc23fed7fecc3e2", "testharness" ], "IndexedDB/idbtransaction-oncomplete.htm": [ @@ -504819,7 +504962,7 @@ "support" ], "content-security-policy/inside-worker/support/script-src-self.sub.js": [ - "c5733d64cc9691a8bf1dcc6497134bfea39f7263", + "67d5943624c6a5252bc2f79af4e9accceb760690", "support" ], "content-security-policy/media-src/media-src-7_1.html": [ @@ -506095,7 +506238,7 @@ "testharness" ], "content-security-policy/securitypolicyviolation/constructor-required-fields.html": [ - "1424cdcd7ffafaba543f7b4986c61b4f51a611a3", + "1a090d8e2c46057c950e0087efaf27cce0d11fb0", "testharness" ], "content-security-policy/securitypolicyviolation/idlharness.window.js": [ @@ -576087,7 +576230,7 @@ "support" ], "css/css-conditional/test_group_insertRule.html": [ - "3818108ac6015616c39b92256305a379c8c7a9f0", + "e9e8cce8ffaeb983eed7a84e33da04cc4c3a5242", "testharness" ], "css/css-contain/META.yml": [ @@ -591967,15 +592110,15 @@ "support" ], "css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html": [ - "cecab3e213653fbb732cc12f04cc44daee6da5a5", + "0901ddea41695f00ca9735085c79cf887ee80730", "testharness" ], "css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html": [ - "40ee22190b917488af3005e16574a75f1de210ca", + "1b495c47d2d165550e15ea4a2e8e9a44d71cb001", "testharness" ], "css/css-grid/alignment/grid-align-content-distribution.html": [ - "488fc05aad441bd2a648ad1a95c339ae82504ee1", + "444e46b9ca5c8049170f09619f424400967c7633", "testharness" ], "css/css-grid/alignment/grid-align-content-vertical-lr.html": [ @@ -592003,7 +592146,7 @@ "testharness" ], "css/css-grid/alignment/grid-align-justify-overflow.html": [ - "f0d94198aff6dddb7acab1e7965e1ca9fc84c4a3", + "3ae182782a3bcc1261d47a130dbedb305b3ada83", "testharness" ], "css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html": [ @@ -592622,6 +592765,18 @@ "eb9666465542a34cc29853dd71dc326ff4cbbd63", "reftest" ], + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html": [ + "32c2efb39571e2575de8b90042f8dde9f39a3adc", + "testharness" + ], + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html": [ + "845c6cea27eac594100d3b5917e05f896c36e4b1", + "testharness" + ], + "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html": [ + "c506547a7607ccb174c9bf3758b432f68ebfe3a9", + "testharness" + ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html": [ "967b0e4be967e9b3619e24cdf372aefcfd6b4f24", "testharness" @@ -593298,6 +593453,26 @@ "217b620463624e2feb294b320e7787f6c91f1932", "support" ], + "css/css-grid/grid-item-non-auto-height-stretch-001.html": [ + "458ed020e37d8b8b66bc6ee7a8b4a6f8acf7d1df", + "reftest" + ], + "css/css-grid/grid-item-non-auto-height-stretch-002.html": [ + "9b2757f4d845be1e753b5e12079450b7324c59c7", + "reftest" + ], + "css/css-grid/grid-item-non-auto-height-stretch-003.html": [ + "acd382b4f9fa018474140ebd27f473b89feee6ee", + "reftest" + ], + "css/css-grid/grid-item-non-auto-height-stretch-004.html": [ + "b68cf7546d77a9c8da8b9f9a12589850cfc62d89", + "reftest" + ], + "css/css-grid/grid-item-non-auto-height-stretch-ref.html": [ + "1249dbaa8c88cd1436741b6bcf526efb183a35a6", + "support" + ], "css/css-grid/grid-items/anonymous-grid-item-001.html": [ "db88ce54b38badc1277661af913303942d63ece0", "reftest" @@ -594515,7 +594690,7 @@ "reftest" ], "css/css-grid/subgrid/abs-pos-002-ref.html": [ - "69e071c758b65724d49af23ecd7d3d77d1970e3c", + "1354260d50be155f18bed7f924143800c69f6b51", "support" ], "css/css-grid/subgrid/abs-pos-002.html": [ @@ -594798,6 +594973,26 @@ "29e82197831fec5e996d0f682a8f42eca819a8ed", "reftest" ], + "css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html": [ + "30f4bf7a969527eca2963bdd2f62d8749bb5000f", + "support" + ], + "css/css-grid/subgrid/subgrid-mbp-overflow-001.html": [ + "a9aec76a9f027dcd1908a383e1573f7a110e67ae", + "reftest" + ], + "css/css-grid/subgrid/subgrid-mbp-overflow-002.html": [ + "1bd1fa67bfc53c3b7637fd3bc4bf98b8aa2403c5", + "reftest" + ], + "css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html": [ + "d771427f6e5adff7304c892bfc0990cba51d923a", + "support" + ], + "css/css-grid/subgrid/subgrid-mbp-overflow-003.html": [ + "45afcb56cbd2beb4d3a6afdbfc9856686526f596", + "reftest" + ], "css/css-grid/test-plan/index.html": [ "039f3a87c1a7d042af4ac043b1a5c4c4cb6c0d1e", "support" @@ -617302,6 +617497,18 @@ "a1cee2aa91eb9ba2928ef5b7e2d0cb152cebebe0", "support" ], + "css/css-transforms/reference/transformed-preserve-3d-1-ref.html": [ + "06f7257c50a98359a625c8b6f34c309628858f93", + "support" + ], + "css/css-transforms/reference/transformed-rotateX-3-ref.html": [ + "aeb72f5df2594abd68c1fe4a12423c75f3edda8e", + "support" + ], + "css/css-transforms/reference/transformed-rotateY-1-ref.html": [ + "9c3419e6f436e6c9c68921040b431eabb15bb9ef", + "support" + ], "css/css-transforms/reference/transforms-rotate-degree-45-ref.html": [ "b79cc4716799f45183951748c3349016a1655b2b", "support" @@ -617330,18 +617537,6 @@ "11742fef0c7f645b510080ac4c41941a9b8f0295", "support" ], - "css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html": [ - "06f7257c50a98359a625c8b6f34c309628858f93", - "support" - ], - "css/css-transforms/reference/transofrmed-rotateX-3-ref.html": [ - "aeb72f5df2594abd68c1fe4a12423c75f3edda8e", - "support" - ], - "css/css-transforms/reference/transofrmed-rotateY-1-ref.html": [ - "9c3419e6f436e6c9c68921040b431eabb15bb9ef", - "support" - ], "css/css-transforms/reference/ttwf-css-3d-polygon-cycle-ref.html": [ "e5c99eae722d3d35c7294ad3d68c424e6b9734ff", "support" @@ -619970,6 +620165,18 @@ "61feb7e61a42346914555dc66c54f60791f00cfb", "testharness" ], + "css/css-transforms/transformed-preserve-3d-1.html": [ + "14ab46e29a1285857df09b7abfbee641b9658c68", + "reftest" + ], + "css/css-transforms/transformed-rotateX-3.html": [ + "2517eac8e40fde4911dd4666f7579ec154093799", + "reftest" + ], + "css/css-transforms/transformed-rotateY-1.html": [ + "e1e9b2969d8ca8934aae5ff3eeca155a6474050f", + "reftest" + ], "css/css-transforms/transforms-rotate-degree-45.html": [ "e18cd988636ce0146343e5b7ce8651d4ae9050b6", "reftest" @@ -620354,18 +620561,6 @@ "39b5f91d8b3cb2c2eadf6bee7ca1f56f2ce0a4ca", "reftest" ], - "css/css-transforms/transofrmed-preserve-3d-1.html": [ - "b7e1f905bb8a680fba133bcd0224e44ea799e9c1", - "reftest" - ], - "css/css-transforms/transofrmed-rotateX-3.html": [ - "58ab80e807a2b8f59edd8d11afb0a411054e56ac", - "reftest" - ], - "css/css-transforms/transofrmed-rotateY-1.html": [ - "86581bc447b9f9a6a803770209e8cc3c379f023a", - "reftest" - ], "css/css-transforms/ttwf-css-3d-polygon-cycle-mismatch.html": [ "addcb65cd71de768e7205fc6c8eded21dcc8ef55", "reftest" @@ -634527,7 +634722,7 @@ "testharness" ], "css/cssom/getComputedStyle-pseudo.html": [ - "1795bcf2ba40806f11c0fd35a1ede40d56c937a5", + "3f8b7a72bdc28bb7773d0da72373799dfab6db63", "testharness" ], "css/cssom/getComputedStyle-resolved-min-max-clamping.html": [ @@ -638755,7 +638950,7 @@ "support" ], "css/support/grid.css": [ - "5cfb15e7ef0dcd9c4bb1f6d1d9fc04e703ac126e", + "4007ebba43631ad69dafe6cf3dae74481ab219af", "support" ], "css/support/import-green.css": [ @@ -648331,11 +648526,11 @@ "testharness" ], "custom-elements/HTMLElement-attachInternals.html": [ - "9331869f8fe388503f93d6526111c34f36fa95ad", + "43ea55a67e08ce1c3086775f0df89f464e505e03", "testharness" ], "custom-elements/HTMLElement-constructor.html": [ - "8e33137d4ff7514918a986d55a96c29b1e5988f5", + "b52c84147097a60ff87e5aa7214d2b345a5cf891", "testharness" ], "custom-elements/META.yml": [ @@ -648423,7 +648618,7 @@ "testharness" ], "custom-elements/htmlconstructor/newtarget.html": [ - "b95d7ade0bbd2cf490ecf82dba21ecefc12eab5c", + "d2eb022d85444a82f1554debff2ead9ebde5fc70", "testharness" ], "custom-elements/microtasks-and-constructors.html": [ @@ -649086,6 +649281,14 @@ "1b671dafe06d44e5b267bbfc54691f5f911297eb", "support" ], + "document-policy/required-policy/separate-document-policies.html": [ + "c2611a5dcf23eb165eec4edd34493c654c88a5a8", + "testharness" + ], + "document-policy/required-policy/separate-document-policies.html.headers": [ + "0dcb2328ae7c48f451f43a7f89fcf90828d5f8a2", + "support" + ], "dom/META.yml": [ "6fd5b12664da091fd9ee773b821ad72ee704ee8f", "support" @@ -649159,7 +649362,7 @@ "testharness" ], "dom/events/Event-constructors.html": [ - "72347efd5324adb4e518b8e725f258646265df55", + "87d68d5ef527fd5a6caa592d87e58cc526cfced8", "testharness" ], "dom/events/Event-defaultPrevented-after-dispatch.html": [ @@ -649879,7 +650082,7 @@ "testharness" ], "dom/nodes/Document-createElement.html": [ - "653108ca11acec98bb7a0990034c0d3a1338f4d1", + "c0126b4f8a88d887cd9fa05618e1b7d441064641", "testharness" ], "dom/nodes/Document-createElementNS.html": [ @@ -650399,7 +650602,7 @@ "testharness" ], "dom/nodes/attributes.html": [ - "65bea67173d2475a27c33b7cbf69bda17af2dacb", + "c6db7eb8aa4e6c3c4a4f365965af6acb9665f562", "testharness" ], "dom/nodes/attributes.js": [ @@ -653351,7 +653554,7 @@ "testharness" ], "encoding/streams/decode-attributes.any.js": [ - "3fe442bf133c747d5b923d207b8f1c3a93ee5507", + "6552a91c6e281a9dd76e85fe11356e3ee7fc964b", "testharness" ], "encoding/streams/decode-bad-chunks.any.js": [ @@ -653419,7 +653622,7 @@ "testharness" ], "encoding/textdecoder-fatal.any.js": [ - "5ee4b65ebe3dfd3a515aae3ae904709ae084a632", + "f9ccb2dfa7608baf283ce8b163d18b98e68f92e9", "testharness" ], "encoding/textdecoder-ignorebom.any.js": [ @@ -654315,15 +654518,15 @@ "support" ], "event-timing/buffered-flag.html": [ - "b9c63ffd8fdd6dca11211376538c65fa9571c437", + "dc70ff253ff3c408f052e3d8cca705069ee8fa76", "testharness" ], "event-timing/click-timing.html": [ - "afe53bfc23c943a3f3a3679dffbab5edcf5a27ea", + "376372a3f110feb85d65bd3dc0e28465e5a5e71d", "testharness" ], "event-timing/crossiframe.html": [ - "f24e2c21edbaf258c65b9f01d240f38bcd307d75", + "55e2becfcbcfa3feba1473ddcd17e15a30adbfc0", "testharness" ], "event-timing/idlharness.any.js": [ @@ -654331,11 +654534,11 @@ "testharness" ], "event-timing/only-observe-firstInput.html": [ - "48df6ec9fc65a9eb8c4adf62f5fc7219b7c5a056", + "ad71153d40bca022ebcd9c902710f8d71aeaeb61", "testharness" ], "event-timing/programmatic-click-not-observed.html": [ - "c84d4eff6b8779953bcde54eb5169f0ffa1c6314", + "1c2921ca48991f46de533e10a7c4a2a924ab3551", "testharness" ], "event-timing/resources/crossiframe-childframe.html": [ @@ -654351,23 +654554,23 @@ "support" ], "event-timing/retrievability.html": [ - "cdb47c6a50480087b92a35ce86c621e28f23d8a7", + "d2b6da2439fe5f42091b35d0916c6e36ff3c0e8b", "testharness" ], "event-timing/retrieve-firstInput.html": [ - "5ddd9b5f01b75d9530adac84acab9a214bfded87", + "acff788259f5ee85db230d967692b3a35894c387", "testharness" ], "event-timing/supported-types.window.js": [ - "443c2533c2e503145e8c3639050f89d1277993bd", + "5360bdd9e82244350ac19de21bcd67d9fd5a0450", "testharness" ], "event-timing/timingconditions.html": [ - "1fcda21a197028ee3b6812f63aef41503d2a7b9b", + "02da2976ceecc8c5fa648b74a70fcf277bc8ee3f", "testharness" ], "event-timing/toJSON.html": [ - "05a7ba76319b0947c6c3057ae35e97b7c9d4d3c1", + "a11073aa9a0eb8436fb0ecfcdc48f4a35c908993", "testharness" ], "eventsource/META.yml": [ @@ -655839,7 +656042,7 @@ "testharness" ], "fetch/api/headers/headers-record.html": [ - "0a217c3ddb287fde30f27f75607f52c1fb2cb3ed", + "c7d8d99a7095ebb6b5d3e3154ac69108e819698f", "testharness" ], "fetch/api/headers/headers-structure.html": [ @@ -658423,7 +658626,7 @@ "support" ], "generic-sensor/generic-sensor-tests.js": [ - "0cb3cb224a187daee110c0ef044da786f480bc3c", + "1843734a3bb0adf4d9e853af4ba74ae39aa33f41", "support" ], "generic-sensor/idlharness.https.window.js": [ @@ -660703,7 +660906,7 @@ "testharness" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [ - "46fc568a0eeffc5373a5ad33b5f3be0bc753d028", + "a00f4f5357f218599a379206a7f920d358a2b0a0", "testharness" ], "html/browsers/origin/cross-origin-objects/frame-with-then.html": [ @@ -667211,7 +667414,7 @@ "support" ], "html/infrastructure/common-dom-interfaces/collections/domstringlist.html": [ - "33f2ed6feff68d2a6ca938bf8a235f68f885cc20", + "6e6e4312a031b66f5c17d33d54709a5991932707", "testharness" ], "html/infrastructure/common-dom-interfaces/collections/historical.html": [ @@ -672907,7 +673110,7 @@ "testharness" ], "html/semantics/forms/constraints/form-validation-validity-customError.html": [ - "16e64214761bbcccbf2022ad4ba187037bbffced", + "2ae6240aceed657e919ff40ae974eb7eb129f784", "testharness" ], "html/semantics/forms/constraints/form-validation-validity-patternMismatch.html": [ @@ -674474,10 +674677,6 @@ "4a3693bd2dafe710b82054bfadd8bcaa97b16db5", "testharness" ], - "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html": [ - "ab200020b4f05321d4ee7c17c4a8f11c6f5931db", - "testharness" - ], "html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html": [ "57cc45478e03ce1cdbb755281b2f434b38582563", "crashtest" @@ -679003,7 +679202,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html": [ - "888750721281df568bdc419088190b193ff37868", + "916527909173fd87429590e51a866a712cf97854", "testharness" ], "html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events-attached-in-event.html": [ @@ -681207,7 +681406,7 @@ "support" ], "interfaces/webrtc.idl": [ - "053afdcb13587543e7da6140e72101f3892a05a0", + "852ec06209ea13a0a618d32ff836624b92d65642", "support" ], "interfaces/webusb.idl": [ @@ -681855,11 +682054,11 @@ "testharness" ], "layout-instability/buffer-layout-shift.html": [ - "b6a33f579b4009d1497fdc104c07633793d53f01", + "50cabda8d20406f4a0c8b4ac412f6b391572bf42", "testharness" ], "layout-instability/buffered-flag.html": [ - "cd1260e3613f58c191688ab2f492647b0cc72c0c", + "1d200712c280346b12976c22d38e310ae9df639d", "testharness" ], "layout-instability/clip-negative-bottom-margin.html": [ @@ -681903,7 +682102,7 @@ "testharness" ], "layout-instability/recent-input.html": [ - "a4fa0d8b0d92a83984034926de30958b840c1028", + "52adbf723ea34ce2ae7d2fb3027be67dcd785d5e", "testharness" ], "layout-instability/resources/slow-image.py": [ @@ -681939,11 +682138,11 @@ "testharness" ], "layout-instability/supported-layout-type.html": [ - "8679a2de7388c5e43a8d784cb3a986d4e23ca568", + "cee4b808c87b585c49d463085e92e7d000ffba0c", "testharness" ], "layout-instability/toJSON.html": [ - "374a7de0cd1c4d5d5b089b7d026c8eb5709e91f1", + "00f074a4dd88aa17e7c4c7ef36e097738b932015", "testharness" ], "layout-instability/transform.html": [ @@ -683611,7 +683810,7 @@ "testharness" ], "media-source/SourceBuffer-abort-removed.html": [ - "c96412d06309f0976231539fe4c7b77332275535", + "4782412ccdf563638ab38b234c4f82aa08398fba", "testharness" ], "media-source/SourceBuffer-abort-updating.html": [ @@ -683871,7 +684070,7 @@ "testharness" ], "media-source/mediasource-sourcebuffer-mode-timestamps.html": [ - "c62e542162209fe18c19a2e3bcad140bdfbc21fb", + "e7e9b8ca5f62b8b6443b17be54bad6b2e27a2b48", "testharness" ], "media-source/mediasource-sourcebuffer-mode.html": [ @@ -683879,7 +684078,7 @@ "testharness" ], "media-source/mediasource-sourcebuffer-trackdefaults.html": [ - "905d1d0d0ee197aeab7a4823bdad72136674c1ce", + "7b45486d71edf61fd557c289a86e3bfff5ffebc0", "testharness" ], "media-source/mediasource-sourcebufferlist.html": [ @@ -684275,7 +684474,7 @@ "testharness" ], "mediacapture-image/ImageCapture-creation.https.html": [ - "e53915608f00df16cdbe65f6bcae304a8dd4d92a", + "9abffe25edde54acb1dc235b3b29ad6a5bc241a8", "testharness" ], "mediacapture-image/ImageCapture-grabFrame.html": [ @@ -684391,7 +684590,7 @@ "testharness" ], "mediacapture-record/MediaRecorder-events-and-exceptions.html": [ - "5dca350dd2754211ace05c5df7d9a5fd62aee428", + "d5abf3a05c3584df3a19735a24030141a1b13010", "testharness" ], "mediacapture-record/MediaRecorder-mimetype.html": [ @@ -695823,7 +696022,7 @@ "testharness" ], "pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html": [ - "c54e3a7ada636358e8633c6825bd388e638d1791", + "f51674cb4293a8f7d021a057abc9da16766cd625", "testharness" ], "pointerevents/pointerevent_releasepointercapture_onpointercancel_touch.html": [ @@ -695863,7 +696062,7 @@ "testharness" ], "pointerevents/pointerevent_setpointercapture_invalid_pointerid.html": [ - "ada67fa5b7b959015dc0756bb8c11207b4effb9d", + "7d9f948919f87a69659262bd8aee7778c79b2f23", "testharness" ], "pointerevents/pointerevent_setpointercapture_override_pending_capture_element-manual.html": [ @@ -718855,7 +719054,7 @@ "support" ], "resources/chromium/webxr-test.js": [ - "695b265db60067f5872099a7eda6ed579b3d73ca", + "34aeab08a749fcbd89a78c8899b7da2286004dcd", "support" ], "resources/chromium/webxr-test.js.headers": [ @@ -719427,7 +719626,7 @@ "testharness" ], "scroll-to-text-fragment/scroll-to-text-fragment-target.html": [ - "09d22ff6d1d6792b66865d62ccd8e07ec96a70b7", + "b06f3c889c19c65a5a0d7b419d6d31429838bf5a", "support" ], "scroll-to-text-fragment/scroll-to-text-fragment.html": [ @@ -719435,11 +719634,11 @@ "testharness" ], "scroll-to-text-fragment/stash.js": [ - "b3d9ea8e93fe9efe563d559eca8f1208a9ed8e41", + "f1b2ea8d3a5c4d736b19db2e0f13a67adc09570c", "support" ], "scroll-to-text-fragment/stash.py": [ - "49567390e1edf28d8ac3c2a7818fc997505f744b", + "31a29343d9e22c3f588b24a47f20824c163c0199", "support" ], "secure-contexts/META.yml": [ @@ -719683,7 +719882,7 @@ "testharness" ], "selection/removeRange.html": [ - "7618a4ac535b5b7fed48f2f533bc4489d0008813", + "8dcd6d2c074325a47fab80661b91e68cf40c4916", "testharness" ], "selection/script-and-style-elements.html": [ @@ -722603,7 +722802,7 @@ "support" ], "service-workers/service-worker/resources/service-worker-csp-worker.py": [ - "7b0c13feba9fbcd591cd52ad553418b06d933b93", + "62c945f82213ffb89d2d84eb93f8d30176738fac", "support" ], "service-workers/service-worker/resources/service-worker-header.py": [ @@ -724487,7 +724686,7 @@ "testharness" ], "streams/piping/pipe-through.any.js": [ - "e6959b6c12ae9b3416b70b51ba37481f26ec76f9", + "71d75b03504e5231178bc6a74c85b703b3df8f2d", "testharness" ], "streams/piping/then-interception.any.js": [ @@ -724503,11 +724702,11 @@ "testharness" ], "streams/readable-byte-streams/brand-checks.any.js": [ - "9bbe7111ea8ddf4afbea30d435400a19ff63c684", + "bed4ec411ec226a5e52c9c3a047b75a847ec1814", "testharness" ], "streams/readable-byte-streams/construct-byob-request.any.js": [ - "2e1c53fdea877946e2a097a81b4c949421883e9b", + "516025135b07d6bed4fda99b1a12828dd432bf17", "testharness" ], "streams/readable-byte-streams/constructor.any.js": [ @@ -724519,7 +724718,7 @@ "testharness" ], "streams/readable-byte-streams/general.any.js": [ - "1947ededb6652ef6c048ef34496d6b75f0afc7ac", + "e4951c0c819409ab5e508d5ff3b9b648baa58cdd", "testharness" ], "streams/readable-byte-streams/properties.any.js": [ @@ -724539,7 +724738,7 @@ "testharness" ], "streams/readable-streams/brand-checks.any.js": [ - "c82f513df01a86576442b31ca7fa93fcf0652b9a", + "564eea016bd7fb83cdc758391b6d76b0b5cc6320", "testharness" ], "streams/readable-streams/cancel.any.js": [ @@ -724555,7 +724754,7 @@ "testharness" ], "streams/readable-streams/default-reader.any.js": [ - "1e67b272b544edfb718acaff71dccc05fee752f1", + "bf807f76686b174333dc18d310b98684fefbec3b", "testharness" ], "streams/readable-streams/floating-point-total-queue-size.any.js": [ @@ -724603,7 +724802,7 @@ "support" ], "streams/resources/test-utils.js": [ - "614fcca18e96dee419800f34e54c941a0843f697", + "ff5c0151c1c8772aebc26d2f8c45c3bd11ed9346", "support" ], "streams/transform-streams/backpressure.any.js": [ @@ -724647,7 +724846,7 @@ "testharness" ], "streams/transform-streams/strategies.any.js": [ - "c7645e7e651c0b57cd65870fb6f9048aa4bd5a0c", + "c29c6cb59d85700363ac968731aa6b58aa6989ac", "testharness" ], "streams/transform-streams/terminate.any.js": [ @@ -724679,7 +724878,7 @@ "testharness" ], "streams/writable-streams/constructor.any.js": [ - "c792e1f1fafe35c34e10c1b4fdf8662ad6add073", + "ac0483e61f08cc0494819725f913b15cceaf0594", "testharness" ], "streams/writable-streams/count-queuing-strategy.any.js": [ @@ -724711,7 +724910,7 @@ "testharness" ], "streams/writable-streams/write.any.js": [ - "68da793985556635844b7711271a6ee0a9c7b1a5", + "f60434b9fc13e23eb1820c6143f1c5829cd2705b", "testharness" ], "subresource-integrity/META.yml": [ @@ -725203,7 +725402,7 @@ "testharness" ], "svg/animations/repeatn-remove-add-animation.html": [ - "1715cd9d4711878d101e5b68963d2359521b4bfe", + "8098a8853568a10370bf35f444c6de5d842f07fe", "testharness" ], "svg/animations/scripted/SVGAnimationElement-exceptions.html": [ @@ -729971,7 +730170,7 @@ "support" ], "tools/ci/ci_wptrunner_infrastructure.sh": [ - "8db08794ade26bef899f05c4890c2b88e68df292", + "992a1b58c24268baecdbbe03ee1e9f813fd460d9", "support" ], "tools/ci/commands.json": [ @@ -729999,15 +730198,15 @@ "support" ], "tools/ci/run_tc.py": [ - "f9086a31bd93baf72819fc450f90a290d65674fd", + "c460eecbbd72364d8c7f6d7683d62963d84d72dd", "support" ], "tools/ci/taskcluster-run.py": [ - "ac5abc12b1f17d2fc93c6ac5636bfd6fe7cafa04", + "d8e42ccea2112694c6d3b8b1aa6ca7034ea22282", "support" ], "tools/ci/tc/README.md": [ - "11f367f986f97fdbfe40f09b2ae4114f263916f7", + "785c82cca39cdfb186fda24103a5a6fd649bee5a", "support" ], "tools/ci/tc/__init__.py": [ @@ -730015,7 +730214,7 @@ "support" ], "tools/ci/tc/decision.py": [ - "4b23630012bd2cd4757d930dc4379396472ff486", + "f8f186f744d8082790a8c3bec8654fa15ca7f3e8", "support" ], "tools/ci/tc/download.py": [ @@ -730027,7 +730226,7 @@ "support" ], "tools/ci/tc/tasks/test.yml": [ - "7476337e09bfd31f6fb68ecf2e17b33b4ac70d8b", + "562239c31e3a5a0592160a3186279316e0b306dc", "support" ], "tools/ci/tc/testdata/epochs_daily_push_event.json": [ @@ -730055,7 +730254,7 @@ "support" ], "tools/ci/tc/tests/test_valid.py": [ - "a194d370181d1fc7d420d136da349af5001b10f8", + "4573541bf5864badfa39a155c5d62d71a18911e0", "support" ], "tools/ci/tests/test_jobs.py": [ @@ -734823,7 +735022,7 @@ "support" ], "tools/wpt/browser.py": [ - "bf1958fab9912044f4b26afc5a515b815463fb3f", + "c9a5353ab4f3ec48b86fe98ad9f90ee6692de036", "support" ], "tools/wpt/commands.json": [ @@ -734835,7 +735034,7 @@ "support" ], "tools/wpt/install.py": [ - "4a368f9a4d6e72a2f92135cd31c7b4a774882aca", + "6eb59f814bf08d139d597a4b4b26a7d7aa920fd6", "support" ], "tools/wpt/mach-emulator.manifest": [ @@ -736259,7 +736458,7 @@ "support" ], "trusted-types/trusted-types-createHTMLDocument.tentative.html": [ - "ac95d9e64de97d96c18fdfad9b7b99b737228c59", + "440d2a88b9367daa42c6aeb6e747f58a1487ea6f", "testharness" ], "trusted-types/trusted-types-duplicate-names-list-report-only.tentative.html": [ @@ -736271,11 +736470,11 @@ "support" ], "trusted-types/trusted-types-duplicate-names-list.tentative.html": [ - "9a895ffa2ad2b1cc56b6e1727c6e184ab26e1420", + "afb2f5f7c4b7f6ddfe8da004750017e6c7f01f9a", "testharness" ], "trusted-types/trusted-types-duplicate-names.tentative.html": [ - "e817cf145a260b1e355e5fc06288d8c959a42779", + "decce5356467f9f4e6a8886c6b6eff7194bf2385", "testharness" ], "trusted-types/trusted-types-eval-reporting-no-unsafe-eval.tentative.https.html": [ @@ -736295,7 +736494,7 @@ "support" ], "trusted-types/trusted-types-eval-reporting.tentative.https.html": [ - "90007168a13d1d141dc149c42aa92c645f64bf28", + "d98b457f6aaa7f8774d4de9539b0296f56fbb43b", "testharness" ], "trusted-types/trusted-types-eval-reporting.tentative.https.html.headers": [ @@ -741131,11 +741330,11 @@ "testharness" ], "wasm/jsapi/constructor/validate.any.js": [ - "a0eaa3fb87d62497379d1e7b2320a3fc43e9508f", + "a523acc7925c9ef7646d296a78bf9831eda86d71", "testharness" ], "wasm/jsapi/global/constructor.any.js": [ - "cb287da4e9afa1a4006bc6c091cda22081492960", + "270149ec1443045e4134eeb80403651a3d0a12ff", "testharness" ], "wasm/jsapi/global/toString.any.js": [ @@ -741163,7 +741362,7 @@ "testharness" ], "wasm/jsapi/instance/constructor.any.js": [ - "745c3f8495123b4b67fd1e9402304ceff49278a6", + "06c6d7a88c09235abd40a71a379f0d8005a33618", "testharness" ], "wasm/jsapi/instance/exports.any.js": [ @@ -741187,7 +741386,7 @@ "testharness" ], "wasm/jsapi/memory/constructor.any.js": [ - "8bd606e321283a3ab91fecc1511c915c82dcd26a", + "03eed5270831b504e6ab21bcc8ee36fdfd050304", "testharness" ], "wasm/jsapi/memory/grow.any.js": [ @@ -741199,19 +741398,19 @@ "testharness" ], "wasm/jsapi/module/constructor.any.js": [ - "1fffb6cd4f3b9013f5b65987dfeef8c0a46c6c8f", + "b6f03c73b5d0483fea1efe896525c5040d9525bf", "testharness" ], "wasm/jsapi/module/customSections.any.js": [ - "298d89604cf739ba6ef9929da9162bdf6beb4c80", + "8c215d17bd25834ad2983e88172371c4ee1f65c2", "testharness" ], "wasm/jsapi/module/exports.any.js": [ - "83f97dd67a1e419c10c399b26fc50e1d37de3405", + "1329c6a6021f2d5902f759e4da92d209974da70e", "testharness" ], "wasm/jsapi/module/imports.any.js": [ - "91e4be33aca6955d8b67cf0b51ddd7323ae62843", + "9a7d6115986ea066c5075d14f60d3cb0277a78a1", "testharness" ], "wasm/jsapi/module/toString.any.js": [ @@ -741219,15 +741418,15 @@ "testharness" ], "wasm/jsapi/table/assertions.js": [ - "c42a446a75d01f172dd0ef28a836553e79566156", + "b1aeaf1a65dab748c56c8cdf9c1393f97bfdf0e5", "support" ], "wasm/jsapi/table/constructor.any.js": [ - "a494a9e559b92136e3616d16f73b08a72a8b222b", + "5c9a6f13d91eba098ab59e893145222375e1b6cc", "testharness" ], "wasm/jsapi/table/get-set.any.js": [ - "175f30fbcadca6e9a3b698ec677779fc56175239", + "4e0a5f8c1048f4b771c38ff0aef9910ed37b25c2", "testharness" ], "wasm/jsapi/table/grow-reftypes.tentative.any.js": [ @@ -741555,7 +741754,7 @@ "testharness" ], "web-animations/interfaces/Animation/commitStyles.html": [ - "40cb2634e41a41bac6b9699f4c815c3f8e3b57dd", + "8d45cd65199c1a8f7b26ee1ead574e1ff0b26ac9", "testharness" ], "web-animations/interfaces/Animation/constructor.html": [ @@ -741582,8 +741781,12 @@ "2df3cfbd120eaead9aa31ad5eeef4ebf54ec23ec", "testharness" ], + "web-animations/interfaces/Animation/onremove.html": [ + "d7709949f2a0055bb8b563237de8c3ba0a9c78c5", + "testharness" + ], "web-animations/interfaces/Animation/pause.html": [ - "74d0724ef427f6b1752012e876d338d8b8ec4d60", + "1d1bd5fd89aedd6055cd2a3ab0c2c59fcb353a7e", "testharness" ], "web-animations/interfaces/Animation/pending.html": [ @@ -741595,7 +741798,7 @@ "testharness" ], "web-animations/interfaces/Animation/play.html": [ - "d29b67b7992860d072c73bcbbeaa269d8aea10dc", + "6c5d604b1e4c88bfffe03238e059dc2b97c6947d", "testharness" ], "web-animations/interfaces/Animation/ready.html": [ @@ -744995,7 +745198,7 @@ "testharness" ], "webmessaging/with-ports/027.html": [ - "78ea225eb75577aadac1a33fb547629caac16463", + "715835125811b13c69a7b820686401a9d0ac899b", "testharness" ], "webmessaging/without-ports/001.html": [ @@ -745259,7 +745462,7 @@ "support" ], "webrtc/RTCDTMFSender-insertDTMF.https.html": [ - "be6e3c6e59d039a0f2bbf065db9897fb971f5b15", + "ac27c5139ccb12715d51cbd8f5ecdd83c40c23d1", "testharness" ], "webrtc/RTCDTMFSender-ontonechange-long.https.html": [ @@ -746739,7 +746942,7 @@ "testharness" ], "websockets/stream-tentative/close.any.js": [ - "1442d821148119a07889f3087edd02d78cbe3b8e", + "31febe9d9fdec989dc4b58b40d0e17fbb1073271", "testharness" ], "websockets/stream-tentative/constructor.any.js": [ @@ -750463,7 +750666,11 @@ "testharness" ], "webxr/hit-test/ar_hittest_subscription_refSpaces.https.html": [ - "3cbbd6ca3db5055f8f6f52c2bc73ca2540f505f8", + "1f812d3a1f0a01c3c43de356d614e4d0fe254171", + "testharness" + ], + "webxr/hit-test/ar_hittest_subscription_states.https.html": [ + "98947da263703e29588c5ac432137d9eca69d046", "testharness" ], "webxr/hit-test/xrRay_constructor.https.html": [ @@ -750503,7 +750710,7 @@ "support" ], "webxr/resources/webxr_test_constants.js": [ - "553a8127fcf80fd3999add61439fca4a58c5d065", + "d5ee1e7391c6e76de28b88fb88a1566f347313ee", "support" ], "webxr/resources/webxr_test_constants_fake_world.js": [ @@ -750779,7 +750986,7 @@ "testharness" ], "workers/SharedWorker-constructor.html": [ - "5347891d41855aaa5d1398d0b0fe53cc9c2fda3d", + "6298dd934e11d86d8147a4a84bbd03ad30676e6c", "testharness" ], "workers/SharedWorker-detach-frame-in-error-event.html": [ @@ -750835,7 +751042,7 @@ "testharness" ], "workers/Worker-formdata.any.js": [ - "f14d4ff41a2419e464d6887513b89cc982cfd0f3", + "389d34b1c314c0ea2858f77085d334c73ca5333a", "testharness" ], "workers/Worker-location.sub.any.js": [ @@ -750847,7 +751054,7 @@ "testharness" ], "workers/Worker-multi-port.html": [ - "725745b0ea4498ec3eec8811b51f692c555f21df", + "587176e9fc101e950b8f941d96f1f170356ea51e", "testharness" ], "workers/Worker-nested-importScripts-error.html": [ @@ -751371,7 +751578,7 @@ "testharness" ], "workers/constructors/Worker/Worker-constructor.html": [ - "524a0982a9e532c1e5be01a526ed61bd6a0e58de", + "6d6843b77b69be522e8759f89b0b1bf06d1ac6c0", "testharness" ], "workers/constructors/Worker/ctor-1.html": [ @@ -752098,6 +752305,10 @@ "f56c1a5525f8c46e5d06f6549b3f355c4ccb4a0a", "testharness" ], + "workers/modules/shared-worker-import-data-url.any.js": [ + "81df965b9e1276746c001350658c5ea80334b736", + "testharness" + ], "workers/modules/shared-worker-import-failure.html": [ "718ea650ec7d5f5a2beb192a901f186b29187dc6", "testharness" diff --git a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini index 4a1e8110f6f..f8e7e539aae 100644 --- a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini +++ b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini @@ -2,3 +2,6 @@ [Hit test intersecting scaled box] expected: FAIL + [Hit test within unscaled box] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transforms/transofrmed-preserve-3d-1.html.ini b/tests/wpt/metadata/css/css-transforms/transofrmed-preserve-3d-1.html.ini deleted file mode 100644 index 9062312d6e9..00000000000 --- a/tests/wpt/metadata/css/css-transforms/transofrmed-preserve-3d-1.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[transofrmed-preserve-3d-1.html] - type: reftest - disabled: https://github.com/servo/servo/issues/9087 diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index 44c57c7e76c..bfabd206a43 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -312,18 +312,24 @@ [fetch(): separate response Content-Type: text/plain ] expected: NOTRUN - [<iframe>: separate response Content-Type: text/html;" text/plain] + [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] + [<iframe>: combined response Content-Type: text/html;x=" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*] + [<iframe>: combined response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + [<iframe>: combined response Content-Type: */* text/html] expected: FAIL - [<iframe>: combined response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html */*;charset=gbk] + expected: FAIL + + [<iframe>: separate response Content-Type: text/html */*] + expected: FAIL + + [<iframe>: separate response Content-Type: text/html;" \\" text/plain] expected: FAIL 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 773361a5934..536384f36e1 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,12 +11,6 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%20%22nosniFF%22] - expected: FAIL - - [X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff] - expected: FAIL - - [Content-Type-Options%3A%20nosniff] + [X-Content-Type-Options%3A%20%2Cnosniff] expected: FAIL diff --git a/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini b/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini index 6bd06899fdd..80ebd73cb00 100644 --- a/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini +++ b/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini @@ -8,7 +8,7 @@ expected: FAIL [Embedded credentials are treated as network errors in new windows.] - expected: FAIL + expected: TIMEOUT [Embedded credentials matching the top-level are treated as network errors for cross-origin URLs.] expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini index dc2e45516de..75d75b4cda2 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_5.html] +[traverse_the_history_2.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini index fd369192a02..c757b400205 100644 --- a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini +++ b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini @@ -1,5 +1,5 @@ [embedded-opener-remove-frame.html] - expected: TIMEOUT + expected: CRASH [opener and "removed" embedded documents] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index f6a7aca3306..5f60c78e73c 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,5 +1,6 @@ [iframe_sandbox_popups_escaping-3.html] type: testharness + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini index 9df1ac56f2a..3f7e3e9544f 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini @@ -1,6 +1,5 @@ [iframe_sandbox_popups_nonescaping-1.html] type: testharness - expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini index 25ad3f2bd44..24a00550af7 100644 --- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini @@ -24,3 +24,6 @@ [[textarea\] The validity.customError must be true if the custom validity error message is not empty] expected: FAIL + [[select\] The validity.customError must be false if the custom validity error message is empty] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini index df89cd21511..941d0dee0c8 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini @@ -1,5 +1,5 @@ [form-double-submit-3.html] expected: ERROR [<button> should have the same double-submit protection as <input type=submit>] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini deleted file mode 100644 index bab4ff15d5b..00000000000 --- a/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[anchor-with-inline-element.html] - expected: TIMEOUT - [Clicking on anchor with embedded inline element should navigate instead of opening details] - expected: NOTRUN - - [Expected <a> containing <i> to navigate] - expected: NOTRUN - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini new file mode 100644 index 00000000000..8472b06a926 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini @@ -0,0 +1,2 @@ +[errorhandling.html] + expected: CRASH diff --git a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini index 6d08beab111..97f8a0cc51f 100644 --- a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini +++ b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini @@ -10,3 +10,6 @@ [Verifies the resolution of entry.startTime is at least 20 microseconds.] expected: TIMEOUT + [Verifies the resolution of performance.now() is at least 5 microseconds.] + expected: FAIL + diff --git a/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini b/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini index b4090ef9fe2..1c7ec9ce1db 100644 --- a/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini +++ b/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini @@ -1,5 +1,4 @@ [crossorigin-sandwich-TAO.sub.html] - expected: ERROR [There should be one entry.] expected: FAIL diff --git a/tests/wpt/metadata/webxr/hit-test/ar_hittest_subscription_states.https.html.ini b/tests/wpt/metadata/webxr/hit-test/ar_hittest_subscription_states.https.html.ini new file mode 100644 index 00000000000..4ef02537e6e --- /dev/null +++ b/tests/wpt/metadata/webxr/hit-test/ar_hittest_subscription_states.https.html.ini @@ -0,0 +1,10 @@ +[ar_hittest_subscription_states.https.html] + [Hit test subscription succeeds if the feature was requested] + expected: FAIL + + [Hit test subscription fails if the feature was not requested] + expected: FAIL + + [Hit test subscription fails if the feature was requested but the session already ended] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html index 6e836db9b96..3ec02fcbf48 100644 --- a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html +++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html @@ -47,7 +47,7 @@ promise_test(async (t) => { const bitmap = await createImageBitmap(image); assert_throws_dom('DataCloneError', - () => worker.postMessage(bitmap, [bitmap])); + () => worker.postMessage(bitmap, [bitmap])); }, 'Transferring a non-origin-clean ImageBitmap throws.'); </script> diff --git a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html index e5426bb979d..04edd2a303b 100644 --- a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html +++ b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html @@ -37,7 +37,7 @@ function readBlobAsPromise(blob) { {} ].forEach(value => test(t => { assert_throws_js(TypeError, () => new Blob([], {endings: value}), - 'Blob constructor should throw'); + 'Blob constructor should throw'); }, `Invalid "endings" value: ${JSON.stringify(value)}`)); test(t => { diff --git a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html index d2b1777b86b..62a649aed66 100644 --- a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html +++ b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html @@ -465,7 +465,7 @@ test(function() { ].forEach(arg => { test(t => { assert_throws_js(TypeError, () => new Blob([], arg), - 'Blob constructor should throw with invalid property bag'); + 'Blob constructor should throw with invalid property bag'); }, `Passing ${JSON.stringify(arg)} for options should throw`); }); diff --git a/tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html b/tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html index f76d3329521..1282b6c5ac2 100644 --- a/tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html +++ b/tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html @@ -37,7 +37,7 @@ function readBlobAsPromise(blob) { {} ].forEach(value => test(t => { assert_throws_js(TypeError, () => new File([], "name", {endings: value}), - 'File constructor should throw'); + 'File constructor should throw'); }, `Invalid "endings" value: ${JSON.stringify(value)}`)); test(t => { diff --git a/tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html b/tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html index 60dbb233f01..63fda5e8d17 100644 --- a/tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html +++ b/tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html @@ -15,9 +15,9 @@ test(function() { test(t => { assert_throws_js(TypeError, () => new File(), - 'Bits argument is required'); + 'Bits argument is required'); assert_throws_js(TypeError, () => new File([]), - 'Name argument is required'); + 'Name argument is required'); }, 'Required arguments'); function test_first_argument(arg1, expectedSize, testName) { @@ -65,13 +65,13 @@ test_first_argument({[Symbol.iterator]() { ].forEach(arg => { test(t => { assert_throws_js(TypeError, () => new File(arg, 'world.html'), - 'Constructor should throw for invalid bits argument'); + 'Constructor should throw for invalid bits argument'); }, `Invalid bits argument: ${JSON.stringify(arg)}`); }); test(t => { assert_throws_js(Error, () => new File([to_string_throws], 'name.txt'), - 'Constructor should propagate exceptions'); + 'Constructor should propagate exceptions'); }, 'Bits argument: object that throws'); @@ -132,7 +132,7 @@ test(function() { ].forEach(arg => { test(t => { assert_throws_js(TypeError, () => new File(['bits'], 'name.txt', arg), - 'Constructor should throw for invalid property bag type'); + 'Constructor should throw for invalid property bag type'); }, `Invalid property bag: ${JSON.stringify(arg)}`); }); @@ -151,8 +151,8 @@ test(function() { test(t => { assert_throws_js(Error, - () => new File(['bits'], 'name.txt', {type: to_string_throws}), - 'Constructor should propagate exceptions'); + () => new File(['bits'], 'name.txt', {type: to_string_throws}), + 'Constructor should propagate exceptions'); }, 'Property bag propagates exceptions'); </script> diff --git a/tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html b/tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html index 8b99e1ae16c..c885620e292 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html +++ b/tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html @@ -64,7 +64,7 @@ indexeddb_test( const store = tx.objectStore('store'); const obj = new ProbeObject(); assert_throws_dom('DataError', () => { store.put(obj); }, - 'put() should throw if primary key cannot be injected'); + 'put() should throw if primary key cannot be injected'); assert_equals( obj.invalid_id_count, 1, 'put() operation should access primary key property once'); diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html index 893c179e24f..a0294e9b7a1 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html @@ -24,8 +24,8 @@ indexeddb_test( setTimeout(t.step_func(() => { assert_throws_js(TypeError, () => { cursor.advance(0); }, - '"zero" check (TypeError) should precede ' + - '"not active" check (TransactionInactiveError)'); + '"zero" check (TypeError) should precede ' + + '"not active" check (TransactionInactiveError)'); t.done(); }), 0); }); @@ -49,8 +49,8 @@ indexeddb_test( setTimeout(t.step_func(() => { assert_throws_dom('TransactionInactiveError', () => { cursor.advance(1); }, - '"not active" check (TransactionInactiveError) ' + - 'should precede "deleted" check (InvalidStateError)'); + '"not active" check (TransactionInactiveError) ' + + 'should precede "deleted" check (InvalidStateError)'); t.done(); }), 0); }); @@ -78,8 +78,8 @@ indexeddb_test( setTimeout(t.step_func(() => { assert_throws_dom('TransactionInactiveError', () => { cursor.advance(1); }, - '"not active" check (TransactionInactiveError) ' + - 'should precede "got value" check (InvalidStateError)'); + '"not active" check (TransactionInactiveError) ' + + 'should precede "got value" check (InvalidStateError)'); t.done(); }), 0); }); diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm index 02c7fde0c49..67e03187c0f 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm @@ -39,10 +39,10 @@ indexeddb_test( // Second try assert_throws_dom('InvalidStateError', - function() { cursor.advance(1); }, 'second advance'); + function() { cursor.advance(1); }, 'second advance'); assert_throws_dom('InvalidStateError', - function() { cursor.advance(3); }, 'third advance'); + function() { cursor.advance(3); }, 'third advance'); count++; }); @@ -60,19 +60,19 @@ indexeddb_test( var cursor = e.target.result; assert_throws_js(TypeError, - function() { cursor.advance(document); }); + function() { cursor.advance(document); }); assert_throws_js(TypeError, - function() { cursor.advance({}); }); + function() { cursor.advance({}); }); assert_throws_js(TypeError, - function() { cursor.advance([]); }); + function() { cursor.advance([]); }); assert_throws_js(TypeError, - function() { cursor.advance(""); }); + function() { cursor.advance(""); }); assert_throws_js(TypeError, - function() { cursor.advance("1 2"); }); + function() { cursor.advance("1 2"); }); t.done(); }); @@ -91,14 +91,14 @@ indexeddb_test( var cursor = e.target.result; assert_throws_js(TypeError, - function() { cursor.advance(null); }); + function() { cursor.advance(null); }); assert_throws_js(TypeError, - function() { cursor.advance(undefined); }); + function() { cursor.advance(undefined); }); var myvar = null; assert_throws_js(TypeError, - function() { cursor.advance(myvar); }); + function() { cursor.advance(myvar); }); t.done(); }); @@ -117,7 +117,7 @@ indexeddb_test( var cursor = e.target.result; assert_throws_js(TypeError, - function() { cursor.advance(); }); + function() { cursor.advance(); }); t.done(); }); @@ -135,26 +135,26 @@ indexeddb_test( var cursor = e.target.result; assert_throws_js(TypeError, - function() { cursor.advance(-1); }); + function() { cursor.advance(-1); }); assert_throws_js(TypeError, - function() { cursor.advance(NaN); }); + function() { cursor.advance(NaN); }); assert_throws_js(TypeError, - function() { cursor.advance(0); }); + function() { cursor.advance(0); }); assert_throws_js(TypeError, - function() { cursor.advance(-0); }); + function() { cursor.advance(-0); }); assert_throws_js(TypeError, - function() { cursor.advance(Infinity); }); + function() { cursor.advance(Infinity); }); assert_throws_js(TypeError, - function() { cursor.advance(-Infinity); }); + function() { cursor.advance(-Infinity); }); var myvar = -999999; assert_throws_js(TypeError, - function() { cursor.advance(myvar); }); + function() { cursor.advance(myvar); }); t.done(); }); @@ -179,7 +179,7 @@ indexeddb_test( } assert_throws_js(TypeError, - function() { cursor.advance(0); }); + function() { cursor.advance(0); }); cursor.advance(1); count++; diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html b/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html index 19825355004..ab0c18b04ff 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html @@ -18,7 +18,7 @@ indexeddb_test( const index = store.index('index'); [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => { assert_throws_js(TypeError, () => { index.getAll(null, count); }, - `getAll with count ${count} count should throw TypeError`); + `getAll with count ${count} count should throw TypeError`); }); t.done(); }, diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html b/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html index 40cad527bb0..fc65311a564 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html @@ -18,7 +18,7 @@ indexeddb_test( const index = store.index('index'); [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => { assert_throws_js(TypeError, () => { index.getAllKeys(null, count); }, - `getAllKeys with count ${count} count should throw TypeError`); + `getAllKeys with count ${count} count should throw TypeError`); }); t.done(); }, diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html index 80c653b3864..0c4eb89905d 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html @@ -16,7 +16,7 @@ indexeddb_test( const store = tx.objectStore('store'); [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => { assert_throws_js(TypeError, () => { store.getAll(null, count); }, - `getAll with count ${count} count should throw TypeError`); + `getAll with count ${count} count should throw TypeError`); }); t.done(); }, diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html index 3653d1d5a1f..23fe5966912 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html @@ -16,7 +16,7 @@ indexeddb_test( const store = tx.objectStore('store'); [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => { assert_throws_js(TypeError, () => { store.getAllKeys(null, count); }, - `getAllKeys with count ${count} count should throw TypeError`); + `getAllKeys with count ${count} count should throw TypeError`); }); t.done(); }, diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html index cc8dceaf42e..67b0945cc98 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html @@ -17,7 +17,7 @@ indexeddb_test( const store = tx.objectStore('store'); tx.abort(); assert_throws_dom('InvalidStateError', () => store.index('index'), - 'index() should throw if transaction is finished'); + 'index() should throw if transaction is finished'); t.done(); }, 'IDBObjectStore index() behavior when transaction is finished' diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html b/tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html index 651a844d29d..c140c59e2de 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html @@ -18,7 +18,7 @@ async_test(t => { assert_equals(request.readyState, 'pending'); assert_throws_dom('InvalidStateError', () => request.error, - 'IDBRequest.error should throw if request is pending'); + 'IDBRequest.error should throw if request is pending'); t.done(); }); }, 'IDBRequest.error throws if ready state is pending'); diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html b/tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html index f77aba7dfe4..e7516d52e8f 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html @@ -18,7 +18,7 @@ async_test(t => { assert_equals(request.readyState, 'pending'); assert_throws_dom('InvalidStateError', () => request.result, - 'IDBRequest.result should throw if request is pending'); + 'IDBRequest.result should throw if request is pending'); t.done(); }); }, 'IDBRequest.result throws if ready state is pending'); diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html index 4b7659ff0bf..bc0357a1311 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html @@ -15,8 +15,8 @@ indexeddb_test( const tx = db.transaction('s'); tx.oncomplete = t.step_func(() => { assert_throws_dom('InvalidStateError', () => { tx.objectStore('nope'); }, - '"finished" check (InvalidStateError) should precede ' + - '"name in scope" check (NotFoundError)'); + '"finished" check (InvalidStateError) should precede ' + + '"name in scope" check (NotFoundError)'); t.done(); }); }, diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html index e1a8500b17a..78d2777e63c 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html +++ b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html @@ -15,7 +15,7 @@ indexeddb_test( const tx = db.transaction('store'); tx.abort(); assert_throws_dom('InvalidStateError', () => tx.objectStore('store'), - 'objectStore() should throw if transaction is finished'); + 'objectStore() should throw if transaction is finished'); t.done(); }, 'IDBTransaction objectStore() behavior when transaction is finished' diff --git a/tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js b/tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js index c5733d64cc9..67d5943624c 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js +++ b/tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js @@ -4,19 +4,19 @@ importScripts("{{location[server]}}/content-security-policy/support/testharness- test(t => { self.a = false; assert_throws_dom("NetworkError", - _ => importScripts("http://{{domains[www]}}:{{ports[http][1]}}/content-security-policy/support/var-a.js"), - "importScripts should throw `NetworkError`"); + _ => importScripts("http://{{domains[www]}}:{{ports[http][1]}}/content-security-policy/support/var-a.js"), + "importScripts should throw `NetworkError`"); assert_false(self.a); }, "Cross-origin `importScripts()` blocked in " + self.location.protocol + self.location.search); test(t => { assert_throws_js(EvalError, - _ => eval("1 + 1"), - "`eval()` should throw 'EvalError'."); + _ => eval("1 + 1"), + "`eval()` should throw 'EvalError'."); assert_throws_js(EvalError, - _ => new Function("1 + 1"), - "`new Function()` should throw 'EvalError'."); + _ => new Function("1 + 1"), + "`new Function()` should throw 'EvalError'."); }, "`eval()` blocked in " + self.location.protocol + self.location.search); async_test(t => { diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html index 1424cdcd7ff..1a090d8e2c4 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html +++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html @@ -5,7 +5,7 @@ // basic tests. test(function() { assert_throws_js(TypeError, - function() { new SecurityPolicyViolationEvent(); }); + function() { new SecurityPolicyViolationEvent(); }); }, "SecurityPolicyViolationEvent constructor should throw with no parameters"); test(function() { diff --git a/tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html b/tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html index 3818108ac60..e9e8cce8ffa 100644 --- a/tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html +++ b/tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html @@ -35,19 +35,19 @@ test(function() { assert_throws_dom("HIERARCHY_REQUEST_ERR", - function() { - grouping_rule.insertRule("@import url(foo.css);", 0); - }, - "inserting a disallowed rule should throw HIERARCHY_REQUEST_ERR"); + function() { + grouping_rule.insertRule("@import url(foo.css);", 0); + }, + "inserting a disallowed rule should throw HIERARCHY_REQUEST_ERR"); }, "insert_import_throws"); test(function() { assert_throws_dom("INDEX_SIZE_ERR", - function() { - grouping_rule.insertRule("p { color: green }", 1); - }, - "inserting at a bad index throws INDEX_SIZE_ERR"); + function() { + grouping_rule.insertRule("p { color: green }", 1); + }, + "inserting at a bad index throws INDEX_SIZE_ERR"); }, "insert_index_throws1"); test(function() { @@ -61,10 +61,10 @@ assert_equals(grouping_rule.cssRules.length, 3, "Modified cssRules.length of @media rule"); assert_throws_dom("INDEX_SIZE_ERR", - function() { - grouping_rule.insertRule("p { color: green }", 4); - }, - "inserting at a bad index throws INDEX_SIZE_ERR"); + function() { + grouping_rule.insertRule("p { color: green }", 4); + }, + "inserting at a bad index throws INDEX_SIZE_ERR"); assert_equals(grouping_rule.cssRules.length, 3, "Modified cssRules.length of @media rule"); }, @@ -97,10 +97,10 @@ grouping_rule.deleteRule(0); } assert_throws_dom("SYNTAX_ERR", - function() { - grouping_rule.insertRule("@media bad syntax;", 0); - }, - "inserting syntactically invalid rule throws syntax error"); + function() { + grouping_rule.insertRule("@media bad syntax;", 0); + }, + "inserting syntactically invalid rule throws syntax error"); assert_equals(grouping_rule.cssRules.length, 0, "Modified cssRules.length of @media rule"); }, @@ -110,10 +110,10 @@ grouping_rule.deleteRule(0); } assert_throws_dom("SYNTAX_ERR", - function() { - grouping_rule.insertRule("", 0); - }, - "inserting empty rule throws syntax error"); + function() { + grouping_rule.insertRule("", 0); + }, + "inserting empty rule throws syntax error"); assert_equals(grouping_rule.cssRules.length, 0, "Modified cssRules.length of @media rule"); }, @@ -123,10 +123,10 @@ grouping_rule.deleteRule(0); } assert_throws_dom("SYNTAX_ERR", - function() { - grouping_rule.insertRule("@media print {} foo", 0); - }, - "inserting rule with garbage afterwards throws syntax error"); + function() { + grouping_rule.insertRule("@media print {} foo", 0); + }, + "inserting rule with garbage afterwards throws syntax error"); assert_equals(grouping_rule.cssRules.length, 0, "Modified cssRules.length of @media rule"); }, @@ -136,10 +136,10 @@ grouping_rule.deleteRule(0); } assert_throws_dom("SYNTAX_ERR", - function() { - grouping_rule.insertRule("p { color: yellow } foo", 0); - }, - "inserting rule with garbage afterwards throws syntax error"); + function() { + grouping_rule.insertRule("p { color: yellow } foo", 0); + }, + "inserting rule with garbage afterwards throws syntax error"); assert_equals(grouping_rule.cssRules.length, 0, "Modified cssRules.length of @media rule"); }, @@ -149,10 +149,10 @@ grouping_rule.deleteRule(0); } assert_throws_dom("SYNTAX_ERR", - function() { - grouping_rule.insertRule("@media print {} @media print {}", 0); - }, - "inserting multiple rules throws syntax error"); + function() { + grouping_rule.insertRule("@media print {} @media print {}", 0); + }, + "inserting multiple rules throws syntax error"); assert_equals(grouping_rule.cssRules.length, 0, "Modified cssRules.length of @media rule"); }, @@ -162,10 +162,10 @@ grouping_rule.deleteRule(0); } assert_throws_dom("SYNTAX_ERR", - function() { - grouping_rule.insertRule("p { color: yellow } @media print {}", 0); - }, - "inserting multiple rules throws syntax error"); + function() { + grouping_rule.insertRule("p { color: yellow } @media print {}", 0); + }, + "inserting multiple rules throws syntax error"); assert_equals(grouping_rule.cssRules.length, 0, "Modified cssRules.length of @media rule"); }, @@ -175,10 +175,10 @@ grouping_rule.deleteRule(0); } assert_throws_dom("SYNTAX_ERR", - function() { - grouping_rule.insertRule("@media print {} p { color: yellow }", 0); - }, - "inserting multiple rules throws syntax error"); + function() { + grouping_rule.insertRule("@media print {} p { color: yellow }", 0); + }, + "inserting multiple rules throws syntax error"); assert_equals(grouping_rule.cssRules.length, 0, "Modified cssRules.length of @media rule"); }, @@ -188,10 +188,10 @@ grouping_rule.deleteRule(0); } assert_throws_dom("SYNTAX_ERR", - function() { - grouping_rule.insertRule("p { color: yellow } p { color: yellow }", 0); - }, - "inserting multiple rules throws syntax error"); + function() { + grouping_rule.insertRule("p { color: yellow } p { color: yellow }", 0); + }, + "inserting multiple rules throws syntax error"); assert_equals(grouping_rule.cssRules.length, 0, "Modified cssRules.length of @media rule"); }, diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html index cecab3e2136..0901ddea416 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html @@ -27,30 +27,6 @@ height: 400px; } -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - .fourthRowFirstColumn { background-color: deepskyblue; grid-column: 1; diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html index 40ee22190b9..1b495c47d2d 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html @@ -27,30 +27,6 @@ height: 400px; } -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - .fourthRowFirstColumn { background-color: deepskyblue; grid-column: 1; diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html index 488fc05aad4..444e46b9ca5 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html @@ -22,30 +22,6 @@ grid-auto-rows: auto; } -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - -.fourthRowFirstColumn { - background-color: deepskyblue; - grid-column: 1; - grid-row: 4; -} - -.fourthRowSecondColumn { - background-color: maroon; - grid-column: 2; - grid-row: 4; -} - -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} - .fourthRowFirstColumn { background-color: deepskyblue; grid-column: 1; diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html index f0d94198aff..3ae182782a3 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html @@ -29,11 +29,7 @@ width: 50px; height: 40px; } -.thirdRowFirstColumn { - background-color: green; - grid-column: 1; - grid-row: 3; -} + </style> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html new file mode 100644 index 00000000000..32c2efb3957 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout test:item alignment with orthogonal flows, vertical-lr writing mode</title> +<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#alignment-values"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#orthogonal-flows"> +<meta name="assert" content="This test checks that grid item alignment works as expected with vertical-lr and horizontal-tb orthogonal flows"> +<meta name="flags" content="ahem"> +<link rel="stylesheet" href="/css/support/grid.css"> +<link rel="stylesheet" href="/css/support/alignment.css"> +<link rel="stylesheet" href="/css/support/width-keyword-classes.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + +<style> +.container { + position: relative; +} +.grid { + grid-template-columns: 100px 100px; + grid-template-rows: 150px 150px 150px; + font-size: 10px; +} +.item { + width: 50px; + height: 20px; +} +</style> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<p>This test checks that grid items alignment works as expected with VERTICAL-LR vs HORIZONTAL-TB orthogonal flows.</p> + +<p>Direction: LTR vs LTR</p> +<div class="container"> + <div class="grid fit-content verticalLR directionLTR"> + <div class="item firstRowFirstColumn horizontalTB selfEnd" data-offset-x="100" data-offset-y="80">end</div> + <div class="item firstRowSecondColumn horizontalTB selfCenter" data-offset-x="50" data-offset-y="140">center</div> + <div class="item secondRowFirstColumn horizontalTB selfStart" data-offset-x="150" data-offset-y="0">start</div> + <div class="item secondRowSecondColumn horizontalTB selfSelfEnd" data-offset-x="250" data-offset-y="180">s-end</div> + <div class="item thirdRowFirstColumn horizontalTB selfSelfStart" data-offset-x="300" data-offset-y="0">s-start</div> + <div class="item thirdRowSecondColumn horizontalTB" data-offset-x="300" data-offset-y="100">default</div> + </div> +</div> + +<p>Direction: RTL vs LTR</p> +<div class="container"> + <div class="grid fit-content verticalLR directionRTL"> + <div class="item firstRowFirstColumn directionLTR horizontalTB selfEnd" data-offset-x="100" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn directionLTR horizontalTB selfCenter" data-offset-x="50" data-offset-y="40">center</div> + <div class="item secondRowFirstColumn directionLTR horizontalTB selfStart" data-offset-x="150" data-offset-y="180">start</div> + <div class="item secondRowSecondColumn directionLTR horizontalTB selfSelfEnd" data-offset-x="250" data-offset-y="80">s-end</div> + <div class="item thirdRowFirstColumn directionLTR horizontalTB selfSelfStart" data-offset-x="300" data-offset-y="100">s-start</div> + <div class="item thirdRowSecondColumn directionLTR horizontalTB" data-offset-x="300" data-offset-y="80">default</div> + </div> +</div> + +<p>Direction: LTR vs RTL</p> +<div class="container"> + <div class="grid fit-content verticalLR directionLTR"> + <div class="item firstRowFirstColumn directionRTL horizontalTB selfEnd" data-offset-x="100" data-offset-y="80">end</div> + <div class="item firstRowSecondColumn directionRTL horizontalTB selfCenter" data-offset-x="50" data-offset-y="140">center</div> + <div class="item secondRowFirstColumn directionRTL horizontalTB selfStart" data-offset-x="150" data-offset-y="0">start</div> + <div class="item secondRowSecondColumn directionRTL horizontalTB selfSelfEnd" data-offset-x="150" data-offset-y="180">s-end</div> + <div class="item thirdRowFirstColumn directionRTL horizontalTB selfSelfStart" data-offset-x="400" data-offset-y="0">s-start</div> + <div class="item thirdRowSecondColumn directionRTL horizontalTB" data-offset-x="300" data-offset-y="100">default</div> + </div> +</div> + +<p>Direction: RTL vs RTL</p> +<div class="container"> + <div class="grid fit-content verticalLR directionRTL"> + <div class="item firstRowFirstColumn horizontalTB selfEnd" data-offset-x="100" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn horizontalTB selfCenter" data-offset-x="50" data-offset-y="40">center</div> + <div class="item secondRowFirstColumn horizontalTB selfStart" data-offset-x="150" data-offset-y="180">start</div> + <div class="item secondRowSecondColumn horizontalTB selfSelfEnd" data-offset-x="150" data-offset-y="80">s-end</div> + <div class="item thirdRowFirstColumn horizontalTB selfSelfStart" data-offset-x="400" data-offset-y="100">s-start</div> + <div class="item thirdRowSecondColumn horizontalTB" data-offset-x="300" data-offset-y="80">default</div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html new file mode 100644 index 00000000000..845c6cea27e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout test:item alignment with orthogonal flows, vertical-rl writing mode</title> +<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#alignment-values"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#orthogonal-flows"> +<meta name="assert" content="This test checks that grid item alignment works as expected with vertical-rl and horizontal-tb orthogonal flows"> +<meta name="flags" content="ahem"> +<link rel="stylesheet" href="/css/support/grid.css"> +<link rel="stylesheet" href="/css/support/alignment.css"> +<link rel="stylesheet" href="/css/support/width-keyword-classes.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + +<style> +.container { + position: relative; +} +.grid { + grid-template-columns: 100px 100px; + grid-template-rows: 150px 150px 150px; + font-size: 10px; +} +.item { + width: 50px; + height: 20px; +} +</style> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<p>This test checks that grid items alignment works as expected with VERTICAL-RL vs HORIZONTAL-TB orthogonal flows.</p> + +<p>Direction: LTR vs LTR</p> +<div class="container"> + <div class="grid fit-content verticalRL directionLTR"> + <div class="item firstRowFirstColumn horizontalTB selfEnd" data-offset-x="300" data-offset-y="80">end</div> + <div class="item firstRowSecondColumn horizontalTB selfCenter" data-offset-x="350" data-offset-y="140">center</div> + <div class="item secondRowFirstColumn horizontalTB selfStart" data-offset-x="250" data-offset-y="0">start</div> + <div class="item secondRowSecondColumn horizontalTB selfSelfEnd" data-offset-x="250" data-offset-y="180">s-end</div> + <div class="item thirdRowFirstColumn horizontalTB selfSelfStart" data-offset-x="0" data-offset-y="0">s-start</div> + <div class="item thirdRowSecondColumn horizontalTB" data-offset-x="100" data-offset-y="100">default</div> + </div> +</div> + +<p>Direction: RTL vs LTR</p> +<div class="container"> + <div class="grid fit-content verticalRL directionRTL"> + <div class="item firstRowFirstColumn directionLTR horizontalTB selfEnd" data-offset-x="300" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn directionLTR horizontalTB selfCenter" data-offset-x="350" data-offset-y="40">center</div> + <div class="item secondRowFirstColumn directionLTR horizontalTB selfStart" data-offset-x="250" data-offset-y="180">start</div> + <div class="item secondRowSecondColumn directionLTR horizontalTB selfSelfEnd" data-offset-x="250" data-offset-y="80">s-end</div> + <div class="item thirdRowFirstColumn directionLTR horizontalTB selfSelfStart" data-offset-x="0" data-offset-y="100">s-start</div> + <div class="item thirdRowSecondColumn directionLTR horizontalTB" data-offset-x="100" data-offset-y="80">default</div> + </div> +</div> + +<p>Direction: LTR vs RTL</p> +<div class="container"> + <div class="grid fit-content verticalRL directionLTR"> + <div class="item firstRowFirstColumn directionRTL horizontalTB selfEnd" data-offset-x="300" data-offset-y="80">end</div> + <div class="item firstRowSecondColumn directionRTL horizontalTB selfCenter" data-offset-x="350" data-offset-y="140">center</div> + <div class="item secondRowFirstColumn directionRTL horizontalTB selfStart" data-offset-x="250" data-offset-y="0">start</div> + <div class="item secondRowSecondColumn directionRTL horizontalTB selfSelfEnd" data-offset-x="150" data-offset-y="180">s-end</div> + <div class="item thirdRowFirstColumn directionRTL horizontalTB selfSelfStart" data-offset-x="100" data-offset-y="0">s-start</div> + <div class="item thirdRowSecondColumn directionRTL horizontalTB" data-offset-x="100" data-offset-y="100">default</div> + + </div> +</div> + +<p>Direction: RTL vs RTL</p> +<div class="container"> + <div class="grid fit-content verticalRL directionRTL"> + <div class="item firstRowFirstColumn horizontalTB selfEnd" data-offset-x="300" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn horizontalTB selfCenter" data-offset-x="350" data-offset-y="40">center</div> + <div class="item secondRowFirstColumn horizontalTB selfStart" data-offset-x="250" data-offset-y="180">start</div> + <div class="item secondRowSecondColumn horizontalTB selfSelfEnd" data-offset-x="150" data-offset-y="80">s-end</div> + <div class="item thirdRowFirstColumn horizontalTB selfSelfStart" data-offset-x="100" data-offset-y="100">s-start</div> + <div class="item thirdRowSecondColumn horizontalTB" data-offset-x="100" data-offset-y="80">default</div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html new file mode 100644 index 00000000000..c506547a760 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html @@ -0,0 +1,125 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout test: item alignment with orthogonal flows</title> +<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-align-3/#alignment-values"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#orthogonal-flows"> +<meta name="assert" content="This test checks that grid item alignment works as expected with horizontal-tb and vertical-rl/vertical-lr orthogonal flows"> +<meta name="flags" content="ahem"> +<link rel="stylesheet" href="/css/support/grid.css"> +<link rel="stylesheet" href="/css/support/alignment.css"> +<link rel="stylesheet" href="/css/support/width-keyword-classes.css"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + +<style> +.container { + position: relative; +} +.grid { + grid-template-columns: 100px 100px; + grid-template-rows: 150px 150px 150px; + font-size: 10px; +} +.item { + width: 20px; + height: 50px; +} +</style> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<p>This test checks that grid items alignment works as expected with HORIZONTAL-TB vs VERTICAL-RL orthogonal flows.</p> + +<p>Orthogonal flows: HORIZONTAL-TB vs VERTICAL-RL</p> +<p>Direction: LTR vs LTR</p> +<div class="container"> + <div class="grid fit-content directionLTR"> + <div class="item firstRowFirstColumn verticalRL selfEnd" data-offset-x="80" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn verticalRL selfCenter" data-offset-x="140" data-offset-y="50">center</div> + <div class="item secondRowFirstColumn verticalRL selfStart" data-offset-x="0" data-offset-y="150">start</div> + <div class="item secondRowSecondColumn verticalRL selfSelfEnd" data-offset-x="100" data-offset-y="250">s-end</div> + <div class="item thirdRowFirstColumn verticalRL selfSelfStart" data-offset-x="80" data-offset-y="300">s-start</div> + <div class="item thirdRowSecondColumn verticalRL" data-offset-x= "100" data-offset-y="300">default</div> + </div> +</div> + +<p>Direction: RTL vs LTR</p> +<div class="container"> + <div class="grid fit-content directionRTL"> + <div class="item firstRowFirstColumn directionLTR verticalRL selfEnd" data-offset-x="100" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn directionLTR verticalRL selfCenter" data-offset-x="40" data-offset-y="50">center</div> + <div class="item secondRowFirstColumn directionLTR verticalRL selfStart" data-offset-x="180" data-offset-y="150">start</div> + <div class="item secondRowSecondColumn directionLTR verticalRL selfSelfEnd" data-offset-x="0" data-offset-y="250">s-end</div> + <div class="item thirdRowFirstColumn directionLTR verticalRL selfSelfStart" data-offset-x="180" data-offset-y="300">s-start</div> + <div class="item thirdRowSecondColumn directionLTR verticalRL" data-offset-x="80" data-offset-y="300">default</div> + + </div> +</div> + +<p>Direction: LTR vs RTL</p> +<div class="container"> + <div class="grid fit-content directionLTR"> + <div class="item firstRowFirstColumn directionRTL verticalRL selfEnd" data-offset-x="80" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn directionRTL verticalRL selfCenter" data-offset-x="140" data-offset-y="50">center</div> + <div class="item secondRowFirstColumn directionRTL verticalRL selfStart" data-offset-x="0" data-offset-y="150">start</div> + <div class="item secondRowSecondColumn directionRTL verticalRL selfSelfEnd" data-offset-x="100" data-offset-y="150">s-end</div> + <div class="item thirdRowFirstColumn directionRTL verticalRL selfSelfStart" data-offset-x="80" data-offset-y="400">s-start</div> + <div class="item thirdRowSecondColumn directionRTL verticalRL" data-offset-x="100" data-offset-y="300">default</div> + </div> +</div> + +<p>Direction: RTL vs RTL</p> +<div class="container"> + <div class="grid fit-content directionRTL"> + <div class="item firstRowFirstColumn verticalRL selfEnd" data-offset-x="100" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn verticalRL selfCenter" data-offset-x="40" data-offset-y="50">center</div> + <div class="item secondRowFirstColumn verticalRL selfStart" data-offset-x="180" data-offset-y="150">start</div> + <div class="item secondRowSecondColumn verticalRL selfSelfEnd" data-offset-x="0" data-offset-y="150">s-end</div> + <div class="item thirdRowFirstColumn verticalRL selfSelfStart" data-offset-x="180" data-offset-y="400">s-start</div> + <div class="item thirdRowSecondColumn verticalRL" data-offset-x="80" data-offset-y="300">default</div> + </div> +</div> + +<!-- HORIZONTAL-TB vs VERTICAL-LR --> +<p>Orthogonal flows: HORIZONTAL-TB vs VERTICAL-LR</p> +<p>Direction: LTR vs LTR</p> +<div class="container"> + <div class="grid fit-content drectionLTR"> + <div class="item firstRowFirstColumn verticalLR selfEnd" data-offset-x="80" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn verticalLR selfCenter" data-offset-x="140" data-offset-y="50">center</div> + <div class="item secondRowFirstColumn verticalLR selfStart" data-offset-x="0" data-offset-y="150">start</div> + <div class="item secondRowSecondColumn verticalLR selfSelfEnd" data-offset-x="180" data-offset-y="250">s-end</div> + <div class="item thirdRowFirstColumn verticalLR selfSelfStart" data-offset-x="0" data-offset-y="300">s-start</div> + <div class="item thirdRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="300">default</div> + </div> +</div> + +<p>Direction: RTL vs LTR</p> +<div class="container"> + <div class="grid fit-content directionRTL"> + <div class="item firstRowFirstColumn directionLTR verticalLR selfEnd" data-offset-x="100" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn directionLTR verticalLR selfCenter" data-offset-x="40" data-offset-y="50">center</div> + <div class="item secondRowFirstColumn directionLTR verticalLR selfStart" data-offset-x="180" data-offset-y="150">start</div> + <div class="item secondRowSecondColumn directionLTR verticalLR selfSelfEnd" data-offset-x="80" data-offset-y="250">s-end</div> + <div class="item thirdRowFirstColumn directionLTR verticalLR selfSelfStart" data-offset-x="100" data-offset-y="300">s-start</div> + <div class="item thirdRowSecondColumn directionLTR verticalLR" data-offset-x="80" data-offset-y="300">default</div> + </div> +</div> + +<p>Direction: RTL vs RTL</p> +<div class="container"> + <div class="grid fit-content directionRTL"> + <div class="item firstRowFirstColumn verticalLR selfEnd" data-offset-x="100" data-offset-y="100">end</div> + <div class="item firstRowSecondColumn verticalLR selfCenter" data-offset-x="40" data-offset-y="50">center</div> + <div class="item secondRowFirstColumn verticalLR selfStart" data-offset-x="180" data-offset-y="150">start</div> + <div class="item secondRowSecondColumn verticalLR selfSelfEnd" data-offset-x="80" data-offset-y="150">s-end</div> + <div class="item thirdRowFirstColumn verticalLR selfSelfStart" data-offset-x="100" data-offset-y="400">s-start</div> + <div class="item thirdRowSecondColumn verticalLR" data-offset-x="80" data-offset-y="300">default</div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-001.html new file mode 100644 index 00000000000..458ed020e37 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-001.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>Grid items only stretch if block-size computes to auto</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4525"> +<link rel="help" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="help" href="https://mozilla.org" title="Mozilla"> +<link rel="match" href="grid-item-non-auto-height-stretch-ref.html"> +<style> +#grid { + display: grid; + width: 100px; + height: 100px; + grid-template: 100% / 100%; + background: green; +} +#item { + height: max-content; + background: red; +} +</style> +<div id="grid"> + <div id="item"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-002.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-002.html new file mode 100644 index 00000000000..9b2757f4d84 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-002.html @@ -0,0 +1,23 @@ +<!doctype html> +<title>Grid items only stretch if block-size computes to auto</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4525"> +<link rel="help" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="help" href="https://mozilla.org" title="Mozilla"> +<link rel="match" href="grid-item-non-auto-height-stretch-ref.html"> +<style> +#grid { + writing-mode: vertical-lr; + display: grid; + width: 100px; + height: 100px; + grid-template: 100% / 100%; + background: green; +} +#item { + width: max-content; + background: red; +} +</style> +<div id="grid"> + <div id="item"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-003.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-003.html new file mode 100644 index 00000000000..acd382b4f9f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-003.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>Grid items only stretch if block-size computes to auto</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4525"> +<link rel="help" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="help" href="https://mozilla.org" title="Mozilla"> +<link rel="match" href="grid-item-non-auto-height-stretch-ref.html"> +<style> +#grid { + display: grid; + width: 100px; + height: 100px; + grid-template: 100% / 100%; + background: green; +} +#item { + height: min-content; + background: red; +} +</style> +<div id="grid"> + <div id="item"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-004.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-004.html new file mode 100644 index 00000000000..b68cf7546d7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-004.html @@ -0,0 +1,23 @@ +<!doctype html> +<title>Grid items only stretch if block-size computes to auto</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4525"> +<link rel="help" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="help" href="https://mozilla.org" title="Mozilla"> +<link rel="match" href="grid-item-non-auto-height-stretch-ref.html"> +<style> +#grid { + writing-mode: vertical-lr; + display: grid; + width: 100px; + height: 100px; + grid-template: 100% / 100%; + background: green; +} +#item { + width: min-content; + background: red; +} +</style> +<div id="grid"> + <div id="item"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-ref.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-ref.html new file mode 100644 index 00000000000..1249dbaa8c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-ref.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>CSS test reference</title> +<style> +#ref { + width: 100px; + height: 100px; + background: green; +} +</style> +<div id="ref"></div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html index 69e071c758b..1354260d50b 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html @@ -61,7 +61,7 @@ x { <div class="grid"> <i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> <div class="subgrid"> - <x style="grid-column:3; right:33px">x</x> + <x style="grid-column:3; right:27px">x</x> </div> </div> @@ -117,7 +117,7 @@ x { <div class="grid"> <i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i> <div class="subgrid hr"> - <x style="grid-column:auto/1; left:-33px">x</x> + <x style="grid-column:auto/1; left:-27px">x</x> </div> </div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html new file mode 100644 index 00000000000..30f4bf7a969 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html @@ -0,0 +1,233 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid margin/border/padding that overflow the edge track</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> +<style> +html,body { + color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0; +} + +.grid { + display: inline-grid; + grid: auto / 7px 30px 10px 20px 5px; + justify-content: space-around; + align-content: start; + border: 3px solid; + width: 80px; +} +.rtl { direction: rtl; } + +.subgrid { + display: grid; + min-width: 0; + min-height: 30px; + background: pink; + border:1px solid; + margin: 0 4px 0 3px; + position: relative; + justify-content: space-between; +} +.c1 { width: 30px; grid-column: 2 / span 1; grid: auto / 26px; } +.rtl > .c1 { grid: auto / 25px; } +.c1.plr { padding-right: 100px; } +.rtl > .c1.plr { padding: 0 0 0 100px; } + +.c2 { width: 33px; grid-column: 2 / span 2; grid: auto / 26px 5px; } +.rtl > .c2 { grid: auto / 25px 6px; } +.c2.plr { padding-right: 97px; } +.rtl > .c2.plr { padding: 0 0 0 97px; } + +.c3 { width: 55px; grid-column: 2 / span 3; grid: auto / 26px 10px 15px; } +.rtl > .c3 { grid: auto / 25px 10px 16px; } +.c3.plr { padding-right: 75px; } +.rtl > .c3.plr { padding: 0 0 0 75px; } + +y { + background: blue; + height: 10px; +} +y:nth-of-type(1) { grid-column: 2; } +y:nth-of-type(2) { grid-column: 4; } + +x { background: silver; } +x:nth-of-type(2) { background: purple; } +x:nth-of-type(3) { background: magenta; } + +a { + position: absolute; + grid-column-start: 1; + inset: 0; + top: 3px; + border-top: 2px solid grey; +} +a:nth-of-type(2) { + grid-column-start: 2; + top: 6px; +} +a:nth-of-type(3) { + grid-column-start: 3; + top: 9px; +} + +b { + position: absolute; + grid-column-end: 1; + inset: 0; + top: 12px; + border-top: 2px solid grey; +} +b:nth-of-type(2) { + grid-column-end: 2; + top: 15px; +} +b:nth-of-type(3) { + grid-column-end: 3; + top: 18px; +} + +.f { float:left; margin-left:80px; } +.z { height:0; } +.s2 { grid-column:2; } +.gl { left: -2px; } +.e2 { grid-column-end:2; } +.gr { right: -2px; } +</style> +</head> +<body> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 pl"><x class="z"></x><a class="s2 gl"></a><b class="e2"></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 plr"><x class="z"></x><a class="s2 gl"></a><b class="e2"></b><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 pr"><x class="z"></x><a class="s2 gr"></a><b class="e2"></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 plr"><x class="z"></x><a class="s2 gr"></a><b class="e2"></b><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div> +</div> + +</div> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 pr"><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 pl"><x class="z"></x><a class="s2 gl"></a><b class="e2"></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 plr"><a class="s2 gl"></a><b class="e2"></b><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 pr"><x class="z"></x><a class="s2 gr"></a><b class="e2"></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 pl"><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 plr"><a class="s2 gr"></a><b class="e2"></b><a></a><b></b></div> +</div> + +</div> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 pr"><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 pl"><a class="s2"></a><b class="e2"></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 plr"><a class="s2"></a><b class="e2"></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 pr"><a class="s2"></a><b class="e2"></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 pl"><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 plr"><a class="s2"></a><b class="e2"></b></div> +</div> + +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html new file mode 100644 index 00000000000..a9aec76a9f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html @@ -0,0 +1,222 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid margin/border/padding that overflow the edge track</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="subgrid-mbp-overflow-001-ref.html"> +<style> +html,body { + color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0; +} + +.grid { + display: inline-grid; + grid: auto / 7px 30px 10px 20px 5px; + justify-content: space-around; + align-content: start; + border: 3px solid; + width: 80px; +} +.rtl { direction: rtl; } + +.subgrid { + display: grid; + grid: auto / subgrid; + min-width: 0; + min-height: 30px; + background: pink; + border:1px solid; + margin: 0 4px 0 3px; + position: relative; +} +.c1 { grid-column: 2 / span 1; } +.c2 { grid-column: 2 / span 2; } +.c3 { grid-column: 2 / span 3; } +.pr { padding-right: 30px; } +.pl { padding-left: 30px; } +.plr { padding: 0 50px 0 80px; } + +y { + background: blue; + height: 10px; +} +y:nth-of-type(1) { grid-column: 2; } +y:nth-of-type(2) { grid-column: 4; } + +x { background: silver; } +x:nth-of-type(2) { background: purple; } +x:nth-of-type(3) { background: magenta; } + +a { + position: absolute; + grid-column-start: 1; + inset: 0; + top: 3px; + border-top: 2px solid grey; +} +a:nth-of-type(2) { + grid-column-start: 2; + top: 6px; +} +a:nth-of-type(3) { + grid-column-start: 3; + top: 9px; +} + +b { + position: absolute; + grid-column-end: 1; + inset: 0; + top: 12px; + border-top: 2px solid grey; +} +b:nth-of-type(2) { + grid-column-end: 2; + top: 15px; +} +b:nth-of-type(3) { + grid-column-end: 3; + top: 18px; +} + +.f { float:left; margin-left:80px; } +</style> +</head> +<body> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 plr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 plr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +</div> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 pr"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 pl"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 plr"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 pr"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 pl"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 plr"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +</div> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 pr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 pl"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 plr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 pr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 pl"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 plr"><x></x><a></a><b></b></div> +</div> + +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-002.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-002.html new file mode 100644 index 00000000000..1bd1fa67bfc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-002.html @@ -0,0 +1,224 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: orthogonal writing-mode subgrid margin/border/padding that overflow the edge track</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="subgrid-mbp-overflow-001-ref.html"> +<style> +html,body { + color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0; +} + +.grid { + display: inline-grid; + grid: auto / 7px 30px 10px 20px 5px; + justify-content: space-around; + align-content: start; + border: 3px solid; + width: 80px; +} +.rtl { direction: rtl; } + +.subgrid { + display: grid; + grid: subgrid / auto; + min-width: 0; + min-height: 30px; + background: pink; + border:1px solid; + margin: 0 4px 0 3px; + position: relative; + writing-mode: vertical-lr; +} +.rtl > .subgrid { writing-mode: vertical-rl; } +.c1 { grid-column: 2 / span 1; } +.c2 { grid-column: 2 / span 2; } +.c3 { grid-column: 2 / span 3; } +.pr { padding-right: 30px; } +.pl { padding-left: 30px; } +.plr { padding: 0 50px 0 80px; } + +y { + background: blue; + height: 10px; +} +y:nth-of-type(1) { grid-column: 2; } +y:nth-of-type(2) { grid-column: 4; } + +x { background: silver; } +x:nth-of-type(2) { background: purple; } +x:nth-of-type(3) { background: magenta; } + +a { + position: absolute; + grid-row-start: 1; + inset: 0; + top: 3px; + border-top: 2px solid grey; +} +a:nth-of-type(2) { + grid-row-start: 2; + top: 6px; +} +a:nth-of-type(3) { + grid-row-start: 3; + top: 9px; +} + +b { + position: absolute; + grid-row-end: 1; + inset: 0; + top: 12px; + border-top: 2px solid grey; +} +b:nth-of-type(2) { + grid-row-end: 2; + top: 15px; +} +b:nth-of-type(3) { + grid-row-end: 3; + top: 18px; +} + +.f { float:left; margin-left:80px; } +</style> +</head> +<body> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c3 plr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c3 plr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +</div> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 pr"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 pl"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c2 plr"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 pr"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 pl"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c2 plr"><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +</div> + +<div class=f> +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 pr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 pl"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid"> + <y></y><y></y> + <div class="subgrid c1 plr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 pr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 pl"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid c1 plr"><x></x><a></a><b></b></div> +</div> + +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html new file mode 100644 index 00000000000..d771427f6e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html @@ -0,0 +1,173 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>Reference: subgrid margin/border/padding that overflow the edge track</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> +<style> +html,body { + color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0; +} + +.grid { + display: inline-grid; + grid: auto / 7px 30px 10px 20px 5px; + justify-content: space-around; + align-content: start; + border: 3px solid; + width: 80px; +} +.rtl { direction: rtl; } +.ltr { direction: ltr; } + +.subgrid { + display: grid; + justify-content: space-between; + justify-self: self-start; + min-width: 0; + min-height: 30px; + background: pink; + border:1px solid; + margin: 0 4px 0 3px; + position: relative; +} +.c1 { grid-column: 4 / span 1; } +.c3 { grid-column: 2 / span 3; } + +y { + background: blue; + height: 10px; +} +y:nth-of-type(1) { grid-column: 2; } +y:nth-of-type(2) { grid-column: 4; } + +x { background: silver; border-inline-start: 2px solid lime; } +x:nth-of-type(2) { background: purple; } +x:nth-of-type(3) { background: magenta; } + +a { + position: absolute; + grid-column-start: 1; + inset: 0; + top: 3px; + border-top: 2px solid grey; +} +a:nth-of-type(2) { + grid-column-start: 2; + top: 6px; +} +a:nth-of-type(3) { + grid-column-start: 3; + top: 9px; +} + +b { + position: absolute; + grid-column-end: 1; + inset: 0; + top: 12px; + border-top: 2px solid grey; +} +b:nth-of-type(2) { + grid-column-end: 2; + top: 15px; +} +b:nth-of-type(3) { + grid-column-end: 3; + top: 18px; +} + +.f { float:left; margin-left:10px; } + +.c1 { width: 30px; } +.ltr.c1.pl > x, .rtl.c1.pr > x { + padding-inline-start: 15px; + border-inline: none; + border-inline-end: 2px solid lime; + background: pink; +} +.ltr.c1.pl > x { padding-inline-start: 16px; } +.rtl.c1.pr > a { width: 15px; margin-inline-start: 15px; } +.ltr.c1.pl > a { width: 14px; margin-inline-start: 16px;} +.rtl.c1.pr > b { width: 15px; } +.ltr.c1.pl > b { width: 16px; } + +.c3 { width: 55px; grid: auto / 15px 10px 26px; } +.rtl.c3.pl { padding-inline-end: 4px; } +.ltr.c3.pr { padding-inline-end: 5px; } +.ltr.c3 { grid: auto / 16px 10px 25px; } +.rtl.c3.pr > a:nth-of-type(1) { width: 40px; right: 15px; } +.ltr.c3.pl > a:nth-of-type(1) { width: 39px; left: 16px; } +.rtl.c3.pr > b:nth-of-type(1), +.rtl.c3.pr > b:nth-of-type(2){ width: 15px; } +.ltr.c3.pl > b:nth-of-type(1), +.ltr.c3.pl > b:nth-of-type(2){ width: 16px; } + +x.zero { background: pink; } +</style> +</head> +<body> + +<div class=f> +<div class="grid ltr"> + <y></y><y></y> + <div class="subgrid rtl c3 pr"><x class="zero" style="margin-right:15px"></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid ltr"> + <y></y><y></y> + <div class="subgrid rtl c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x class="zero"></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid ltr c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x class="zero"></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid ltr c3 pl"><x class="zero" style="margin-left:16px"></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +</div> + +<div class=f> +<div class="grid ltr"> + <y></y><y></y> + <div class="subgrid rtl c1 pr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid ltr"> + <y></y><y></y> + <div class="subgrid rtl c1 pl"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid ltr c1 pr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid ltr c1 pl"><x></x><a></a><b></b></div> +</div> + +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003.html new file mode 100644 index 00000000000..45afcb56cbd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003.html @@ -0,0 +1,151 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: subgrid margin/border/padding that overflow the edge track</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="subgrid-mbp-overflow-003-ref.html"> +<style> +html,body { + color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0; +} + +.grid { + display: inline-grid; + grid: auto / 7px 30px 10px 20px 5px; + justify-content: space-around; + align-content: start; + border: 3px solid; + width: 80px; +} +.rtl { direction: rtl; } +.ltr { direction: ltr; } + +.subgrid { + display: grid; + grid: auto / subgrid; + justify-self: self-start; + min-width: 0; + min-height: 30px; + background: pink; + border:1px solid; + margin: 0 4px 0 3px; + position: relative; +} +.c1 { grid-column: 4 / span 1; } +.c3 { grid-column: 2 / span 3; } +.pr { padding-right: 30px; } +.pl { padding-left: 30px; } + +y { + background: blue; + height: 10px; +} +y:nth-of-type(1) { grid-column: 2; } +y:nth-of-type(2) { grid-column: 4; } + +x { background: silver; border-inline-start: 2px solid lime; } +x:nth-of-type(2) { background: purple; } +x:nth-of-type(3) { background: magenta; } + +a { + position: absolute; + grid-column-start: 1; + inset: 0; + top: 3px; + border-top: 2px solid grey; +} +a:nth-of-type(2) { + grid-column-start: 2; + top: 6px; +} +a:nth-of-type(3) { + grid-column-start: 3; + top: 9px; +} + +b { + position: absolute; + grid-column-end: 1; + inset: 0; + top: 12px; + border-top: 2px solid grey; +} +b:nth-of-type(2) { + grid-column-end: 2; + top: 15px; +} +b:nth-of-type(3) { + grid-column-end: 3; + top: 18px; +} + +.f { float:left; margin-left:10px; } +</style> +</head> +<body> + +<div class=f> +<div class="grid ltr"> + <y></y><y></y> + <div class="subgrid rtl c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid ltr"> + <y></y><y></y> + <div class="subgrid rtl c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid ltr c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid ltr c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div> +</div> + +</div> + +<div class=f> +<div class="grid ltr"> + <y></y><y></y> + <div class="subgrid rtl c1 pr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid ltr"> + <y></y><y></y> + <div class="subgrid rtl c1 pl"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid ltr c1 pr"><x></x><a></a><b></b></div> +</div> + +<br> + +<div class="grid rtl"> + <y></y><y></y> + <div class="subgrid ltr c1 pl"><x></x><a></a><b></b></div> +</div> + +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-preserve-3d-1-ref.html index 06f7257c50a..06f7257c50a 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-preserve-3d-1-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateX-3-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateX-3-ref.html index aeb72f5df25..aeb72f5df25 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateX-3-ref.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateX-3-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateY-1-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateY-1-ref.html index 9c3419e6f43..9c3419e6f43 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateY-1-ref.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateY-1-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-preserve-3d-1.html b/tests/wpt/web-platform-tests/css/css-transforms/transformed-preserve-3d-1.html index b7e1f905bb8..14ab46e29a1 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-preserve-3d-1.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/transformed-preserve-3d-1.html @@ -4,7 +4,7 @@ <title>CSS Transforms API Test: transform preserve-3d</title> <link rel="author" title="loveky" href="mailto:ylzcylx@gmail.com"> <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property"> - <link rel="match" href="reference/transofrmed-preserve-3d-1-ref.html"> + <link rel="match" href="reference/transformed-preserve-3d-1-ref.html"> <meta name="assert" content="The transformed div should establishe a 3D rendering context"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateX-3.html b/tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateX-3.html index 58ab80e807a..2517eac8e40 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateX-3.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateX-3.html @@ -4,7 +4,7 @@ <title>CSS Transforms API Test: transform rotateX</title> <link rel="author" title="loveky" href="mailto:ylzcylx@gmail.com"> <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property"> - <link rel="match" href="reference/transofrmed-rotateX-3-ref.html"> + <link rel="match" href="reference/transformed-rotateX-3-ref.html"> <meta name="assert" content="The transformed div should rotateX by 180 degrees"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateY-1.html b/tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateY-1.html index 86581bc447b..e1e9b2969d8 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateY-1.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateY-1.html @@ -4,7 +4,7 @@ <title>CSS Transforms API Test: transform rotateY</title> <link rel="author" title="loveky" href="mailto:ylzcylx@gmail.com"> <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property"> - <link rel="match" href="reference/transofrmed-rotateY-1-ref.html"> + <link rel="match" href="reference/transformed-rotateY-1-ref.html"> <meta name="assert" content="The transformed div should rotate 90 degrees"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html index 1795bcf2ba4..3f8b7a72bdc 100644 --- a/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html +++ b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html @@ -139,6 +139,6 @@ test(function() { test(function() { var div = document.getElementById('test'); assert_throws_js(TypeError, () => getComputedStyle(div, "totallynotapseudo"), - "getComputedStyle with an unknown pseudo-element throws"); + "getComputedStyle with an unknown pseudo-element throws"); }, "Unknown pseudo-elements throw"); </script> diff --git a/tests/wpt/web-platform-tests/css/support/grid.css b/tests/wpt/web-platform-tests/css/support/grid.css index 5cfb15e7ef0..4007ebba436 100644 --- a/tests/wpt/web-platform-tests/css/support/grid.css +++ b/tests/wpt/web-platform-tests/css/support/grid.css @@ -86,6 +86,12 @@ grid-row: 2; } +.thirdRowFirstColumn { + background-color: green; + grid-column: 1; + grid-row: 3; +} + .thirdRowSecondColumn { background-color: red; grid-column: 2; diff --git a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html index 9331869f8fe..43ea55a67e0 100644 --- a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html +++ b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html @@ -15,13 +15,13 @@ test(() => { assert_true(element.attachInternals() instanceof ElementInternals, 'New - 1st call'); assert_throws_dom('NotSupportedError', () => { element.attachInternals(); }, - 'New - 2nd call'); + 'New - 2nd call'); element = document.createElement('my-element1'); assert_true(element.attachInternals() instanceof ElementInternals, 'createElement - 1st call'); assert_throws_dom('NotSupportedError', () => { element.attachInternals(); }, - 'createElement - 2nd call'); + 'createElement - 2nd call'); container.innerHTML = '<my-element1></my-element1>'; assert_true(container.firstChild.attachInternals() instanceof ElementInternals, diff --git a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html index 8e33137d4ff..b52c8414709 100644 --- a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html +++ b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html @@ -179,8 +179,8 @@ test(function() { // reset the counter. getCount = 0; assert_throws_js(TypeError, - function () { new countingProxy() }, - "Should not be able to construct an HTMLElement named 'button'"); + function () { new countingProxy() }, + "Should not be able to construct an HTMLElement named 'button'"); assert_equals(getCount, 0, "Should never have gotten .prototype"); }, 'HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly'); @@ -201,8 +201,8 @@ test(function() { // reset the counter. getCount = 0; assert_throws_js(TypeError, - function () { Reflect.construct(HTMLElement, [], countingProxy) }, - "Should not be able to construct an HTMLElement named 'button'"); + function () { Reflect.construct(HTMLElement, [], countingProxy) }, + "Should not be able to construct an HTMLElement named 'button'"); assert_equals(getCount, 0, "Should never have gotten .prototype"); }, 'HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect'); @@ -220,8 +220,8 @@ test(function() { // Purposefully don't register it. assert_throws_js(TypeError, - function () { new countingProxy() }, - "Should not be able to construct an HTMLElement named 'button'"); + function () { new countingProxy() }, + "Should not be able to construct an HTMLElement named 'button'"); assert_equals(getCount, 0, "Should never have gotten .prototype"); }, 'HTMLElement constructor must not get .prototype until it finishes its registration sanity checks, calling proxy constructor directly'); @@ -239,8 +239,8 @@ test(function() { // Purposefully don't register it. assert_throws_js(TypeError, - function () { Reflect.construct(HTMLElement, [], countingProxy) }, - "Should not be able to construct an HTMLElement named 'button'"); + function () { Reflect.construct(HTMLElement, [], countingProxy) }, + "Should not be able to construct an HTMLElement named 'button'"); assert_equals(getCount, 0, "Should never have gotten .prototype"); }, 'HTMLElement constructor must not get .prototype until it finishes its registration sanity checks, calling via Reflect'); </script> diff --git a/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html b/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html index b95d7ade0bb..d2eb022d854 100644 --- a/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html +++ b/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html @@ -204,8 +204,8 @@ test_with_window(w => { // reset the counter. getCount = 0; assert_throws_js(TypeError, - function () { new countingProxy() }, - "Should not be able to construct an HTMLParagraphElement not named 'p'"); + function () { new countingProxy() }, + "Should not be able to construct an HTMLParagraphElement not named 'p'"); assert_equals(getCount, 0, "Should never have gotten .prototype"); }, 'HTMLParagraphElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly'); @@ -225,8 +225,8 @@ test_with_window(w => { // reset the counter. getCount = 0; assert_throws_js(TypeError, - function () { Reflect.construct(HTMLParagraphElement, [], countingProxy) }, - "Should not be able to construct an HTMLParagraphElement not named 'p'"); + function () { Reflect.construct(HTMLParagraphElement, [], countingProxy) }, + "Should not be able to construct an HTMLParagraphElement not named 'p'"); assert_equals(getCount, 0, "Should never have gotten .prototype"); }, 'HTMLParagraphElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect'); </script> diff --git a/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html b/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html new file mode 100644 index 00000000000..c2611a5dcf2 --- /dev/null +++ b/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<html> + <head> + <title>Test advertised required document policy</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> </head> + <body> + <h1>Test advertised required document policy</h1> +<script> +// The top-level document has a document policy, as well as a required document +// policy (for subframes) which is stricter. This test should load (the required +// policy should not block this page,) but the requirements should be applied to +// nested content. + +callbacks = {}; + +window.addEventListener('message', ev => { + var id = ev.data.id; + if (id && callbacks[id]) { + callbacks[id](ev.data.requiredPolicy || null); + } +}); + +async_test(t => { + var iframe = document.createElement('iframe'); + iframe.src = "/document-policy/echo-policy.py?id=1"; + callbacks["1"] = t.step_func_done(result => { + assert_equals(result, "unoptimized-lossless-images;bpp=1.0"); + }); + document.body.appendChild(iframe); +}, "Child frame with no explicit policy should have the same required policy as its parent."); + +async_test(t => { + var iframe = document.createElement('iframe'); + iframe.src = "/document-policy/echo-policy.py?id=2"; + iframe.policy = "unoptimized-lossless-images;bpp=4"; + callbacks["2"] = t.step_func_done(result => { + assert_equals(result, "unoptimized-lossless-images;bpp=1.0"); + }); + document.body.appendChild(iframe); +}, "Child frame with a less strict required policy should have the stricter value from the parent's policy applied."); + +async_test(t => { + var iframe = document.createElement('iframe'); + iframe.src = "/document-policy/echo-policy.py?id=3"; + iframe.policy = "unoptimized-lossless-images;bpp=0.9"; + callbacks["3"] = t.step_func_done(result => { + assert_equals(result, "unoptimized-lossless-images;bpp=0.9"); + }); + document.body.appendChild(iframe); +}, "Child frame may have a stricter policy than the parent."); + +async_test(t => { + var iframe = document.createElement('iframe'); + iframe.src = "/document-policy/echo-policy.py?id=4"; + iframe.policy = "no-font-display-late-swap"; + callbacks["4"] = t.step_func_done(result => { + assert_equals(result, "no-font-display-late-swap, unoptimized-lossless-images;bpp=1.0"); + }); + document.body.appendChild(iframe); +}, "Any unrelated policy directives should combine with the parent's required policy."); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html.headers b/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html.headers new file mode 100644 index 00000000000..0dcb2328ae7 --- /dev/null +++ b/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html.headers @@ -0,0 +1,2 @@ +Document-Policy: unoptimized-lossless-images;bpp=1.1 +Require-Document-Policy: unoptimized-lossless-images;bpp=1.0 diff --git a/tests/wpt/web-platform-tests/dom/events/Event-constructors.html b/tests/wpt/web-platform-tests/dom/events/Event-constructors.html index 72347efd532..87d68d5ef52 100644 --- a/tests/wpt/web-platform-tests/dom/events/Event-constructors.html +++ b/tests/wpt/web-platform-tests/dom/events/Event-constructors.html @@ -47,7 +47,7 @@ test(function() { }) test(function() { assert_throws_js(TypeError, function() { Event("test") }, - 'Calling Event constructor without "new" must throw'); + 'Calling Event constructor without "new" must throw'); }) test(function() { var ev = new Event("I am an event", { bubbles: true, cancelable: false}) diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html index 653108ca11a..c0126b4f8a8 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html @@ -147,7 +147,7 @@ invalid.forEach(function(arg) { testObj.step(function() { var doc = getWin(desc).document; assert_throws_dom("InvalidCharacterError", - function() { doc.createElement(arg) }) + function() { doc.createElement(arg) }) }); testObj.done(); }); diff --git a/tests/wpt/web-platform-tests/dom/nodes/attributes.html b/tests/wpt/web-platform-tests/dom/nodes/attributes.html index 65bea67173d..c6db7eb8aa4 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/attributes.html +++ b/tests/wpt/web-platform-tests/dom/nodes/attributes.html @@ -232,7 +232,7 @@ test(function() { var el = document.createElement("foo") for (var i = 0, il = invalid_names.length; i < il; ++i) { assert_throws_dom("INVALID_CHARACTER_ERR", - function() { el.setAttributeNS("a", invalid_names[i], "fail") }) + function() { el.setAttributeNS("a", invalid_names[i], "fail") }) } }, "When qualifiedName does not match the Name production, an " + "INVALID_CHARACTER_ERR exception is to be thrown. (setAttributeNS)") @@ -253,8 +253,8 @@ test(function() { var el = document.createElement("foo") for (var i = 0, il = invalid_qnames.length; i < il; ++i) { assert_throws_dom("INVALID_CHARACTER_ERR", - function() { el.setAttributeNS("a", invalid_qnames[i], "fail") }, - "Expected exception for " + invalid_qnames[i] + ".") + function() { el.setAttributeNS("a", invalid_qnames[i], "fail") }, + "Expected exception for " + invalid_qnames[i] + ".") } }, "When qualifiedName does not match the QName production, an " + "INVALID_CHARACTER_ERR exception is to be thrown.") @@ -272,16 +272,16 @@ test(function() { test(function() { var el = document.createElement("foo") assert_throws_dom("NAMESPACE_ERR", - function() { el.setAttributeNS("", "aa:bb", "fail") }) + function() { el.setAttributeNS("", "aa:bb", "fail") }) assert_throws_dom("NAMESPACE_ERR", - function() { el.setAttributeNS(null, "aa:bb", "fail") }) + function() { el.setAttributeNS(null, "aa:bb", "fail") }) }, "A namespace is required to use a prefix.") // Step 5 test(function() { var el = document.createElement("foo") assert_throws_dom("NAMESPACE_ERR", - function() { el.setAttributeNS("a", "xml:bb", "fail") }) + function() { el.setAttributeNS("a", "xml:bb", "fail") }) }, "The xml prefix should not be allowed for arbitrary namespaces") test(function() { var el = document.createElement("foo") @@ -294,12 +294,12 @@ test(function() { test(function() { var el = document.createElement("foo") assert_throws_dom("NAMESPACE_ERR", - function() { el.setAttributeNS("a", "xmlns:bb", "fail") }) + function() { el.setAttributeNS("a", "xmlns:bb", "fail") }) }, "The xmlns prefix should not be allowed for arbitrary namespaces") test(function() { var el = document.createElement("foo") assert_throws_dom("NAMESPACE_ERR", - function() { el.setAttributeNS("a", "xmlns", "fail") }) + function() { el.setAttributeNS("a", "xmlns", "fail") }) }, "The xmlns qualified name should not be allowed for arbitrary namespaces") test(function() { var el = document.createElement("foo") @@ -312,9 +312,9 @@ test(function() { test(function() { var el = document.createElement("foo") assert_throws_dom("NAMESPACE_ERR", - function() { el.setAttributeNS(XMLNS, "a:xmlns", "fail") }) + function() { el.setAttributeNS(XMLNS, "a:xmlns", "fail") }) assert_throws_dom("NAMESPACE_ERR", - function() { el.setAttributeNS(XMLNS, "b:foo", "fail") }) + function() { el.setAttributeNS(XMLNS, "b:foo", "fail") }) }, "The XMLNS namespace should require xmlns as prefix or qualified name") test(function() { var el = document.createElement("foo") diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js index 3fe442bf133..6552a91c6e2 100644 --- a/tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js +++ b/tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js @@ -47,7 +47,7 @@ for (const trueValue of [true, 1, {}, [], 'yes']) { test(() => { assert_throws_js(RangeError, () => new TextDecoderStream(''), - 'the constructor should throw'); + 'the constructor should throw'); }, 'constructing with an invalid encoding should throw'); test(() => { @@ -58,14 +58,14 @@ test(() => { test(() => { assert_throws_js(Error, - () => new TextDecoderStream('utf-8', { - get fatal() { throw new Error(); } - }), 'the constructor should throw'); + () => new TextDecoderStream('utf-8', { + get fatal() { throw new Error(); } + }), 'the constructor should throw'); }, 'a throwing fatal member should cause the constructor to throw'); test(() => { assert_throws_js(Error, - () => new TextDecoderStream('utf-8', { - get ignoreBOM() { throw new Error(); } - }), 'the constructor should throw'); + () => new TextDecoderStream('utf-8', { + get ignoreBOM() { throw new Error(); } + }), 'the constructor should throw'); }, 'a throwing ignoreBOM member should cause the constructor to throw'); diff --git a/tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js b/tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js index 5ee4b65ebe3..f9ccb2dfa76 100644 --- a/tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js +++ b/tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js @@ -72,8 +72,8 @@ test(() => { '♥', 'decode() should decode full sequence'); assert_throws_js(TypeError, - () => decoder.decode(new DataView(bytes.buffer, 0, 2)), - 'decode() should throw on incomplete sequence'); + () => decoder.decode(new DataView(bytes.buffer, 0, 2)), + 'decode() should throw on incomplete sequence'); assert_equals(decoder.decode(new DataView(bytes.buffer, 0, 3)), '♥', 'decode() should not throw on subsequent call'); diff --git a/tests/wpt/web-platform-tests/event-timing/buffered-flag.html b/tests/wpt/web-platform-tests/event-timing/buffered-flag.html index b9c63ffd8fd..dc70ff253ff 100644 --- a/tests/wpt/web-platform-tests/event-timing/buffered-flag.html +++ b/tests/wpt/web-platform-tests/event-timing/buffered-flag.html @@ -12,9 +12,7 @@ let firstInputSeen = false; let eventSeen = false; async_test(t => { - if (!window.PerformanceEventTiming) - assert_unreached("PerformanceEventTiming is not supported"); - + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); const validateEntry = t.step_func(entry => { if (entry.entryType === 'first-input') firstInputSeen = true; diff --git a/tests/wpt/web-platform-tests/event-timing/click-timing.html b/tests/wpt/web-platform-tests/event-timing/click-timing.html index afe53bfc23c..376372a3f11 100644 --- a/tests/wpt/web-platform-tests/event-timing/click-timing.html +++ b/tests/wpt/web-platform-tests/event-timing/click-timing.html @@ -21,9 +21,7 @@ let timeAfterSecondClick; let observedEntries = []; async_test(function(t) { - if (!window.PerformanceEventTiming) - assert_unreached("PerformanceEventTiming is not supported"); - + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); new PerformanceObserver(t.step_func(entryList => { observedEntries = observedEntries.concat(entryList.getEntries().filter( entry => entry.name === 'mousedown')); diff --git a/tests/wpt/web-platform-tests/event-timing/crossiframe.html b/tests/wpt/web-platform-tests/event-timing/crossiframe.html index f24e2c21edb..55e2becfcbc 100644 --- a/tests/wpt/web-platform-tests/event-timing/crossiframe.html +++ b/tests/wpt/web-platform-tests/event-timing/crossiframe.html @@ -47,10 +47,8 @@ clickTimeMin."); } - async_test(async function(t) { - assert_precondition(window.PerformanceEventTiming, - "PerformanceEventTiming is not supported"); - + promise_test(async t => { + assert_precondition(window.PerformanceEventTiming, "Event Timing is not supported"); clickTimeMin = performance.now(); let observedEntries = false; const observerPromise = new Promise(resolve => { @@ -84,7 +82,6 @@ t.step(() => { validateChildFrameEntries(childFrameData); }); - t.done(); }, "Event Timing: entries should only be observable by its own frame."); </script> diff --git a/tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html b/tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html index 48df6ec9fc6..ad71153d40b 100644 --- a/tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html +++ b/tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html @@ -20,9 +20,7 @@ PerformanceObserver should observe one and only one entry. */ async_test(function(t) { - if (!window.PerformanceEventTiming) - assert_unreached("PerformanceEventTiming is not supported"); - + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); let hasObservedFirstInput = false; new PerformanceObserver(t.step_func((entryList) => { assert_false(hasObservedFirstInput); diff --git a/tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html b/tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html index c84d4eff6b8..1c2921ca489 100644 --- a/tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html +++ b/tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html @@ -18,9 +18,7 @@ delayCalled = true; } async_test(function(t) { - if (!window.PerformanceEventTiming) - assert_unreached("PerformanceEventTiming is not supported"); - + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); const observer = new PerformanceObserver(t.step_func_done((entryList) => { const entries = entryList.getEntries().filter(e => e.name === 'mousedown'); // There must only be one click entry: from the clickAndBlockMain() call. diff --git a/tests/wpt/web-platform-tests/event-timing/retrievability.html b/tests/wpt/web-platform-tests/event-timing/retrievability.html index cdb47c6a504..d2b6da2439f 100644 --- a/tests/wpt/web-platform-tests/event-timing/retrievability.html +++ b/tests/wpt/web-platform-tests/event-timing/retrievability.html @@ -30,9 +30,7 @@ Validate entries */ async_test(function(t) { - if (!window.PerformanceEventTiming) { - assert_unreached('PerformanceEventTiming is not implemented'); - } + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); new PerformanceObserver(t.step_func_done(() => { validateEntries(); t.done(); diff --git a/tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html b/tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html index 5ddd9b5f01b..acff788259f 100644 --- a/tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html +++ b/tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html @@ -12,9 +12,7 @@ <script> async_test(function(t) { - if (!window.PerformanceEventTiming) - assert_unreached("PerformanceEventTiming is not supported"); - + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); function testEntries() { // First callback is not ensured to have the entry. if (performance.getEntriesByType('first-input').length === 0) { diff --git a/tests/wpt/web-platform-tests/event-timing/supported-types.window.js b/tests/wpt/web-platform-tests/event-timing/supported-types.window.js index 443c2533c2e..5360bdd9e82 100644 --- a/tests/wpt/web-platform-tests/event-timing/supported-types.window.js +++ b/tests/wpt/web-platform-tests/event-timing/supported-types.window.js @@ -1,6 +1,7 @@ test(() => { - if (typeof PerformanceObserver.supportedEntryTypes === "undefined") - assert_unreached("supportedEntryTypes is not supported."); + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); + assert_precondition(typeof PerformanceObserver.supportedEntryTypes !== "undefined", + 'supportedEntryTypes is not supported'); const types = PerformanceObserver.supportedEntryTypes; assert_true(types.includes("first-input"), "There should be 'first-input' in PerformanceObserver.supportedEntryTypes"); diff --git a/tests/wpt/web-platform-tests/event-timing/timingconditions.html b/tests/wpt/web-platform-tests/event-timing/timingconditions.html index 1fcda21a197..02da2976cee 100644 --- a/tests/wpt/web-platform-tests/event-timing/timingconditions.html +++ b/tests/wpt/web-platform-tests/event-timing/timingconditions.html @@ -35,9 +35,7 @@ } async_test(function(t) { - if (!window.PerformanceEventTiming) - assert_unreached("PerformanceEventTiming is not supported"); - + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); new PerformanceObserver(t.step_func_done(entryList => { const observerCallbackTime = performance.now(); const entries = entryList.getEntries().filter( diff --git a/tests/wpt/web-platform-tests/event-timing/toJSON.html b/tests/wpt/web-platform-tests/event-timing/toJSON.html index 05a7ba76319..a11073aa9a0 100644 --- a/tests/wpt/web-platform-tests/event-timing/toJSON.html +++ b/tests/wpt/web-platform-tests/event-timing/toJSON.html @@ -10,9 +10,7 @@ <button id='button'>Generate a 'click' event</button> <script> async_test(function (t) { - if (!window.PerformanceEventTiming) { - assert_unreached("PerformanceEventTiming is not implemented"); - } + assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.'); const observer = new PerformanceObserver( t.step_func_done(function(entryList) { const entry = entryList.getEntries()[0]; diff --git a/tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html b/tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html index 0a217c3ddb2..c7d8d99a709 100644 --- a/tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html +++ b/tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html @@ -257,7 +257,7 @@ test(function() { // Returning duplicate keys from ownKeys() throws a TypeError. assert_throws_js(TypeError, - function() { var h = new Headers(proxy); }); + function() { var h = new Headers(proxy); }); assert_equals(log.length, 2); // The first thing is the [[Get]] of Symbol.iterator to figure out whether @@ -280,7 +280,7 @@ test(function() { c: "d" }; var proxy = new Proxy(record, loggingHandler); assert_throws_js(TypeError, - function() { var h = new Headers(proxy); }); + function() { var h = new Headers(proxy); }); assert_equals(log.length, 7); // The first thing is the [[Get]] of Symbol.iterator to figure out whether diff --git a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js index 0cb3cb224a1..1843734a3bb 100644 --- a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js +++ b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js @@ -487,8 +487,8 @@ function runGenericSensorTests(sensorName, ]; invalidFreqs.map(freq => { assert_throws_js(TypeError, - () => { new sensorType({frequency: freq}) }, - `when freq is ${freq}`); + () => { new sensorType({frequency: freq}) }, + `when freq is ${freq}`); }); }, `${sensorName}: throw 'TypeError' if frequency is invalid.`); @@ -539,8 +539,8 @@ function runGenericSensorTests(sensorName, ]; invalidRefFrames.map(refFrame => { assert_throws_js(TypeError, - () => { new sensorType({referenceFrame: refFrame}) }, - `when refFrame is ${refFrame}`); + () => { new sensorType({referenceFrame: refFrame}) }, + `when refFrame is ${refFrame}`); }); }, `${sensorName}: throw 'TypeError' if referenceFrame is not one of\ enumeration values.`); diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html index 46fc568a0ee..a00f4f5357f 100644 --- a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html +++ b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html @@ -223,9 +223,9 @@ addTest(function(win) { } else { assert_throws_dom("SecurityError", function() { win[prop]; }, "Should throw when accessing " + String(prop) + " on Window"); assert_throws_dom("SecurityError", function() { Object.getOwnPropertyDescriptor(win, prop); }, - "Should throw when accessing property descriptor for " + prop + " on Window"); + "Should throw when accessing property descriptor for " + prop + " on Window"); assert_throws_dom("SecurityError", function() { Object.prototype.hasOwnProperty.call(win, prop); }, - "Should throw when invoking hasOwnProperty for " + prop + " on Window"); + "Should throw when invoking hasOwnProperty for " + prop + " on Window"); } if (prop != 'location') assert_throws_dom("SecurityError", function() { win[prop] = undefined; }, "Should throw when writing to " + prop + " on Window"); @@ -246,14 +246,14 @@ addTest(function(win) { Object.getOwnPropertyDescriptor(win.location, prop); // Shouldn't throw. assert_true(Object.prototype.hasOwnProperty.call(win.location, prop), "hasOwnProperty for " + prop); assert_throws_dom("SecurityError", function() { win.location[prop] }, - "Should throw reading href on Location"); + "Should throw reading href on Location"); } else { assert_throws_dom("SecurityError", function() { win.location[prop]; }, "Should throw when accessing " + prop + " on Location"); assert_throws_dom("SecurityError", function() { Object.getOwnPropertyDescriptor(win.location, prop); }, - "Should throw when accessing property descriptor for " + prop + " on Location"); + "Should throw when accessing property descriptor for " + prop + " on Location"); assert_throws_dom("SecurityError", function() { Object.prototype.hasOwnProperty.call(win.location, prop); }, - "Should throw when invoking hasOwnProperty for " + prop + " on Location"); + "Should throw when invoking hasOwnProperty for " + prop + " on Location"); assert_throws_dom("SecurityError", function() { win.location[prop] = undefined; }, "Should throw when writing to " + prop + " on Location"); } } @@ -279,7 +279,7 @@ addPromiseTest(async function(win, test_obj) { } else if (!allowedlists.methods.includes(prop)) { for (let args of methodArgs.get(prop) || [[]]) { assert_throws_dom("SecurityError", desc.value.bind(otherObj, ...args), - `Should throw when calling ${objName}.${prop} with cross-origin this object`); + `Should throw when calling ${objName}.${prop} with cross-origin this object`); } } else { @@ -294,7 +294,7 @@ addPromiseTest(async function(win, test_obj) { desc.get.call(otherObj); // Shouldn't throw. } else { assert_throws_dom("SecurityError", desc.get.bind(otherObj), - `Should throw when calling ${objName}.${prop} getter with cross-origin this object`); + `Should throw when calling ${objName}.${prop} getter with cross-origin this object`); } } if (desc.set) { @@ -302,7 +302,7 @@ addPromiseTest(async function(win, test_obj) { desc.set.call(otherObj, "javascript:undefined"); // Shouldn't throw. } else { assert_throws_dom("SecurityError", desc.set.bind(otherObj, "foo"), - `Should throw when calling ${objName}.${prop} setter with cross-origin this object`); + `Should throw when calling ${objName}.${prop} setter with cross-origin this object`); } } } @@ -376,9 +376,9 @@ addTest(function(win) { */ addTest(function(win) { assert_throws_js(TypeError, function() { Object.preventExtensions(win) }, - "preventExtensions on cross-origin Window should throw"); + "preventExtensions on cross-origin Window should throw"); assert_throws_js(TypeError, function() { Object.preventExtensions(win.location) }, - "preventExtensions on cross-origin Location should throw"); + "preventExtensions on cross-origin Location should throw"); }, "[[PreventExtensions]] should throw for cross-origin objects"); /* diff --git a/tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html b/tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html index 33f2ed6feff..6e6e4312a03 100644 --- a/tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html +++ b/tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html @@ -37,7 +37,7 @@ dsl_test(['a', 'b', 'c'], (t, dsl) => { assert_equals(dsl.item(3), null, 'item method out of range'); assert_equals(dsl.item(-1), null, 'item method out of range'); assert_throws_js(TypeError, () => dsl.item(), - 'item method should throw if called without enough args'); + 'item method should throw if called without enough args'); }, 'DOMStringList: item() method'); dsl_test(['a', 'b', 'c'], (t, dsl) => { diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html index 16e64214761..2ae6240acee 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html @@ -31,7 +31,7 @@ var testElements = [ types: [], testData: [ {conditions: {message: "My custom error"}, expected: true, name: "[target] The validity.customError must be true if the custom validity error message is not empty"}, - {conditions: {message: ""}, expected: false, name: "[target] The validity.customError must be false i the custom validity error message is empty"} + {conditions: {message: ""}, expected: false, name: "[target] The validity.customError must be false if the custom validity error message is empty"} ] }, { diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html deleted file mode 100644 index ab200020b4f..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html +++ /dev/null @@ -1,77 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>summary element: clicking on anchor containing inline element</title> -<link rel="author" title="Yu Han" href="mailto:yuzhehan@chromium.org"> -<link rel="help" href="https://html.spec.whatwg.org/C/#the-summary-element"> -<link rel="help" href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<details id="details_i"> - <summary>Anchor text is wrapped with <i> tag <a href="#with_i_tag"><i id="with_i">permalink</i></a></summary> - <p>asdf</p> -</details> - -<details id="details_span"> - <summary>This one uses <span>. <a href="#with_span_tag"><span id="with_span">permalink</span></a></summary> - <p>asdf</p> -</details> - -<details id="details_svg"> - <summary> - <svg style="width: 100px;" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> - <a href="#inside_svg_w_circle"> - <circle id="svg_circle" cx="50" cy="40" r="35"/> - </a> - <a href="#inside_svg_w_text"> - <text id="svg_text" x="50" y="90" text-anchor="middle"> - <circle> - </text> - </a> - </svg> - </summary> - <p>asdf</p> -</details> - -<script> -function testClickingOnInlineElement(detailsId, targetId, expected, testName) { - const details = document.getElementById(detailsId); - const target = document.getElementById(targetId); - const test = async_test(testName); - - const promise = new Promise((resolve, reject) => { - window.onhashchange = test.step_func_done(() => { - assert_false(details.open); - assert_true(location.hash === expected); - resolve(); - }); - }); - - if (target.click) { - target.click(); - } - else { - // svg element don't have click method - target.dispatchEvent(new MouseEvent('click', { - view: window, - bubbles: true, - cancelable: true - })); - } - return promise; -}; - -async function testAll() { - try { - await testClickingOnInlineElement("details_i", "with_i", "#with_i_tag", "Expected <a> containing <i> to navigate"); - await testClickingOnInlineElement("details_span", "with_span", "#with_span_tag", "Expected <a> containing <span> to navigate"); - await testClickingOnInlineElement("details_svg", "svg_circle", "#inside_svg_w_circle", "Expected <a>, inside svg, containing <circle> to navigate"); - await testClickingOnInlineElement("details_svg", "svg_text", "#inside_svg_w_text", "Expected <a>, inside svg, containing <text> to navigate"); - } catch (exception) { - assert_unreached("should NOT-THROW exception"); - } -}; - -var allTests = async_test("Clicking on anchor with embedded inline element should navigate instead of opening details"); -testAll().then(()=>{ allTests.done(); }); -</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html index 88875072128..91652790917 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html @@ -17,10 +17,10 @@ test(function() { // No promise is passed. assert_throws_js(TypeError, - function() { - new PromiseRejectionEvent('eventType', { bubbles: false }); - }, - 'Cannot construct PromiseRejectionEventInit without promise'); + function() { + new PromiseRejectionEvent('eventType', { bubbles: false }); + }, + 'Cannot construct PromiseRejectionEventInit without promise'); // bubbles is passed. assert_equals(new PromiseRejectionEvent('eventType', { bubbles: false, promise: p }).bubbles, false); diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc.idl index 053afdcb135..852ec06209e 100644 --- a/tests/wpt/web-platform-tests/interfaces/webrtc.idl +++ b/tests/wpt/web-platform-tests/interfaces/webrtc.idl @@ -229,7 +229,8 @@ interface RTCPeerConnectionIceErrorEvent : Event { }; dictionary RTCPeerConnectionIceErrorEventInit : EventInit { - DOMString hostCandidate; + DOMString? address; + unsigned short? port; DOMString url; required unsigned short errorCode; USVString statusText; diff --git a/tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html b/tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html index b6a33f579b4..50cabda8d20 100644 --- a/tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html +++ b/tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html @@ -10,32 +10,35 @@ <script src="/resources/testharnessreport.js"></script> <script src="resources/util.js"></script> <script> -async_test(async function(t) { - assert_precondition(window.LayoutShift, 'LayoutShift entries are not supported'); +promise_test(async t => { + assert_precondition(window.LayoutShift, 'Layout Instability is not supported.'); // Wait for the initial render to complete. await waitForAnimationFrames(2); const startTime = performance.now(); - new PerformanceObserver(t.step_func_done(list => { - const endTime = performance.now(); - assert_equals(list.getEntries().length, 1); - const entry = list.getEntries()[0]; - assert_equals(entry.entryType, "layout-shift"); - assert_equals(entry.name, ""); - assert_greater_than_equal(entry.startTime, startTime); - assert_less_than_equal(entry.startTime, endTime); - assert_equals(entry.duration, 0.0); - // The layout shift value should be: - // 300 * (100 + 60) * (60 / maxDimension) / viewport size. - assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60)); + return new Promise(resolve => { + new PerformanceObserver(t.step_func(list => { + const endTime = performance.now(); + assert_equals(list.getEntries().length, 1); + const entry = list.getEntries()[0]; + assert_equals(entry.entryType, "layout-shift"); + assert_equals(entry.name, ""); + assert_greater_than_equal(entry.startTime, startTime); + assert_less_than_equal(entry.startTime, endTime); + assert_equals(entry.duration, 0.0); + // The layout shift value should be: + // 300 * (100 + 60) * (60 / maxDimension) / viewport size. + assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60)); - // The entry should not be available via getEntries* methods. - assert_equals(performance.getEntriesByType('layout-shift').length, 0, 'getEntriesByType should have no layout-shift entries'); - assert_equals(performance.getEntriesByName('', 'layout-shift').length, 0, 'getEntriesByName should have no layout-shift entries'); - assert_equals(performance.getEntries().filter(e => e.entryType === 'layout-shift').length, 0, 'getEntries should have no layout-shift entries'); - })).observe({type: 'layout-shift'}); - // Modify the position of the div. - document.getElementById('myDiv').style = "top: 60px"; + // The entry should not be available via getEntries* methods. + assert_equals(performance.getEntriesByType('layout-shift').length, 0, 'getEntriesByType should have no layout-shift entries'); + assert_equals(performance.getEntriesByName('', 'layout-shift').length, 0, 'getEntriesByName should have no layout-shift entries'); + assert_equals(performance.getEntries().filter(e => e.entryType === 'layout-shift').length, 0, 'getEntries should have no layout-shift entries'); + resolve(); + })).observe({type: 'layout-shift'}); + // Modify the position of the div. + document.getElementById('myDiv').style = "top: 60px"; + }); }, 'Layout shift before onload is not buffered into the performance timeline.'); </script> diff --git a/tests/wpt/web-platform-tests/layout-instability/buffered-flag.html b/tests/wpt/web-platform-tests/layout-instability/buffered-flag.html index cd1260e3613..1d200712c28 100644 --- a/tests/wpt/web-platform-tests/layout-instability/buffered-flag.html +++ b/tests/wpt/web-platform-tests/layout-instability/buffered-flag.html @@ -10,29 +10,32 @@ <script src="/resources/testharnessreport.js"></script> <script src="resources/util.js"></script> <script> -async_test(async function(t) { - assert_precondition(window.LayoutShift, 'LayoutShift entries are not supported'); +promise_test(async t => { + assert_precondition(window.LayoutShift, 'Layout Instability is not supported.'); // Wait for the initial render to complete. await waitForAnimationFrames(2); const startTime = performance.now(); - // First observer creates second in callback to ensure the entry has been dispatched by the time - // the second observer begins observing. - new PerformanceObserver(() => { - const endTime = performance.now(); - // Second observer requires 'buffered: true' to see entries. - new PerformanceObserver(t.step_func_done(list => { - assert_equals(list.getEntries().length, 1); - const entry = list.getEntries()[0]; - assert_equals(entry.entryType, "layout-shift"); - assert_greater_than_equal(entry.startTime, startTime); - assert_less_than_equal(entry.startTime, endTime); - assert_equals(entry.duration, 0.0); - assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60)); - })).observe({'type': 'layout-shift', buffered: true}); - }).observe({type: 'layout-shift'}); - // Modify the position of the div to cause a layout-shift entry. - document.getElementById('myDiv').style = "top: 60px"; + return new Promise(resolve => { + // First observer creates second in callback to ensure the entry has been dispatched by the time + // the second observer begins observing. + new PerformanceObserver(() => { + const endTime = performance.now(); + // Second observer requires 'buffered: true' to see entries. + new PerformanceObserver(t.step_func(list => { + assert_equals(list.getEntries().length, 1); + const entry = list.getEntries()[0]; + assert_equals(entry.entryType, "layout-shift"); + assert_greater_than_equal(entry.startTime, startTime); + assert_less_than_equal(entry.startTime, endTime); + assert_equals(entry.duration, 0.0); + assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60)); + resolve(); + })).observe({'type': 'layout-shift', buffered: true}); + }).observe({type: 'layout-shift'}); + // Modify the position of the div to cause a layout-shift entry. + document.getElementById('myDiv').style = "top: 60px"; + }); }, 'PerformanceObserver with buffered flag sees previous layout-shift entry.'); </script> </body> diff --git a/tests/wpt/web-platform-tests/layout-instability/recent-input.html b/tests/wpt/web-platform-tests/layout-instability/recent-input.html index a4fa0d8b0d9..52adbf723ea 100644 --- a/tests/wpt/web-platform-tests/layout-instability/recent-input.html +++ b/tests/wpt/web-platform-tests/layout-instability/recent-input.html @@ -21,36 +21,39 @@ <script> let timeAfterClick; -async_test(async function(t) { - assert_precondition(window.LayoutShift, 'LayoutShift entries are not supported'); +promise_test(async t => { + assert_precondition(window.LayoutShift, 'Layout Instability is not supported.'); // Wait for the initial render to complete. await waitForAnimationFrames(2); const startTime = performance.now(); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - const endTime = performance.now(); - assert_equals(entryList.getEntries().length, 1); - const entry = entryList.getEntries()[0]; - assert_equals(entry.entryType, "layout-shift"); - assert_equals(entry.name, ""); - assert_greater_than_equal(entry.startTime, startTime); - assert_less_than_equal(entry.startTime, endTime); - assert_equals(entry.duration, 0.0); - // The layout shift value should be: - // 300 * (100 + 60) * (60 / maxDimension) / viewport size. - assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60)); - // We should see that there was a click input entry. - assert_equals(entry.hadRecentInput, true); - assert_greater_than_equal(timeAfterClick, entry.lastInputTime); - }) - ); - observer.observe({entryTypes: ['layout-shift']}); - // User input event - clickAndBlockMain('button').then(() => { - timeAfterClick = performance.now(); - // Modify the position of the div. - document.getElementById('myDiv').style = "top: 60px"; + return new Promise(resolve => { + const observer = new PerformanceObserver( + t.step_func(entryList => { + const endTime = performance.now(); + assert_equals(entryList.getEntries().length, 1); + const entry = entryList.getEntries()[0]; + assert_equals(entry.entryType, "layout-shift"); + assert_equals(entry.name, ""); + assert_greater_than_equal(entry.startTime, startTime); + assert_less_than_equal(entry.startTime, endTime); + assert_equals(entry.duration, 0.0); + // The layout shift value should be: + // 300 * (100 + 60) * (60 / maxDimension) / viewport size. + assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60)); + // We should see that there was a click input entry. + assert_equals(entry.hadRecentInput, true); + assert_greater_than_equal(timeAfterClick, entry.lastInputTime); + resolve(); + }) + ); + observer.observe({entryTypes: ['layout-shift']}); + // User input event + clickAndBlockMain('button').then(() => { + timeAfterClick = performance.now(); + // Modify the position of the div. + document.getElementById('myDiv').style = "top: 60px"; + }); }); }, 'Layout shift right after user input is observable via PerformanceObserver.'); </script> diff --git a/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html b/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html index 8679a2de738..cee4b808c87 100644 --- a/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html +++ b/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html @@ -7,8 +7,9 @@ <script src="/resources/testharnessreport.js"></script> <script> test(() => { - if (typeof PerformanceObserver.supportedEntryTypes === "undefined") - assert_unreached("supportedEntryTypes is not supported."); + assert_precondition(window.LayoutShift, 'Layout Instability is not supported.'); + assert_precondition(typeof PerformanceObserver.supportedEntryTypes !== "undefined", + 'supportedEntryTypes is not supported.'); assert_greater_than(PerformanceObserver.supportedEntryTypes.indexOf("layout-shift"), -1, "There should be an entry 'layout-shift' in PerformanceObserver.supportedEntryTypes"); }, "supportedEntryTypes contains 'layoutShift'."); diff --git a/tests/wpt/web-platform-tests/layout-instability/toJSON.html b/tests/wpt/web-platform-tests/layout-instability/toJSON.html index 374a7de0cd1..00f074a4dd8 100644 --- a/tests/wpt/web-platform-tests/layout-instability/toJSON.html +++ b/tests/wpt/web-platform-tests/layout-instability/toJSON.html @@ -10,36 +10,39 @@ <script src="/resources/testharnessreport.js"></script> <script src="resources/util.js"></script> <script> -async_test(async function(t) { - assert_precondition(window.LayoutShift, 'LayoutShift entries are not supported'); +promise_test(async t => { + assert_precondition(window.LayoutShift, 'Layout Instability is not supported.'); // Wait for the initial render to complete. await waitForAnimationFrames(2); - const observer = new PerformanceObserver( - t.step_func_done(function(entryList) { - const entry = entryList.getEntries()[0]; - assert_equals(typeof(entry.toJSON), 'function'); - const json = entry.toJSON(); - assert_equals(typeof(json), 'object'); - const keys = [ - // PerformanceEntry - 'name', - 'entryType', - 'startTime', - 'duration', - // LayoutShift - 'value', - 'hadRecentInput', - 'lastInputTime', - ]; - for (const key of keys) { - assert_equals(json[key], entry[key], - 'LayoutShift ${key} entry does not match its toJSON value'); - } - }) - ); - observer.observe({type: 'layout-shift'}); - document.getElementById('myDiv').style = "top: 60px"; + return new Promise(resolve => { + const observer = new PerformanceObserver( + t.step_func(entryList => { + const entry = entryList.getEntries()[0]; + assert_equals(typeof(entry.toJSON), 'function'); + const json = entry.toJSON(); + assert_equals(typeof(json), 'object'); + const keys = [ + // PerformanceEntry + 'name', + 'entryType', + 'startTime', + 'duration', + // LayoutShift + 'value', + 'hadRecentInput', + 'lastInputTime', + ]; + for (const key of keys) { + assert_equals(json[key], entry[key], + `LayoutShift ${key} entry does not match its toJSON value`); + } + resolve(); + }) + ); + observer.observe({type: 'layout-shift'}); + document.getElementById('myDiv').style = "top: 60px"; + }); }, 'Test toJSON() in LayoutShift.'); </script> </body> diff --git a/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html b/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html index c96412d0630..4782412ccdf 100644 --- a/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html +++ b/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html @@ -33,10 +33,10 @@ function mediaTest(mime) { var sourceBuffer = mediaSource.addSourceBuffer(mime); mediaSource.removeSourceBuffer(sourceBuffer); assert_throws_dom('InvalidStateError', - function() { - sourceBuffer.abort(); - }, - 'SourceBuffer#abort() after removing the SourceBuffer object'); + function() { + sourceBuffer.abort(); + }, + 'SourceBuffer#abort() after removing the SourceBuffer object'); }), false); var video = document.createElement('video'); video.src = window.URL.createObjectURL(mediaSource); diff --git a/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html b/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html index c62e5421622..e7e9b8ca5f6 100644 --- a/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html +++ b/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html @@ -33,10 +33,10 @@ function mediaTest(mime) { var sourceBuffer = mediaSource.addSourceBuffer(mime); assert_equals(sourceBuffer.updating, false, "SourceBuffer.updating is false"); assert_throws_js(TypeError, - function() { - sourceBuffer.mode = "segments"; - }, - 'SourceBuffer#mode with generate timestamps flag true'); + function() { + sourceBuffer.mode = "segments"; + }, + 'SourceBuffer#mode with generate timestamps flag true'); }), false); var video = document.createElement('video'); video.src = window.URL.createObjectURL(mediaSource); diff --git a/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html b/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html index 905d1d0d0ee..7b45486d71e 100644 --- a/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html +++ b/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html @@ -44,8 +44,8 @@ { mediaSource.removeSourceBuffer(sourceBuffer); assert_throws_dom("InvalidStateError", - function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); }, - "Exception thrown when setting trackDefaults on SourceBuffer that is removed from MediaSource"); + function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); }, + "Exception thrown when setting trackDefaults on SourceBuffer that is removed from MediaSource"); test.done(); }, "Test setting trackDefaults on an already-removed SourceBuffer"); @@ -57,8 +57,8 @@ assert_true(sourceBuffer.updating, "SourceBuffer is updating"); assert_throws_dom("InvalidStateError", - function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); }, - "Exception thrown when setting trackDefaults on SourceBuffer that is updating"); + function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); }, + "Exception thrown when setting trackDefaults on SourceBuffer that is updating"); test.waitForExpectedEvents(function() { diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html index e53915608f0..9abffe25edd 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html @@ -62,10 +62,10 @@ var testAudio = async_test(function() { assert_equals(stream.getAudioTracks().length, 1); assert_equals(stream.getVideoTracks().length, 0); assert_throws_dom("NotSupportedError", - function() { - var capturer = new ImageCapture(stream.getAudioTracks()[0]); - }, - 'an ImageCapturer can only be created from a video track'); + function() { + var capturer = new ImageCapture(stream.getAudioTracks()[0]); + }, + 'an ImageCapturer can only be created from a video track'); this.done(); })) @@ -83,12 +83,12 @@ var testParameter = test(function() { true ]; assert_throws_js(TypeError, - function() { var capturer = new ImageCapture(); }, - 'an ImageCapturer can not be created with no parameter'); + function() { var capturer = new ImageCapture(); }, + 'an ImageCapturer cannot be created with no parameter'); invalidParameters.map(parameter => { assert_throws_js(TypeError, - function() { var capturer = new ImageCapture(parameter); }, - `an ImageCapturer can not be created with a ${parameter} parameter`); + function() { var capturer = new ImageCapture(parameter); }, + `an ImageCapturer cannot be created with a ${parameter} parameter`); }); }, 'throw "TypeError" if parameter is not MediaStreamTrack.'); diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html index 5dca350dd27..d5abf3a05c3 100644 --- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html +++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html @@ -46,11 +46,11 @@ recorder.stop(); assert_equals(recorder.state, "inactive", "stop() is idempotent"); assert_throws_dom("InvalidStateError", function() { recorder.pause() }, - "recorder cannot be pause()ed in |inactive| state"); + "recorder cannot be pause()ed in |inactive| state"); assert_throws_dom("InvalidStateError", function() { recorder.resume() }, - "recorder cannot be resume()d in |inactive| state"); + "recorder cannot be resume()d in |inactive| state"); assert_throws_dom("InvalidStateError", function() { recorder.requestData() }, - "cannot requestData() if recorder is in |inactive| state"); + "cannot requestData() if recorder is in |inactive| state"); test.done(); }); @@ -81,28 +81,28 @@ assert_equals(stream.getVideoTracks()[0].readyState, 'live'); assert_throws_dom("NotSupportedError", - function() { - recorder = new MediaRecorder( - new MediaStream(), {mimeType : "video/invalid"}); - }, - "recorder should throw() with unsupported mimeType"); + function() { + recorder = new MediaRecorder( + new MediaStream(), {mimeType : "video/invalid"}); + }, + "recorder should throw() with unsupported mimeType"); let recorder = new MediaRecorder(new MediaStream()); assert_equals(recorder.state, "inactive"); recorder.stop(); assert_equals(recorder.state, "inactive", "stop() is idempotent"); assert_throws_dom("InvalidStateError", function(){recorder.pause()}, - "recorder cannot be pause()ed in |inactive| state"); + "recorder cannot be pause()ed in |inactive| state"); assert_throws_dom("InvalidStateError", function(){recorder.resume()}, - "recorder cannot be resume()d in |inactive| state"); + "recorder cannot be resume()d in |inactive| state"); assert_throws_dom("InvalidStateError", function(){recorder.requestData()}, - "cannot requestData() if recorder is in |inactive| state"); + "cannot requestData() if recorder is in |inactive| state"); assert_throws_dom("NotSupportedError", - function() { - recorder.start(); - }, - "recorder should throw() when starting with inactive stream"); + function() { + recorder.start(); + }, + "recorder should throw() when starting with inactive stream"); recorder.stream.addTrack(stream.getTracks()[0]); diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html index c54e3a7ada6..f51674cb429 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html @@ -38,7 +38,7 @@ test_pointerEvent.step(function() { assert_throws_dom("NotFoundError", function(){ listener.releasePointerCapture(INVALID_POINTERID); }, - "It should not be possible to release capture an invalid pointer id"); + "It should not be possible to release capture an invalid pointer id"); }); test_pointerEvent.done(); // complete test diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html index ada67fa5b7b..7d9f948919f 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html @@ -34,7 +34,7 @@ detected_pointertypes[event.pointerType] = true; test_pointerEvent.step(function() { assert_throws_dom("NotFoundError", function(){ listener.setPointerCapture(INVALID_POINTERID); }, - "It should not be possible to capture an invalid pointer id"); + "It should not be possible to capture an invalid pointer id"); }); test_pointerEvent.done(); // complete test }); diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js index 695b265db60..34aeab08a74 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js +++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js @@ -208,6 +208,7 @@ class MockRuntime { "local-floor": device.mojom.XRSessionFeature.REF_SPACE_LOCAL_FLOOR, "bounded-floor": device.mojom.XRSessionFeature.REF_SPACE_BOUNDED_FLOOR, "unbounded": device.mojom.XRSessionFeature.REF_SPACE_UNBOUNDED, + "hit-test": device.mojom.XRSessionFeature.HIT_TEST, }; static sessionModeToMojoMap = { diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html index 09d22ff6d1d..b06f3c889c1 100644 --- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html +++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html @@ -46,7 +46,7 @@ function checkScroll() { }; let key = (new URL(document.location)).searchParams.get("key"); - stashResults(key, results); + stashResultsThenClose(key, results); } // Ensure two animation frames on load to test the fallback to element anchor, diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js b/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js index b3d9ea8e93f..f1b2ea8d3a5 100644 --- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js +++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js @@ -1,8 +1,10 @@ // Put test results into Stash -function stashResults(key, results) { +function stashResultsThenClose(key, results) { fetch(`/scroll-to-text-fragment/stash.py?key=${key}`, { method: 'POST', body: JSON.stringify(results) + }).then(() => { + window.close(); }); } @@ -18,6 +20,10 @@ function fetchResults(key, resolve, reject) { } catch(e) { reject(); } + } else { + // We keep trying to fetch results as the target page may not have stashed + // them yet. + fetchResults(key, resolve, reject); } }); } diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py b/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py index 49567390e1e..31a29343d9e 100644 --- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py +++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py @@ -10,8 +10,4 @@ def main(request, response): else: # Request for result data from test page value = request.server.stash.take(key, '/scroll-to-text-fragment/') - # Poll until data is stashed - while value is None: - time.sleep(.1) - value = request.server.stash.take(key, '/scroll-to-text-fragment/') return value diff --git a/tests/wpt/web-platform-tests/selection/removeRange.html b/tests/wpt/web-platform-tests/selection/removeRange.html index 7618a4ac535..8dcd6d2c074 100644 --- a/tests/wpt/web-platform-tests/selection/removeRange.html +++ b/tests/wpt/web-platform-tests/selection/removeRange.html @@ -31,8 +31,8 @@ testRanges.forEach(function(rangeData, index) { equivalentRange.setStart(endpoints[0], endpoints[1]); equivalentRange.setEnd(endpoints[2], endpoints[3]); assert_throws_dom("NotFoundError", - function() { selection.removeRange(equivalentRange) }, - "Removing a different range should throw"); + function() { selection.removeRange(equivalentRange) }, + "Removing a different range should throw"); assert_equals(selection.rangeCount, 1, 'Equivalent Range should not remove the registered Range.'); }, 'removeRange() with Range ' + index); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py index 7b0c13feba9..62c945f8221 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py @@ -19,11 +19,11 @@ test(function() { test(function() { assert_throws_js(EvalError, - function() { eval('1 + 1'); }, - 'eval() should throw EvalError.') + function() { eval('1 + 1'); }, + 'eval() should throw EvalError.') assert_throws_js(EvalError, - function() { new Function('1 + 1'); }, - 'new Function() should throw EvalError.') + function() { new Function('1 + 1'); }, + 'new Function() should throw EvalError.') }, 'eval test for default-src'); async_test(function(t) { @@ -74,11 +74,11 @@ test(function() { test(function() { assert_throws_js(EvalError, - function() { eval('1 + 1'); }, - 'eval() should throw EvalError.') + function() { eval('1 + 1'); }, + 'eval() should throw EvalError.') assert_throws_js(EvalError, - function() { new Function('1 + 1'); }, - 'new Function() should throw EvalError.') + function() { new Function('1 + 1'); }, + 'new Function() should throw EvalError.') }, 'eval test for script-src'); async_test(function(t) { diff --git a/tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js b/tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js index e6959b6c12a..71d75b03504 100644 --- a/tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js +++ b/tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js @@ -100,8 +100,8 @@ const badReadables = [null, undefined, 0, NaN, true, 'ReadableStream', Object.cr for (const readable of badReadables) { test(() => { assert_throws_js(TypeError, - ReadableStream.prototype.pipeThrough.bind(readable, uninterestingReadableWritablePair()), - 'pipeThrough should throw'); + ReadableStream.prototype.pipeThrough.bind(readable, uninterestingReadableWritablePair()), + 'pipeThrough should throw'); }, `pipeThrough should brand-check this and not allow '${readable}'`); test(() => { @@ -176,7 +176,7 @@ for (const signal of badSignals) { test(() => { const rs = new ReadableStream(); assert_throws_js(TypeError, () => rs.pipeThrough(uninterestingReadableWritablePair(), { signal }), - 'pipeThrough should throw'); + 'pipeThrough should throw'); }, `invalid values of signal should throw; specifically '${signal}'`); } @@ -191,7 +191,7 @@ test(() => { const rs = new ReadableStream(); rs.getReader(); assert_throws_js(TypeError, () => rs.pipeThrough(uninterestingReadableWritablePair()), - 'pipeThrough should throw'); + 'pipeThrough should throw'); }, 'pipeThrough should throw if this is locked'); test(() => { @@ -200,7 +200,7 @@ test(() => { const readable = new ReadableStream(); writable.getWriter(); assert_throws_js(TypeError, () => rs.pipeThrough({writable, readable}), - 'pipeThrough should throw'); + 'pipeThrough should throw'); }, 'pipeThrough should throw if writable is locked'); test(() => { diff --git a/tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js b/tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js index 9bbe7111ea8..bed4ec411ec 100644 --- a/tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js +++ b/tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js @@ -107,14 +107,14 @@ test(() => { test(() => { assert_throws_js(TypeError, () => new ReadableByteStreamController(fakeRS()), - 'Constructing a ReadableByteStreamController should throw'); + 'Constructing a ReadableByteStreamController should throw'); }, 'ReadableByteStreamController enforces a brand check on its arguments'); test(() => { assert_throws_js(TypeError, () => new ReadableByteStreamController(realRS()), - 'Constructing a ReadableByteStreamController should throw'); + 'Constructing a ReadableByteStreamController should throw'); }, 'ReadableByteStreamController can\'t be given a fully-constructed ReadableStream'); @@ -175,7 +175,7 @@ promise_test(t => { function brandChecks() { for (const badController of [fakeRBSController(), realRS(), realRSBYOBReader(), undefined, null]) { assert_throws_js(TypeError, () => new ReadableStreamBYOBRequest(badController, new Uint8Array(1)), - 'ReadableStreamBYOBRequest constructor must throw for an invalid controller argument'); + 'ReadableStreamBYOBRequest constructor must throw for an invalid controller argument'); } getterThrowsForAll(ReadableStreamBYOBRequest.prototype, 'view', [fakeRSBYOBRequest(), realRS(), realRSBYOBReader(), realRBSController(), undefined, null]); diff --git a/tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js b/tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js index 2e1c53fdea8..516025135b0 100644 --- a/tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js +++ b/tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js @@ -49,7 +49,7 @@ function runTests(ReadableStreamBYOBRequest) { const view = createDummyObject(Uint8Array.prototype, viewType, () => new Uint8Array(16)); test(() => { assert_throws_js(TypeError, () => new ReadableStreamBYOBRequest(controller, view), - 'constructor should throw'); + 'constructor should throw'); }, `ReadableStreamBYOBRequest constructor should throw when passed a ${controllerType} ` + `ReadableByteStreamController and a ${viewType} view`); } diff --git a/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js b/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js index 1947ededb66..e4951c0c819 100644 --- a/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js +++ b/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js @@ -1990,7 +1990,7 @@ promise_test(() => { const reader = rs.getReader({ mode: 'byob' }); return reader.read(newView()).then(() => { assert_throws_js(TypeError, () => byobRequest.respondWithNewView(newView()), - 'respondWithNewView() should throw a TypeError'); + 'respondWithNewView() should throw a TypeError'); }); }, 'calling respondWithNewView() twice on the same byobRequest should throw'); @@ -2102,20 +2102,20 @@ test(() => { }), 'constructor should throw for size function'); assert_throws_js(RangeError, () => new ReadableStream({ type: 'bytes' }, { size: null }), - 'constructor should throw for size defined'); + 'constructor should throw for size defined'); assert_throws_js(RangeError, - () => new ReadableStream({ type: 'bytes' }, new CountQueuingStrategy({ highWaterMark: 1 })), - 'constructor should throw when strategy is CountQueuingStrategy'); + () => new ReadableStream({ type: 'bytes' }, new CountQueuingStrategy({ highWaterMark: 1 })), + 'constructor should throw when strategy is CountQueuingStrategy'); assert_throws_js(RangeError, - () => new ReadableStream({ type: 'bytes' }, new ByteLengthQueuingStrategy({ highWaterMark: 512 })), - 'constructor should throw when strategy is ByteLengthQueuingStrategy'); + () => new ReadableStream({ type: 'bytes' }, new ByteLengthQueuingStrategy({ highWaterMark: 512 })), + 'constructor should throw when strategy is ByteLengthQueuingStrategy'); class HasSizeMethod { size() {} } assert_throws_js(RangeError, () => new ReadableStream({ type: 'bytes' }, new HasSizeMethod()), - 'constructor should throw when size on the prototype chain'); + 'constructor should throw when size on the prototype chain'); }, 'ReadableStream constructor should not accept a strategy with a size defined if type is "bytes"'); diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js b/tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js index c82f513df01..564eea016bd 100644 --- a/tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js +++ b/tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js @@ -120,7 +120,7 @@ test(() => { test(() => { assert_throws_js(TypeError, () => new ReadableStreamDefaultReader(fakeRS()), - 'Constructing a ReadableStreamDefaultReader should throw'); + 'Constructing a ReadableStreamDefaultReader should throw'); }, 'ReadableStreamDefaultReader enforces a brand check on its argument'); @@ -155,14 +155,14 @@ test(() => { test(() => { assert_throws_js(TypeError, () => new ReadableStreamDefaultController(fakeRS()), - 'Constructing a ReadableStreamDefaultController should throw'); + 'Constructing a ReadableStreamDefaultController should throw'); }, 'ReadableStreamDefaultController enforces a brand check on its argument'); test(() => { assert_throws_js(TypeError, () => new ReadableStreamDefaultController(realRS()), - 'Constructing a ReadableStreamDefaultController should throw'); + 'Constructing a ReadableStreamDefaultController should throw'); }, 'ReadableStreamDefaultController can\'t be given a fully-constructed ReadableStream'); diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js b/tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js index 1e67b272b54..bf807f76686 100644 --- a/tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js +++ b/tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js @@ -69,7 +69,7 @@ test(() => { const rs = new ReadableStream(); new ReadableStreamDefaultReader(rs); // Constructing directly the first time should be fine. assert_throws_js(TypeError, () => new ReadableStreamDefaultReader(rs), - 'constructing directly the second time should fail'); + 'constructing directly the second time should fail'); }, 'Constructing a ReadableStreamDefaultReader directly should fail if the stream is already locked (via direct ' + 'construction)'); diff --git a/tests/wpt/web-platform-tests/streams/resources/test-utils.js b/tests/wpt/web-platform-tests/streams/resources/test-utils.js index 614fcca18e9..ff5c0151c1c 100644 --- a/tests/wpt/web-platform-tests/streams/resources/test-utils.js +++ b/tests/wpt/web-platform-tests/streams/resources/test-utils.js @@ -44,7 +44,7 @@ self.methodThrowsForAll = (obj, methodName, targets, args) => { self.constructorThrowsForAll = (constructor, firstArgs) => { firstArgs.forEach(firstArg => assert_throws_js(TypeError, () => new constructor(firstArg), - 'constructor should throw a TypeError')); + 'constructor should throw a TypeError')); }; self.garbageCollect = () => { diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js index c7645e7e651..c29c6cb59d8 100644 --- a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js +++ b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js @@ -87,13 +87,13 @@ promise_test(t => { test(() => { assert_throws_js(RangeError, () => new TransformStream(undefined, { highWaterMark: -1 }), - 'should throw RangeError for negative writableHighWaterMark'); + 'should throw RangeError for negative writableHighWaterMark'); assert_throws_js(RangeError, () => new TransformStream(undefined, undefined, { highWaterMark: -1 }), - 'should throw RangeError for negative readableHighWaterMark'); + 'should throw RangeError for negative readableHighWaterMark'); assert_throws_js(RangeError, () => new TransformStream(undefined, { highWaterMark: NaN }), - 'should throw RangeError for NaN writableHighWaterMark'); + 'should throw RangeError for NaN writableHighWaterMark'); assert_throws_js(RangeError, () => new TransformStream(undefined, undefined, { highWaterMark: NaN }), - 'should throw RangeError for NaN readableHighWaterMark'); + 'should throw RangeError for NaN readableHighWaterMark'); }, 'a RangeError should be thrown for an invalid highWaterMark'); const objectThatConvertsTo42 = { diff --git a/tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js b/tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js index c792e1f1faf..ac0483e61f0 100644 --- a/tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js +++ b/tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js @@ -116,7 +116,7 @@ test(() => { }); assert_throws_js(TypeError, () => new WritableStreamDefaultController({}), - 'constructor should throw a TypeError exception'); + 'constructor should throw a TypeError exception'); }, 'WritableStreamDefaultController constructor should throw'); test(() => { @@ -128,7 +128,7 @@ test(() => { }); assert_throws_js(TypeError, () => new WritableStreamDefaultController(stream), - 'constructor should throw a TypeError exception'); + 'constructor should throw a TypeError exception'); }, 'WritableStreamDefaultController constructor should throw when passed an initialised WritableStream'); test(() => { @@ -137,7 +137,7 @@ test(() => { const WritableStreamDefaultWriter = writer.constructor; writer.releaseLock(); assert_throws_js(TypeError, () => new WritableStreamDefaultWriter({}), - 'constructor should throw a TypeError exception'); + 'constructor should throw a TypeError exception'); }, 'WritableStreamDefaultWriter should throw unless passed a WritableStream'); test(() => { @@ -145,7 +145,7 @@ test(() => { const writer = stream.getWriter(); const WritableStreamDefaultWriter = writer.constructor; assert_throws_js(TypeError, () => new WritableStreamDefaultWriter(stream), - 'constructor should throw a TypeError exception'); + 'constructor should throw a TypeError exception'); }, 'WritableStreamDefaultWriter constructor should throw when stream argument is locked'); const operations = [ diff --git a/tests/wpt/web-platform-tests/streams/writable-streams/write.any.js b/tests/wpt/web-platform-tests/streams/writable-streams/write.any.js index 68da7939855..f60434b9fc1 100644 --- a/tests/wpt/web-platform-tests/streams/writable-streams/write.any.js +++ b/tests/wpt/web-platform-tests/streams/writable-streams/write.any.js @@ -257,7 +257,7 @@ promise_test(() => { const writer = stream.getWriter(); const WritableStreamDefaultWriter = writer.constructor; assert_throws_js(TypeError, () => new WritableStreamDefaultWriter(stream), - 'should not be able to construct on locked stream'); + 'should not be able to construct on locked stream'); // If stream.[[writer]] no longer points to |writer| then the closed Promise // won't work properly. return Promise.all([writer.close(), writer.closed]); diff --git a/tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html b/tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html index 1715cd9d471..8098a885356 100644 --- a/tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html +++ b/tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html @@ -1,98 +1,90 @@ <!doctype html> -<html> <meta charset="utf-8"> -<title>This removes and adds an animation element while the animation is repeating</title> +<title>Remove and add an animation element while the animation is repeating</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="/resources/SVGAnimationTestCase-testharness.js"></script> - -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - +<svg> <animate id="anim" attributeName="visibility" to="visible" begin="0s" dur="2s" repeatCount="4"/> - <rect x="0" y="0" width="100" height="100" fill="rgb(0, 255, 0)"> - <set attributeName="fill" to="rgb(255, 0, 0)" begin="anim.repeat(0)"/> + <rect x="0" y="0" width="50" height="50" fill="lime"> + <set attributeName="fill" to="red" begin="anim.repeat(0)"/> </rect> - <rect x="200" y="0" width="100" height="100" fill="rgb(255, 0, 0)"> - <set attributeName="fill" to="rgb(0, 255, 0)" begin="anim.repeat(1)"/> + <rect x="50" y="0" width="50" height="50" fill="red"> + <set attributeName="fill" to="lime" begin="anim.repeat(1)"/> </rect> - <rect x="0" y="200" width="100" height="100" fill="rgb(255, 0, 0)"> - <set attributeName="fill" to="rgb(0, 255, 0)" begin="anim.repeat(2)"/> + <rect x="0" y="50" width="50" height="50" fill="red"> + <set attributeName="fill" to="lime" begin="anim.repeat(2)"/> </rect> - <rect x="200" y="200" width="100" height="100" fill="rgb(255, 0, 0)"> - <set attributeName="fill" to="rgb(0, 255, 0)" begin="anim.repeat(3)"/> + <rect x="50" y="50" width="50" height="50" fill="red"> + <set attributeName="fill" to="lime" begin="anim.repeat(3)"/> </rect> - </svg> - <script> -var rootSVGElement = document.querySelector("svg"); -var epsilon = 1.0; - -// Setup animation test -function sample1() { - expectFillColor(rect1, 0, 255, 0, "1.1"); - expectFillColor(rect2, 255, 0, 0, "1.2"); - expectFillColor(rect3, 255, 0, 0, "1.3"); - expectFillColor(rect4, 255, 0, 0, "1.4"); -} - -function sample2() { - expectFillColor(rect1, 0, 255, 0, "2.1"); - expectFillColor(rect2, 0, 255, 0, "2.2"); - expectFillColor(rect3, 255, 0, 0, "2.3"); - expectFillColor(rect4, 255, 0, 0, "2.4"); -} - -function sample3() { - expectFillColor(rect1, 0, 255, 0, "3.1"); - expectFillColor(rect2, 0, 255, 0, "3.2"); - expectFillColor(rect3, 0, 255, 0, "3.3"); - expectFillColor(rect4, 255, 0, 0, "3.4"); -} - -function sample4() { - expectFillColor(rect1, 0, 255, 0, "4.1"); - expectFillColor(rect2, 0, 255, 0, "4.2"); - expectFillColor(rect3, 0, 255, 0, "4.3"); - expectFillColor(rect4, 0, 255, 0, "4.4"); -} - -function recreate() { - var anim1 = rootSVGElement.ownerDocument.getElementById("anim"); - anim1.parentNode.removeChild(anim1); - var anim2 = createSVGElement("animate"); - anim2.setAttribute("id", "anim"); - anim2.setAttribute("attributeName", "visibility"); - anim2.setAttribute("to", "visible"); - anim2.setAttribute("begin", "0s"); - anim2.setAttribute("dur", "2s"); - anim2.setAttribute("repeatCount", "4"); - rootSVGElement.appendChild(anim2); -} - -smil_async_test((t) => { - var rects = rootSVGElement.ownerDocument.getElementsByTagName("rect"); - rect1 = rects[0]; - rect2 = rects[1]; - rect3 = rects[2]; - rect4 = rects[3]; - - const expectedValues = [ - // [animationId, time, sampleCallback] - ["anim", 1.999, sample1], - ["anim", 2.000, sample2], - ["anim", 2.999, sample2], - ["anim", 4.000, sample3], - ["anim", 5.0, recreate], - ["anim", 5.999, sample3], - ["anim", 6.000, sample4], - ]; + function recreate(anim) { + anim.parentNode.removeChild(anim); + return document.querySelector('svg').appendChild(anim.cloneNode()); + } - runAnimationTest(t, expectedValues); -}); + function waitFrame() { + return new Promise(resolve => { + window.requestAnimationFrame(resolve); + }); + } -window.animationStartsImmediately = true; + function checkSetElements(setElements, expected) { + let fillValues = Array.from(setElements).map(set => { + return getComputedStyle(set.targetElement, '').fill; + }); + let remappedExpected = expected.map(color => { + const colorMap = {'red': 'rgb(255, 0, 0)', 'lime': 'rgb(0, 255, 0)'}; + return colorMap[color]; + }) + assert_array_equals(fillValues, remappedExpected); + } + promise_test(t => { + let svg = document.querySelector('svg'); + let anim = document.getElementById('anim'); + let animWatcher = new EventWatcher(t, anim, ['beginEvent', 'repeatEvent']); + // Wait for #anims 'beginEvent' and then step through the + // 'repeatEvents' one at a time. + let stepsPromise = animWatcher.wait_for('beginEvent').then(() => { + checkSetElements(setElements, ['lime', 'red', 'red', 'red']); + svg.setCurrentTime(1.999); + return animWatcher.wait_for('repeatEvent'); + }).then(() => { + return waitFrame(); + }).then(() => { + checkSetElements(setElements, ['lime', 'lime', 'red', 'red']); + svg.setCurrentTime(2.999); + return waitFrame(); + }).then(() => { + checkSetElements(setElements, ['lime', 'lime', 'red', 'red']); + svg.setCurrentTime(3.999); + return animWatcher.wait_for('repeatEvent'); + }).then(() => { + return waitFrame(); + }).then(() => { + checkSetElements(setElements, ['lime', 'lime', 'lime', 'red']); + let newAnim = recreate(anim); + let animWatcher = new EventWatcher(t, newAnim, ['repeatEvent']); + svg.setCurrentTime(5.999); + return animWatcher.wait_for('repeatEvent'); + }).then(() => { + return waitFrame(); + }).then(() => { + checkSetElements(setElements, ['lime', 'lime', 'lime', 'lime']); + }); + let setElements = document.getElementsByTagName('set'); + let setBeginWatchers = Array.from(setElements).map(element => { + return new EventWatcher(t, element, 'beginEvent'); + }); + // Expect 'beginEvent' to be dispatched once for all but the first 'set' element. + let setPromises = setBeginWatchers.slice(1).map(watcher => { + return watcher.wait_for('beginEvent').then(evt => { + let target = evt.target.targetElement; + assert_equals(getComputedStyle(target, '').fill, 'rgb(0, 255, 0)'); + }); + }); + return Promise.all([stepsPromise, ...setPromises]); + }); </script> diff --git a/tests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh b/tests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh index 8db08794ade..992a1b58c24 100755 --- a/tests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh +++ b/tests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh @@ -5,14 +5,10 @@ SCRIPT_DIR=$(cd $(dirname "$0") && pwd -P) WPT_ROOT=$SCRIPT_DIR/../.. cd $WPT_ROOT -add_wpt_hosts() { - ./wpt make-hosts-file | sudo tee -a /etc/hosts -} - test_infrastructure() { local ARGS=""; if [ $PRODUCT == "firefox" ]; then - ARGS="--install-browser" + ARGS="--binary=~/build/firefox/firefox" else ARGS=$1 fi @@ -24,7 +20,6 @@ main() { ./wpt manifest --rebuild -p ~/meta/MANIFEST.json for PRODUCT in "${PRODUCTS[@]}"; do if [[ "$PRODUCT" == "chrome" ]]; then - add_wpt_hosts test_infrastructure "--binary=$(which google-chrome-unstable) --channel dev" else test_infrastructure diff --git a/tests/wpt/web-platform-tests/tools/ci/run_tc.py b/tests/wpt/web-platform-tests/tools/ci/run_tc.py index f9086a31bd9..c460eecbbd7 100755 --- a/tests/wpt/web-platform-tests/tools/ci/run_tc.py +++ b/tests/wpt/web-platform-tests/tools/ci/run_tc.py @@ -36,11 +36,14 @@ the serialization of a GitHub event payload. """ import argparse +import fnmatch import json import os import subprocess import sys +import tarfile import tempfile +import zipfile from socket import error as SocketError # NOQA: N812 import errno try: @@ -169,15 +172,16 @@ def install_webkitgtk_from_apt_repository(channel): run(["sudo", "apt-get", "-qqy", "-t", "bionic-wpt-webkit-updates", "install", "webkit2gtk-driver"]) -# Download an URL in chunks and saves it to a file descriptor (truncating it) -# It doesn't close the descriptor, but flushes it on success. -# It retries the download in case of ECONNRESET up to max_retries. def download_url_to_descriptor(fd, url, max_retries=3): + """Download an URL in chunks and saves it to a file descriptor (truncating it) + It doesn't close the descriptor, but flushes it on success. + It retries the download in case of ECONNRESET up to max_retries.""" download_succeed = False if max_retries < 0: max_retries = 0 for current_retry in range(max_retries+1): try: + print("INFO: Downloading %s Try %d/%d" % (url, current_retry + 1, max_retries)) resp = urlopen(url) # We may come here in a retry, ensure to truncate fd before start writing. fd.seek(0) @@ -246,7 +250,65 @@ def set_variables(event): os.environ["GITHUB_BRANCH"] = branch +def task_url(task_id): + root_url = os.environ['TASKCLUSTER_ROOT_URL'] + if root_url == 'https://taskcluster.net': + queue_base = "https://queue.taskcluster.net/v1/task" + else: + queue_base = root_url + "/api/queue/v1/task" + + return "%s/%s" % (queue_base, task_id) + + +def download_artifacts(artifacts): + artifact_list_by_task = {} + for artifact in artifacts: + base_url = task_url(artifact["task"]) + if artifact["task"] not in artifact_list_by_task: + resp = urlopen(base_url + "/artifacts") + artifacts_data = json.load(resp) + artifact_list_by_task[artifact["task"]] = artifacts_data + + artifacts_data = artifact_list_by_task[artifact["task"]] + print("DEBUG: Got artifacts %s" % artifacts_data) + found = False + for candidate in artifacts_data["artifacts"]: + print("DEBUG: candidate: %s glob: %s" % (candidate["name"], artifact["glob"])) + if fnmatch.fnmatch(candidate["name"], artifact["glob"]): + found = True + print("INFO: Fetching aritfact %s from task %s" % (candidate["name"], artifact["task"])) + file_name = candidate["name"].rsplit("/", 1)[1] + url = base_url + "/artifacts/" + candidate["name"] + dest_path = os.path.expanduser(os.path.join("~", artifact["dest"], file_name)) + dest_dir = os.path.dirname(dest_path) + if not os.path.exists(dest_dir): + os.makedirs(dest_dir) + with open(dest_path, "wb") as f: + download_url_to_descriptor(f, url) + + if artifact.get("extract"): + unpack(dest_path) + if not found: + print("WARNING: No artifact found matching %s in task %s" % (artifact["glob"], artifact["task"])) + + +def unpack(path): + dest = os.path.dirname(path) + if tarfile.is_tarfile(path): + run(["tar", "-xf", path], cwd=os.path.dirname(path)) + elif zipfile.is_zipfile(path): + with zipfile.ZipFile(path) as archive: + archive.extractall(dest) + else: + print("ERROR: Don't know how to extract %s" % path) + raise Exception + + def setup_environment(args): + if "TASK_ARTIFACTS" in os.environ: + artifacts = json.loads(os.environ["TASK_ARTIFACTS"]) + download_artifacts(artifacts) + if args.hosts_file: make_hosts_file() @@ -364,15 +426,8 @@ def fetch_event_data(): # For example under local testing return None - root_url = os.environ['TASKCLUSTER_ROOT_URL'] - if root_url == 'https://taskcluster.net': - queue_base = "https://queue.taskcluster.net/v1/task" - else: - queue_base = root_url + "/api/queue/v1/task" - - - resp = urlopen("%s/%s" % (queue_base, task_id)) - + url = task_url(task_id) + resp = urlopen(url) task_data = json.load(resp) event_data = task_data.get("extra", {}).get("github_event") if event_data is not None: diff --git a/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py b/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py index ac5abc12b1f..d8e42ccea21 100755 --- a/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py +++ b/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py @@ -9,10 +9,18 @@ import subprocess import sys browser_specific_args = { - "firefox": ["--install-browser"], "servo": ["--install-browser", "--processes=12"] } +def get_browser_args(product): + if product == "firefox": + local_binary = os.path.expanduser(os.path.join("~", "build", "firefox", "firefox")) + if os.path.exists(local_binary): + return ["--binary=%s" % local_binary] + print("WARNING: Local firefox binary not found") + return ["--install-browser"] + return browser_specific_args.get(product, []) + def find_wptreport(args): parser = argparse.ArgumentParser() @@ -66,7 +74,7 @@ def main(product, commit_range, wpt_args): "--no-headless", "--verify-log-full" ] - wpt_args += browser_specific_args.get(product, []) + wpt_args += get_browser_args(product) # Hack to run servo with one process only for wdspec if product == "servo" and "--test-type=wdspec" in wpt_args: diff --git a/tests/wpt/web-platform-tests/tools/ci/tc/README.md b/tests/wpt/web-platform-tests/tools/ci/tc/README.md index 11f367f986f..785c82cca39 100644 --- a/tests/wpt/web-platform-tests/tools/ci/tc/README.md +++ b/tests/wpt/web-platform-tests/tools/ci/tc/README.md @@ -40,6 +40,14 @@ top-level properties: * `name`: Optional String. Name to use for the task overriding the property name. This is useful in combination with substitutions described below. +* `download-artifacts`: Optional Object. An artifact to download from + a task that this task depends on. This has the following properties: + - `task` - Name of the task producing the artifact + - `glob` - A glob pattern for the filename of the artifact + - `dest` - A directory reltive to the home directory in which to place + the artifact + - `extract` - Optional. A boolean indicating whether an archive artifact + should be extracted in-place. ## Task Expansions diff --git a/tests/wpt/web-platform-tests/tools/ci/tc/decision.py b/tests/wpt/web-platform-tests/tools/ci/tc/decision.py index 4b23630012b..f8f186f744d 100644 --- a/tests/wpt/web-platform-tests/tools/ci/tc/decision.py +++ b/tests/wpt/web-platform-tests/tools/ci/tc/decision.py @@ -214,7 +214,7 @@ def get_owner(event): return "web-platform-tests@users.noreply.github.com" -def create_tc_task(event, task, taskgroup_id, depends_on_ids): +def create_tc_task(event, task, taskgroup_id, depends_on_ids, env_extra=None): command = build_full_command(event, task) task_id = taskcluster.slugId() task_data = { @@ -241,12 +241,24 @@ def create_tc_task(event, task, taskgroup_id, depends_on_ids): "github_event": json.dumps(event) } } + if env_extra: + task_data["payload"]["env"].update(env_extra) if depends_on_ids: task_data["dependencies"] = depends_on_ids task_data["requires"] = "all-completed" return task_id, task_data +def get_artifact_data(artifact, task_id_map): + task_id, data = task_id_map[artifact["task"]] + return { + "task": task_id, + "glob": artifact["glob"], + "dest": artifact["dest"], + "extract": artifact.get("extract", False) + } + + def build_task_graph(event, all_tasks, tasks): task_id_map = OrderedDict() taskgroup_id = os.environ.get("TASK_ID", taskcluster.slugId()) @@ -259,7 +271,14 @@ def build_task_graph(event, all_tasks, tasks): add_task(depends_name, all_tasks[depends_name]) depends_on_ids.append(task_id_map[depends_name][0]) - task_id, task_data = create_tc_task(event, task, taskgroup_id, depends_on_ids) + env_extra = {} + if "download-artifacts" in task: + env_extra["TASK_ARTIFACTS"] = json.dumps( + [get_artifact_data(artifact, task_id_map) + for artifact in task["download-artifacts"]]) + + task_id, task_data = create_tc_task(event, task, taskgroup_id, depends_on_ids, + env_extra=env_extra) task_id_map[task_name] = (task_id, task_data) for task_name, task in iteritems(tasks): diff --git a/tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml b/tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml index 7476337e09b..562239c31e3 100644 --- a/tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml +++ b/tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml @@ -82,6 +82,11 @@ components: browser-firefox: depends-on: - download-firefox-${vars.channel} + download-artifacts: + - task: download-firefox-${vars.channel} + glob: public/results/firefox-${vars.channel}.* + dest: build/ + extract: true browser-webkitgtk_minibrowser: {} @@ -281,7 +286,7 @@ tasks: download-firefox-${vars.channel}: use: - wpt-base - command: "./wpt install --download-only --destination /home/test/artifacts/ --channel=${vars.channel} firefox browser" + command: "./wpt install --download-only --destination /home/test/artifacts/ --channel=${vars.channel} --rename=firefox-${vars.channel} firefox browser" - lint: use: @@ -429,10 +434,12 @@ tasks: - infrastructure/ tests: description: >- Smoketests for wptrunner + vars: + channel: nightly use: - wpt-base - trigger-pr - - tox-python2 + - browser-firefox command: ./tools/ci/ci_wptrunner_infrastructure.sh install: - libnss3-tools diff --git a/tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py b/tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py index a194d370181..4573541bf58 100644 --- a/tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py +++ b/tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py @@ -127,7 +127,8 @@ def test_verify_payload(): 'wpt-chrome-dev-crashtest-1', 'lint'}), ("pr_event.json", True, {".taskcluster.yml",".travis.yml","tools/ci/start.sh"}, - {'lint', + {'download-firefox-nightly', + 'lint', 'tools/ unittests (Python 2)', 'tools/ unittests (Python 3.6)', 'tools/ unittests (Python 3.8)', diff --git a/tests/wpt/web-platform-tests/tools/wpt/browser.py b/tests/wpt/web-platform-tests/tools/wpt/browser.py index bf1958fab99..c9a5353ab4f 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/browser.py +++ b/tests/wpt/web-platform-tests/tools/wpt/browser.py @@ -41,6 +41,14 @@ def handle_remove_readonly(func, path, exc): raise +def get_ext(filename): + """Get the extension from a filename with special handling for .tar.foo""" + name, ext = os.path.splitext(filename) + if name.endswith(".tar"): + ext = ".tar%s" % ext + return ext + + class Browser(object): __metaclass__ = ABCMeta @@ -48,8 +56,13 @@ class Browser(object): self.logger = logger @abstractmethod - def download(self, dest=None, channel=None): - """Download a package or installer for the browser""" + def download(self, dest=None, channel=None, rename=None): + """Download a package or installer for the browser + :param dest: Directory in which to put the dowloaded package + :param channel: Browser channel to download + :param rename: Optional name for the downloaded package; the original + extension is preserved. + """ return NotImplemented @abstractmethod @@ -133,7 +146,7 @@ class Firefox(Browser): return dest - def download(self, dest=None, channel="nightly"): + def download(self, dest=None, channel="nightly", rename=None): product = { "nightly": "firefox-nightly-latest-ssl", "beta": "firefox-beta-latest-ssl", @@ -177,6 +190,9 @@ class Firefox(Browser): if not filename: filename = "firefox.tar.bz2" + if rename: + filename = "%s%s" % (rename, get_ext(filename)) + installer_path = os.path.join(dest, filename) with open(installer_path, "wb") as f: @@ -441,7 +457,7 @@ class FirefoxAndroid(Browser): product = "firefox_android" requirements = "requirements_firefox.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): if dest is None: dest = os.pwd @@ -464,7 +480,10 @@ class FirefoxAndroid(Browser): (task_id, "public/build/geckoview-androidTest.apk")) resp.raise_for_status() - apk_path = os.path.join(dest, "geckoview-androidTest.apk") + filename = "geckoview-androidTest.apk" + if rename: + filename = "%s%s" % (rename, get_ext(filename)[1]) + apk_path = os.path.join(dest, filename) with open(apk_path, "wb") as f: f.write(resp.content) @@ -500,7 +519,7 @@ class Chrome(Browser): product = "chrome" requirements = "requirements_chrome.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -658,7 +677,7 @@ class ChromeAndroidBase(Browser): super(ChromeAndroidBase, self).__init__(logger) self.device_serial = None - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -766,7 +785,7 @@ class ChromeiOS(Browser): product = "chrome_ios" requirements = "requirements_chrome_ios.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -802,7 +821,7 @@ class Opera(Browser): self.logger.warning("Unable to find the browser binary.") return None - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -874,7 +893,7 @@ class EdgeChromium(Browser): edgedriver_name = "msedgedriver" requirements = "requirements_edge_chromium.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -975,7 +994,7 @@ class Edge(Browser): product = "edge" requirements = "requirements_edge.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -1009,7 +1028,7 @@ class InternetExplorer(Browser): product = "ie" requirements = "requirements_ie.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -1037,7 +1056,7 @@ class Safari(Browser): product = "safari" requirements = "requirements_safari.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -1107,14 +1126,15 @@ class Servo(Browser): url = "https://download.servo.org/nightly/%s/servo-latest%s" % (platform, extension) return get(url) - def download(self, dest=None, channel="nightly"): + def download(self, dest=None, channel="nightly", rename=None): if dest is None: dest = os.pwd resp = self._get(dest, channel) _, extension, _ = self.platform_components() - with open(os.path.join(dest, "servo-latest%s" % (extension,)), "w") as f: + filename = rename if rename is not None else "servo-latest" + with open(os.path.join(dest, "%s%s" % (filename, extension,)), "w") as f: f.write(resp.content) def install(self, dest=None, channel="nightly"): @@ -1161,7 +1181,7 @@ class Sauce(Browser): product = "sauce" requirements = "requirements_sauce.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -1186,7 +1206,7 @@ class WebKit(Browser): product = "webkit" requirements = "requirements_webkit.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): @@ -1252,7 +1272,7 @@ class Epiphany(Browser): product = "epiphany" requirements = "requirements_epiphany.txt" - def download(self, dest=None, channel=None): + def download(self, dest=None, channel=None, rename=None): raise NotImplementedError def install(self, dest=None, channel=None): diff --git a/tests/wpt/web-platform-tests/tools/wpt/install.py b/tests/wpt/web-platform-tests/tools/wpt/install.py index 4a368f9a4d6..6eb59f814bf 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/install.py +++ b/tests/wpt/web-platform-tests/tools/wpt/install.py @@ -43,6 +43,9 @@ def get_parser(): 'latest browser release on the selected channel.') parser.add_argument('--download-only', action="store_true", help="Download the selected component but don't install it") + parser.add_argument('--rename', action="store", default=None, + help="Filename, excluding extension for downloaded archive " + "(only with --download-only)") parser.add_argument('-d', '--destination', help='filesystem directory to place the component') return parser @@ -75,10 +78,11 @@ def run(venv, **kwargs): "No --destination argument, and no default for the environment") install(browser, kwargs["component"], destination, channel, - download_only=kwargs["download_only"]) + download_only=kwargs["download_only"], rename=kwargs["rename"]) -def install(name, component, destination, channel="nightly", logger=None, download_only=False): +def install(name, component, destination, channel="nightly", logger=None, download_only=False, + rename=None): if logger is None: import logging logger = logging.getLogger("install") @@ -90,6 +94,9 @@ def install(name, component, destination, channel="nightly", logger=None, downlo subclass = getattr(browser, name.title()) sys.stdout.write('Now installing %s %s...\n' % (name, component)) - path = getattr(subclass(logger), method)(dest=destination, channel=channel) + kwargs = {} + if download_only and rename: + kwargs["rename"] = rename + path = getattr(subclass(logger), method)(dest=destination, channel=channel, **kwargs) if path: sys.stdout.write('Binary %s as %s\n' % ("downloaded" if download_only else "installed", path,)) diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html index ac95d9e64de..440d2a88b93 100644 --- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html @@ -36,7 +36,7 @@ function doc_test(doc_type, test_fn, description) { for (let doc_type in doc_types) { doc_test(doc_type, doc => { assert_throws_js(TypeError, - _ => { doc.createElement("script").textContent = "2+2"; }); + _ => { doc.createElement("script").textContent = "2+2"; }); }, "Trusted Type assignment is blocked." ); doc_test(doc_type, doc => { @@ -45,7 +45,7 @@ for (let doc_type in doc_types) { doc.body.innerHTML = value; assert_equals(doc.body.textContent, "hello"); assert_throws_js(TypeError, - _ => { doc.body.innerHTML = "world"; }); + _ => { doc.body.innerHTML = "world"; }); }, "Trusted Type instances created in the main doc can be used."); } diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html index 9a895ffa2ad..afb2f5f7c4b 100644 --- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html @@ -9,14 +9,14 @@ test(t => { trustedTypes.createPolicy("a", {}), assert_throws_js(TypeError, - _ => trustedTypes.createPolicy("a", {}), - "Duplicate name"); + _ => trustedTypes.createPolicy("a", {}), + "Duplicate name"); trustedTypes.createPolicy("b", {}), assert_throws_js(TypeError, - _ => trustedTypes.createPolicy("d", {}), - "Invalid name."); + _ => trustedTypes.createPolicy("d", {}), + "Invalid name."); }, "TrustedTypePolicyFactory and policy list in CSP."); </script> diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html index e817cf145a2..decce535646 100644 --- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html @@ -19,7 +19,7 @@ test(t => { let def = trustedTypes.createPolicy("default", {}); assert_throws_js(TypeError, - _ => trustedTypes.createPolicy("default", {})); + _ => trustedTypes.createPolicy("default", {})); }, "policy - duplicate names"); </script> </body> diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html index 90007168a13..d98b457f6aa 100644 --- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html @@ -71,7 +71,7 @@ .then(promise_violation("require-trusted-types-for 'script'")) .then(promise_flush()); assert_throws_js(EvalError, - _ => eval('beacon="should not run"')); + _ => eval('beacon="should not run"')); assert_equals(beacon, 'never_overwritten'); flush(); return p; diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js index a0eaa3fb87d..a523acc7925 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js @@ -25,7 +25,7 @@ test(() => { ]; for (const argument of invalidArguments) { assert_throws_js(TypeError, () => WebAssembly.validate(argument), - `validate(${format_value(argument)})`); + `validate(${format_value(argument)})`); } }, "Invalid arguments"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js index cb287da4e9a..270149ec144 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js @@ -74,8 +74,8 @@ test(() => { ]; for (const invalidArgument of invalidArguments) { assert_throws_js(TypeError, - () => new WebAssembly.Global(invalidArgument), - `new Global(${format_value(invalidArgument)})`); + () => new WebAssembly.Global(invalidArgument), + `new Global(${format_value(invalidArgument)})`); } }, "Invalid descriptor argument"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js index 745c3f84951..06c6d7a88c0 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js @@ -34,7 +34,7 @@ test(() => { ]; for (const argument of invalidArguments) { assert_throws_js(TypeError, () => new WebAssembly.Instance(argument), - `new Instance(${format_value(argument)})`); + `new Instance(${format_value(argument)})`); } }, "Non-Module arguments"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js index 8bd606e3212..03eed527083 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js @@ -54,8 +54,8 @@ test(() => { ]; for (const invalidArgument of invalidArguments) { assert_throws_js(TypeError, - () => new WebAssembly.Memory(invalidArgument), - `new Memory(${format_value(invalidArgument)})`); + () => new WebAssembly.Memory(invalidArgument), + `new Memory(${format_value(invalidArgument)})`); } }, "Invalid descriptor argument"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js index 1fffb6cd4f3..b6f03c73b5d 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js @@ -39,7 +39,7 @@ test(() => { ]; for (const argument of invalidArguments) { assert_throws_js(TypeError, () => new WebAssembly.Module(argument), - `new Module(${format_value(argument)})`); + `new Module(${format_value(argument)})`); } }, "Invalid arguments"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js index 298d89604cf..8c215d17bd2 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js @@ -43,7 +43,7 @@ test(() => { ]; for (const argument of invalidArguments) { assert_throws_js(TypeError, () => WebAssembly.Module.customSections(argument, ""), - `customSections(${format_value(argument)})`); + `customSections(${format_value(argument)})`); } }, "Non-Module arguments"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js index 83f97dd67a1..1329c6a6021 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js @@ -52,7 +52,7 @@ test(() => { ]; for (const argument of invalidArguments) { assert_throws_js(TypeError, () => WebAssembly.Module.exports(argument), - `exports(${format_value(argument)})`); + `exports(${format_value(argument)})`); } }, "Non-Module arguments"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js index 91e4be33aca..9a7d6115986 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js @@ -58,7 +58,7 @@ test(() => { ]; for (const argument of invalidArguments) { assert_throws_js(TypeError, () => WebAssembly.Module.imports(argument), - `imports(${format_value(argument)})`); + `imports(${format_value(argument)})`); } }, "Non-Module arguments"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js index c42a446a75d..b1aeaf1a65d 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js @@ -7,7 +7,7 @@ function assert_equal_to_array(table, expected, message) { assert_equals(table.get(i), expected[i], `${message}: table.get(${i} of ${expected.length})`); } assert_throws_js(RangeError, () => table.get(expected.length), - `${message}: table.get(${expected.length} of ${expected.length})`); + `${message}: table.get(${expected.length} of ${expected.length})`); assert_throws_js(RangeError, () => table.get(expected.length + 1), - `${message}: table.get(${expected.length + 1} of ${expected.length})`); + `${message}: table.get(${expected.length + 1} of ${expected.length})`); } diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js index a494a9e559b..5c9a6f13d91 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js @@ -48,8 +48,8 @@ test(() => { ]; for (const invalidArgument of invalidArguments) { assert_throws_js(TypeError, - () => new WebAssembly.Table(invalidArgument), - `new Table(${format_value(invalidArgument)})`); + () => new WebAssembly.Table(invalidArgument), + `new Table(${format_value(invalidArgument)})`); } }, "Invalid descriptor argument"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js index 175f30fbcad..4e0a5f8c104 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js @@ -150,7 +150,7 @@ test(() => { ]; for (const argument of invalidArguments) { assert_throws_js(TypeError, () => table.set(0, argument), - `set(${format_value(argument)})`); + `set(${format_value(argument)})`); } assert_equal_to_array(table, [null]); }, "Setting non-function"); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html index 40cb2634e41..8d45cd65199 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html @@ -211,6 +211,54 @@ promise_test(async t => { const div = createDiv(t); div.style.opacity = '0.1'; + const animA = div.animate( + { opacity: '0.2', composite: 'add' }, + { duration: 1, fill: 'forwards' } + ); + const animB = div.animate( + { opacity: '0.2', composite: 'add' }, + { duration: 1, fill: 'forwards' } + ); + const animC = div.animate( + { opacity: '0.3', composite: 'add' }, + { duration: 1, fill: 'forwards' } + ); + + animA.persist(); + animB.persist(); + await animB.finished; + + // The error cases are similar to the above test with one additional case; + // verifying that the animations composite on top of the correct underlying + // base style. + // + // Expected result: + // + // <underlying> + animA + animB = 0.5 + // + // Additional error results: + // + // <underlying> + animA + animB + animC + animA + animB = 1.0 (saturates) + // (Added to the computed value instead of underlying value when + // resolving) + // + // animA + animB = 0.4 + // Failed to composite on top of underlying value. + // + + animB.commitStyles(); + + animA.cancel(); + animB.cancel(); + animC.cancel(); + + assert_numeric_style_equals(getComputedStyle(div).opacity, 0.5); +}, 'Commit composites on top of the underlying value'); + +promise_test(async t => { + const div = createDiv(t); + div.style.opacity = '0.1'; + // Setup animation const animation = div.animate( { opacity: 0.2 }, diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onremove.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onremove.html new file mode 100644 index 00000000000..d7709949f2a --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onremove.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Animation.onremove</title> +<link rel="help" href="https://drafts.csswg.org/web-animations/#dom-animation-onremove"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../testcommon.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +async_test(t => { + const div = createDiv(t); + const animA = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' }); + const animB = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' }); + + let finishedTimelineTime = null; + animB.onfinish = event => { + finishedTimelineTime = event.timelineTime; + }; + + animA.onremove = t.step_func_done(event => { + assert_equals(animA.replaceState, 'removed'); + assert_equals(event.currentTime, 1); + assert_true(finishedTimelineTime != null, 'finished event fired'); + assert_true(event.timelineTime == finishedTimelineTime, + 'timeline time is set'); + }); + +}, 'onremove event is fired when replaced animation is removed.'); + +promise_test(async t => { + const div = createDiv(t); + const animA = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' }); + const animB = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' }); + const animC = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' }); + const animD = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' }); + + const removed = []; + + animA.onremove = () => { removed.push('A'); }; + animB.onremove = () => { removed.push('B'); }; + animC.onremove = () => { removed.push('C'); }; + + animD.onremove = event => { + assert_unreached('onremove event should not be fired'); + }; + + await waitForAnimationFrames(2); + + assert_equals(removed.join(''), 'ABC'); + +}, 'onremove events are fired in the correct order'); + +</script> +</body> + diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html index 74d0724ef42..1d1bd5fd89a 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html @@ -74,9 +74,9 @@ test(t => { animation.playbackRate = -1; assert_throws_dom('InvalidStateError', - () => { animation.pause(); }, - 'Expect InvalidStateError exception on calling pause() ' + - 'from idle with a negative playbackRate and ' + + () => { animation.pause(); }, + 'Expect InvalidStateError exception on calling pause() ' + + 'from idle with a negative playbackRate and ' + 'infinite-duration animation'); }, 'pause() from idle with a negative playbackRate and endless effect'); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html index d29b67b7992..6c5d604b1e4 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html @@ -22,9 +22,9 @@ promise_test(t => { animation.playbackRate = -1; assert_throws_dom('InvalidStateError', - () => { animation.play(); }, - 'Expected InvalidStateError exception on calling play() ' + - 'with a negative playbackRate and infinite-duration ' + + () => { animation.play(); }, + 'Expected InvalidStateError exception on calling play() ' + + 'with a negative playbackRate and infinite-duration ' + 'animation'); }); }, 'play() throws when seeking an infinite-duration animation played in ' + diff --git a/tests/wpt/web-platform-tests/webmessaging/with-ports/027.html b/tests/wpt/web-platform-tests/webmessaging/with-ports/027.html index 78ea225eb75..71583512581 100644 --- a/tests/wpt/web-platform-tests/webmessaging/with-ports/027.html +++ b/tests/wpt/web-platform-tests/webmessaging/with-ports/027.html @@ -19,8 +19,8 @@ test(() => { channel[1] = channel.port2; channel.length = 2; assert_throws_js(TypeError, - () => { postMessage('', '*', channel) }, - 'Old-style WebIDL arrays must throw a type error'); + () => { postMessage('', '*', channel) }, + 'Old-style WebIDL arrays must throw a type error'); }, "Old-style array objects"); </script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html b/tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html index be6e3c6e59d..ac27c5139cc 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html @@ -181,7 +181,7 @@ pc.removeTrack(sender); pc.close(); assert_throws_dom('InvalidStateError', () => - dtmfSender.insertDTMF('123')); + dtmfSender.insertDTMF('123')); }); }, 'insertDTMF() after remove and close should reject'); diff --git a/tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js b/tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js index 1442d821148..31febe9d9fd 100644 --- a/tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js +++ b/tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js @@ -51,7 +51,7 @@ promise_test(async () => { const wss = new WebSocketStream(ECHOURL); await wss.connection; assert_throws_js(TypeError, () => wss.close(true), - 'close should throw a TypeError'); + 'close should throw a TypeError'); }, 'close(true) should throw a TypeError'); promise_test(async () => { @@ -59,7 +59,7 @@ promise_test(async () => { await wss.connection; const reason = '.'.repeat(124); assert_throws_dom('SyntaxError', () => wss.close({ reason }), - 'close should throw a TypeError'); + 'close should throw a TypeError'); }, 'close() with an overlong reason should throw'); promise_test(t => { @@ -77,7 +77,7 @@ for (const invalidCode of [999, 1001, 2999, 5000]) { const wss = new WebSocketStream(ECHOURL); await wss.connection; assert_throws_dom('InvalidAccessError', () => wss.close({ code: invalidCode }), - 'close should throw a TypeError'); + 'close should throw a TypeError'); }, `close() with invalid code ${invalidCode} should throw`); } diff --git a/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html b/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html index 3cbbd6ca3db..1f812d3a1f0 100644 --- a/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html +++ b/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html @@ -38,9 +38,6 @@ const fakeDeviceInitParams = { // |refSpaceName| - XRReferenceSpaceType - either 'local', 'local-floor' or 'viewer'. let testFunctionGenerator = function(ray, entityTypes, expectedPoses, refSpaceName) { const testFunction = function(session, fakeDeviceController, t) { - assert_equals(session.mode, 'immersive-ar'); - assert_not_equals(session.environmentBlendMode, 'opaque'); - return Promise.all([ session.requestReferenceSpace('local'), session.requestReferenceSpace('viewer'), @@ -109,6 +106,9 @@ const localFloorBasedTestFunctionGenerator = function(ray, entityTypes, expected return testFunctionGenerator(ray, entityTypes, expectedPoses, 'local-floor'); }; +// All test cases require local-floor and hit-test. +const sessionInit = { 'requiredFeatures': ['local-floor', 'hit-test'] }; + // Pose of the first expected hit test result - straight ahead of the viewer, viewer-facing. const pose_1 = { position: {x: 0.0, y: 1.0, z: -2.5, w: 1.0}, @@ -125,11 +125,11 @@ const pose_1 = { xr_session_promise_test( "Ensures subscription to hit test works with viewer space - straight ahead - plane", viewerBasedTestFunctionGenerator(new XRRay(), ["plane"], [pose_1]), - fakeDeviceInitParams, 'immersive-ar', { 'requiredFeatures': ['local-floor'] }); + fakeDeviceInitParams, 'immersive-ar', sessionInit); xr_session_promise_test("Ensures subscription to hit test works with viewer space - straight up - plane - no results", viewerBasedTestFunctionGenerator(new XRRay({}, {x: 0.0, y: 1.0, z : 0.0}), ["plane"], []), - fakeDeviceInitParams, 'immersive-ar', { 'requiredFeatures': ['local-floor'] }); + fakeDeviceInitParams, 'immersive-ar', sessionInit); const pose_2 = { position: {x: 0.0, y: 2.0, z: 0.0, w: 1.0}, @@ -142,8 +142,7 @@ const pose_2 = { xr_session_promise_test("Ensures subscription to hit test works with viewer space - straight up - point", viewerBasedTestFunctionGenerator(new XRRay({}, {x: 0.0, y: 1.0, z : 0.0}), ["point"], [pose_2]), - fakeDeviceInitParams, - 'immersive-ar', { 'requiredFeatures': ['local-floor'] }); + fakeDeviceInitParams, 'immersive-ar', sessionInit); const pose_3 = { position: {x: 0.0, y: 0.0, z: -2.5, w: 1.0}, @@ -156,8 +155,7 @@ const pose_3 = { xr_session_promise_test("Ensures subscription to hit test works with local space", localBasedTestFunctionGenerator(new XRRay(), ["plane"], [pose_3]), - fakeDeviceInitParams, - 'immersive-ar', { 'requiredFeatures': ['local-floor'] }); + fakeDeviceInitParams, 'immersive-ar', sessionInit); const pose_4 = { position: {x: 0.0, y: 0.25, z: -2.5, w: 1.0}, @@ -170,7 +168,6 @@ const pose_4 = { xr_session_promise_test("Ensures subscription to hit test works with local-floor space", localFloorBasedTestFunctionGenerator(new XRRay(), ["plane"], [pose_4]), - fakeDeviceInitParams, - 'immersive-ar', { 'requiredFeatures': ['local-floor'] }); + fakeDeviceInitParams, 'immersive-ar', sessionInit); </script> diff --git a/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states.https.html b/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states.https.html new file mode 100644 index 00000000000..98947da2637 --- /dev/null +++ b/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states.https.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/webxr_util.js"></script> +<script src="../resources/webxr_test_asserts.js"></script> +<script src="../resources/webxr_test_constants.js"></script> +<script src="../resources/webxr_test_constants_fake_world.js"></script> +<canvas /> + +<script> + +const fakeDeviceInitParams = { + supportedModes: ["immersive-ar"], + views: VALID_VIEWS, + supportedFeatures: ALL_FEATURES, +}; + +// |shouldSucceed| - true if the hit test request is expected to succeed, false otherwise +// |endSession| - true if the test case should call session.end() prior to requesting hit test +const testFunctionGenerator = function(shouldSucceed, endSession) { + const testFunction = function(session, fakeDeviceController, t) { + session.requestReferenceSpace('viewer').then((viewerRefSpace) => { + + const hitTestOptionsInit = { + space: viewerRefSpace, + offsetRay: new XRRay(), + }; + + if(endSession) { + session.end(); + } + + return session.requestHitTestSource(hitTestOptionsInit).then((hitTestSource) => { + t.step(() => { + assert_true(shouldSucceed, + "`requestHitTestSource` succeeded when it was expected to fail"); + }); + }).catch((error) => { + t.step(() => { + assert_false(shouldSucceed, + "`requestHitTestSource` failed when it was expected to succeed, error: " + error); + }); + }); + }); + }; + + return testFunction; +}; + +xr_session_promise_test("Hit test subscription succeeds if the feature was requested", + testFunctionGenerator(/*shouldSucceed=*/true, /*endSession=*/false), + fakeDeviceInitParams, + 'immersive-ar', { 'requiredFeatures': ['hit-test'] }); + +xr_session_promise_test("Hit test subscription fails if the feature was not requested", + testFunctionGenerator(/*shouldSucceed=*/false, /*endSession=*/false), + fakeDeviceInitParams, + 'immersive-ar', {}); + +xr_session_promise_test("Hit test subscription fails if the feature was requested but the session already ended", + testFunctionGenerator(/*shouldSucceed=*/false, /*endSession=*/true), + fakeDeviceInitParams, + 'immersive-ar', { 'requiredFeatures': ['hit-test'] }); + +</script> diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js index 553a8127fcf..d5ee1e7391c 100644 --- a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js +++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js @@ -126,6 +126,7 @@ const ALL_FEATURES = [ "local-floor", "bounded-floor", "unbounded", + "hit-test", ]; const TRACKED_IMMERSIVE_DEVICE = { diff --git a/tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html b/tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html index 5347891d418..6298dd934e1 100644 --- a/tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html +++ b/tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html @@ -6,23 +6,23 @@ test(() => { assert_throws_js(Error, - function() { - new SharedWorker({toString:function(){throw new Error()}}, "name") }, - "toString exception not propagagted"); + function() { + new SharedWorker({toString:function(){throw new Error()}}, "name") }, + "toString exception not propagated"); }, "Test toString exception propagated correctly."); test(() => { assert_throws_js(RangeError, - function() { - var foo = {toString:function(){new Worker(foo)}} - new SharedWorker(foo, name); }, - "Trying to create workers recursively did not result in an exception."); + function() { + var foo = {toString:function(){new Worker(foo)}} + new SharedWorker(foo, name); }, + "Trying to create workers recursively did not result in an exception."); }, "Test recursive worker creation results in exception."); test(() => { assert_throws_js(TypeError, - function() { new SharedWorker(); }, - "Invoking SharedWorker constructor without arguments did not result in an exception."); + function() { new SharedWorker(); }, + "Invoking SharedWorker constructor without arguments did not result in an exception."); }, "Test SharedWorker creation without arguments results in exception."); test(() => { diff --git a/tests/wpt/web-platform-tests/workers/Worker-formdata.any.js b/tests/wpt/web-platform-tests/workers/Worker-formdata.any.js index f14d4ff41a2..389d34b1c31 100644 --- a/tests/wpt/web-platform-tests/workers/Worker-formdata.any.js +++ b/tests/wpt/web-platform-tests/workers/Worker-formdata.any.js @@ -14,6 +14,6 @@ test(() => { formData.append('key', blob, 'filename'); assert_throws_dom("DataCloneError", - function() { postMessage(formData) }, - "Trying to clone formdata inside a postMessage results in an exception." ); + function() { postMessage(formData) }, + "Trying to clone formdata inside a postMessage results in an exception." ); },'Test FormData interface object'); diff --git a/tests/wpt/web-platform-tests/workers/Worker-multi-port.html b/tests/wpt/web-platform-tests/workers/Worker-multi-port.html index 725745b0ea4..587176e9fc1 100644 --- a/tests/wpt/web-platform-tests/workers/Worker-multi-port.html +++ b/tests/wpt/web-platform-tests/workers/Worker-multi-port.html @@ -39,45 +39,45 @@ async_test(function(t) { test(() => { var worker = new Worker("support/Worker-thread-multi-port.js"); assert_throws_js(TypeError, - function() { worker.postMessage(); }, - 'Empty postMessage should throw exception.'); + function() { worker.postMessage(); }, + 'Empty postMessage should throw exception.'); }, 'Test empty postMessage throws exception.'); test(() => { var worker = new Worker("support/Worker-thread-multi-port.js"); var channel = new MessageChannel(); assert_throws_js(TypeError, - function() { worker.postMessage("null port", - [channel.port1, null, - channel.port2]); }, - 'postMessage with null ports should throw exception.'); + function() { worker.postMessage("null port", + [channel.port1, null, + channel.port2]); }, + 'postMessage with null ports should throw exception.'); }, 'Test postMessage with null ports throws exception.'); test(() => { var worker = new Worker("support/Worker-thread-multi-port.js") var channel = new MessageChannel(); assert_throws_dom('DataCloneError', - function() { worker.postMessage("notAPort", - [channel.port1, {}, - channel.port2]); }, - 'postMessage with incorrect ports should throw exception.'); + function() { worker.postMessage("notAPort", + [channel.port1, {}, + channel.port2]); }, + 'postMessage with incorrect ports should throw exception.'); }, 'Test postMessage with incorrect ports throws exception'); test(() => { var worker = new Worker("support/Worker-thread-multi-port.js"); assert_throws_dom('DataCloneError', - function() { worker.postMessage("notASequence", [{length: 3}]) }, - 'postMessage without sequence should throw exception.'); + function() { worker.postMessage("notASequence", [{length: 3}]) }, + 'postMessage without sequence should throw exception.'); }, 'Test postMessage without sequence throws exception'); async_test(function(t) { var worker = new Worker("support/Worker-thread-multi-port.js"); var channel = new MessageChannel(); assert_throws_dom('DataCloneError', - function() { worker.postMessage("notAPort", - [channel.port1, {}, - channel.port2]); }, - 'postMessage with incorrect ports should throw exception.'); + function() { worker.postMessage("notAPort", + [channel.port1, {}, + channel.port2]); }, + 'postMessage with incorrect ports should throw exception.'); worker.onmessage = t.step_func_done(function(evt) { assert_true(evt.data.startsWith('PASS')); }); diff --git a/tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html b/tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html index 524a0982a9e..6d6843b77b6 100644 --- a/tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html +++ b/tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html @@ -6,9 +6,9 @@ test(() => { assert_throws_js(Error, - function() { - new Worker({toString:function(){throw new Error()}})}, - 'toString exception should be propagated'); + function() { + new Worker({toString:function(){throw new Error()}})}, + 'toString exception should be propagated'); }, 'Test toString propagation exception.'); test(() => { @@ -23,9 +23,9 @@ test(() => { test(() => { assert_throws_js(TypeError, - function() { new Worker(); }, - 'invoking Worker constructor without arguments should result' + - 'in an exception.') + function() { new Worker(); }, + 'invoking Worker constructor without arguments should result ' + + 'in an exception.') }, 'Test worker creation with no arguments'); async_test(t => { @@ -38,9 +38,9 @@ async_test(t => { test(() => { assert_throws_dom("SyntaxError", - function() { var worker = new Worker('http://invalid:123$'); }, - 'Invoking Worker constructor with invalid script URL should' + - 'result in an exception.'); + function() { var worker = new Worker('http://invalid:123$'); }, + 'Invoking Worker constructor with invalid script URL should ' + + 'result in an exception.'); }, 'Test invalid script URL.'); async_test(t => { diff --git a/tests/wpt/web-platform-tests/workers/modules/shared-worker-import-data-url.any.js b/tests/wpt/web-platform-tests/workers/modules/shared-worker-import-data-url.any.js new file mode 100644 index 00000000000..81df965b9e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/workers/modules/shared-worker-import-data-url.any.js @@ -0,0 +1,24 @@ +// META: global=!worker +// META: script=/workers/modules/resources/import-test-cases.js + +// Imports |testCase.scriptURL| on a shared worker loaded from a data URL, +// and waits until the list of imported modules is sent from the worker. Passes +// if the list is equal to |testCase.expectation|. +function import_data_url_test(testCase) { + promise_test(async () => { + // The Access-Control-Allow-Origin header is necessary because a worker + // loaded from a data URL has a null origin and import() on the worker + // without the header is blocked. + const importURL = new URL(testCase.scriptURL, location.href) + + '?pipe=header(Access-Control-Allow-Origin, *)'; + const dataURL = `data:text/javascript,import "${importURL}";`; + + const worker = new SharedWorker(dataURL, { type: 'module'}); + worker.port.postMessage('Send message for tests from main script.'); + const msgEvent = + await new Promise(resolve => worker.port.onmessage = resolve); + assert_array_equals(msgEvent.data, testCase.expectation); + }, testCase.description); +} + +testCases.forEach(import_data_url_test); |