From 05f1bbf0a92f2cd8495813cff03af227177de858 Mon Sep 17 00:00:00 2001 From: Servo WPT Sync <32481905+servo-wpt-sync@users.noreply.github.com> Date: Sat, 6 Apr 2024 22:58:36 -0400 Subject: [PATCH] Update web-platform-tests to revision b'b73a0a32890ff293961eb55bb90ba57a5a711f48' (#32010) --- .../block-in-inline-become-float.html.ini | 2 + .../parsing/grid-column-gap-computed.html.ini | 15 + .../parsing/grid-column-gap-valid.html.ini | 18 + .../parsing/grid-gap-computed.html.ini | 33 + .../parsing/grid-gap-shorthand.html.ini | 36 + .../css-align/parsing/grid-gap-valid.html.ini | 27 + .../parsing/grid-row-gap-computed.html.ini | 18 + .../parsing/grid-row-gap-valid.html.ini | 15 + .../clip-opacity-out-of-flow.html.ini | 2 + .../color-computed-relative-color.html.ini | 117 + .../line-clamp-001.tentative.html.ini | 2 + .../line-clamp-004.tentative.html.ini | 2 + .../line-clamp-005.tentative.html.ini | 2 + .../line-clamp-006.tentative.html.ini | 2 + .../line-clamp-007.tentative.html.ini | 2 + .../line-clamp-008.tentative.html.ini | 2 + .../line-clamp-009.tentative.html.ini | 2 + .../line-clamp-010.tentative.html.ini | 2 + .../line-clamp-011.tentative.html.ini | 2 + .../line-clamp-012.tentative.html.ini | 2 + .../line-clamp-013.tentative.html.ini | 2 + .../line-clamp-015.tentative.html.ini | 2 + .../line-clamp-016.tentative.html.ini | 2 + .../line-clamp-017.tentative.html.ini | 2 + .../line-clamp-019.tentative.html.ini | 2 + ...e-clamp-with-abspos-001.tentative.html.ini | 2 + ...e-clamp-with-abspos-002.tentative.html.ini | 2 + ...e-clamp-with-abspos-003.tentative.html.ini | 2 + ...e-clamp-with-abspos-004.tentative.html.ini | 2 + ...e-clamp-with-abspos-005.tentative.html.ini | 2 + ...e-clamp-with-abspos-006.tentative.html.ini | 2 + ...e-clamp-with-abspos-007.tentative.html.ini | 2 + ...e-clamp-with-abspos-008.tentative.html.ini | 2 + ...e-clamp-with-abspos-009.tentative.html.ini | 2 + ...e-clamp-with-abspos-010.tentative.html.ini | 2 + .../text-align-last-justify-br.html.ini | 2 + .../parsing/starting-style-parsing.html.ini | 15 + .../starting-style-adjustment.html.ini | 3 + ...ainer-progress-computed.tentative.html.ini | 48 + ...iner-progress-serialize.tentative.html.ini | 24 + ...media-progress-computed.tentative.html.ini | 18 + ...ere-pseudo-containing-hard-pseudo.html.ini | 36 + .../HTMLMediaElement.html.ini | 2 + ...tyle-meta-from-fragment.tentative.html.ini | 3 + .../tentative/observable-first.any.js.ini | 32 + .../tentative/observable-last.any.js.ini | 32 + .../tentative/observable-switchMap.any.js.ini | 38 + .../api/request/request-bad-port.any.js.ini | 12 + ...y-clear-site-data.tentative.https.html.ini | 9 + ...ary-decompression.tentative.https.html.ini | 9 + ...with-link-element.tentative.https.html.ini | 9 + ...-with-link-header.tentative.https.html.ini | 3 + ...nary-registration.tentative.https.html.ini | 9 + .../br/bad-br-body.https.any.js.ini | 3 + .../br/big-br-body.https.any.js.ini | 20 + .../br/br-body.https.any.js.ini | 9 + ...eshow-events-iframe-contentWindow.html.ini | 3 - .../traverse_the_history_5.html.ini | 3 - .../embedded-opener-remove-frame.html.ini | 2 +- .../display-none-or-contents.html.ini | 2 + .../mime-types/canPlayType.html.ini | 58 +- ...rame_sandbox_popups_nonescaping-1.html.ini | 3 +- .../module-tla-delayed.html.ini | 3 - ...without-attributes.tentative.window.js.ini | 3 + .../selection/selection-nested-video.html.ini | 4 + .../cross-shadow-boundary-6.html.ini | 2 + .../script-src-allows-wasm.tentative.html.ini | 3 + .../script-src-blocks-wasm.tentative.html.ini | 3 + ...ker-import-source-phase.tentative.html.ini | 3 + .../webmessaging/with-ports/017.html.ini | 4 - .../workers/WorkerGlobalScope-close.html.ini | 3 - tests/wpt/meta/MANIFEST.json | 4721 ++++++++++++----- .../parsing/grid-column-gap-computed.html.ini | 15 + .../parsing/grid-column-gap-valid.html.ini | 18 + .../parsing/grid-gap-computed.html.ini | 33 + .../parsing/grid-gap-shorthand.html.ini | 36 + .../css-align/parsing/grid-gap-valid.html.ini | 27 + .../parsing/grid-row-gap-computed.html.ini | 18 + .../parsing/grid-row-gap-valid.html.ini | 15 + .../clip-opacity-out-of-flow.html.ini | 2 + .../color-computed-relative-color.html.ini | 117 + .../font-size-adjust-reload.html.ini | 2 + .../line-clamp-001.tentative.html.ini | 2 + .../line-clamp-004.tentative.html.ini | 2 + .../line-clamp-005.tentative.html.ini | 2 + .../line-clamp-006.tentative.html.ini | 2 + .../line-clamp-007.tentative.html.ini | 2 + .../line-clamp-008.tentative.html.ini | 2 + .../line-clamp-009.tentative.html.ini | 2 + .../line-clamp-010.tentative.html.ini | 2 + .../line-clamp-011.tentative.html.ini | 2 + .../line-clamp-012.tentative.html.ini | 2 + .../line-clamp-013.tentative.html.ini | 2 + .../line-clamp-015.tentative.html.ini | 2 + .../line-clamp-016.tentative.html.ini | 2 + .../line-clamp-017.tentative.html.ini | 2 + .../line-clamp-019.tentative.html.ini | 2 + ...e-clamp-with-abspos-001.tentative.html.ini | 2 + ...e-clamp-with-abspos-002.tentative.html.ini | 2 + ...e-clamp-with-abspos-003.tentative.html.ini | 2 + ...e-clamp-with-abspos-004.tentative.html.ini | 2 + ...e-clamp-with-abspos-005.tentative.html.ini | 2 + ...e-clamp-with-abspos-006.tentative.html.ini | 2 + ...e-clamp-with-abspos-007.tentative.html.ini | 2 + ...e-clamp-with-abspos-008.tentative.html.ini | 2 + ...e-clamp-with-abspos-009.tentative.html.ini | 2 + ...e-clamp-with-abspos-010.tentative.html.ini | 2 + .../text-align-last-justify-br.html.ini | 2 + .../parsing/starting-style-parsing.html.ini | 15 + .../starting-style-adjustment.html.ini | 3 + ...ainer-progress-computed.tentative.html.ini | 48 + ...iner-progress-serialize.tentative.html.ini | 24 + ...media-progress-computed.tentative.html.ini | 18 + ...ryList-addListener-removeListener.html.ini | 3 - ...ere-pseudo-containing-hard-pseudo.html.ini | 36 + ...tyle-meta-from-fragment.tentative.html.ini | 3 + .../tentative/observable-first.any.js.ini | 32 + .../tentative/observable-last.any.js.ini | 32 + .../tentative/observable-switchMap.any.js.ini | 38 + .../api/request/request-bad-port.any.js.ini | 12 + ...y-clear-site-data.tentative.https.html.ini | 9 + ...ary-decompression.tentative.https.html.ini | 9 + ...with-link-element.tentative.https.html.ini | 9 + ...-with-link-header.tentative.https.html.ini | 3 + ...nary-registration.tentative.https.html.ini | 9 + .../br/bad-br-body.https.any.js.ini | 3 + .../br/big-br-body.https.any.js.ini | 21 + .../br/br-body.https.any.js.ini | 9 + .../css-images.sub.tentative.html.ini | 3 - .../load-pageshow-events-window-open.html.ini | 3 + ...avigation-unload-same-origin.window.js.ini | 3 + .../replace-before-load/a-click.html.ini | 3 - .../traverse_the_history_4.html.ini | 3 - .../mime-types/canPlayType.html.ini | 58 +- .../iframe_sandbox_popups_escaping-3.html.ini | 3 +- ...rame_sandbox_popups_nonescaping-1.html.ini | 3 +- .../text-plain.window.js.ini | 3 + .../defer-script/async-script.html.ini | 4 + .../ignore-opens-during-unload.window.js.ini | 1 - ...without-attributes.tentative.window.js.ini | 3 + ...nested-context-navigations-iframe.html.ini | 19 + .../selection/selection-nested-video.html.ini | 4 + .../cross-shadow-boundary-6.html.ini | 2 + .../script-src-allows-wasm.tentative.html.ini | 3 + .../script-src-blocks-wasm.tentative.html.ini | 3 + ...ker-import-source-phase.tentative.html.ini | 3 + .../webmessaging/without-ports/018.html.ini | 4 - .../tests/WebCryptoAPI/sign_verify/eddsa.js | 4 +- ...etSinkId-with-selectAudioOutput.https.html | 2 +- tests/wpt/tests/bluetooth/WEB_FEATURES.yml | 3 + ...by-feature-policy.tentative.https.sub.html | 1 + ...by-feature-policy.tentative.https.sub.html | 1 + .../resources/user-activation.js | 2 +- tests/wpt/tests/common/media.js | 4 - tests/wpt/tests/compression/WEB_FEATURES.yml | 3 + .../media-src/media-src-7_1.html | 6 +- .../media-src/media-src-7_1_2.sub.html | 4 +- .../media-src/media-src-7_2_2.sub.html | 2 +- .../media-src/media-src-7_3.sub.html | 4 +- .../media-src/media-src-7_3_2.sub.html | 4 +- .../media-src/media-src-blocked.sub.html | 10 +- .../media-src/media-src-redir-bug.sub.html | 12 +- .../floats/block-in-inline-become-float.html | 23 + .../support/RGB_Circles.oggtheora.ogv | Bin 66830 -> 0 bytes .../css/css-align/parsing/gap-shorthand.html | 2 +- .../parsing/grid-column-gap-computed.html | 29 + .../parsing/grid-column-gap-invalid.html | 24 + .../parsing/grid-column-gap-valid.html | 24 + .../css-align/parsing/grid-gap-computed.html | 36 + .../css-align/parsing/grid-gap-invalid.html | 22 + .../css-align/parsing/grid-gap-shorthand.html | 36 + .../css/css-align/parsing/grid-gap-valid.html | 27 + .../parsing/grid-row-gap-computed.html | 31 + .../parsing/grid-row-gap-invalid.html | 22 + .../css-align/parsing/grid-row-gap-valid.html | 23 + .../anchor-position-dynamic-005.html | 45 + .../anchor-scroll-position-try-012-ref.html | 39 + .../anchor-scroll-position-try-012.html | 62 + .../anchor-transition-attr.html | 51 + .../anchor-transition-default.html | 54 + .../anchor-transition-eval.html | 69 + .../anchor-transition-name.html | 56 + .../css-anchor-position/anchor-typed-om.html | 55 + .../chrome-40286059-crash.html | 7 + .../css-anchor-position/inset-area-basic.html | 8 +- .../position-try-options-computed.html | 9 + .../parsing/position-try-options-parsing.html | 15 + .../position-fallback-bounds-001.html | 84 - .../position-fallback-bounds-002.html | 87 - .../position-fallback-bounds-003.html | 95 - .../position-fallback-bounds-004.html | 99 - .../position-fallback-bounds-005.html | 76 - .../position-fallback-bounds-006.html | 65 - .../position-fallback-bounds-basics.html | 40 - .../position-try-order-basic.html | 197 + .../position-try-transition-basic.html | 58 + .../position-try-transition-flip.html | 68 + .../position-try-typed-om.html | 55 + ...y-anchors-visible-after-scroll-in-ref.html | 32 + ...ors-visible-after-scroll-in.tentative.html | 64 + ...-anchors-visible-after-scroll-out-ref.html | 22 + ...rs-visible-after-scroll-out.tentative.html | 59 + ...chors-visible-both-position-fixed-ref.html | 5 + ...visible-both-position-fixed.tentative.html | 38 + ...ity-anchors-visible-change-anchor-ref.html | 29 + ...chors-visible-change-anchor.tentative.html | 68 + ...ors-visible-change-css-visibility-ref.html | 16 + ...sible-change-css-visibility.tentative.html | 50 + ...ty-anchors-visible-css-visibility-ref.html | 3 + ...hors-visible-css-visibility.tentative.html | 35 + ...visible-non-intervening-container-ref.html | 10 + ...e-non-intervening-container.tentative.html | 65 + ...ty-anchors-visible-position-fixed-ref.html | 9 + ...hors-visible-position-fixed.tentative.html | 42 + ...sition-visibility-anchors-visible-ref.html | 21 +- ...chors-visible-stacked-child.tentative.html | 60 + ...chors-visible-with-position.tentative.html | 50 + ...-visibility-anchors-visible.tentative.html | 39 +- ...ion-visibility-no-overflow-scroll-ref.html | 30 + ...sibility-no-overflow-scroll.tentative.html | 44 + ...visibility-remove-anchors-visible-ref.html | 25 + ...lity-remove-anchors-visible.tentative.html | 61 + .../property-interpolations.html | 11 - .../css-anchor-position/try-tactic-wm.html | 56 + .../tests/css/css-animations/WEB_FEATURES.yml | 5 + .../css-animations/parsing/WEB_FEATURES.yml | 4 + .../css/css-backgrounds/WEB_FEATURES.yml | 9 + .../animations/WEB_FEATURES.yml | 4 + .../background-clip/WEB_FEATURES.yml | 10 + .../css-backgrounds/background-clip/list.txt | 12 - .../background-origin/list.txt | 12 - .../css-backgrounds/parsing/WEB_FEATURES.yml | 7 + .../transform-022-print-ref.html} | 0 .../transform-022-print.html} | 2 +- .../transform-023-print-ref.html} | 0 .../transform-023-print.html} | 2 +- .../transform-024-print-ref.html} | 0 .../transform-024-print.html} | 2 +- .../tests/css/css-cascade/WEB_FEATURES.yml | 4 + .../css/css-cascade/parsing/WEB_FEATURES.yml | 4 + .../wpt/tests/css/css-color/WEB_FEATURES.yml | 22 + .../clip-opacity-out-of-flow-ref.html | 5 + .../css-color/clip-opacity-out-of-flow.html | 19 + .../css/css-color/parsing/WEB_FEATURES.yml | 5 + .../color-computed-color-mix-function.html | 2 +- .../color-computed-relative-color.html | 43 + .../color-invalid-color-mix-function.html | 2 +- .../color-valid-color-mix-function.html | 2 +- .../wpt/tests/css/css-fonts/WEB_FEATURES.yml | 13 + .../css/css-fonts/animations/WEB_FEATURES.yml | 6 + .../css/css-fonts/parsing/WEB_FEATURES.yml | 14 + .../css/css-fonts/variations/WEB_FEATURES.yml | 4 + .../subgrid/placement-invalidation-001.html | 50 + ...olor-scheme-dependent-color-stops-ref.html | 47 + .../color-scheme-dependent-color-stops.html | 61 + .../clip-path-interpolation-shape.html | 114 +- .../clip-path-shape-interpolation-003.html | 37 + .../clip-path-shape-interpolation-004.html | 37 + .../clip-path/clip-path-scaled-video.html | 12 +- .../block-in-inline-become-float.html | 15 + .../line-clamp-001.tentative.html | 21 + .../line-clamp-002.tentative.html | 20 + .../line-clamp-003.tentative.html | 20 + .../line-clamp-004.tentative.html | 22 + .../line-clamp-005.tentative.html | 23 + .../line-clamp-006.tentative.html | 24 + .../line-clamp-007.tentative.html | 26 + .../line-clamp-008.tentative.html | 42 + .../line-clamp-009.tentative.html | 44 + .../line-clamp-010.tentative.html | 22 + .../line-clamp-011.tentative.html | 23 + .../line-clamp-012.tentative.html | 28 + .../line-clamp-013.tentative.html | 29 + .../line-clamp-014.tentative.html | 22 + .../line-clamp-015.tentative.html | 24 + .../line-clamp-016.tentative.html | 23 + .../line-clamp-017.tentative.html | 28 + .../line-clamp-018.tentative.html | 27 + .../line-clamp-019.tentative.html | 24 + .../line-clamp-020.tentative.html | 20 + .../line-clamp-with-abspos-001.tentative.html | 29 + .../line-clamp-with-abspos-002.tentative.html | 34 + .../line-clamp-with-abspos-003.tentative.html | 29 + .../line-clamp-with-abspos-004.tentative.html | 34 + .../line-clamp-with-abspos-005.tentative.html | 29 + .../line-clamp-with-abspos-006.tentative.html | 34 + .../line-clamp-with-abspos-007.tentative.html | 30 + .../line-clamp-with-abspos-008.tentative.html | 31 + .../line-clamp-with-abspos-009.tentative.html | 31 + .../line-clamp-with-abspos-010.tentative.html | 32 + .../reference/line-clamp-010-ref.html | 14 + .../reference/line-clamp-011-ref.html | 17 + .../reference/line-clamp-012-ref.html | 21 + .../reference/line-clamp-013-ref.html | 22 + .../reference/line-clamp-015-ref.html | 17 + .../line-clamp-with-abspos-001-ref.html | 23 + .../line-clamp-with-abspos-005-ref.html | 23 + .../line-clamp-with-abspos-006-ref.html | 28 + .../line-clamp-with-abspos-007-ref.html | 24 + .../line-clamp-with-abspos-008-ref.html | 25 + .../line-clamp-with-abspos-010-ref.html | 26 + .../crashtests/root-element-remove-print.html | 0 ...ne-block-in-float-in-table-cell-print.html | 0 .../fixedpos-001-print-ref.html | 0 .../fixedpos-001-print.html | 0 .../fixedpos-002-print-ref.html | 0 .../fixedpos-002-print.html | 0 .../fixedpos-003-print-ref.html | 0 .../fixedpos-003-print.html | 0 .../fixedpos-004-print-ref.html | 0 .../fixedpos-004-print.html | 0 .../fixedpos-005-print-ref.html | 0 .../fixedpos-005-print.html | 0 .../fixedpos-006-print-ref.html | 0 .../fixedpos-006-print.html | 0 .../fixedpos-007-print-ref.html | 0 .../fixedpos-007-print.html | 0 .../fixedpos-008-print-ref.html | 0 .../fixedpos-008-print.html | 0 ...edpos-with-abspos-with-link-print-ref.html | 0 .../fixedpos-with-abspos-with-link-print.html | 0 .../fixedpos-with-iframe-print-ref.html | 0 .../fixedpos-with-iframe-print.html | 0 ...with-link-with-inline-child-print-ref.html | 0 ...pos-with-link-with-inline-child-print.html | 0 .../media-queries-001-print-ref.html | 0 .../media-queries-001-print.html | 0 .../media-queries-002-print.html | 0 .../media-queries-003-print-ref.html | 0 .../media-queries-003-print.html | 0 .../page-margin-001-print-ref.html | 0 .../page-margin-001-print.html | 0 .../page-margin-002-print-ref.html | 0 .../page-margin-002-print.html | 0 .../page-margin-003-print-ref.html | 0 .../page-margin-003-print.html | 0 .../page-margin-004-print-ref.html | 0 .../page-margin-004-print.html | 0 .../page-margin-005-print-ref.html | 0 .../page-margin-005-print.html | 0 .../page-margin-006-print-ref.html | 0 .../page-margin-006-print.html | 0 .../page-name-000-print-ref.html} | 0 .../page-name-000-print.html} | 2 +- .../page-name-002-print-ref.html | 0 .../page-name-002-print.html | 0 .../page-name-003-print-ref.html | 0 .../page-name-003-print.html | 0 .../page-name-and-break-001-print.html | 0 .../page-name-and-break-002-print.html | 0 .../page-name-and-break-003-print.html | 0 .../page-name-and-break-004-print.html | 0 .../page-name-and-break-print-ref.html | 0 .../page-size-001-print-ref.html | 0 .../page-size-001-print.html | 0 .../page-size-002-print-ref.html | 0 .../page-size-002-print.html | 0 .../page-size-003-print-ref.html | 0 .../page-size-003-print.html | 0 .../page-size-004-print-ref.html | 0 .../page-size-004-print.html | 0 .../page-size-005-print-ref.html | 0 .../page-size-005-print.html | 0 .../page-size-006-print-ref.html | 0 .../page-size-006-print.html | 0 .../page-size-007-print-ref.html | 0 .../page-size-007-print.html | 0 .../page-size-008-print-ref.html | 0 .../page-size-008-print.html | 0 .../page-size-009-print-ref.html | 0 .../page-size-009-print.html | 0 .../page-size-010-print-ref.html | 0 .../page-size-010-print.html | 0 .../page-size-011-print-ref.html | 0 .../page-size-011-print.html | 0 .../page-visibility-hidden-001-print-ref.html | 0 .../page-visibility-hidden-001-print.html | 0 .../reference/blank-print-ref.html | 0 .../filled-green-100px-square-print-ref.html | 0 .../remote-origin-iframe-print-ref.html | 0 .../remote-origin-iframe-print.html | 2 +- .../resources/iframe-with-abspos.html | 0 .../resources/mq-frame-100px.html | 0 .../root-element-display-none-print.html | 0 .../subpixel-page-size-001-print-ref.html | 0 .../subpixel-page-size-001-print.html | 0 .../subpixel-page-size-002-print-ref.html | 0 .../subpixel-page-size-002-print.html | 0 .../parse-input-arguments-018.https.html | 16 +- .../tests/css/css-scoping/host-defined.html | 24 + .../css/css-scroll-snap-2/resources/common.js | 26 +- .../resources/programmatic-scroll-common.js | 26 + .../resources/user-scroll-common.js | 31 +- ...on-programmatic-root-scroll.tentative.html | 7 + ...ging-on-programmatic-scroll.tentative.html | 9 +- ...hanging-on-user-root-scroll.tentative.html | 5 + ...snapchanging-on-user-scroll.tentative.html | 6 + ...entative.html => scrollbar-color-001.html} | 2 +- ...entative.html => scrollbar-color-002.html} | 2 +- ...entative.html => scrollbar-color-003.html} | 2 +- ...entative.html => scrollbar-color-004.html} | 2 +- ...entative.html => scrollbar-color-005.html} | 2 +- ...entative.html => scrollbar-color-006.html} | 2 +- ...entative.html => scrollbar-color-007.html} | 2 +- ...entative.html => scrollbar-color-008.html} | 2 +- ...entative.html => scrollbar-color-009.html} | 2 +- ...entative.html => scrollbar-color-010.html} | 2 +- ...ve.html => scrollbar-color-dynamic-8.html} | 2 +- ...entative.html => scrollbar-width-010.html} | 2 +- ...entative.html => scrollbar-width-011.html} | 2 +- ...entative.html => scrollbar-width-012.html} | 2 +- ...entative.html => scrollbar-width-013.html} | 2 +- ...entative.html => scrollbar-width-014.html} | 2 +- ...entative.html => scrollbar-width-015.html} | 2 +- ...entative.html => scrollbar-width-016.html} | 2 +- .../css-sizing/aspect-ratio/WEB_FEATURES.yml | 3 + .../aspect-ratio/support/2x2-green.ogv | Bin 7660 -> 0 bytes .../aspect-ratio/support/2x2-green.webm | Bin 0 -> 555 bytes .../line-breaking/line-breaking-029.html | 46 + .../css/css-text/parsing/WEB_FEATURES.yml | 4 + .../text-align-justify-bidi-control-ref.html | 13 + .../text-align-justify-bidi-control.html | 16 + .../text-align-last-justify-br-ref.html | 14 + .../text-align-last-justify-br.html | 18 + .../text-spacing-trim/WEB_FEATURES.yml | 3 + .../text-wrap-balance-right-to-left.html | 34 + .../text-wrap-balance-top-to-bottom.html | 35 + .../tests/css/css-transforms/WEB_FEATURES.yml | 6 + .../css-transforms/animation/WEB_FEATURES.yml | 5 + .../css-transforms/parsing/WEB_FEATURES.yml | 5 + .../parsing/starting-style-parsing.html | 38 + .../starting-style-adjustment.html | 23 + tests/wpt/tests/css/css-ui/WEB_FEATURES.yml | 7 + .../css/css-ui/animation/WEB_FEATURES.yml | 4 + tests/wpt/tests/css/css-ui/resize-014.html | 3 - tests/wpt/tests/css/css-ui/support/test.ogv | Bin 287648 -> 0 bytes .../wpt/tests/css/css-values/WEB_FEATURES.yml | 17 + ...container-progress-computed.tentative.html | 80 + .../container-progress-invalid.tentative.html | 55 + ...ontainer-progress-serialize.tentative.html | 48 + .../media-progress-computed.tentative.html | 28 +- .../parsing/pseudo-elements-invalid.html | 4 +- ...o-with-classes-match-wildcard-no-star.html | 40 + .../update-callback-timeout.html | 25 + .../wpt/tests/css/cssom-view/WEB_FEATURES.yml | 5 + .../tests/css/filter-effects/WEB_FEATURES.yml | 7 + .../filter-effects/animation/WEB_FEATURES.yml | 4 + .../filter-effects/parsing/WEB_FEATURES.yml | 4 + .../offset-path-interpolation-008.html | 104 + .../wpt/tests/css/selectors/WEB_FEATURES.yml | 3 + .../dir-pseudo-on-input-element.html | 14 +- .../selectors/invalidation/WEB_FEATURES.yml | 6 + ...s-where-pseudo-containing-hard-pseudo.html | 100 + .../css/selectors/parsing/WEB_FEATURES.yml | 4 + .../customized-builtins/HTMLMediaElement.html | 2 +- .../HTMLSourceElement.html | 2 +- .../wpt/tests/device-posture/WEB_FEATURES.yml | 3 + .../experimental-features/resources/video.ogv | Bin 103746 -> 0 bytes .../resources/video.webm | Bin 0 -> 81605 bytes .../unsized-media.tentative.https.sub.html | 2 +- ...lt-style-meta-from-fragment.tentative.html | 46 +- .../tentative/observable-first.any.js | 114 + .../tentative/observable-last.any.js | 113 + .../tentative/observable-switchMap.any.js | 252 + .../crashtests/caret-display-list-002.html | 35 + .../interactionid-orphan-pointerup.html | 31 + .../resources/event-timing-test-utils.js | 12 + .../notify-event-iframe.https.html | 24 +- .../destination/resources/dummy_video.ogv | Bin 94372 -> 0 bytes .../fetch/api/request/request-bad-port.any.js | 2 + ...onary-clear-site-data.tentative.https.html | 54 + ...tionary-decompression.tentative.https.html | 57 + ...tch-with-link-element.tentative.https.html | 70 + ...etch-with-link-header.tentative.https.html | 51 + ...ctionary-registration.tentative.https.html | 60 + .../resources/clear-site-data.py | 4 + .../resources/compressed-data.py | 28 + .../resources/compression-dictionary-util.js | 120 + .../resources/echo-headers.py | 10 + .../resources/empty.html | 1 + .../resources/register-dictionary.py | 37 + .../br/bad-br-body.https.any.js | 12 + .../br/big-br-body.https.any.js | 55 + .../content-encoding/br/br-body.https.any.js | 15 + .../br/resources/bad-br-body.py | 3 + .../content-encoding/br/resources/big.text.br | Bin 0 -> 49 bytes .../br/resources/big.text.br.headers | 3 + .../br/resources/foo.octetstream.br | Bin 0 -> 15 bytes .../br/resources/foo.octetstream.br.headers | 2 + .../content-encoding/br/resources/foo.text.br | Bin 0 -> 15 bytes .../br/resources/foo.text.br.headers | 2 + .../tentative/additional-bids.https.window.js | 267 +- .../tentative/auction-config.https.window.js | 64 +- .../tentative/component-ads.https.window.js | 4 +- .../component-auction.https.window.js | 4 +- .../tentative/cross-origin.https.window.js | 2 +- .../fledge/tentative/currency.https.window.js | 2 +- ...nerate-bid-browser-signals.https.window.js | 2 +- .../tentative/resources/additional-bids.py | 64 +- .../fledge/tentative/resources/ed25519.py | 289 + .../tentative/resources/fledge-util.sub.js | 208 +- .../tentative/resources/worklet-helpers.js | 4 +- .../fledge/tentative/tie.https.window.js | 2 +- ...iveelement-after-child-lose-focus.sub.html | 44 +- tests/wpt/tests/fonts/math/stretchy.woff | Bin 1428 -> 1464 bytes .../FileSystemWritableFileStream-write.js | 10 + .../tests/html-media-capture/WEB_FEATURES.yml | 3 + .../read-media/cross-origin-video.html | 3 +- ...bject.dropShadow.exceptions.tentative.html | 57 - ...d.filter.layers.dropShadow.exceptions.html | 57 - ....layer-rendering-state-reset-in-layer.html | 7 +- .../2d.composite.globalAlpha.image.worker.js | 2 - ...mposite.globalAlpha.imagepattern.worker.js | 2 - .../2d.drawImage.3arg.worker.js | 2 - .../2d.drawImage.5arg.worker.js | 2 - .../2d.drawImage.9arg.basic.worker.js | 2 - .../2d.drawImage.9arg.destpos.worker.js | 2 - .../2d.drawImage.9arg.destsize.worker.js | 2 - .../2d.drawImage.9arg.sourcepos.worker.js | 2 - .../2d.drawImage.9arg.sourcesize.worker.js | 2 - .../2d.drawImage.alpha.worker.js | 2 - .../2d.drawImage.broken.worker.js | 2 - .../2d.drawImage.clip.worker.js | 2 - .../2d.drawImage.composite.worker.js | 2 - .../2d.drawImage.floatsource.worker.js | 2 - .../2d.drawImage.negativedest.worker.js | 2 - .../2d.drawImage.negativedir.worker.js | 2 - .../2d.drawImage.negativesource.worker.js | 2 - .../2d.drawImage.nonfinite.worker.js | 2 - .../2d.drawImage.nowrap.worker.js | 2 - .../2d.drawImage.path.worker.js | 2 - .../2d.drawImage.transform.worker.js | 2 - .../2d.drawImage.zerosource.worker.js | 2 - .../2d.pattern.basic.image.worker.js | 2 - .../2d.pattern.basic.type.worker.js | 2 - .../2d.pattern.crosscanvas.worker.js | 2 - .../2d.pattern.paint.norepeat.basic.worker.js | 2 - ...2d.pattern.paint.norepeat.coord1.worker.js | 2 - ...2d.pattern.paint.norepeat.coord2.worker.js | 2 - ...2d.pattern.paint.norepeat.coord3.worker.js | 2 - ...d.pattern.paint.norepeat.outside.worker.js | 2 - ....pattern.paint.orientation.image.worker.js | 2 - .../2d.pattern.paint.repeat.basic.worker.js | 2 - .../2d.pattern.paint.repeat.coord1.worker.js | 2 - .../2d.pattern.paint.repeat.coord2.worker.js | 2 - .../2d.pattern.paint.repeat.coord3.worker.js | 2 - .../2d.pattern.paint.repeat.outside.worker.js | 2 - .../2d.pattern.paint.repeatx.basic.worker.js | 2 - .../2d.pattern.paint.repeatx.coord1.worker.js | 2 - ...2d.pattern.paint.repeatx.outside.worker.js | 2 - .../2d.pattern.paint.repeaty.basic.worker.js | 2 - .../2d.pattern.paint.repeaty.coord1.worker.js | 2 - ...2d.pattern.paint.repeaty.outside.worker.js | 2 - .../2d.pattern.repeat.empty.worker.js | 2 - ...bject.dropShadow.exceptions.tentative.html | 57 - ....dropShadow.exceptions.tentative.worker.js | 57 - ...d.filter.layers.dropShadow.exceptions.html | 57 - ...ter.layers.dropShadow.exceptions.worker.js | 57 - ....layer-rendering-state-reset-in-layer.html | 11 +- ...r-rendering-state-reset-in-layer.worker.js | 11 +- ...ions-with-promises.convertToBlob.worker.js | 2 - ...-with-promises.createImageBitmap.worker.js | 2 - .../shadows/2d.shadow.image.alpha.worker.js | 2 - .../shadows/2d.shadow.image.basic.worker.js | 2 - .../shadows/2d.shadow.image.scale.worker.js | 2 - .../shadows/2d.shadow.image.section.worker.js | 2 - .../2d.shadow.image.transparent.1.worker.js | 2 - .../2d.shadow.image.transparent.2.worker.js | 2 - .../shadows/2d.shadow.pattern.alpha.worker.js | 2 - .../shadows/2d.shadow.pattern.basic.worker.js | 2 - .../2d.shadow.pattern.transparent.1.worker.js | 2 - .../2d.shadow.pattern.transparent.2.worker.js | 2 - .../text/2d.text.draw.align.center.worker.js | 2 - .../text/2d.text.draw.align.end.ltr.worker.js | 2 - .../text/2d.text.draw.align.end.rtl.worker.js | 2 - .../text/2d.text.draw.align.left.worker.js | 2 - .../text/2d.text.draw.align.right.worker.js | 2 - .../2d.text.draw.align.start.ltr.worker.js | 2 - .../2d.text.draw.align.start.rtl.worker.js | 2 - ...2d.text.draw.baseline.alphabetic.worker.js | 2 - .../2d.text.draw.baseline.bottom.worker.js | 2 - .../2d.text.draw.baseline.hanging.worker.js | 2 - ...d.text.draw.baseline.ideographic.worker.js | 2 - .../2d.text.draw.baseline.middle.worker.js | 2 - .../text/2d.text.draw.baseline.top.worker.js | 2 - ...2d.text.draw.fill.maxWidth.bound.worker.js | 2 - ...text.draw.fill.maxWidth.fontface.worker.js | 2 - .../2d.text.draw.fontface.notinpage.worker.js | 2 - .../2d.text.draw.fontface.repeat.worker.js | 2 - .../text/2d.text.draw.fontface.worker.js | 2 - .../text/2d.text.draw.space.basic.worker.js | 2 - .../2d.text.draw.space.collapse.end.worker.js | 2 - ...ext.draw.space.collapse.nonspace.worker.js | 2 - ...d.text.draw.space.collapse.other.worker.js | 2 - ...d.text.draw.space.collapse.space.worker.js | 2 - ...d.text.draw.space.collapse.start.worker.js | 2 - ...d.text.measure.actualBoundingBox.worker.js | 2 - .../text/2d.text.measure.advances.worker.js | 2 - .../text/2d.text.measure.baselines.worker.js | 2 - ...ext.measure.emHeights-low-ascent.worker.js | 2 - ...t.measure.emHeights-zero-descent.worker.js | 2 - .../text/2d.text.measure.emHeights.worker.js | 2 - ...e.fontBoundingBox-reduced-ascent.worker.js | 2 - ...ure.fontBoundingBox-zero-descent.worker.js | 2 - ...ext.measure.fontBoundingBox.ahem.worker.js | 2 - .../2d.text.measure.fontBoundingBox.worker.js | 2 - .../2d.text.measure.width.basic.worker.js | 2 - .../2d.text.measure.width.empty.worker.js | 2 - .../2d.text.measure.width.space.worker.js | 2 - .../html/canvas/tools/gentestutilsunion.py | 377 +- .../html/canvas/tools/templates/reftest.html | 2 +- .../tools/templates/reftest_element.html | 3 +- .../tools/templates/reftest_offscreen.html | 2 +- .../tools/templates/reftest_worker.html | 2 +- .../tools/templates/testharness_element.html | 24 +- .../templates/testharness_offscreen.html | 18 +- .../tools/templates/testharness_worker.js | 17 +- .../yaml-new/fill-and-stroke-styles.yaml | 2 +- .../html/canvas/tools/yaml-new/filters.yaml | 4 - .../html/canvas/tools/yaml-new/layers.yaml | 1 + tests/wpt/tests/html/dom/historical.html | 5 + ...ents-contenteditable-manual.tentative.html | 19 + ...ditable-same-element-manual.tentative.html | 15 + .../drop/events-input-manual.tentative.html | 16 + ...s-input-same-element-manual.tentative.html | 15 + .../events-textarea-manual.tentative.html | 16 + ...extarea-same-element-manual.tentative.html | 15 + .../html/editing/dnd/drop/support/events.js | 31 + .../query-encoding/resources/resolve-url.js | 2 - .../display-none-or-contents-ref.html | 3 + .../display-none-or-contents.html | 12 + .../mime-types/canPlayType.html | 6 + .../track/track-element/track-cue-inline.html | 4 +- ...e-custom-button-no-datalist.tentative.html | 2 +- ...e-no-button-custom-datalist.tentative.html | 2 +- ...rance-no-button-no-datalist.tentative.html | 2 +- ...n-and-datalist-invalidation.tentative.html | 2 +- ...t-child-button-and-datalist.tentative.html | 2 +- .../select-keyboard-behavior.tentative.html | 2 +- .../select-mouse-behavior.tentative.html | 6 +- .../selectedoption.tentative.html | 2 +- .../interestelement-interface.tentative.html | 1 + ...terestevent-dispatch-shadow.tentative.html | 104 + .../interestevent-interface.tentative.html | 167 + ...arget-button-event-dispatch.tentative.html | 155 + ...ttarget-on-popover-behavior.tentative.html | 113 + ...ketarget-on-dialog-behavior.tentative.html | 394 ++ ...-on-dialog-invalid-behavior.tentative.html | 120 + ...nvoketarget-on-input-number.tentative.html | 78 + .../invokers/resources/invoker-utils.js | 19 +- ...ded-css-properties-reference-expected.html | 4 + ...ed-css-properties-reference.tentative.html | 4 + .../bounded-css-properties.tentative.html | 47 +- .../popovers/popover-light-dismiss.html | 52 +- tests/wpt/tests/import-maps/WEB_FEATURES.yml | 3 + .../intersection-observer/WEB_FEATURES.yml | 3 + .../svg-container-element.html | 5 +- .../intersection-observer/v2/WEB_FEATURES.yml | 3 + tests/wpt/tests/jpegxl/WEB_FEATURES.yml | 3 + .../transparent-text.html | 48 + tests/wpt/tests/lint.ignore | 4 + .../loaf-stream-source-location.html | 3 +- .../tentative/loaf-stream.html | 2 +- tests/wpt/tests/mathml/WEB_FEATURES.yml | 3 + .../operators/mo-axis-height-1.html | 169 +- .../operators/mo-minsize-maxsize-001.html | 60 +- .../mo-stretch-properties-dynamic-001.html | 3 +- tests/wpt/tests/mathml/tools/stretchy.py | 11 +- tests/wpt/tests/media/A4.ogv | Bin 94372 -> 0 bytes tests/wpt/tests/media/counting.ogv | Bin 187773 -> 0 bytes tests/wpt/tests/media/green-at-15.ogv | Bin 287648 -> 0 bytes tests/wpt/tests/media/movie_300.ogv | Bin 2344665 -> 0 bytes tests/wpt/tests/media/movie_5.ogv | Bin 18645 -> 0 bytes tests/wpt/tests/media/test.ogv | Bin 146510 -> 0 bytes tests/wpt/tests/media/video.ogv | Bin 53189 -> 0 bytes .../mixed-content-cors.https.sub.html | 4 +- .../autoupgrades/video-upgrade.https.sub.html | 8 +- .../tentative/resources/test.ogv | Bin 2344665 -> 0 bytes .../tentative/resources/test.webm | Bin 0 -> 19054 bytes .../billing-address-is-null-manual.https.html | 6 +- ...ibutes-and-toJSON-method-manual.https.html | 109 + ...pdateWith-call-immediate-manual.https.html | 206 + ...plicate-shipping-options-manual.https.html | 106 + ...eWith-incremental-update-manual.https.html | 196 + ...With-method-abort-update-manual.https.html | 286 + .../updateWith-state-checks-manual.https.html | 125 + .../updatewith-method.https.html | 8 +- ...s-shippingAddress-member-manual.https.html | 103 + .../algorithms-manual.https.html | 176 + .../billing-address-changed-manual.https.html | 115 + .../change-shipping-option-manual.https.html | 104 + ...pping-option-select-last-manual.https.html | 101 + ...-change-shipping-options-manual.https.html | 142 + .../payment-request/historical.https.html | 4 +- ...ent-request-constructor-thcrash.https.html | 254 + ...payment-request-constructor.https.sub.html | 222 +- ...t-ctor-currency-code-checks.https.sub.html | 57 + ...shippingaddresschange-attribute.https.html | 78 + ...nshippingoptionchange-attribute.https.html | 79 + ...quest-shippingAddress-attribute.https.html | 28 + ...equest-shippingOption-attribute.https.html | 100 + ...-request-shippingType-attribute.https.html | 72 + .../payment-response/helpers.js | 40 + .../retry-method-manual.https.html | 296 ++ .../retry-method-warnings-manual.https.html | 158 + ...hippingAddress-attribute-manual.https.html | 101 + ...shippingOption-attribute-manual.https.html | 43 + ...shipping-address-changed-manual.https.html | 99 + ...method-optional-promise-rejects.https.html | 40 +- ...ptional-promise-resolves-manual.https.html | 339 ++ ...With-method-pmi-handling-manual.https.html | 140 + ...pts-payment-request-algo-manual.https.html | 230 + ...g-cross-origin-bfcache.tentative.window.js | 3 +- ...mes-without-attributes.tentative.window.js | 103 + .../not-restored-reasons/test-helper.js | 6 +- tests/wpt/tests/pointerlock/WEB_FEATURES.yml | 3 + tests/wpt/tests/preload/resources/A4.ogv | Bin 94372 -> 0 bytes .../resource-timing/initiator-type/video.html | 4 +- .../tests/scroll-animations/WEB_FEATURES.yml | 3 + ...e-next-to-input-and-make-it-invisible.html | 23 + .../selection/selection-nested-video.html | 25 + .../cross-shadow-boundary-6-ref.html | 12 + .../shadow-dom/cross-shadow-boundary-6.html | 44 + .../wpt/tests/server-timing/WEB_FEATURES.yml | 3 + .../tests/shadow-dom/declarative/gethtml.html | 74 +- .../shadow-dom/host-with-namespace.xhtml | 27 + .../resources/request-picture-in-picture.html | 2 +- .../crashtests/cross-piping2.https.html | 14 + .../reftests/url-processing-invalid-base.svg | 15 - .../wpt/tests/tools/web_features/manifest.py | 2 +- .../tools/web_features/tests/test_manifest.py | 3 +- .../wptrunner/wptrunner/browsers/base.py | 157 +- .../wptrunner/browsers/chrome_ios.py | 8 +- .../wptrunner/wptrunner/browsers/firefox.py | 1 + .../wptrunner/browsers/firefox_android.py | 1 + .../wptrunner/wptrunner/browsers/sauce.py | 1 + .../wptrunner/browsers/servodriver.py | 1 + .../wptrunner/wptrunner/browsers/wktr.py | 1 + .../tools/wptrunner/wptrunner/environment.py | 43 +- .../tools/wptrunner/wptrunner/testloader.py | 5 +- .../tools/wptrunner/wptrunner/testrunner.py | 2 + .../tools/wptserve/wptserve/constants.py | 1 - .../tests/tools/wptserve/wptserve/utils.py | 2 + ...OMWindowTimers-setTimeout-setInterval.html | 9 +- .../wpt/tests/trusted-types/WEB_FEATURES.yml | 3 + ...eappending_last_over_target.tentative.html | 152 + .../wpt/tests/url/resources/urltestdata.json | 28 + .../tests/visual-viewport/WEB_FEATURES.yml | 3 + .../module/moduleSource.tentative.any.js | 16 +- .../resources/worker-source-phase.js | 7 + .../script-src-allows-wasm.tentative.html | 21 + .../script-src-blocks-wasm.tentative.html | 21 + .../source-phase.tentative.html | 2 +- .../worker-import-source-phase.tentative.html | 13 + .../classic/element_click/scroll_into_view.py | 8 +- tests/wpt/tests/webmidi/WEB_FEATURES.yml | 3 + ...iews-sharing-same-arraybuffer.https.any.js | 50 + .../validation_tests/gruCell.https.any.js | 316 ++ .../validation_tests/pooling.https.any.js | 263 + .../RTCRtpScriptTransform-bad-chunk-worker.js | 13 + ...RTCRtpScriptTransform-bad-chunk.https.html | 16 + .../webrtc/RTCPeerConnection-GC.https.html | 30 + .../websockets/Create-blocked-port.any.js | 2 + .../datagram-bad-chunk.https.any.js | 15 + .../sendstream-bad-chunk.https.any.js | 18 + 765 files changed, 19221 insertions(+), 3164 deletions(-) create mode 100644 tests/wpt/meta-legacy-layout/css/CSS2/floats/block-in-inline-become-float.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-column-gap-computed.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-column-gap-valid.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-computed.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-shorthand.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-valid.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-row-gap-computed.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-row-gap-valid.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-color/clip-opacity-out-of-flow.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-001.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-004.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-005.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-006.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-007.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-008.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-009.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-010.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-011.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-012.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-013.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-015.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-016.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-017.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-019.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-001.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-002.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-003.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-004.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-005.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-006.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-007.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-008.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-009.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-010.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-text/text-align/text-align-last-justify-br.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-transitions/parsing/starting-style-parsing.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-transitions/starting-style-adjustment.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-values/container-progress-computed.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/css-values/container-progress-serialize.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/css/selectors/invalidation/is-where-pseudo-containing-hard-pseudo.html.ini create mode 100644 tests/wpt/meta-legacy-layout/custom-elements/reactions/customized-builtins/HTMLMediaElement.html.ini create mode 100644 tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-first.any.js.ini create mode 100644 tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-last.any.js.ini create mode 100644 tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-switchMap.any.js.ini create mode 100644 tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-clear-site-data.tentative.https.html.ini create mode 100644 tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-decompression.tentative.https.html.ini create mode 100644 tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html.ini create mode 100644 tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-fetch-with-link-header.tentative.https.html.ini create mode 100644 tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini create mode 100644 tests/wpt/meta-legacy-layout/fetch/content-encoding/br/bad-br-body.https.any.js.ini create mode 100644 tests/wpt/meta-legacy-layout/fetch/content-encoding/br/big-br-body.https.any.js.ini create mode 100644 tests/wpt/meta-legacy-layout/fetch/content-encoding/br/br-body.https.any.js.ini delete mode 100644 tests/wpt/meta-legacy-layout/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini create mode 100644 tests/wpt/meta-legacy-layout/html/rendering/widgets/button-layout/display-none-or-contents.html.ini delete mode 100644 tests/wpt/meta-legacy-layout/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini create mode 100644 tests/wpt/meta-legacy-layout/performance-timeline/not-restored-reasons/performance-navigation-timing-iframes-without-attributes.tentative.window.js.ini create mode 100644 tests/wpt/meta-legacy-layout/selection/selection-nested-video.html.ini create mode 100644 tests/wpt/meta-legacy-layout/selection/shadow-dom/cross-shadow-boundary-6.html.ini create mode 100644 tests/wpt/meta-legacy-layout/wasm/webapi/esm-integration/script-src-allows-wasm.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/wasm/webapi/esm-integration/script-src-blocks-wasm.tentative.html.ini create mode 100644 tests/wpt/meta-legacy-layout/wasm/webapi/esm-integration/worker-import-source-phase.tentative.html.ini delete mode 100644 tests/wpt/meta-legacy-layout/webmessaging/with-ports/017.html.ini delete mode 100644 tests/wpt/meta-legacy-layout/workers/WorkerGlobalScope-close.html.ini create mode 100644 tests/wpt/meta/css/css-align/parsing/grid-column-gap-computed.html.ini create mode 100644 tests/wpt/meta/css/css-align/parsing/grid-column-gap-valid.html.ini create mode 100644 tests/wpt/meta/css/css-align/parsing/grid-gap-computed.html.ini create mode 100644 tests/wpt/meta/css/css-align/parsing/grid-gap-shorthand.html.ini create mode 100644 tests/wpt/meta/css/css-align/parsing/grid-gap-valid.html.ini create mode 100644 tests/wpt/meta/css/css-align/parsing/grid-row-gap-computed.html.ini create mode 100644 tests/wpt/meta/css/css-align/parsing/grid-row-gap-valid.html.ini create mode 100644 tests/wpt/meta/css/css-color/clip-opacity-out-of-flow.html.ini create mode 100644 tests/wpt/meta/css/css-fonts/font-size-adjust-reload.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-001.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-004.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-005.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-006.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-007.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-008.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-009.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-010.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-011.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-012.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-013.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-015.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-016.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-017.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-019.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-001.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-002.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-003.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-004.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-005.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-006.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-007.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-008.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-009.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp-with-abspos-010.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-text/text-align/text-align-last-justify-br.html.ini create mode 100644 tests/wpt/meta/css/css-transitions/parsing/starting-style-parsing.html.ini create mode 100644 tests/wpt/meta/css/css-transitions/starting-style-adjustment.html.ini create mode 100644 tests/wpt/meta/css/css-values/container-progress-computed.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-values/container-progress-serialize.tentative.html.ini create mode 100644 tests/wpt/meta/css/selectors/invalidation/is-where-pseudo-containing-hard-pseudo.html.ini create mode 100644 tests/wpt/meta/dom/observable/tentative/observable-first.any.js.ini create mode 100644 tests/wpt/meta/dom/observable/tentative/observable-last.any.js.ini create mode 100644 tests/wpt/meta/dom/observable/tentative/observable-switchMap.any.js.ini create mode 100644 tests/wpt/meta/fetch/compression-dictionary/dictionary-clear-site-data.tentative.https.html.ini create mode 100644 tests/wpt/meta/fetch/compression-dictionary/dictionary-decompression.tentative.https.html.ini create mode 100644 tests/wpt/meta/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html.ini create mode 100644 tests/wpt/meta/fetch/compression-dictionary/dictionary-fetch-with-link-header.tentative.https.html.ini create mode 100644 tests/wpt/meta/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini create mode 100644 tests/wpt/meta/fetch/content-encoding/br/bad-br-body.https.any.js.ini create mode 100644 tests/wpt/meta/fetch/content-encoding/br/big-br-body.https.any.js.ini create mode 100644 tests/wpt/meta/fetch/content-encoding/br/br-body.https.any.js.ini create mode 100644 tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini delete mode 100644 tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini delete mode 100644 tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini create mode 100644 tests/wpt/meta/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini create mode 100644 tests/wpt/meta/performance-timeline/not-restored-reasons/performance-navigation-timing-iframes-without-attributes.tentative.window.js.ini create mode 100644 tests/wpt/meta/resource-timing/nested-context-navigations-iframe.html.ini create mode 100644 tests/wpt/meta/selection/selection-nested-video.html.ini create mode 100644 tests/wpt/meta/selection/shadow-dom/cross-shadow-boundary-6.html.ini create mode 100644 tests/wpt/meta/wasm/webapi/esm-integration/script-src-allows-wasm.tentative.html.ini create mode 100644 tests/wpt/meta/wasm/webapi/esm-integration/script-src-blocks-wasm.tentative.html.ini create mode 100644 tests/wpt/meta/wasm/webapi/esm-integration/worker-import-source-phase.tentative.html.ini delete mode 100644 tests/wpt/meta/webmessaging/without-ports/018.html.ini create mode 100644 tests/wpt/tests/bluetooth/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/compression/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/CSS2/floats/block-in-inline-become-float.html delete mode 100644 tests/wpt/tests/css/compositing/mix-blend-mode/support/RGB_Circles.oggtheora.ogv create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-column-gap-computed.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-column-gap-invalid.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-column-gap-valid.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-gap-computed.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-gap-invalid.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-gap-shorthand.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-gap-valid.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-row-gap-computed.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-row-gap-invalid.html create mode 100644 tests/wpt/tests/css/css-align/parsing/grid-row-gap-valid.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-position-dynamic-005.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-scroll-position-try-012-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-scroll-position-try-012.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-transition-attr.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-transition-default.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-transition-eval.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-transition-name.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-typed-om.html create mode 100644 tests/wpt/tests/css/css-anchor-position/chrome-40286059-crash.html delete mode 100644 tests/wpt/tests/css/css-anchor-position/position-fallback-bounds-001.html delete mode 100644 tests/wpt/tests/css/css-anchor-position/position-fallback-bounds-002.html delete mode 100644 tests/wpt/tests/css/css-anchor-position/position-fallback-bounds-003.html delete mode 100644 tests/wpt/tests/css/css-anchor-position/position-fallback-bounds-004.html delete mode 100644 tests/wpt/tests/css/css-anchor-position/position-fallback-bounds-005.html delete mode 100644 tests/wpt/tests/css/css-anchor-position/position-fallback-bounds-006.html delete mode 100644 tests/wpt/tests/css/css-anchor-position/position-fallback-bounds-basics.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-try-order-basic.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-try-transition-basic.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-try-transition-flip.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-try-typed-om.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-after-scroll-in-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-after-scroll-in.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-after-scroll-out-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-after-scroll-out.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-both-position-fixed-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-both-position-fixed.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-change-anchor-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-change-anchor.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-change-css-visibility-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-change-css-visibility.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-css-visibility-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-css-visibility.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-non-intervening-container-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-non-intervening-container.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-position-fixed-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-position-fixed.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-stacked-child.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-anchors-visible-with-position.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-no-overflow-scroll-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-no-overflow-scroll.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-remove-anchors-visible-ref.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-visibility-remove-anchors-visible.tentative.html create mode 100644 tests/wpt/tests/css/css-anchor-position/try-tactic-wm.html create mode 100644 tests/wpt/tests/css/css-animations/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-animations/parsing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-backgrounds/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-backgrounds/animations/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-backgrounds/background-clip/WEB_FEATURES.yml delete mode 100644 tests/wpt/tests/css/css-backgrounds/background-clip/list.txt delete mode 100644 tests/wpt/tests/css/css-backgrounds/background-origin/list.txt create mode 100644 tests/wpt/tests/css/css-backgrounds/parsing/WEB_FEATURES.yml rename tests/wpt/tests/css/{printing/transform-001-print-ref.html => css-break/transform-022-print-ref.html} (100%) rename tests/wpt/tests/css/{printing/transform-001-print.html => css-break/transform-022-print.html} (86%) rename tests/wpt/tests/css/{printing/transform-002-print-ref.html => css-break/transform-023-print-ref.html} (100%) rename tests/wpt/tests/css/{printing/transform-002-print.html => css-break/transform-023-print.html} (91%) rename tests/wpt/tests/css/{printing/transform-003-print-ref.html => css-break/transform-024-print-ref.html} (100%) rename tests/wpt/tests/css/{printing/transform-003-print.html => css-break/transform-024-print.html} (95%) create mode 100644 tests/wpt/tests/css/css-cascade/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-cascade/parsing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-color/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-color/clip-opacity-out-of-flow-ref.html create mode 100644 tests/wpt/tests/css/css-color/clip-opacity-out-of-flow.html create mode 100644 tests/wpt/tests/css/css-color/parsing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-fonts/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-fonts/animations/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-fonts/parsing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-fonts/variations/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-grid/subgrid/placement-invalidation-001.html create mode 100644 tests/wpt/tests/css/css-images/gradient/color-scheme-dependent-color-stops-ref.html create mode 100644 tests/wpt/tests/css/css-images/gradient/color-scheme-dependent-color-stops.html create mode 100644 tests/wpt/tests/css/css-masking/clip-path/animations/clip-path-shape-interpolation-003.html create mode 100644 tests/wpt/tests/css/css-masking/clip-path/animations/clip-path-shape-interpolation-004.html create mode 100644 tests/wpt/tests/css/css-multicol/crashtests/block-in-inline-become-float.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-001.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-002.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-003.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-004.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-005.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-006.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-007.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-008.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-009.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-010.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-011.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-012.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-013.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-014.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-015.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-016.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-017.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-018.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-019.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-020.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-001.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-002.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-003.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-004.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-005.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-006.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-007.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-008.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-009.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp-with-abspos-010.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-010-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-011-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-012-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-013-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-015-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-with-abspos-001-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-with-abspos-005-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-with-abspos-006-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-with-abspos-007-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-with-abspos-008-ref.html create mode 100644 tests/wpt/tests/css/css-overflow/reference/line-clamp-with-abspos-010-ref.html rename tests/wpt/tests/css/{printing => css-page}/crashtests/root-element-remove-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/crashtests/tall-inline-block-in-float-in-table-cell-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-001-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-001-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-002-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-002-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-003-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-003-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-004-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-004-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-005-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-005-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-006-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-006-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-007-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-007-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-008-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-008-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-with-abspos-with-link-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-with-abspos-with-link-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-with-iframe-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-with-iframe-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-with-link-with-inline-child-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/fixedpos-with-link-with-inline-child-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/media-queries-001-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/media-queries-001-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/media-queries-002-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/media-queries-003-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/media-queries-003-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-001-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-001-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-002-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-002-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-003-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-003-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-004-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-004-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-005-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-005-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-006-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-margin-006-print.html (100%) rename tests/wpt/tests/css/{printing/page-name-001-print-ref.html => css-page/page-name-000-print-ref.html} (100%) rename tests/wpt/tests/css/{printing/page-name-001-print.html => css-page/page-name-000-print.html} (88%) rename tests/wpt/tests/css/{printing => css-page}/page-name-002-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-name-002-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-name-003-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-name-003-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-name-and-break-001-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-name-and-break-002-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-name-and-break-003-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-name-and-break-004-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-name-and-break-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-001-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-001-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-002-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-002-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-003-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-003-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-004-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-004-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-005-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-005-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-006-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-006-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-007-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-007-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-008-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-008-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-009-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-009-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-010-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-010-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-011-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-size-011-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-visibility-hidden-001-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/page-visibility-hidden-001-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/reference/blank-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/reference/filled-green-100px-square-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/remote-origin-iframe-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/remote-origin-iframe-print.html (90%) rename tests/wpt/tests/css/{printing => css-page}/resources/iframe-with-abspos.html (100%) rename tests/wpt/tests/css/{printing => css-page}/resources/mq-frame-100px.html (100%) rename tests/wpt/tests/css/{printing => css-page}/root-element-display-none-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/subpixel-page-size-001-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/subpixel-page-size-001-print.html (100%) rename tests/wpt/tests/css/{printing => css-page}/subpixel-page-size-002-print-ref.html (100%) rename tests/wpt/tests/css/{printing => css-page}/subpixel-page-size-002-print.html (100%) create mode 100644 tests/wpt/tests/css/css-scoping/host-defined.html create mode 100644 tests/wpt/tests/css/css-scroll-snap-2/resources/programmatic-scroll-common.js rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-001.tentative.html => scrollbar-color-001.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-002.tentative.html => scrollbar-color-002.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-003.tentative.html => scrollbar-color-003.html} (99%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-004.tentative.html => scrollbar-color-004.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-005.tentative.html => scrollbar-color-005.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-006.tentative.html => scrollbar-color-006.html} (97%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-007.tentative.html => scrollbar-color-007.html} (97%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-008.tentative.html => scrollbar-color-008.html} (97%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-009.tentative.html => scrollbar-color-009.html} (96%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-010.tentative.html => scrollbar-color-010.html} (96%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-color-dynamic-8.tentative.html => scrollbar-color-dynamic-8.html} (89%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-width-010.tentative.html => scrollbar-width-010.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-width-011.tentative.html => scrollbar-width-011.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-width-012.tentative.html => scrollbar-width-012.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-width-013.tentative.html => scrollbar-width-013.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-width-014.tentative.html => scrollbar-width-014.html} (98%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-width-015.tentative.html => scrollbar-width-015.html} (99%) rename tests/wpt/tests/css/css-scrollbars/{scrollbar-width-016.tentative.html => scrollbar-width-016.html} (99%) create mode 100644 tests/wpt/tests/css/css-sizing/aspect-ratio/WEB_FEATURES.yml delete mode 100644 tests/wpt/tests/css/css-sizing/aspect-ratio/support/2x2-green.ogv create mode 100644 tests/wpt/tests/css/css-sizing/aspect-ratio/support/2x2-green.webm create mode 100644 tests/wpt/tests/css/css-text/line-breaking/line-breaking-029.html create mode 100644 tests/wpt/tests/css/css-text/parsing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-text/text-align/text-align-justify-bidi-control-ref.html create mode 100644 tests/wpt/tests/css/css-text/text-align/text-align-justify-bidi-control.html create mode 100644 tests/wpt/tests/css/css-text/text-align/text-align-last-justify-br-ref.html create mode 100644 tests/wpt/tests/css/css-text/text-align/text-align-last-justify-br.html create mode 100644 tests/wpt/tests/css/css-text/text-spacing-trim/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-text/white-space/text-wrap-balance-right-to-left.html create mode 100644 tests/wpt/tests/css/css-text/white-space/text-wrap-balance-top-to-bottom.html create mode 100644 tests/wpt/tests/css/css-transforms/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-transforms/animation/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-transforms/parsing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-transitions/parsing/starting-style-parsing.html create mode 100644 tests/wpt/tests/css/css-transitions/starting-style-adjustment.html create mode 100644 tests/wpt/tests/css/css-ui/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-ui/animation/WEB_FEATURES.yml delete mode 100644 tests/wpt/tests/css/css-ui/support/test.ogv create mode 100644 tests/wpt/tests/css/css-values/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-values/container-progress-computed.tentative.html create mode 100644 tests/wpt/tests/css/css-values/container-progress-invalid.tentative.html create mode 100644 tests/wpt/tests/css/css-values/container-progress-serialize.tentative.html create mode 100644 tests/wpt/tests/css/css-view-transitions/pseudo-with-classes-match-wildcard-no-star.html create mode 100644 tests/wpt/tests/css/css-view-transitions/update-callback-timeout.html create mode 100644 tests/wpt/tests/css/cssom-view/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/filter-effects/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/filter-effects/animation/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/filter-effects/parsing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/selectors/invalidation/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/selectors/invalidation/is-where-pseudo-containing-hard-pseudo.html create mode 100644 tests/wpt/tests/device-posture/WEB_FEATURES.yml delete mode 100644 tests/wpt/tests/document-policy/experimental-features/resources/video.ogv create mode 100644 tests/wpt/tests/document-policy/experimental-features/resources/video.webm create mode 100644 tests/wpt/tests/dom/observable/tentative/observable-first.any.js create mode 100644 tests/wpt/tests/dom/observable/tentative/observable-last.any.js create mode 100644 tests/wpt/tests/dom/observable/tentative/observable-switchMap.any.js create mode 100644 tests/wpt/tests/editing/crashtests/caret-display-list-002.html create mode 100644 tests/wpt/tests/event-timing/interactionid-orphan-pointerup.html delete mode 100644 tests/wpt/tests/fetch/api/request/destination/resources/dummy_video.ogv create mode 100644 tests/wpt/tests/fetch/compression-dictionary/dictionary-clear-site-data.tentative.https.html create mode 100644 tests/wpt/tests/fetch/compression-dictionary/dictionary-decompression.tentative.https.html create mode 100644 tests/wpt/tests/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html create mode 100644 tests/wpt/tests/fetch/compression-dictionary/dictionary-fetch-with-link-header.tentative.https.html create mode 100644 tests/wpt/tests/fetch/compression-dictionary/dictionary-registration.tentative.https.html create mode 100644 tests/wpt/tests/fetch/compression-dictionary/resources/clear-site-data.py create mode 100644 tests/wpt/tests/fetch/compression-dictionary/resources/compressed-data.py create mode 100644 tests/wpt/tests/fetch/compression-dictionary/resources/compression-dictionary-util.js create mode 100644 tests/wpt/tests/fetch/compression-dictionary/resources/echo-headers.py create mode 100644 tests/wpt/tests/fetch/compression-dictionary/resources/empty.html create mode 100644 tests/wpt/tests/fetch/compression-dictionary/resources/register-dictionary.py create mode 100644 tests/wpt/tests/fetch/content-encoding/br/bad-br-body.https.any.js create mode 100644 tests/wpt/tests/fetch/content-encoding/br/big-br-body.https.any.js create mode 100644 tests/wpt/tests/fetch/content-encoding/br/br-body.https.any.js create mode 100644 tests/wpt/tests/fetch/content-encoding/br/resources/bad-br-body.py create mode 100644 tests/wpt/tests/fetch/content-encoding/br/resources/big.text.br create mode 100644 tests/wpt/tests/fetch/content-encoding/br/resources/big.text.br.headers create mode 100644 tests/wpt/tests/fetch/content-encoding/br/resources/foo.octetstream.br create mode 100644 tests/wpt/tests/fetch/content-encoding/br/resources/foo.octetstream.br.headers create mode 100644 tests/wpt/tests/fetch/content-encoding/br/resources/foo.text.br create mode 100644 tests/wpt/tests/fetch/content-encoding/br/resources/foo.text.br.headers create mode 100644 tests/wpt/tests/fledge/tentative/resources/ed25519.py create mode 100644 tests/wpt/tests/html-media-capture/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/html/editing/dnd/drop/events-contenteditable-manual.tentative.html create mode 100644 tests/wpt/tests/html/editing/dnd/drop/events-contenteditable-same-element-manual.tentative.html create mode 100644 tests/wpt/tests/html/editing/dnd/drop/events-input-manual.tentative.html create mode 100644 tests/wpt/tests/html/editing/dnd/drop/events-input-same-element-manual.tentative.html create mode 100644 tests/wpt/tests/html/editing/dnd/drop/events-textarea-manual.tentative.html create mode 100644 tests/wpt/tests/html/editing/dnd/drop/events-textarea-same-element-manual.tentative.html create mode 100644 tests/wpt/tests/html/editing/dnd/drop/support/events.js create mode 100644 tests/wpt/tests/html/rendering/widgets/button-layout/display-none-or-contents-ref.html create mode 100644 tests/wpt/tests/html/rendering/widgets/button-layout/display-none-or-contents.html create mode 100644 tests/wpt/tests/html/semantics/invokers/interestevent-dispatch-shadow.tentative.html create mode 100644 tests/wpt/tests/html/semantics/invokers/interestevent-interface.tentative.html create mode 100644 tests/wpt/tests/html/semantics/invokers/interesttarget-button-event-dispatch.tentative.html create mode 100644 tests/wpt/tests/html/semantics/invokers/interesttarget-on-popover-behavior.tentative.html create mode 100644 tests/wpt/tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative.html create mode 100644 tests/wpt/tests/html/semantics/invokers/invoketarget-on-dialog-invalid-behavior.tentative.html create mode 100644 tests/wpt/tests/html/semantics/invokers/invoketarget-on-input-number.tentative.html create mode 100644 tests/wpt/tests/import-maps/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/intersection-observer/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/intersection-observer/v2/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/jpegxl/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/largest-contentful-paint/transparent-text.html create mode 100644 tests/wpt/tests/mathml/WEB_FEATURES.yml delete mode 100644 tests/wpt/tests/media/A4.ogv delete mode 100644 tests/wpt/tests/media/counting.ogv delete mode 100644 tests/wpt/tests/media/green-at-15.ogv delete mode 100644 tests/wpt/tests/media/movie_300.ogv delete mode 100644 tests/wpt/tests/media/movie_5.ogv delete mode 100644 tests/wpt/tests/media/test.ogv delete mode 100644 tests/wpt/tests/media/video.ogv delete mode 100644 tests/wpt/tests/mixed-content/tentative/resources/test.ogv create mode 100644 tests/wpt/tests/mixed-content/tentative/resources/test.webm create mode 100644 tests/wpt/tests/payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html create mode 100644 tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html create mode 100644 tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-duplicate-shipping-options-manual.https.html create mode 100644 tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-incremental-update-manual.https.html create mode 100644 tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-method-abort-update-manual.https.html create mode 100644 tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-state-checks-manual.https.html create mode 100644 tests/wpt/tests/payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html create mode 100644 tests/wpt/tests/payment-request/algorithms-manual.https.html create mode 100644 tests/wpt/tests/payment-request/billing-address-changed-manual.https.html create mode 100644 tests/wpt/tests/payment-request/change-shipping-option-manual.https.html create mode 100644 tests/wpt/tests/payment-request/change-shipping-option-select-last-manual.https.html create mode 100644 tests/wpt/tests/payment-request/dynamically-change-shipping-options-manual.https.html create mode 100644 tests/wpt/tests/payment-request/payment-request-constructor-thcrash.https.html create mode 100644 tests/wpt/tests/payment-request/payment-request-onshippingaddresschange-attribute.https.html create mode 100644 tests/wpt/tests/payment-request/payment-request-onshippingoptionchange-attribute.https.html create mode 100644 tests/wpt/tests/payment-request/payment-request-shippingAddress-attribute.https.html create mode 100644 tests/wpt/tests/payment-request/payment-request-shippingOption-attribute.https.html create mode 100644 tests/wpt/tests/payment-request/payment-request-shippingType-attribute.https.html create mode 100644 tests/wpt/tests/payment-request/payment-response/retry-method-manual.https.html create mode 100644 tests/wpt/tests/payment-request/payment-response/retry-method-warnings-manual.https.html create mode 100644 tests/wpt/tests/payment-request/payment-response/shippingAddress-attribute-manual.https.html create mode 100644 tests/wpt/tests/payment-request/payment-response/shippingOption-attribute-manual.https.html create mode 100644 tests/wpt/tests/payment-request/shipping-address-changed-manual.https.html create mode 100644 tests/wpt/tests/payment-request/show-method-optional-promise-resolves-manual.https.html create mode 100644 tests/wpt/tests/payment-request/updateWith-method-pmi-handling-manual.https.html create mode 100644 tests/wpt/tests/payment-request/user-accepts-payment-request-algo-manual.https.html create mode 100644 tests/wpt/tests/performance-timeline/not-restored-reasons/performance-navigation-timing-iframes-without-attributes.tentative.window.js create mode 100644 tests/wpt/tests/pointerlock/WEB_FEATURES.yml delete mode 100644 tests/wpt/tests/preload/resources/A4.ogv create mode 100644 tests/wpt/tests/scroll-animations/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/selection/crashtests/selection-modify-line-next-to-input-and-make-it-invisible.html create mode 100644 tests/wpt/tests/selection/selection-nested-video.html create mode 100644 tests/wpt/tests/selection/shadow-dom/cross-shadow-boundary-6-ref.html create mode 100644 tests/wpt/tests/selection/shadow-dom/cross-shadow-boundary-6.html create mode 100644 tests/wpt/tests/server-timing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/shadow-dom/host-with-namespace.xhtml create mode 100644 tests/wpt/tests/streams/piping/crashtests/cross-piping2.https.html delete mode 100644 tests/wpt/tests/svg/linking/reftests/url-processing-invalid-base.svg create mode 100644 tests/wpt/tests/trusted-types/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/uievents/mouse/mouse_boundary_events_after_reappending_last_over_target.tentative.html create mode 100644 tests/wpt/tests/visual-viewport/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/wasm/webapi/esm-integration/script-src-allows-wasm.tentative.html create mode 100644 tests/wpt/tests/wasm/webapi/esm-integration/script-src-blocks-wasm.tentative.html create mode 100644 tests/wpt/tests/wasm/webapi/esm-integration/worker-import-source-phase.tentative.html create mode 100644 tests/wpt/tests/webmidi/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js create mode 100644 tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-bad-chunk-worker.js create mode 100644 tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-bad-chunk.https.html create mode 100644 tests/wpt/tests/webtransport/datagram-bad-chunk.https.any.js create mode 100644 tests/wpt/tests/webtransport/sendstream-bad-chunk.https.any.js diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/floats/block-in-inline-become-float.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/floats/block-in-inline-become-float.html.ini new file mode 100644 index 00000000000..20dabf31bb7 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/CSS2/floats/block-in-inline-become-float.html.ini @@ -0,0 +1,2 @@ +[block-in-inline-become-float.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-column-gap-computed.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-column-gap-computed.html.ini new file mode 100644 index 00000000000..5eda98917f4 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-column-gap-computed.html.ini @@ -0,0 +1,15 @@ +[grid-column-gap-computed.html] + [Property grid-column-gap value 'normal'] + expected: FAIL + + [Property grid-column-gap value 'calc(10px + 0.5em)'] + expected: FAIL + + [Property grid-column-gap value 'calc(10px - 0.5em)'] + expected: FAIL + + [Property grid-column-gap value '40%'] + expected: FAIL + + [Property grid-column-gap value 'calc(50% + 60px)'] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-column-gap-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-column-gap-valid.html.ini new file mode 100644 index 00000000000..ec21c41147c --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-column-gap-valid.html.ini @@ -0,0 +1,18 @@ +[grid-column-gap-valid.html] + [e.style['grid-column-gap'\] = "normal" should set the property value] + expected: FAIL + + [e.style['grid-column-gap'\] = "0" should set the property value] + expected: FAIL + + [e.style['grid-column-gap'\] = "1px" should set the property value] + expected: FAIL + + [e.style['grid-column-gap'\] = "calc(2em + 3ex)" should set the property value] + expected: FAIL + + [e.style['grid-column-gap'\] = "4%" should set the property value] + expected: FAIL + + [e.style['grid-column-gap'\] = "5vmin" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-computed.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-computed.html.ini new file mode 100644 index 00000000000..2d68fe883e1 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-computed.html.ini @@ -0,0 +1,33 @@ +[grid-gap-computed.html] + [Property grid-gap value 'normal'] + expected: FAIL + + [Property grid-gap value '10px'] + expected: FAIL + + [Property grid-gap value '20%'] + expected: FAIL + + [Property grid-gap value 'calc(20% + 10px)'] + expected: FAIL + + [Property grid-gap value 'calc(-0.5em + 10px)'] + expected: FAIL + + [Property grid-gap value 'calc(0.5em + 10px)'] + expected: FAIL + + [Property grid-gap value 'normal 10px'] + expected: FAIL + + [Property grid-gap value '10px 20%'] + expected: FAIL + + [Property grid-gap value '20% calc(20% + 10px)'] + expected: FAIL + + [Property grid-gap value 'calc(20% + 10px) normal'] + expected: FAIL + + [Property grid-gap value 'calc(-0.5em + 10px) calc(0.5em + 10px)'] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-shorthand.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-shorthand.html.ini new file mode 100644 index 00000000000..65d3c9ef707 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-shorthand.html.ini @@ -0,0 +1,36 @@ +[grid-gap-shorthand.html] + [e.style['gap'\] = "normal" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "normal" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "normal" should not set unrelated longhands] + expected: FAIL + + [e.style['gap'\] = "10px 20%" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "10px 20%" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "10px 20%" should not set unrelated longhands] + expected: FAIL + + [e.style['gap'\] = "10px normal" should set column-gap] + expected: FAIL + + [e.style['gap'\] = "10px normal" should set row-gap] + expected: FAIL + + [e.style['gap'\] = "10px normal" should not set unrelated longhands] + expected: FAIL + + [e.style['gap'\] = "normal calc(20% + 10px)" should set grid-column-gap] + expected: FAIL + + [e.style['gap'\] = "normal calc(20% + 10px)" should set grid-row-gap] + expected: FAIL + + [e.style['gap'\] = "normal calc(20% + 10px)" should not set unrelated longhands] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-valid.html.ini new file mode 100644 index 00000000000..3c7918388c2 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-gap-valid.html.ini @@ -0,0 +1,27 @@ +[grid-gap-valid.html] + [e.style['grid-gap'\] = "normal normal" should set the property value] + expected: FAIL + + [e.style['grid-gap'\] = "10px 10px" should set the property value] + expected: FAIL + + [e.style['grid-gap'\] = "20% 20%" should set the property value] + expected: FAIL + + [e.style['grid-gap'\] = "calc(20% + 10px) calc(20% + 10px)" should set the property value] + expected: FAIL + + [e.style['grid-gap'\] = "normal 10px" should set the property value] + expected: FAIL + + [e.style['grid-gap'\] = "10px 20%" should set the property value] + expected: FAIL + + [e.style['grid-gap'\] = "20% calc(20% + 10px)" should set the property value] + expected: FAIL + + [e.style['grid-gap'\] = "calc(20% + 10px) 0px" should set the property value] + expected: FAIL + + [e.style['grid-gap'\] = "0px normal" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-row-gap-computed.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-row-gap-computed.html.ini new file mode 100644 index 00000000000..ec012bf08df --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-row-gap-computed.html.ini @@ -0,0 +1,18 @@ +[grid-row-gap-computed.html] + [Property grid-row-gap value 'normal'] + expected: FAIL + + [Property grid-row-gap value '10px'] + expected: FAIL + + [Property grid-row-gap value '20%'] + expected: FAIL + + [Property grid-row-gap value 'calc(20% + 10px)'] + expected: FAIL + + [Property grid-row-gap value 'calc(-0.5em + 10px)'] + expected: FAIL + + [Property grid-row-gap value 'calc(0.5em + 10px)'] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-row-gap-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-row-gap-valid.html.ini new file mode 100644 index 00000000000..1fecfe68cc3 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-align/parsing/grid-row-gap-valid.html.ini @@ -0,0 +1,15 @@ +[grid-row-gap-valid.html] + [e.style['grid-row-gap'\] = "normal" should set the property value] + expected: FAIL + + [e.style['grid-row-gap'\] = "10px" should set the property value] + expected: FAIL + + [e.style['grid-row-gap'\] = "20%" should set the property value] + expected: FAIL + + [e.style['grid-row-gap'\] = "calc(20% + 10px)" should set the property value] + expected: FAIL + + [e.style['grid-row-gap'\] = "0" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-color/clip-opacity-out-of-flow.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/clip-opacity-out-of-flow.html.ini new file mode 100644 index 00000000000..3a7868d0b49 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-color/clip-opacity-out-of-flow.html.ini @@ -0,0 +1,2 @@ +[clip-opacity-out-of-flow.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-color/parsing/color-computed-relative-color.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/parsing/color-computed-relative-color.html.ini index 5fd0b0d2861..03508b45213 100644 --- a/tests/wpt/meta-legacy-layout/css/css-color/parsing/color-computed-relative-color.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-color/parsing/color-computed-relative-color.html.ini @@ -3523,3 +3523,120 @@ [Property color value 'color(from color(from color(xyz-d65 0.99 0.88 0.77) xyz-d65 x y z) xyz-d65 x y z)'] expected: FAIL + + [Property color value 'rgb(from rgb(from rebeccapurple r g b / calc(alpha + 0.5)) r g b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'rgb(from rgb(from rebeccapurple r g b / calc(alpha - 1.5)) r g b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color-mix(in srgb, rgb(from rebeccapurple none g b), rebeccapurple)'] + expected: FAIL + + [Property color value 'hsl(from hsl(from rebeccapurple h s l / calc(alpha + 0.5)) h s l / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'hsl(from hsl(from rebeccapurple h s l / calc(alpha - 1.5)) h s l / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color-mix(in hsl, hsl(from rebeccapurple none s l), rebeccapurple)'] + expected: FAIL + + [Property color value 'hwb(from hwb(from rebeccapurple h w b / calc(alpha + 0.5)) h w b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'hwb(from hwb(from rebeccapurple h w b / calc(alpha - 1.5)) h w b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color-mix(in hwb, hwb(from rebeccapurple none w b), rebeccapurple)'] + expected: FAIL + + [Property color value 'lab(from lab(from lab(25 20 50) l a b / calc(alpha + 0.5)) l a b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'lab(from lab(from lab(25 20 50) l a b / calc(alpha - 1.5)) l a b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color-mix(in lab, lab(from lab(25 20 50) none a b), lab(25 20 50))'] + expected: FAIL + + [Property color value 'oklab(from oklab(from oklab(0.25 0.2 0.5) l a b / calc(alpha + 0.5)) l a b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'oklab(from oklab(from oklab(0.25 0.2 0.5) l a b / calc(alpha - 1.5)) l a b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color-mix(in oklab, oklab(from oklab(0.25 0.2 0.5) none a b), oklab(0.25 0.2 0.5))'] + expected: FAIL + + [Property color value 'lch(from lch(from lch(0.7 45 30) l c h / calc(alpha + 0.5)) l c h / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'lch(from lch(from lch(0.7 45 30) l c h / calc(alpha - 1.5)) l c h / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color-mix(in lch, lch(from lch(0.7 45 30) l c none), lch(0.7 45 30))'] + expected: FAIL + + [Property color value 'oklch(from oklch(from oklch(0.7 0.45 30) l c h / calc(alpha + 0.5)) l c h / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'oklch(from oklch(from oklch(0.7 0.45 30) l c h / calc(alpha - 1.5)) l c h / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color-mix(in oklch, oklch(from oklch(0.7 0.45 30) l c none), oklch(0.7 0.45 30))'] + expected: FAIL + + [Property color value 'color(from color(from color(srgb 0.7 0.5 0.3) srgb r g b / calc(alpha + 0.5)) srgb r g b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(srgb 0.7 0.5 0.3) srgb r g b / calc(alpha - 1.5)) srgb r g b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(srgb-linear 0.7 0.5 0.3) srgb-linear r g b / calc(alpha + 0.5)) srgb-linear r g b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(srgb-linear 0.7 0.5 0.3) srgb-linear r g b / calc(alpha - 1.5)) srgb-linear r g b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(a98-rgb 0.7 0.5 0.3) a98-rgb r g b / calc(alpha + 0.5)) a98-rgb r g b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(a98-rgb 0.7 0.5 0.3) a98-rgb r g b / calc(alpha - 1.5)) a98-rgb r g b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(rec2020 0.7 0.5 0.3) rec2020 r g b / calc(alpha + 0.5)) rec2020 r g b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(rec2020 0.7 0.5 0.3) rec2020 r g b / calc(alpha - 1.5)) rec2020 r g b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(prophoto-rgb 0.7 0.5 0.3) prophoto-rgb r g b / calc(alpha + 0.5)) prophoto-rgb r g b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(prophoto-rgb 0.7 0.5 0.3) prophoto-rgb r g b / calc(alpha - 1.5)) prophoto-rgb r g b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(display-p3 0.7 0.5 0.3) display-p3 r g b / calc(alpha + 0.5)) display-p3 r g b / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(display-p3 0.7 0.5 0.3) display-p3 r g b / calc(alpha - 1.5)) display-p3 r g b / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(xyz 7 -20.5 100) xyz x y z / calc(alpha + 0.5)) xyz x y z / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(xyz 7 -20.5 100) xyz x y z / calc(alpha - 1.5)) xyz x y z / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(xyz-d50 7 -20.5 100) xyz-d50 x y z / calc(alpha + 0.5)) xyz-d50 x y z / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(xyz-d50 7 -20.5 100) xyz-d50 x y z / calc(alpha - 1.5)) xyz-d50 x y z / calc(alpha + 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(xyz-d65 7 -20.5 100) xyz-d65 x y z / calc(alpha + 0.5)) xyz-d65 x y z / calc(alpha - 0.5))'] + expected: FAIL + + [Property color value 'color(from color(from color(xyz-d65 7 -20.5 100) xyz-d65 x y z / calc(alpha - 1.5)) xyz-d65 x y z / calc(alpha + 0.5))'] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-001.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-001.tentative.html.ini new file mode 100644 index 00000000000..25535f43bd2 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-001.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-001.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-004.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-004.tentative.html.ini new file mode 100644 index 00000000000..079d68f9db0 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-004.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-004.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-005.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-005.tentative.html.ini new file mode 100644 index 00000000000..f7e5bd89633 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-005.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-005.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-006.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-006.tentative.html.ini new file mode 100644 index 00000000000..a20fcc3b242 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-006.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-006.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-007.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-007.tentative.html.ini new file mode 100644 index 00000000000..650254666e8 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-007.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-007.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-008.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-008.tentative.html.ini new file mode 100644 index 00000000000..01050849b00 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-008.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-008.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-009.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-009.tentative.html.ini new file mode 100644 index 00000000000..c5fde4b81a4 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-009.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-009.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-010.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-010.tentative.html.ini new file mode 100644 index 00000000000..197075b7e1a --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-010.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-010.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-011.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-011.tentative.html.ini new file mode 100644 index 00000000000..801b5a840df --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-011.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-011.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-012.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-012.tentative.html.ini new file mode 100644 index 00000000000..a7fd0303bee --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-012.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-012.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-013.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-013.tentative.html.ini new file mode 100644 index 00000000000..3f398e788d2 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-013.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-013.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-015.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-015.tentative.html.ini new file mode 100644 index 00000000000..e397f59fad1 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-015.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-015.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-016.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-016.tentative.html.ini new file mode 100644 index 00000000000..8c13ceb8691 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-016.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-016.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-017.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-017.tentative.html.ini new file mode 100644 index 00000000000..e98e35fd17a --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-017.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-017.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-019.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-019.tentative.html.ini new file mode 100644 index 00000000000..baf2cf8f33d --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-019.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-019.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-001.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-001.tentative.html.ini new file mode 100644 index 00000000000..96277819670 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-001.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-001.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-002.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-002.tentative.html.ini new file mode 100644 index 00000000000..21efb29c1f9 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-002.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-002.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-003.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-003.tentative.html.ini new file mode 100644 index 00000000000..189ac0f3620 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-003.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-003.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-004.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-004.tentative.html.ini new file mode 100644 index 00000000000..4e4d8534002 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-004.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-004.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-005.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-005.tentative.html.ini new file mode 100644 index 00000000000..4a2b7b2ba98 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-005.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-005.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-006.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-006.tentative.html.ini new file mode 100644 index 00000000000..bd697fabf3f --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-006.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-006.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-007.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-007.tentative.html.ini new file mode 100644 index 00000000000..b63c81cd54e --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-007.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-007.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-008.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-008.tentative.html.ini new file mode 100644 index 00000000000..834446721a7 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-008.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-008.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-009.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-009.tentative.html.ini new file mode 100644 index 00000000000..24f8b5bded3 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-009.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-009.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-010.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-010.tentative.html.ini new file mode 100644 index 00000000000..b4d85b57450 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp-with-abspos-010.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-abspos-010.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-text/text-align/text-align-last-justify-br.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/text-align/text-align-last-justify-br.html.ini new file mode 100644 index 00000000000..465a26c4ca8 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-text/text-align/text-align-last-justify-br.html.ini @@ -0,0 +1,2 @@ +[text-align-last-justify-br.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-transitions/parsing/starting-style-parsing.html.ini b/tests/wpt/meta-legacy-layout/css/css-transitions/parsing/starting-style-parsing.html.ini new file mode 100644 index 00000000000..bbaf0376001 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-transitions/parsing/starting-style-parsing.html.ini @@ -0,0 +1,15 @@ +[starting-style-parsing.html] + [@starting-style is valid] + expected: FAIL + + [@starting-style div is not valid] + expected: FAIL + + [@starting-style () is not valid] + expected: FAIL + + [@starting-style ( {} is not valid] + expected: FAIL + + [@starting-style } is not valid] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-transitions/starting-style-adjustment.html.ini b/tests/wpt/meta-legacy-layout/css/css-transitions/starting-style-adjustment.html.ini new file mode 100644 index 00000000000..eaee2fd04af --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-transitions/starting-style-adjustment.html.ini @@ -0,0 +1,3 @@ +[starting-style-adjustment.html] + [The display property in @starting-style should be blockified so no transition should start] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/container-progress-computed.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/container-progress-computed.tentative.html.ini new file mode 100644 index 00000000000..e83399384fa --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-values/container-progress-computed.tentative.html.ini @@ -0,0 +1,48 @@ +[container-progress-computed.tentative.html] + [container-progress(height from 0px to 1px) should be used-value-equivalent to 322] + expected: FAIL + + [container-progress(width of my-container from 0px to 1px) should be used-value-equivalent to 322] + expected: FAIL + + [container-progress(height from container-progress(height from 0px to 1px) * 1px to container-progress(height from 0px to 1px) * 1px) should be used-value-equivalent to 0] + expected: FAIL + + [container-progress(height from container-progress(height from 0px to 1px) * 0.5px to container-progress(height from 0px to 1px) * 1px) should be used-value-equivalent to 1] + expected: FAIL + + [container-progress(height from container-progress(width of my-container from 0px to 1px) * 1px to container-progress(height of my-container-2 from 0px to 1px) * 1px) should be used-value-equivalent to 0] + expected: FAIL + + [calc(container-progress(width from 0px to 50px) * 10px + 100px) should be used-value-equivalent to 145.6px] + expected: FAIL + + [calc(container-progress(height from 10px to sign(50px - 500em) * 10px)) should be used-value-equivalent to -15.6] + expected: FAIL + + [calc(container-progress(width of my-container from 0px to 50px) * 10px + 100px) should be used-value-equivalent to 164.4px] + expected: FAIL + + [calc(container-progress(height of my-container from 10px to sign(50px - 500em) * 10px)) should be used-value-equivalent to -10.9] + expected: FAIL + + [container-progress(width of non-existing-container from 0px to 1px) should be used-value-equivalent to 1024] + expected: FAIL + + [container-progress(height of non-existing-container from 0px to 1px) should be used-value-equivalent to 740] + expected: FAIL + + [container-progress(width of out-of-scope-container from 0px to 1px) should be used-value-equivalent to 1024] + expected: FAIL + + [container-progress(height of out-of-scope-container from 0px to 1px) should be used-value-equivalent to 740] + expected: FAIL + + [calc(container-progress(width from 0px to 1px) * 1px) should be used-value-equivalent to 228px] + expected: FAIL + + [calc(container-progress(height of my-container from 0px to 1px) * 1s) should be used-value-equivalent to 228s] + expected: FAIL + + [calc(container-progress(width of my-container-2 from 0px to 1px) * 1deg) should be used-value-equivalent to 5051deg] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/container-progress-serialize.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/container-progress-serialize.tentative.html.ini new file mode 100644 index 00000000000..6b999c9c41d --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-values/container-progress-serialize.tentative.html.ini @@ -0,0 +1,24 @@ +[container-progress-serialize.tentative.html] + ['calc(container-progress(width from 0px to 1px) / 1000)' as a specified value should serialize as 'calc(container-progress(width from 0px to 1px) / 1000)'.] + expected: FAIL + + ['scale(calc(container-progress(width from 0px to 1px) / 1000))' as a specified value should serialize as 'scale(calc(container-progress(width from 0px to 1px) / 1000))'.] + expected: FAIL + + ['calc(container-progress(width from 0px to 1px) / 1000)' as a computed value should serialize as '0.228'.] + expected: FAIL + + ['scale(calc(container-progress(width from 0px to 1px) / 1000))' as a computed value should serialize as 'matrix(0.228, 0, 0, 0.228, 0, 0)'.] + expected: FAIL + + ['calc(0.1 * container-progress(height of my-container from 0px to 10em))' as a specified value should serialize as 'calc(0.1 * container-progress(height of my-container from 0px to 10em))'.] + expected: FAIL + + ['scale(calc(0.1 * container-progress(height of my-container from 0px to 10em)))' as a specified value should serialize as 'scale(calc(0.1 * container-progress(height of my-container from 0px to 10em)))'.] + expected: FAIL + + ['calc(0.1 * container-progress(height of my-container from 0px to 10em))' as a computed value should serialize as '0.228'.] + expected: FAIL + + ['scale(calc(0.1 * container-progress(height of my-container from 0px to 10em)))' as a computed value should serialize as 'matrix(0.228, 0, 0, 0.228, 0, 0)'.] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/media-progress-computed.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/media-progress-computed.tentative.html.ini index 8c28294689e..80664a22d0d 100644 --- a/tests/wpt/meta-legacy-layout/css/css-values/media-progress-computed.tentative.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-values/media-progress-computed.tentative.html.ini @@ -22,3 +22,21 @@ [calc(media-progress(width from 0px to 1px) * 1deg) should be used-value-equivalent to 1024deg] expected: FAIL + + [media-progress() identity check] + expected: FAIL + + [media-progress() with length product] + expected: FAIL + + [media-progress with complex to calculation] + expected: FAIL + + [media-progress() as length] + expected: FAIL + + [media-progress() as time] + expected: FAIL + + [media-progress() as angle] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/selectors/invalidation/is-where-pseudo-containing-hard-pseudo.html.ini b/tests/wpt/meta-legacy-layout/css/selectors/invalidation/is-where-pseudo-containing-hard-pseudo.html.ini new file mode 100644 index 00000000000..aee13cdb5d8 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/selectors/invalidation/is-where-pseudo-containing-hard-pseudo.html.ini @@ -0,0 +1,36 @@ +[is-where-pseudo-containing-hard-pseudo.html] + [subject1 is red when .other-match added] + expected: FAIL + + [subject1 is orangered when .parent added to parent] + expected: FAIL + + [subject1 is orangered when .parent removed from parent] + expected: FAIL + + [subject2 is darkred when .other-match added] + expected: FAIL + + [subject2 is pink when .parent added to parent] + expected: FAIL + + [subject2 is pink when .parent removed from parent] + expected: FAIL + + [subject3 is green when .other-match added] + expected: FAIL + + [subject3 is lightgreen when .parent added to parent] + expected: FAIL + + [subject3 is lightgreen when .parent removed from parent] + expected: FAIL + + [subject4 is darkgreen when .other-match added] + expected: FAIL + + [subject4 is yellowgreen when .parent added to parent] + expected: FAIL + + [subject4 is yellowgreen when .parent removed from parent] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/custom-elements/reactions/customized-builtins/HTMLMediaElement.html.ini b/tests/wpt/meta-legacy-layout/custom-elements/reactions/customized-builtins/HTMLMediaElement.html.ini new file mode 100644 index 00000000000..2ca05f57bb0 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/custom-elements/reactions/customized-builtins/HTMLMediaElement.html.ini @@ -0,0 +1,2 @@ +[HTMLMediaElement.html] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/dom/nodes/insertion-removing-steps/Node-appendChild-script-and-default-style-meta-from-fragment.tentative.html.ini b/tests/wpt/meta-legacy-layout/dom/nodes/insertion-removing-steps/Node-appendChild-script-and-default-style-meta-from-fragment.tentative.html.ini index be8657be47c..e81b4c9266b 100644 --- a/tests/wpt/meta-legacy-layout/dom/nodes/insertion-removing-steps/Node-appendChild-script-and-default-style-meta-from-fragment.tentative.html.ini +++ b/tests/wpt/meta-legacy-layout/dom/nodes/insertion-removing-steps/Node-appendChild-script-and-default-style-meta-from-fragment.tentative.html.ini @@ -1,3 +1,6 @@ [Node-appendChild-script-and-default-style-meta-from-fragment.tentative.html] [Inserting that uses alternate stylesheets, applies the style during DOM insertion, and before script runs as a result of any atomic insertions] expected: FAIL + + [Inserting that uses alternate stylesheets, applies the style during DOM post-insertion steps] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-first.any.js.ini b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-first.any.js.ini new file mode 100644 index 00000000000..482e1b5a31b --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-first.any.js.ini @@ -0,0 +1,32 @@ +[observable-first.any.worker.html] + [first(): Promise resolves with the first value from the source Observable] + expected: FAIL + + [first(): Promise rejects with the error emitted from the source Observable] + expected: FAIL + + [first(): Promise rejects with RangeError when source Observable completes without emitting any values] + expected: FAIL + + [first(): Aborting a signal rejects the Promise with an AbortError DOMException] + expected: FAIL + + [first(): Lifecycle] + expected: FAIL + + +[observable-first.any.html] + [first(): Promise resolves with the first value from the source Observable] + expected: FAIL + + [first(): Promise rejects with the error emitted from the source Observable] + expected: FAIL + + [first(): Promise rejects with RangeError when source Observable completes without emitting any values] + expected: FAIL + + [first(): Aborting a signal rejects the Promise with an AbortError DOMException] + expected: FAIL + + [first(): Lifecycle] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-last.any.js.ini b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-last.any.js.ini new file mode 100644 index 00000000000..c2aef3251c7 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-last.any.js.ini @@ -0,0 +1,32 @@ +[observable-last.any.html] + [last(): Promise resolves to last value] + expected: FAIL + + [last(): Promise rejects with emitted error] + expected: FAIL + + [last(): Promise rejects with RangeError when source Observable completes without emitting any values] + expected: FAIL + + [last(): Aborting a signal rejects the Promise with an AbortError DOMException] + expected: FAIL + + [last(): Lifecycle] + expected: FAIL + + +[observable-last.any.worker.html] + [last(): Promise resolves to last value] + expected: FAIL + + [last(): Promise rejects with emitted error] + expected: FAIL + + [last(): Promise rejects with RangeError when source Observable completes without emitting any values] + expected: FAIL + + [last(): Aborting a signal rejects the Promise with an AbortError DOMException] + expected: FAIL + + [last(): Lifecycle] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-switchMap.any.js.ini b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-switchMap.any.js.ini new file mode 100644 index 00000000000..7a987af0339 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-switchMap.any.js.ini @@ -0,0 +1,38 @@ +[observable-switchMap.any.html] + [switchMap(): result subscribes to one inner observable at a time, unsubscribing from the previous active one when a new one replaces it] + expected: FAIL + + [switchMap(): result does not complete when the source observable completes, if the inner observable is still active] + expected: FAIL + + [switchMap(): result emits an error if Mapper callback throws an error] + expected: FAIL + + [switchMap(): result emits an error if the source observable emits an error] + expected: FAIL + + [switchMap(): result emits an error if the inner observable emits an error] + expected: FAIL + + [switchMap(): should unsubscribe in the correct order when user aborts the subscription] + expected: FAIL + + +[observable-switchMap.any.worker.html] + [switchMap(): result subscribes to one inner observable at a time, unsubscribing from the previous active one when a new one replaces it] + expected: FAIL + + [switchMap(): result does not complete when the source observable completes, if the inner observable is still active] + expected: FAIL + + [switchMap(): result emits an error if Mapper callback throws an error] + expected: FAIL + + [switchMap(): result emits an error if the source observable emits an error] + expected: FAIL + + [switchMap(): result emits an error if the inner observable emits an error] + expected: FAIL + + [switchMap(): should unsubscribe in the correct order when user aborts the subscription] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/api/request/request-bad-port.any.js.ini b/tests/wpt/meta-legacy-layout/fetch/api/request/request-bad-port.any.js.ini index 2347c9ad580..6b37ad41c18 100644 --- a/tests/wpt/meta-legacy-layout/fetch/api/request/request-bad-port.any.js.ini +++ b/tests/wpt/meta-legacy-layout/fetch/api/request/request-bad-port.any.js.ini @@ -69,6 +69,12 @@ [Request on bad port 10080 should throw TypeError.] expected: NOTRUN + [Request on bad port 4190 should throw TypeError.] + expected: NOTRUN + + [Request on bad port 6679 should throw TypeError.] + expected: NOTRUN + [request-bad-port.any.html] expected: TIMEOUT @@ -134,3 +140,9 @@ [Request on bad port 10080 should throw TypeError.] expected: NOTRUN + + [Request on bad port 4190 should throw TypeError.] + expected: NOTRUN + + [Request on bad port 6679 should throw TypeError.] + expected: NOTRUN diff --git a/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-clear-site-data.tentative.https.html.ini b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-clear-site-data.tentative.https.html.ini new file mode 100644 index 00000000000..a757741d967 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-clear-site-data.tentative.https.html.ini @@ -0,0 +1,9 @@ +[dictionary-clear-site-data.tentative.https.html] + [Clear-Site-Data with "cache" directive must unregister dictionary] + expected: FAIL + + [Clear-Site-Data with "cookies" directive must unregister dictionary] + expected: FAIL + + [Clear-Site-Data with "storage" directive must not unregister dictionary] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-decompression.tentative.https.html.ini b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-decompression.tentative.https.html.ini new file mode 100644 index 00000000000..e6a6956c171 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-decompression.tentative.https.html.ini @@ -0,0 +1,9 @@ +[dictionary-decompression.tentative.https.html] + [Decompresion using Brotli with the dictionary works as expected] + expected: FAIL + + [Decompresion using Zstandard with the dictionary works as expected] + expected: FAIL + + [Decompresion of a cross origin resource works as expected] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html.ini b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html.ini new file mode 100644 index 00000000000..31b69125e14 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html.ini @@ -0,0 +1,9 @@ +[dictionary-fetch-with-link-element.tentative.https.html] + [Browser supports link element with dictionary rel.] + expected: FAIL + + [Fetch same origin dictionary using link element] + expected: FAIL + + [Fetch cross origin dictionary using link element] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-fetch-with-link-header.tentative.https.html.ini b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-fetch-with-link-header.tentative.https.html.ini new file mode 100644 index 00000000000..e7588c640c5 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-fetch-with-link-header.tentative.https.html.ini @@ -0,0 +1,3 @@ +[dictionary-fetch-with-link-header.tentative.https.html] + [Fetch same origin dictionary using link header] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini new file mode 100644 index 00000000000..27ecd816f20 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini @@ -0,0 +1,9 @@ +[dictionary-registration.tentative.https.html] + [Simple dictionary registration and unregistration] + expected: FAIL + + [Dictionary registration with dictionary ID] + expected: FAIL + + [New dictionary registration overrides the existing one] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/bad-br-body.https.any.js.ini b/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/bad-br-body.https.any.js.ini new file mode 100644 index 00000000000..2a7f8c45be1 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/bad-br-body.https.any.js.ini @@ -0,0 +1,3 @@ +[bad-br-body.https.any.html] + [Consuming the body of a resource with bad br content with arrayBuffer() should reject] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/big-br-body.https.any.js.ini b/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/big-br-body.https.any.js.ini new file mode 100644 index 00000000000..1ed0a2d3d98 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/big-br-body.https.any.js.ini @@ -0,0 +1,20 @@ +[big-br-body.https.any.worker.html] + [large br data should be decompressed successfully] + expected: FAIL + + [large br data should be decompressed successfully with byte stream] + expected: FAIL + + +[big-br-body.https.any.serviceworker.html] + expected: ERROR + +[big-br-body.https.any.sharedworker.html] + expected: ERROR + +[big-br-body.https.any.html] + [large br data should be decompressed successfully] + expected: FAIL + + [large br data should be decompressed successfully with byte stream] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/br-body.https.any.js.ini b/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/br-body.https.any.js.ini new file mode 100644 index 00000000000..cf915bba768 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/fetch/content-encoding/br/br-body.https.any.js.ini @@ -0,0 +1,9 @@ +[br-body.https.any.serviceworker.html] + expected: ERROR + +[br-body.https.any.sharedworker.html] + expected: ERROR + +[br-body.https.any.worker.html] + +[br-body.https.any.html] diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini index b8fd22e2b81..149bcb4ff8c 100644 --- a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini @@ -10,6 +10,3 @@ [load & pageshow events do not fire on contentWindow of + + +
Popover 30
+ + + diff --git a/tests/wpt/tests/import-maps/WEB_FEATURES.yml b/tests/wpt/tests/import-maps/WEB_FEATURES.yml new file mode 100644 index 00000000000..dc3d7fdc233 --- /dev/null +++ b/tests/wpt/tests/import-maps/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: import-maps + files: "**" diff --git a/tests/wpt/tests/intersection-observer/WEB_FEATURES.yml b/tests/wpt/tests/intersection-observer/WEB_FEATURES.yml new file mode 100644 index 00000000000..1b6a42746fc --- /dev/null +++ b/tests/wpt/tests/intersection-observer/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: intersection-observer + files: "**" diff --git a/tests/wpt/tests/intersection-observer/svg-container-element.html b/tests/wpt/tests/intersection-observer/svg-container-element.html index e2b6ab5cb07..1c27acee514 100644 --- a/tests/wpt/tests/intersection-observer/svg-container-element.html +++ b/tests/wpt/tests/intersection-observer/svg-container-element.html @@ -14,6 +14,7 @@ diff --git a/tests/wpt/tests/intersection-observer/v2/WEB_FEATURES.yml b/tests/wpt/tests/intersection-observer/v2/WEB_FEATURES.yml new file mode 100644 index 00000000000..e57d67f6415 --- /dev/null +++ b/tests/wpt/tests/intersection-observer/v2/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: intersection-observer-v2 + files: "**" diff --git a/tests/wpt/tests/jpegxl/WEB_FEATURES.yml b/tests/wpt/tests/jpegxl/WEB_FEATURES.yml new file mode 100644 index 00000000000..a81700e1fb0 --- /dev/null +++ b/tests/wpt/tests/jpegxl/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: jpegxl + files: "**" diff --git a/tests/wpt/tests/largest-contentful-paint/transparent-text.html b/tests/wpt/tests/largest-contentful-paint/transparent-text.html new file mode 100644 index 00000000000..9eb978ab5cd --- /dev/null +++ b/tests/wpt/tests/largest-contentful-paint/transparent-text.html @@ -0,0 +1,48 @@ + + + + + + + + +

fake LCP

+ + + \ No newline at end of file diff --git a/tests/wpt/tests/lint.ignore b/tests/wpt/tests/lint.ignore index 4a2faecb576..61bca89ddc9 100644 --- a/tests/wpt/tests/lint.ignore +++ b/tests/wpt/tests/lint.ignore @@ -749,3 +749,7 @@ HTML INVALID SYNTAX: html/syntax/parsing/unclosed-svg-script.html HTML INVALID SYNTAX: mathml/crashtests/mozilla/411603-1.html HTML INVALID SYNTAX: quirks/percentage-height-calculation.html HTML INVALID SYNTAX: trusted-types/TrustedTypePolicyFactory-getAttributeType-namespace.html + +# Pre compressed data using Shared Brotli and Shared Zstandard. +TRAILING WHITESPACE, INDENT TABS, CR AT EOL: fetch/compression-dictionary/resources/compressed.br-d.data +TRAILING WHITESPACE, INDENT TABS, CR AT EOL: fetch/compression-dictionary/resources/compressed.zstd-d.data diff --git a/tests/wpt/tests/long-animation-frame/tentative/loaf-stream-source-location.html b/tests/wpt/tests/long-animation-frame/tentative/loaf-stream-source-location.html index 5776ff52552..0fd30859d73 100644 --- a/tests/wpt/tests/long-animation-frame/tentative/loaf-stream-source-location.html +++ b/tests/wpt/tests/long-animation-frame/tentative/loaf-stream-source-location.html @@ -17,8 +17,7 @@ promise_test(async t => { const scriptElement = document.createElement("script"); scriptElement.src = scriptLocation; document.body.appendChild(scriptElement); - }, script => { - return script.invoker === "Promise.resolve" }, t); + }, script => script.invoker === "StreamPromise.resolve.then", t); assert_true(script.sourceURL.includes("stream-promise-generates-loaf.js")); }, "Source location should be extracted for stream promises"); diff --git a/tests/wpt/tests/long-animation-frame/tentative/loaf-stream.html b/tests/wpt/tests/long-animation-frame/tentative/loaf-stream.html index 424f2cd0d1e..e35bc2f9aa7 100644 --- a/tests/wpt/tests/long-animation-frame/tentative/loaf-stream.html +++ b/tests/wpt/tests/long-animation-frame/tentative/loaf-stream.html @@ -34,6 +34,6 @@ test_promise_script(async t => { }); response.body.pipeTo(writable); await readable.getReader().read(); -}, "resolve", "Promise.resolve"); +}, "resolve", "StreamPromise.resolve"); diff --git a/tests/wpt/tests/mathml/WEB_FEATURES.yml b/tests/wpt/tests/mathml/WEB_FEATURES.yml new file mode 100644 index 00000000000..4d03bc3eb4d --- /dev/null +++ b/tests/wpt/tests/mathml/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: mathml + files: "**" diff --git a/tests/wpt/tests/mathml/presentation-markup/operators/mo-axis-height-1.html b/tests/wpt/tests/mathml/presentation-markup/operators/mo-axis-height-1.html index 6de62841887..10ea4dcffc5 100644 --- a/tests/wpt/tests/mathml/presentation-markup/operators/mo-axis-height-1.html +++ b/tests/wpt/tests/mathml/presentation-markup/operators/mo-axis-height-1.html @@ -29,24 +29,100 @@ window.addEventListener("load", () => { loadAllFonts().then(runTests); }); function runTests() { + const AxisHeight = 5000 * emToPx; + test(function() { - var v1 = 5000 * emToPx; var moMiddle = (getBox("mo1").bottom + getBox("mo1").top) / 2; assert_approx_equals(getBox("mo1").height, 14000 * emToPx, epsilon, "mo: size"); assert_approx_equals(getBox("baseline1").bottom - moMiddle, - v1, epsilon, "mo: axis height"); - }, "AxisHeight (size variant)"); + AxisHeight, epsilon, "mo: axis height"); + }, "symmetric stretching with respect to the math axis (size variant)"); test(function() { - var v1 = 5000 * emToPx; var moMiddle = (getBox("mo2").bottom + getBox("mo2").top) / 2; assert_approx_equals(getBox("mo2").height, - 2 * (getBox("target2").height - v1), + 2 * (getBox("target2").height - AxisHeight), epsilon, "mo: size"); assert_approx_equals(getBox("baseline2").bottom - moMiddle, - v1, epsilon, "mo: axis height"); - }, "AxisHeight (glyph assembly)"); + AxisHeight, epsilon, "mo: axis height"); + }, "symmetric stretching with respect to the math axis (glyph assembly)"); + + test(function() { + const minsize = 14000 * emToPx; + const Tascent = minsize / 2 + AxisHeight; + const Tdescent = minsize - Tascent; + assert_approx_equals(getBox("baseline3").bottom - getBox("mo3").top, Tascent, epsilon, "mo ascent"); + assert_approx_equals(getBox("mo3").bottom - getBox("baseline3").bottom, Tdescent, epsilon, "mo descent"); + }, "Tascent = Tdescent = 0, minsize = 14em"); + + test(function() { + const minsize = 14000 * emToPx; + var Tascent = getBox("baseline4").bottom - getBox("target4").top; + assert_greater_than(Tascent, AxisHeight); + var Tdescent = getBox("target4").bottom - getBox("baseline4").bottom; + const T = Tascent + Tdescent; + Tascent = Math.max(0, Tascent - AxisHeight) * minsize / T + AxisHeight; + Tdescent = minsize - Tascent; + assert_approx_equals(getBox("baseline4").bottom - getBox("mo4").top, Tascent, epsilon, "mo ascent"); + assert_approx_equals(getBox("mo4").bottom - getBox("baseline4").bottom, Tdescent, epsilon, "mo descent"); + }, "Tascent = 6em > AxisHeight, Tdescent = 1em, symmetric = false, minsize = 14em"); + + test(function() { + const minsize = 14000 * emToPx; + var Tascent = getBox("baseline5").bottom - getBox("target5").top; + assert_less_than(Tascent, AxisHeight); + var Tdescent = getBox("target5").bottom - getBox("baseline5").bottom; + const T = Tascent + Tdescent; + Tascent = Math.max(0, Tascent - AxisHeight) * minsize / T + AxisHeight; + Tdescent = minsize - Tascent; + assert_approx_equals(getBox("baseline5").bottom - getBox("mo5").top, Tascent, epsilon, "mo ascent"); + assert_approx_equals(getBox("mo5").bottom - getBox("baseline5").bottom, Tdescent, epsilon, "mo descent"); + }, "Tascent = 4em < AxisHeight, Tdescent = 3em, symmetric = false, minsize = 14em"); + + test(function() { + const maxsize = 14000 * emToPx; + var Tascent = getBox("baseline6").bottom - getBox("target6").top; + assert_greater_than(Tascent, AxisHeight); + var Tdescent = getBox("target6").bottom - getBox("baseline6").bottom; + const T = Tascent + Tdescent; + Tascent = Math.max(0, Tascent - AxisHeight) * maxsize / T + AxisHeight; + Tdescent = maxsize - Tascent; + assert_approx_equals(getBox("baseline6").bottom - getBox("mo6").top, Tascent, epsilon, "mo ascent"); + assert_approx_equals(getBox("mo6").bottom - getBox("baseline6").bottom, Tdescent, epsilon, "mo descent"); + }, "Tascent = 6em > AxisHeight, Tdescent = 22em, symmetric = false, maxsize = 14em"); + + test(function() { + const maxsize = 14000 * emToPx; + var Tascent = getBox("baseline7").bottom - getBox("target7").top; + assert_less_than(Tascent, AxisHeight); + var Tdescent = getBox("target7").bottom - getBox("baseline7").bottom; + var T = Tascent + Tdescent; + Tascent = Math.max(0, Tascent - AxisHeight) * maxsize / T + AxisHeight; + Tdescent = maxsize - Tascent; + assert_approx_equals(getBox("baseline7").bottom - getBox("mo7").top, Tascent, epsilon, "mo ascent"); + assert_approx_equals(getBox("mo7").bottom - getBox("baseline7").bottom, Tdescent, epsilon, "mo descent"); + }, "Tascent = 4em < AxisHeight, Tdescent = 24em, symmetric = false, maxsize = 14em"); + + test(function() { + const minsize = 14000 * emToPx; + const Uascent = getBox("baseline8").bottom - getBox("target8").top; + const Udescent = getBox("target8").bottom - getBox("baseline8").bottom; + assert_less_than(2 * Math.max(Uascent - AxisHeight, Udescent + AxisHeight), minsize, "Sascent + Sdescent < minsize"); + assert_approx_equals(getBox("mo8").height, minsize, epsilon, "mo size"); + const MathAxis = getBox("baseline8").bottom - AxisHeight; + assert_approx_equals(MathAxis - getBox("mo8").top, getBox("mo8").bottom - MathAxis, epsilon, "mo is symmetric"); + }, "symmetric stretching with respect to the math axis (minsize = 14em)"); + + test(function() { + const maxsize = 14000 * emToPx; + const Uascent = getBox("baseline9").bottom - getBox("target9").top; + const Udescent = getBox("target9").bottom - getBox("baseline9").bottom; + assert_greater_than(2 * Math.max(Uascent - AxisHeight, Udescent + AxisHeight), maxsize, "Sascent + Sdescent > maxsize"); + assert_approx_equals(getBox("mo9").height, maxsize, epsilon, "mo size"); + const MathAxis = getBox("baseline9").bottom - AxisHeight; + assert_approx_equals(MathAxis - getBox("mo9").top, getBox("mo9").bottom - MathAxis, epsilon, "mo is symmetric"); + }, "symmetric stretching with respect to the math axis (maxsize = 14em)"); done(); } @@ -56,20 +132,87 @@

+ + - - - + 1 + + - - - + 2 +

+

+ + + + + + 3 + + +

+

+ + + + + + 4 + + + + + + + + 5 + + +

+

+ + + + + + 6 + + + + + + + + 7 + + +

+ + +

+ + + + + + 8 + + + + + + + + 9 + + +

diff --git a/tests/wpt/tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001.html b/tests/wpt/tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001.html index 3e7e5c9bcc8..c07f64327a3 100644 --- a/tests/wpt/tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001.html +++ b/tests/wpt/tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001.html @@ -20,6 +20,10 @@ mo { font-family: operators; } + @font-face { + font-family: stretchy; + src: url("/fonts/math/stretchy.woff"); + } + + + +

ContactAddress interface

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When prompted, please enter addresses as follows... +

+
    +
  1. + + Please use: +
    +
    Recipient:
    +
    web platform test
    +
    Address line:
    +
    55 test st
    +
    Country
    +
    Australia
    +
    City
    +
    Chapel Hill
    +
    State/Region
    +
    Queensland
    +
    postal code
    +
    6095
    +
    organization
    +
    w3c
    +
    Phone number
    +
    +61 7 3378 0000
    +
    +
  2. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html new file mode 100644 index 00000000000..1365ecefebe --- /dev/null +++ b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-call-immediate-manual.https.html @@ -0,0 +1,206 @@ + + + + + + PaymentRequestUpdateEvent.updateWith() needs to be called immediately + + + + +

updateWith() method

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When the payment sheet is shown, select a different shipping address once. Then pay. +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + When the payment sheet is shown, select a different shipping address once, then change shipping option once. Then pay. +
  6. +
  7. + +
  8. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-duplicate-shipping-options-manual.https.html b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-duplicate-shipping-options-manual.https.html new file mode 100644 index 00000000000..a4a7afd7f63 --- /dev/null +++ b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-duplicate-shipping-options-manual.https.html @@ -0,0 +1,106 @@ + + + + + updateWith() method - duplicate shippingOption ids + + + + +

updateWith() method - duplicate shippingOptions ids

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When the payment sheet is shown, select a different shipping address. + If you have to manually abort the test from the payment sheet, then the + test has failed. +

+
    +
  1. + +
  2. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-incremental-update-manual.https.html b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-incremental-update-manual.https.html new file mode 100644 index 00000000000..c1ed1b5f685 --- /dev/null +++ b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-incremental-update-manual.https.html @@ -0,0 +1,196 @@ + + + + + Incremental updates via updateWith() + + + + +

+ Incremental updates +

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ Unless stated otherwise, each test will update some part of the displayed payment sheet in + a manner indicated below. When prompted, please change or enter a new + shipping address, look for the tested change, and complete the payment. +

+

+ If the payment request locks up or otherwise aborts, the test has failed. +

+
    +
  1. + +
  2. +
+ +
+

Incremental updates via PaymentDetailsUpdate.total

+
    +
  1. + +
  2. +
+
+ +
+

Incremental updates via PaymentDetailsBase.displayItems

+
    +
  1. + +
  2. +
+
+ +
+

Incremental updates via PaymentDetailsBase.shippingOptions

+
    +
  1. + +
  2. +
+
+ +
+

Incremental updates via PaymentDetailsBase.modifiers

+
    +
  1. + +
  2. +
  3. + +
  4. +
+
+ + + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-method-abort-update-manual.https.html b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-method-abort-update-manual.https.html new file mode 100644 index 00000000000..e24452c2a99 --- /dev/null +++ b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-method-abort-update-manual.https.html @@ -0,0 +1,286 @@ + + + + + updateWith() method - "abort the update" + + + + +

updateWith() method - "abort the update"

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When the payment sheet is shown, change the shipping address. +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
  11. + +
  12. +
  13. + +
  14. +
  15. + +
  16. +
  17. + +
  18. +
  19. + +
  20. +
  21. + +
  22. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-state-checks-manual.https.html b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-state-checks-manual.https.html new file mode 100644 index 00000000000..fb16de5699a --- /dev/null +++ b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updateWith-state-checks-manual.https.html @@ -0,0 +1,125 @@ + + + +updateWith() method - state machine checks + + + +

updateWith() method - state machine checks

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When the payment sheet is shown, select a different shipping address once. Then pay. +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updatewith-method.https.html b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updatewith-method.https.html index 9a60fe7a4c0..fffd3b3ec54 100644 --- a/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updatewith-method.https.html +++ b/tests/wpt/tests/payment-request/PaymentRequestUpdateEvent/updatewith-method.https.html @@ -29,7 +29,9 @@ test(() => { // Github issue: https://github.com/w3c/browser-payment-api/issues/546 test(() => { const untrustedEvents = [ - new PaymentRequestUpdateEvent("just a test") + new PaymentRequestUpdateEvent("just a test"), + new PaymentRequestUpdateEvent("shippingaddresschange"), + new PaymentRequestUpdateEvent("shippingoptionchange"), ].forEach(ev => { assert_throws_dom( "InvalidStateError", @@ -45,7 +47,9 @@ test(() => { test(() => { const request = new PaymentRequest(defaultMethods, defaultDetails); const untrustedEvents = [ - new PaymentRequestUpdateEvent("just a test") + new PaymentRequestUpdateEvent("just a test"), + new PaymentRequestUpdateEvent("shippingaddresschange"), + new PaymentRequestUpdateEvent("shippingoptionchange"), ].map(ev => { request.dispatchEvent(ev); // set .target and dispatch flag // unstrusted event. diff --git a/tests/wpt/tests/payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html b/tests/wpt/tests/payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html new file mode 100644 index 00000000000..94e6fa5105b --- /dev/null +++ b/tests/wpt/tests/payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html @@ -0,0 +1,103 @@ + + + + + PaymentValidationErrors' `shippingAddress` member (AddressErrors) + + + + + +

+ Manual Test for PaymentValidationErrors' `shippingAddress` member - Please run in order! +

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When presented with the payment sheet, use any card and select to "Pay". + You will be asked to retry the payment and an error should be shown somewhere + in the UI. The expected error string is described in each individual test. + If you see the error, hit "Pay" again. If you don't see the error, + abort the payment request by hitting "esc" - which means that particular test + has failed. +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
  11. + +
  12. +
  13. + +
  14. +
  15. + +
  16. +
  17. + +
  18. +
  19. + +
  20. +
  21. + +
  22. +
  23. + +
  24. +
+ + If you find a buggy test, please file a bug + and tag one of the owners. + diff --git a/tests/wpt/tests/payment-request/algorithms-manual.https.html b/tests/wpt/tests/payment-request/algorithms-manual.https.html new file mode 100644 index 00000000000..b90c312aba3 --- /dev/null +++ b/tests/wpt/tests/payment-request/algorithms-manual.https.html @@ -0,0 +1,176 @@ + + + + + Payment Request algorithms + + + + +

+ Tests for "algorithms" section +

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+
+

+ User aborts the payment request algorithm +

+ +

+ When presented with the payment sheet, abort the payment request (e.g., by hitting the esc key or pressing a UA provided button). +

+
    +
  1. + +
  2. +
+
+ +
+

Shipping address changed algorithm

+ +

+ When prompted, please change or enter a new shipping address and then select Pay. +

+
    +
  1. + +
  2. +
+
+ +
+

Shipping option changed algorithm

+ +

+ Finally, when prompted, please select "shipping option 2" and then select Pay. +

+
    +
  1. + +
  2. +
+
+ + + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/billing-address-changed-manual.https.html b/tests/wpt/tests/payment-request/billing-address-changed-manual.https.html new file mode 100644 index 00000000000..d03f7615187 --- /dev/null +++ b/tests/wpt/tests/payment-request/billing-address-changed-manual.https.html @@ -0,0 +1,115 @@ + +Test for requesting billing address + + + + +

Request billing address

+

+ Click on each button in sequence from top to bottom without refreshing the + page. Each button will bring up the Payment Request UI window. +

+

+ When the payment sheet is presented, select a payment method (e.g., a credit + card). +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. +
+ + If you find a buggy test, please + file a bug and + tag one of the + suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/change-shipping-option-manual.https.html b/tests/wpt/tests/payment-request/change-shipping-option-manual.https.html new file mode 100644 index 00000000000..438001804ac --- /dev/null +++ b/tests/wpt/tests/payment-request/change-shipping-option-manual.https.html @@ -0,0 +1,104 @@ + + + +Test for PaymentRequest shippingOption attribute + + + + + + +

PaymentRequest shippingOption attribute

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When the payment sheet is presented, select "PICK ME!" as the shipping option. +

+
    +
  1. + +
  2. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/change-shipping-option-select-last-manual.https.html b/tests/wpt/tests/payment-request/change-shipping-option-select-last-manual.https.html new file mode 100644 index 00000000000..4ad31d65317 --- /dev/null +++ b/tests/wpt/tests/payment-request/change-shipping-option-select-last-manual.https.html @@ -0,0 +1,101 @@ + + +Test for PaymentDetailsBase's shippingOptions member + + + + + +

PaymentRequest shippingOption attribute

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When the payment sheet is presented, hit pay. +

+
    +
  1. + +
  2. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/dynamically-change-shipping-options-manual.https.html b/tests/wpt/tests/payment-request/dynamically-change-shipping-options-manual.https.html new file mode 100644 index 00000000000..0e6670a1b82 --- /dev/null +++ b/tests/wpt/tests/payment-request/dynamically-change-shipping-options-manual.https.html @@ -0,0 +1,142 @@ + + +Test for PaymentRequest shippingOption dynamic updating + + + + + + +

PaymentRequest shippingOption attribute

+

+ Click on each button in sequence from top to bottom without refreshing the + page. Each button (except the 'Done' button) will bring up the Payment Request + UI window. +

+
    +
  1. + When the payment sheet is presented, view options for Shipping Method. There + should only be one: "Default shipping method" +
  2. +
  3. + Change your Shipping Address - either update your existing one by changing + something (name, address, etc), or select a different Shipping Address, or + add a new Shipping Address and select it. +
  4. +
  5. + Go back to Shipping Method, and there is now an option called "Dynamically + added shipping option". Select it +
  6. +
  7. + Click on the 'Done' button +
  8. +
+ + + If you find a buggy test, please + file a bug and + tag one of the + suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/historical.https.html b/tests/wpt/tests/payment-request/historical.https.html index aa183a58cdb..3e881d0122b 100644 --- a/tests/wpt/tests/payment-request/historical.https.html +++ b/tests/wpt/tests/payment-request/historical.https.html @@ -10,7 +10,7 @@ ["paymentRequestID", "PaymentResponse"], // https://github.com/w3c/browser-payment-api/pull/258 - ["careOf", "PaymentAddress"], + ["careOf", "ContactAddress"], // https://github.com/w3c/browser-payment-api/pull/219 ["totalAmount", "PaymentResponse"], @@ -20,7 +20,7 @@ ["paymentRequestId", "PaymentResponse"], // https://github.com/w3c/payment-request/pull/765 - ["languageCode", "PaymentAddress"], + ["languageCode", "ContactAddress"], //https://github.com/whatwg/html/pull/5915 ["allowPaymentRequest", "HTMLIFrameElement"], diff --git a/tests/wpt/tests/payment-request/payment-request-constructor-thcrash.https.html b/tests/wpt/tests/payment-request/payment-request-constructor-thcrash.https.html new file mode 100644 index 00000000000..b6003070851 --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-request-constructor-thcrash.https.html @@ -0,0 +1,254 @@ + + + +Crash tests PaymentRequest Constructor + + + + diff --git a/tests/wpt/tests/payment-request/payment-request-constructor.https.sub.html b/tests/wpt/tests/payment-request/payment-request-constructor.https.sub.html index c1ecc225838..9b0ad06454f 100644 --- a/tests/wpt/tests/payment-request/payment-request-constructor.https.sub.html +++ b/tests/wpt/tests/payment-request/payment-request-constructor.https.sub.html @@ -240,7 +240,7 @@ test(() => { test(() => { smokeTest(); - for (const prop in ["displayItems", "modifiers"]) { + for (const prop in ["displayItems", "shippingOptions", "modifiers"]) { try { const details = Object.assign({}, defaultDetails, { [prop]: [] }); new PaymentRequest(defaultMethods, details); @@ -361,6 +361,186 @@ test(() => { } }, "it handles high precision currency values without throwing"); +// Process shipping options: + +const defaultShippingOption = Object.freeze({ + id: "default", + label: "", + amount: defaultAmount, + selected: false, +}); +const defaultShippingOptions = Object.freeze([ + Object.assign({}, defaultShippingOption), +]); + +test(() => { + smokeTest(); + for (const amount of invalidAmounts) { + const invalidAmount = Object.assign({}, defaultAmount, { + value: amount, + }); + const invalidShippingOption = Object.assign({}, defaultShippingOption, { + amount: invalidAmount, + }); + const details = Object.assign({}, defaultDetails, { + shippingOptions: [invalidShippingOption], + }); + assert_throws_js( + TypeError, + () => { + new PaymentRequest(defaultMethods, details, { requestShipping: true }); + }, + `Expected TypeError for option.amount.value: "${amount}"` + ); + } +}, `For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value, then throw a TypeError`); + +test(() => { + smokeTest(); + const shippingOptions = [defaultShippingOption]; + const details = Object.assign({}, defaultDetails, { shippingOptions }); + const request = new PaymentRequest(defaultMethods, details); + assert_equals( + request.shippingOption, + null, + "shippingOption must be null, as requestShipping is missing" + ); + // defaultDetails lacks shipping options + const request2 = new PaymentRequest(defaultMethods, defaultDetails, { + requestShipping: true, + }); + assert_equals( + request2.shippingOption, + null, + `request2.shippingOption must be null` + ); +}, "If there is no selected shipping option, then PaymentRequest.shippingOption remains null"); + +test(() => { + smokeTest(); + const selectedOption = Object.assign({}, defaultShippingOption, { + selected: true, + id: "the-id", + }); + const shippingOptions = [selectedOption]; + const details = Object.assign({}, defaultDetails, { shippingOptions }); + const requestNoShippingRequested1 = new PaymentRequest( + defaultMethods, + details + ); + assert_equals( + requestNoShippingRequested1.shippingOption, + null, + "Must be null when no shipping is requested (defaults to false)" + ); + const requestNoShippingRequested2 = new PaymentRequest( + defaultMethods, + details, + { requestShipping: false } + ); + assert_equals( + requestNoShippingRequested2.shippingOption, + null, + "Must be null when requestShipping is false" + ); + const requestWithShipping = new PaymentRequest(defaultMethods, details, { + requestShipping: "truthy value", + }); + assert_equals( + requestWithShipping.shippingOption, + "the-id", + "Selected option must be 'the-id'" + ); +}, "If there is a selected shipping option, and requestShipping is set, then that option becomes synchronously selected"); + +test(() => { + smokeTest(); + const failOption1 = Object.assign({}, defaultShippingOption, { + selected: true, + id: "FAIL1", + }); + const failOption2 = Object.assign({}, defaultShippingOption, { + selected: false, + id: "FAIL2", + }); + const passOption = Object.assign({}, defaultShippingOption, { + selected: true, + id: "the-id", + }); + const shippingOptions = [failOption1, failOption2, passOption]; + const details = Object.assign({}, defaultDetails, { shippingOptions }); + const requestNoShipping = new PaymentRequest(defaultMethods, details, { + requestShipping: false, + }); + assert_equals( + requestNoShipping.shippingOption, + null, + "shippingOption must be null, as requestShipping is false" + ); + const requestWithShipping = new PaymentRequest(defaultMethods, details, { + requestShipping: true, + }); + assert_equals( + requestWithShipping.shippingOption, + "the-id", + "selected option must 'the-id" + ); +}, "If requestShipping is set, and if there is a multiple selected shipping options, only the last is selected."); + +test(() => { + smokeTest(); + const selectedOption = Object.assign({}, defaultShippingOption, { + selected: true, + }); + const unselectedOption = Object.assign({}, defaultShippingOption, { + selected: false, + }); + const shippingOptions = [selectedOption, unselectedOption]; + const details = Object.assign({}, defaultDetails, { shippingOptions }); + const requestNoShipping = new PaymentRequest(defaultMethods, details); + assert_equals( + requestNoShipping.shippingOption, + null, + "shippingOption must be null, because requestShipping is false" + ); + assert_throws_js( + TypeError, + () => { + new PaymentRequest(defaultMethods, details, { requestShipping: true }); + }, + "Expected to throw a TypeError because duplicate IDs" + ); +}, "If there are any duplicate shipping option ids, and shipping is requested, then throw a TypeError"); + +test(() => { + smokeTest(); + const dupShipping1 = Object.assign({}, defaultShippingOption, { + selected: true, + id: "DUPLICATE", + label: "Fail 1", + }); + const dupShipping2 = Object.assign({}, defaultShippingOption, { + selected: false, + id: "DUPLICATE", + label: "Fail 2", + }); + const shippingOptions = [dupShipping1, defaultShippingOption, dupShipping2]; + const details = Object.assign({}, defaultDetails, { shippingOptions }); + const requestNoShipping = new PaymentRequest(defaultMethods, details); + assert_equals( + requestNoShipping.shippingOption, + null, + "shippingOption must be null, because requestShipping is false" + ); + assert_throws_js( + TypeError, + () => { + new PaymentRequest(defaultMethods, details, { requestShipping: true }); + }, + "Expected to throw a TypeError because duplicate IDs" + ); +}, "Throw when there are duplicate shippingOption ids, even if other values are different"); + // Process payment details modifiers: test(() => { smokeTest(); @@ -474,4 +654,44 @@ test(() => { }); }, "Rethrow any exceptions of JSON-serializing modifier.data"); +//Setting ShippingType attribute during construction +test(() => { + smokeTest(); + assert_throws_js(TypeError, () => { + new PaymentRequest(defaultMethods, defaultDetails, { + shippingType: "invalid", + }); + }); +}, "Shipping type should be valid"); + +test(() => { + smokeTest(); + const request = new PaymentRequest(defaultMethods, defaultDetails, {}); + assert_equals(request.shippingAddress, null, "must be null"); +}, "PaymentRequest.shippingAddress must initially be null"); + +test(() => { + smokeTest(); + const request1 = new PaymentRequest(defaultMethods, defaultDetails, {}); + assert_equals(request1.shippingType, null, "must be null"); + const request2 = new PaymentRequest(defaultMethods, defaultDetails, { + requestShipping: false, + }); + assert_equals(request2.shippingType, null, "must be null"); +}, "If options.requestShipping is not set, then request.shippingType attribute is null."); + +test(() => { + smokeTest(); + // option.shippingType defaults to 'shipping' + const request1 = new PaymentRequest(defaultMethods, defaultDetails, { + requestShipping: true, + }); + assert_equals(request1.shippingType, "shipping", "must be shipping"); + const request2 = new PaymentRequest(defaultMethods, defaultDetails, { + requestShipping: true, + shippingType: "delivery", + }); + assert_equals(request2.shippingType, "delivery", "must be delivery"); +}, "If options.requestShipping is true, request.shippingType will be options.shippingType."); + diff --git a/tests/wpt/tests/payment-request/payment-request-ctor-currency-code-checks.https.sub.html b/tests/wpt/tests/payment-request/payment-request-ctor-currency-code-checks.https.sub.html index c608608c7eb..b4ca2a0c40b 100644 --- a/tests/wpt/tests/payment-request/payment-request-ctor-currency-code-checks.https.sub.html +++ b/tests/wpt/tests/payment-request/payment-request-ctor-currency-code-checks.https.sub.html @@ -178,6 +178,63 @@ test(() => { } }, "Check and canonicalize invalid details.displayItems amount and rethrow RangeError."); +// Process shipping options: +test(() => { + assert_throws_js(RANGE_ERROR, smokeTest, "Expected smoke test to throw."); + const shippingOptions = []; + for (const validCurrency of wellFormedCurrencyCodes) { + const shippingOption = { + id: `test` + Math.random(), + label: "shipping option", + amount: { currency: validCurrency, value: "5.00" }, + selected: !shippingOptions.length, + }; + const details = { + total: defaultTotal, + shippingOptions: [shippingOption], + }; + try { + new PaymentRequest(defaultMethods, details, { requestShipping: true }); + } catch (err) { + assert_unreached( + `Unexpected exception with valid shippingOption currency code "${validCurrency}": ${err.message}.` + ); + } + shippingOptions.push(shippingOption); + } + try { + const details = Object.assign({}, defaultDetails, { shippingOptions }); + new PaymentRequest(defaultMethods, details, { requestShipping: true }); + } catch (err) { + assert_unreached( + `Unexpected error with multiple valid shppingOptions: ${err.message}.` + ); + } +}, "Check and canonicalize valid details.shippingOptions amount."); + +test(() => { + assert_throws_js(RANGE_ERROR, smokeTest, "Expected smoke test to throw."); + for (const invalidCurrency of invalidCurrencyCodes) { + const shippingOption = { + id: "test", + label: "shipping option", + amount: { currency: invalidCurrency, value: "5.00" }, + selected: true, + }; + const details = { + total: defaultTotal, + shippingOptions: [shippingOption], + }; + assert_throws_js( + RANGE_ERROR, + () => { + new PaymentRequest(defaultMethods, details, { requestShipping: true }); + }, + `Expected RangeError with invalid shippingOption currency code "${invalidCurrency}".` + ); + } +}, "Check and canonicalize invalid details.shippingOptions amount and rethrow RangeError."); + // Process payment details modifiers: test(() => { assert_throws_js(RANGE_ERROR, smokeTest, "Expected smoke test to throw."); diff --git a/tests/wpt/tests/payment-request/payment-request-onshippingaddresschange-attribute.https.html b/tests/wpt/tests/payment-request/payment-request-onshippingaddresschange-attribute.https.html new file mode 100644 index 00000000000..5b2538992f7 --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-request-onshippingaddresschange-attribute.https.html @@ -0,0 +1,78 @@ + + + +Test for onshippingaddresschange attribute + + + + diff --git a/tests/wpt/tests/payment-request/payment-request-onshippingoptionchange-attribute.https.html b/tests/wpt/tests/payment-request/payment-request-onshippingoptionchange-attribute.https.html new file mode 100644 index 00000000000..43ea5dcce87 --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-request-onshippingoptionchange-attribute.https.html @@ -0,0 +1,79 @@ + + + +Test for onshippingoptionchange attribute + + + + diff --git a/tests/wpt/tests/payment-request/payment-request-shippingAddress-attribute.https.html b/tests/wpt/tests/payment-request/payment-request-shippingAddress-attribute.https.html new file mode 100644 index 00000000000..08918356b6f --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-request-shippingAddress-attribute.https.html @@ -0,0 +1,28 @@ + + + +Test for PaymentRequest shippingAddress attribute + + + + diff --git a/tests/wpt/tests/payment-request/payment-request-shippingOption-attribute.https.html b/tests/wpt/tests/payment-request/payment-request-shippingOption-attribute.https.html new file mode 100644 index 00000000000..b5f9ea65c6c --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-request-shippingOption-attribute.https.html @@ -0,0 +1,100 @@ + + + +Test for PaymentRequest shippingOption attribute + + + + diff --git a/tests/wpt/tests/payment-request/payment-request-shippingType-attribute.https.html b/tests/wpt/tests/payment-request/payment-request-shippingType-attribute.https.html new file mode 100644 index 00000000000..11f75b1c862 --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-request-shippingType-attribute.https.html @@ -0,0 +1,72 @@ + + + +Test for PaymentRequest's shippingType attribute + + + + diff --git a/tests/wpt/tests/payment-request/payment-response/helpers.js b/tests/wpt/tests/payment-request/payment-response/helpers.js index 1242ecb743c..3e4f5cfd36f 100644 --- a/tests/wpt/tests/payment-request/payment-response/helpers.js +++ b/tests/wpt/tests/payment-request/payment-response/helpers.js @@ -65,8 +65,30 @@ async function getPaymentRequestResponse(options, id) { label: "Total due", amount: { currency: "USD", value: "1.0" }, }, + shippingOptions: [ + { + id: "fail1", + label: "Fail option 1", + amount: { currency: "USD", value: "5.00" }, + selected: false, + }, + { + id: "pass", + label: "Pass option", + amount: { currency: "USD", value: "5.00" }, + selected: true, + }, + { + id: "fail2", + label: "Fail option 2", + amount: { currency: "USD", value: "5.00" }, + selected: false, + }, + ], }; const request = new PaymentRequest(methods, details, options); + request.onshippingaddresschange = ev => ev.updateWith(details); + request.onshippingoptionchange = ev => ev.updateWith(details); const response = await request.show(); return { request, response }; } @@ -106,5 +128,23 @@ async function runManualTest(button, options, expected = {}, id = undefined) { assert_equals(typeof response.details, "object", "Expected an object"); // Testing that this does not throw: response.toJSON(); + if (options && options.requestShipping) { + assert_equals( + response.shippingOption, + "pass", + "request.shippingOption must be 'pass'" + ); + } else { + assert_equals( + request.shippingOption, + null, + "If requestShipping is falsy, request.shippingOption must be null" + ); + assert_equals( + response.shippingOption, + null, + "request.shippingOption must be null" + ); + } }, button.textContent.trim()); } diff --git a/tests/wpt/tests/payment-request/payment-response/retry-method-manual.https.html b/tests/wpt/tests/payment-request/payment-response/retry-method-manual.https.html new file mode 100644 index 00000000000..a5aab49e387 --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-response/retry-method-manual.https.html @@ -0,0 +1,296 @@ + + + + + PaymentResponse.prototype.retry() method + + + + + +

+ Manual Tests for PaymentResponse.retry() - Please run in order! +

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When presented with the payment sheet, use any credit card select to "Pay" multiple times. +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
  11. +

    + When shown the payment sheet, hit pay once, then abort retrying the payment. +

    + +
  12. +
  13. +

    + When shown the payment sheet, hit pay once. Check payment sheet for error fields. + Then hit escape or otherwise abort the payment. +

    + +
  14. +
  15. +

    + When shown the payment sheet, hit pay once. + Then, change the shipping option. + Select to pay again. +

    + +
  16. +
  17. +

    + When shown the payment sheet, hit pay once. Then retry once. +

    + +
  18. +
  19. + +
  20. +
+ + If you find a buggy test, please file a bug + and tag one of the owners. + diff --git a/tests/wpt/tests/payment-request/payment-response/retry-method-warnings-manual.https.html b/tests/wpt/tests/payment-request/payment-response/retry-method-warnings-manual.https.html new file mode 100644 index 00000000000..b68bf183097 --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-response/retry-method-warnings-manual.https.html @@ -0,0 +1,158 @@ + +Warn when errorFields don't match request[[options]] + + + + + +

Manual Tests - Please run in order!

+

+ Please open the developer console. Each of the tests below should generate a + warning in the developer console. +

+

When presented with the payment sheet, hit pay twice.

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
  11. + +
  12. +
  13. + +
  14. +
  15. + +
  16. +
  17. + +
  18. +
  19. + +
  20. +
  21. + +
  22. +
  23. + +
  24. +
  25. + +
  26. +
  27. + +
  28. +
  29. + +
  30. +
  31. +
diff --git a/tests/wpt/tests/payment-request/payment-response/shippingAddress-attribute-manual.https.html b/tests/wpt/tests/payment-request/payment-response/shippingAddress-attribute-manual.https.html new file mode 100644 index 00000000000..f9f0a6e4faf --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-response/shippingAddress-attribute-manual.https.html @@ -0,0 +1,101 @@ + + + + + PaymentResponse.prototype.shippingAddress + + + + + +

shippingAddress attribute

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When prompted, please enter "web platform test" as recipient, at address "1 wpt street" in "Kabul, Afghanistan", zip/postal code 1001. +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/payment-response/shippingOption-attribute-manual.https.html b/tests/wpt/tests/payment-request/payment-response/shippingOption-attribute-manual.https.html new file mode 100644 index 00000000000..687d3a52de9 --- /dev/null +++ b/tests/wpt/tests/payment-request/payment-response/shippingOption-attribute-manual.https.html @@ -0,0 +1,43 @@ + + + + + PaymentResponse.prototype.complete() method + + + + +

shippingOption attribute

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ For the last test, please select the only available shipping option and select "Pay". +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/shipping-address-changed-manual.https.html b/tests/wpt/tests/payment-request/shipping-address-changed-manual.https.html new file mode 100644 index 00000000000..aad57cd724c --- /dev/null +++ b/tests/wpt/tests/payment-request/shipping-address-changed-manual.https.html @@ -0,0 +1,99 @@ + + + +Test for PaymentRequest shippingAddress attribute + + + + + + +

PaymentRequest shippingAddress attribute

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When the payment sheet is presented, enter or select a shipping address. +

+
    +
  1. + +
  2. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/show-method-optional-promise-rejects.https.html b/tests/wpt/tests/payment-request/show-method-optional-promise-rejects.https.html index 4a41f28fc9b..3b429655039 100644 --- a/tests/wpt/tests/payment-request/show-method-optional-promise-rejects.https.html +++ b/tests/wpt/tests/payment-request/show-method-optional-promise-rejects.https.html @@ -84,6 +84,10 @@ total: invalidNegativeTotal, }); + // PaymentOptions + const validOptions = Object.freeze({ + requestShipping: true, + }); // PaymentItem const validPaymentItem = Object.freeze({ @@ -100,6 +104,24 @@ const validPaymentItems = Object.freeze([validPaymentItem]); const invalidPaymentItems = Object.freeze([invalidPaymentItem]); + // PaymentShippingOption + const invalidShippingOption = Object.freeze({ + id: "abc", + label: "Invalid shipping option", + amount: invalidAmount, + selected: true, + }); + + // PaymentShippingOptions + const validShippingOption = Object.freeze({ + id: "abc", + label: "valid shipping option", + amount: validAmount, + }); + + const validShippingOptions = Object.freeze([validShippingOption]); + const invalidShippingOptions = Object.freeze([invalidShippingOption]); + // PaymentDetailsModifier const validModifier = Object.freeze({ additionalDisplayItems: validPaymentItems, @@ -144,7 +166,8 @@ promise_test(async (t) => { const request = new PaymentRequest( validMethods, - validDetails + validDetails, + validOptions ); await test_driver.bless("Payment request"); const detailsPromise = Promise.resolve(badDetails); @@ -193,6 +216,21 @@ RangeError ); + testBadUpdate( + "Updating with duplicate shippingOptions (same IDs) results in a TypeError.", + { + ...validDetails, + shippingOptions: [validShippingOption, validShippingOption], + }, + TypeError + ); + + testBadUpdate( + "Updating with a shippingOption with an invalid currency value results in a RangError.", + { ...validDetails, shippingOptions: invalidShippingOptions }, + RangeError + ); + testBadUpdate( "Must throw a RangeError when a modifier's total item has an invalid currency.", { ...validDetails, modifiers: [modifierWithInvalidTotal, validModifier] }, diff --git a/tests/wpt/tests/payment-request/show-method-optional-promise-resolves-manual.https.html b/tests/wpt/tests/payment-request/show-method-optional-promise-resolves-manual.https.html new file mode 100644 index 00000000000..5360a9704af --- /dev/null +++ b/tests/wpt/tests/payment-request/show-method-optional-promise-resolves-manual.https.html @@ -0,0 +1,339 @@ + + +Test for PaymentRequest.show(optional promise) method + + + + +

+ PaymentRequest .show(optional detailsPromise) tests +

+

+ These test cause detailsPromise to resolve successfully with some updated value. As such, that will cause + something in the payment sheet to change. Each test describes what is expected to change - if anything. +

+

+ Instructions: Click on each button in sequence from top to bottom without refreshing the page. The payment + sheet will be shown. If required, confirm that the expected value appears in the payment sheet. Finally, manually abort/cancel + the payment request by closing the payment sheet. +

+
    +
  1. +
  2. +
  3. +
  4. +
  5. +
  6. +
  7. +
  8. +
  9. +
  10. +
  11. +
  12. +
  13. +
  14. + +
  15. +
  16. + +
  17. +
  18. + +
  19. +
  20. + +
  21. +
+ + + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/updateWith-method-pmi-handling-manual.https.html b/tests/wpt/tests/payment-request/updateWith-method-pmi-handling-manual.https.html new file mode 100644 index 00000000000..1a52978ca3e --- /dev/null +++ b/tests/wpt/tests/payment-request/updateWith-method-pmi-handling-manual.https.html @@ -0,0 +1,140 @@ + + +Test for validity of payment method identifiers when calling updateWith() method + + + + +

updateWith() method: test validity of payment method identifiers.

+

+ When shown a payment sheet, select a different address. +

+
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
  7. + +
  8. +
  9. + +
  10. +
  11. + +
  12. +
  13. + +
  14. +
  15. + +
  16. +
  17. + +
  18. +
  19. + +
  20. +
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/payment-request/user-accepts-payment-request-algo-manual.https.html b/tests/wpt/tests/payment-request/user-accepts-payment-request-algo-manual.https.html new file mode 100644 index 00000000000..300f04811fd --- /dev/null +++ b/tests/wpt/tests/payment-request/user-accepts-payment-request-algo-manual.https.html @@ -0,0 +1,230 @@ + + + + + User accepts the payment request algorithm + + + + + +
+

User accepts payment request

+

+ Click on each button in sequence from top to bottom without refreshing the page. + Each button will bring up the Payment Request UI window. +

+

+ When shown the payment sheet, please input a credit card and select Pay. +

+
    +
  1. + Use any credit card to pay. +
  2. +
  3. + Select any shipping option, and use any credit card to pay. +
  4. +
  5. + + When prompted, please use "wpt@w3.org" as the email. +
  6. +
  7. + + When prompted, please use "+12345678910" as the phone number. +
  8. +
  9. + + When prompted, please use "web platform test" as the payer name. +
  10. +
  11. + + When prompted, please use: "+12345678910" as the phone number, "web platform test" as the payer name, and "wpt@w3.org" as the email. Then press Pay. +
  12. +
  13. + +
  14. +
+
+ + If you find a buggy test, please file a bug + and tag one of the suggested reviewers. + diff --git a/tests/wpt/tests/performance-timeline/not-restored-reasons/performance-navigation-timing-cross-origin-bfcache.tentative.window.js b/tests/wpt/tests/performance-timeline/not-restored-reasons/performance-navigation-timing-cross-origin-bfcache.tentative.window.js index 42bda12919d..2a313fe7b14 100644 --- a/tests/wpt/tests/performance-timeline/not-restored-reasons/performance-navigation-timing-cross-origin-bfcache.tentative.window.js +++ b/tests/wpt/tests/performance-timeline/not-restored-reasons/performance-navigation-timing-cross-origin-bfcache.tentative.window.js @@ -53,8 +53,7 @@ promise_test(async t => { 'url': null, 'src': rc1_child_url, 'id': 'test-id', - // Iframes that are generated by addIframe have an empty name. - 'name': '', + 'name': null, 'reasons': null, 'children': null }]); diff --git a/tests/wpt/tests/performance-timeline/not-restored-reasons/performance-navigation-timing-iframes-without-attributes.tentative.window.js b/tests/wpt/tests/performance-timeline/not-restored-reasons/performance-navigation-timing-iframes-without-attributes.tentative.window.js new file mode 100644 index 00000000000..cda0ac43944 --- /dev/null +++ b/tests/wpt/tests/performance-timeline/not-restored-reasons/performance-navigation-timing-iframes-without-attributes.tentative.window.js @@ -0,0 +1,103 @@ +// META: title=RemoteContextHelper navigation using BFCache +// META: script=./test-helper.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=/common/get-host-info.sub.js +// META: script=/common/utils.js +// META: script=/html/browsers/browsing-the-web/back-forward-cache/resources/rc-helper.js +// META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js +// META: script=/websockets/constants.sub.js +// META: timeout=long + +'use strict'; + +// Ensure that empty attributes are reported as empty strings and missing +// attributes are reported as null. +promise_test(async t => { + const rcHelper = new RemoteContextHelper(); + // Open a window with noopener so that BFCache will work. + const rc1 = await rcHelper.addWindow( + /*config=*/ null, /*options=*/ {features: 'noopener'}); + const rc1_url = await rc1.executeScript(() => { + return location.href; + }); + // Add a cross-origin iframe. + const rc1_child = await rc1.addIframe( + /*extraConfig=*/ { + origin: 'HTTP_REMOTE_ORIGIN', + scripts: [], + headers: [], + }, + /*attributes=*/ {id: '', name: ''}, + ); + const rc2_child = await rc1.addIframe( + /*extraConfig=*/ { + origin: 'HTTP_REMOTE_ORIGIN', + scripts: [], + headers: [], + }, + /*attributes=*/ {}, + ); + const rc3_child = await rc1.addIframe( + /*extraConfig=*/ {}, + /*attributes=*/ {}, + ); + const rc4_child = await rc1.addIframe( + /*extraConfig=*/ {}, + /*attributes=*/ {id: '', name: ''}, + ); + // Use WebSocket to block BFCache. + await useWebSocket(rc1); + const rc1_child_url = await rc1_child.executeScript(() => { + return location.href; + }); + const rc2_child_url = await rc2_child.executeScript(() => { + return location.href; + }); + const rc3_child_url = await rc3_child.executeScript(() => { + return location.href; + }); + const rc4_child_url = await rc4_child.executeScript(() => { + return location.href; + }); + // Check the BFCache result and the reported reasons. + await assertBFCacheEligibility(rc1, /*shouldRestoreFromBFCache=*/ false); + await assertNotRestoredReasonsEquals( + rc1, + /*url=*/ rc1_url, + /*src=*/ null, + /*id=*/ null, + /*name=*/ null, + /*reasons=*/[{'reason': 'websocket'}], + /*children=*/[{ + 'url': null, + 'src': rc1_child_url, + // Id and name should be empty. + 'id': '', + 'name': '', + 'reasons': null, + 'children': null + }, { + 'url': null, + 'src': rc2_child_url, + // Id and name should be null. + 'id': null, + 'name': null, + 'reasons': null, + 'children': null + },{ + 'url': rc3_child_url, + 'src': rc3_child_url, + // Id and name should be null. + 'id': null, + 'name': null, + 'reasons': [], + 'children': [] + }, { + 'url': rc4_child_url, + 'src': rc4_child_url, + 'id': '', + 'name': '', + 'reasons': [], + 'children': [] + }]); +}); \ No newline at end of file diff --git a/tests/wpt/tests/performance-timeline/not-restored-reasons/test-helper.js b/tests/wpt/tests/performance-timeline/not-restored-reasons/test-helper.js index 826b0ccb2be..ba9a4c0342f 100644 --- a/tests/wpt/tests/performance-timeline/not-restored-reasons/test-helper.js +++ b/tests/wpt/tests/performance-timeline/not-restored-reasons/test-helper.js @@ -27,9 +27,9 @@ function assertReasonsStructEquals( } else { for (let j = 0; j < children.length; j++) { assertReasonsStructEquals( - result.children[0], children[0].url, - children[0].src, children[0].id, children[0].name, children[0].reasons, - children[0].children); + result.children[j], children[j].url, + children[j].src, children[j].id, children[j].name, children[j].reasons, + children[j].children); } } } diff --git a/tests/wpt/tests/pointerlock/WEB_FEATURES.yml b/tests/wpt/tests/pointerlock/WEB_FEATURES.yml new file mode 100644 index 00000000000..61ab30b26b6 --- /dev/null +++ b/tests/wpt/tests/pointerlock/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: pointer-lock + files: "**" diff --git a/tests/wpt/tests/preload/resources/A4.ogv b/tests/wpt/tests/preload/resources/A4.ogv deleted file mode 100644 index de99616ecebe6107c33156c1c5513ef007b4e63d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94372 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%0A2m7yRqQ_nS@nN}nLUP!`1NpmtZgHEInVp#_ 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 diff --git a/tests/wpt/tests/resource-timing/initiator-type/video.html b/tests/wpt/tests/resource-timing/initiator-type/video.html index 16f3b3dea5f..2d8c9dcc474 100644 --- a/tests/wpt/tests/resource-timing/initiator-type/video.html +++ b/tests/wpt/tests/resource-timing/initiator-type/video.html @@ -19,14 +19,14 @@ src="/resource-timing/resources/empty.py?id=track"> diff --git a/tests/wpt/tests/scroll-animations/WEB_FEATURES.yml b/tests/wpt/tests/scroll-animations/WEB_FEATURES.yml new file mode 100644 index 00000000000..adf4bf2ac17 --- /dev/null +++ b/tests/wpt/tests/scroll-animations/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: scroll-driven-animations + files: "**" diff --git a/tests/wpt/tests/selection/crashtests/selection-modify-line-next-to-input-and-make-it-invisible.html b/tests/wpt/tests/selection/crashtests/selection-modify-line-next-to-input-and-make-it-invisible.html new file mode 100644 index 00000000000..09e018f5819 --- /dev/null +++ b/tests/wpt/tests/selection/crashtests/selection-modify-line-next-to-input-and-make-it-invisible.html @@ -0,0 +1,23 @@ + + + + + + + + +
+ +
+ + diff --git a/tests/wpt/tests/selection/selection-nested-video.html b/tests/wpt/tests/selection/selection-nested-video.html new file mode 100644 index 00000000000..9777d7d9927 --- /dev/null +++ b/tests/wpt/tests/selection/selection-nested-video.html @@ -0,0 +1,25 @@ + + +Selection with nested videos doesn't crash + + + + +
A
+