aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini2
-rw-r--r--tests/wpt/metadata/MANIFEST.json329
-rw-r--r--tests/wpt/metadata/css/css-flexbox/percentage-heights-007.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-fonts/parsing/font-computed.html.ini927
-rw-r--r--tests/wpt/metadata/css/css-fonts/parsing/font-valid.html.ini462
-rw-r--r--tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini2
-rw-r--r--tests/wpt/metadata/css/cssom/font-shorthand-serialization.html.ini4
-rw-r--r--tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini2
-rw-r--r--tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini18
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini14
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini10
-rw-r--r--tests/wpt/metadata/html/semantics/forms/autofocus/skip-not-fully-active.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini7
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html.ini5
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini6
-rw-r--r--tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini4
-rw-r--r--tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html14
-rw-r--r--tests/wpt/web-platform-tests/css/css-color-adjust/parsing/color-scheme-computed.html (renamed from tests/wpt/web-platform-tests/css/css-color-adjust/parsing/color-scheme-computed.tentative.html)0
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-007.html42
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/parsing/font-computed.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/parsing/font-invalid.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/parsing/font-valid.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html75
-rw-r--r--tests/wpt/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-both.html70
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-both.html (renamed from tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas.html)54
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html69
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html69
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-x-axis.html66
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-y-axis.html66
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-020.html30
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/font-shorthand-serialization.html4
-rw-r--r--tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html9
-rw-r--r--tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html203
-rw-r--r--tests/wpt/web-platform-tests/html/dom/elements/global-attributes/dataset-set.html24
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/child-iframe.html18
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/grand-child-autofocus.html18
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/autofocus/same-origin-autofocus.html46
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/autofocus/skip-not-fully-active.html10
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html67
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini5
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/reftest/size.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini1
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini21
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.window.js.ini4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini1
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini14
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini3
-rw-r--r--tests/wpt/web-platform-tests/interfaces/mediacapture-streams.idl15
-rw-r--r--tests/wpt/web-platform-tests/largest-contentful-paint/image-inside-svg.html27
-rw-r--r--tests/wpt/web-platform-tests/largest-contentful-paint/image-not-fully-visible.html53
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-bar-002-ref.html23
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-bar-002.html82
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-default-padding-ref.html19
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-default-padding.html37
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html2
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/cramped-001.html4
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-001.html286
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-002.html146
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/ignored-properties-001.html85
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/not-participating-to-parent-layout.html1
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002.html3
-rw-r--r--tests/wpt/web-platform-tests/mathml/support/mathml-fragments.js23
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/app-supports-shipping-contact-delegation.js44
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual.https.html88
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webxr-test.js56
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/unit/test-return-restrictions.html8
-rw-r--r--tests/wpt/web-platform-tests/resources/testharness.js2
-rw-r--r--tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js8
-rw-r--r--tests/wpt/web-platform-tests/webxr/xrSession_visibilityState.https.html6
-rw-r--r--tests/wpt/web-platform-tests/webxr/xrView_oneframeupdate.https.html14
81 files changed, 3614 insertions, 287 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
index 76b398963ae..a9e46713244 100644
--- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
- expected: FAIL
+ expected: TIMEOUT
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 3ed7c848d7a..5f8b379e0d4 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -14329,6 +14329,12 @@
{}
]
],
+ "payment-handler/supports-shipping-contact-delegation-manual.https.html": [
+ [
+ "payment-handler/supports-shipping-contact-delegation-manual.https.html",
+ {}
+ ]
+ ],
"payment-method-basic-card/empty-data-manual.https.html": [
[
"payment-method-basic-card/empty-data-manual.https.html",
@@ -67515,6 +67521,18 @@
{}
]
],
+ "css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html": [
+ [
+ "css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/normal-flow/dynamic-percentage-height.html": [
[
"css/CSS2/normal-flow/dynamic-percentage-height.html",
@@ -121887,6 +121905,18 @@
{}
]
],
+ "css/css-flexbox/percentage-heights-007.html": [
+ [
+ "css/css-flexbox/percentage-heights-007.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-flexbox/percentage-size-subitems-001.html": [
[
"css/css-flexbox/percentage-size-subitems-001.html",
@@ -205407,6 +205437,18 @@
{}
]
],
+ "mathml/presentation-markup/fractions/frac-bar-002.html": [
+ [
+ "mathml/presentation-markup/fractions/frac-bar-002.html",
+ [
+ [
+ "/mathml/presentation-markup/fractions/frac-bar-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"mathml/presentation-markup/fractions/frac-color-001.html": [
[
"mathml/presentation-markup/fractions/frac-color-001.html",
@@ -205467,6 +205509,18 @@
{}
]
],
+ "mathml/presentation-markup/fractions/frac-default-padding.html": [
+ [
+ "mathml/presentation-markup/fractions/frac-default-padding.html",
+ [
+ [
+ "/mathml/presentation-markup/fractions/frac-default-padding-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"mathml/presentation-markup/fractions/frac-linethickness-001.html": [
[
"mathml/presentation-markup/fractions/frac-linethickness-001.html",
@@ -205700,7 +205754,7 @@
"mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html",
[
[
- "/mathml/presentation-markup/operators/mo-movablelimits-ref.html",
+ "/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow-ref.html",
"=="
]
],
@@ -273900,12 +273954,18 @@
"html/semantics/forms/autofocus/resources/child-autofocus.html": [
[]
],
+ "html/semantics/forms/autofocus/resources/child-iframe.html": [
+ []
+ ],
"html/semantics/forms/autofocus/resources/erase-first.css": [
[]
],
"html/semantics/forms/autofocus/resources/frame-with-autofocus-element.html": [
[]
],
+ "html/semantics/forms/autofocus/resources/grand-child-autofocus.html": [
+ []
+ ],
"html/semantics/forms/autofocus/resources/moving-autofocus-to-parent.html": [
[]
],
@@ -275541,18 +275601,12 @@
"infrastructure/metadata/infrastructure/reftest/reftest_timeout.html.ini": [
[]
],
- "infrastructure/metadata/infrastructure/reftest/size.html.ini": [
- []
- ],
"infrastructure/metadata/infrastructure/server/context.any.js.ini": [
[]
],
"infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini": [
[]
],
- "infrastructure/metadata/infrastructure/server/order-of-metas.window.js.ini": [
- []
- ],
"infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini": [
[]
],
@@ -276264,6 +276318,9 @@
"mathml/presentation-markup/fractions/frac-bar-001-ref.html": [
[]
],
+ "mathml/presentation-markup/fractions/frac-bar-002-ref.html": [
+ []
+ ],
"mathml/presentation-markup/fractions/frac-color-001-notref.html": [
[]
],
@@ -276279,6 +276336,9 @@
"mathml/presentation-markup/fractions/frac-created-dynamically-ref.html": [
[]
],
+ "mathml/presentation-markup/fractions/frac-default-padding-ref.html": [
+ []
+ ],
"mathml/presentation-markup/fractions/frac-linethickness-001-ref.html": [
[]
],
@@ -277788,6 +277848,9 @@
"payment-handler/app-change-payment-method.js": [
[]
],
+ "payment-handler/app-supports-shipping-contact-delegation.js": [
+ []
+ ],
"payment-handler/basic-card.js": [
[]
],
@@ -316235,9 +316298,9 @@
{}
]
],
- "css/css-color-adjust/parsing/color-scheme-computed.tentative.html": [
+ "css/css-color-adjust/parsing/color-scheme-computed.html": [
[
- "css/css-color-adjust/parsing/color-scheme-computed.tentative.html",
+ "css/css-color-adjust/parsing/color-scheme-computed.html",
{}
]
],
@@ -322607,9 +322670,39 @@
{}
]
],
- "css/css-scroll-snap/snap-to-visible-areas.html": [
+ "css/css-scroll-snap/snap-to-visible-areas-both.html": [
+ [
+ "css/css-scroll-snap/snap-to-visible-areas-both.html",
+ {}
+ ]
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-margin-both.html": [
[
- "css/css-scroll-snap/snap-to-visible-areas.html",
+ "css/css-scroll-snap/snap-to-visible-areas-margin-both.html",
+ {}
+ ]
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html": [
+ [
+ "css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html",
+ {}
+ ]
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html": [
+ [
+ "css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html",
+ {}
+ ]
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-x-axis.html": [
+ [
+ "css/css-scroll-snap/snap-to-visible-areas-x-axis.html",
+ {}
+ ]
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-y-axis.html": [
+ [
+ "css/css-scroll-snap/snap-to-visible-areas-y-axis.html",
{}
]
],
@@ -325835,6 +325928,12 @@
{}
]
],
+ "css/css-text/line-breaking/line-breaking-020.html": [
+ [
+ "css/css-text/line-breaking/line-breaking-020.html",
+ {}
+ ]
+ ],
"css/css-text/overflow-wrap/overflow-wrap-anywhere-span-002.html": [
[
"css/css-text/overflow-wrap/overflow-wrap-anywhere-span-002.html",
@@ -358663,6 +358762,14 @@
{}
]
],
+ "html/semantics/forms/autofocus/same-origin-autofocus.html": [
+ [
+ "html/semantics/forms/autofocus/same-origin-autofocus.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"html/semantics/forms/autofocus/skip-another-top-level-browsing-context.html": [
[
"html/semantics/forms/autofocus/skip-another-top-level-browsing-context.html",
@@ -363945,6 +364052,12 @@
{}
]
],
+ "html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html": [
+ [
+ "html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html",
+ {}
+ ]
+ ],
"html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document.close-01.xhtml": [
[
"html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document.close-01.xhtml",
@@ -367018,6 +367131,18 @@
{}
]
],
+ "largest-contentful-paint/image-inside-svg.html": [
+ [
+ "largest-contentful-paint/image-inside-svg.html",
+ {}
+ ]
+ ],
+ "largest-contentful-paint/image-not-fully-visible.html": [
+ [
+ "largest-contentful-paint/image-not-fully-visible.html",
+ {}
+ ]
+ ],
"largest-contentful-paint/image-src-change.html": [
[
"largest-contentful-paint/image-src-change.html",
@@ -367589,6 +367714,18 @@
{}
]
],
+ "mathml/presentation-markup/tables/table-001.html": [
+ [
+ "mathml/presentation-markup/tables/table-001.html",
+ {}
+ ]
+ ],
+ "mathml/presentation-markup/tables/table-002.html": [
+ [
+ "mathml/presentation-markup/tables/table-002.html",
+ {}
+ ]
+ ],
"mathml/presentation-markup/tables/table-axis-height.html": [
[
"mathml/presentation-markup/tables/table-axis-height.html",
@@ -367625,6 +367762,12 @@
{}
]
],
+ "mathml/relations/css-styling/ignored-properties-001.html": [
+ [
+ "mathml/relations/css-styling/ignored-properties-001.html",
+ {}
+ ]
+ ],
"mathml/relations/css-styling/lengths-2.html": [
[
"mathml/relations/css-styling/lengths-2.html",
@@ -513300,6 +513443,10 @@
"b3a7420c630ad4c84e5593ad48f48f3072a88b98",
"visual"
],
+ "css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html": [
+ "6c075f7ac779ef735705aa06e4418a863c2ac1d7",
+ "reftest"
+ ],
"css/CSS2/normal-flow/containing-block-percent-margin-bottom.html": [
"9dfc1963ac8a3bbccdd317e2b21613d08db21452",
"testharness"
@@ -547336,7 +547483,7 @@
"f7f6529349bf1ba0436e2d1165a81552de95ffaa",
"testharness"
],
- "css/css-color-adjust/parsing/color-scheme-computed.tentative.html": [
+ "css/css-color-adjust/parsing/color-scheme-computed.html": [
"80b9803981f7123d22c637ee9056c04ba3108818",
"testharness"
],
@@ -554860,6 +555007,10 @@
"5633dba3bdb63188d5ce10112d22b69bb5eb21a3",
"reftest"
],
+ "css/css-flexbox/percentage-heights-007.html": [
+ "1318933952c99e9bb142f74110cbc388e6dda6c4",
+ "reftest"
+ ],
"css/css-flexbox/percentage-size-subitems-001.html": [
"70f3953052a3a770c6cd15ee169607a00fc452b0",
"reftest"
@@ -556725,7 +556876,7 @@
"testharness"
],
"css/css-fonts/parsing/font-computed.html": [
- "b3f104e62439d48d167559cfd2aeb5e509991f82",
+ "ab2694d211468b62b7d82d8ec353005d058b4f24",
"testharness"
],
"css/css-fonts/parsing/font-family-computed.html": [
@@ -556753,7 +556904,7 @@
"testharness"
],
"css/css-fonts/parsing/font-invalid.html": [
- "d6db9338aa2adf5945fd88e29bdd9376e2efe1d1",
+ "950747580e8bc0fb46c919669977681fe308d805",
"testharness"
],
"css/css-fonts/parsing/font-kerning-computed.html": [
@@ -556829,7 +556980,7 @@
"testharness"
],
"css/css-fonts/parsing/font-valid.html": [
- "769e6b42eae37a864fec6577614917f7b1fd7667",
+ "896be89741bd14acd961398791f62db3ec876c8d",
"testharness"
],
"css/css-fonts/parsing/font-variant-caps-computed.html": [
@@ -572597,7 +572748,7 @@
"testharness"
],
"css/css-position/position-absolute-replaced-minmax.html": [
- "644b147a227e100c500de2de9e4f8e8449a4a21e",
+ "ff6757aeea32a875f0f7a7a7d38cf7da5bc1066c",
"testharness"
],
"css/css-position/position-fixed-at-bottom-right-on-viewport.html": [
@@ -573249,7 +573400,7 @@
"reftest"
],
"css/css-pseudo/first-letter-property-whitelist.html": [
- "e3b3f532fefe0ed88b01e19457a747bd3013ac21",
+ "9ad7b31c3621b3c5fc7a9e2ec0eb35895c9f9eae",
"testharness"
],
"css/css-pseudo/first-letter-width-ref.html": [
@@ -576416,8 +576567,28 @@
"2a4402579cf06ffb2f5611dfd6207fabcb8bdafe",
"testharness"
],
- "css/css-scroll-snap/snap-to-visible-areas.html": [
- "3e822db02e675a3a8799f69f86d2bc93507c7547",
+ "css/css-scroll-snap/snap-to-visible-areas-both.html": [
+ "da10f982f1f2dc3a764291ede3c2f13560e36082",
+ "testharness"
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-margin-both.html": [
+ "f148036a1d5d7165ffc085b2c4f6d49ae64fe9af",
+ "testharness"
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html": [
+ "dea9225a4728e10288d1af607961db855dcff169",
+ "testharness"
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html": [
+ "60c548844500397631cae018b32033ea3cc302ae",
+ "testharness"
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-x-axis.html": [
+ "b8b226f1afecc5f0b9c01ef462fb5267682b739f",
+ "testharness"
+ ],
+ "css/css-scroll-snap/snap-to-visible-areas-y-axis.html": [
+ "80d2e9946de8827d9d53686f6c9b4abea2e27592",
"testharness"
],
"css/css-scroll-snap/support/scroll-target-align-001-iframe.html": [
@@ -583180,6 +583351,10 @@
"e755eff38133b6db65e9902a94047b120cf81dd1",
"reftest"
],
+ "css/css-text/line-breaking/line-breaking-020.html": [
+ "7c8d0f119edb5ef768b37a5a41b8df9bb9e59600",
+ "testharness"
+ ],
"css/css-text/line-breaking/line-breaking-atomic-001.html": [
"e071378c95fd436484a3056ecb2ba6ff35ddbaae",
"reftest"
@@ -606509,7 +606684,7 @@
"testharness"
],
"css/cssom/font-shorthand-serialization.html": [
- "6f6834a7509d0f58d37f40d6a6e45226f2e54092",
+ "29082f83eaf75a0831e5175b8b1217c4ecf4ebcd",
"testharness"
],
"css/cssom/getComputedStyle-detached-subtree.html": [
@@ -608349,7 +608524,7 @@
"testharness"
],
"css/motion/animation/offset-interpolation.html": [
- "0d1ba1c8875ca1d76e52a01a655037cad6f8eff9",
+ "04f4d4b3bd78f95939c34aa098b85a7947d4fcbd",
"testharness"
],
"css/motion/animation/offset-path-interpolation-001.html": [
@@ -622141,7 +622316,7 @@
"testharness"
],
"dom/nodes/aria-element-reflection.tentative.html": [
- "974727f92aa315d727295fcf7b650bc24c507aab",
+ "848828810f160d5ac01f11bf41b27230b9738800",
"testharness"
],
"dom/nodes/attributes.html": [
@@ -633309,7 +633484,7 @@
"testharness"
],
"html/dom/elements/global-attributes/dataset-set.html": [
- "722b17977e412a3c504fe708841ff273cf76e9e0",
+ "dbce5de309a1d0b4c70305b13540851a67c0ce91",
"testharness"
],
"html/dom/elements/global-attributes/dataset.html": [
@@ -643576,6 +643751,10 @@
"afd5601a523ff0a1d60d37b171b2098a38600ace",
"support"
],
+ "html/semantics/forms/autofocus/resources/child-iframe.html": [
+ "2645a180e4866ed9d1f0a107fc912d53b7437247",
+ "support"
+ ],
"html/semantics/forms/autofocus/resources/erase-first.css": [
"bbbcf799393fc047dae6d47836c3696868df8fb7",
"support"
@@ -643584,6 +643763,10 @@
"985cba41494919525031081d236e4409aace453c",
"support"
],
+ "html/semantics/forms/autofocus/resources/grand-child-autofocus.html": [
+ "88be6e0b04a99b8477925107e1f534024f021b5e",
+ "support"
+ ],
"html/semantics/forms/autofocus/resources/moving-autofocus-to-parent.html": [
"fc6c298a46e376cf45089f168cf841cab59ffd5c",
"support"
@@ -643592,6 +643775,10 @@
"0eeb5a9f0adf1d09959227241cd71fe32ebb485c",
"support"
],
+ "html/semantics/forms/autofocus/same-origin-autofocus.html": [
+ "9cfcdb925cf16cc883ac37f126dc40673066a8b0",
+ "testharness"
+ ],
"html/semantics/forms/autofocus/skip-another-top-level-browsing-context.html": [
"d392b903f075276a03189207e57d789608523de1",
"testharness"
@@ -643605,7 +643792,7 @@
"testharness"
],
"html/semantics/forms/autofocus/skip-not-fully-active.html": [
- "32008b3019e905488c35ea432de396a2641cb61a",
+ "104dd5a4a5e371bf5002c7435e718d8e032fff5a",
"testharness"
],
"html/semantics/forms/autofocus/spin-by-blocking-style-sheet.html": [
@@ -648488,6 +648675,10 @@
"c522afdd56c7ca0ef16094b9bd98c6bda5becefe",
"testharness"
],
+ "html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html": [
+ "1584ca5f97279f157dce9ba1c89cc342f3a427a5",
+ "testharness"
+ ],
"html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document.close-01.xhtml": [
"cccc26bf17e3afe04cdad59cf2cf325ead1fb581",
"testharness"
@@ -650421,7 +650612,7 @@
"testharness"
],
"infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini": [
- "f9be6a64bdfd7ca033fda2a9cd1bdb105836df20",
+ "c9fbabede6d695cd3795e4390b35da0454ffcc34",
"support"
],
"infrastructure/metadata/infrastructure/assumptions/document-fonts-ready.html.ini": [
@@ -650429,7 +650620,7 @@
"support"
],
"infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini": [
- "4be883a5cf7ab6869e2e9235acca37549a9045b8",
+ "67caa470342db6d2b46dab28464f2491f84dd7b2",
"support"
],
"infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini": [
@@ -650492,28 +650683,20 @@
"0d1b9bade95d7b101c8dbf51547ffbaec2260c27",
"support"
],
- "infrastructure/metadata/infrastructure/reftest/size.html.ini": [
- "1c6cd9eff891b315fcbe4bfcded859259d50e509",
- "support"
- ],
"infrastructure/metadata/infrastructure/server/context.any.js.ini": [
- "9667d4d251e8b1915ae2c979766343babd3a0235",
+ "c3431d687b60aa1a07d9a4307ccfd4a2253ee162",
"support"
],
"infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini": [
- "a62ae82b9bec778832cea5e3a95ea069b11b49fc",
- "support"
- ],
- "infrastructure/metadata/infrastructure/server/order-of-metas.window.js.ini": [
- "20e4cbad939b92111c17bdf0d5fdb58d379cf8df",
+ "8db9536e38cc880865c374f3743d7df9f727a530",
"support"
],
"infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini": [
- "0a602b9ae264d92c75a06e79085c20faf4a65e5d",
+ "5f5ed991cf1b04da84e89d7eae2e0d80b9fd2841",
"support"
],
"infrastructure/metadata/infrastructure/server/title.any.js.ini": [
- "6f7fed9dc062dbde3d73ea233f18f0f56d8e056c",
+ "e2a7b5578c3b0dec13206ec60da2a5c018c23eb1",
"support"
],
"infrastructure/metadata/infrastructure/server/wpt-server-http.sub.html.ini": [
@@ -650549,7 +650732,7 @@
"support"
],
"infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini": [
- "a39640b714b838a391f227ac58278ba991fbce66",
+ "e2bfbf8fb8fb71003bd06a8356fec3a074395040",
"support"
],
"infrastructure/metadata/infrastructure/testdriver/generate_test_report.html.ini": [
@@ -651153,7 +651336,7 @@
"support"
],
"interfaces/mediacapture-streams.idl": [
- "d83777c5d293d04931e1d3ff9611a183e74bd142",
+ "e82bf36f3d79028dd21ff225c5ee46c9e1578b0a",
"support"
],
"interfaces/mediasession.idl": [
@@ -651928,6 +652111,14 @@
"41c8c748619aea00c2afe67dd5983ab7601121b0",
"testharness"
],
+ "largest-contentful-paint/image-inside-svg.html": [
+ "5fff9e47f6424284fd707e276a68fa1f302d781c",
+ "testharness"
+ ],
+ "largest-contentful-paint/image-not-fully-visible.html": [
+ "cec488c1c899d3d8b7ad9fbd306ec6cd92ecc416",
+ "testharness"
+ ],
"largest-contentful-paint/image-src-change.html": [
"5ec860fa06f3281fd421912298e7b2c93dae19bb",
"testharness"
@@ -652364,6 +652555,14 @@
"9fc441230588216f5f5b20eab36b465c48cbb41b",
"reftest"
],
+ "mathml/presentation-markup/fractions/frac-bar-002-ref.html": [
+ "9d5eef896ab6cab04be090ce970cb7d2347a9fca",
+ "support"
+ ],
+ "mathml/presentation-markup/fractions/frac-bar-002.html": [
+ "ccf1bd904e77bf04c71fcab760a708f5aaaeed04",
+ "reftest"
+ ],
"mathml/presentation-markup/fractions/frac-color-001-notref.html": [
"498d6277a3258c70882e7b2ec92e82e974bf9ab0",
"support"
@@ -652404,6 +652603,14 @@
"b74338a8804ed4e71c99675035fa070159185905",
"reftest"
],
+ "mathml/presentation-markup/fractions/frac-default-padding-ref.html": [
+ "93d3e0162b6b634e012ac07915577bef38d46acb",
+ "support"
+ ],
+ "mathml/presentation-markup/fractions/frac-default-padding.html": [
+ "b68bb873ced58ee1b4a349400b4e7520e5631d7d",
+ "reftest"
+ ],
"mathml/presentation-markup/fractions/frac-linethickness-001-ref.html": [
"d4be8ea03bfc29506af0e26a3d94d5eeafaaf472",
"support"
@@ -652593,7 +652800,7 @@
"support"
],
"mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html": [
- "b36894e98f67929846224aaa56e9243fe1fc8646",
+ "d50cac50de3700a54df2df480f412cc269104efc",
"reftest"
],
"mathml/presentation-markup/operators/mo-movablelimits-ref.html": [
@@ -652625,7 +652832,7 @@
"testharness"
],
"mathml/presentation-markup/scripts/cramped-001.html": [
- "2be1c8ad2e8c17b3fcc0f857567fc7c18f040c16",
+ "d0e636c022ecae289a07533bd45aecb4ef89541f",
"testharness"
],
"mathml/presentation-markup/scripts/subsup-1.html": [
@@ -652712,6 +652919,14 @@
"2ad6b0b772c39cad147604523409d85bee999564",
"testharness"
],
+ "mathml/presentation-markup/tables/table-001.html": [
+ "f967f62a22b2c731b0ad83ded970165539391abe",
+ "testharness"
+ ],
+ "mathml/presentation-markup/tables/table-002.html": [
+ "f207bc03f5db20614d0e06b454fb9745290da558",
+ "testharness"
+ ],
"mathml/presentation-markup/tables/table-axis-height.html": [
"f9354266a7c6c42a75519e9771eb2c61536ad8e5",
"testharness"
@@ -652824,6 +653039,10 @@
"d28f66c3d5f628dd6b3150251c818a3c7d11df8f",
"reftest"
],
+ "mathml/relations/css-styling/ignored-properties-001.html": [
+ "7500c73a3f155022231200484229bf1457464798",
+ "testharness"
+ ],
"mathml/relations/css-styling/lengths-1-ref.html": [
"9fca6f49632ca080ee1b2a32a9ce2d251241dfcc",
"support"
@@ -653077,7 +653296,7 @@
"reftest"
],
"mathml/relations/css-styling/not-participating-to-parent-layout.html": [
- "1caebf1e630de2fdc9c879aa76e0a4c666fbe841",
+ "6445cde9ac1697ac7316c2baed7981f9b96de93b",
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/border-001.html": [
@@ -653101,7 +653320,7 @@
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/padding-002.html": [
- "565dfc43b566b0a3c019437111ce21db7885c426",
+ "5bf9b6aec417a403e81401ec8163f2b234fde416",
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/padding-border-margin-001-ref.html": [
@@ -653333,7 +653552,7 @@
"support"
],
"mathml/support/mathml-fragments.js": [
- "7c7b003e9e683a2770520eeb82a42a0dd1307c9f",
+ "8376ccf375def30bec02e4226ea189140efcbe65",
"support"
],
"mathml/tools/axisheight.py": [
@@ -664408,6 +664627,10 @@
"0e5a4768e7626f666077e794e0731c9a1e3e9d35",
"support"
],
+ "payment-handler/app-supports-shipping-contact-delegation.js": [
+ "770e2de64f13eeef8a1ee21783c2997facc8ff0b",
+ "support"
+ ],
"payment-handler/basic-card.js": [
"2db5d4b719fac4dbcfa65f4166c16a5b8d253097",
"support"
@@ -664484,6 +664707,10 @@
"b9a9dd82d247a80b00e4bc033eeea134d5f900c1",
"testharness"
],
+ "payment-handler/supports-shipping-contact-delegation-manual.https.html": [
+ "75b3668981c900ecced0b1ffdd40a95f15125003",
+ "manual"
+ ],
"payment-handler/untrusted-event.https.html": [
"900ac79d0d21f698707f6efe13a07dd234ed1a30",
"testharness"
@@ -677545,7 +677772,7 @@
"support"
],
"resources/chromium/webxr-test.js": [
- "894e2a24f653e150b738fc576135ed4871a3a644",
+ "eae4d64b446ecc53ac1ed5210b8ce2c783d08f9e",
"support"
],
"resources/chromium/webxr-test.js.headers": [
@@ -677873,7 +678100,7 @@
"support"
],
"resources/test/tests/unit/test-return-restrictions.html": [
- "8472ba9c9ed3f0baed605813fad1717769875759",
+ "b846d4dc4300a990edf7a905f301dcaf75bee18c",
"support"
],
"resources/test/tests/unit/unpaired-surrogates.html": [
@@ -677917,7 +678144,7 @@
"support"
],
"resources/testharness.js": [
- "21d5fcc9417f3324617516402afeb45878acd9cf",
+ "15591042aa4cb0fdd75fe3bf56b9bdfb63fd161d",
"support"
],
"resources/testharness.js.headers": [
@@ -705289,7 +705516,7 @@
"support"
],
"webxr/resources/webxr_test_constants.js": [
- "e0330b80f53398a9ac0cff9edee7b82cc560a8b5",
+ "dc60f6739d417448c252a93de0f1f61c063e5a35",
"support"
],
"webxr/resources/webxr_util.js": [
@@ -705489,7 +705716,7 @@
"testharness"
],
"webxr/xrSession_visibilityState.https.html": [
- "ebad10095e665cceee34d28004ebf25e06687eeb",
+ "e7a6041036f9d7c06133c602c976a87c8868dc3e",
"testharness"
],
"webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html": [
@@ -705505,7 +705732,7 @@
"testharness"
],
"webxr/xrView_oneframeupdate.https.html": [
- "4386433788c55dd13bc9a663b6796530e4852368",
+ "8edb2c0b265f18479644f312f91478d6029e3cd5",
"testharness"
],
"webxr/xrView_sameObject.https.html": [
diff --git a/tests/wpt/metadata/css/css-flexbox/percentage-heights-007.html.ini b/tests/wpt/metadata/css/css-flexbox/percentage-heights-007.html.ini
new file mode 100644
index 00000000000..79181470f1c
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/percentage-heights-007.html.ini
@@ -0,0 +1,2 @@
+[percentage-heights-007.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/parsing/font-computed.html.ini b/tests/wpt/metadata/css/css-fonts/parsing/font-computed.html.ini
index 6da0037cc4e..4d97e8212a8 100644
--- a/tests/wpt/metadata/css/css-fonts/parsing/font-computed.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/parsing/font-computed.html.ini
@@ -944,3 +944,930 @@
[Property font value 'italic 100 normal small-caps 20%/1.2 sans-serif' computes to ['italic small-caps 100 normal 8px/1.2 sans-serif' or 'italic small-caps 100 normal 8px / 1.2 sans-serif'\]]
expected: FAIL
+ [Property font value 'normal normal small-caps 20%/1.2 serif' computes to 'small-caps 8px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'italic normal expanded small-caps 20%/1.2 "Non-Generic Example Family Name"' computes to 'italic small-caps expanded 8px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal italic normal 900 medium/normal Menu' computes to 'italic 900 16px Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps lighter semi-condensed normal xx-small fantasy' computes to 'small-caps 700 semi-condensed 9.6px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic semi-condensed bold small-caps xx-small Menu' computes to 'italic small-caps 700 semi-condensed 9.6px Menu']
+ expected: FAIL
+
+ [Property font value 'italic normal bold xx-small serif' computes to 'italic 700 9.6px serif']
+ expected: FAIL
+
+ [Property font value 'extra-expanded normal italic lighter larger/calc(120% + 1.2em) sans-serif' computes to 'italic 700 extra-expanded 48px / 115.2px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal semi-condensed small-caps 100 xx-small Menu' computes to 'small-caps 100 semi-condensed 9.6px Menu']
+ expected: FAIL
+
+ [Property font value 'italic normal small-caps extra-condensed calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'italic small-caps extra-condensed 0px / 0px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'xx-small serif' computes to '9.6px serif']
+ expected: FAIL
+
+ [Property font value 'italic normal normal calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to 'italic 0px / 0px Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps bold normal normal medium/normal fantasy' computes to 'small-caps 700 16px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic condensed 900 normal calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to 'italic 900 condensed 0px / 0px monospace']
+ expected: FAIL
+
+ [Property font value 'normal small-caps extra-expanded lighter xx-small sans-serif' computes to 'small-caps 700 extra-expanded 9.6px sans-serif']
+ expected: FAIL
+
+ [Property font value 'semi-expanded italic small-caps medium/normal sans-serif' computes to 'italic small-caps semi-expanded 16px sans-serif']
+ expected: FAIL
+
+ [Property font value 'bolder normal expanded italic 20%/1.2 Menu' computes to 'italic 900 expanded 8px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'ultra-condensed italic normal 10px/normal monospace' computes to 'italic ultra-condensed 10px monospace']
+ expected: FAIL
+
+ [Property font value 'normal small-caps semi-expanded normal 20%/1.2 "Non-Generic Example Family Name"' computes to 'small-caps semi-expanded 8px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'italic semi-condensed normal normal xx-small monospace' computes to 'italic semi-condensed 9.6px monospace']
+ expected: FAIL
+
+ [Property font value 'extra-expanded normal normal larger/calc(120% + 1.2em) serif' computes to 'extra-expanded 48px / 115.2px serif']
+ expected: FAIL
+
+ [Property font value 'lighter ultra-condensed italic small-caps 10px/normal sans-serif' computes to 'italic small-caps 700 ultra-condensed 10px sans-serif']
+ expected: FAIL
+
+ [Property font value 'small-caps normal extra-condensed italic xx-large/1.2 cursive' computes to 'italic small-caps extra-condensed 32px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'extra-expanded 900 normal larger/calc(120% + 1.2em) Menu' computes to '900 extra-expanded 48px / 115.2px Menu']
+ expected: FAIL
+
+ [Property font value 'italic small-caps bolder 10px/normal "Non-Generic Example Family Name"' computes to 'italic small-caps 900 10px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value '900 normal normal small-caps xx-large/1.2 serif' computes to 'small-caps 900 32px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'bolder small-caps italic expanded xx-large/1.2 monospace' computes to 'italic small-caps 900 expanded 32px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'bolder ultra-expanded italic normal smaller serif' computes to 'italic 900 ultra-expanded 33.3333px serif']
+ expected: FAIL
+
+ [Property font value '100 italic xx-small serif' computes to 'italic 100 9.6px serif']
+ expected: FAIL
+
+ [Property font value 'small-caps normal normal bolder 20%/1.2 monospace' computes to 'small-caps 900 8px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'small-caps italic normal semi-condensed xx-small sans-serif' computes to 'italic small-caps semi-condensed 9.6px sans-serif']
+ expected: FAIL
+
+ [Property font value 'condensed small-caps calc(30% - 40px)/calc(120% + 1.2em) serif' computes to 'small-caps condensed 0px / 0px serif']
+ expected: FAIL
+
+ [Property font value 'bold italic small-caps ultra-condensed calc(30% - 40px)/calc(120% + 1.2em) serif' computes to 'italic small-caps 700 ultra-condensed 0px / 0px serif']
+ expected: FAIL
+
+ [Property font value 'ultra-expanded italic smaller fantasy' computes to 'italic ultra-expanded 33.3333px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic small-caps semi-condensed 900 xx-large/1.2 monospace' computes to 'italic small-caps 900 semi-condensed 32px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'normal italic normal normal calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to 'italic 0px / 0px fantasy']
+ expected: FAIL
+
+ [Property font value 'small-caps extra-expanded lighter normal larger/calc(120% + 1.2em) serif' computes to 'small-caps 700 extra-expanded 48px / 115.2px serif']
+ expected: FAIL
+
+ [Property font value 'italic extra-condensed 20%/1.2 cursive' computes to 'italic extra-condensed 8px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'normal normal small-caps condensed xx-large/1.2 monospace' computes to 'small-caps condensed 32px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'extra-condensed normal small-caps italic 20%/1.2 monospace' computes to 'italic small-caps extra-condensed 8px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'condensed italic normal small-caps calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'italic small-caps condensed 0px / 0px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'lighter normal small-caps italic xx-large/1.2 sans-serif' computes to 'italic small-caps 700 32px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal small-caps italic lighter calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'italic small-caps 700 0px / 0px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal condensed small-caps italic calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to 'italic small-caps condensed 0px / 0px monospace']
+ expected: FAIL
+
+ [Property font value 'normal normal normal bold calc(30% - 40px)/calc(120% + 1.2em) serif' computes to '700 0px / 0px serif']
+ expected: FAIL
+
+ [Property font value 'expanded 100 xx-large/1.2 monospace' computes to '100 expanded 32px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'italic ultra-expanded small-caps normal smaller sans-serif' computes to 'italic small-caps ultra-expanded 33.3333px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal extra-expanded bolder italic larger/calc(120% + 1.2em) sans-serif' computes to 'italic 900 extra-expanded 48px / 115.2px sans-serif']
+ expected: FAIL
+
+ [Property font value 'small-caps 900 normal xx-small cursive' computes to 'small-caps 900 9.6px cursive']
+ expected: FAIL
+
+ [Property font value 'small-caps medium/normal "Non-Generic Example Family Name"' computes to 'small-caps 16px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'bold normal semi-expanded normal 10px/normal monospace' computes to '700 semi-expanded 10px monospace']
+ expected: FAIL
+
+ [Property font value 'italic bolder small-caps normal medium/normal monospace' computes to 'italic small-caps 900 16px monospace']
+ expected: FAIL
+
+ [Property font value 'small-caps normal xx-large/1.2 serif' computes to 'small-caps 32px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'small-caps normal condensed lighter larger/calc(120% + 1.2em) fantasy' computes to 'small-caps 700 condensed 48px / 115.2px fantasy']
+ expected: FAIL
+
+ [Property font value 'small-caps italic expanded smaller Menu' computes to 'italic small-caps expanded 33.3333px Menu']
+ expected: FAIL
+
+ [Property font value '100 extra-condensed small-caps 20%/1.2 cursive' computes to 'small-caps 100 extra-condensed 8px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value '100 italic small-caps 10px/normal Menu' computes to 'italic small-caps 100 10px Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps italic normal normal 20%/1.2 "Non-Generic Example Family Name"' computes to 'italic small-caps 8px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'condensed normal small-caps 100 calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to 'small-caps 100 condensed 0px / 0px Menu']
+ expected: FAIL
+
+ [Property font value 'italic small-caps normal normal xx-large/1.2 fantasy' computes to 'italic small-caps 32px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'semi-condensed normal 900 xx-small "Non-Generic Example Family Name"' computes to '900 semi-condensed 9.6px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal normal italic small-caps larger/calc(120% + 1.2em) monospace' computes to 'italic small-caps 48px / 115.2px monospace']
+ expected: FAIL
+
+ [Property font value '900 small-caps ultra-condensed italic 10px/normal serif' computes to 'italic small-caps 900 ultra-condensed 10px serif']
+ expected: FAIL
+
+ [Property font value 'normal condensed normal small-caps calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to 'small-caps condensed 0px / 0px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic bold larger/calc(120% + 1.2em) Menu' computes to 'italic 700 48px / 115.2px Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps italic bold normal xx-large/1.2 fantasy' computes to 'italic small-caps 700 32px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'small-caps condensed italic calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to 'italic small-caps condensed 0px / 0px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic 100 normal small-caps 20%/1.2 sans-serif' computes to 'italic small-caps 100 8px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'italic semi-expanded normal small-caps medium/normal Menu' computes to 'italic small-caps semi-expanded 16px Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps ultra-expanded 100 italic smaller sans-serif' computes to 'italic small-caps 100 ultra-expanded 33.3333px sans-serif']
+ expected: FAIL
+
+ [Property font value 'small-caps extra-condensed normal 900 20%/1.2 cursive' computes to 'small-caps 900 extra-condensed 8px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'small-caps expanded xx-large/1.2 Menu' computes to 'small-caps expanded 32px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'bolder small-caps normal normal 10px/normal "Non-Generic Example Family Name"' computes to 'small-caps 900 10px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'small-caps normal normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to 'small-caps semi-expanded 0px / 0px Menu']
+ expected: FAIL
+
+ [Property font value 'italic normal small-caps normal 10px/normal monospace' computes to 'italic small-caps 10px monospace']
+ expected: FAIL
+
+ [Property font value 'lighter normal extra-expanded small-caps calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'small-caps 700 extra-expanded 0px / 0px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'small-caps normal italic xx-small "Non-Generic Example Family Name"' computes to 'italic small-caps 9.6px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'italic 10px/normal fantasy' computes to 'italic 10px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal ultra-expanded lighter small-caps smaller cursive' computes to 'small-caps 700 ultra-expanded 33.3333px cursive']
+ expected: FAIL
+
+ [Property font value 'normal normal italic normal xx-large/1.2 fantasy' computes to 'italic 32px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'normal normal normal larger/calc(120% + 1.2em) fantasy' computes to '48px / 115.2px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal small-caps italic 10px/normal monospace' computes to 'italic small-caps 10px monospace']
+ expected: FAIL
+
+ [Property font value 'normal normal small-caps italic xx-small cursive' computes to 'italic small-caps 9.6px cursive']
+ expected: FAIL
+
+ [Property font value 'normal 900 small-caps normal smaller "Non-Generic Example Family Name"' computes to 'small-caps 900 33.3333px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'small-caps ultra-condensed normal italic 10px/normal sans-serif' computes to 'italic small-caps ultra-condensed 10px sans-serif']
+ expected: FAIL
+
+ [Property font value 'italic condensed normal calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to 'italic condensed 0px / 0px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal small-caps 900 normal xx-large/1.2 cursive' computes to 'small-caps 900 32px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'italic extra-expanded small-caps larger/calc(120% + 1.2em) serif' computes to 'italic small-caps extra-expanded 48px / 115.2px serif']
+ expected: FAIL
+
+ [Property font value 'extra-condensed lighter normal small-caps 20%/1.2 sans-serif' computes to 'small-caps 700 extra-condensed 8px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal small-caps calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to 'small-caps 0px / 0px Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps 100 calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to 'small-caps 100 0px / 0px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal normal xx-large/1.2 cursive' computes to '32px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'semi-condensed normal italic xx-small Menu' computes to 'italic semi-condensed 9.6px Menu']
+ expected: FAIL
+
+ [Property font value 'normal normal normal small-caps 20%/1.2 "Non-Generic Example Family Name"' computes to 'small-caps 8px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal normal 900 normal smaller "Non-Generic Example Family Name"' computes to '900 33.3333px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal lighter condensed calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to '700 condensed 0px / 0px cursive']
+ expected: FAIL
+
+ [Property font value 'normal italic extra-expanded small-caps 10px/normal fantasy' computes to 'italic small-caps extra-expanded 10px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal bolder small-caps extra-condensed 20%/1.2 sans-serif' computes to 'small-caps 900 extra-condensed 8px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'small-caps italic 900 medium/normal cursive' computes to 'italic small-caps 900 16px cursive']
+ expected: FAIL
+
+ [Property font value 'bolder normal italic smaller cursive' computes to 'italic 900 33.3333px cursive']
+ expected: FAIL
+
+ [Property font value 'semi-expanded medium/normal Menu' computes to 'semi-expanded 16px Menu']
+ expected: FAIL
+
+ [Property font value 'semi-condensed 900 italic normal xx-small fantasy' computes to 'italic 900 semi-condensed 9.6px fantasy']
+ expected: FAIL
+
+ [Property font value 'bolder condensed normal calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to '900 condensed 0px / 0px cursive']
+ expected: FAIL
+
+ [Property font value 'expanded bolder small-caps xx-large/1.2 Menu' computes to 'small-caps 900 expanded 32px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'semi-condensed italic normal 100 xx-small serif' computes to 'italic 100 semi-condensed 9.6px serif']
+ expected: FAIL
+
+ [Property font value '900 small-caps larger/calc(120% + 1.2em) monospace' computes to 'small-caps 900 48px / 115.2px monospace']
+ expected: FAIL
+
+ [Property font value 'small-caps semi-expanded italic bold medium/normal Menu' computes to 'italic small-caps 700 semi-expanded 16px Menu']
+ expected: FAIL
+
+ [Property font value 'expanded normal italic small-caps xx-large/1.2 serif' computes to 'italic small-caps expanded 32px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'normal italic small-caps bold 10px/normal cursive' computes to 'italic small-caps 700 10px cursive']
+ expected: FAIL
+
+ [Property font value 'normal ultra-condensed small-caps 10px/normal cursive' computes to 'small-caps ultra-condensed 10px cursive']
+ expected: FAIL
+
+ [Property font value 'normal italic ultra-expanded bold 20%/1.2 monospace' computes to 'italic 700 ultra-expanded 8px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'italic normal lighter small-caps xx-large/1.2 cursive' computes to 'italic small-caps 700 32px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value '900 expanded normal small-caps xx-large/1.2 Menu' computes to 'small-caps 900 expanded 32px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps normal 100 smaller fantasy' computes to 'small-caps 100 33.3333px fantasy']
+ expected: FAIL
+
+ [Property font value '100 normal small-caps condensed larger/calc(120% + 1.2em) cursive' computes to 'small-caps 100 condensed 48px / 115.2px cursive']
+ expected: FAIL
+
+ [Property font value 'normal 100 small-caps larger/calc(120% + 1.2em) Menu' computes to 'small-caps 100 48px / 115.2px Menu']
+ expected: FAIL
+
+ [Property font value 'normal lighter normal small-caps 10px/normal "Non-Generic Example Family Name"' computes to 'small-caps 700 10px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'italic normal semi-expanded normal 10px/normal Menu' computes to 'italic semi-expanded 10px Menu']
+ expected: FAIL
+
+ [Property font value '100 small-caps ultra-expanded normal smaller "Non-Generic Example Family Name"' computes to 'small-caps 100 ultra-expanded 33.3333px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'extra-condensed normal normal small-caps 20%/1.2 fantasy' computes to 'small-caps extra-condensed 8px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'small-caps normal ultra-expanded xx-small serif' computes to 'small-caps ultra-expanded 9.6px serif']
+ expected: FAIL
+
+ [Property font value 'normal normal bolder small-caps 20%/1.2 sans-serif' computes to 'small-caps 900 8px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal small-caps bold italic larger/calc(120% + 1.2em) fantasy' computes to 'italic small-caps 700 48px / 115.2px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic normal normal ultra-condensed larger/calc(120% + 1.2em) cursive' computes to 'italic ultra-condensed 48px / 115.2px cursive']
+ expected: FAIL
+
+ [Property font value 'semi-expanded small-caps normal normal medium/normal cursive' computes to 'small-caps semi-expanded 16px cursive']
+ expected: FAIL
+
+ [Property font value 'italic normal normal small-caps medium/normal serif' computes to 'italic small-caps 16px serif']
+ expected: FAIL
+
+ [Property font value 'normal small-caps normal bolder larger/calc(120% + 1.2em) cursive' computes to 'small-caps 900 48px / 115.2px cursive']
+ expected: FAIL
+
+ [Property font value 'normal italic bolder calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to 'italic 900 0px / 0px monospace']
+ expected: FAIL
+
+ [Property font value 'italic normal semi-condensed smaller monospace' computes to 'italic semi-condensed 33.3333px monospace']
+ expected: FAIL
+
+ [Property font value 'italic bold ultra-condensed small-caps 10px/normal sans-serif' computes to 'italic small-caps 700 ultra-condensed 10px sans-serif']
+ expected: FAIL
+
+ [Property font value 'ultra-expanded bold normal normal smaller "Non-Generic Example Family Name"' computes to '700 ultra-expanded 33.3333px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'ultra-expanded small-caps italic smaller Menu' computes to 'italic small-caps ultra-expanded 33.3333px Menu']
+ expected: FAIL
+
+ [Property font value 'expanded normal xx-large/1.2 "Non-Generic Example Family Name"' computes to 'expanded 32px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'ultra-condensed small-caps italic normal 10px/normal "Non-Generic Example Family Name"' computes to 'italic small-caps ultra-condensed 10px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'italic normal 100 condensed larger/calc(120% + 1.2em) fantasy' computes to 'italic 100 condensed 48px / 115.2px fantasy']
+ expected: FAIL
+
+ [Property font value 'small-caps semi-condensed italic normal xx-small monospace' computes to 'italic small-caps semi-condensed 9.6px monospace']
+ expected: FAIL
+
+ [Property font value 'italic small-caps normal ultra-expanded smaller Menu' computes to 'italic small-caps ultra-expanded 33.3333px Menu']
+ expected: FAIL
+
+ [Property font value '900 italic normal medium/normal sans-serif' computes to 'italic 900 16px sans-serif']
+ expected: FAIL
+
+ [Property font value 'italic normal normal 100 xx-large/1.2 sans-serif' computes to 'italic 100 32px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value '900 small-caps italic xx-small cursive' computes to 'italic small-caps 900 9.6px cursive']
+ expected: FAIL
+
+ [Property font value 'ultra-condensed bolder normal italic 10px/normal serif' computes to 'italic 900 ultra-condensed 10px serif']
+ expected: FAIL
+
+ [Property font value 'condensed 100 italic calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to 'italic 100 condensed 0px / 0px cursive']
+ expected: FAIL
+
+ [Property font value 'semi-expanded small-caps lighter italic medium/normal fantasy' computes to 'italic small-caps 700 semi-expanded 16px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal ultra-condensed normal normal 10px/normal sans-serif' computes to 'ultra-condensed 10px sans-serif']
+ expected: FAIL
+
+ [Property font value 'bold extra-expanded italic larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'italic 700 extra-expanded 48px / 115.2px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal semi-expanded italic medium/normal Menu' computes to 'italic semi-expanded 16px Menu']
+ expected: FAIL
+
+ [Property font value 'italic normal extra-expanded 900 calc(30% - 40px)/calc(120% + 1.2em) serif' computes to 'italic 900 extra-expanded 0px / 0px serif']
+ expected: FAIL
+
+ [Property font value 'lighter small-caps extra-expanded larger/calc(120% + 1.2em) Menu' computes to 'small-caps 700 extra-expanded 48px / 115.2px Menu']
+ expected: FAIL
+
+ [Property font value 'italic small-caps xx-small sans-serif' computes to 'italic small-caps 9.6px sans-serif']
+ expected: FAIL
+
+ [Property font value 'small-caps normal ultra-condensed normal medium/normal sans-serif' computes to 'small-caps ultra-condensed 16px sans-serif']
+ expected: FAIL
+
+ [Property font value 'semi-expanded normal italic normal medium/normal "Non-Generic Example Family Name"' computes to 'italic semi-expanded 16px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal small-caps normal normal medium/normal serif' computes to 'small-caps 16px serif']
+ expected: FAIL
+
+ [Property font value 'expanded small-caps normal italic xx-large/1.2 fantasy' computes to 'italic small-caps expanded 32px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'normal normal lighter semi-condensed calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to '700 semi-condensed 0px / 0px cursive']
+ expected: FAIL
+
+ [Property font value 'lighter normal normal normal xx-small Menu' computes to '700 9.6px Menu']
+ expected: FAIL
+
+ [Property font value '900 italic small-caps normal 20%/1.2 "Non-Generic Example Family Name"' computes to 'italic small-caps 900 8px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'expanded normal bolder italic xx-large/1.2 sans-serif' computes to 'italic 900 expanded 32px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'semi-condensed small-caps bolder normal xx-small cursive' computes to 'small-caps 900 semi-condensed 9.6px cursive']
+ expected: FAIL
+
+ [Property font value 'italic lighter small-caps expanded xx-large/1.2 Menu' computes to 'italic small-caps 700 expanded 32px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'normal normal expanded normal medium/normal monospace' computes to 'expanded 16px monospace']
+ expected: FAIL
+
+ [Property font value 'normal bold italic normal xx-small cursive' computes to 'italic 700 9.6px cursive']
+ expected: FAIL
+
+ [Property font value 'normal lighter italic ultra-condensed xx-large/1.2 monospace' computes to 'italic 700 ultra-condensed 32px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'lighter semi-condensed normal normal xx-small fantasy' computes to '700 semi-condensed 9.6px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal small-caps 100 medium/normal sans-serif' computes to 'small-caps 100 16px sans-serif']
+ expected: FAIL
+
+ [Property font value 'italic normal normal normal xx-small "Non-Generic Example Family Name"' computes to 'italic 9.6px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'italic 100 extra-expanded larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'italic 100 extra-expanded 48px / 115.2px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'small-caps expanded bolder xx-large/1.2 "Non-Generic Example Family Name"' computes to 'small-caps 900 expanded 32px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal extra-expanded larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'extra-expanded 48px / 115.2px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'bold small-caps italic normal medium/normal fantasy' computes to 'italic small-caps 700 16px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal semi-condensed normal bolder xx-small monospace' computes to '900 semi-condensed 9.6px monospace']
+ expected: FAIL
+
+ [Property font value 'normal medium/normal sans-serif' computes to '16px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal bold expanded small-caps xx-large/1.2 Menu' computes to 'small-caps 700 expanded 32px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'normal small-caps normal xx-small "Non-Generic Example Family Name"' computes to 'small-caps 9.6px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'extra-expanded italic small-caps 900 larger/calc(120% + 1.2em) fantasy' computes to 'italic small-caps 900 extra-expanded 48px / 115.2px fantasy']
+ expected: FAIL
+
+ [Property font value '100 normal normal italic medium/normal "Non-Generic Example Family Name"' computes to 'italic 100 16px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal italic normal 20%/1.2 cursive' computes to 'italic 8px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'normal bold small-caps italic 10px/normal serif' computes to 'italic small-caps 700 10px serif']
+ expected: FAIL
+
+ [Property font value 'small-caps italic extra-expanded normal 10px/normal "Non-Generic Example Family Name"' computes to 'italic small-caps extra-expanded 10px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value '900 10px/normal cursive' computes to '900 10px cursive']
+ expected: FAIL
+
+ [Property font value 'small-caps 900 italic normal 10px/normal serif' computes to 'italic small-caps 900 10px serif']
+ expected: FAIL
+
+ [Property font value 'small-caps ultra-expanded normal normal smaller serif' computes to 'small-caps ultra-expanded 33.3333px serif']
+ expected: FAIL
+
+ [Property font value 'small-caps normal normal larger/calc(120% + 1.2em) sans-serif' computes to 'small-caps 48px / 115.2px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal italic normal small-caps xx-small monospace' computes to 'italic small-caps 9.6px monospace']
+ expected: FAIL
+
+ [Property font value 'small-caps italic bolder semi-expanded larger/calc(120% + 1.2em) monospace' computes to 'italic small-caps 900 semi-expanded 48px / 115.2px monospace']
+ expected: FAIL
+
+ [Property font value 'condensed normal normal bolder calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to '900 condensed 0px / 0px monospace']
+ expected: FAIL
+
+ [Property font value 'italic 900 normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to 'italic 900 semi-expanded 0px / 0px cursive']
+ expected: FAIL
+
+ [Property font value 'italic ultra-condensed small-caps lighter 10px/normal cursive' computes to 'italic small-caps 700 ultra-condensed 10px cursive']
+ expected: FAIL
+
+ [Property font value 'lighter normal italic normal 10px/normal fantasy' computes to 'italic 700 10px fantasy']
+ expected: FAIL
+
+ [Property font value 'small-caps normal italic normal medium/normal serif' computes to 'italic small-caps 16px serif']
+ expected: FAIL
+
+ [Property font value 'normal normal ultra-expanded small-caps larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'small-caps ultra-expanded 48px / 115.2px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'semi-expanded normal bold normal medium/normal serif' computes to '700 semi-expanded 16px serif']
+ expected: FAIL
+
+ [Property font value 'normal small-caps normal italic xx-large/1.2 sans-serif' computes to 'italic small-caps 32px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'italic normal small-caps smaller fantasy' computes to 'italic small-caps 33.3333px fantasy']
+ expected: FAIL
+
+ [Property font value 'lighter small-caps normal italic 20%/1.2 serif' computes to 'italic small-caps 700 8px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'normal italic small-caps condensed 20%/1.2 fantasy' computes to 'italic small-caps condensed 8px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'italic bold small-caps xx-small fantasy' computes to 'italic small-caps 700 9.6px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic small-caps normal bold larger/calc(120% + 1.2em) monospace' computes to 'italic small-caps 700 48px / 115.2px monospace']
+ expected: FAIL
+
+ [Property font value 'italic extra-condensed 100 20%/1.2 fantasy' computes to 'italic 100 extra-condensed 8px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'small-caps normal italic expanded larger/calc(120% + 1.2em) cursive' computes to 'italic small-caps expanded 48px / 115.2px cursive']
+ expected: FAIL
+
+ [Property font value 'small-caps bolder normal italic xx-large/1.2 monospace' computes to 'italic small-caps 900 32px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'normal normal small-caps normal calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to 'small-caps 0px / 0px sans-serif']
+ expected: FAIL
+
+ [Property font value 'small-caps normal normal normal smaller cursive' computes to 'small-caps 33.3333px cursive']
+ expected: FAIL
+
+ [Property font value 'small-caps normal 900 normal 10px/normal monospace' computes to 'small-caps 900 10px monospace']
+ expected: FAIL
+
+ [Property font value 'normal normal bold italic 10px/normal serif' computes to 'italic 700 10px serif']
+ expected: FAIL
+
+ [Property font value '100 small-caps normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to 'small-caps 100 semi-expanded 0px / 0px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal italic small-caps larger/calc(120% + 1.2em) serif' computes to 'italic small-caps 48px / 115.2px serif']
+ expected: FAIL
+
+ [Property font value 'lighter italic condensed normal medium/normal cursive' computes to 'italic 700 condensed 16px cursive']
+ expected: FAIL
+
+ [Property font value 'normal extra-expanded italic small-caps larger/calc(120% + 1.2em) serif' computes to 'italic small-caps extra-expanded 48px / 115.2px serif']
+ expected: FAIL
+
+ [Property font value 'small-caps italic ultra-expanded lighter 20%/1.2 serif' computes to 'italic small-caps 700 ultra-expanded 8px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'italic small-caps extra-condensed xx-small cursive' computes to 'italic small-caps extra-condensed 9.6px cursive']
+ expected: FAIL
+
+ [Property font value 'italic small-caps lighter normal 20%/1.2 serif' computes to 'italic small-caps 700 8px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'italic normal bolder normal medium/normal sans-serif' computes to 'italic 900 16px sans-serif']
+ expected: FAIL
+
+ [Property font value 'ultra-expanded italic bold smaller monospace' computes to 'italic 700 ultra-expanded 33.3333px monospace']
+ expected: FAIL
+
+ [Property font value 'small-caps 100 italic smaller "Non-Generic Example Family Name"' computes to 'italic small-caps 100 33.3333px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal extra-condensed small-caps normal 20%/1.2 fantasy' computes to 'small-caps extra-condensed 8px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'normal normal semi-expanded xx-small fantasy' computes to 'semi-expanded 9.6px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic normal small-caps 900 20%/1.2 Menu' computes to 'italic small-caps 900 8px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'normal extra-condensed normal italic 20%/1.2 cursive' computes to 'italic extra-condensed 8px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'normal small-caps italic normal 20%/1.2 Menu' computes to 'italic small-caps 8px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps normal italic lighter xx-large/1.2 sans-serif' computes to 'italic small-caps 700 32px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal normal extra-expanded italic xx-large/1.2 Menu' computes to 'italic extra-expanded 32px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'normal italic semi-expanded larger/calc(120% + 1.2em) sans-serif' computes to 'italic semi-expanded 48px / 115.2px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal italic normal extra-condensed xx-large/1.2 "Non-Generic Example Family Name"' computes to 'italic extra-condensed 32px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal bolder italic small-caps medium/normal fantasy' computes to 'italic small-caps 900 16px fantasy']
+ expected: FAIL
+
+ [Property font value 'small-caps italic smaller monospace' computes to 'italic small-caps 33.3333px monospace']
+ expected: FAIL
+
+ [Property font value 'expanded italic small-caps normal xx-large/1.2 cursive' computes to 'italic small-caps expanded 32px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'small-caps lighter normal ultra-condensed larger/calc(120% + 1.2em) Menu' computes to 'small-caps 700 ultra-condensed 48px / 115.2px Menu']
+ expected: FAIL
+
+ [Property font value 'italic small-caps normal medium/normal cursive' computes to 'italic small-caps 16px cursive']
+ expected: FAIL
+
+ [Property font value 'normal small-caps normal ultra-condensed smaller fantasy' computes to 'small-caps ultra-condensed 33.3333px fantasy']
+ expected: FAIL
+
+ [Property font value 'extra-condensed small-caps italic 900 20%/1.2 serif' computes to 'italic small-caps 900 extra-condensed 8px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value '900 condensed small-caps normal calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to 'small-caps 900 condensed 0px / 0px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal small-caps bolder condensed smaller monospace' computes to 'small-caps 900 condensed 33.3333px monospace']
+ expected: FAIL
+
+ [Property font value 'normal normal 100 larger/calc(120% + 1.2em) Menu' computes to '100 48px / 115.2px Menu']
+ expected: FAIL
+
+ [Property font value 'normal 100 semi-condensed normal xx-small fantasy' computes to '100 semi-condensed 9.6px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal normal normal ultra-condensed xx-small sans-serif' computes to 'ultra-condensed 9.6px sans-serif']
+ expected: FAIL
+
+ [Property font value 'extra-condensed italic normal normal 20%/1.2 Menu' computes to 'italic extra-condensed 8px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'italic 900 ultra-expanded normal smaller serif' computes to 'italic 900 ultra-expanded 33.3333px serif']
+ expected: FAIL
+
+ [Property font value 'normal 900 semi-expanded italic medium/normal monospace' computes to 'italic 900 semi-expanded 16px monospace']
+ expected: FAIL
+
+ [Property font value 'bold italic normal normal xx-large/1.2 cursive' computes to 'italic 700 32px / 1.2 cursive']
+ expected: FAIL
+
+ [Property font value 'normal italic 10px/normal sans-serif' computes to 'italic 10px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal normal italic bolder smaller Menu' computes to 'italic 900 33.3333px Menu']
+ expected: FAIL
+
+ [Property font value 'normal normal small-caps lighter medium/normal fantasy' computes to 'small-caps 700 16px fantasy']
+ expected: FAIL
+
+ [Property font value 'condensed small-caps bold calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to 'small-caps 700 condensed 0px / 0px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal ultra-expanded normal smaller serif' computes to 'ultra-expanded 33.3333px serif']
+ expected: FAIL
+
+ [Property font value 'normal 900 normal xx-large/1.2 fantasy' computes to '900 32px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value '900 normal italic extra-condensed calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to 'italic 900 extra-condensed 0px / 0px Menu']
+ expected: FAIL
+
+ [Property font value 'ultra-expanded normal normal normal smaller sans-serif' computes to 'ultra-expanded 33.3333px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal normal italic extra-condensed 10px/normal "Non-Generic Example Family Name"' computes to 'italic extra-condensed 10px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'ultra-expanded normal small-caps smaller cursive' computes to 'small-caps ultra-expanded 33.3333px cursive']
+ expected: FAIL
+
+ [Property font value 'normal small-caps expanded italic calc(30% - 40px)/calc(120% + 1.2em) serif' computes to 'italic small-caps expanded 0px / 0px serif']
+ expected: FAIL
+
+ [Property font value 'bolder normal small-caps normal medium/normal serif' computes to 'small-caps 900 16px serif']
+ expected: FAIL
+
+ [Property font value 'small-caps italic normal 100 calc(30% - 40px)/calc(120% + 1.2em) serif' computes to 'italic small-caps 100 0px / 0px serif']
+ expected: FAIL
+
+ [Property font value 'normal 100 medium/normal cursive' computes to '100 16px cursive']
+ expected: FAIL
+
+ [Property font value 'bold normal 20%/1.2 fantasy' computes to '700 8px / 1.2 fantasy']
+ expected: FAIL
+
+ [Property font value 'extra-expanded normal lighter small-caps larger/calc(120% + 1.2em) cursive' computes to 'small-caps 700 extra-expanded 48px / 115.2px cursive']
+ expected: FAIL
+
+ [Property font value 'normal 900 italic calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to 'italic 900 0px / 0px sans-serif']
+ expected: FAIL
+
+ [Property font value 'small-caps 100 semi-expanded italic medium/normal monospace' computes to 'italic small-caps 100 semi-expanded 16px monospace']
+ expected: FAIL
+
+ [Property font value 'small-caps normal normal italic 10px/normal fantasy' computes to 'italic small-caps 10px fantasy']
+ expected: FAIL
+
+ [Property font value 'ultra-condensed italic bolder normal 10px/normal Menu' computes to 'italic 900 ultra-condensed 10px Menu']
+ expected: FAIL
+
+ [Property font value '100 normal italic small-caps 20%/1.2 monospace' computes to 'italic small-caps 100 8px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'normal bold normal normal larger/calc(120% + 1.2em) monospace' computes to '700 48px / 115.2px monospace']
+ expected: FAIL
+
+ [Property font value 'small-caps bolder condensed calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to 'small-caps 900 condensed 0px / 0px cursive']
+ expected: FAIL
+
+ [Property font value 'normal ultra-expanded italic lighter smaller sans-serif' computes to 'italic 700 ultra-expanded 33.3333px sans-serif']
+ expected: FAIL
+
+ [Property font value 'bolder italic extra-condensed xx-small sans-serif' computes to 'italic 900 extra-condensed 9.6px sans-serif']
+ expected: FAIL
+
+ [Property font value 'italic bolder normal smaller "Non-Generic Example Family Name"' computes to 'italic 900 33.3333px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'small-caps normal bolder extra-expanded calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'small-caps 900 extra-expanded 0px / 0px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal italic small-caps normal smaller sans-serif' computes to 'italic small-caps 33.3333px sans-serif']
+ expected: FAIL
+
+ [Property font value 'small-caps italic normal 10px/normal Menu' computes to 'italic small-caps 10px Menu']
+ expected: FAIL
+
+ [Property font value 'semi-condensed small-caps normal xx-small sans-serif' computes to 'small-caps semi-condensed 9.6px sans-serif']
+ expected: FAIL
+
+ [Property font value 'bolder italic normal small-caps larger/calc(120% + 1.2em) fantasy' computes to 'italic small-caps 900 48px / 115.2px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal expanded italic normal xx-large/1.2 "Non-Generic Example Family Name"' computes to 'italic expanded 32px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'ultra-condensed normal normal italic 10px/normal cursive' computes to 'italic ultra-condensed 10px cursive']
+ expected: FAIL
+
+ [Property font value 'ultra-expanded 100 small-caps italic smaller serif' computes to 'italic small-caps 100 ultra-expanded 33.3333px serif']
+ expected: FAIL
+
+ [Property font value '900 normal semi-condensed smaller fantasy' computes to '900 semi-condensed 33.3333px fantasy']
+ expected: FAIL
+
+ [Property font value 'bolder normal normal calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to '900 0px / 0px monospace']
+ expected: FAIL
+
+ [Property font value 'normal 100 normal ultra-expanded 20%/1.2 serif' computes to '100 ultra-expanded 8px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'italic small-caps condensed normal medium/normal fantasy' computes to 'italic small-caps condensed 16px fantasy']
+ expected: FAIL
+
+ [Property font value 'italic normal 20%/1.2 monospace' computes to 'italic 8px / 1.2 monospace']
+ expected: FAIL
+
+ [Property font value 'extra-expanded lighter small-caps normal larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'small-caps 700 extra-expanded 48px / 115.2px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'italic small-caps 100 ultra-condensed calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to 'italic small-caps 100 ultra-condensed 0px / 0px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal italic 900 semi-condensed xx-large/1.2 serif' computes to 'italic 900 semi-condensed 32px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'normal italic expanded normal smaller cursive' computes to 'italic expanded 33.3333px cursive']
+ expected: FAIL
+
+ [Property font value 'normal small-caps italic extra-condensed xx-small serif' computes to 'italic small-caps extra-condensed 9.6px serif']
+ expected: FAIL
+
+ [Property font value 'ultra-condensed normal small-caps normal 10px/normal fantasy' computes to 'small-caps ultra-condensed 10px fantasy']
+ expected: FAIL
+
+ [Property font value 'normal expanded bold normal xx-large/1.2 serif' computes to '700 expanded 32px / 1.2 serif']
+ expected: FAIL
+
+ [Property font value 'italic lighter normal normal 10px/normal serif' computes to 'italic 700 10px serif']
+ expected: FAIL
+
+ [Property font value 'bold semi-condensed small-caps italic xx-small monospace' computes to 'italic small-caps 700 semi-condensed 9.6px monospace']
+ expected: FAIL
+
+ [Property font value 'small-caps extra-expanded normal larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to 'small-caps extra-expanded 48px / 115.2px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'normal italic lighter normal xx-small Menu' computes to 'italic 700 9.6px Menu']
+ expected: FAIL
+
+ [Property font value 'italic expanded normal bolder xx-large/1.2 "Non-Generic Example Family Name"' computes to 'italic 900 expanded 32px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'lighter italic normal ultra-expanded smaller monospace' computes to 'italic 700 ultra-expanded 33.3333px monospace']
+ expected: FAIL
+
+ [Property font value 'normal normal normal italic 10px/normal Menu' computes to 'italic 10px Menu']
+ expected: FAIL
+
+ [Property font value 'small-caps normal bold italic 20%/1.2 Menu' computes to 'italic small-caps 700 8px / 1.2 Menu']
+ expected: FAIL
+
+ [Property font value 'normal small-caps semi-condensed 10px/normal Menu' computes to 'small-caps semi-condensed 10px Menu']
+ expected: FAIL
+
+ [Property font value 'normal normal ultra-condensed 100 smaller serif' computes to '100 ultra-condensed 33.3333px serif']
+ expected: FAIL
+
+ [Property font value 'bold extra-condensed 20%/1.2 sans-serif' computes to '700 extra-condensed 8px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'bold normal small-caps xx-small "Non-Generic Example Family Name"' computes to 'small-caps 700 9.6px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'small-caps bold italic extra-condensed 20%/1.2 sans-serif' computes to 'italic small-caps 700 extra-condensed 8px / 1.2 sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal normal italic medium/normal cursive' computes to 'italic 16px cursive']
+ expected: FAIL
+
+ [Property font value 'bold normal normal ultra-condensed larger/calc(120% + 1.2em) sans-serif' computes to '700 ultra-condensed 48px / 115.2px sans-serif']
+ expected: FAIL
+
+ [Property font value 'normal bolder normal italic smaller Menu' computes to 'italic 900 33.3333px Menu']
+ expected: FAIL
+
+ [Property font value '100 semi-expanded normal italic medium/normal monospace' computes to 'italic 100 semi-expanded 16px monospace']
+ expected: FAIL
+
+ [Property font value 'extra-condensed italic lighter small-caps 20%/1.2 "Non-Generic Example Family Name"' computes to 'italic small-caps 700 extra-condensed 8px / 1.2 "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'bold small-caps normal smaller Menu' computes to 'small-caps 700 33.3333px Menu']
+ expected: FAIL
+
+ [Property font value 'normal normal normal normal smaller monospace' computes to '33.3333px monospace']
+ expected: FAIL
+
+ [Property font value 'normal italic 100 small-caps medium/normal "Non-Generic Example Family Name"' computes to 'italic small-caps 100 16px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'semi-expanded bold italic small-caps medium/normal monospace' computes to 'italic small-caps 700 semi-expanded 16px monospace']
+ expected: FAIL
+
+ [Property font value 'normal semi-expanded 900 medium/normal "Non-Generic Example Family Name"' computes to '900 semi-expanded 16px "Non-Generic Example Family Name"']
+ expected: FAIL
+
+ [Property font value 'extra-expanded small-caps normal 100 larger/calc(120% + 1.2em) monospace' computes to 'small-caps 100 extra-expanded 48px / 115.2px monospace']
+ expected: FAIL
+
+ [Property font value '100 italic semi-condensed small-caps xx-large/1.2 fantasy' computes to 'italic small-caps 100 semi-condensed 32px / 1.2 fantasy']
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-fonts/parsing/font-valid.html.ini b/tests/wpt/metadata/css/css-fonts/parsing/font-valid.html.ini
index e86a1dbea6e..d4242c67358 100644
--- a/tests/wpt/metadata/css/css-fonts/parsing/font-valid.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/parsing/font-valid.html.ini
@@ -17,3 +17,465 @@
[caption should be a supported system font.]
expected: FAIL
+ [e.style['font'\] = "italic normal extra-expanded 900 calc(30% - 40px)/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "expanded normal bolder italic xx-large/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "condensed italic normal small-caps calc(30% - 40px)/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps oblique ultra-expanded lighter 20%/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-expanded 900 normal larger/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bold italic small-caps ultra-condensed calc(30% - 40px)/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal small-caps 20%/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic extra-expanded small-caps larger/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique normal expanded small-caps 20%/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-expanded normal normal larger/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal italic normal 20%/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "100 normal small-caps condensed larger/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique expanded normal bolder xx-large/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique normal 20%/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique extra-condensed 20%/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "condensed 100 italic calc(30% - 40px)/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal oblique bolder calc(30% - 40px)/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "900 normal italic extra-condensed calc(30% - 40px)/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal italic 900 semi-condensed xx-large/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal xx-large/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique normal normal 100 xx-large/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "100 normal oblique small-caps 20%/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic bold larger/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "100 extra-condensed small-caps 20%/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-expanded italic small-caps 900 larger/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal oblique normal normal calc(30% - 40px)/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "100 oblique semi-condensed small-caps xx-large/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique normal lighter small-caps xx-large/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps 900 normal xx-large/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps normal bolder larger/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal italic expanded larger/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal extra-expanded bolder oblique larger/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps bolder condensed calc(30% - 40px)/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "lighter normal extra-expanded small-caps calc(30% - 40px)/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "lighter normal small-caps oblique xx-large/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bold extra-condensed 20%/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bolder small-caps oblique expanded xx-large/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal lighter semi-condensed calc(30% - 40px)/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal lighter condensed calc(30% - 40px)/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal bold oblique 20%/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique extra-condensed 100 20%/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal normal bolder 20%/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps oblique normal normal 20%/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "lighter small-caps extra-expanded larger/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique normal small-caps 900 20%/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal oblique lighter xx-large/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "expanded oblique small-caps normal xx-large/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-condensed normal normal small-caps 20%/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique lighter small-caps expanded xx-large/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal 100 small-caps larger/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-expanded normal lighter small-caps larger/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal normal small-caps 20%/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic normal normal calc(30% - 40px)/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic normal normal ultra-condensed larger/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal extra-condensed italic xx-large/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps oblique bold normal xx-large/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "lighter small-caps normal italic 20%/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic small-caps 100 ultra-condensed calc(30% - 40px)/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic 900 normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal bold normal normal larger/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-condensed lighter normal small-caps 20%/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal extra-condensed small-caps normal 20%/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-condensed small-caps oblique 900 20%/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal extra-expanded italic small-caps larger/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal condensed lighter larger/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic condensed normal calc(30% - 40px)/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bold normal 20%/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal 900 normal xx-large/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-expanded lighter small-caps normal larger/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique 100 normal small-caps 20%/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "condensed normal normal bolder calc(30% - 40px)/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "expanded 100 xx-large/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal normal larger/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps expanded bolder xx-large/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic small-caps normal bold larger/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "condensed small-caps bold calc(30% - 40px)/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal oblique small-caps larger/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal oblique semi-expanded larger/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal bolder small-caps 20%/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps italic normal 100 calc(30% - 40px)/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique small-caps lighter normal 20%/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique small-caps semi-condensed 900 xx-large/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps condensed italic calc(30% - 40px)/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "900 normal normal small-caps xx-large/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "900 condensed small-caps normal calc(30% - 40px)/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal condensed small-caps italic calc(30% - 40px)/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-condensed oblique normal normal 20%/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bolder normal expanded italic 20%/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "900 small-caps larger/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-condensed normal small-caps oblique 20%/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps bolder normal italic xx-large/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "condensed small-caps calc(30% - 40px)/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps italic bolder semi-expanded larger/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "100 small-caps normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal bolder small-caps extra-condensed 20%/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal ultra-expanded small-caps larger/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bold oblique normal normal xx-large/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic condensed 900 normal calc(30% - 40px)/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal small-caps normal calc(30% - 40px)/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bold normal normal ultra-condensed larger/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bold extra-expanded italic larger/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps extra-condensed normal 900 20%/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps extra-expanded lighter normal larger/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps italic lighter calc(30% - 40px)/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal italic ultra-expanded bold 20%/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal xx-large/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal condensed normal small-caps calc(30% - 40px)/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps bold italic larger/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps oblique normal 20%/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps expanded xx-large/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-condensed oblique lighter small-caps 20%/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal expanded oblique normal xx-large/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal extra-condensed normal oblique 20%/1.2 cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal normal larger/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "expanded normal oblique small-caps xx-large/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "oblique small-caps normal normal xx-large/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "900 oblique small-caps normal 20%/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal extra-expanded italic xx-large/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps bold oblique extra-condensed 20%/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "expanded small-caps normal italic xx-large/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic 100 extra-expanded larger/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal expanded bold normal xx-large/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal 900 oblique calc(30% - 40px)/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps expanded oblique calc(30% - 40px)/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "condensed normal small-caps 100 calc(30% - 40px)/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-expanded small-caps normal 100 larger/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic normal 100 condensed larger/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal normal bold calc(30% - 40px)/calc(120% + 1.2em) serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps calc(30% - 40px)/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps 100 calc(30% - 40px)/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps lighter normal ultra-condensed larger/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal bold expanded small-caps xx-large/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal extra-expanded larger/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps normal bolder extra-expanded calc(30% - 40px)/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "italic normal small-caps extra-condensed calc(30% - 40px)/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal 100 larger/calc(120% + 1.2em) Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "extra-expanded normal italic lighter larger/calc(120% + 1.2em) sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps normal oblique xx-large/1.2 sans-serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bolder italic normal small-caps larger/calc(120% + 1.2em) fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal oblique small-caps larger/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal lighter italic ultra-condensed xx-large/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal 100 normal ultra-expanded 20%/1.2 serif" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal italic small-caps condensed 20%/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal italic normal extra-condensed xx-large/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal italic normal xx-large/1.2 fantasy" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "small-caps extra-expanded normal larger/calc(120% + 1.2em) \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bolder condensed normal calc(30% - 40px)/calc(120% + 1.2em) cursive" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal small-caps semi-expanded normal 20%/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "expanded normal xx-large/1.2 \\"FB Armada\\"" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "bolder normal normal calc(30% - 40px)/calc(120% + 1.2em) monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "expanded bolder small-caps xx-large/1.2 Menu" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "normal normal small-caps condensed xx-large/1.2 monospace" should set the property value]
+ expected: FAIL
+
+ [e.style['font'\] = "900 expanded normal small-caps xx-large/1.2 Menu" should set the property value]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
deleted file mode 100644
index e6e1f29e274..00000000000
--- a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[matchMedia-display-none-iframe.html]
- expected: ERROR
diff --git a/tests/wpt/metadata/css/cssom/font-shorthand-serialization.html.ini b/tests/wpt/metadata/css/cssom/font-shorthand-serialization.html.ini
new file mode 100644
index 00000000000..a16ee352418
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom/font-shorthand-serialization.html.ini
@@ -0,0 +1,4 @@
+[font-shorthand-serialization.html]
+ [The font shorthand should be serialized just like any other shorthand.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini b/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini
deleted file mode 100644
index c3916f8555d..00000000000
--- a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[contenttype_txt.html]
- expected: CRASH
diff --git a/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini b/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini
index 606c3e6418e..a1844eee9e0 100644
--- a/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini
+++ b/tests/wpt/metadata/dom/nodes/aria-element-reflection.tentative.html.ini
@@ -26,3 +26,21 @@
[Reparenting an element into a descendant shadow scope nullifies the element reference.]
expected: FAIL
+ [shadow DOM behaviour for FrozenArray element reflection.]
+ expected: FAIL
+
+ [aria-flowto.]
+ expected: FAIL
+
+ [aria-labelledby.]
+ expected: FAIL
+
+ [aria-owns.]
+ expected: FAIL
+
+ [aria-controls.]
+ expected: FAIL
+
+ [aria-describedby.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index cf750441e57..14d03079a9a 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -312,6 +312,18 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;" text/plain]
+ [<iframe>: combined response Content-Type: text/html;" text/plain]
+ expected: FAIL
+
+ [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
+ expected: FAIL
+
+ [<iframe>: combined response Content-Type: text/html */*]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/plain */*]
+ expected: FAIL
+
+ [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index d2df9b78483..5c001592859 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
+ [separate text/javascript;charset=windows-1252 error text/javascript]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html.ini
deleted file mode 100644
index e495b626d2e..00000000000
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[navigation-unload-same-origin-fragment.html]
- [Tests that a fragment navigation in the unload handler will not block the initial navigation]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
deleted file mode 100644
index 87b07c3e670..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_1.html]
- [Multiple history traversals from the same task]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
deleted file mode 100644
index 385376c7321..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_4.html]
- [Multiple history traversals, last would be aborted]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
index 16fa2c5cfc1..dec4c579137 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
@@ -1,4 +1,5 @@
[creating_browsing_context_test_01.html]
+ expected: TIMEOUT
[first argument: absolute url]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index 5f60c78e73c..b3bd9f4c289 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
- expected: TIMEOUT
+ expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
new file mode 100644
index 00000000000..8cc42056d34
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
@@ -0,0 +1,10 @@
+[non-active-document.html]
+ [DOMParser]
+ expected: FAIL
+
+ [createHTMLDocument]
+ expected: FAIL
+
+ [<template>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/forms/autofocus/skip-not-fully-active.html.ini b/tests/wpt/metadata/html/semantics/forms/autofocus/skip-not-fully-active.html.ini
new file mode 100644
index 00000000000..bfb92ef45a7
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/forms/autofocus/skip-not-fully-active.html.ini
@@ -0,0 +1,5 @@
+[skip-not-fully-active.html]
+ expected: TIMEOUT
+ [Autofocus element in not-fully-active document should be skipped while flusing.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini
index 702af61a3c4..127392316de 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini
@@ -1,11 +1,7 @@
[form-submission-algorithm.html]
- expected: TIMEOUT
[If form's firing submission events is true, then return; 'submit' event]
expected: FAIL
[If form's firing submission events is true, then return; 'invalid' event]
expected: FAIL
- [Cannot navigate (after constructing the entry list)]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
new file mode 100644
index 00000000000..9e522297c94
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
@@ -0,0 +1,7 @@
+[toggleEvent.html]
+ [Calling open twice on 'details' fires only one toggle event]
+ expected: FAIL
+
+ [Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html.ini
new file mode 100644
index 00000000000..fc8ee9aacf8
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html.ini
@@ -0,0 +1,5 @@
+[document-close-with-pending-script.html]
+ expected: TIMEOUT
+ [document.close called while a script is pending]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
index d3d0ef660c1..c93fc9d2acc 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
@@ -62,3 +62,9 @@
[X SNR (-675.9249049743026 dB) is not greater than or equal to 65.737. Got -675.9249049743026.]
expected: FAIL
+ [X SNR (-85.12581379232168 dB) is not greater than or equal to 65.737. Got -85.12581379232168.]
+ expected: FAIL
+
+ [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t1.9724091887474060e-1\t9.5236867666244507e-1\t7.5512775778770447e-1\t7.9289436569253091e-1\t3.8985999999999999e-3\n\t[60\]\t-2.2450675070285797e-1\t-5.8084785938262939e-1\t3.5634110867977142e-1\t6.1348441407448528e-1\t3.8985999999999999e-3\n\t[90\]\t-3.7808802723884583e-1\t-5.9811043739318848e-1\t2.2002241015434265e-1\t3.6786251568070089e-1\t3.8985999999999999e-3\n\t[120\]\t7.6881676912307739e-1\t9.4563448429107666e-1\t1.7681771516799927e-1\t1.8698315057805445e-1\t3.8985999999999999e-3\n\t[151\]\t5.4644601186737418e-4\t-4.1306272149085999e-2\t4.1852718160953373e-2\t1.0132291292202573e+0\t3.8985999999999999e-3\n\t...and 1419 more errors.\n\tMax AbsError of 2.6133897807472348e+6 at index of 39268.\n\t[39268\]\t-2.6133907500000000e+6\t-9.6925276517868042e-1\t2.6133897807472348e+6\t2.6962933453849470e+6\t3.8985999999999999e-3\n\tMax RelError of 2.6962933453849470e+6 at index of 39268.\n\t[39268\]\t-2.6133907500000000e+6\t-9.6925276517868042e-1\t2.6133897807472348e+6\t2.6962933453849470e+6\t3.8985999999999999e-3\n]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini
new file mode 100644
index 00000000000..fe8654e447c
--- /dev/null
+++ b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini
@@ -0,0 +1,4 @@
+[WorkerGlobalScope-close.html]
+ [Test sending a message after closing.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
new file mode 100644
index 00000000000..80f9a4f15b8
--- /dev/null
+++ b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini
@@ -0,0 +1,2 @@
+[Worker-constructor.html]
+ expected: ERROR
diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
deleted file mode 100644
index dbea4f293ad..00000000000
--- a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[transition_calc_implicit.html]
- expected: TIMEOUT
diff --git a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html
new file mode 100644
index 00000000000..6c075f7ac77
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/child-bottom-margin-in-unresolvable-percentage-height.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/box.html#collapsing-margins">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#the-height-property">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1001663">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="position:relative; width:100px; height:100px; background:red;">
+ <div style="position:absolute; width:100%; background:green;">
+ <div style="height:100%;">
+ <div style="margin-bottom:80px; height:20px;"></div>
+ </div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-color-adjust/parsing/color-scheme-computed.tentative.html b/tests/wpt/web-platform-tests/css/css-color-adjust/parsing/color-scheme-computed.html
index 80b9803981f..80b9803981f 100644
--- a/tests/wpt/web-platform-tests/css/css-color-adjust/parsing/color-scheme-computed.tentative.html
+++ b/tests/wpt/web-platform-tests/css/css-color-adjust/parsing/color-scheme-computed.html
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-007.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-007.html
new file mode 100644
index 00000000000..1318933952c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-007.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<title>Definite sizes with fixed flex-basis</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#definite-sizes">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+<meta name="flags" content="" />
+<meta name="assert" content="In a column flexbox, the height of a fully inflexible item with fixed flex-basis is definite even when the heights of the item and the container are indefinite." />
+
+<style>
+x-flexbox {
+ display: flex;
+ flex-direction: column;
+}
+
+x-item {
+ flex: 0 0 100px;
+}
+
+x-item>div {
+ width: 100px;
+ height: 100%;
+ background: green;
+}
+
+#reference-overlapped-red {
+ position: absolute;
+ background-color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div id="reference-overlapped-red"></div>
+
+<x-flexbox>
+ <x-item>
+ <div></div>
+ </x-item>
+</x-flexbox>
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-computed.html b/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-computed.html
index b3f104e6243..ab2694d2114 100644
--- a/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-computed.html
+++ b/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-computed.html
@@ -22,12 +22,6 @@
<script>
'use strict';
-const initial_style = 'normal';
-const initial_variant = 'normal';
-const initial_weight = 'normal';
-const initial_stretch = 'normal';
-const initial_line_height = 'normal';
-
// Firefox and Edge 18 serialize these as supplied.
// Blink and Safari have implementation-dependent or platform-dependent serializations.
function test_system_font(keyword) {
@@ -178,27 +172,19 @@ function test_specific(prefix) {
if (style) {
canonical.push(style);
reference.style.fontStyle = style;
- } else {
- canonical.push(initial_style);
}
if (variant) {
canonical.push(variant);
reference.style.fontVariant = style;
- } else {
- canonical.push(initial_variant);
}
if (weight) {
canonical.push(compute_weight(weight));
reference.style.fontWeight = style;
- } else {
- canonical.push(compute_weight(initial_weight));
}
if (stretch) {
canonical.push(stretch);
reference.style.fontStretch = style;
- } else {
- canonical.push(initial_stretch);
}
const size = generate_size();
@@ -215,15 +201,19 @@ function test_specific(prefix) {
parts.push(family);
reference.style.fontFamily = family;
- canonical.push(getComputedStyle(reference).fontSize + '/' + getComputedStyle(reference).lineHeight);
+ if (!line_height || line_height === 'normal') {
+ canonical.push(getComputedStyle(reference).fontSize);
+ } else {
+ // Implementations differ on adjacent space when serializing '/'
+ // https://github.com/w3c/csswg-drafts/issues/4282
+ canonical.push(getComputedStyle(reference).fontSize + ' / ' + getComputedStyle(reference).lineHeight);
+ }
+
canonical.push(family);
reference.remove();
- // Implementations differ on adjacent space when serializing '/'
- // https://github.com/w3c/csswg-drafts/issues/4282
- const expected = canonical.join(' ');
- test_computed_value('font', parts.join(' '), [expected, expected.replace('/', ' / ')]);
+ test_computed_value('font', parts.join(' '), canonical.join(' '));
}
// Font style, variant, weight and stretch may appear in any order.
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-invalid.html b/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-invalid.html
index d6db9338aa2..950747580e8 100644
--- a/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-invalid.html
+++ b/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-invalid.html
@@ -23,6 +23,7 @@ test_invalid_value('font', 'normal normal normal normal normal 20%/1.2 \"FB Arma
test_invalid_value('font', 'italic small-caps lighter condensed smaller');
test_invalid_value('font', 'normal 100 semi-condensed oblique small-caps Menu');
+test_invalid_value('font', '100% larger / 2 fantasy');
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-valid.html b/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-valid.html
index 769e6b42eae..896be89741b 100644
--- a/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-fonts/parsing/font-valid.html
@@ -167,7 +167,7 @@ function test_specific(prefix) {
if (lineHeight === 'normal')
canonical.push(size);
else
- canonical.push(size + '/' + lineHeight);
+ canonical.push(size + ' / ' + lineHeight);
} else {
parts.push(size);
canonical.push(size);
diff --git a/tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html b/tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html
index 644b147a227..ff6757aeea3 100644
--- a/tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html
+++ b/tests/wpt/web-platform-tests/css/css-position/position-absolute-replaced-minmax.html
@@ -21,6 +21,7 @@
border-width: 3px 7px 9px 11px;
border-color: yellow;
border-style: solid;
+ margin: 1px 3px 7px 9px;
}
</style>
<!-- test all combinations of minmax from section 10.4 table at
@@ -30,77 +31,77 @@
<!-- iframe: intrinsic size is 300x150, no aspect ratio -->
<div class="container">
<iframe class="target"
- data-expected-width="338" data-expected-height="182" data-offset-y="18" data-offset-x="62"
+ data-expected-width="338" data-expected-height="182" data-offset-y="11" data-offset-x="59"
>
</iframe>
</div>
<!-- spec 1: w > max-width -->
<div class="container">
<iframe class="target" style="max-width:100px"
- data-expected-width="138" data-expected-height="182" data-offset-y="18" data-offset-x="262"
+ data-expected-width="138" data-expected-height="182" data-offset-y="11" data-offset-x="259"
>
</iframe>
</div>
<!-- spec 2: w < min-width -->
<div class="container">
<iframe class="target" style="min-width: 350px"
- data-expected-width="388" data-expected-height="182" data-offset-y="18" data-offset-x="12"
+ data-expected-width="388" data-expected-height="182" data-offset-y="11" data-offset-x="9"
>
</iframe>
</div>
<!-- spec 3: h > max-height -->
<div class="container">
<iframe class="target" style="max-height: 150px"
- data-expected-width="338" data-expected-height="182" data-offset-y="18" data-offset-x="62"
+ data-expected-width="338" data-expected-height="182" data-offset-y="11" data-offset-x="59"
>
</iframe>
</div>
<!-- spec 4: h < min-height -->
<div class="container">
<iframe class="target" style="min-height: 165px"
- data-expected-width="338" data-expected-height="197" data-offset-y="3" data-offset-x="62"
+ data-expected-width="338" data-expected-height="197" data-offset-y="-4" data-offset-x="59"
>
</iframe>
</div>
<!-- spec 5: (w > max-width) and (h > max-height), where (max-width/w ≤ max-height/h) -->
<div class="container">
<iframe class="target" style="max-width: 240px; max-height: 135px"
- data-expected-width="278" data-expected-height="167" data-offset-y="33" data-offset-x="122"
+ data-expected-width="278" data-expected-height="167" data-offset-y="26" data-offset-x="119"
>
</iframe>
</div>
<!-- spec 6: (w > max-width) and (h > max-height), where (max-width/w > max-height/h) -->
<div class="container">
<iframe class="target" style="max-width: 270px; max-height: 120px"
- data-expected-width="308" data-expected-height="152" data-offset-y="48" data-offset-x="92"
+ data-expected-width="308" data-expected-height="152" data-offset-y="41" data-offset-x="89"
>
</iframe>
</div>
<!-- spec 7: (w < min-width) and (h < min-height), where (min-width/w ≤ min-height/h) -->
<div class="container">
<iframe class="target" style="min-width: 360px; min-height: 165px"
- data-expected-width="398" data-expected-height="197" data-offset-y="3" data-offset-x="2"
+ data-expected-width="398" data-expected-height="197" data-offset-y="-4" data-offset-x="-1"
>
</iframe>
</div>
<!-- spec 8: (w < min-width) and (h < min-height), where (min-width/w > min-height/h) -->
<div class="container">
<iframe class="target" style="min-width: 330px; min-height: 180px"
- data-expected-width="368" data-expected-height="212" data-offset-y="-12" data-offset-x="32"
+ data-expected-width="368" data-expected-height="212" data-offset-y="-19" data-offset-x="29"
>
</iframe>
</div>
<!-- spec 9: (w < min-width) and (h > max-height) -->
<div class="container">
<iframe class="target" style="min-width: 330px; max-height: 135px"
- data-expected-width="368" data-expected-height="167" data-offset-y="33" data-offset-x="32"
+ data-expected-width="368" data-expected-height="167" data-offset-y="26" data-offset-x="29"
>
</iframe>
</div>
<!-- spec 10: (w > max-width) and (h < min-height) -->
<div class="container">
<iframe class="target" style="max-width: 240px; min-height: 165px"
- data-expected-width="278" data-expected-height="197" data-offset-y="3" data-offset-x="122"
+ data-expected-width="278" data-expected-height="197" data-offset-y="-4" data-offset-x="119"
>
</iframe>
</div>
@@ -109,136 +110,136 @@
<!-- image dimensions: 200x150. images has intrinic size and aspect ratio -->
<div class="container">
<img class="target png"
- data-expected-width="238" data-expected-height="182" data-offset-y="18" data-offset-x="162"
+ data-expected-width="238" data-expected-height="182" data-offset-y="11" data-offset-x="159"
>
</div>
<!-- spec 1: w > max-width -->
<div class="container">
<img class="target png" style="max-width: 180px"
- data-expected-width="218" data-expected-height="167" data-offset-y="33" data-offset-x="182"
+ data-expected-width="218" data-expected-height="167" data-offset-y="26" data-offset-x="179"
>
</div>
<!-- spec 2: w < min-width -->
<div class="container">
<img class="target png" style="min-width: 220px"
- data-expected-width="258" data-expected-height="197" data-offset-y="3" data-offset-x="142"
+ data-expected-width="258" data-expected-height="197" data-offset-y="-4" data-offset-x="139"
>
</div>
<!-- spec 3: h > max-height -->
<div class="container">
<img class="target png" style="max-height: 135px"
- data-expected-width="218" data-expected-height="167" data-offset-y="33" data-offset-x="182"
+ data-expected-width="218" data-expected-height="167" data-offset-y="26" data-offset-x="179"
>
</div>
<!-- spec 4: h < min-height -->
<div class="container">
<img class="target png" style="min-height: 165px"
- data-expected-width="258" data-expected-height="197" data-offset-y="3" data-offset-x="142"
+ data-expected-width="258" data-expected-height="197" data-offset-y="-4" data-offset-x="139"
>
</div>
<!-- spec 5: (w > max-width) and (h > max-height), where (max-width/w ≤ max-height/h) -->
<div class="container">
<img class="target png" style="max-width: 160px; max-height: 135px"
- data-expected-width="198" data-expected-height="152" data-offset-y="48" data-offset-x="202"
+ data-expected-width="198" data-expected-height="152" data-offset-y="41" data-offset-x="199"
>
</div>
<!-- spec 6: (w > max-width) and (h > max-height), where (max-width/w > max-height/h) -->
<div class="container">
<img class="target png" style="max-width: 180px; max-height: 120px"
- data-expected-width="198" data-expected-height="152" data-offset-y="48" data-offset-x="202"
+ data-expected-width="198" data-expected-height="152" data-offset-y="41" data-offset-x="199"
>
</div>
<!-- spec 7: (w < min-width) and (h < min-height), where (min-width/w ≤ min-height/h) -->
<div class="container">
<img class="target png" style="min-width: 240px;min-height: 165px"
- data-expected-width="278" data-expected-height="212" data-offset-y="-12" data-offset-x="122"
+ data-expected-width="278" data-expected-height="212" data-offset-y="-19" data-offset-x="119"
>
</div>
<!-- spec 8: (w < min-width) and (h < min-height), where (min-width/w > min-height/h) -->
<div class="container">
<img class="target png" style="min-width: 220px;min-height: 180px"
- data-expected-width="278" data-expected-height="212" data-offset-y="-12" data-offset-x="122"
+ data-expected-width="278" data-expected-height="212" data-offset-y="-19" data-offset-x="119"
>
</div>
<!-- spec 9: (w < min-width) and (h > max-height) -->
<div class="container">
<img class="target png" style="min-width: 220px; max-height: 130px"
- data-expected-width="258" data-expected-height="162" data-offset-y="38" data-offset-x="142"
+ data-expected-width="258" data-expected-height="162" data-offset-y="31" data-offset-x="139"
>
</div>
<!-- spec 10: (w > max-width) and (h < min-height) -->
<div class="container">
<img class="target png" style="max-width: 180px; min-height: 165px"
- data-expected-width="218" data-expected-height="197" data-offset-y="3" data-offset-x="182"
+ data-expected-width="218" data-expected-height="197" data-offset-y="-4" data-offset-x="179"
>
</div>
<!-- IMG SVG tests -->
<!-- image dimensions: 200x150. images has no intrinic size and no aspect ratio -->
<div class="container">
<img class="target svg"
- data-expected-width="338" data-expected-height="182" data-offset-y="18" data-offset-x="62"
+ data-expected-width="338" data-expected-height="182" data-offset-y="11" data-offset-x="59"
>
</div>
<!-- spec 1: w > max-width -->
<div class="container">
<img class="target svg" style="max-width: 180px"
- data-expected-width="218" data-expected-height="182" data-offset-y="18" data-offset-x="182"
+ data-expected-width="218" data-expected-height="182" data-offset-y="11" data-offset-x="179"
>
</div>
<!-- spec 2: w < min-width -->
<div class="container">
<img class="target svg" style="min-width: 220px"
- data-expected-width="338" data-expected-height="182" data-offset-y="18" data-offset-x="62"
+ data-expected-width="338" data-expected-height="182" data-offset-y="11" data-offset-x="59"
>
</div>
<!-- spec 3: h > max-height -->
<div class="container">
<img class="target svg" style="max-height: 135px"
- data-expected-width="338" data-expected-height="167" data-offset-y="33" data-offset-x="62"
+ data-expected-width="338" data-expected-height="167" data-offset-y="26" data-offset-x="59"
>
</div>
<!-- spec 4: h < min-height -->
<div class="container">
<img class="target svg" style="min-height: 165px"
- data-expected-width="338" data-expected-height="197" data-offset-y="3" data-offset-x="62"
+ data-expected-width="338" data-expected-height="197" data-offset-y="-4" data-offset-x="59"
>
</div>
<!-- spec 5: (w > max-width) and (h > max-height), where (max-width/w ≤ max-height/h) -->
<div class="container">
<img class="target svg" style="max-width: 160px; max-height: 135px"
- data-expected-width="198" data-expected-height="167" data-offset-y="33" data-offset-x="202"
+ data-expected-width="198" data-expected-height="167" data-offset-y="26" data-offset-x="199"
>
</div>
<!-- spec 6: (w > max-width) and (h > max-height), where (max-width/w > max-height/h) -->
<div class="container">
<img class="target svg" style="max-width: 180px; max-height: 120px"
- data-expected-width="218" data-expected-height="152" data-offset-y="48" data-offset-x="182"
+ data-expected-width="218" data-expected-height="152" data-offset-y="41" data-offset-x="179"
>
</div>
<!-- spec 7: (w < min-width) and (h < min-height), where (min-width/w ≤ min-height/h) -->
<div class="container">
<img class="target svg" style="min-width: 240px;min-height: 165px"
- data-expected-width="338" data-expected-height="197" data-offset-y="3" data-offset-x="62"
+ data-expected-width="338" data-expected-height="197" data-offset-y="-4" data-offset-x="59"
>
</div>
<!-- spec 8: (w < min-width) and (h < min-height), where (min-width/w > min-height/h) -->
<div class="container">
<img class="target svg" style="min-width: 220px;min-height: 180px"
- data-expected-width="338" data-expected-height="212" data-offset-y="-12" data-offset-x="62"
+ data-expected-width="338" data-expected-height="212" data-offset-y="-19" data-offset-x="59"
>
</div>
<!-- spec 9: (w < min-width) and (h > max-height) -->
<div class="container">
<img class="target svg" style="min-width: 220px; max-height: 130px"
- data-expected-width="338" data-expected-height="162" data-offset-y="38" data-offset-x="62"
+ data-expected-width="338" data-expected-height="162" data-offset-y="31" data-offset-x="59"
>
</div>
<!-- spec 10: (w > max-width) and (h < min-height) -->
<div class="container">
<img class="target svg" style="max-width: 180px; min-height: 165px"
- data-expected-width="218" data-expected-height="197" data-offset-y="3" data-offset-x="182"
+ data-expected-width="218" data-expected-height="197" data-offset-y="-4" data-offset-x="179"
>
</div>
<!-- SVG tests -->
@@ -247,26 +248,26 @@
<!-- Just viewbox. Has intrinsic aspect ratio, but no width/height -->
<div class="container">
<img class="target" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' style='fill:rgb(0,255,0);'/%3E%3C/svg%3E" style=""
- data-expected-width="338" data-expected-height="182" data-offset-y="18" data-offset-x="62"
+ data-expected-width="338" data-expected-height="182" data-offset-y="11" data-offset-x="59"
>
</div>
<!-- Just viewbox. Has aspect_ration, but no intrinsic size
inline_width defaults to container width -->
<div class="container">
<img class="target" src="data:image/svg+xml,%3Csvg viewBox='0 0 100 10' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' style='fill:rgb(0,255,0);'/%3E%3C/svg%3E"
- data-expected-width="400" data-expected-height="68" data-offset-y="132" data-offset-x="0"
+ data-expected-width="388" data-expected-height="67" data-offset-y="126" data-offset-x="9"
>
</div>
<!-- Viewbox + svg width. Has aspect_ratio and width. Height is scaled -->
<div class="container">
<img class="target" src="data:image/svg+xml,%3Csvg viewBox='0 0 100 10' width='100px' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' style='fill:rgb(0,255,0);'/%3E%3C/svg%3E"
- data-expected-width="138" data-expected-height="42" data-offset-y="158" data-offset-x="262"
+ data-expected-width="138" data-expected-height="42" data-offset-y="151" data-offset-x="259"
>
</div>
<!-- Viewbox + svg height. Has aspect_ratio and height. Width is scaled -->
<div class="container">
<img class="target" src="data:image/svg+xml,%3Csvg viewBox='0 0 100 10' height='20px' xmlns='http://www.w3.org/2000/svg' %3E%3Crect width='100%' height='100%' style='fill:rgb(0,255,0);'/%3E%3C/svg%3E"
- data-expected-width="238" data-expected-height="52" data-offset-y="148" data-offset-x="162"
+ data-expected-width="238" data-expected-height="52" data-offset-y="141" data-offset-x="159"
>
</div>
<script>
diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html b/tests/wpt/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html
index e3b3f532fef..9ad7b31c362 100644
--- a/tests/wpt/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html
+++ b/tests/wpt/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html
@@ -37,7 +37,7 @@ var validProperties = {
boxShadow: 'rgb(10, 20, 30) 10px 20px 30px 40px inset',
color: 'rgba(10, 20, 30, 0.4)',
float: 'right',
- font: 'italic small-caps 900 normal 10px / 20px sans-serif',
+ font: 'italic small-caps 900 10px / 20px sans-serif',
fontFeatureSettings: '"vert" 2',
fontSizeAdjust: '0.5',
fontKerning: 'none',
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-both.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-both.html
new file mode 100644
index 00000000000..da10f982f1f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-both.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<title>
+ Snap to a visible area only even when there is a closer snap point for an area
+ that is closer but not visible (using both axes snap type)
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#snap-scope"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+div {
+ position: absolute;
+ margin: 0px;
+}
+
+#scroller {
+ height: 600px;
+ width: 600px;
+ overflow: scroll;
+ scroll-snap-type: both mandatory;
+}
+
+#space {
+ width: 2000px;
+ height: 2000px;
+}
+
+.snap {
+ width: 200px;
+ height: 200px;
+ background-color: blue;
+ scroll-snap-align: start;
+}
+
+#left-top {
+ left: 0px;
+ top: 0px;
+}
+
+#left-bottom {
+ left: 0px;
+ top: 800px;
+}
+
+#right-top {
+ left: 800px;
+ top: 0px;
+}
+
+</style>
+<div id="scroller">
+ <div id="space"></div>
+ <div id="left-top" class="snap"></div>
+ <div id="left-bottom" class="snap"></div>
+ <div id="right-top" class="snap"></div>
+</div>
+<script>
+test(() => {
+ const scroller = document.getElementById("scroller");
+ scroller.scrollTo(0, 0);
+ assert_equals(scroller.scrollLeft, 0);
+ assert_equals(scroller.scrollTop, 0);
+ scroller.scrollTo(500, 600);
+ assert_equals(scroller.scrollLeft, 0);
+ assert_equals(scroller.scrollTop, 800);
+ scroller.scrollTo(600, 500);
+ assert_equals(scroller.scrollLeft, 800);
+ assert_equals(scroller.scrollTop, 0);
+}, 'Only snap to visible areas in the case where taking the closest snap point of \
+ each axis does not snap to a visible area');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-both.html
index 3e822db02e6..f148036a1d5 100644
--- a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas.html
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-both.html
@@ -1,5 +1,9 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1" />
+<title>
+ Snap to an area where the element's scroll-margin is visible but not the
+ element itself (using both axes snap type)
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#snap-scope"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
@@ -7,12 +11,14 @@ div {
position: absolute;
margin: 0px;
}
+
#scroller {
height: 600px;
width: 600px;
overflow: scroll;
scroll-snap-type: both mandatory;
}
+
#space {
width: 2000px;
height: 2000px;
@@ -30,57 +36,41 @@ div {
top: 0px;
}
-#right-top {
- left: 800px;
- top: 0px;
-}
-
#left-bottom {
left: 0px;
top: 800px;
+ /* 800px scroll-margin makes the snap area span to the right end of the
+ right-top area */
+ scroll-margin-right: 800px;
}
-#right-bottom {
- left: 1800px;
- top: 1800px;
- scroll-margin-top: 1000px;
- scroll-margin-left: 1000px;
+#right-top {
+ left: 800px;
+ top: 0px;
+ /* 800px scroll-margin makes the snap area span to the bottom end of the
+ left-bottom area */
+ scroll-margin-bottom: 800px;
}
</style>
<div id="scroller">
<div id="space"></div>
<div id="left-top" class="snap"></div>
- <div id="right-top" class="snap"></div>
<div id="left-bottom" class="snap"></div>
- <div id="right-bottom" class="snap"></div>
+ <div id="right-top" class="snap"></div>
</div>
<script>
-var scroller = document.getElementById("scroller");
test(() => {
+ const scroller = document.getElementById("scroller");
scroller.scrollTo(0, 0);
assert_equals(scroller.scrollLeft, 0);
assert_equals(scroller.scrollTop, 0);
- scroller.scrollTo(300, 0);
+ scroller.scrollTo(500, 600);
assert_equals(scroller.scrollLeft, 800);
- assert_equals(scroller.scrollTop, 0);
-}, 'Only snap to visible area on X axis, even when the non-visible ones are closer');
-
-test(() => {
- scroller.scrollTo(0, 0);
- assert_equals(scroller.scrollLeft, 0);
- assert_equals(scroller.scrollTop, 0);
- scroller.scrollTo(0, 300);
- assert_equals(scroller.scrollLeft, 0);
assert_equals(scroller.scrollTop, 800);
-}, 'Only snap to visible area on Y axis, even when the non-visible ones are closer');
-
-test(() => {
- scroller.scrollTo(0, 0);
- assert_equals(scroller.scrollLeft, 0);
- assert_equals(scroller.scrollTop, 0);
- scroller.scrollTo(300, 300);
+ scroller.scrollTo(600, 500);
assert_equals(scroller.scrollLeft, 800);
assert_equals(scroller.scrollTop, 800);
-}, 'snap to snap area inflated by scroll-margin, even when the non-visible ones are closer');
+}, 'Snap to area such that only the scroll margin from both axes\' areas are \
+visible');
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html
new file mode 100644
index 00000000000..dea9225a472
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<title>
+ Snap to an area where the element's scroll-margin is visible but not the
+ element itself (using x-axis snap type)
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#snap-scope"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+div {
+ position: absolute;
+ margin: 0px;
+}
+
+#scroller {
+ height: 600px;
+ width: 600px;
+ overflow: scroll;
+ scroll-snap-type: x mandatory;
+}
+
+#space {
+ width: 2000px;
+ height: 2000px;
+}
+
+.snap {
+ width: 200px;
+ height: 200px;
+ background-color: blue;
+ scroll-snap-align: start;
+}
+
+#left-visible {
+ left: 0px;
+ top: 0px;
+}
+
+#right-visible {
+ left: 800px;
+ top: 0px;
+}
+
+#middle-margin-visible {
+ left: 700px;
+ top: 800px;
+ /* 300px makes snap area visible with margin but non-visible without it */
+ scroll-margin-top: 300px;
+}
+
+</style>
+<div id="scroller">
+ <div id="space"></div>
+ <div id="left-visible" class="snap"></div>
+ <div id="middle-margin-visible" class="snap"></div>
+ <div id="right-visible" class="snap"></div>
+</div>
+<script>
+test(() => {
+ const scroller = document.getElementById("scroller");
+ scroller.scrollTo(0, 0);
+ assert_equals(scroller.scrollLeft, 0);
+ assert_equals(scroller.scrollTop, 0);
+ scroller.scrollTo(500, 0);
+ assert_equals(scroller.scrollLeft, 700);
+ assert_equals(scroller.scrollTop, 0);
+}, 'Scroll margin should be considered when calculating snap area visibilty \
+while snapping on the x-axis');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html
new file mode 100644
index 00000000000..60c54884450
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<title>
+ Snap to an area where the element's scroll-margin is visible but not the
+ element itself (using y-axis snap type)
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#snap-scope"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+div {
+ position: absolute;
+ margin: 0px;
+}
+
+#scroller {
+ height: 600px;
+ width: 600px;
+ overflow: scroll;
+ scroll-snap-type: y mandatory;
+}
+
+#space {
+ width: 2000px;
+ height: 2000px;
+}
+
+.snap {
+ width: 200px;
+ height: 200px;
+ background-color: blue;
+ scroll-snap-align: start;
+}
+
+#top-visible {
+ left: 0px;
+ top: 0px;
+}
+
+#bottom-visible {
+ left: 0px;
+ top: 800px;
+}
+
+#middle-margin-visible {
+ left: 800px;
+ top: 700px;
+ /* 300px makes snap area visible with margin but non-visible without it */
+ scroll-margin-left: 300px;
+}
+
+</style>
+<div id="scroller">
+ <div id="space"></div>
+ <div id="top-visible" class="snap"></div>
+ <div id="middle-margin-visible" class="snap"></div>
+ <div id="bottom-visible" class="snap"></div>
+</div>
+<script>
+test(() => {
+ const scroller = document.getElementById("scroller");
+ scroller.scrollTo(0, 0);
+ assert_equals(scroller.scrollLeft, 0);
+ assert_equals(scroller.scrollTop, 0);
+ scroller.scrollTo(0, 500);
+ assert_equals(scroller.scrollLeft, 0);
+ assert_equals(scroller.scrollTop, 700);
+}, 'Scroll margin should be considered when calculating snap area visibilty \
+while snapping on the y-axis');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-x-axis.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-x-axis.html
new file mode 100644
index 00000000000..b8b226f1afe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-x-axis.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<title>
+ Snap to a visible area only even when there is a closer snap point for an area
+ that is closer but not visible (using x-axis snap type)
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#snap-scope"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+div {
+ position: absolute;
+ margin: 0px;
+}
+
+#scroller {
+ height: 600px;
+ width: 600px;
+ overflow: scroll;
+ scroll-snap-type: x mandatory;
+}
+
+#space {
+ width: 2000px;
+ height: 2000px;
+}
+
+.snap {
+ width: 200px;
+ height: 200px;
+ background-color: blue;
+ scroll-snap-align: start;
+}
+
+#left-visible {
+ left: 0px;
+ top: 0px;
+}
+
+#right-visible {
+ left: 800px;
+ top: 0px;
+}
+
+#middle-not-visible {
+ left: 700px;
+ top: 800px;
+}
+
+</style>
+<div id="scroller">
+ <div id="space"></div>
+ <div id="left-visible" class="snap"></div>
+ <div id="middle-not-visible" class="snap"></div>
+ <div id="right-visible" class="snap"></div>
+</div>
+<script>
+test(() => {
+ const scroller = document.getElementById("scroller");
+ scroller.scrollTo(0, 0);
+ assert_equals(scroller.scrollLeft, 0);
+ assert_equals(scroller.scrollTop, 0);
+ scroller.scrollTo(500, 0);
+ assert_equals(scroller.scrollLeft, 800);
+ assert_equals(scroller.scrollTop, 0);
+}, 'Only snap to visible area on X axis, even when the non-visible ones are closer');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-y-axis.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-y-axis.html
new file mode 100644
index 00000000000..80d2e9946de
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas-y-axis.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<title>
+ Snap to a visible area only even when there is a closer snap point for an area
+ that is closer but not visible (using y-axis snap type)
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#snap-scope"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+div {
+ position: absolute;
+ margin: 0px;
+}
+
+#scroller {
+ height: 600px;
+ width: 600px;
+ overflow: scroll;
+ scroll-snap-type: y mandatory;
+}
+
+#space {
+ width: 2000px;
+ height: 2000px;
+}
+
+.snap {
+ width: 200px;
+ height: 200px;
+ background-color: blue;
+ scroll-snap-align: start;
+}
+
+#top-visible {
+ left: 0px;
+ top: 0px;
+}
+
+#bottom-visible {
+ left: 0px;
+ top: 800px;
+}
+
+#middle-not-visible {
+ left: 800px;
+ top: 700px;
+}
+
+</style>
+<div id="scroller">
+ <div id="space"></div>
+ <div id="top-visible" class="snap"></div>
+ <div id="middle-not-visible" class="snap"></div>
+ <div id="bottom-visible" class="snap"></div>
+</div>
+<script>
+test(() => {
+ const scroller = document.getElementById("scroller");
+ scroller.scrollTo(0, 0);
+ assert_equals(scroller.scrollLeft, 0);
+ assert_equals(scroller.scrollTop, 0);
+ scroller.scrollTo(0, 500);
+ assert_equals(scroller.scrollLeft, 0);
+ assert_equals(scroller.scrollTop, 800);
+}, 'Only snap to visible area on Y axis, even when the non-visible ones are closer');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-020.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-020.html
new file mode 100644
index 00000000000..7c8d0f119ed
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-020.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: Simple line breaking test</title>
+<link rel="author" title="Koji Ishii" href="mailto:kojiishi@gmail.com">
+<link rel="help" href="https://crbug.com/1002442">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+body {
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 12px;
+}
+p {
+ width: 460px;
+}
+</style>
+<body>
+<p>
+abschließend geklärt. Allerdings scheint eine gewisse <b>genetische Veranlagung</b> eine
+Zahl der Typ-1-Diabetiker gerade unter Kleinkindern stetig wächst. Daher rücken auch <b>Virusinfektionen</b> in den Fokus
+</p>
+<script>
+test(() => {
+ for (let e of document.getElementsByTagName('b')) {
+ let bounds = e.getBoundingClientRect();
+ assert_less_than_equal(bounds.x + bounds.width, 460);
+ }
+});
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/cssom/font-shorthand-serialization.html b/tests/wpt/web-platform-tests/css/cssom/font-shorthand-serialization.html
index 6f6834a7509..29082f83eaf 100644
--- a/tests/wpt/web-platform-tests/css/cssom/font-shorthand-serialization.html
+++ b/tests/wpt/web-platform-tests/css/cssom/font-shorthand-serialization.html
@@ -10,8 +10,8 @@
<script>
test(function() {
var target = document.getElementById('target');
- assert_equals(target.style.cssText, 'font: 10px/1 Ahem;');
- assert_equals(target.style.font, '10px/1 Ahem');
+ assert_equals(target.style.cssText, 'font: 10px / 1 Ahem;');
+ assert_equals(target.style.font, '10px / 1 Ahem');
}, "The font shorthand should be serialized just like any other shorthand.");
</script>
</html>
diff --git a/tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html b/tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html
index 0d1ba1c8875..04f4d4b3bd7 100644
--- a/tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html
+++ b/tests/wpt/web-platform-tests/css/motion/animation/offset-interpolation.html
@@ -92,15 +92,6 @@
{at: 1, expect: 'path("M0 0H 300") 600px 0deg'},
{at: 1.5, expect: 'path("M0 0H 300") 650px 0deg'},
]);
-
- // Regression test for crbug.com/994489
- test_interpolation({
- property: 'offset',
- from: 'path("M0 0H 200") 500px auto',
- to: 'path("M0 0H 300") 600px 0deg',
- }, [
- {at: 3.40282e+038, expect: 'path("M0 0H 3.4e+38") 3.36e+07px 0deg'},
- ]);
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html b/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html
index 974727f92aa..848828810f1 100644
--- a/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html
+++ b/tests/wpt/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html
@@ -263,4 +263,207 @@
assert_equals(lightParent.ariaActiveDescendantElement, optionElement);
}, "Reparenting an element into a descendant shadow scope nullifies the element reference.");
</script>
+
+ <div id="myBillingId">Billing</div>
+
+ <div>
+ <div id="myNameId">Name</div>
+ <input type="text" id="input1" aria-labelledby="myBillingId myNameId"/>
+ </div>
+ <div>
+ <div id="myAddressId">Address</div>
+ <input type="text" id="input2"/>
+ </div>
+
+ <script>
+ test(function(t) {
+ const billingElement = document.getElementById("myBillingId");
+ const nameElement = document.getElementById("myNameId");
+ const addressElement = document.getElementById("myAddressId");
+ const input1 = document.getElementById("input1");
+ const input2 = document.getElementById("input2");
+
+ assert_array_equals(input1.ariaLabelledByElements, [billingElement, nameElement], "parsed content attribute sets element references.");
+ assert_equals(input2.ariaLabelledByElements, null, "Testing empty content attribute after parsing.");
+
+ input2.ariaLabelledByElements = [billingElement, addressElement];
+ assert_array_equals(input2.ariaLabelledByElements, [billingElement, addressElement], "Testing IDL setter/getter.");
+ assert_equals(input2.getAttribute("aria-labelledby"), "myBillingId myAddressId");
+
+ billingElement.remove();
+ assert_array_equals(input2.ariaLabelledByElements, [addressElement]);
+
+ input2.ariaLabelledByElements = [];
+ assert_array_equals(input2.ariaLabelledByElements, [], "Testing IDL setter/getter for empty array.");
+ assert_equals(input2.getAttribute("aria-labelledby"), "");
+
+ input1.removeAttribute("aria-labelledby");
+ assert_equals(input1.ariaLabelledByElements, null);
+ }, "aria-labelledby.");
+ </script>
+
+ <ul role="tablist">
+ <li role="presentation"><a id="link1" role="tab" aria-controls="panel1">Tab 1</a></li>
+ <li role="presentation"><a id="link2" role="tab">Tab 2</a></li>
+ </ul>
+
+ <div role="tabpanel" id="panel1"></div>
+ <div role="tabpanel" id="panel2"></div>
+
+ <script>
+ test(function(t) {
+ const link1 = document.getElementById("link1");
+ const link2 = document.getElementById("link2");
+ const panel1 = document.getElementById("panel1");
+ const panel2 = document.getElementById("panel2");
+ assert_array_equals(link1.ariaControlsElements, [panel1]);
+ assert_equals(link2.ariaControlsElements, null);
+
+ link2.setAttribute("aria-controls", "panel1 panel2");
+ assert_array_equals(link2.ariaControlsElements, [panel1, panel2]);
+
+ link1.ariaControlsElements = [];
+ assert_equals(link1.getAttribute("aria-controls"), "");
+
+ link2.ariaControlsElements = [panel1, panel2];
+ assert_equals(link2.getAttribute("aria-controls"), "panel1 panel2");
+
+ link2.removeAttribute("aria-controls");
+ assert_equals(link2.ariaControlsElements, null);
+ }, "aria-controls.");
+ </script>
+
+ <a id="described-link" aria-describedby="description1 description2">Fruit</a>
+ <div id="description1">Delicious</div>
+ <div id="description2">Nutritious</div>
+
+ <script>
+ test(function(t) {
+ const link = document.getElementById("described-link");
+ const description1 = document.getElementById("description1");
+ const description2 = document.getElementById("description2");
+ assert_array_equals(link.ariaDescribedByElements, [description1, description2]);
+
+ link.ariaDescribedByElements = [description1, description2];
+ assert_equals(link.getAttribute("aria-describedby"), "description1 description2");
+
+ link.ariaDescribedByElements = [];
+ assert_equals(link.getAttribute("aria-describedby"), "");
+
+ link.setAttribute("aria-describedby", "description1");
+ assert_array_equals(link.ariaDescribedByElements, [description1]);
+
+ link.removeAttribute("aria-describedby");
+ assert_equals(link.ariaDescribedByElements, null);
+ }, "aria-describedby.");
+ </script>
+
+ <h2 id="title-heading" aria-flowto="article1 article2">Title</h2>
+ <div>Next</div>
+ <article id="article2">Content2</article>
+ <article id="article1">Content1</article>
+
+ <script>
+ test(function(t) {
+ const heading = document.getElementById("title-heading");
+ const article1 = document.getElementById("article1");
+ const article2 = document.getElementById("article2");
+
+ assert_array_equals(heading.ariaFlowToElements, [article1, article2]);
+
+ heading.ariaFlowToElements = [article1, article2];
+ assert_equals(heading.getAttribute("aria-flowto"), "article1 article2");
+
+ heading.ariaFlowToElements = [];
+ assert_equals(heading.getAttribute("aria-flowto"), "");
+
+ heading.setAttribute("aria-flowto", "article1");
+ assert_array_equals(heading.ariaFlowToElements, [article1]);
+
+ heading.removeAttribute("aria-flowto");
+ assert_equals(heading.ariaFlowToElements, null);
+ }, "aria-flowto.");
+ </script>
+
+ <ul>
+ <li id="li-owner" aria-owns="child1 child2">Parent</li>
+ </ul>
+ <ul>
+ <li id="child1">Child 1</li>
+ <li id="child2">Child 2</li>
+ </ul>
+ <script>
+ test(function(t) {
+ const owner = document.getElementById("li-owner");
+ const child1 = document.getElementById("child1");
+ const child2 = document.getElementById("child2");
+
+ assert_array_equals(owner.ariaOwnsElements, [child1, child2]);
+
+ owner.removeAttribute("aria-owns");
+ assert_equals(owner.ariaOwnsElements, null);
+
+ owner.ariaOwnsElements = [child1, child2];
+ assert_equals(owner.getAttribute("aria-owns"), "child1 child2");
+
+ owner.ariaOwnsElements = [];
+ assert_equals(owner.getAttribute("aria-owns"), "");
+
+ owner.setAttribute("aria-owns", "child1");
+ assert_array_equals(owner.ariaOwnsElements, [child1]);
+ }, "aria-owns.");
+ </script>
+
+ <div id="light-dom-container">
+ <h2 id="light-dom-heading" aria-flowto="shadow-child-1 shadow-child-2">Light DOM Heading</h2>
+ <div id="shadow-dom-host"></div>
+ <p id="light-dom-text-1">Light DOM text</p>
+ <p id="light-dom-text-2">Light DOM text</p>
+ </div>
+
+ <script>
+ test(function(t) {
+ const shadowHost = document.getElementById("shadow-dom-host");
+ const lightDomHeading = document.getElementById("light-dom-heading");
+ const lightDomText1 = document.getElementById("light-dom-text-1");
+ const lightDomText2 = document.getElementById("light-dom-text-2");
+
+ const shadowRoot = shadowHost.attachShadow({mode: "open"});
+ const shadowChild1 = document.createElement("article");
+ shadowChild1.setAttribute("id", "shadow-child-1");
+ shadowRoot.appendChild(shadowChild1);
+ const shadowChild2 = document.createElement("article");
+ shadowChild2.setAttribute("id", "shadow-child-1");
+ shadowRoot.appendChild(shadowChild2);
+
+ // The elements in the content attribute are in a "darker" tree - they
+ // enter a shadow encapsulation boundary, so should reflect null for
+ // the content attribute.
+ assert_equals(lightDomHeading.ariaFlowToElements, null);
+
+ // These elements are in a shadow including ancestor, i.e "lighter" tree.
+ // Valid for the IDL attribute, but content attribute should be null.
+ shadowChild1.ariaFlowToElements = [lightDomText1, lightDomText2];
+ assert_equals(shadowChild1.getAttribute("aria-flowto"), "", "empty content attribute for elements that cross shadow boundaries.");
+
+ // These IDs belong to a different scope, so the attr-associated-element
+ // cannot be computed.
+ shadowChild2.setAttribute("aria-flowto", "light-dom-text-1 light-dom-text-2");
+ assert_equals(shadowChild2.ariaFlowToElements, null);
+
+ // Elements that cross into shadow DOM are dropped, only reflect the valid
+ // elements in IDL and in the content attribute.
+ lightDomHeading.ariaFlowToElements = [shadowChild1, shadowChild2, lightDomText1, lightDomText2];
+ assert_array_equals(lightDomHeading.ariaFlowToElements, [lightDomText1, lightDomText2]);
+ assert_equals(lightDomHeading.getAttribute("aria-flowto"), "light-dom-text-1 light-dom-text-2", "empty content attribute if any given elements cross shadow boundaries");
+
+ // Using a mixture of elements in the same scope and in a shadow including
+ // ancestor should set the IDL attribute, but should reflect the empty
+ // string in the content attribute.
+ shadowChild1.removeAttribute("aria-flowto");
+ shadowChild1.ariaFlowToElements = [shadowChild1, lightDomText1];
+ assert_equals(shadowChild1.getAttribute("aria-flowto"), "", "Setting IDL elements with a mix of scopes should reflect an empty string in the content attribute")
+
+ }, "shadow DOM behaviour for FrozenArray element reflection.");
+ </script>
</html>
diff --git a/tests/wpt/web-platform-tests/html/dom/elements/global-attributes/dataset-set.html b/tests/wpt/web-platform-tests/html/dom/elements/global-attributes/dataset-set.html
index 722b17977e4..dbce5de309a 100644
--- a/tests/wpt/web-platform-tests/html/dom/elements/global-attributes/dataset-set.html
+++ b/tests/wpt/web-platform-tests/html/dom/elements/global-attributes/dataset-set.html
@@ -17,25 +17,27 @@
}
test(function() { assert_true(testSet('foo', 'data-foo')); },
- "Setting element.dataset['foo'] should also change the value of element.getAttribute('data-foo')'");
+ "Setting element.dataset['foo'] should also change the value of element.getAttribute('data-foo')");
test(function() { assert_true(testSet('fooBar', 'data-foo-bar')); },
- "Setting element.dataset['fooBar'] should also change the value of element.getAttribute('data-foo-bar')'");
+ "Setting element.dataset['fooBar'] should also change the value of element.getAttribute('data-foo-bar')");
test(function() { assert_true(testSet('-', 'data--')); },
- "Setting element.dataset['-'] should also change the value of element.getAttribute('data--')'");
+ "Setting element.dataset['-'] should also change the value of element.getAttribute('data--')");
test(function() { assert_true(testSet('Foo', 'data--foo')); },
- "Setting element.dataset['Foo'] should also change the value of element.getAttribute('data--foo')'");
+ "Setting element.dataset['Foo'] should also change the value of element.getAttribute('data--foo')");
test(function() { assert_true(testSet('-Foo', 'data---foo')); },
- "Setting element.dataset['-Foo'] should also change the value of element.getAttribute('data---foo')'");
+ "Setting element.dataset['-Foo'] should also change the value of element.getAttribute('data---foo')");
test(function() { assert_true(testSet('', 'data-')); },
- "Setting element.dataset[''] should also change the value of element.getAttribute('data-')'");
+ "Setting element.dataset[''] should also change the value of element.getAttribute('data-')");
test(function() { assert_true(testSet('\xE0', 'data-\xE0')); },
- "Setting element.dataset['\xE0'] should also change the value of element.getAttribute('data-\xE0')'");
+ "Setting element.dataset['\xE0'] should also change the value of element.getAttribute('data-\xE0')");
test(function() { assert_throws('SYNTAX_ERR', function() { testSet('-foo', 'dummy') }); },
- "Setting element.dataset['-foo'] should throw a SYNTAX_ERR'");
+ "Setting element.dataset['-foo'] should throw a SYNTAX_ERR");
test(function() { assert_throws('INVALID_CHARACTER_ERR', function() { testSet('foo\x20', 'dummy') }); },
- "Setting element.dataset['foo\x20'] should throw an INVALID_CHARACTER_ERR'");
- test(function() { assert_throws('INVALID_CHARACTER_ERR', function() { testSet('foo\uF900', 'dummy') }); },
- "Setting element.dataset['foo\uF900'] should throw an INVALID_CHARACTER_ERR'");
+ "Setting element.dataset['foo\x20'] should throw an INVALID_CHARACTER_ERR");
+ test(function() { assert_throws('INVALID_CHARACTER_ERR', function() { testSet('\u037Efoo', 'dummy') }); },
+ "Setting element.dataset['\u037Efoo'] should throw an INVALID_CHARACTER_ERR");
+ test(function() { assert_true(testSet('\u0BC6foo', 'data-\u0BC6foo')); },
+ "Setting element.dataset['\u0BC6foo'] should also change the value of element.getAttribute('\u0BC6foo')");
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/child-iframe.html b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/child-iframe.html
new file mode 100644
index 00000000000..2645a180e48
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/child-iframe.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<script src="/common/get-host-info.sub.js"></script>
+<iframe id="iframe" width="200" height="100"></iframe>
+
+<script>
+ iframe.src =
+ get_host_info().ORIGIN + "/html/semantics/forms/autofocus/resources/grand-child-autofocus.html";
+ window.addEventListener("message", event => {
+ if (event.data == "grand_child_loaded") {
+ parent.postMessage("ready", "*");
+ } else if (event.data == "report_focus_state") {
+ frames[0].postMessage("report_focus_state", "*");
+ } else if (event.data == "grand_child_is_focused" ||
+ event.data == "grand_child_is_not_focused") {
+ parent.postMessage(event.data, "*");
+ }
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/grand-child-autofocus.html b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/grand-child-autofocus.html
new file mode 100644
index 00000000000..88be6e0b04a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/resources/grand-child-autofocus.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<input id="target" value="This should be focused!" autofocus></input>
+
+<script>
+ let got_focus = false;
+ target.addEventListener("focus", () => got_focus = true);
+
+ window.addEventListener("load", () => {
+ parent.postMessage("grand_child_loaded", "*");
+ });
+
+ window.addEventListener("message", event => {
+ if (event.data == "report_focus_state") {
+ let msg = got_focus ? "grand_child_is_focused" : "grand_child_is_not_focused";
+ parent.postMessage(msg, "*");
+ }
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/same-origin-autofocus.html b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/same-origin-autofocus.html
new file mode 100644
index 00000000000..9cfcdb925cf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/same-origin-autofocus.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+<head>
+<meta charset=utf-8>
+<meta name="assert" content="`autofocus` should work in the same origin iframe even if there is a cross-origin iframe between the parent and the same origin iframe">
+<title>autofocus in the same origin grand child iframe</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+</head>
+<body>
+ <h1>Autofocus should work in the same origin grand child iframe.</h1>
+ <iframe id="child" width="200" height="100"></iframe>
+ <script>
+ let parent_loaded = false;
+ let grand_child_loaded = false;
+
+ async_test(function(t) {
+ function pingChildIfBothFramesLoaded() {
+ if (parent_loaded && grand_child_loaded)
+ frames[0].postMessage("report_focus_state", "*");
+ }
+
+ window.addEventListener("load", t.step_func(event => {
+ parent_loaded = true;
+ pingChildIfBothFramesLoaded();
+ }));
+
+ window.addEventListener("message", t.step_func(event => {
+ if (event.data == "ready") {
+ grand_child_loaded = true;
+ pingChildIfBothFramesLoaded();
+ } else if (event.data == "grand_child_is_focused") {
+ t.done();
+ } else if (event.data == "grand_child_is_not_focused") {
+ assert_unreached("The iframe shouldn't get focus");
+ }
+ }));
+ document.getElementById("child").src =
+ get_host_info().HTTP_NOTSAMESITE_ORIGIN + "/html/semantics/forms/autofocus/resources/child-iframe.html";
+ }, "Autofocus should work in the same origin grand child iframe");
+ </script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/skip-not-fully-active.html b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/skip-not-fully-active.html
index 32008b3019e..104dd5a4a5e 100644
--- a/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/skip-not-fully-active.html
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/autofocus/skip-not-fully-active.html
@@ -9,10 +9,18 @@
'use strict';
promise_test(async () => {
+ let doc = document.cloneNode(false);
+ doc.appendChild(doc.createElement('html'))
+ doc.firstChild.innerHTML = '<body><input autofocus/></body>';
+ await waitUntilStableAutofocusState();
+ assert_equals(doc.activeElement, doc.body);
+}, 'Autofocus element in not-fully-active document should not be queued.');
+
+promise_test(async () => {
let iframe = document.querySelector('iframe');
let iframeDocument = iframe.contentDocument;
await waitForLoad(window);
assert_not_equals(document.activeElement, iframe);
assert_equals(iframeDocument.activeElement, iframeDocument.body);
-}, 'Autofocus element in not-fully-active document should be skipped.');
+}, 'Autofocus element in not-fully-active document should be skipped while flusing.');
</script>
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html
new file mode 100644
index 00000000000..1584ca5f972
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/closing-the-input-stream/document-close-with-pending-script.html
@@ -0,0 +1,67 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>document.close called while a script is pending</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<body>
+ <script>
+ window.t = async_test();
+ // We want start a document load, create an non-blocking script load inside
+ // it, have the parser complete, then call document.open()/document.close()
+ // after the parser is done but before the non-blocking script load
+ // completes. After we do that, the document should reach the 'complete'
+ // ready state and the iframe's load event should fire.
+ var loadFired = false;
+ var i;
+
+ var finish = t.step_func_done(() => {
+ assert_equals(loadFired, true, "Should have fired a load event");
+ assert_equals(i.contentDocument.readyState, "complete",
+ "Should be fully loaded");
+ });
+
+ var checkForLoad = t.step_func(() => {
+ if (loadFired) {
+ finish();
+ } else {
+ i.addEventListener("load", finish);
+ }
+ });
+
+ window.parserDone = t.step_func(() => {
+ var doc = i.contentDocument;
+ i.onload = () => { loadFired = true; }
+ doc.open();
+ doc.close();
+ // It's not very clearly specced whether the document is
+ // supposed to be fully loaded at this point or not, so allow
+ // that to be the case, or to happen soonish.
+ assert_true(doc.readyState == "interactive" ||
+ doc.readyState == "complete", "Should be almost loaded");
+ if (doc.readyState == "complete") {
+ checkForLoad();
+ } else {
+ doc.addEventListener("readystatechange", checkForLoad);
+ }
+ });
+
+ t.step(() => {
+ i = document.createElement("iframe");
+ i.srcdoc = `
+ <script>
+ parent.t.step(() => {
+ var s = document.createElement("script");
+ s.src = "/common/slow.py";
+ document.documentElement.appendChild(s);
+ // Call into the parent async, so we finish our "end of parse"
+ // work before it runs.
+ document.addEventListener(
+ "DOMContentLoaded",
+ () => parent.t.step_timeout(parent.parserDone, 0));
+ });
+ <\/script>
+ `;
+ document.body.appendChild(i);
+ });
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini
index f9be6a64bdf..c9fbabede6d 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini
@@ -1,10 +1,8 @@
[allowed-to-play.html]
expected:
- if product == "edge_webdriver": TIMEOUT
if product == "safari": ERROR # https://bugs.webkit.org/show_bug.cgi?id=190775
[<audio> autoplay]
expected:
- if product == "edge_webdriver": TIMEOUT
if product == "safari": FAIL # https://bugs.webkit.org/show_bug.cgi?id=190775
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini
index 4be883a5cf7..67caa470342 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini
@@ -1,9 +1,4 @@
[html-elements.html]
- [(pre-req for comparison tests) all CSS short-hand supported]
- expected:
- if product == "edge_webdriver": FAIL
-
-
[Compare CSS span definitions (only valid if pre-reqs pass)]
expected:
if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=187052
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/reftest/size.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/reftest/size.html.ini
deleted file mode 100644
index 1c6cd9eff89..00000000000
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/reftest/size.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[size.html]
- type: reftest
- expected:
- if product == "edge_webdriver": FAIL # https://github.com/web-platform-tests/wpt/issues/15159
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
index 9667d4d251e..c3431d687b6 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
@@ -1,7 +1,6 @@
[context.any.sharedworker.html]
[context]
expected:
- if product == "edge_webdriver": FAIL
if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850
[context.any.serviceworker.html]
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini
index a62ae82b9be..8db9536e38c 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.any.js.ini
@@ -1,27 +1,6 @@
-[order-of-metas.any.worker.html]
- expected:
- if product == "edge_webdriver": TIMEOUT
-
-
-[order-of-metas.any.html]
- [<meta name=timeout> exists]
- expected:
- if product == "edge_webdriver": FAIL
-
-
[order-of-metas.any.sharedworker.html]
- [foo\n]
- expected:
- if product == "edge_webdriver": FAIL
-
-
[foo]
expected:
- if product == "edge_webdriver": FAIL
if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850
-[order-of-metas.window.html]
- [<meta name=timeout> exists]
- expected:
- if product == "edge_webdriver": FAIL
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.window.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.window.js.ini
deleted file mode 100644
index 20e4cbad939..00000000000
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/order-of-metas.window.js.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[order-of-metas.window.html]
- [<meta name=timeout> exists]
- expected:
- if product == "edge_webdriver": FAIL
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini
index 0a602b9ae26..5f5ed991cf1 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/secure-context.https.any.js.ini
@@ -1,7 +1,6 @@
[secure-context.https.any.sharedworker.html]
[secure-context]
expected:
- if product == "edge_webdriver": FAIL
if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850
[secure-context.https.any.serviceworker.html]
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini
index 6f7fed9dc06..e2a7b5578c3 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/title.any.js.ini
@@ -1,20 +1,6 @@
-[title.any.html]
- [foobar\n]
- expected:
- if product == "edge_webdriver": FAIL
-
-
[title.any.sharedworker.html]
- [foobar\n]
- expected:
- if product == "edge_webdriver": FAIL
-
-
[foobar]
expected:
if product == "safari" or product == "epiphany" or product == "webkit": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850
-[title.any.worker.html]
- expected:
- if product == "edge_webdriver": TIMEOUT
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini
index a39640b714b..e2bfbf8fb8f 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini
@@ -1,7 +1,4 @@
[file_upload.sub.html]
- expected:
- if product == "edge_webdriver": ERROR
-
[File upload using testdriver]
expected:
if product == "epiphany" or product == "webkit": FAIL
diff --git a/tests/wpt/web-platform-tests/interfaces/mediacapture-streams.idl b/tests/wpt/web-platform-tests/interfaces/mediacapture-streams.idl
index d83777c5d29..e82bf36f3d7 100644
--- a/tests/wpt/web-platform-tests/interfaces/mediacapture-streams.idl
+++ b/tests/wpt/web-platform-tests/interfaces/mediacapture-streams.idl
@@ -3,11 +3,11 @@
// (https://github.com/tidoust/reffy-reports)
// Source: Media Capture and Streams (https://w3c.github.io/mediacapture-main/)
-[Exposed=Window,
- Constructor,
- Constructor(MediaStream stream),
- Constructor(sequence<MediaStreamTrack> tracks)]
+[Exposed=Window]
interface MediaStream : EventTarget {
+ constructor();
+ constructor(MediaStream stream);
+ constructor(sequence<MediaStreamTrack> tracks);
readonly attribute DOMString id;
sequence<MediaStreamTrack> getAudioTracks();
sequence<MediaStreamTrack> getVideoTracks();
@@ -37,7 +37,7 @@ interface MediaStreamTrack : EventTarget {
MediaTrackCapabilities getCapabilities();
MediaTrackConstraints getConstraints();
MediaTrackSettings getSettings();
- Promise<void> applyConstraints(optional MediaTrackConstraints constraints);
+ Promise<void> applyConstraints(optional MediaTrackConstraints constraints = {});
};
enum MediaStreamTrackState {
@@ -133,8 +133,9 @@ enum VideoResizeModeEnum {
"crop-and-scale"
};
-[Exposed=Window, Constructor(DOMString type, MediaStreamTrackEventInit eventInitDict)]
+[Exposed=Window]
interface MediaStreamTrackEvent : Event {
+ constructor(DOMString type, MediaStreamTrackEventInit eventInitDict);
[SameObject] readonly attribute MediaStreamTrack track;
};
@@ -180,7 +181,7 @@ partial interface Navigator {
partial interface MediaDevices {
MediaTrackSupportedConstraints getSupportedConstraints();
- Promise<MediaStream> getUserMedia(optional MediaStreamConstraints constraints);
+ Promise<MediaStream> getUserMedia(optional MediaStreamConstraints constraints = {});
};
dictionary MediaStreamConstraints {
diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/image-inside-svg.html b/tests/wpt/web-platform-tests/largest-contentful-paint/image-inside-svg.html
new file mode 100644
index 00000000000..5fff9e47f64
--- /dev/null
+++ b/tests/wpt/web-platform-tests/largest-contentful-paint/image-inside-svg.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Largest Contentful Paint: observe image inside SVG</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/largest-contentful-paint-helpers.js"></script>
+<script>
+async_test(function (t) {
+ if (!window.PerformanceElementTiming) {
+ assert_unreached("PerformanceElementTiming is not implemented");
+ }
+ const beforeLoad = performance.now();
+ new PerformanceObserver(
+ t.step_func_done(entryList => {
+ assert_equals(entryList.getEntries().length, 1);
+ const entry = entryList.getEntries()[0];
+ const url = window.location.origin + '/images/blue.png';
+ // blue.png is 133 by 106.
+ const size = 133 * 106;
+ checkImage(entry, url, 'image_id', size, beforeLoad);
+ })
+ ).observe({type: 'largest-contentful-paint', buffered: true});
+}, "Image inside SVG is observable.");
+</script>
+<svg width="300" height="300" id='svg_id'>
+ <image href='/images/blue.png' id='image_id'/>
+</svg>
diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/image-not-fully-visible.html b/tests/wpt/web-platform-tests/largest-contentful-paint/image-not-fully-visible.html
new file mode 100644
index 00000000000..cec488c1c89
--- /dev/null
+++ b/tests/wpt/web-platform-tests/largest-contentful-paint/image-not-fully-visible.html
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Largest Contentful Paint: size when image overflows</title>
+<!-- In this test, an image with an intrinsic size of 100 x 50 is added, but
+ scaled up in order to overflow the viewport. -->
+<body>
+<style>
+body {
+ /* Preventing a scrollbar from showing and removing any margins simplifies
+ the calculations below. */
+ overflow: hidden;
+ margin: 0px;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/largest-contentful-paint-helpers.js"></script>
+<script>
+ let beforeRender;
+ const viewportWidth = document.documentElement.clientWidth;
+ const viewportHeight = document.documentElement.clientHeight;
+ async_test(function (t) {
+ if (!window.PerformanceElementTiming) {
+ assert_unreached("PerformanceElementTiming is not implemented");
+ }
+ const beforeLoad = performance.now();
+ new PerformanceObserver(
+ t.step_func_done(function(entryList) {
+ assert_equals(entryList.getEntries().length, 1);
+ const entry = entryList.getEntries()[0];
+ const url = window.location.origin + '/images/green-100x50.png';
+ // To compute the size, compute the percentage of the image visible and
+ // scale by its natural dimensions. In this test, the image is twice
+ // the viewport width and twice the viewport height, so it is
+ // effectively clipped to 50% by 50% of its display size. Scaling by
+ // its natural width and height of 100px and 50px respectively, leads
+ // to a weighted size of 50 by 25.
+ const truncatedWidth = 100 / 2;
+ const truncatedHeight = 50 / 2;
+ const weightedSize = truncatedWidth * truncatedHeight;
+ checkImage(entry, url, 'image_id', weightedSize, beforeLoad);
+ })
+ ).observe({type: 'largest-contentful-paint', buffered: true});
+ // Add an image, setting width and height equal to viewport.
+ img = document.createElement('img');
+ img.src = '/images/green-100x50.png';
+ img.id = 'image_id';
+ img.width = viewportWidth * 2;
+ img.height = viewportHeight * 2;
+ document.body.appendChild(img);
+ }, 'The intersectionRect of an img element overflowing is computed correctly');
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-bar-002-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-bar-002-ref.html
new file mode 100644
index 00000000000..9d5eef896ab
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-bar-002-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>fractions bar</title>
+ <style type="text/css">
+ #green {
+ position: absolute;
+ background: green;
+ width: 150px;
+ height: 150px;
+ left: 50px;
+ top: 50px;
+ }
+ </style>
+ </head>
+ <body>
+ <p>This test passes if you see a green <strong>square</strong> and no red.</p>
+ <div>
+ <div id="green"></div>
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-bar-002.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-bar-002.html
new file mode 100644
index 00000000000..ccf1bd904e7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-bar-002.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+ <head>
+ <meta charset="utf-8">
+ <title>fractions bar</title>
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fractions-mfrac">
+ <meta name="assert" content="Verify painting of the fraction bar when margin/padding/border are involved.">
+ <link rel="match" href="frac-bar-002-ref.html">
+ <style type="text/css">
+ @font-face {
+ font-family: TestFont;
+ src: url("/fonts/math/fraction-rulethickness10000.woff");
+ }
+ math {
+ /* FractionRuleThickness = 10000 * 1 / 1000 = 10px; */
+ /* The gap / shift / axisheight parameters are set to 0. */
+ font-family: "TestFont";
+ font-size: 1px;
+ }
+ #container {
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+ #red {
+ position: absolute;
+ background: red;
+ margin: 1px;
+ width: 148px;
+ height: 148px;
+ }
+ </style>
+ <script src="/common/reftest-wait.js"></script>
+ <script>
+ window.addEventListener("load", () => { document.fonts.ready.then(adjustPositionOfFraction); });
+
+ function adjustPositionOfFraction()
+ {
+ requestAnimationFrame(() => {
+ var container = document.getElementById("container");
+ var red = document.getElementById("red");
+ var numeratorBox = document.getElementById("numerator").getBoundingClientRect();
+ const shift = 50;
+ const numeratorMargin = 20;
+
+ /* Move the red square at the expected position,
+ with a 1px gap to avoid antialiasing issues. */
+ red.style.left = `${shift}px`;
+ red.style.top = `${shift}px`;
+
+ /* Move the fraction bar at the expected position. */
+ container.style.left = (shift - numeratorBox.left + numeratorMargin) + "px";
+ container.style.top = (shift - numeratorBox.bottom - numeratorMargin) + "px";
+ requestAnimationFrame(takeScreenshot);
+ });
+ }
+ </script>
+ </head>
+ <body>
+ <p>This test passes if you see a green <strong>square</strong> and no red.</p>
+ <div>
+ <div id="red"></div>
+ <div id="container">
+ <math>
+ <!-- border, padding and margin should not affect the width of the fraction bar. -->
+ <mfrac style="color: green; font-size: 15em;
+ border: 30px solid transparent;
+ padding: 60px; margin: 120px;
+ ">
+ <!-- the bar width is the one of the numerator margin box i.e. 80 + 2 * (5 + 10 + 20) = 150px -->
+ <mspace id="numerator" width="80px"
+ style="border: 5px solid transparent;
+ padding: 10px; margin: 20px;"></mspace>
+ <mspace></mspace>
+ </mfrac>
+ </math>
+ </div>
+ </div>
+ <script src="/mathml/support/feature-detection.js"></script>
+ <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mfrac");</script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-default-padding-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-default-padding-ref.html
new file mode 100644
index 00000000000..93d3e0162b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-default-padding-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>fraction default padding</title>
+ </head>
+ <body>
+ <p>This test passes if you see three green squares of same size, separated by a gap of one pixel.</p>
+ <div>
+ <math>
+ <mspace width="150px" height="75px" depth="75px" style="background: green"/>
+ <mspace width="1px"/>
+ <mspace width="150px" height="75px" depth="75px" style="background: green"/>
+ <mspace width="1px"/>
+ <mspace width="150px" height="75px" depth="75px" style="background: green"/>
+ </math>
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-default-padding.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-default-padding.html
new file mode 100644
index 00000000000..b68bb873ced
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/fractions/frac-default-padding.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>fraction default padding</title>
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fractions-mfrac">
+ <meta name="assert" content="Verifies 1px padding is added around each side of the fraction.">
+ <link rel="match" href="frac-default-padding-ref.html">
+ <style type="text/css">
+ @font-face {
+ font-family: TestFont;
+ src: url("/fonts/math/fraction-rulethickness10000.woff");
+ }
+ math {
+ /* FractionRuleThickness = 10000 * 1 / 1000 = 10px; */
+ /* The gap / shift / axisheight parameters are set to 0. */
+ font-family: "TestFont";
+ font-size: 1px;
+ }
+ </style>
+ </head>
+ <body>
+ <p>This test passes if you see three green squares of same size, separated by a gap of one pixel.</p>
+ <div>
+ <math>
+ <mspace width="150px" height="75px" depth="75px" style="background: green"/>
+ <mfrac style="color: green; font-size: 15em">
+ <mspace id="numerator" width="150px"></mspace>
+ <mspace></mspace>
+ </mfrac>
+ <mspace width="150px" height="75px" depth="75px" style="background: green"/>
+ </math>
+ </div>
+ <script src="/mathml/support/feature-detection.js"></script>
+ <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mfrac");</script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html
index b36894e98f6..d50cac50de3 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html
@@ -20,7 +20,7 @@
}
</style>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
- <link rel="match" href="mo-movablelimits-ref.html">
+ <link rel="match" href="mo-movablelimits-from-in-flow-ref.html">
</head>
<body>
<math>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/cramped-001.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/cramped-001.html
index 2be1c8ad2e8..d0e636c022e 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/cramped-001.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/cramped-001.html
@@ -118,7 +118,7 @@
test(function() {
assert_true(MathMLFeatureDetection.has_mspace());
assert_cramped("munderover-001", false, "base");
- assert_cramped("munderover-002", false, "underscript");
+ assert_cramped("munderover-002", true, "underscript");
assert_cramped("munderover-003", false, "non-accent overscript");
}, "child of munderover");
@@ -195,7 +195,7 @@
test(function() {
assert_true(MathMLFeatureDetection.has_mspace());
assert_cramped("munderover-011", false, "base");
- assert_cramped("munderover-012", false, "underscript");
+ assert_cramped("munderover-012", true, "underscript");
assert_cramped("munderover-013", false, "non-accent overscript");
}, "child of munderover, from in-flow children");
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-001.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-001.html
new file mode 100644
index 00000000000..f967f62a22b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-001.html
@@ -0,0 +1,286 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Basic table layout</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#table-or-matrix-mtable">
+<meta name="assert" content="Verify position of cells in basic 2x2, 4x3 and 3x4 math tables.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mathml/support/feature-detection.js"></script>
+<script>
+ setup({ explicit_done: true });
+ window.addEventListener("load", runTests);
+ function runTests() {
+ Array.from(document.getElementsByTagName("mtable")).forEach(table => {
+ const id = table.getAttribute("id");
+ const rtl = window.getComputedStyle(table).direction === "rtl";
+ test(function() {
+ assert_true(MathMLFeatureDetection.has_mspace());
+ const rows = Array.from(table.getElementsByTagName("mtr"));
+ for (var j = 0; j < rows.length; j++) {
+ var cells = Array.from(rows[j].getElementsByTagName("mtd"));
+ for (var i = 0; i < cells.length - 1; i++) {
+ var space1 = cells[i].firstElementChild.getBoundingClientRect();
+ var space2 = cells[i + 1].firstElementChild.getBoundingClientRect();
+ assert_equals(space1.top, space2.top,
+ `Cells (${i},${j}) and (${i + 1},${j}) should have same vertical position`);
+ if (rtl) {
+ assert_greater_than(space1.left, space2.right,
+ `Cell (${i},${j}) should be on the right of (${i + 1},${j})`);
+ } else {
+ assert_less_than(space1.right, space2.left,
+ `Cell (${i},${j}) should be on the left of (${i + 1},${j})`);
+ }
+ }
+ }
+
+ for (var j = 0; j < rows.length - 1; j++) {
+ var cells1 = Array.from(rows[j].getElementsByTagName("mtd"));
+ var cells2 = Array.from(rows[j + 1].getElementsByTagName("mtd"));
+ for (var i = 0; i < cells1.length; i++) {
+ var space1 = cells1[i].firstElementChild.getBoundingClientRect();
+ var space2 = cells2[i].firstElementChild.getBoundingClientRect();
+ assert_equals(space1.left, space2.left,
+ `Cells (${i},${j}) and (${i},${j + 1}) should have same horizontal position`);
+ assert_less_than(space1.bottom, space2.top,
+ `Cell (${i},${j}) should be above (${i},${j + 1})`);
+ }
+ }
+ }, `Layout of ${id}`);
+
+ });
+ done();
+ }
+</script>
+</head>
+<body>
+ <div id="log"></div>
+ <p>
+ <math>
+ <mtable id="table-001">
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightblue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightgreen;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: blue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: green;"></mspace>
+ </mtd>
+ </mtr>
+ </mtable>
+ <mtable id="table-002">
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightblue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightgreen;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: cyan;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: purple;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: blue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: green;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: yellow;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: orange;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: black;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: red;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: gray;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: maroon;"></mspace>
+ </mtd>
+ </mtr>
+ </mtable>
+ <mtable id="table-003">
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightblue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightgreen;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: cyan;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: blue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: green;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: orange;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: black;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: maroon;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: gray;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: red;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: purple;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: yellow;"></mspace>
+ </mtd>
+
+ </mtr>
+ </mtable>
+ </math>
+ </p>
+ <p>
+ <math dir="rtl">
+ <mtable id="table-011">
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightblue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightgreen;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: blue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: green;"></mspace>
+ </mtd>
+ </mtr>
+ </mtable>
+ <mtable id="table-012">
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightblue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightgreen;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: cyan;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: purple;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: blue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: green;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: yellow;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: orange;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: black;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: red;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: gray;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: maroon;"></mspace>
+ </mtd>
+ </mtr>
+ </mtable>
+ <mtable id="table-013">
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightblue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: lightgreen;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: cyan;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: blue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: green;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: orange;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: black;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: maroon;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: gray;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: red;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: purple;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: yellow;"></mspace>
+ </mtd>
+
+ </mtr>
+ </mtable>
+ </math>
+ </p>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-002.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-002.html
new file mode 100644
index 00000000000..f207bc03f5d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/tables/table-002.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Basic table alignment</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#table-or-matrix-mtable">
+<meta name="assert" content="Verify alignment of cells in basic 2x2, 4x3 and 3x4 math tables.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mathml/support/feature-detection.js"></script>
+<script>
+ setup({ explicit_done: true });
+ window.addEventListener("load", runTests);
+ function runTests() {
+ var epsilon = 1;
+ test(function() {
+ assert_true(MathMLFeatureDetection.has_mspace());
+ const ascents = [40, 0, 20, 30, 10, 80, 0, 40, 70, 30];
+ const row = document.getElementById("vertical").firstElementChild;
+ const cells = Array.from(row.getElementsByTagName("mtd"));
+ for (var i = 0; i < cells.length - 1; i++) {
+ var space1 = cells[i].firstElementChild.getBoundingClientRect();
+ var space2 = cells[i + 1].firstElementChild.getBoundingClientRect();
+ assert_approx_equals(space1.top + ascents[i],
+ space2.top + ascents[i + 1],
+ epsilon,
+ `Baselines of cells ${i} and ${i + 1} should be aligned.`);
+ }
+ }, `Vertical alignment of cells`);
+
+ test(function() {
+ assert_true(MathMLFeatureDetection.has_mspace());
+ const table = document.getElementById("horizontal");
+ const rows = Array.from(table.getElementsByTagName("mtr"));
+ for (var j = 0; j < rows.length - 1; j++) {
+ var space1 = rows[j].firstElementChild.firstElementChild.getBoundingClientRect();
+ var space2 = rows[j + 1].firstElementChild.firstElementChild.getBoundingClientRect();
+ assert_approx_equals((space1.left + space1.right) / 2,
+ (space2.left + space2.right) / 2,
+ epsilon,
+ `Baselines of cells ${j} and ${j + 1} should be aligned.`);
+ }
+ }, `Horizontal alignment of cells`);
+
+ done();
+ }
+</script>
+</head>
+<body>
+ <div id="log"></div>
+ <p>
+ <math>
+ <mtable id="vertical">
+ <mtr>
+ <mtd>
+ <mspace width="10px" height="40px" depth="0px" style="background: lightblue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="0px" depth="40px" style="background: lightgreen;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="20px" depth="20px" style="background: cyan;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="30px" depth="10px" style="background: purple;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="10px" depth="30px" style="background: orange;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="80px" depth="0px" style="background: blue;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="0px" depth="80px" style="background: green;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="40px" depth="40px" style="background: yellow;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="70px" depth="30px" style="background: red;"></mspace>
+ </mtd>
+ <mtd>
+ <mspace width="10px" height="30px" depth="70px" style="background: black;"></mspace>
+ </mtd>
+ </mtr>
+ </mtable>
+ </math>
+ </p>
+ <p>
+ <math>
+ <mtable id="horizontal">
+ <mtr>
+ <mtd>
+ <mspace width="10px" height="10px" style="background: lightblue;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="40px" height="10px" style="background: lightgreen;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="30px" height="10px" style="background: cyan;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="20px" height="10px" style="background: purple;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="50px" height="10px" style="background: orange;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="100px" height="10px" style="background: blue;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="90px" height="10px" style="background: green;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="70px" height="10px" style="background: yellow;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="80px" height="10px" style="background: red;"></mspace>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mspace width="40px" height="10px" style="background: black;"></mspace>
+ </mtd>
+ </mtr>
+ </mtable>
+ </math>
+ </p>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/ignored-properties-001.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/ignored-properties-001.html
new file mode 100644
index 00000000000..7500c73a3f1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/ignored-properties-001.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Ignored CSS properties</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
+<meta name="assert" content="Verify style with ignored properties does not affect MathML layout.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mathml/support/feature-detection.js"></script>
+<script src="/mathml/support/layout-comparison.js"></script>
+<script src="/mathml/support/mathml-fragments.js"></script>
+<script>
+ var epsilon = 1;
+
+ setup({ explicit_done: true });
+ window.addEventListener("load", runTests);
+
+ function runTests() {
+
+ for (tag in MathMLFragments) {
+ if (!FragmentHelper.isValidChildOfMrow(tag))
+ continue;
+
+ var ignoredProperties = [
+ "writing-mode: vertical-rl;",
+ "white-space: normal;",
+ "float: right;",
+ "align-content: end; justify-content: end;",
+ "align-self: end; justify-self: end;",
+ ];
+ if (tag !== "mtable") {
+ ignoredProperties.push("width: 100px !important; height: 200px !important;");
+ }
+
+ ignoredProperties.forEach(ignoredStyle => {
+ document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
+<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
+<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
+</div>`);
+ var div = document.body.lastElementChild;
+
+ // Create MathML structure with ignored style properties.
+ var elementContainer = div.firstElementChild;
+ var elementContainerWidth = elementContainer.getBoundingClientRect().width;
+ var element = FragmentHelper.element(elementContainer);
+ if (!FragmentHelper.isEmpty(tag))
+ FragmentHelper.forceNonEmptyDescendants(element);
+ element.setAttribute("style", ignoredStyle);
+ Array.from(element.getElementsByTagNameNS("*", FragmentHelper.mathml_namespace)).forEach(descendant => {
+ descendant.setAttribute("style", ignoredStyle);
+ });
+
+ var referenceContainer = div.lastElementChild;
+ var referenceContainerWidth = referenceContainer.getBoundingClientRect().width;
+ var reference = FragmentHelper.element(referenceContainer);
+ if (!FragmentHelper.isEmpty(tag))
+ FragmentHelper.forceNonEmptyDescendants(reference);
+
+ var epsilon = 1;
+
+ test(function() {
+ // FIXME(fwang): Feature detection should be done per-tag.
+ assert_true(MathMLFeatureDetection.has_mspace());
+ assert_approx_equals(elementContainerWidth, referenceContainerWidth, epsilon);
+ }, `${tag} preferred width calculation is not affected by ${ignoredStyle}`);
+
+ test(function() {
+ // FIXME(fwang): Feature detection should be done per-tag.
+ assert_true(MathMLFeatureDetection.has_mspace());
+ compareLayout(element, reference, epsilon);
+ }, `${tag} layout is not affected by ${ignoredStyle}`);
+
+ div.style = "display: none;"; // Hide the div after measurement.
+ });
+ }
+
+ done();
+ }
+</script>
+</head>
+<body>
+ <div id="log"></div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/not-participating-to-parent-layout.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/not-participating-to-parent-layout.html
index 1caebf1e630..6445cde9ac1 100644
--- a/tests/wpt/web-platform-tests/mathml/relations/css-styling/not-participating-to-parent-layout.html
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/not-participating-to-parent-layout.html
@@ -22,7 +22,6 @@
if (!FragmentHelper.isValidChildOfMrow(tag) ||
FragmentHelper.isEmpty(tag))
continue;
- // TODO: Add floats too?
["display: none",
"display: contents",
"position: absolute",
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002.html
index 565dfc43b56..5bf9b6aec41 100644
--- a/tests/wpt/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002.html
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/padding-border-margin/padding-002.html
@@ -21,7 +21,8 @@
if (!FragmentHelper.isValidChildOfMrow(tag))
continue;
- var style = "padding-left: 30px; padding-right: 40px; padding-top: 50px; padding-bottom: 60px;";
+ var defaultInlinePadding = (tag === "mfrac" ? 1 : 0);
+ var style = `padding-left: ${defaultInlinePadding + 30}px; padding-right: ${defaultInlinePadding + 40}px; padding-top: 50px; padding-bottom: 60px;`;
if (FragmentHelper.isEmpty(tag)) {
test(function() {
diff --git a/tests/wpt/web-platform-tests/mathml/support/mathml-fragments.js b/tests/wpt/web-platform-tests/mathml/support/mathml-fragments.js
index 7c7b003e9e6..8376ccf375d 100644
--- a/tests/wpt/web-platform-tests/mathml/support/mathml-fragments.js
+++ b/tests/wpt/web-platform-tests/mathml/support/mathml-fragments.js
@@ -117,8 +117,10 @@ var MathMLFragments = {
};
var FragmentHelper = {
+ mathml_namespace: "http://www.w3.org/1998/Math/MathML",
+
createElement: function(tag) {
- return document.createElementNS("http://www.w3.org/1998/Math/MathML", tag);
+ return document.createElementNS(this.mathml_namespace, tag);
},
isValidChildOfMrow: function(tag) {
@@ -158,5 +160,22 @@ var FragmentHelper = {
if (element.firstElementChild)
return element.firstElementChild;
return this.appendChild(fragment);
- }
+ },
+
+ forceNonEmptyDescendants: function(fragment) {
+ var element = this.element(fragment) || fragment;
+ if (element.classList.contains("mathml-container") ||
+ element.classList.contains("foreign-container")) {
+ for (var i = 0; i < 10; i++)
+ this.appendChild(element);
+ return;
+ }
+ var child = element.firstElementChild;
+ if (child) {
+ for (; child; child = child.nextElementSibling) {
+ this.forceNonEmptyDescendants(child);
+ }
+ return;
+ }
+ },
}
diff --git a/tests/wpt/web-platform-tests/payment-handler/app-supports-shipping-contact-delegation.js b/tests/wpt/web-platform-tests/payment-handler/app-supports-shipping-contact-delegation.js
new file mode 100644
index 00000000000..770e2de64f1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/app-supports-shipping-contact-delegation.js
@@ -0,0 +1,44 @@
+self.addEventListener('canmakepayment', (event) => {
+ event.respondWith(true);
+});
+
+function responder(event) {
+ const methodName = event.methodData[0].supportedMethods;
+ const shippingOption = event.paymentOptions.requestShipping
+ ? event.shippingOptions[0].id
+ : '';
+ const payerName =
+ event.paymentOptions.requestPayerName ? 'John Smith' : '';
+ const payerEmail =
+ event.paymentOptions.requestPayerEmail ? 'smith@gmail.com' : '';
+ const payerPhone =
+ event.paymentOptions.requestPayerPhone ? '+15555555555' : '';
+ const shippingAddress = event.paymentOptions.requestShipping ? {
+ addressLine: [
+ '1875 Explorer St #1000',
+ ],
+ city: 'Reston',
+ country: 'US',
+ dependentLocality: '',
+ organization: 'Google',
+ phone: '+15555555555',
+ postalCode: '20190',
+ recipient: 'John Smith',
+ region: 'VA',
+ sortingCode: '',
+ } : {};
+
+ return {
+ methodName,
+ details: { token: '123456789'},
+ payerName,
+ payerEmail,
+ payerPhone,
+ shippingAddress,
+ shippingOption
+ };
+}
+
+self.addEventListener('paymentrequest', (event) => {
+ event.respondWith(responder(event));
+});
diff --git a/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual.https.html b/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual.https.html
new file mode 100644
index 00000000000..75b3668981c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual.https.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Tests for Delegation of shipping and contact collection to PH</title>
+<link rel="manifest" href="/payment-handler/basic-card.json" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="register-and-activate-service-worker.js"></script>
+<p>If the payment sheet is shown, please authorize the mock payment.</p>
+<script>
+ async function runTests(registration) {
+ const methodName = window.location.origin + '/payment-handler/payment-app/';
+ await registration.paymentManager.instruments.clear();
+ await registration.paymentManager.instruments.set('instrument-key', {
+ name: 'Instrument Name',
+ method: methodName,
+ });
+ await navigator.serviceWorker.ready;
+ await registration.paymentManager.enableDelegations(
+ ['shippingAddress', 'payerName', 'payerPhone', 'payerEmail']);
+
+ promise_test(async (t) => {
+ const request = new PaymentRequest([{supportedMethods: methodName}], {
+ total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
+ shippingOptions: [{
+ id: 'freeShippingOption',
+ label: 'Free global shipping',
+ amount: {
+ currency: 'USD',
+ value: '0',
+ },
+ selected: true,
+ }],
+ }, {requestShipping: true});
+
+ const response = await test_driver.bless('showing a payment sheet', () =>
+ request.show()
+ );
+ const complete_promise = response.complete('success');
+
+ // Validate response
+ assert_equals('freeShippingOption', response.shippingOption);
+ assert_equals('Reston', response.shippingAddress.city);
+ assert_equals('US', response.shippingAddress.country);
+ assert_equals('20190', response.shippingAddress.postalCode);
+ assert_equals('VA', response.shippingAddress.region);
+
+ return complete_promise;
+ }, 'Payment handler response should include shipping address and selected shipping option id.');
+
+ promise_test(async (t) => {
+ const request = new PaymentRequest([{
+ supportedMethods: methodName
+ }], {
+ total: {
+ label: 'Total',
+ amount: {
+ currency: 'USD',
+ value: '0.01'
+ }
+ }
+ }, {
+ requestPayerName: true,
+ requestPayerEmail: true,
+ requestPayerPhone: true
+ });
+
+ const response = await test_driver.bless('showing a payment sheet', () =>
+ request.show()
+ );
+ const complete_promise = response.complete('success');
+
+ // Validate response.
+ assert_equals('John Smith', response.payerName);
+ assert_equals('smith@gmail.com', response.payerEmail);
+ assert_equals('+15555555555', response.payerPhone);
+
+ return complete_promise;
+ }, 'Payment handler response should include payer\'s contact information.');
+ }
+
+ registerAndActiveServiceWorker(
+ 'app-supports-shipping-contact-delegation.js',
+ 'payment-app/',
+ runTests
+ );
+</script>
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
index 894e2a24f65..eae4d64b446 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
@@ -282,8 +282,21 @@ class MockRuntime {
}
simulateVisibilityChange(visibilityState) {
- // TODO(https://crbug.com/982099): Chrome currently does not have a way for
- // devices to bubble up any form of visibilityChange.
+ let mojoState = null;
+ switch(visibilityState) {
+ case "visible":
+ mojoState = device.mojom.XRVisibilityState.VISIBLE;
+ break;
+ case "visible-blurred":
+ mojoState = device.mojom.XRVisibilityState.VISIBLE_BLURRED;
+ break;
+ case "hidden":
+ mojoState = device.mojom.XRVisibilityState.HIDDEN;
+ break;
+ }
+ if (mojoState) {
+ this.sessionClient_.onVisibilityStateChanged(mojoState);
+ }
}
setBoundsGeometry(bounds) {
@@ -403,28 +416,37 @@ class MockRuntime {
// This function converts between the matrix provided by the WebXR test API
// and the internal data representation.
getEye(fakeXRViewInit) {
- let m = fakeXRViewInit.projectionMatrix;
+ let fov = null;
+
+ if (fakeXRViewInit.fieldOfView) {
+ fov = {
+ upDegrees: fakeXRViewInit.fieldOfView.upDegrees,
+ downDegrees: fakeXRViewInit.fieldOfView.downDegrees,
+ leftDegrees: fakeXRViewInit.fieldOfView.leftDegrees,
+ rightDegrees: fakeXRViewInit.fieldOfView.rightDegrees
+ };
+ } else {
+ let m = fakeXRViewInit.projectionMatrix;
- function toDegrees(tan) {
- return Math.atan(tan) * 180 / Math.PI;
- }
+ function toDegrees(tan) {
+ return Math.atan(tan) * 180 / Math.PI;
+ }
- let xScale = m[0];
- let yScale = m[5];
- let near = m[14] / (m[10] - 1);
- let far = m[14] / (m[10] - 1);
- let leftTan = (1 - m[8]) / m[0];
- let rightTan = (1 + m[8]) / m[0];
- let upTan = (1 + m[9]) / m[5];
- let downTan = (1 - m[9]) / m[5];
+ let leftTan = (1 - m[8]) / m[0];
+ let rightTan = (1 + m[8]) / m[0];
+ let upTan = (1 + m[9]) / m[5];
+ let downTan = (1 - m[9]) / m[5];
- return {
- fieldOfView: {
+ fov = {
upDegrees: toDegrees(upTan),
downDegrees: toDegrees(downTan),
leftDegrees: toDegrees(leftTan),
rightDegrees: toDegrees(rightTan)
- },
+ };
+ }
+
+ return {
+ fieldOfView: fov,
headFromEye: composeGFXTransform(fakeXRViewInit.viewOffset),
renderWidth: fakeXRViewInit.resolution.width,
renderHeight: fakeXRViewInit.resolution.height
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/unit/test-return-restrictions.html b/tests/wpt/web-platform-tests/resources/test/tests/unit/test-return-restrictions.html
index 8472ba9c9ed..b846d4dc430 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/unit/test-return-restrictions.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/unit/test-return-restrictions.html
@@ -81,7 +81,7 @@ promise_test(() => {
assert_equals(harness.status, 'ERROR');
assert_equals(
harness.message,
- 'test named "null" inappropriately returned a value'
+ 'Test named "null" inappropriately returned a value'
);
assert_equals(tests.before, 'PASS');
assert_equals(tests.null, 'PASS');
@@ -100,7 +100,7 @@ promise_test(() => {
assert_equals(harness.status, 'ERROR');
assert_equals(
harness.message,
- 'test named "object" inappropriately returned a value'
+ 'Test named "object" inappropriately returned a value'
);
assert_equals(tests.before, 'PASS');
assert_equals(tests.object, 'PASS');
@@ -119,7 +119,7 @@ promise_test(() => {
assert_equals(harness.status, 'ERROR');
assert_equals(
harness.message,
- 'test named "thenable" inappropriately returned a value, consider using `promise_test` instead'
+ 'Test named "thenable" inappropriately returned a value, consider using `promise_test` instead'
);
assert_equals(tests.before, 'PASS');
assert_equals(tests.thenable, 'PASS');
@@ -143,7 +143,7 @@ promise_test(() => {
assert_equals(harness.status, 'ERROR');
assert_equals(
harness.message,
- 'test named "restricted" inappropriately returned a value'
+ 'Test named "restricted" inappropriately returned a value'
);
assert_equals(tests.before, 'PASS');
assert_equals(tests.restricted, 'PASS');
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js
index 21d5fcc9417..15591042aa4 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js
+++ b/tests/wpt/web-platform-tests/resources/testharness.js
@@ -544,7 +544,7 @@ policies and contribution forms [3].
var value = test_obj.step(func, test_obj, test_obj);
if (value !== undefined) {
- var msg = "test named \"" + test_name +
+ var msg = "Test named \"" + test_name +
"\" inappropriately returned a value";
try {
diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js
index e0330b80f53..dc60f6739d4 100644
--- a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js
+++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js
@@ -28,6 +28,14 @@ const VALID_POSE_TRANSFORM = {
const VALID_PROJECTION_MATRIX =
[1, 0, 0, 0, 0, 1, 0, 0, 3, 2, -1, -1, 0, 0, -0.2, 0];
+// This is a decomposed version of the above.
+const VALID_FIELD_OF_VIEW = {
+ upDegrees: 71.565,
+ downDegrees: -45,
+ leftDegrees:-63.4349,
+ rightDegrees: 75.9637
+};
+
// A valid input grip matrix for when we don't care about specific values
const VALID_GRIP = [1, 0, 0, 0,
0, 1, 0, 0,
diff --git a/tests/wpt/web-platform-tests/webxr/xrSession_visibilityState.https.html b/tests/wpt/web-platform-tests/webxr/xrSession_visibilityState.https.html
index ebad10095e6..e7a6041036f 100644
--- a/tests/wpt/web-platform-tests/webxr/xrSession_visibilityState.https.html
+++ b/tests/wpt/web-platform-tests/webxr/xrSession_visibilityState.https.html
@@ -20,7 +20,7 @@ let testFunction = function(session, fakeDeviceController, t) {
let eventPromise = eventWatcher.wait_for(
["visibilitychange", "visibilitychange", "framefired", "watcherdone"]);
- function onFrame(t, frame) {
+ function onFrame(timestamp, frame) {
t.step( () => {
// The session should not fire any animation frames while the visibility
// state is hidden.
@@ -39,7 +39,7 @@ let testFunction = function(session, fakeDeviceController, t) {
session.removeEventListener("visibilitychange", onSessionVisibilityChangeHidden, false);
session.addEventListener("visibilitychange", onSessionVisibilityChangeVisible, false);
- session.requestAnimationFrame()
+ session.requestAnimationFrame(onFrame)
t.step_timeout(() => {
fakeDeviceController.simulateVisibilityChange("visible");
@@ -73,6 +73,8 @@ let testFunction = function(session, fakeDeviceController, t) {
session.addEventListener("visibilitychange", onSessionVisibilityChangeHidden, false);
fakeDeviceController.simulateVisibilityChange("hidden");
+
+ return eventPromise;
};
xr_session_promise_test(
diff --git a/tests/wpt/web-platform-tests/webxr/xrView_oneframeupdate.https.html b/tests/wpt/web-platform-tests/webxr/xrView_oneframeupdate.https.html
index 4386433788c..8edb2c0b265 100644
--- a/tests/wpt/web-platform-tests/webxr/xrView_oneframeupdate.https.html
+++ b/tests/wpt/web-platform-tests/webxr/xrView_oneframeupdate.https.html
@@ -13,14 +13,20 @@ let testName = "XRView projection matrices update near and far depths on the "
const fakeViews = [{
eye:"left",
- projectionMatrix: VALID_PROJECTION_MATRIX,
viewOffset: LEFT_OFFSET,
- resolution: VALID_RESOLUTION
+ resolution: VALID_RESOLUTION,
+ fieldOfView: VALID_FIELD_OF_VIEW,
+ // The webxr-test-api requires that we still set this for now, but it is
+ // supposed to be ignored.
+ projectionMatrix: IDENTITY_MATRIX
}, {
eye:"right",
- projectionMatrix: VALID_PROJECTION_MATRIX,
viewOffset: RIGHT_OFFSET,
- resolution: VALID_RESOLUTION
+ resolution: VALID_RESOLUTION,
+ fieldOfView: VALID_FIELD_OF_VIEW,
+ // The webxr-test-api requires that we still set this for now, but it is
+ // supposed to be ignored.
+ projectionMatrix: IDENTITY_MATRIX
},
];