diff options
author | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2019-10-01 10:52:57 +0000 |
---|---|---|
committer | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2019-10-01 13:54:31 +0000 |
commit | 38ab56be1a5a5850d51b85b19ed730f12d294f6c (patch) | |
tree | c24ee2fe0b252985a03d87c6f1546a6642ac8e06 | |
parent | 1b6715158dd9f04d63545f0c47a4605af3966aa9 (diff) | |
download | servo-38ab56be1a5a5850d51b85b19ed730f12d294f6c.tar.gz servo-38ab56be1a5a5850d51b85b19ed730f12d294f6c.zip |
Update web-platform-tests to revision f1e1bd6bfa544af8059ff8ef79d622281f9ec0a8
64 files changed, 5153 insertions, 163 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini index a9e46713244..76b398963ae 100644 --- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini @@ -7,7 +7,7 @@ expected: FAIL [Opening a blob URL in a new window immediately before revoking it works.] - expected: TIMEOUT + expected: FAIL [Opening a blob URL in a noopener about:blank window immediately before revoking it works.] expected: FAIL diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini index 6a3af4e2ece..947e223fb28 100644 --- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini @@ -14,9 +14,6 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL - [Revoke blob URL after calling fetch, fetch should succeed] - expected: FAIL - [url-with-fetch.any.html] [Untitled] diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 2f8103575ef..7182b446c23 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -14251,6 +14251,18 @@ {} ] ], + "payment-handler/change-shipping-address-manual.https.html": [ + [ + "payment-handler/change-shipping-address-manual.https.html", + {} + ] + ], + "payment-handler/change-shipping-option-manual.https.html": [ + [ + "payment-handler/change-shipping-option-manual.https.html", + {} + ] + ], "payment-handler/payment-request-event-manual.https.html": [ [ "payment-handler/payment-request-event-manual.https.html", @@ -127921,6 +127933,90 @@ {} ] ], + "css/css-grid/subgrid/repeat-auto-fill-001.html": [ + [ + "css/css-grid/subgrid/repeat-auto-fill-001.html", + [ + [ + "/css/css-grid/subgrid/repeat-auto-fill-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/repeat-auto-fill-002.html": [ + [ + "css/css-grid/subgrid/repeat-auto-fill-002.html", + [ + [ + "/css/css-grid/subgrid/repeat-auto-fill-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/repeat-auto-fill-003.html": [ + [ + "css/css-grid/subgrid/repeat-auto-fill-003.html", + [ + [ + "/css/css-grid/subgrid/repeat-auto-fill-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/repeat-auto-fill-004.html": [ + [ + "css/css-grid/subgrid/repeat-auto-fill-004.html", + [ + [ + "/css/css-grid/subgrid/repeat-auto-fill-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/repeat-auto-fill-005.html": [ + [ + "css/css-grid/subgrid/repeat-auto-fill-005.html", + [ + [ + "/css/css-grid/subgrid/repeat-auto-fill-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/repeat-auto-fill-006.html": [ + [ + "css/css-grid/subgrid/repeat-auto-fill-006.html", + [ + [ + "/css/css-grid/subgrid/repeat-auto-fill-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/subgrid/repeat-auto-fill-007.html": [ + [ + "css/css-grid/subgrid/repeat-auto-fill-007.html", + [ + [ + "/css/css-grid/subgrid/repeat-auto-fill-007-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/subgrid/subgrid-item-block-size-001.html": [ [ "css/css-grid/subgrid/subgrid-item-block-size-001.html", @@ -250290,6 +250386,18 @@ "css/css-grid/subgrid/orthogonal-writing-mode-004-ref.html": [ [] ], + "css/css-grid/subgrid/repeat-auto-fill-001-ref.html": [ + [] + ], + "css/css-grid/subgrid/repeat-auto-fill-004-ref.html": [ + [] + ], + "css/css-grid/subgrid/repeat-auto-fill-005-ref.html": [ + [] + ], + "css/css-grid/subgrid/repeat-auto-fill-007-ref.html": [ + [] + ], "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [ [] ], @@ -273882,6 +273990,9 @@ "interfaces/webrtc-dscp.idl": [ [] ], + "interfaces/webrtc-identity.idl": [ + [] + ], "interfaces/webrtc-stats.idl": [ [] ], @@ -275679,6 +275790,12 @@ "payment-handler/app-change-payment-method.js": [ [] ], + "payment-handler/app-change-shipping-address.js": [ + [] + ], + "payment-handler/app-change-shipping-option.js": [ + [] + ], "payment-handler/app-supports-shipping-contact-delegation.js": [ [] ], @@ -308474,6 +308591,144 @@ } ] ], + "compression/decompression-empty-input.any.js": [ + [ + "compression/decompression-empty-input.any.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-empty-input.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-empty-input.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-empty-input.any.worker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ] + ], + "compression/decompression-split-chunk.any.js": [ + [ + "compression/decompression-split-chunk.any.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-split-chunk.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-split-chunk.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-split-chunk.any.worker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ] + ], + "compression/decompression-uint8array-output.any.js": [ + [ + "compression/decompression-uint8array-output.any.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-uint8array-output.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-uint8array-output.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ], + [ + "compression/decompression-uint8array-output.any.worker.html", + { + "script_metadata": [ + [ + "global", + "worker" + ] + ] + } + ] + ], "console/console-is-a-namespace.any.js": [ [ "console/console-is-a-namespace.any.html", @@ -311807,6 +312062,18 @@ {} ] ], + "cookies/samesite/about-blank-subresource.https.html": [ + [ + "cookies/samesite/about-blank-subresource.https.html", + {} + ] + ], + "cookies/samesite/about-blank-toplevel.https.html": [ + [ + "cookies/samesite/about-blank-toplevel.https.html", + {} + ] + ], "cookies/samesite/fetch.https.html": [ [ "cookies/samesite/fetch.https.html", @@ -314110,6 +314377,12 @@ {} ] ], + "css/css-box/animation/margin-interpolation.html": [ + [ + "css/css-box/animation/margin-interpolation.html", + {} + ] + ], "css/css-box/animation/padding-interpolation.html": [ [ "css/css-box/animation/padding-interpolation.html", @@ -314524,6 +314797,12 @@ {} ] ], + "css/css-color/animation/opacity-interpolation.html": [ + [ + "css/css-color/animation/opacity-interpolation.html", + {} + ] + ], "css/css-color/color-function-parsing.html": [ [ "css/css-color/color-function-parsing.html", @@ -314886,6 +315165,12 @@ {} ] ], + "css/css-flexbox/animation/order-interpolation.html": [ + [ + "css/css-flexbox/animation/order-interpolation.html", + {} + ] + ], "css/css-flexbox/display_flex_exist.html": [ [ "css/css-flexbox/display_flex_exist.html", @@ -319144,6 +319429,12 @@ {} ] ], + "css/css-masking/animations/clip-path-interpolation.html": [ + [ + "css/css-masking/animations/clip-path-interpolation.html", + {} + ] + ], "css/css-masking/clip-path/interpolation.html": [ [ "css/css-masking/clip-path/interpolation.html", @@ -319552,6 +319843,12 @@ {} ] ], + "css/css-overflow/overflow-codependent-scrollbars.html": [ + [ + "css/css-overflow/overflow-codependent-scrollbars.html", + {} + ] + ], "css/css-overflow/overflow-inline-transform-relative.html": [ [ "css/css-overflow/overflow-inline-transform-relative.html", @@ -322300,6 +322597,12 @@ {} ] ], + "css/css-tables/animations/border-spacing-interpolation.html": [ + [ + "css/css-tables/animations/border-spacing-interpolation.html", + {} + ] + ], "css/css-tables/border-spacing-included-in-sizes-001.html": [ [ "css/css-tables/border-spacing-included-in-sizes-001.html", @@ -414413,6 +414716,23 @@ {} ] ], + "webrtc-identity/idlharness.https.window.js": [ + [ + "webrtc-identity/idlharness.https.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/WebIDLParser.js" + ], + [ + "script", + "/resources/idlharness.js" + ] + ] + } + ] + ], "webrtc-quic/RTCQuicStream.https.html": [ [ "webrtc-quic/RTCQuicStream.https.html", @@ -420374,6 +420694,12 @@ {} ] ], + "webxr/xrReferenceSpace_originOffset_viewer.https.html": [ + [ + "webxr/xrReferenceSpace_originOffset_viewer.https.html", + {} + ] + ], "webxr/xrRigidTransform_constructor.https.html": [ [ "webxr/xrRigidTransform_constructor.https.html", @@ -446181,7 +446507,7 @@ "support" ], ".taskcluster.yml": [ - "dffccbb7971382d599ff622fb31a949fa570fa49", + "b23cc93e633021686192b5cc1acbb7d8b6b3fe96", "support" ], ".well-known/README.md": [ @@ -458201,7 +458527,7 @@ "reftest" ], "compression/decompression-bad-chunks.any.js": [ - "8f44ffd902f0838cecf72be50245ab4c683fc09c", + "b8954905cbfce79893152e32200cc16e6c3f815b", "testharness" ], "compression/decompression-constructor-error.any.js": [ @@ -458212,6 +458538,18 @@ "11d8736cb225d6ce575677dcdb70b0a19dd4f65f", "testharness" ], + "compression/decompression-empty-input.any.js": [ + "ff4cff522a4a7ba0ba3eedb79c4d39b0752c9caf", + "testharness" + ], + "compression/decompression-split-chunk.any.js": [ + "a54541657af089e884fe995383796c5a637545d3", + "testharness" + ], + "compression/decompression-uint8array-output.any.js": [ + "06c421a82071651429e831daaa20e945e8011efb", + "testharness" + ], "conformance-checkers/META.yml": [ "978b5c85721c28f267ec21ceb620017514441385", "support" @@ -480868,6 +481206,14 @@ "d5c9b8ada3f1bce6ebfe35efd0d6f288aa5ca5e3", "testharness" ], + "cookies/samesite/about-blank-subresource.https.html": [ + "0a19f30d34758e0b9865b2300e5658ec6efbfe0c", + "testharness" + ], + "cookies/samesite/about-blank-toplevel.https.html": [ + "3a4dde7673d13dec2daf7f83b3082a5589e2e688", + "testharness" + ], "cookies/samesite/fetch.https.html": [ "4daf357004a71cea5b0e58a44bf8919d96ad7ce8", "testharness" @@ -480909,7 +481255,7 @@ "support" ], "cookies/samesite/resources/iframe-subresource-report.html": [ - "fad80534f22bdc63e7a4827cef07b17335134b71", + "1dceb4e43681c81b6c1b8877fd2d9f2b34391a02", "support" ], "cookies/samesite/resources/navigate.html": [ @@ -546112,6 +546458,10 @@ "dde409360faf79a301c3ae3ea34a995d154d7bb4", "support" ], + "css/css-box/animation/margin-interpolation.html": [ + "088836cbbd18d0daf203de7dbacfb65733e35813", + "testharness" + ], "css/css-box/animation/padding-interpolation.html": [ "3bf284117960fe78300e95140244d309f8f439a4", "testharness" @@ -546520,6 +546870,10 @@ "4b39fdcf796083ace917f0a021a697c6e4eb7214", "testharness" ], + "css/css-color/animation/opacity-interpolation.html": [ + "ce26a8c79939e1d35f5ea35686fc272aad765914", + "testharness" + ], "css/css-color/blacktext-ref.html": [ "ddfa9100cbef6094375df8b40eeb9673e690d4f7", "support" @@ -551276,6 +551630,10 @@ "da69a06891ee2d16f91db5d839e14aa2d876b604", "testharness" ], + "css/css-flexbox/animation/order-interpolation.html": [ + "8096fc3db661078029f991a45f789f439108849c", + "testharness" + ], "css/css-flexbox/anonymous-flex-item-001.html": [ "3e749d43f76981a5cc0b372c7ba0c364c350b6b2", "reftest" @@ -565808,6 +566166,50 @@ "4a0edd7e6d5aefe06fc0d9989c84d3871ea61a14", "reftest" ], + "css/css-grid/subgrid/repeat-auto-fill-001-ref.html": [ + "bbf5d374589b29c9c0dcb04b941160a94130b3a1", + "support" + ], + "css/css-grid/subgrid/repeat-auto-fill-001.html": [ + "643cde377e66416dbc4047124d1157b0679eb8f5", + "reftest" + ], + "css/css-grid/subgrid/repeat-auto-fill-002.html": [ + "38d0bea0d08e6e1b1691a595ac9a1c2dfea59adb", + "reftest" + ], + "css/css-grid/subgrid/repeat-auto-fill-003.html": [ + "b58799bd86bd1ad1f7875a6c9da7e8247136e6f8", + "reftest" + ], + "css/css-grid/subgrid/repeat-auto-fill-004-ref.html": [ + "07ba960200b1fe9ba69448da8e5e9ff1ebf547fd", + "support" + ], + "css/css-grid/subgrid/repeat-auto-fill-004.html": [ + "beacff588a2c6209ee89b8715eccd374b1847ba8", + "reftest" + ], + "css/css-grid/subgrid/repeat-auto-fill-005-ref.html": [ + "95976e8216d8be0cb14e57fa4d9d06600c82c98f", + "support" + ], + "css/css-grid/subgrid/repeat-auto-fill-005.html": [ + "0cf16d47a27e1105d12ef595e8864d46793e2790", + "reftest" + ], + "css/css-grid/subgrid/repeat-auto-fill-006.html": [ + "4a16d8e4a9b9c476fce6b8e2bb653dcb59431029", + "reftest" + ], + "css/css-grid/subgrid/repeat-auto-fill-007-ref.html": [ + "9bc2eeff1c7dd57873058439c9072eaa16f9d441", + "support" + ], + "css/css-grid/subgrid/repeat-auto-fill-007.html": [ + "949d8296fef40637101cb8bdb24f18710e4e3854", + "reftest" + ], "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [ "d264a3455a6c580976d2519ab4e0eb206b1164bf", "support" @@ -567640,6 +568042,10 @@ "7f92755b092845d3d550568e0572453801451f3d", "support" ], + "css/css-masking/animations/clip-path-interpolation.html": [ + "21c34f1f2b75ec7345a97b00db62a49b038cf026", + "testharness" + ], "css/css-masking/clip-path-svg-content/clip-path-clip-nested-twice.svg": [ "269e8feed2d3c21774a7c94729c3551899ce4d92", "reftest" @@ -570712,6 +571118,10 @@ "2ed8d2687a33608e0e70884ad2ea59330d2b09e3", "reftest" ], + "css/css-overflow/overflow-codependent-scrollbars.html": [ + "eb0e4f5ea2ed9a97c0931c2c53de5e62e72ba1dd", + "testharness" + ], "css/css-overflow/overflow-inline-transform-relative.html": [ "4df7b6389432cc6c65bae3fe3b5b9c2f00ba7bde", "testharness" @@ -578424,6 +578834,10 @@ "91439a69c9b1765cdbaf7e9614180d080ab32907", "reftest" ], + "css/css-tables/animations/border-spacing-interpolation.html": [ + "02e1cc62296501417b7ce8d02136b57e5342f332", + "testharness" + ], "css/css-tables/anonymous-table-cell-margin-collapsing.html": [ "23b467ebacc983122a632f4d5971c8daca569420", "reftest" @@ -649657,11 +650071,11 @@ "support" ], "interfaces/css-animation-worklet.idl": [ - "4aca84e5a024efdc2d3e674540bf2091758551c9", + "2c46cc7c94c65d6928db9f4e90a57c6188815d8e", "support" ], "interfaces/css-animations.idl": [ - "f87015f6a87fccc0accab30920cd8371eee99e63", + "9b34bde2330497afe6628da8e01946c27cf89821", "support" ], "interfaces/css-conditional.idl": [ @@ -649713,7 +650127,7 @@ "support" ], "interfaces/css-transitions.idl": [ - "be5a635112b83cb4315006ac5a86ae7edc7fa43c", + "15ce4b30f211012b5fd9e6a713d92c0ea1045a54", "support" ], "interfaces/css-typed-om.idl": [ @@ -649745,7 +650159,7 @@ "support" ], "interfaces/entries-api.idl": [ - "548aec13ab70eeedb9ba01ff96e0b3cb1d783510", + "52693138a4cd9d86f9a48a8e5300a8006298defb", "support" ], "interfaces/event-timing.idl": [ @@ -649945,7 +650359,7 @@ "support" ], "interfaces/presentation-api.idl": [ - "c1e566538aa0211ecebbd8d177765fc1dd02c2ce", + "dfaa022b95249eb020e6fb8e0495156a8c0744ee", "support" ], "interfaces/proximity.idl": [ @@ -650009,7 +650423,7 @@ "support" ], "interfaces/shape-detection-api.idl": [ - "0144f04e046720d20f91a98af9d5c651e95b06fd", + "51c996959bea2acc1b2d0a3c3be438b0c6182e23", "support" ], "interfaces/speech-api.idl": [ @@ -650061,11 +650475,11 @@ "support" ], "interfaces/web-animations.idl": [ - "89993896508fa04e87ec965211b3152e24975934", + "6fd172ce425d570d097fcb573115091c83cc5484", "support" ], "interfaces/web-bluetooth.idl": [ - "f515dda1a814ee1121623033684b3020c355f9ec", + "ec7a8e71ca09c7648801e6f2bb91c711c857fe34", "support" ], "interfaces/web-nfc.idl": [ @@ -650077,7 +650491,7 @@ "support" ], "interfaces/webaudio.idl": [ - "1b6af25b3b363411bfb365b1b3b21639584cfa76", + "3869d5d14a66c39e0281bb94a2e41ee5f2e395ba", "support" ], "interfaces/webauthn.idl": [ @@ -650104,6 +650518,10 @@ "732230b4a339d2484fa5242fdfc77224400796b2", "support" ], + "interfaces/webrtc-identity.idl": [ + "5a59a4887ac7eb0ad39cfd82fee052828d7af316", + "support" + ], "interfaces/webrtc-stats.idl": [ "c2dc1f7a0b0a482d226b881995414b558fbe2baf", "support" @@ -650113,7 +650531,7 @@ "support" ], "interfaces/webusb.idl": [ - "fcca851b8b535f4886bd56f30714971cf22c8c40", + "ad5c480454d7cd6feb178fa450663b9977eb51cd", "support" ], "interfaces/webvtt.idl": [ @@ -663272,6 +663690,14 @@ "0e5a4768e7626f666077e794e0731c9a1e3e9d35", "support" ], + "payment-handler/app-change-shipping-address.js": [ + "df39258dc92642b130c6765f6c75d7efb523712f", + "support" + ], + "payment-handler/app-change-shipping-option.js": [ + "ac3307b619ccfb464a5fa44820cea39befdd8f2e", + "support" + ], "payment-handler/app-supports-shipping-contact-delegation.js": [ "770e2de64f13eeef8a1ee21783c2997facc8ff0b", "support" @@ -663308,6 +663734,14 @@ "56690d2b26ed671f773a16853463126e57735f77", "manual" ], + "payment-handler/change-shipping-address-manual.https.html": [ + "3b98d56a2516ed96c20c4c04533a129c2054c718", + "manual" + ], + "payment-handler/change-shipping-option-manual.https.html": [ + "00d1aee70b991924fde8562dffc5691567d676fb", + "manual" + ], "payment-handler/idlharness.https.any.js": [ "878114ec7ed878d3e754341cbffa138092fee129", "testharness" @@ -676353,7 +676787,7 @@ "support" ], "resources/chromium/mock-barcodedetection.js": [ - "2558bbda58913ec51c36bdce28e0f84a1aea32e7", + "703db425590d8a8450f285878abb025a42a15122", "support" ], "resources/chromium/mock-barcodedetection.js.headers": [ @@ -676361,7 +676795,7 @@ "support" ], "resources/chromium/mock-facedetection.js": [ - "1275e4dd2f5e24988e723a728dbf5bb4acc4c6cb", + "01306a2a0c7f470f56d746aa68dff3fe3636c575", "support" ], "resources/chromium/mock-facedetection.js.headers": [ @@ -692097,7 +692531,7 @@ "support" ], "tools/wpt/tests/test_wpt.py": [ - "a2498333c2b51e7c985e28124d0c75a0fd5352c3", + "6569580e9ff471784e307b7e84555935dec99586", "support" ], "tools/wpt/tox.ini": [ @@ -692365,7 +692799,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/chrome.py": [ - "71f246f4b6d8452f321517ac62dc42e0db978e42", + "c9de22038ddcd69daf4b8181dc938444d9266a10", "support" ], "tools/wptrunner/wptrunner/browsers/chrome_android.py": [ @@ -692589,7 +693023,7 @@ "support" ], "tools/wptrunner/wptrunner/metadata.py": [ - "42f3b00dab5b926f918c23a352bef935f07bbf4c", + "15bbf94c33cea80ab4d0fdd958618f264fa57ab1", "support" ], "tools/wptrunner/wptrunner/products.py": [ @@ -693457,7 +693891,7 @@ "support" ], "trusted-types/trusted-types-reporting.tentative.https.html": [ - "11ef305064d2af10ffc07ca09e51dcb1a3661e76", + "0104ba358058199a77f1af5afb27e3255da8da64", "testharness" ], "trusted-types/trusted-types-reporting.tentative.https.html.headers": [ @@ -699164,6 +699598,10 @@ "90363662f742fbf1d31634030d2b470e08fe1421", "support" ], + "webrtc-identity/idlharness.https.window.js": [ + "da1cb85a8e7ef147729d4a4f1a77493862dea48c", + "testharness" + ], "webrtc-quic/META.yml": [ "740c8d2fe84beafbcb7f98cef29aff2378721132", "support" @@ -704305,7 +704743,7 @@ "support" ], "webxr/resources/webxr_test_asserts.js": [ - "24b5274bc23d4e601e94eebd93968d9c30942b08", + "863b994572441d0efdbe92dbd8aec29f9152069f", "support" ], "webxr/resources/webxr_test_constants.js": [ @@ -704444,6 +704882,10 @@ "cfa3cc7ca2fe7cfbd656d9164b0d1ab3dd60ca41", "testharness" ], + "webxr/xrReferenceSpace_originOffset_viewer.https.html": [ + "2f93914e851ed55d5f9e60cc131316132e7ca226", + "testharness" + ], "webxr/xrRigidTransform_constructor.https.html": [ "15a7f2b5771a78dba2036ec46933e826c9a54355", "testharness" diff --git a/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini b/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini new file mode 100644 index 00000000000..ffd445b07e8 --- /dev/null +++ b/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini @@ -0,0 +1,4 @@ +[opacity-interpolation.html] + [opacity interpolation] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini new file mode 100644 index 00000000000..e004f85c24c --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini @@ -0,0 +1,4 @@ +[order-interpolation.html] + [order interpolation] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini deleted file mode 100644 index e6e1f29e274..00000000000 --- a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[matchMedia-display-none-iframe.html] - expected: ERROR 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 9f5fc515988..c335c5163e1 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -315,15 +315,18 @@ [<iframe>: combined response Content-Type: text/html */*] expected: FAIL - [<iframe>: combined response Content-Type: text/html;" text/plain] + [<iframe>: separate response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" 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;x=" text/plain] + [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] + [<iframe>: separate response Content-Type: text/html;" \\" text/plain] expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini index ac4cbcba706..b2ffc8abf78 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -53,9 +53,9 @@ [combined text/javascript ] expected: FAIL - [separate text/javascript;charset=windows-1252 error text/javascript] + [separate text/javascript x/x] expected: FAIL - [separate text/javascript x/x] + [separate text/javascript error] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini new file mode 100644 index 00000000000..87b07c3e670 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_1.html] + [Multiple history traversals from the same task] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini new file mode 100644 index 00000000000..385376c7321 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_4.html] + [Multiple history traversals, last would be aborted] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini index ad8840fbb68..940516ddd33 100644 --- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini @@ -1,5 +1,24 @@ [open-features-negative-top-left.html] type: testharness + expected: TIMEOUT [HTML: window.open `features`: negative values for `top`, `left`] expected: FAIL + [features "top=-204" should NOT set "top=204"] + expected: TIMEOUT + + [features "top=-204.5" should NOT set "top=204"] + expected: TIMEOUT + + [features "left=-204" should NOT set "left=204"] + expected: TIMEOUT + + [features "top=-0" should NOT set "top=204"] + expected: TIMEOUT + + [features "left=-204.5" should NOT set "left=204"] + expected: TIMEOUT + + [features "left=-0" should NOT set "left=204"] + expected: TIMEOUT + 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 442db3cb549..2532dceabac 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,4 +1,5 @@ [embedded-opener-remove-frame.html] + expected: CRASH [opener and "removed" embedded documents] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini new file mode 100644 index 00000000000..178680e5d14 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini @@ -0,0 +1,2 @@ +[script-onerror-insertion-point-2.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini b/tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini index 27f6c5ed7a2..6ff00c31bef 100644 --- a/tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini +++ b/tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini @@ -1,5 +1,5 @@ [xrBoundedReferenceSpace_updates.https.html] - expected: ERROR + expected: TIMEOUT ['XRBoundedReferenceSpace updates properly when the changes are applied] expected: TIMEOUT diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini deleted file mode 100644 index dbea4f293ad..00000000000 --- a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[transition_calc_implicit.html] - expected: TIMEOUT diff --git a/tests/wpt/web-platform-tests/.taskcluster.yml b/tests/wpt/web-platform-tests/.taskcluster.yml index dffccbb7971..b23cc93e633 100644 --- a/tests/wpt/web-platform-tests/.taskcluster.yml +++ b/tests/wpt/web-platform-tests/.taskcluster.yml @@ -282,7 +282,6 @@ tasks: export TOXENV=py27; ./tools/ci/run_tc.py \ --browser=firefox \ - --channel=experimental \ --xvfb \ resources_unittest \ tools/ci/ci_resources_unittest.sh diff --git a/tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js b/tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js index 8f44ffd902f..b8954905cbf 100644 --- a/tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js +++ b/tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js @@ -34,20 +34,16 @@ const badChunks = [ { name: 'shared Uint8Array', get value() { - new Uint8Array(new SharedArrayBuffer()) + return new Uint8Array(new SharedArrayBuffer()) } }, { name: 'invalid deflate bytes', - get value() { - new Uint8Array([0, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36]) - } + value: new Uint8Array([0, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36]) }, { name: 'invalid gzip bytes', - get value() { - new Uint8Array([0, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0]) - } + value: new Uint8Array([0, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0]) }, ]; diff --git a/tests/wpt/web-platform-tests/compression/decompression-empty-input.any.js b/tests/wpt/web-platform-tests/compression/decompression-empty-input.any.js new file mode 100644 index 00000000000..ff4cff522a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/compression/decompression-empty-input.any.js @@ -0,0 +1,30 @@ +// META: global=worker + +'use strict'; + +const gzipEmptyValue = new Uint8Array([31, 139, 8, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0]); +const deflateEmptyValue = new Uint8Array([120, 156, 3, 0, 0, 0, 0, 1]); + +promise_test(async t => { + const ds = new DecompressionStream('gzip'); + const reader = ds.readable.getReader(); + const writer = ds.writable.getWriter(); + const writePromise = writer.write(gzipEmptyValue); + writer.close(); + const { value, done } = await reader.read(); + assert_true(done, "read() should set done"); + assert_equals(value, undefined, "value should be undefined"); + await writePromise; +}, 'decompressing gzip empty input should work'); + +promise_test(async t => { + const ds = new DecompressionStream('deflate'); + const reader = ds.readable.getReader(); + const writer = ds.writable.getWriter(); + const writePromise = writer.write(deflateEmptyValue); + writer.close(); + const { value, done } = await reader.read(); + assert_true(done, "read() should set done"); + assert_equals(value, undefined, "value should be undefined"); + await writePromise; +}, 'decompressing deflate empty input should work'); diff --git a/tests/wpt/web-platform-tests/compression/decompression-split-chunk.any.js b/tests/wpt/web-platform-tests/compression/decompression-split-chunk.any.js new file mode 100644 index 00000000000..a54541657af --- /dev/null +++ b/tests/wpt/web-platform-tests/compression/decompression-split-chunk.any.js @@ -0,0 +1,44 @@ +// META: global=worker + +'use strict'; + +const compressedBytesWithDeflate = new Uint8Array([120, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36]); +const compressedBytesWithGzip = new Uint8Array([31, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0]); +const expectedChunkValue = new TextEncoder().encode('expected output'); + +async function decompressArrayBuffer(input, format, chunkSize) { + const ds = new DecompressionStream(format); + const reader = ds.readable.getReader(); + const writer = ds.writable.getWriter(); + for (let beginning = 0; beginning < input.length; beginning += chunkSize) { + writer.write(input.slice(beginning, beginning + chunkSize)); + } + writer.close(); + const out = []; + let totalSize = 0; + while (true) { + const { value, done } = await reader.read(); + if (done) break; + out.push(value); + totalSize += value.byteLength; + } + const concatenated = new Uint8Array(totalSize); + let offset = 0; + for (const array of out) { + concatenated.set(array, offset); + offset += array.byteLength; + } + return concatenated; +} + +for (let chunkSize = 1; chunkSize < 16; ++chunkSize) { + promise_test(async t => { + const decompressedData = await decompressArrayBuffer(compressedBytesWithDeflate, 'deflate', chunkSize); + assert_array_equals(decompressedData, expectedChunkValue, "value should match"); + }, `decompressing splitted chunk into pieces of size ${chunkSize} should work in deflate`); + + promise_test(async t => { + const decompressedData = await decompressArrayBuffer(compressedBytesWithGzip, 'gzip', chunkSize); + assert_array_equals(decompressedData, expectedChunkValue, "value should match"); + }, `decompressing splitted chunk into pieces of size ${chunkSize} should work in gzip`); +} diff --git a/tests/wpt/web-platform-tests/compression/decompression-uint8array-output.any.js b/tests/wpt/web-platform-tests/compression/decompression-uint8array-output.any.js new file mode 100644 index 00000000000..06c421a8207 --- /dev/null +++ b/tests/wpt/web-platform-tests/compression/decompression-uint8array-output.any.js @@ -0,0 +1,26 @@ +// META: global=worker + +'use strict'; + +const deflateChunkValue = new Uint8Array([120, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36]); +const gzipChunkValue = new Uint8Array([31, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0]); + +promise_test(async t => { + const ds = new DecompressionStream('deflate'); + const reader = ds.readable.getReader(); + const writer = ds.writable.getWriter(); + const writePromise = writer.write(deflateChunkValue); + const { value } = await reader.read(); + assert_equals(value.constructor, Uint8Array, "type should match"); + await writePromise; +}, 'decompressing deflated output should give Uint8Array chunks'); + +promise_test(async t => { + const ds = new DecompressionStream('gzip'); + const reader = ds.readable.getReader(); + const writer = ds.writable.getWriter(); + const writePromise = writer.write(gzipChunkValue); + const { value } = await reader.read(); + assert_equals(value.constructor, Uint8Array, "type should match"); + await writePromise; +}, 'decompressing gzip output should give Uint8Array chunks'); diff --git a/tests/wpt/web-platform-tests/cookies/samesite/about-blank-subresource.https.html b/tests/wpt/web-platform-tests/cookies/samesite/about-blank-subresource.https.html new file mode 100644 index 00000000000..0a19f30d347 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/samesite/about-blank-subresource.https.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/cookies/resources/cookie-helper.sub.js"></script> +</head> +<body onload="doTests()"> + <script> + function doTests() { + promise_test(async function(t) { + var child = window.open(""); + child.onmessage = (ev) => { + child.opener.postMessage(ev.data, '*'); + }; + var grandKid = child.document.createElement("iframe"); + child.document.body.appendChild(grandKid); + var value = "" + Math.random(); + await resetSameSiteCookies(SECURE_ORIGIN, value); + + // Load at what cookies a subresource below an about:blank iframe + // inheritting this origin gets. + grandKid.src = SECURE_ORIGIN + "/cookies/samesite/resources/iframe-subresource-report.html" + var e = await wait_for_message("COOKIES", SECURE_ORIGIN); + assert_cookie(SECURE_ORIGIN, e.data, "samesite_unspecified", value, true); + assert_cookie(SECURE_ORIGIN, e.data, "samesite_lax", value, true); + assert_cookie(SECURE_ORIGIN, e.data, "samesite_strict", value, true); + assert_cookie(SECURE_ORIGIN, e.data, "samesite_none", value, true); + }, "SameSite cookies on subresource of top-level about:blank window"); + } + </script> +</body> diff --git a/tests/wpt/web-platform-tests/cookies/samesite/about-blank-toplevel.https.html b/tests/wpt/web-platform-tests/cookies/samesite/about-blank-toplevel.https.html new file mode 100644 index 00000000000..3a4dde7673d --- /dev/null +++ b/tests/wpt/web-platform-tests/cookies/samesite/about-blank-toplevel.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/cookies/resources/cookie-helper.sub.js"></script> +</head> +<body onload="doTests()"> + <script> + function doTests() { + promise_test(async function(t) { + var child = window.open(""); + child.onmessage = (ev) => { + child.opener.postMessage(ev.data, '*'); + }; + var grandKid = child.document.createElement("iframe"); + child.document.body.appendChild(grandKid); + var value = "" + Math.random(); + await resetSameSiteCookies(SECURE_ORIGIN, value); + + // Using postToParent.py here to see cookies used when navigating the page. + grandKid.src = SECURE_ORIGIN + "/cookies/resources/postToParent.py" + var e = await wait_for_message("COOKIES", SECURE_ORIGIN); + assert_cookie(SECURE_ORIGIN, e.data, "samesite_unspecified", value, true); + assert_cookie(SECURE_ORIGIN, e.data, "samesite_lax", value, true); + assert_cookie(SECURE_ORIGIN, e.data, "samesite_strict", value, true); + assert_cookie(SECURE_ORIGIN, e.data, "samesite_none", value, true); + }, "SameSite cookies with top-level about:blank window"); + } + </script> +</body> diff --git a/tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html b/tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html index fad80534f22..1dceb4e4368 100644 --- a/tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html +++ b/tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html @@ -6,7 +6,8 @@ function reportSubresourceCookies() { credFetch(SECURE_ORIGIN + "/cookies/resources/list.py") .then(r => r.json()) .then(cookies => { cookies.type = "COOKIES"; - window.parent.postMessage(cookies, "*");}); + target = window.opener ? window.opener : window.parent; + target.postMessage(cookies, "*");}); } </script> </head> diff --git a/tests/wpt/web-platform-tests/css/css-box/animation/margin-interpolation.html b/tests/wpt/web-platform-tests/css/css-box/animation/margin-interpolation.html new file mode 100644 index 00000000000..088836cbbd1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-box/animation/margin-interpolation.html @@ -0,0 +1,118 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>margin interpolation</title> +<link rel="help" href="https://www.w3.org/TR/CSS2/box.html#margin-properties"> +<meta name="assert" content="margin supports animation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.parent { + margin: 10px; + border: solid; + display: inline-block; +} + +.target { + width: 40px; + height: 40px; + background-color: black; + display: inline-block; + margin: 30px; + opacity: 0.5; +} + +.expected { + background-color: green; +} +</style> + +<body> +<template id="target-template"> + <div> + <div class="target"></div> + </div> +</template> + +<script> +test_interpolation({ + property: 'margin', + from: neutralKeyframe, + to: '20px', +}, [ + {at: -0.3, expect: '33px'}, + {at: 0, expect: '30px'}, + {at: 0.3, expect: '27px'}, + {at: 0.6, expect: '24px'}, + {at: 1, expect: '20px'}, + {at: 1.5, expect: '15px'}, +]); + +test_interpolation({ + property: 'margin', + from: 'initial', + to: '20px', +}, [ + {at: -0.3, expect: '-6px'}, + {at: 0, expect: '0px'}, + {at: 0.3, expect: '6px'}, + {at: 0.6, expect: '12px'}, + {at: 1, expect: '20px'}, + {at: 1.5, expect: '30px'}, +]); + +test_interpolation({ + property: 'margin', + from: 'inherit', + to: '20px', +}, [ + {at: -0.3, expect: '7px'}, + {at: 0, expect: '10px'}, + {at: 0.3, expect: '13px'}, + {at: 0.6, expect: '16px'}, + {at: 1, expect: '20px'}, + {at: 1.5, expect: '25px'}, +]); + +test_interpolation({ + property: 'margin', + from: 'unset', + to: '20px', +}, [ + {at: -0.3, expect: '-6px'}, + {at: 0, expect: '0px'}, + {at: 0.3, expect: '6px'}, + {at: 0.6, expect: '12px'}, + {at: 1, expect: '20px'}, + {at: 1.5, expect: '30px'}, +]); + +test_interpolation({ + property: 'margin', + from: '0px', + to: '10px' +}, [ + {at: -0.3, expect: '-3px'}, + {at: 0, expect: '0px'}, + {at: 0.3, expect: '3px'}, + {at: 0.6, expect: '6px'}, + {at: 1, expect: '10px'}, + {at: 1.5, expect: '15px'} +]); + +test_interpolation({ + property: 'margin', + from: '20px 40px 60px 80px', + to: '30px 50px 70px 90px' +}, [ + {at: -0.3, expect: '17px 37px 57px 77px'}, + {at: 0, expect: '20px 40px 60px 80px'}, + {at: 0.3, expect: '23px 43px 63px 83px'}, + {at: 0.6, expect: '26px 46px 66px 86px'}, + {at: 1, expect: '30px 50px 70px 90px'}, + {at: 1.5, expect: '35px 55px 75px 95px'} +]); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-color/animation/opacity-interpolation.html b/tests/wpt/web-platform-tests/css/css-color/animation/opacity-interpolation.html new file mode 100644 index 00000000000..ce26a8c7993 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/animation/opacity-interpolation.html @@ -0,0 +1,96 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>opacity interpolation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-3/#opacity"> +<meta name="assert" content="opacity supports animation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.parent { + opacity: 0.8; +} + +.target { + width: 100px; + height: 100px; + background-color: black; + display: inline-block; + opacity: 0.1; +} + +.expected { + background-color: green; +} +</style> + +<body> +<script> +test_interpolation({ + property: 'opacity', + from: neutralKeyframe, + to: '0.2', +}, [ + {at: -0.3, expect: '0.07'}, + {at: 0, expect: '0.1'}, + {at: 0.3, expect: '0.13'}, + {at: 0.6, expect: '0.16'}, + {at: 1, expect: '0.2'}, + {at: 1.5, expect: '0.25'}, +]); + +test_interpolation({ + property: 'opacity', + from: 'initial', + to: '0.2', +}, [ + {at: -0.3, expect: '1'}, + {at: 0, expect: '1'}, + {at: 0.3, expect: '0.76'}, + {at: 0.6, expect: '0.52'}, + {at: 1, expect: '0.2'}, + {at: 1.5, expect: '0'}, +]); + +test_interpolation({ + property: 'opacity', + from: 'inherit', + to: '0.2', +}, [ + {at: -0.3, expect: '0.98'}, + {at: 0, expect: '0.8'}, + {at: 0.3, expect: '0.62'}, + {at: 0.6, expect: '0.44'}, + {at: 1, expect: '0.2'}, + {at: 1.5, expect: '0'}, +]); + +test_interpolation({ + property: 'opacity', + from: 'unset', + to: '0.2', +}, [ + {at: -0.3, expect: '1'}, + {at: 0, expect: '1'}, + {at: 0.3, expect: '0.76'}, + {at: 0.6, expect: '0.52'}, + {at: 1, expect: '0.2'}, + {at: 1.5, expect: '0'}, +]); + +test_interpolation({ + property: 'opacity', + from: '0', + to: '1' +}, [ + {at: -0.3, expect: '0'}, // CSS opacity is [0-1]. + {at: 0, expect: '0'}, + {at: 0.3, expect: '0.3'}, + {at: 0.6, expect: '0.6'}, + {at: 1, expect: '1'}, + {at: 1.5, expect: '1'} +]); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/animation/order-interpolation.html b/tests/wpt/web-platform-tests/css/css-flexbox/animation/order-interpolation.html new file mode 100644 index 00000000000..8096fc3db66 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/animation/order-interpolation.html @@ -0,0 +1,105 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>order interpolation</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#order-property"> +<meta name="assert" content="order supports animation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.parent { + order: 30; +} + +.target { + order: 10; +} +</style> +<body> +<script> +test_interpolation({ + property: 'order', + from: neutralKeyframe, + to: '20', +}, [ + {at: -3, expect: '-20'}, + {at: -0.5, expect: '5'}, + {at: 0, expect: '10'}, + {at: 0.3, expect: '13'}, + {at: 0.6, expect: '16'}, + {at: 1, expect: '20'}, + {at: 1.5, expect: '25'}, +]); + +test_interpolation({ + property: 'order', + from: 'initial', + to: '20', +}, [ + {at: -3, expect: '-60'}, + {at: -0.5, expect: '-10'}, + {at: 0, expect: '0'}, + {at: 0.3, expect: '6'}, + {at: 0.6, expect: '12'}, + {at: 1, expect: '20'}, + {at: 1.5, expect: '30'}, +]); + +test_interpolation({ + property: 'order', + from: 'inherit', + to: '20', +}, [ + {at: -3, expect: '60'}, + {at: -0.5, expect: '35'}, + {at: 0, expect: '30'}, + {at: 0.3, expect: '27'}, + {at: 0.6, expect: '24'}, + {at: 1, expect: '20'}, + {at: 1.5, expect: '15'}, +]); + +test_interpolation({ + property: 'order', + from: 'unset', + to: '20', +}, [ + {at: -3, expect: '-60'}, + {at: -0.5, expect: '-10'}, + {at: 0, expect: '0'}, + {at: 0.3, expect: '6'}, + {at: 0.6, expect: '12'}, + {at: 1, expect: '20'}, + {at: 1.5, expect: '30'}, +]); + +test_interpolation({ + property: 'order', + from: '10', + to: '20' +}, [ + {at: -3.0, expect: '-20'}, + {at: -0.5, expect: '5'}, + {at: 0, expect: '10'}, + {at: 0.3, expect: '13'}, + {at: 0.6, expect: '16'}, + {at: 1, expect: '20'}, + {at: 1.5, expect: '25'} +]); + +test_interpolation({ + property: 'order', + from: '2', + to: '4' +}, [ + {at: -3.0, expect: '-4'}, + {at: -0.5, expect: '1'}, + {at: 0, expect: '2'}, + {at: 0.3, expect: '3'}, + {at: 0.6, expect: '3'}, + {at: 1, expect: '4'}, + {at: 1.5, expect: '5'} +]); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001-ref.html new file mode 100644 index 00000000000..bbf5d374589 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001-ref.html @@ -0,0 +1,362 @@ +<!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: repeat(auto-fill, line-names)</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 15px; + border: 1px solid; +} + +.subgrid { + display: grid; + grid-template-columns: subgrid; + grid-column: 3 / span 4; + grid-auto-rows: 8px; + background: grey; +} + +.subgrid > :nth-child(2n) { background: black; } +.subgrid > :nth-child(2n+1) { background: pink; } + + </style> +</head> +<body> + +<div class="grid"><div class="subgrid fill-0a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0c"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0d"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0e"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0f"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0g"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0h"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0i"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0j"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:2"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1c"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:3"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1d"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1e"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2c"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2d"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3c"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-4a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-4b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-5"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> +</div></div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001.html new file mode 100644 index 00000000000..643cde377e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001.html @@ -0,0 +1,394 @@ +<!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: repeat(auto-fill, line-names)</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing"> + <link rel="match" href="repeat-auto-fill-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 15px; + border: 1px solid; +} + +.subgrid { + display: grid; + grid-column: 3 / span 4; + grid-auto-rows: 8px; + background: grey; +} + +.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */ +.fill-0b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */ +.fill-0c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */ +.fill-0d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [z] [z] */ +.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [z] */ +.fill-0f { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */ +.fill-0g { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */ +.fill-0h { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */ +.fill-0i { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [x] */ +.fill-0j { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */ + +.fill-1a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [y] [z] [z] [z] [z] */ +.fill-1b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [y] [z] [z] [z] */ +.fill-1c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [y] [z] [z] */ +.fill-1d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [y] [z] */ +.fill-1e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [y] */ + +.fill-2a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] } /* [y] [y] [z] [z] [z] */ +.fill-2b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [y] [y] [z] [z] */ +.fill-2c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [y] [y] [z] */ +.fill-2d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [y] [y] */ + +.fill-3a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */ +.fill-3b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] } /* [x] [y] [y] [y] [z] */ +.fill-3c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [y] [y] [y] */ + +.fill-4a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] } /* [y] [y] [y] [y] [z] */ +.fill-4b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) } /* [x] [y] [y] [y] [y] */ + +.fill-5 { grid-template-columns: subgrid repeat(auto-fill, [y]) } /* [y] [y] [y] [y] [y] */ + +.subgrid > :nth-child(2n) { background: black; } +.subgrid > :nth-child(2n+1) { background: pink; } + + </style> +</head> +<body> + +<div class="grid"><div class="subgrid fill-0a"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0b"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0c"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0d"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0e"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0f"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0g"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0h"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0i"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0j"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1a"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1b"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1c"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1d"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1e"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2a"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2b"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2c"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2d"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3a"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3b"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3c"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-4a"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-4b"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-5"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-002.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-002.html new file mode 100644 index 00000000000..38d0bea0d08 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-002.html @@ -0,0 +1,397 @@ +<!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: repeat(auto-fill, line-names) in parent subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing"> + <link rel="match" href="repeat-auto-fill-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 15px; + border: 1px solid; +} + +.subgrid { + display: grid; + grid-template-columns: subgrid; + grid-column: 3 / span 4; + grid-auto-rows: 8px; + background: grey; +} +.grid > .subgrid { grid-template-rows: auto; } +.grid > .subgrid > .subgrid { grid-column: 1 / span 4; } + +.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */ +.fill-0b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */ +.fill-0c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */ +.fill-0d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [z] [z] */ +.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [z] */ +.fill-0f { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */ +.fill-0g { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */ +.fill-0h { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */ +.fill-0i { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [x] */ +.fill-0j { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */ + +.fill-1a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [y] [z] [z] [z] [z] */ +.fill-1b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [y] [z] [z] [z] */ +.fill-1c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [y] [z] [z] */ +.fill-1d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [y] [z] */ +.fill-1e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [y] */ + +.fill-2a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] } /* [y] [y] [z] [z] [z] */ +.fill-2b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [y] [y] [z] [z] */ +.fill-2c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [y] [y] [z] */ +.fill-2d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [y] [y] */ + +.fill-3a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */ +.fill-3b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] } /* [x] [y] [y] [y] [z] */ +.fill-3c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [y] [y] [y] */ + +.fill-4a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] } /* [y] [y] [y] [y] [z] */ +.fill-4b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) } /* [x] [y] [y] [y] [y] */ + +.fill-5 { grid-template-columns: subgrid repeat(auto-fill, [y]) } /* [y] [y] [y] [y] [y] */ + +.subgrid > .subgrid > :nth-child(2n) { background: black; } +.subgrid > .subgrid > :nth-child(2n+1) { background: pink; } + + </style> +</head> +<body> + +<div class="grid"><div class="subgrid fill-0a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0c"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0d"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0e"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0f"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0g"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0h"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0i"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0j"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1c"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1d"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1e"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2c"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2d"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3c"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-4a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-4b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-5"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html new file mode 100644 index 00000000000..b58799bd86b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html @@ -0,0 +1,403 @@ +<!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: repeat(auto-fill, line-names) in orthogonal parent subgrid</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing"> + <link rel="match" href="repeat-auto-fill-001-ref.html"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 15px; + border: 1px solid; +} + +.subgrid { + display: grid; + grid-template-columns: subgrid; + grid-column: 3 / span 4; + background: grey; +} +.grid > .subgrid > .subgrid { + writing-mode: vertical-lr; + grid-template-rows: subgrid; + grid-template-columns: initial; + grid-column: 1 / span 4; + grid-auto-columns: 8px; + grid-auto-flow: column; +} + +.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */ +.fill-0b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */ +.fill-0c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */ +.fill-0d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [z] [z] */ +.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [z] */ +.fill-0f { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */ +.fill-0g { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */ +.fill-0h { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */ +.fill-0i { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [x] */ +.fill-0j { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */ + +.fill-1a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [y] [z] [z] [z] [z] */ +.fill-1b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [y] [z] [z] [z] */ +.fill-1c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [y] [z] [z] */ +.fill-1d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [y] [z] */ +.fill-1e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [y] */ + +.fill-2a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] } /* [y] [y] [z] [z] [z] */ +.fill-2b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [y] [y] [z] [z] */ +.fill-2c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [y] [y] [z] */ +.fill-2d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [y] [y] */ + +.fill-3a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */ +.fill-3b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] } /* [x] [y] [y] [y] [z] */ +.fill-3c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [y] [y] [y] */ + +.fill-4a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] } /* [y] [y] [y] [y] [z] */ +.fill-4b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) } /* [x] [y] [y] [y] [y] */ + +.fill-5 { grid-template-columns: subgrid repeat(auto-fill, [y]) } /* [y] [y] [y] [y] [y] */ + +.subgrid > .subgrid > :nth-child(2n) { background: black; } +.subgrid > .subgrid > :nth-child(2n+1) { background: pink; } +.subgrid > .subgrid > * { writing-mode: horizontal-tb; } + + </style> +</head> +<body> + +<div class="grid"><div class="subgrid fill-0a"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0b"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0c"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0d"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0e"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0f"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0g"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0h"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0i"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0j"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1a"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1b"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1c"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1d"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1e"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2a"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2b"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2c"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2d"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3a"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3b"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3c"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-4a"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-4b"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-5"><div class="subgrid"> + <div style="grid-row:y 5"></div> + <div style="grid-row:y 4"></div> + <div style="grid-row:y 3"></div> + <div style="grid-row:y 2"></div> + <div style="grid-row:y 1"></div> + <div style="grid-row:y -1"></div> + <div style="grid-row:y -2"></div> + <div style="grid-row:y -3"></div> + <div style="grid-row:y -4"></div> + <div style="grid-row:y -5"></div> +</div></div></div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004-ref.html new file mode 100644 index 00000000000..07ba960200b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004-ref.html @@ -0,0 +1,362 @@ +<!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: repeat(auto-fill, line-names) in RTL/LTR subgrids</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 15px; + border: 1px solid; +} + +.subgrid { + display: grid; + grid-template-columns: subgrid; + grid-column: 3 / span 4; + grid-auto-rows: 8px; + background: grey; +} + +.subgrid > :nth-child(2n) { background: black; } +.subgrid > :nth-child(2n+1) { background: pink; } + + </style> +</head> +<body> + +<div class="grid"><div class="subgrid fill-0a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0c"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0d"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0e"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0f"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0g"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0h"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0i"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0j"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1c"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:3"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1d"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:2"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-1e"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2c"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-2d"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-3c"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-4a"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-4b"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:1"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-5"> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> + <div style="grid-column:4"></div> + <div style="grid-column:4"></div> + <div style="grid-column:3"></div> + <div style="grid-column:2"></div> + <div style="grid-column:1"></div> +</div></div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html new file mode 100644 index 00000000000..beacff588a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html @@ -0,0 +1,397 @@ +<!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: repeat(auto-fill, line-names) in RTL/LTR subgrids</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing"> + <link rel="match" href="repeat-auto-fill-004-ref.html"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 15px; + border: 1px solid; +} + +.subgrid { + display: grid; + grid-template-columns: subgrid; + grid-column: 3 / span 4; + grid-auto-rows: 8px; + background: grey; +} +.grid > .subgrid { grid-template-rows: auto; direction:rtl; } +.grid > .subgrid > .subgrid { grid-column: 1 / span 4; direction:ltr; } + +.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */ +.fill-0b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */ +.fill-0c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */ +.fill-0d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [z] [z] */ +.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [z] */ +.fill-0f { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */ +.fill-0g { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */ +.fill-0h { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */ +.fill-0i { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [x] */ +.fill-0j { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */ + +.fill-1a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [y] [z] [z] [z] [z] */ +.fill-1b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [y] [z] [z] [z] */ +.fill-1c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [y] [z] [z] */ +.fill-1d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [y] [z] */ +.fill-1e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [y] */ + +.fill-2a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] } /* [y] [y] [z] [z] [z] */ +.fill-2b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [y] [y] [z] [z] */ +.fill-2c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [y] [y] [z] */ +.fill-2d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [y] [y] */ + +.fill-3a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */ +.fill-3b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] } /* [x] [y] [y] [y] [z] */ +.fill-3c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [y] [y] [y] */ + +.fill-4a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] } /* [y] [y] [y] [y] [z] */ +.fill-4b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) } /* [x] [y] [y] [y] [y] */ + +.fill-5 { grid-template-columns: subgrid repeat(auto-fill, [y]) } /* [y] [y] [y] [y] [y] */ + +.subgrid > .subgrid > :nth-child(2n) { background: black; } +.subgrid > .subgrid > :nth-child(2n+1) { background: pink; } + + </style> +</head> +<body> + +<div class="grid"><div class="subgrid fill-0a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0c"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0d"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0e"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0f"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0g"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0h"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0i"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-0j"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1c"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1d"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-1e"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2c"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-2d"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-3c"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-4a"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-4b"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +<div class="grid"><div class="subgrid fill-5"><div class="subgrid"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div></div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005-ref.html new file mode 100644 index 00000000000..95976e8216d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005-ref.html @@ -0,0 +1,165 @@ +<!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: repeat(auto-fill / INTEGER, line-names)</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 20px; + background: lightgrey; +} + +.subgrid { + display: grid; + grid: auto / subgrid; + grid-column: 2 / span 4; + background: black; +} + +item { + min-width: 0; + min-height: 10px; + background: grey; +} + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 2"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:2 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:2 / 4"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:3 / 4"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 2"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 4"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 2"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 2"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:2 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:2 / 3"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-column:1 / 2"></item> + </div> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005.html new file mode 100644 index 00000000000..0cf16d47a27 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005.html @@ -0,0 +1,167 @@ +<!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: repeat(auto-fill / INTEGER, line-names)</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing"> + <link rel="match" href="repeat-auto-fill-005-ref.html"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 20px; + background: lightgrey; +} + +.subgrid { + display: grid; + grid-column: 2 / span 4; + background: black; +} + +item { + min-width: 0; + min-height: 10px; + grid-column:x -2 / x -1; + background: grey; +} + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(auto-fill,[x]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [x] [x] repeat(auto-fill,[x]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [x] [x] repeat(auto-fill,[x]) [] [x] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [x] [x] repeat(auto-fill,[x]) [x] [x] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(1,[]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(1,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(1,[]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(1,[]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid repeat(2,[]) repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid repeat(2,[x]) repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid repeat(2,[x]) repeat(auto-fill,[x]) [] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid repeat(3,[]) repeat(auto-fill,[]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid repeat(4,[]) repeat(auto-fill,[x]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] [] [] [] repeat(auto-fill,[x]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid repeat(auto-fill,[]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid repeat(auto-fill,[x]) [] [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid [] repeat(auto-fill,[x]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-columns:subgrid repeat(5,[]) repeat(auto-fill,[]) [x]"> + <item></item> + </div> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-006.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-006.html new file mode 100644 index 00000000000..4a16d8e4a9b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-006.html @@ -0,0 +1,169 @@ +<!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: repeat(auto-fill / INTEGER, line-names)</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing"> + <link rel="match" href="repeat-auto-fill-005-ref.html"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 20px; + background: lightgrey; +} + +.subgrid { + display: grid; + grid-column: 2 / span 4; + background: black; + writing-mode: vertical-lr; +} + +item { + min-width: 0; + min-height: 10px; + grid-row:x -2 / x -1; + background: grey; + writing-mode: horizontal-tb; +} + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [] [x] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [x] [x] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[]) repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[x]) repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[x]) repeat(auto-fill,[x]) [] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(3,[]) repeat(auto-fill,[]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(4,[]) repeat(auto-fill,[x]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] [] [] repeat(auto-fill,[x]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(auto-fill,[]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(auto-fill,[x]) [] [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] repeat(auto-fill,[x]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(5,[]) repeat(auto-fill,[]) [x]"> + <item></item> + </div> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007-ref.html new file mode 100644 index 00000000000..9bc2eeff1c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007-ref.html @@ -0,0 +1,167 @@ +<!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: repeat(auto-fill / INTEGER, line-names)</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 20px; + background: lightgrey; +} + +.subgrid { + display: grid; + grid: subgrid / auto; + grid-column: 2 / span 4; + background: black; + writing-mode: vertical-rl; +} + +item { + min-width: 0; + min-height: 10px; + background: grey; + writing-mode: horizontal-tb; +} + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 2"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:2 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:2 / 4"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:3 / 4"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 2"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 4"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 2"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 2"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:2 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:2 / 3"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 5"></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid"> + <item style="grid-row:1 / 2"></item> + </div> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007.html new file mode 100644 index 00000000000..949d8296fef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007.html @@ -0,0 +1,169 @@ +<!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: repeat(auto-fill / INTEGER, line-names)</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing"> + <link rel="match" href="repeat-auto-fill-007-ref.html"> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 20px; + background: lightgrey; +} + +.subgrid { + display: grid; + grid-column: 2 / span 4; + background: black; + writing-mode: vertical-rl; +} + +item { + min-width: 0; + min-height: 10px; + grid-row:x -2 / x -1; + background: grey; + writing-mode: horizontal-tb; +} + + </style> +</head> +<body> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [] [x] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [x] [x] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[]) repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[x]) repeat(auto-fill,[]) [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[x]) repeat(auto-fill,[x]) [] []"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(3,[]) repeat(auto-fill,[]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(4,[]) repeat(auto-fill,[x]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] [] [] [] repeat(auto-fill,[x]) [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(auto-fill,[]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(auto-fill,[x]) [] [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid [] repeat(auto-fill,[x]) [] [] [] [x]"> + <item></item> + </div> +</div> + +<div class="grid"> + <div class="subgrid" style="grid-template-rows:subgrid repeat(5,[]) repeat(auto-fill,[]) [x]"> + <item></item> + </div> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-masking/animations/clip-path-interpolation.html b/tests/wpt/web-platform-tests/css/css-masking/animations/clip-path-interpolation.html new file mode 100644 index 00000000000..21c34f1f2b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-masking/animations/clip-path-interpolation.html @@ -0,0 +1,141 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>clip-path interpolation</title> +<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-clip-path"> +<meta name="assert" content="clip-path supports animation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.parent { + clip-path: circle(80% at 30% 10%); +} + +.target { + clip-path: circle(60% at 10% 30%); +} +</style> +<body> +<script> +test_interpolation({ + property: 'clip-path', + from: neutralKeyframe, + to: 'circle(40% at 20% 20%)', +}, [ + {at: -0.3, expect: 'circle(66% at 7% 33%)'}, + {at: 0, expect: 'circle(60% at 10% 30%)'}, + {at: 0.3, expect: 'circle(54% at 13% 27%)'}, + {at: 0.6, expect: 'circle(48% at 16% 24%)'}, + {at: 1, expect: 'circle(40% at 20% 20%)'}, + {at: 1.5, expect: 'circle(30% at 25% 15%)'}, +]); + +test_no_interpolation({ + property: 'clip-path', + from: 'initial', + to: 'circle(40% at 20% 20%)', +}); + +test_interpolation({ + property: 'clip-path', + from: 'inherit', + to: 'circle(40% at 20% 20%)', +}, [ + {at: -0.3, expect: 'circle(92% at 33% 7%)'}, + {at: 0, expect: 'circle(80% at 30% 10%)'}, + {at: 0.3, expect: 'circle(68% at 27% 13%)'}, + {at: 0.6, expect: 'circle(56% at 24% 16%)'}, + {at: 1, expect: 'circle(40% at 20% 20%)'}, + {at: 1.5, expect: 'circle(20% at 15% 25%)'}, +]); + +test_no_interpolation({ + property: 'clip-path', + from: 'unset', + to: 'circle(40% at 20% 20%)', +}); + +test_interpolation({ + property: 'clip-path', + from: 'circle(100% at 0% 0%)', + to: 'circle(50% at 25% 25%)', +}, [ + {at: -0.3, expect: 'circle(115% at -7.5% -7.5%)'}, + {at: 0, expect: 'circle(100% at 0% 0%)'}, + {at: 0.3, expect: 'circle(85% at 7.5% 7.5%)'}, + {at: 0.6, expect: 'circle(70% at 15% 15%)'}, + {at: 1, expect: 'circle(50% at 25% 25%)'}, + {at: 1.5, expect: 'circle(25% at 37.5% 37.5%)'} +]); + +test_interpolation({ + property: 'clip-path', + from: 'ellipse(100% 100% at 0% 0%)', + to: 'ellipse(50% 50% at 25% 25%)', +}, [ + {at: -0.3, expect: 'ellipse(115% 115% at -7.5% -7.5%)'}, + {at: 0, expect: 'ellipse(100% 100% at 0% 0%)'}, + {at: 0.3, expect: 'ellipse(85% 85% at 7.5% 7.5%)'}, + {at: 0.6, expect: 'ellipse(70% 70% at 15% 15%)'}, + {at: 1, expect: 'ellipse(50% 50% at 25% 25%)'}, + {at: 1.5, expect: 'ellipse(25% 25% at 37.5% 37.5%)'} +]); + +test_interpolation({ + property: 'clip-path', + from: 'polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)', + to: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)', +}, [ + {at: -0.3, expect: 'polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)'}, + {at: 0, expect: 'polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)'}, + {at: 0.3, expect: 'polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)'}, + {at: 0.6, expect: 'polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)'}, + {at: 1, expect: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)'}, + {at: 1.5, expect: 'polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)'} +]); + +test_no_interpolation({ + property: 'clip-path', + from: 'polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)', + to: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)', +}); + +test_interpolation({ + property: 'clip-path', + from: 'inset(100%)', + to: 'inset(120%)', +}, [ + {at: -0.3, expect: 'inset(94%)'}, + {at: 0, expect: 'inset(100%)'}, + {at: 0.3, expect: 'inset(106%)'}, + {at: 0.6, expect: 'inset(112%)'}, + {at: 1, expect: 'inset(120%)'}, + {at: 1.5, expect: 'inset(130%)'}, +]); + +test_no_interpolation({ + property: 'clip-path', + from: 'none', + to: 'ellipse(100% 100% at 0% 0%)', +}); + +test_interpolation({ + property: 'clip-path', + from: 'circle(25% at right 5% bottom 15px)', + to: 'circle(45% at right 25% bottom 35px)', +}, [ + {at: 0.25, expect: 'circle(30% at 90% calc(-20px + 100%))'}, + {at: 0.5, expect: 'circle(35% at 85% calc(-25px + 100%))'}, + {at: 0.75, expect: 'circle(40% at 80% calc(-30px + 100%))'}, +]); + +test_no_interpolation({ + property: 'clip-path', + from: 'url("/clip-source")', + to: 'ellipse(100% 100% at 0% 0%)', +}); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-overflow/overflow-codependent-scrollbars.html b/tests/wpt/web-platform-tests/css/css-overflow/overflow-codependent-scrollbars.html new file mode 100644 index 00000000000..eb0e4f5ea2e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-overflow/overflow-codependent-scrollbars.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<link rel="author" href="mailto:atotic@google.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="help" href="https://www.w3.org/TR/css-overflow-3/#scrollable"> +<meta name="assert" content="What happens when appearance of one scrollbar triggers the other one?"> +<style> +.container { + width: 100px; + height: 100px; + overflow: auto; + background: #DDD; + --too-big: 120px; + --slightly-smaller: 95px; +} +.target { + width: 120px; + height: 95px; + background: rgba(0,255,0,0.3); +} +</style> +<!-- --> +<div class="container"> + <div class="target" style="width:var(--too-big);height:var(--slightly-smaller)" ></div> +</div> +<div class="container"> + <div class="target" style="height:var(--too-big);width:var(--slightly-smaller)" ></div> +</div> + +<script> +test(() => { + Array.from(document.querySelectorAll(".container")).forEach( el => { + let verticalScrollbar = el.offsetWidth - el.clientWidth; + let horizontalScrollbar = el.offsetHeight - el.clientHeight; + assert_equals(verticalScrollbar, horizontalScrollbar, "both scrollbars are visible."); + }); +}, 'appearance of one scrollbar caused the other scrollbar to appear.'); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-tables/animations/border-spacing-interpolation.html b/tests/wpt/web-platform-tests/css/css-tables/animations/border-spacing-interpolation.html new file mode 100644 index 00000000000..02e1cc62296 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-tables/animations/border-spacing-interpolation.html @@ -0,0 +1,116 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>boder-spacing interpolation</title> +<link rel="help" href="https://www.w3.org/TR/CSS2/tables.html#separated-borders"> +<meta name="assert" content="border-spacing supports animation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.parent { + border-spacing: 30px; +} + +.target { + width: 50px; + height: 50px; + background-color: black; + display: inline-block; + margin: 18px; + border-collapse: separate; + border-spacing: 10px; +} + +.target td { + background-color: white; + border: 1px solid orange; + width: 10px; + height: 10px; +} + +.expected { + background-color: green; +} +</style> + +<body> +<template id="target-template"> + <table> + <tbody> + <tr> + <td></td> + <td></td> + </tr> + </tbody> + </table> +</template> + +<script> +test_interpolation({ + property: 'border-spacing', + from: neutralKeyframe, + to: '20px', +}, [ + {at: -0.3, expect: '7px 7px'}, + {at: 0, expect: '10px 10px'}, + {at: 0.3, expect: '13px 13px'}, + {at: 0.6, expect: '16px 16px'}, + {at: 1, expect: '20px 20px'}, + {at: 1.5, expect: '25px 25px'}, +]); + +test_interpolation({ + property: 'border-spacing', + from: 'initial', + to: '20px', +}, [ + {at: -0.3, expect: '0px 0px'}, + {at: 0, expect: '0px 0px'}, + {at: 0.3, expect: '6px 6px'}, + {at: 0.6, expect: '12px 12px'}, + {at: 1, expect: '20px 20px'}, + {at: 1.5, expect: '30px 30px'}, +]); + +test_interpolation({ + property: 'border-spacing', + from: 'inherit', + to: '20px', +}, [ + {at: -0.3, expect: '33px 33px'}, + {at: 0, expect: '30px 30px'}, + {at: 0.3, expect: '27px 27px'}, + {at: 0.6, expect: '24px 24px'}, + {at: 1, expect: '20px 20px'}, + {at: 1.5, expect: '15px 15px'}, +]); + +test_interpolation({ + property: 'border-spacing', + from: 'unset', + to: '20px', +}, [ + {at: -0.3, expect: '33px 33px'}, + {at: 0, expect: '30px 30px'}, + {at: 0.3, expect: '27px 27px'}, + {at: 0.6, expect: '24px 24px'}, + {at: 1, expect: '20px 20px'}, + {at: 1.5, expect: '15px 15px'}, +]); + +test_interpolation({ + property: 'border-spacing', + from: '0px', + to: '10px' +}, [ + {at: -0.3, expect: '0px 0px'}, // Can't be negative. + {at: 0, expect: '0px 0px'}, + {at: 0.3, expect: '3px 3px'}, + {at: 0.6, expect: '6px 6px'}, + {at: 1, expect: '10px 10px'}, + {at: 1.5, expect: '15px 15px'} +]); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl b/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl index 4aca84e5a02..2c46cc7c94c 100644 --- a/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl +++ b/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl @@ -22,12 +22,12 @@ interface WorkletAnimationEffect { attribute double? localTime; }; -[Exposed=Window, - Constructor (DOMString animatorName, +[Exposed=Window] +interface WorkletAnimation : Animation { + constructor(DOMString animatorName, optional (AnimationEffect or sequence<AnimationEffect>)? effects = null, optional AnimationTimeline? timeline, - optional any options)] -interface WorkletAnimation : Animation { + optional any options); readonly attribute DOMString animatorName; }; diff --git a/tests/wpt/web-platform-tests/interfaces/css-animations.idl b/tests/wpt/web-platform-tests/interfaces/css-animations.idl index f87015f6a87..9b34bde2330 100644 --- a/tests/wpt/web-platform-tests/interfaces/css-animations.idl +++ b/tests/wpt/web-platform-tests/interfaces/css-animations.idl @@ -3,9 +3,9 @@ // (https://github.com/tidoust/reffy-reports) // Source: CSS Animations Level 1 (https://drafts.csswg.org/css-animations/) -[Exposed=Window, - Constructor(CSSOMString type, optional AnimationEventInit animationEventInitDict = {})] +[Exposed=Window] interface AnimationEvent : Event { + constructor(CSSOMString type, optional AnimationEventInit animationEventInitDict = {}); readonly attribute CSSOMString animationName; readonly attribute double elapsedTime; readonly attribute CSSOMString pseudoElement; diff --git a/tests/wpt/web-platform-tests/interfaces/css-transitions.idl b/tests/wpt/web-platform-tests/interfaces/css-transitions.idl index be5a635112b..15ce4b30f21 100644 --- a/tests/wpt/web-platform-tests/interfaces/css-transitions.idl +++ b/tests/wpt/web-platform-tests/interfaces/css-transitions.idl @@ -3,9 +3,9 @@ // (https://github.com/tidoust/reffy-reports) // Source: CSS Transitions (https://drafts.csswg.org/css-transitions/) -[Exposed=Window, - Constructor(CSSOMString type, optional TransitionEventInit transitionEventInitDict = {})] +[Exposed=Window] interface TransitionEvent : Event { + constructor(CSSOMString type, optional TransitionEventInit transitionEventInitDict = {}); readonly attribute CSSOMString propertyName; readonly attribute double elapsedTime; readonly attribute CSSOMString pseudoElement; diff --git a/tests/wpt/web-platform-tests/interfaces/entries-api.idl b/tests/wpt/web-platform-tests/interfaces/entries-api.idl index 548aec13ab7..52693138a4c 100644 --- a/tests/wpt/web-platform-tests/interfaces/entries-api.idl +++ b/tests/wpt/web-platform-tests/interfaces/entries-api.idl @@ -18,6 +18,7 @@ partial interface DataTransferItem { callback ErrorCallback = void (DOMException err); +[Exposed=Window] interface FileSystemEntry { readonly attribute boolean isFile; readonly attribute boolean isDirectory; @@ -29,6 +30,7 @@ interface FileSystemEntry { optional ErrorCallback errorCallback); }; +[Exposed=Window] interface FileSystemDirectoryEntry : FileSystemEntry { FileSystemDirectoryReader createReader(); void getFile(optional USVString? path, @@ -48,18 +50,21 @@ dictionary FileSystemFlags { callback FileSystemEntryCallback = void (FileSystemEntry entry); +[Exposed=Window] interface FileSystemDirectoryReader { void readEntries(FileSystemEntriesCallback successCallback, optional ErrorCallback errorCallback); }; callback FileSystemEntriesCallback = void (sequence<FileSystemEntry> entries); +[Exposed=Window] interface FileSystemFileEntry : FileSystemEntry { void file(FileCallback successCallback, optional ErrorCallback errorCallback); }; callback FileCallback = void (File file); +[Exposed=Window] interface FileSystem { readonly attribute USVString name; readonly attribute FileSystemDirectoryEntry root; diff --git a/tests/wpt/web-platform-tests/interfaces/presentation-api.idl b/tests/wpt/web-platform-tests/interfaces/presentation-api.idl index c1e566538aa..dfaa022b952 100644 --- a/tests/wpt/web-platform-tests/interfaces/presentation-api.idl +++ b/tests/wpt/web-platform-tests/interfaces/presentation-api.idl @@ -48,7 +48,6 @@ dictionary PresentationConnectionAvailableEventInit : EventInit { }; enum PresentationConnectionState { "connecting", "connected", "closed", "terminated" }; -enum BinaryType { "blob", "arraybuffer" }; [SecureContext, Exposed=Window] interface PresentationConnection : EventTarget { diff --git a/tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl b/tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl index 0144f04e046..51c996959be 100644 --- a/tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl +++ b/tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl @@ -4,9 +4,9 @@ // Source: Accelerated Shape Detection in Images (https://wicg.github.io/shape-detection-api/) [Exposed=(Window,Worker), - SecureContext, - Constructor(optional FaceDetectorOptions faceDetectorOptions = {})] + SecureContext] interface FaceDetector { + constructor(optional FaceDetectorOptions faceDetectorOptions = {}); Promise<sequence<DetectedFace>> detect(ImageBitmapSource image); }; @@ -35,9 +35,9 @@ enum LandmarkType { }; [Exposed=(Window,Worker), - SecureContext, - Constructor(optional BarcodeDetectorOptions barcodeDetectorOptions = {})] + SecureContext] interface BarcodeDetector { + constructor(optional BarcodeDetectorOptions barcodeDetectorOptions = {}); static Promise<sequence<BarcodeFormat>> getSupportedFormats(); Promise<sequence<DetectedBarcode>> detect(ImageBitmapSource image); diff --git a/tests/wpt/web-platform-tests/interfaces/web-animations.idl b/tests/wpt/web-platform-tests/interfaces/web-animations.idl index 89993896508..6fd172ce425 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-animations.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-animations.idl @@ -12,15 +12,15 @@ dictionary DocumentTimelineOptions { DOMHighResTimeStamp originTime = 0; }; -[Exposed=Window, - Constructor(optional DocumentTimelineOptions options = {})] +[Exposed=Window] interface DocumentTimeline : AnimationTimeline { + constructor(optional DocumentTimelineOptions options = {}); }; -[Exposed=Window, - Constructor(optional AnimationEffect? effect = null, - optional AnimationTimeline? timeline)] +[Exposed=Window] interface Animation : EventTarget { + constructor(optional AnimationEffect? effect = null, + optional AnimationTimeline? timeline); attribute DOMString id; attribute AnimationEffect? effect; readonly attribute AnimationTimeline? timeline; @@ -90,12 +90,12 @@ dictionary ComputedEffectTiming : EffectTiming { unrestricted double? currentIteration; }; -[Exposed=Window, - Constructor((Element or CSSPseudoElement)? target, - object? keyframes, - optional (unrestricted double or KeyframeEffectOptions) options = {}), - Constructor(KeyframeEffect source)] +[Exposed=Window] interface KeyframeEffect : AnimationEffect { + constructor((Element or CSSPseudoElement)? target, + object? keyframes, + optional (unrestricted double or KeyframeEffectOptions) options = {}); + constructor(KeyframeEffect source); attribute (Element or CSSPseudoElement)? target; attribute CompositeOperation composite; sequence<object> getKeyframes(); @@ -155,9 +155,9 @@ Element includes Animatable; CSSPseudoElement includes Animatable; -[Exposed=Window, - Constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict = {})] +[Exposed=Window] interface AnimationPlaybackEvent : Event { + constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict = {}); readonly attribute double? currentTime; readonly attribute double? timelineTime; }; diff --git a/tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl b/tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl index f515dda1a81..ec7a8e71ca0 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl @@ -60,10 +60,10 @@ interface BluetoothPermissionResult : PermissionStatus { [ Exposed=Window, - Constructor(DOMString type, optional ValueEventInit initDict = {}), SecureContext ] interface ValueEvent : Event { + constructor(DOMString type, optional ValueEventInit initDict = {}); readonly attribute any value; }; @@ -95,10 +95,10 @@ interface BluetoothServiceDataMap { }; [ Exposed=Window, - Constructor(DOMString type, BluetoothAdvertisingEventInit init), SecureContext ] interface BluetoothAdvertisingEvent : Event { + constructor(DOMString type, BluetoothAdvertisingEventInit init); [SameObject] readonly attribute BluetoothDevice device; readonly attribute FrozenArray<UUID> uuids; diff --git a/tests/wpt/web-platform-tests/interfaces/webaudio.idl b/tests/wpt/web-platform-tests/interfaces/webaudio.idl index 1b6af25b3b3..3869d5d14a6 100644 --- a/tests/wpt/web-platform-tests/interfaces/webaudio.idl +++ b/tests/wpt/web-platform-tests/interfaces/webaudio.idl @@ -38,7 +38,7 @@ interface BaseAudioContext : EventTarget { IIRFilterNode createIIRFilter (sequence<double> feedforward, sequence<double> feedback); OscillatorNode createOscillator (); PannerNode createPanner (); - PeriodicWave createPeriodicWave (sequence<float> real, sequence<float> imag, optional PeriodicWaveConstraints constraints); + PeriodicWave createPeriodicWave (sequence<float> real, sequence<float> imag, optional PeriodicWaveConstraints constraints = {}); ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize = 0, optional unsigned long numberOfInputChannels = 2, optional unsigned long numberOfOutputChannels = 2); @@ -56,19 +56,19 @@ enum AudioContextLatencyCategory { "playback" }; -[Exposed=Window, - Constructor (optional AudioContextOptions contextOptions)] +[Exposed=Window] interface AudioContext : BaseAudioContext { - readonly attribute double baseLatency; - readonly attribute double outputLatency; - AudioTimestamp getOutputTimestamp (); - Promise<void> resume (); - Promise<void> suspend (); - Promise<void> close (); - MediaElementAudioSourceNode createMediaElementSource (HTMLMediaElement mediaElement); - MediaStreamAudioSourceNode createMediaStreamSource (MediaStream mediaStream); - MediaStreamTrackAudioSourceNode createMediaStreamTrackSource (MediaStreamTrack mediaStreamTrack); - MediaStreamAudioDestinationNode createMediaStreamDestination (); + constructor (optional AudioContextOptions contextOptions = {}); + readonly attribute double baseLatency; + readonly attribute double outputLatency; + AudioTimestamp getOutputTimestamp (); + Promise<void> resume (); + Promise<void> suspend (); + Promise<void> close (); + MediaElementAudioSourceNode createMediaElementSource (HTMLMediaElement mediaElement); + MediaStreamAudioSourceNode createMediaStreamSource (MediaStream mediaStream); + MediaStreamTrackAudioSourceNode createMediaStreamTrackSource (MediaStreamTrack mediaStreamTrack); + MediaStreamAudioDestinationNode createMediaStreamDestination (); }; dictionary AudioContextOptions { @@ -81,10 +81,10 @@ dictionary AudioTimestamp { DOMHighResTimeStamp performanceTime; }; -[Exposed=Window, - Constructor (OfflineAudioContextOptions contextOptions), - Constructor (unsigned long numberOfChannels, unsigned long length, float sampleRate)] +[Exposed=Window] interface OfflineAudioContext : BaseAudioContext { + constructor(OfflineAudioContextOptions contextOptions); + constructor(unsigned long numberOfChannels, unsigned long length, float sampleRate); Promise<AudioBuffer> startRendering(); Promise<void> resume(); Promise<void> suspend(double suspendTime); @@ -98,9 +98,9 @@ dictionary OfflineAudioContextOptions { required float sampleRate; }; -[Exposed=Window, - Constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict)] +[Exposed=Window] interface OfflineAudioCompletionEvent : Event { + constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict); readonly attribute AudioBuffer renderedBuffer; }; @@ -108,9 +108,9 @@ dictionary OfflineAudioCompletionEventInit : EventInit { required AudioBuffer renderedBuffer; }; -[Exposed=Window, - Constructor (AudioBufferOptions options)] +[Exposed=Window] interface AudioBuffer { + constructor (AudioBufferOptions options); readonly attribute float sampleRate; readonly attribute unsigned long length; readonly attribute double duration; @@ -192,9 +192,9 @@ interface AudioScheduledSourceNode : AudioNode { void stop(optional double when = 0); }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional AnalyserOptions options = {})] +[Exposed=Window] interface AnalyserNode : AudioNode { + constructor (BaseAudioContext context, optional AnalyserOptions options = {}); void getFloatFrequencyData (Float32Array array); void getByteFrequencyData (Uint8Array array); void getFloatTimeDomainData (Float32Array array); @@ -213,9 +213,9 @@ dictionary AnalyserOptions : AudioNodeOptions { double smoothingTimeConstant = 0.8; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional AudioBufferSourceOptions options = {})] +[Exposed=Window] interface AudioBufferSourceNode : AudioScheduledSourceNode { + constructor (BaseAudioContext context, optional AudioBufferSourceOptions options = {}); attribute AudioBuffer? buffer; readonly attribute AudioParam playbackRate; readonly attribute AudioParam detune; @@ -256,9 +256,9 @@ interface AudioListener { void setOrientation (float x, float y, float z, float xUp, float yUp, float zUp); }; -[Exposed=Window, - Constructor (DOMString type, AudioProcessingEventInit eventInitDict)] +[Exposed=Window] interface AudioProcessingEvent : Event { + constructor (DOMString type, AudioProcessingEventInit eventInitDict); readonly attribute double playbackTime; readonly attribute AudioBuffer inputBuffer; readonly attribute AudioBuffer outputBuffer; @@ -281,9 +281,9 @@ enum BiquadFilterType { "allpass" }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional BiquadFilterOptions options = {})] +[Exposed=Window] interface BiquadFilterNode : AudioNode { + constructor (BaseAudioContext context, optional BiquadFilterOptions options = {}); attribute BiquadFilterType type; readonly attribute AudioParam frequency; readonly attribute AudioParam detune; @@ -300,27 +300,27 @@ dictionary BiquadFilterOptions : AudioNodeOptions { float gain = 0; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional ChannelMergerOptions options = {})] +[Exposed=Window] interface ChannelMergerNode : AudioNode { + constructor (BaseAudioContext context, optional ChannelMergerOptions options = {}); }; dictionary ChannelMergerOptions : AudioNodeOptions { unsigned long numberOfInputs = 6; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {})] +[Exposed=Window] interface ChannelSplitterNode : AudioNode { + constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {}); }; dictionary ChannelSplitterOptions : AudioNodeOptions { unsigned long numberOfOutputs = 6; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional ConstantSourceOptions options = {})] +[Exposed=Window] interface ConstantSourceNode : AudioScheduledSourceNode { + constructor (BaseAudioContext context, optional ConstantSourceOptions options = {}); readonly attribute AudioParam offset; }; @@ -328,9 +328,9 @@ dictionary ConstantSourceOptions { float offset = 1; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional ConvolverOptions options = {})] +[Exposed=Window] interface ConvolverNode : AudioNode { + constructor (BaseAudioContext context, optional ConvolverOptions options = {}); attribute AudioBuffer? buffer; attribute boolean normalize; }; @@ -340,9 +340,9 @@ dictionary ConvolverOptions : AudioNodeOptions { boolean disableNormalization = false; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional DelayOptions options = {})] +[Exposed=Window] interface DelayNode : AudioNode { + constructor (BaseAudioContext context, optional DelayOptions options = {}); readonly attribute AudioParam delayTime; }; @@ -351,9 +351,9 @@ dictionary DelayOptions : AudioNodeOptions { double delayTime = 0; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional DynamicsCompressorOptions options = {})] +[Exposed=Window] interface DynamicsCompressorNode : AudioNode { + constructor (BaseAudioContext context, optional DynamicsCompressorOptions options = {}); readonly attribute AudioParam threshold; readonly attribute AudioParam knee; readonly attribute AudioParam ratio; @@ -370,9 +370,9 @@ dictionary DynamicsCompressorOptions : AudioNodeOptions { float threshold = -24; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional GainOptions options = {})] +[Exposed=Window] interface GainNode : AudioNode { + constructor (BaseAudioContext context, optional GainOptions options = {}); readonly attribute AudioParam gain; }; @@ -380,9 +380,9 @@ dictionary GainOptions : AudioNodeOptions { float gain = 1.0; }; -[Exposed=Window, - Constructor (BaseAudioContext context, IIRFilterOptions options)] +[Exposed=Window] interface IIRFilterNode : AudioNode { + constructor (BaseAudioContext context, IIRFilterOptions options); void getFrequencyResponse (Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse); }; @@ -391,9 +391,9 @@ dictionary IIRFilterOptions : AudioNodeOptions { required sequence<double> feedback; }; -[Exposed=Window, - Constructor (AudioContext context, MediaElementAudioSourceOptions options)] +[Exposed=Window] interface MediaElementAudioSourceNode : AudioNode { + constructor (AudioContext context, MediaElementAudioSourceOptions options); [SameObject] readonly attribute HTMLMediaElement mediaElement; }; @@ -401,15 +401,15 @@ dictionary MediaElementAudioSourceOptions { required HTMLMediaElement mediaElement; }; -[Exposed=Window, - Constructor (AudioContext context, optional AudioNodeOptions options = {})] +[Exposed=Window] interface MediaStreamAudioDestinationNode : AudioNode { + constructor (AudioContext context, optional AudioNodeOptions options = {}); readonly attribute MediaStream stream; }; -[Exposed=Window, - Constructor (AudioContext context, MediaStreamAudioSourceOptions options)] +[Exposed=Window] interface MediaStreamAudioSourceNode : AudioNode { + constructor (AudioContext context, MediaStreamAudioSourceOptions options); [SameObject] readonly attribute MediaStream mediaStream; }; @@ -417,9 +417,9 @@ dictionary MediaStreamAudioSourceOptions { required MediaStream mediaStream; }; -[Exposed=Window, - Constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options)] +[Exposed=Window] interface MediaStreamTrackAudioSourceNode : AudioNode { + constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options); }; dictionary MediaStreamTrackAudioSourceOptions { @@ -434,9 +434,9 @@ enum OscillatorType { "custom" }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional OscillatorOptions options = {})] +[Exposed=Window] interface OscillatorNode : AudioScheduledSourceNode { + constructor (BaseAudioContext context, optional OscillatorOptions options = {}); attribute OscillatorType type; readonly attribute AudioParam frequency; readonly attribute AudioParam detune; @@ -461,9 +461,9 @@ enum DistanceModelType { "exponential" }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional PannerOptions options = {})] +[Exposed=Window] interface PannerNode : AudioNode { + constructor (BaseAudioContext context, optional PannerOptions options = {}); attribute PanningModelType panningModel; readonly attribute AudioParam positionX; readonly attribute AudioParam positionY; @@ -499,9 +499,9 @@ dictionary PannerOptions : AudioNodeOptions { double coneOuterGain = 0; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional PeriodicWaveOptions options = {})] +[Exposed=Window] interface PeriodicWave { + constructor (BaseAudioContext context, optional PeriodicWaveOptions options = {}); }; dictionary PeriodicWaveConstraints { @@ -519,9 +519,9 @@ interface ScriptProcessorNode : AudioNode { readonly attribute long bufferSize; }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional StereoPannerOptions options = {})] +[Exposed=Window] interface StereoPannerNode : AudioNode { + constructor (BaseAudioContext context, optional StereoPannerOptions options = {}); readonly attribute AudioParam pan; }; @@ -535,9 +535,9 @@ enum OverSampleType { "4x" }; -[Exposed=Window, - Constructor (BaseAudioContext context, optional WaveShaperOptions options = {})] +[Exposed=Window] interface WaveShaperNode : AudioNode { + constructor (BaseAudioContext context, optional WaveShaperOptions options = {}); attribute Float32Array? curve; attribute OverSampleType oversample; }; @@ -566,11 +566,10 @@ interface AudioParamMap { readonly maplike<DOMString, AudioParam>; }; -[Exposed=Window, - SecureContext, - Constructor (BaseAudioContext context, DOMString name, - optional AudioWorkletNodeOptions options = {})] +[Exposed=Window, SecureContext] interface AudioWorkletNode : AudioNode { + constructor (BaseAudioContext context, DOMString name, + optional AudioWorkletNodeOptions options = {}); readonly attribute AudioParamMap parameters; readonly attribute MessagePort port; attribute EventHandler onprocessorerror; @@ -584,9 +583,9 @@ dictionary AudioWorkletNodeOptions : AudioNodeOptions { object processorOptions; }; -[Exposed=AudioWorklet, -Constructor (optional AudioWorkletNodeOptions options = {})] +[Exposed=AudioWorklet] interface AudioWorkletProcessor { + constructor (optional AudioWorkletNodeOptions options = {}); readonly attribute MessagePort port; }; diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-identity.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-identity.idl new file mode 100644 index 00000000000..5a59a4887ac --- /dev/null +++ b/tests/wpt/web-platform-tests/interfaces/webrtc-identity.idl @@ -0,0 +1,67 @@ +// GENERATED CONTENT - DO NOT EDIT +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Identity for WebRTC 1.0 (https://w3c.github.io/webrtc-identity/identity.html) + +[Global, Exposed=RTCIdentityProviderGlobalScope] +interface RTCIdentityProviderGlobalScope : WorkerGlobalScope { + readonly attribute RTCIdentityProviderRegistrar rtcIdentityProvider; +}; + +[Exposed=RTCIdentityProviderGlobalScope] +interface RTCIdentityProviderRegistrar { + void register(RTCIdentityProvider idp); +}; + +dictionary RTCIdentityProvider { + required GenerateAssertionCallback generateAssertion; + required ValidateAssertionCallback validateAssertion; +}; + +callback GenerateAssertionCallback = Promise<RTCIdentityAssertionResult> (DOMString contents, DOMString origin, RTCIdentityProviderOptions options); + +callback ValidateAssertionCallback = Promise<RTCIdentityValidationResult> (DOMString assertion, DOMString origin); + +dictionary RTCIdentityAssertionResult { + required RTCIdentityProviderDetails idp; + required DOMString assertion; +}; + +dictionary RTCIdentityProviderDetails { + required DOMString domain; + DOMString protocol = "default"; +}; + +dictionary RTCIdentityValidationResult { + required DOMString identity; + required DOMString contents; +}; + +partial interface RTCPeerConnection { + void setIdentityProvider(DOMString provider, optional RTCIdentityProviderOptions options); + Promise<DOMString> getIdentityAssertion(); + readonly attribute Promise<RTCIdentityAssertion> peerIdentity; + readonly attribute DOMString? idpLoginUrl; + readonly attribute DOMString? idpErrorInfo; +}; + +dictionary RTCIdentityProviderOptions { + DOMString protocol = "default"; + DOMString usernameHint; + DOMString peerIdentity; +}; + +[Constructor(DOMString idp, DOMString name), Exposed=Window] +interface RTCIdentityAssertion { + attribute DOMString idp; + attribute DOMString name; +}; + +partial dictionary MediaStreamConstraints { + DOMString peerIdentity; +}; + +partial interface MediaStreamTrack { + readonly attribute boolean isolated; + attribute EventHandler onisolationchange; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/webusb.idl b/tests/wpt/web-platform-tests/interfaces/webusb.idl index fcca851b8b5..ad5c480454d 100644 --- a/tests/wpt/web-platform-tests/interfaces/webusb.idl +++ b/tests/wpt/web-platform-tests/interfaces/webusb.idl @@ -39,11 +39,11 @@ dictionary USBConnectionEventInit : EventInit { }; [ - Constructor(DOMString type, USBConnectionEventInit eventInitDict), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBConnectionEvent : Event { + constructor(DOMString type, USBConnectionEventInit eventInitDict); [SameObject] readonly attribute USBDevice device; }; @@ -110,81 +110,81 @@ dictionary USBControlTransferParameters { }; [ - Constructor(USBTransferStatus status, optional DataView? data), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBInTransferResult { + constructor(USBTransferStatus status, optional DataView? data); readonly attribute DataView? data; readonly attribute USBTransferStatus status; }; [ - Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBOutTransferResult { + constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0); readonly attribute unsigned long bytesWritten; readonly attribute USBTransferStatus status; }; [ - Constructor(USBTransferStatus status, optional DataView? data), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBIsochronousInTransferPacket { + constructor(USBTransferStatus status, optional DataView? data); readonly attribute DataView? data; readonly attribute USBTransferStatus status; }; [ - Constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBIsochronousInTransferResult { + constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data); readonly attribute DataView? data; readonly attribute FrozenArray<USBIsochronousInTransferPacket> packets; }; [ - Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBIsochronousOutTransferPacket { + constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0); readonly attribute unsigned long bytesWritten; readonly attribute USBTransferStatus status; }; [ - Constructor(sequence<USBIsochronousOutTransferPacket> packets), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBIsochronousOutTransferResult { + constructor(sequence<USBIsochronousOutTransferPacket> packets); readonly attribute FrozenArray<USBIsochronousOutTransferPacket> packets; }; [ - Constructor(USBDevice device, octet configurationValue), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBConfiguration { + constructor(USBDevice device, octet configurationValue); readonly attribute octet configurationValue; readonly attribute DOMString? configurationName; readonly attribute FrozenArray<USBInterface> interfaces; }; [ - Constructor(USBConfiguration configuration, octet interfaceNumber), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBInterface { + constructor(USBConfiguration configuration, octet interfaceNumber); readonly attribute octet interfaceNumber; readonly attribute USBAlternateInterface alternate; readonly attribute FrozenArray<USBAlternateInterface> alternates; @@ -192,11 +192,11 @@ interface USBInterface { }; [ - Constructor(USBInterface deviceInterface, octet alternateSetting), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBAlternateInterface { + constructor(USBInterface deviceInterface, octet alternateSetting); readonly attribute octet alternateSetting; readonly attribute octet interfaceClass; readonly attribute octet interfaceSubclass; @@ -217,11 +217,11 @@ enum USBEndpointType { }; [ - Constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction), Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext ] interface USBEndpoint { + constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction); readonly attribute octet endpointNumber; readonly attribute USBDirection direction; readonly attribute USBEndpointType type; @@ -242,6 +242,7 @@ dictionary USBPermissionStorage { sequence<AllowedUSBDevice> allowedDevices = []; }; +[Exposed=(DedicatedWorker,SharedWorker,Window)] interface USBPermissionResult : PermissionStatus { attribute FrozenArray<USBDevice> devices; }; diff --git a/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-address.js b/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-address.js new file mode 100644 index 00000000000..df39258dc92 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-address.js @@ -0,0 +1,44 @@ +self.addEventListener('canmakepayment', (event) => { + event.respondWith(true); +}); + +async function responder(event) { + const methodName = event.methodData[0].supportedMethods; + const shippingOption = event.shippingOptions[0].id; + const shippingAddress = { + addressLine: [ + '1875 Explorer St #1000', + ], + city: 'Reston', + country: 'US', + dependentLocality: '', + organization: 'Google', + phone: '+15555555555', + postalCode: '20190', + recipient: 'John Smith', + region: 'VA', + sortingCode: '', + }; + if (!event.changeShippingAddress) { + return { + methodName, + details: { + changeShippingAddressReturned: + 'The changeShippingAddress() method is not implemented.', + }, + }; + } + let changeShippingAddressReturned; + try { + const response = await event.changeShippingAddress(shippingAddress); + changeShippingAddressReturned = response; + } catch (err) { + changeShippingAddressReturned = err.message; + } + return {methodName, details: {changeShippingAddressReturned}, shippingAddress, + shippingOption}; +} + +self.addEventListener('paymentrequest', (event) => { + event.respondWith(responder(event)); +}); diff --git a/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-option.js b/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-option.js new file mode 100644 index 00000000000..ac3307b619c --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-option.js @@ -0,0 +1,44 @@ +self.addEventListener('canmakepayment', (event) => { + event.respondWith(true); +}); + +async function responder(event) { + const methodName = event.methodData[0].supportedMethods; + const shippingOption = event.shippingOptions[0].id; + const shippingAddress = { + addressLine: [ + '1875 Explorer St #1000', + ], + city: 'Reston', + country: 'US', + dependentLocality: '', + organization: 'Google', + phone: '+15555555555', + postalCode: '20190', + recipient: 'John Smith', + region: 'VA', + sortingCode: '', + }; + if (!event.changeShippingOption) { + return { + methodName, + details: { + changeShippingOptionReturned: + 'The changeShippingOption() method is not implemented.', + }, + }; + } + let changeShippingOptionReturned; + try { + const response = await event.changeShippingOption(shippingOption); + changeShippingOptionReturned = response; + } catch (err) { + changeShippingOptionReturned = err.message; + } + return {methodName, details: {changeShippingOptionReturned}, shippingAddress, + shippingOption}; +} + +self.addEventListener('paymentrequest', (event) => { + event.respondWith(responder(event)); +}); diff --git a/tests/wpt/web-platform-tests/payment-handler/change-shipping-address-manual.https.html b/tests/wpt/web-platform-tests/payment-handler/change-shipping-address-manual.https.html new file mode 100644 index 00000000000..3b98d56a251 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-handler/change-shipping-address-manual.https.html @@ -0,0 +1,161 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>Tests for PaymentRequestEvent.changeShippingAddress()</title> + +<link rel="manifest" href="/payment-handler/basic-card.json" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="register-and-activate-service-worker.js"></script> +<p>If the payment sheet is shown, please authorize the mock payment.</p> +<script> + const methodName = window.location.origin + '/payment-handler/payment-app/'; + function createRequest() { + return new PaymentRequest([{supportedMethods: methodName}], { + total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}}, + shippingOptions: [{ + id: 'freeShippingOption', + label: 'Free global shipping', + amount: { + currency: 'USD', + value: '0', + }, + selected: false, + }], + }, {requestShipping: true}); + } + + async function completeAppSetUp(registration) { + await registration.paymentManager.instruments.clear(); + await registration.paymentManager.instruments.set('instrument-key', { + name: 'Instrument Name', + method: methodName, + }); + await navigator.serviceWorker.ready; + await registration.paymentManager.enableDelegations(['shippingAddress']); + } + + async function runTests(registration) { + await completeAppSetUp(registration); + promise_test(async (t) => { + const request = createRequest(); + // Intentionally do not respond to the 'shippingaddresschange' event. + const response = await test_driver.bless('showing a payment sheet', () => + request.show() + ); + const complete_promise = response.complete('success'); + + assert_equals(response.details.changeShippingAddressReturned, null); + + return complete_promise; + }, 'If updateWith(details) is not run, changeShippingAddress() returns null.'); + + promise_test(async (t) => { + const request = createRequest(); + request.addEventListener('shippingaddresschange', (event) => { + assert_equals(request.shippingAddress.organization, '', 'organization should be redacted'); + assert_equals(request.shippingAddress.phone, '', 'phone should be redacted'); + assert_equals(request.shippingAddress.recipient, '', 'recipient should be redacted'); + assert_equals(request.shippingAddress.addressLine.length, 0, 'addressLine should be redacted'); + assert_equals(request.shippingAddress.city, 'Reston'); + assert_equals(request.shippingAddress.country, 'US'); + assert_equals(request.shippingAddress.postalCode, '20190'); + assert_equals(request.shippingAddress.region, 'VA'); + event.updateWith({ + total: {label: 'Total', amount: {currency: 'GBP', value: '0.02'}}, + error: 'Error for test', + modifiers: [ + { + supportedMethods: methodName, + data: {soup: 'potato'}, + total: { + label: 'Modified total', + amount: {currency: 'EUR', value: '0.03'}, + }, + additionalDisplayItems: [ + { + label: 'Modified display item', + amount: {currency: 'INR', value: '0.06'}, + }, + ], + }, + { + supportedMethods: methodName + '2', + data: {soup: 'tomato'}, + total: { + label: 'Modified total #2', + amount: {currency: 'CHF', value: '0.07'}, + }, + additionalDisplayItems: [ + { + label: 'Modified display item #2', + amount: {currency: 'CAD', value: '0.08'}, + }, + ], + }, + ], + displayItems: [ + { + label: 'Display item', + amount: {currency: 'CNY', value: '0.04'}, + }, + ], + shippingOptions: [ + { + id: 'freeShippingOption', + label: 'express global shipping', + amount: { + currency: 'USD', + value: '0', + }, + selected: true, + } + ], + shippingAddressErrors: { + country: 'US only shipping', + } + }); + }); + const response = await test_driver.bless('showing a payment sheet', () => + request.show() + ); + const complete_promise = response.complete('success'); + const changeShippingAddressReturned = + response.details.changeShippingAddressReturned; + + assert_equals(changeShippingAddressReturned.total.currency, 'GBP'); + assert_equals(changeShippingAddressReturned.total.value, '0.02'); + assert_equals(changeShippingAddressReturned.total.label, undefined); + assert_equals(changeShippingAddressReturned.error, 'Error for test'); + assert_equals(changeShippingAddressReturned.modifiers.length, 1); + assert_equals(changeShippingAddressReturned.displayItems, undefined); + assert_equals(changeShippingAddressReturned.shippingOptions.length, 1); + assert_equals(changeShippingAddressReturned.paymentMethodErrors, undefined); + assert_equals(changeShippingAddressReturned.shippingAddressErrors.country, 'US only shipping'); + + const shipping_option = changeShippingAddressReturned.shippingOptions[0]; + assert_equals(shipping_option.id, 'freeShippingOption' ); + assert_equals(shipping_option.label, 'express global shipping'); + assert_equals(shipping_option.amount.currency, 'USD'); + assert_equals(shipping_option.amount.value, '0'); + assert_true(shipping_option.selected); + + const modifier = changeShippingAddressReturned.modifiers[0]; + assert_equals(modifier.supportedMethods, methodName); + assert_equals(modifier.data.soup, 'potato'); + assert_equals(modifier.total.label, ''); + assert_equals(modifier.total.amount.currency, 'EUR'); + assert_equals(modifier.total.amount.value, '0.03'); + assert_equals(modifier.additionalDisplayItems, undefined); + + return complete_promise; + }, 'The changeShippingAddress() returns some details from the "shippingaddresschange" event\'s updateWith(details) call.'); + } + + registerAndActiveServiceWorker( + 'app-change-shipping-address.js', + 'payment-app/', + runTests + ); +</script> diff --git a/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html b/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html new file mode 100644 index 00000000000..00d1aee70b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html @@ -0,0 +1,160 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>Tests for PaymentRequestEvent.changeShippingOption()</title> + +<link rel="manifest" href="/payment-handler/basic-card.json" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="register-and-activate-service-worker.js"></script> +<p>If the payment sheet is shown, please authorize the mock payment.</p> +<script> + const methodName = window.location.origin + '/payment-handler/payment-app/'; + function createRequest() { + return new PaymentRequest([{supportedMethods: methodName}], { + total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}}, + shippingOptions: [{ + id: 'freeShippingOption', + label: 'Free global shipping', + amount: { + currency: 'USD', + value: '0', + }, + selected: false, + }, + { + id: 'expressShippingOption', + label: 'express global shipping', + amount: { + currency: 'USD', + value: '0', + }, + selected: true, + }], + }, {requestShipping: true}); + } + + async function completeAppSetUp(registration) { + await registration.paymentManager.instruments.clear(); + await registration.paymentManager.instruments.set('instrument-key', { + name: 'Instrument Name', + method: methodName, + }); + await navigator.serviceWorker.ready; + await registration.paymentManager.enableDelegations(['shippingAddress']); + } + + async function runTests(registration) { + await completeAppSetUp(registration); + promise_test(async (t) => { + const request = createRequest(); + // Intentionally do not respond to the 'shippingoptionchange' event. + const response = await test_driver.bless('showing a payment sheet', () => + request.show() + ); + const complete_promise = response.complete('success'); + + assert_equals(response.details.changeShippingOptionReturned, null); + + return complete_promise; + }, 'If updateWith(details) is not run, changeShippingOption() returns null.'); + + promise_test(async (t) => { + const request = createRequest(); + request.addEventListener('shippingoptionchange', (event) => { + assert_equals(request.shippingOption, 'freeShippingOption'); + event.updateWith({ + total: {label: 'Total', amount: {currency: 'GBP', value: '0.02'}}, + error: 'Error for test', + modifiers: [ + { + supportedMethods: methodName, + data: {soup: 'potato'}, + total: { + label: 'Modified total', + amount: {currency: 'EUR', value: '0.03'}, + }, + additionalDisplayItems: [ + { + label: 'Modified display item', + amount: {currency: 'INR', value: '0.06'}, + }, + ], + }, + { + supportedMethods: methodName + '2', + data: {soup: 'tomato'}, + total: { + label: 'Modified total #2', + amount: {currency: 'CHF', value: '0.07'}, + }, + additionalDisplayItems: [ + { + label: 'Modified display item #2', + amount: {currency: 'CAD', value: '0.08'}, + }, + ], + }, + ], + displayItems: [ + { + label: 'Display item', + amount: {currency: 'CNY', value: '0.04'}, + }, + ], + shippingOptions: [ + { + id: 'freeShippingOption', + label: 'express global shipping', + amount: { + currency: 'USD', + value: '0', + }, + selected: true, + } + ], + }); + }); + const response = await test_driver.bless('showing a payment sheet', () => + request.show() + ); + const complete_promise = response.complete('success'); + const changeShippingOptionReturned = + response.details.changeShippingOptionReturned; + + assert_equals(changeShippingOptionReturned.total.currency, 'GBP'); + assert_equals(changeShippingOptionReturned.total.value, '0.02'); + assert_equals(changeShippingOptionReturned.total.label, undefined); + assert_equals(changeShippingOptionReturned.error, 'Error for test'); + assert_equals(changeShippingOptionReturned.modifiers.length, 1); + assert_equals(changeShippingOptionReturned.displayItems, undefined); + assert_equals(changeShippingOptionReturned.shippingOptions.length, 1); + assert_equals(changeShippingOptionReturned.paymentMethodErrors, undefined); + assert_equals(changeShippingOptionReturned.shippingAddressErrors, undefined); + + const shipping_option = changeShippingOptionReturned.shippingOptions[0]; + assert_equals(shipping_option.id, 'freeShippingOption' ); + assert_equals(shipping_option.label, 'express global shipping'); + assert_equals(shipping_option.amount.currency, 'USD'); + assert_equals(shipping_option.amount.value, '0'); + assert_true(shipping_option.selected); + + const modifier = changeShippingOptionReturned.modifiers[0]; + assert_equals(modifier.supportedMethods, methodName); + assert_equals(modifier.data.soup, 'potato'); + assert_equals(modifier.total.label, ''); + assert_equals(modifier.total.amount.currency, 'EUR'); + assert_equals(modifier.total.amount.value, '0.03'); + assert_equals(modifier.additionalDisplayItems, undefined); + + return complete_promise; + }, 'The changeShippingOption() returns some details from the "shippingoptionchange" event\'s updateWith(details) call.'); + } + + registerAndActiveServiceWorker( + 'app-change-shipping-option.js', + 'payment-app/', + runTests + ); +</script> diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js b/tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js index 2558bbda589..703db425590 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js +++ b/tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js @@ -9,7 +9,7 @@ var BarcodeDetectionTest = (() => { shapeDetection.mojom.BarcodeDetectionProvider); this.interceptor_ = new MojoInterfaceInterceptor( - shapeDetection.mojom.BarcodeDetectionProvider.name); + shapeDetection.mojom.BarcodeDetectionProvider.name, "context", true); this.interceptor_.oninterfacerequest = e => this.bindingSet_.addBinding(this, e.handle); this.interceptor_.start(); diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js b/tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js index 1275e4dd2f5..01306a2a0c7 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js +++ b/tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js @@ -9,7 +9,7 @@ var FaceDetectionTest = (() => { shapeDetection.mojom.FaceDetectionProvider); this.interceptor_ = new MojoInterfaceInterceptor( - shapeDetection.mojom.FaceDetectionProvider.name); + shapeDetection.mojom.FaceDetectionProvider.name, "context", true); this.interceptor_.oninterfacerequest = e => this.bindingSet_.addBinding(this, e.handle); this.interceptor_.start(); diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py index a2498333c2b..6569580e9ff 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py @@ -346,7 +346,7 @@ def test_tests_affected_idlharness(capsys, manifest_dir): wpt.main(argv=["tests-affected", "--metadata", manifest_dir, "%s~..%s" % (commit, commit)]) assert excinfo.value.code == 0 out, err = capsys.readouterr() - assert "webrtc-stats/idlharness.window.js\nwebrtc/idlharness.https.window.js\n" == out + assert "webrtc-identity/idlharness.https.window.js\nwebrtc-stats/idlharness.window.js\nwebrtc/idlharness.https.window.js\n" == out @pytest.mark.slow # this updates the manifest diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py index 71f246f4b6d..c9de22038dd 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py @@ -39,6 +39,7 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data, executor_kwargs["supports_eager_pageload"] = False capabilities = { + "acceptInsecureCerts": True, "goog:chromeOptions": { "prefs": { "profile": { diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py index 42f3b00dab5..15bbf94c33c 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py @@ -221,8 +221,10 @@ def pack_result(data): if not data.get("known_intermittent"): return status_intern.store(data.get("status")) result = array.array("B") - result_parts = ([data["status"], data.get("expected", data["status"])] + - data["known_intermittent"]) + expected = data.get("expected") + if expected is None: + expected = data["status"] + result_parts = [data["status"], expected] + data["known_intermittent"] for i, part in enumerate(result_parts): value = status_intern.store(part) if i % 2 == 0: @@ -688,13 +690,6 @@ class TestFileData(object): expected.set_leak_threshold(run_info, value) continue - if prop == "status": - status, known_intermittent = unpack_result(value) - value = Result(status, - known_intermittent, - default_expected_by_type[self.item_type, - subtest_id is not None]) - test_expected = expected_by_test[test_id] if subtest_id is None: item_expected = test_expected @@ -702,7 +697,13 @@ class TestFileData(object): if isinstance(subtest_id, str): subtest_id = subtest_id.decode("utf8") item_expected = test_expected.get_subtest(subtest_id) + if prop == "status": + status, known_intermittent = unpack_result(value) + value = Result(status, + known_intermittent, + default_expected_by_type[self.item_type, + subtest_id is not None]) item_expected.set_result(run_info, value) elif prop == "asserts": item_expected.set_asserts(run_info, value) diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html index 11ef305064d..0104ba35805 100644 --- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html @@ -68,7 +68,7 @@ function expect_blocked_uri(s) { return e => { assert_true(e.blockedURI === s, - `expected "${e.blockedUri}" to be "${s}".`); + `expected "${e.blockedURI}" to be "${s}".`); return e; } } @@ -154,6 +154,7 @@ promise_test(t => { let p = Promise.resolve() .then(promise_violation("trusted-types two")) + .then(expect_blocked_uri("trusted-types-sink")) .then(expect_sample("Element.innerHTML")) .then(expect_sample("abc")); expect_throws(_ => { document.getElementById("div").innerHTML = "abc" }); @@ -163,6 +164,7 @@ promise_test(t => { let p = Promise.resolve() .then(promise_violation("trusted-types two")) + .then(expect_blocked_uri("trusted-types-sink")) .then(expect_sample("HTMLAnchorElement.href")); expect_throws(_ => { document.getElementById("anchor").href = "" }); return p; @@ -171,6 +173,7 @@ promise_test(t => { let p = Promise.resolve() .then(promise_violation("trusted-types two")) + .then(expect_blocked_uri("trusted-types-sink")) .then(expect_sample("HTMLElement.innerText")) .then(expect_sample("2+2;")); expect_throws(_ => document.getElementById("script").innerText = "2+2;"); @@ -180,6 +183,7 @@ promise_test(t => { let p = Promise.resolve() .then(promise_violation("trusted-types one")) + .then(expect_blocked_uri("trusted-types-sink")) .then(expect_sample("eval")) .then(expect_sample("2+2")) .then(promise_flush()); @@ -193,6 +197,7 @@ // start of the value, but it should not be excessively long. let p = Promise.resolve() .then(promise_violation("trusted-types two")) + .then(expect_blocked_uri("trusted-types-sink")) .then(expect_sample("HTMLElement.innerText")) .then(expect_sample("abbb")) .then(e => assert_less_than(e.sample.length, 150)); @@ -211,6 +216,7 @@ promise_test(t => { let p = Promise.resolve() .then(promise_violation("trusted-types one")) + .then(expect_blocked_uri("trusted-types-sink")) .then(expect_sample("HTMLAnchorElement.href")) .then(expect_sample("abc")); expect_throws(_ => document.getElementById("customlink").href = "abc"); diff --git a/tests/wpt/web-platform-tests/webrtc-identity/idlharness.https.window.js b/tests/wpt/web-platform-tests/webrtc-identity/idlharness.https.window.js new file mode 100644 index 00000000000..da1cb85a8e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc-identity/idlharness.https.window.js @@ -0,0 +1,24 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +idl_test( + ['webrtc-identity'], + ['webrtc', 'mediacapture-streams', 'html', 'dom'], + async idlArray => { + idlArray.add_objects({ + RTCPeerConnection: [`new RTCPeerConnection()`], + RTCIdentityAssertion: [`new RTCIdentityAssertion('idp', 'name')`], + MediaStreamTrack: ['track'], + // TODO: RTCIdentityProviderGlobalScope + // TODO: RTCIdentityProviderRegistrar + }); + + try { + self.track = await navigator.mediaDevices + .getUserMedia({audio: true}) + .then(m => m.getTracks()[0]); + } catch (e) {} + } +); diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js index 24b5274bc23..863b9945724 100644 --- a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js +++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js @@ -30,6 +30,31 @@ let assert_point_approx_equals = function(p1, p2, epsilon = FLOAT_EPSILON, prefi } }; +// |p1|, |p2| - objects with x, y, z, w components that are floating point numbers +// |epsilon| - float specifying precision +// |prefix| - string used as a prefix for logging +let assert_point_significantly_not_equals = function(p1, p2, epsilon = FLOAT_EPSILON, prefix = "") { + + assert_not_equals(p1, null, prefix + "p1 must be non-null"); + assert_not_equals(p2, null, prefix + "p2 must be non-null"); + + let mismatched_component = null; + for (const v of ['x', 'y', 'z', 'w']) { + if (Math.abs(p1[v] - p2[v]) > epsilon) { + mismatched_component = v; + break; + } + } + + if (mismatched_component === null) { + let error_message = prefix + ' Point comparison failed.\n'; + error_message += ` p1: {x: ${p1.x}, y: ${p1.y}, z: ${p1.z}, w: ${p1.w}}\n`; + error_message += ` p2: {x: ${p2.x}, y: ${p2.y}, z: ${p2.z}, w: ${p2.w}}\n`; + error_message += ` Difference in components did not exceeded the given epsilon.\n`; + assert_unreached(error_message); + } +}; + // |m1|, |m2| - arrays of floating point numbers // |epsilon| - float specifying precision // |prefix| - string used as a prefix for logging diff --git a/tests/wpt/web-platform-tests/webxr/xrReferenceSpace_originOffset_viewer.https.html b/tests/wpt/web-platform-tests/webxr/xrReferenceSpace_originOffset_viewer.https.html new file mode 100644 index 00000000000..2f93914e851 --- /dev/null +++ b/tests/wpt/web-platform-tests/webxr/xrReferenceSpace_originOffset_viewer.https.html @@ -0,0 +1,54 @@ +<!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_constants.js"></script> +<script src="resources/webxr_test_asserts.js"></script> +<canvas id="webgl-canvas"></canvas> + +<script> +let testName = "Creating XRReferenceSpace origin offset off of `viewer` space works."; + +let fakeDeviceInitParams = { + supportsImmersive: true, + viewerOrigin: VALID_POSE_TRANSFORM, + views: VALID_VIEWS, + supportedFeatures: ALL_FEATURES +}; + +let originOffsetPosition = new DOMPointReadOnly(0, 0, 1); + +let testFunction = + (session, fakeDeviceController, t) => new Promise((resolve) => { + + session.requestReferenceSpace('local').then( (localSpace) => { + session.requestReferenceSpace('viewer').then( (viewerSpace) => { + + let offsetSpace = viewerSpace.getOffsetReferenceSpace( + new XRRigidTransform(originOffsetPosition)); + + function OnFrame(time, frame) { + let viewerPose = frame.getPose(viewerSpace, localSpace); + let offsetPose = frame.getPose(offsetSpace, localSpace); + + let viewerPose2 = frame.getPose(localSpace ,viewerSpace); + let offsetPose2 = frame.getPose(localSpace, offsetSpace); + + t.step(() => { + assert_point_significantly_not_equals(viewerPose.transform.position, offsetPose.transform.position); + assert_point_significantly_not_equals(viewerPose2.transform.position, offsetPose2.transform.position); + }); + + resolve(); + } + + // Can only request input poses in an xr frame. + session.requestAnimationFrame(OnFrame); + }); + }); + }); + +xr_session_promise_test( + testName, testFunction, fakeDeviceInitParams, 'immersive-vr'); + +</script> |