diff options
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 }, ]; |