diff options
214 files changed, 4692 insertions, 245 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 96cb3684e4d..3aa3d2388ba 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -11347,6 +11347,12 @@ {} ] ], + "feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html": [ + [ + "/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html", + {} + ] + ], "feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html": [ [ "/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html", @@ -73863,6 +73869,18 @@ {} ] ], + "css/CSS2/positioning/absolute-non-replaced-height-013.html": [ + [ + "/css/CSS2/positioning/absolute-non-replaced-height-013.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/CSS2/positioning/absolute-non-replaced-max-height-002.xht": [ [ "/css/CSS2/positioning/absolute-non-replaced-max-height-002.xht", @@ -114307,6 +114325,18 @@ {} ] ], + "css/css-flexbox/dynamic-bsize-change.html": [ + [ + "/css/css-flexbox/dynamic-bsize-change.html", + [ + [ + "/css/css-flexbox/dynamic-bsize-change-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/flex-001.htm": [ [ "/css/css-flexbox/flex-001.htm", @@ -132319,6 +132349,42 @@ {} ] ], + "css/css-scoping/host-context-specificity-001.html": [ + [ + "/css/css-scoping/host-context-specificity-001.html", + [ + [ + "/css/css-scoping/reference/green-box.html", + "==" + ] + ], + {} + ] + ], + "css/css-scoping/host-context-specificity-002.html": [ + [ + "/css/css-scoping/host-context-specificity-002.html", + [ + [ + "/css/css-scoping/reference/green-box.html", + "==" + ] + ], + {} + ] + ], + "css/css-scoping/host-context-specificity-003.html": [ + [ + "/css/css-scoping/host-context-specificity-003.html", + [ + [ + "/css/css-scoping/reference/green-box.html", + "==" + ] + ], + {} + ] + ], "css/css-scoping/host-descendant-001.html": [ [ "/css/css-scoping/host-descendant-001.html", @@ -132391,6 +132457,18 @@ {} ] ], + "css/css-scoping/host-specificity-003.html": [ + [ + "/css/css-scoping/host-specificity-003.html", + [ + [ + "/css/css-scoping/reference/green-box.html", + "==" + ] + ], + {} + ] + ], "css/css-scoping/host-specificity.html": [ [ "/css/css-scoping/host-specificity.html", @@ -138211,6 +138289,42 @@ {} ] ], + "css/css-text/text-indent/text-indent-percentage-002.html": [ + [ + "/css/css-text/text-indent/text-indent-percentage-002.html", + [ + [ + "/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-indent/text-indent-percentage-003.html": [ + [ + "/css/css-text/text-indent/text-indent-percentage-003.html", + [ + [ + "/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-indent/text-indent-percentage-004.html": [ + [ + "/css/css-text/text-indent/text-indent-percentage-004.html", + [ + [ + "/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/text-justify/text-justify-001.html": [ [ "/css/css-text/text-justify/text-justify-001.html", @@ -139171,6 +139285,774 @@ {} ] ], + "css/css-text/white-space/control-chars-000.html": [ + [ + "/css/css-text/white-space/control-chars-000.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-001.html": [ + [ + "/css/css-text/white-space/control-chars-001.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-002.html": [ + [ + "/css/css-text/white-space/control-chars-002.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-003.html": [ + [ + "/css/css-text/white-space/control-chars-003.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-004.html": [ + [ + "/css/css-text/white-space/control-chars-004.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-005.html": [ + [ + "/css/css-text/white-space/control-chars-005.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-006.html": [ + [ + "/css/css-text/white-space/control-chars-006.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-007.html": [ + [ + "/css/css-text/white-space/control-chars-007.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-008.html": [ + [ + "/css/css-text/white-space/control-chars-008.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-00B.html": [ + [ + "/css/css-text/white-space/control-chars-00B.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-00D.html": [ + [ + "/css/css-text/white-space/control-chars-00D.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-00E.html": [ + [ + "/css/css-text/white-space/control-chars-00E.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-00F.html": [ + [ + "/css/css-text/white-space/control-chars-00F.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-010.html": [ + [ + "/css/css-text/white-space/control-chars-010.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-011.html": [ + [ + "/css/css-text/white-space/control-chars-011.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-012.html": [ + [ + "/css/css-text/white-space/control-chars-012.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-013.html": [ + [ + "/css/css-text/white-space/control-chars-013.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-014.html": [ + [ + "/css/css-text/white-space/control-chars-014.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-015.html": [ + [ + "/css/css-text/white-space/control-chars-015.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-016.html": [ + [ + "/css/css-text/white-space/control-chars-016.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-017.html": [ + [ + "/css/css-text/white-space/control-chars-017.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-018.html": [ + [ + "/css/css-text/white-space/control-chars-018.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-019.html": [ + [ + "/css/css-text/white-space/control-chars-019.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-01A.html": [ + [ + "/css/css-text/white-space/control-chars-01A.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-01B.html": [ + [ + "/css/css-text/white-space/control-chars-01B.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-01C.html": [ + [ + "/css/css-text/white-space/control-chars-01C.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-01D.html": [ + [ + "/css/css-text/white-space/control-chars-01D.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-01E.html": [ + [ + "/css/css-text/white-space/control-chars-01E.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-01F.html": [ + [ + "/css/css-text/white-space/control-chars-01F.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-07F.html": [ + [ + "/css/css-text/white-space/control-chars-07F.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-080.html": [ + [ + "/css/css-text/white-space/control-chars-080.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-081.html": [ + [ + "/css/css-text/white-space/control-chars-081.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-082.html": [ + [ + "/css/css-text/white-space/control-chars-082.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-083.html": [ + [ + "/css/css-text/white-space/control-chars-083.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-084.html": [ + [ + "/css/css-text/white-space/control-chars-084.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-085.html": [ + [ + "/css/css-text/white-space/control-chars-085.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-086.html": [ + [ + "/css/css-text/white-space/control-chars-086.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-087.html": [ + [ + "/css/css-text/white-space/control-chars-087.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-088.html": [ + [ + "/css/css-text/white-space/control-chars-088.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-089.html": [ + [ + "/css/css-text/white-space/control-chars-089.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-08A.html": [ + [ + "/css/css-text/white-space/control-chars-08A.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-08B.html": [ + [ + "/css/css-text/white-space/control-chars-08B.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-08C.html": [ + [ + "/css/css-text/white-space/control-chars-08C.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-08D.html": [ + [ + "/css/css-text/white-space/control-chars-08D.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-08E.html": [ + [ + "/css/css-text/white-space/control-chars-08E.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-08F.html": [ + [ + "/css/css-text/white-space/control-chars-08F.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-090.html": [ + [ + "/css/css-text/white-space/control-chars-090.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-091.html": [ + [ + "/css/css-text/white-space/control-chars-091.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-092.html": [ + [ + "/css/css-text/white-space/control-chars-092.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-093.html": [ + [ + "/css/css-text/white-space/control-chars-093.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-094.html": [ + [ + "/css/css-text/white-space/control-chars-094.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-095.html": [ + [ + "/css/css-text/white-space/control-chars-095.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-096.html": [ + [ + "/css/css-text/white-space/control-chars-096.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-097.html": [ + [ + "/css/css-text/white-space/control-chars-097.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-098.html": [ + [ + "/css/css-text/white-space/control-chars-098.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-099.html": [ + [ + "/css/css-text/white-space/control-chars-099.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-09A.html": [ + [ + "/css/css-text/white-space/control-chars-09A.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-09B.html": [ + [ + "/css/css-text/white-space/control-chars-09B.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-09C.html": [ + [ + "/css/css-text/white-space/control-chars-09C.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-09D.html": [ + [ + "/css/css-text/white-space/control-chars-09D.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-09E.html": [ + [ + "/css/css-text/white-space/control-chars-09E.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/control-chars-09F.html": [ + [ + "/css/css-text/white-space/control-chars-09F.html", + [ + [ + "/css/css-text/white-space/reference/control-chars-000-ref.html", + "!=" + ] + ], + {} + ] + ], + "css/css-text/white-space/line-edge-white-space-collapse-001.html": [ + [ + "/css/css-text/white-space/line-edge-white-space-collapse-001.html", + [ + [ + "/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/line-edge-white-space-collapse-002.html": [ + [ + "/css/css-text/white-space/line-edge-white-space-collapse-002.html", + [ + [ + "/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/pre-wrap-001.html": [ [ "/css/css-text/white-space/pre-wrap-001.html", @@ -221636,6 +222518,16 @@ {} ] ], + "content-security-policy/inheritance/support/navigate-self-to-blob.html": [ + [ + {} + ] + ], + "content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers": [ + [ + {} + ] + ], "content-security-policy/inside-worker/support/connect-src-allow.sub.js": [ [ {} @@ -222026,6 +222918,36 @@ {} ] ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers": [ + [ + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers": [ + [ + {} + ] + ], "content-security-policy/script-src/inlineSuccessTest.js": [ [ {} @@ -249321,6 +250243,11 @@ {} ] ], + "css/css-flexbox/dynamic-bsize-change-ref.html": [ + [ + {} + ] + ], "css/css-flexbox/flex-flow-001-ref.html": [ [ {} @@ -265481,6 +266408,11 @@ {} ] ], + "css/css-text/text-indent/reference/text-indent-percentage-002-ref.html": [ + [ + {} + ] + ], "css/css-text/text-justify/reference/text-justify-ref-001.html": [ [ {} @@ -265866,6 +266798,21 @@ {} ] ], + "css/css-text/white-space/reference/control-chars-000-ref.html": [ + [ + {} + ] + ], + "css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html": [ + [ + {} + ] + ], + "css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html": [ + [ + {} + ] + ], "css/css-text/white-space/reference/pre-wrap-001-ref.html": [ [ {} @@ -280926,6 +281873,11 @@ {} ] ], + "feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html": [ + [ + {} + ] + ], "feature-policy/experimental-features/resources/vertical-scroll-scrollintoview.html": [ [ {} @@ -293536,6 +294488,26 @@ {} ] ], + "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [ + [ + {} + ] + ], + "infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini": [ + [ + {} + ] + ], + "infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini": [ + [ + {} + ] + ], + "infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [ + [ + {} + ] + ], "infrastructure/reftest-wait-ref.html": [ [ {} @@ -300611,6 +301583,11 @@ {} ] ], + "resources/testdriver-actions.js": [ + [ + {} + ] + ], "resources/testdriver-vendor.js": [ [ {} @@ -312566,11 +313543,6 @@ {} ] ], - "tools/wptserve/.travis.yml": [ - [ - {} - ] - ], "tools/wptserve/LICENSE": [ [ {} @@ -327080,12 +328052,6 @@ {} ] ], - "background-fetch/abort.https.window.js": [ - [ - "/background-fetch/abort.https.window.html", - {} - ] - ], "background-fetch/content-security-policy.https.window.js": [ [ "/background-fetch/content-security-policy.https.window.html", @@ -329452,6 +330418,12 @@ {} ] ], + "content-security-policy/generic/directive-name-case-insensitive.sub.html": [ + [ + "/content-security-policy/generic/directive-name-case-insensitive.sub.html", + {} + ] + ], "content-security-policy/generic/duplicate-directive.sub.html": [ [ "/content-security-policy/generic/duplicate-directive.sub.html", @@ -329614,6 +330586,12 @@ {} ] ], + "content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html": [ + [ + "/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html", + {} + ] + ], "content-security-policy/inheritance/iframe.html": [ [ "/content-security-policy/inheritance/iframe.html", @@ -330330,6 +331308,42 @@ {} ] ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html": [ + [ + "/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html", + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html": [ + [ + "/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html", + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html": [ + [ + "/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html", + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html": [ + [ + "/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html", + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html": [ + [ + "/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html", + {} + ] + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html": [ + [ + "/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html", + {} + ] + ], "content-security-policy/script-src/injected-inline-script-allowed.sub.html": [ [ "/content-security-policy/script-src/injected-inline-script-allowed.sub.html", @@ -335660,6 +336674,18 @@ {} ] ], + "css/css-grid/grid-items/grid-items-relative-offsets-001.html": [ + [ + "/css/css-grid/grid-items/grid-items-relative-offsets-001.html", + {} + ] + ], + "css/css-grid/grid-items/grid-items-relative-offsets-002.html": [ + [ + "/css/css-grid/grid-items/grid-items-relative-offsets-002.html", + {} + ] + ], "css/css-grid/grid-items/grid-minimum-size-grid-items-021.html": [ [ "/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html", @@ -336680,6 +337706,12 @@ {} ] ], + "css/css-scroll-anchoring/text-anchor-in-vertical-rl.html": [ + [ + "/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html", + {} + ] + ], "css/css-scroll-anchoring/wrapped-text.html": [ [ "/css/css-scroll-anchoring/wrapped-text.html", @@ -371888,6 +372920,38 @@ {} ] ], + "infrastructure/testdriver/actions/elementPosition.html": [ + [ + "/infrastructure/testdriver/actions/elementPosition.html", + { + "testdriver": true + } + ] + ], + "infrastructure/testdriver/actions/elementTiming.html": [ + [ + "/infrastructure/testdriver/actions/elementTiming.html", + { + "testdriver": true + } + ] + ], + "infrastructure/testdriver/actions/eventOrder.html": [ + [ + "/infrastructure/testdriver/actions/eventOrder.html", + { + "testdriver": true + } + ] + ], + "infrastructure/testdriver/actions/multiDevice.html": [ + [ + "/infrastructure/testdriver/actions/multiDevice.html", + { + "testdriver": true + } + ] + ], "infrastructure/testdriver/bless.html": [ [ "/infrastructure/testdriver/bless.html", @@ -433046,7 +434110,7 @@ "support" ], ".travis.yml": [ - "e0abc3cb953a49eb7018bda4bf118be5be5f22e0", + "b14cfafbdf7a3b4380e746e939d1512ef55785ea", "support" ], ".well-known/README.md": [ @@ -442725,10 +443789,6 @@ "8ce9f8faa2acdfe7a2ef8dfc6c1ad8cbdf01c72d", "support" ], - "background-fetch/abort.https.window.js": [ - "588fcac012ff9046370d3484f88342180bcb1961", - "testharness" - ], "background-fetch/content-security-policy.https.window.js": [ "0b5b1cb5e94d3f27bebbb5a462bf1e823dfc57b4", "testharness" @@ -442774,7 +443834,7 @@ "support" ], "background-fetch/service_workers/sw.js": [ - "2e3fbfff1a83e2d1f4aa40e738fa305a6eba513c", + "af4655dbad4ef6ad6b17d79bb2645aee98ce1102", "support" ], "background-fetch/update-ui.https.window.js": [ @@ -462345,6 +463405,10 @@ "b9e9a6c856bfdba59caddc249c0f61b731ae6701", "support" ], + "content-security-policy/generic/directive-name-case-insensitive.sub.html": [ + "c65c59fb23fdc6d21eefc090927c1cfd4cd6702a", + "testharness" + ], "content-security-policy/generic/duplicate-directive.sub.html": [ "7810533e455968eea8eb0bdf4d8edf62e495f956", "testharness" @@ -462525,6 +463589,10 @@ "7ef1e978fedc83e92b17384d7462793a83011791", "testharness" ], + "content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html": [ + "3b54528d56a445e6ef723371f5bb7a858ee016c8", + "testharness" + ], "content-security-policy/inheritance/iframe.html": [ "6f5d0f75260113a4d565a6320996345972d9e38c", "testharness" @@ -462533,6 +463601,14 @@ "c473b3f4262230f6e052d149d6461b7c0cabeff7", "testharness" ], + "content-security-policy/inheritance/support/navigate-self-to-blob.html": [ + "9ea069969cafff022e94fef3de535feafaca1de7", + "support" + ], + "content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers": [ + "27aa5f4a1023ffd9c975acc42cf7b89b9fff2faf", + "support" + ], "content-security-policy/inheritance/window.html": [ "86f2e4bc13f7fe811810d74550174a6acba57c68", "testharness" @@ -463305,6 +464381,54 @@ "2920b03c9bc98d16d4c7ebefaf8bcef268c3796c", "support" ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html": [ + "64d9498d6d8443276f932823b370210fa98362c4", + "testharness" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers": [ + "acc92f4e80b64d826f1f8cddf6c17580019a2e56", + "support" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html": [ + "fdcc54534ccb2bbdca592cfc6ee774f61cd920d3", + "testharness" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers": [ + "ae3e03dae1f81ed14d381b4882e6a70b6e72b994", + "support" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html": [ + "23a64df179220a39a6e4be3de9582420a389231b", + "testharness" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers": [ + "9550b0de30ad89cc48896da3dac137ad6d5c9680", + "support" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html": [ + "a29d197a1ce653c6c4cb3fd74fd3b56b8770cd2b", + "testharness" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers": [ + "6382ff86a7204a8638ab74966deabaef093c5125", + "support" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html": [ + "58730a72cc5d8100ed6ebc570b7f7d6639f15748", + "testharness" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers": [ + "2d1c08b9e8aacea63675fb5c94f7e969165784ad", + "support" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html": [ + "b770cba24661f96ace9b0b049c5edd6da761afc1", + "testharness" + ], + "content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers": [ + "2d1c08b9e8aacea63675fb5c94f7e969165784ad", + "support" + ], "content-security-policy/script-src/injected-inline-script-allowed.sub.html": [ "5a8cdec8472e923bf8984d5b5c77a6cf939e4d13", "testharness" @@ -501681,6 +502805,10 @@ "55a938233675110aa709ea4c7f2004c270a0a564", "reftest" ], + "css/CSS2/positioning/absolute-non-replaced-height-013.html": [ + "46929f360a0e6254ab7904937075146fed451fbf", + "reftest" + ], "css/CSS2/positioning/absolute-non-replaced-max-height-001.xht": [ "085b2b9b3b9c2679fec6be86f55b3c14f3fa40af", "visual" @@ -535157,6 +536285,14 @@ "7faca2c944ed28fe1b194c60b08516d13c393b04", "testharness" ], + "css/css-flexbox/dynamic-bsize-change-ref.html": [ + "b8db7ea2c7de6443075e04009ff5c979dbb7fed3", + "support" + ], + "css/css-flexbox/dynamic-bsize-change.html": [ + "7148f26e2770b669dfcc69435e3a506882ffd457", + "reftest" + ], "css/css-flexbox/flex-001.htm": [ "df3fbe533aa59a87ba1e7670ac8c7446527c98aa", "reftest" @@ -546054,7 +547190,7 @@ "reftest" ], "css/css-grid/abspos/support/grid.css": [ - "602e114880ae6576c0d440cf524ad284f89e708f", + "78fdd5e975ad61d3a8c39fe4e05694a278753c37", "support" ], "css/css-grid/alignment/grid-alignment-implies-size-change-001.html": [ @@ -547154,7 +548290,7 @@ "reftest" ], "css/css-grid/grid-definition/support/grid.css": [ - "602e114880ae6576c0d440cf524ad284f89e708f", + "78fdd5e975ad61d3a8c39fe4e05694a278753c37", "support" ], "css/css-grid/grid-definition/support/testing-utils.js": [ @@ -547385,6 +548521,14 @@ "bf38155e16f26f00e8243f32fc7a2d15fd62b2e7", "testharness" ], + "css/css-grid/grid-items/grid-items-relative-offsets-001.html": [ + "cb5e8ee23b66589a622c162c065ba8f5dd88a495", + "testharness" + ], + "css/css-grid/grid-items/grid-items-relative-offsets-002.html": [ + "d92fca3ebb06fc106f42da22dce9e46383fc13a5", + "testharness" + ], "css/css-grid/grid-items/grid-items-sizing-alignment-001-ref.html": [ "859483cf5d19dc53c1b1d047a6a3bfac2ed753e3", "support" @@ -547638,7 +548782,7 @@ "support" ], "css/css-grid/grid-items/support/grid.css": [ - "602e114880ae6576c0d440cf524ad284f89e708f", + "78fdd5e975ad61d3a8c39fe4e05694a278753c37", "support" ], "css/css-grid/grid-items/table-with-infinite-max-intrinsic-width.html": [ @@ -547790,7 +548934,7 @@ "reftest" ], "css/css-grid/grid-model/support/grid.css": [ - "602e114880ae6576c0d440cf524ad284f89e708f", + "78fdd5e975ad61d3a8c39fe4e05694a278753c37", "support" ], "css/css-grid/implicit-grids/grid-support-grid-auto-columns-rows-001.html": [ @@ -552438,7 +553582,7 @@ "support" ], "css/css-properties-values-api/typedom.tentative.html": [ - "98150558dae5020333dbf0bc7b8cecdbe83dfc36", + "1d757df168b0db1acfdbd358951b30dbb25d3016", "testharness" ], "css/css-properties-values-api/unit-cycles.html": [ @@ -554849,6 +555993,18 @@ "59787f048370401e80542ba7dbb0affcaed06c2f", "reftest" ], + "css/css-scoping/host-context-specificity-001.html": [ + "694087f56b76cae0a3ccf5015cc25902a1dad8cf", + "reftest" + ], + "css/css-scoping/host-context-specificity-002.html": [ + "3d4d3e5b245950f15ec126909393ff5e8b3edcb8", + "reftest" + ], + "css/css-scoping/host-context-specificity-003.html": [ + "7abf8847c95ed04fae77b8601457909ecd72742e", + "reftest" + ], "css/css-scoping/host-descendant-001.html": [ "423beaf055b9f482dd299c055721a405df1d5d77", "reftest" @@ -554885,6 +556041,10 @@ "3132d3a3455241347d6fe421f3434c361e424493", "reftest" ], + "css/css-scoping/host-specificity-003.html": [ + "54a22599d8f83f612d7fc9ff91abfe650114c6e2", + "reftest" + ], "css/css-scoping/host-specificity.html": [ "3ef61d4135fe7dbf846feb82540ca1a213ce7987", "reftest" @@ -555101,6 +556261,10 @@ "c384280f10fc96e2202518cb3333da346967d1a1", "testharness" ], + "css/css-scroll-anchoring/text-anchor-in-vertical-rl.html": [ + "2a56298e982888fcf1745137b9e8868bae70a76a", + "testharness" + ], "css/css-scroll-anchoring/wrapped-text.html": [ "4bd2cdb3251de62aceb13504404a58023f50c044", "testharness" @@ -560733,10 +561897,26 @@ "546ba57a9889b553047986f1cb1eee76af733a60", "support" ], + "css/css-text/text-indent/reference/text-indent-percentage-002-ref.html": [ + "5b3bc918d15f1737cd8e1518a8503425a4ee1d72", + "support" + ], "css/css-text/text-indent/text-indent-percentage-001.xht": [ "ae2478579d216761bc4cff5155bfb225e49e87bd", "reftest" ], + "css/css-text/text-indent/text-indent-percentage-002.html": [ + "65969260c5ee8467016545ba084bf4f7f886d6db", + "reftest" + ], + "css/css-text/text-indent/text-indent-percentage-003.html": [ + "f81390da873dc27beb17533269b0464bfa5eff69", + "reftest" + ], + "css/css-text/text-indent/text-indent-percentage-004.html": [ + "73f4c219558bf13fff6fc72ea208d0e52eb502f9", + "reftest" + ], "css/css-text/text-justify/reference/text-justify-ref-001.html": [ "2a214057611f9b3aa43b3eb74c775214bb307ffd", "support" @@ -561381,6 +562561,262 @@ "58ec3f3cbd94b01dc15531308355cab3c42cc318", "reftest" ], + "css/css-text/white-space/control-chars-000.html": [ + "b038fe9a90d3b8b9cb3bde7fd46396c7121688c9", + "reftest" + ], + "css/css-text/white-space/control-chars-001.html": [ + "e43fda55431dee4a1406e5fcf04016e38db0defd", + "reftest" + ], + "css/css-text/white-space/control-chars-002.html": [ + "a81a30723aab7523542a1ef6cede6f00e27a59ec", + "reftest" + ], + "css/css-text/white-space/control-chars-003.html": [ + "e0d156a97958ebd80a3fee9cfe97a736fc58881f", + "reftest" + ], + "css/css-text/white-space/control-chars-004.html": [ + "b33c4475ba9aef992f00f3cf27bba9afbacce2f5", + "reftest" + ], + "css/css-text/white-space/control-chars-005.html": [ + "d14e86b80b28ffaebac49d35805be7ca43b8d1a9", + "reftest" + ], + "css/css-text/white-space/control-chars-006.html": [ + "2b05272fec80075eab706f89b84fc299926329ac", + "reftest" + ], + "css/css-text/white-space/control-chars-007.html": [ + "60587d9abdba433fd8762699b1160ef7ba520353", + "reftest" + ], + "css/css-text/white-space/control-chars-008.html": [ + "fbe91aae05570156c11fbd8dac8a5114c7f931fc", + "reftest" + ], + "css/css-text/white-space/control-chars-00B.html": [ + "6cdf0b35cf142cac701d54e7dceb635fdd9be24e", + "reftest" + ], + "css/css-text/white-space/control-chars-00D.html": [ + "b7d1d44b0cc50f2761697de86f6ec3f2cf8904c1", + "reftest" + ], + "css/css-text/white-space/control-chars-00E.html": [ + "826b4bb0d6aeeb24bf7852f2096a8280f9a63687", + "reftest" + ], + "css/css-text/white-space/control-chars-00F.html": [ + "53618a8b79d189eb8e75c872b15643e4c3e8288a", + "reftest" + ], + "css/css-text/white-space/control-chars-010.html": [ + "52c663876951ecf2d8f612367ea0269bc75928cf", + "reftest" + ], + "css/css-text/white-space/control-chars-011.html": [ + "8aa8d94b91822e34ee220d83db4d233c23cb564d", + "reftest" + ], + "css/css-text/white-space/control-chars-012.html": [ + "9300ae3a903aabd8d0b4869bb3954329e37d0db3", + "reftest" + ], + "css/css-text/white-space/control-chars-013.html": [ + "f0e2b547cee43277ffbc2baaaee39c8243800e3a", + "reftest" + ], + "css/css-text/white-space/control-chars-014.html": [ + "e8c776a9d7db7d3b2ce4a2d2635dd1e931f0d895", + "reftest" + ], + "css/css-text/white-space/control-chars-015.html": [ + "718909dd47657575df18bd3f476d96dc00e81463", + "reftest" + ], + "css/css-text/white-space/control-chars-016.html": [ + "2ba460c03c5a2ba8887b423c1af19386ab45ee21", + "reftest" + ], + "css/css-text/white-space/control-chars-017.html": [ + "b4c96ca6523b600a8baebddc0e823162b2edbb23", + "reftest" + ], + "css/css-text/white-space/control-chars-018.html": [ + "3a4c59e18a05f18e614ea6b7fb7bb762d515431c", + "reftest" + ], + "css/css-text/white-space/control-chars-019.html": [ + "9517e79e4aa7acb7ab50d68b1fefc09c3af30404", + "reftest" + ], + "css/css-text/white-space/control-chars-01A.html": [ + "4f61bcb7538f5da61932079a3b578917a0c1cd7e", + "reftest" + ], + "css/css-text/white-space/control-chars-01B.html": [ + "fe9842b9ac0b5a204243b96cad8e9800681999f1", + "reftest" + ], + "css/css-text/white-space/control-chars-01C.html": [ + "aadc1a9138dc1f8a0ecbe6841b50faf152d37165", + "reftest" + ], + "css/css-text/white-space/control-chars-01D.html": [ + "266d30084efdf9b2e47b806a1f0c0ece4359b7ba", + "reftest" + ], + "css/css-text/white-space/control-chars-01E.html": [ + "8cd3ddff5111353fdd5824a048c76099f5872864", + "reftest" + ], + "css/css-text/white-space/control-chars-01F.html": [ + "61db980951db7aae3178721355c79c74479a2b46", + "reftest" + ], + "css/css-text/white-space/control-chars-07F.html": [ + "27d5f02c4b2643beb55eb16cc84e5d90e07522bc", + "reftest" + ], + "css/css-text/white-space/control-chars-080.html": [ + "ceedd013611c352fbabbfef24f686ebc4f79f5ee", + "reftest" + ], + "css/css-text/white-space/control-chars-081.html": [ + "0e16b010461b9d97bc384ac55b44d04f4a784fe1", + "reftest" + ], + "css/css-text/white-space/control-chars-082.html": [ + "c8461a7b2eacd409856138f609d5a5fea0c2711e", + "reftest" + ], + "css/css-text/white-space/control-chars-083.html": [ + "ec723809ff063e0d4efc9f78f4647dcf1ae1fe1b", + "reftest" + ], + "css/css-text/white-space/control-chars-084.html": [ + "249368173855c78449706549eddd7e45686b7855", + "reftest" + ], + "css/css-text/white-space/control-chars-085.html": [ + "52dba2a1b61527b1764b989b597753b9baca331a", + "reftest" + ], + "css/css-text/white-space/control-chars-086.html": [ + "39b132c588583d89131f7bd4859e7fe80072bfaf", + "reftest" + ], + "css/css-text/white-space/control-chars-087.html": [ + "2320088a7fc741ef44439b0daf5eb0efb21d32fd", + "reftest" + ], + "css/css-text/white-space/control-chars-088.html": [ + "12acc233258bf37eaae4c896b50c98aec3b08e05", + "reftest" + ], + "css/css-text/white-space/control-chars-089.html": [ + "367503c88c4d5d932556e525e924af9ac9512bcd", + "reftest" + ], + "css/css-text/white-space/control-chars-08A.html": [ + "1a21992d9709897e8d481e2d0f64adedd5099e79", + "reftest" + ], + "css/css-text/white-space/control-chars-08B.html": [ + "1ed441a455446e01ab09545c50d77ab3d5053714", + "reftest" + ], + "css/css-text/white-space/control-chars-08C.html": [ + "0c63ee54b609b2e65f5c1b81f004318c90a2d812", + "reftest" + ], + "css/css-text/white-space/control-chars-08D.html": [ + "e908f8e1a898f33f9ad89ecab3119434fd894b90", + "reftest" + ], + "css/css-text/white-space/control-chars-08E.html": [ + "55e87a556b8e1fef272d9ab285b66e0e06f9e730", + "reftest" + ], + "css/css-text/white-space/control-chars-08F.html": [ + "2d9bac9730964efd54f5a80e5726d3cdbd5020b7", + "reftest" + ], + "css/css-text/white-space/control-chars-090.html": [ + "c93258878c5e4705b306906da877a9b25f5fa440", + "reftest" + ], + "css/css-text/white-space/control-chars-091.html": [ + "a21f8779add0aa36d8ee2d2e783c0640224bffb0", + "reftest" + ], + "css/css-text/white-space/control-chars-092.html": [ + "5304eac57e69e853f41e651d787d9f6fb6a61605", + "reftest" + ], + "css/css-text/white-space/control-chars-093.html": [ + "a092e873066d7d3d0b7f670edf73aa8ee0051fd9", + "reftest" + ], + "css/css-text/white-space/control-chars-094.html": [ + "9005e8d098e84a7a53e476ba57e7551a8533b6e6", + "reftest" + ], + "css/css-text/white-space/control-chars-095.html": [ + "6befbaa1bb15c7b728584cc6acf0ac39bd9043f8", + "reftest" + ], + "css/css-text/white-space/control-chars-096.html": [ + "75e69d976b926f7562ca418ea1ecfcb3b2690fb0", + "reftest" + ], + "css/css-text/white-space/control-chars-097.html": [ + "8a2c4467ae879525c2d947c7b7e0681e8268e900", + "reftest" + ], + "css/css-text/white-space/control-chars-098.html": [ + "47e097789b6fdceca049f42a2ff5a6f535b9f8f9", + "reftest" + ], + "css/css-text/white-space/control-chars-099.html": [ + "73a6ea6f225bd218c77fa76defe336a99d7f9b80", + "reftest" + ], + "css/css-text/white-space/control-chars-09A.html": [ + "b34f9dc146e5a3dd208e62d84be66118a4a2cad0", + "reftest" + ], + "css/css-text/white-space/control-chars-09B.html": [ + "4c5fcdd45a723490964448c776f5b1255bf1f161", + "reftest" + ], + "css/css-text/white-space/control-chars-09C.html": [ + "6056a1c3de6f691cf3923c113d6f9bacbaf4a0ed", + "reftest" + ], + "css/css-text/white-space/control-chars-09D.html": [ + "850d2696c4ea4b6f65c1f2025b349bacd3b73638", + "reftest" + ], + "css/css-text/white-space/control-chars-09E.html": [ + "9613f9d01e2b005f81f17b627d2df1092c747fd9", + "reftest" + ], + "css/css-text/white-space/control-chars-09F.html": [ + "44f6f83f2d110ac24d99de9eccaa6321903d931f", + "reftest" + ], + "css/css-text/white-space/line-edge-white-space-collapse-001.html": [ + "4e144e6c330191435f183936c2ab2437ec4f7609", + "reftest" + ], + "css/css-text/white-space/line-edge-white-space-collapse-002.html": [ + "f3dbf4609f44e537328a741bd03059c09a38af45", + "reftest" + ], "css/css-text/white-space/pre-wrap-001.html": [ "31486f8f77c4c77188d94e9c21e9a8d5003e1bc4", "reftest" @@ -561429,6 +562865,18 @@ "f9063c98767e70c3899bc9a59b50b42a61240ae4", "reftest" ], + "css/css-text/white-space/reference/control-chars-000-ref.html": [ + "9d5fcb27147a8c53e410d08511cb5035b612f80c", + "support" + ], + "css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html": [ + "02fa594255f00396f66e86837409cd579282f7de", + "support" + ], + "css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html": [ + "ea1faa2ed1f7af05f932167762f85fc2e5150884", + "support" + ], "css/css-text/white-space/reference/pre-wrap-001-ref.html": [ "8a8b5132db197bb9a76b1b44e461405f4cd9d1bc", "support" @@ -583222,7 +584670,7 @@ "support" ], "css/support/grid.css": [ - "602e114880ae6576c0d440cf524ad284f89e708f", + "78fdd5e975ad61d3a8c39fe4e05694a278753c37", "support" ], "css/support/import-green.css": [ @@ -593002,7 +594450,7 @@ "support" ], "docs/_writing-tests/testdriver.md": [ - "eb9b9fb0413862ab41c2064dec88fc10e3f7611a", + "91686ce7f54975f97464c9b1eec3858bbda6f379", "support" ], "docs/_writing-tests/testharness-api.md": [ @@ -597821,6 +599269,10 @@ "65c1b21e6e8274dc06679a67c79a67dc1ba756c4", "support" ], + "feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html": [ + "9f78ea4bc2975abf6d37a24952df48e6dc75400f", + "support" + ], "feature-policy/experimental-features/resources/vertical-scroll-scrollintoview.html": [ "7bed27c2600b0a8f117fee3f13bb2e75c9d9c387", "support" @@ -597861,6 +599313,10 @@ "db2dcbc1929b9e1264855e9b80f77dfbda5d4f38", "support" ], + "feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html": [ + "6f827c919a43042ff4f1e481f676423239d4c336", + "manual" + ], "feature-policy/experimental-features/vertical-scroll-scrollintoview.tentative.html": [ "689685a4977a7ab08c5183fe04e427c25ce6f3cf", "testharness" @@ -604558,7 +606014,7 @@ "testharness" ], "html/dom/elements/the-innertext-idl-attribute/getter-tests.js": [ - "1195656a2a497b73a5da83580dd3a44d54f511ac", + "976d6d6bcef690e65636e4afa2f96d88a475bd7d", "support" ], "html/dom/elements/the-innertext-idl-attribute/getter.html": [ @@ -619769,6 +621225,22 @@ "0d1b9bade95d7b101c8dbf51547ffbaec2260c27", "support" ], + "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [ + "a3a9625fceed767373967ec2d0b1e4b8a2e66b27", + "support" + ], + "infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini": [ + "7a6cf82bbd3aad03ac3367e8a9b5e20e5aab1c25", + "support" + ], + "infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini": [ + "b809f4ebf61befb4df32e747637a39ad72622f61", + "support" + ], + "infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [ + "889e1f4b86bafc2065ed3f4208f74740b08968fe", + "support" + ], "infrastructure/reftest-wait-ref.html": [ "6772c2c460e79993979688ddf46e2045b14f7d71", "support" @@ -619909,6 +621381,22 @@ "ea7973a62e0ee9cdc874879fd844b2309e944e61", "testharness" ], + "infrastructure/testdriver/actions/elementPosition.html": [ + "145852e7b51bd0cdc9e7b4ef5ebddcbf1c0235c5", + "testharness" + ], + "infrastructure/testdriver/actions/elementTiming.html": [ + "cdfdff55f33ba591d5068ed0aea644527b12bc4e", + "testharness" + ], + "infrastructure/testdriver/actions/eventOrder.html": [ + "c85b861c7fd9b199ce7baa5c9eac49525db4754b", + "testharness" + ], + "infrastructure/testdriver/actions/multiDevice.html": [ + "5cab1206dbec8bc307fbdfed1bf3002cc02c299a", + "testharness" + ], "infrastructure/testdriver/bless.html": [ "b8a1c2e7d6000050351453a14a8bfb80d8af0c76", "testharness" @@ -632286,7 +633774,7 @@ "testharness" ], "payment-request/META.yml": [ - "f8460d403ffa42d9dfc1bae6e0c3e500f7742fc9", + "0a075e19c6bd89b662c088689c87124c1627d024", "support" ], "payment-request/MerchantValidationEvent/complete-method.https.html": [ @@ -642673,6 +644161,10 @@ "d47e325fbef64a425ba91f21a49a6d27e03a7e3b", "support" ], + "resources/testdriver-actions.js": [ + "46c68858e4574646ad3efaa5a6dba10127b27a29", + "support" + ], "resources/testdriver-vendor.js": [ "3e88403636396c439759705c751433b28e05f3ab", "support" @@ -642682,7 +644174,7 @@ "support" ], "resources/testdriver.js": [ - "42ec824d015ab53e1de21aa4e86564b9cd5ed094", + "e0741e8d61d4d67c99ccbfc860f65e796c44c78a", "support" ], "resources/testdriver.js.headers": [ @@ -653206,7 +654698,7 @@ "support" ], "tools/serve/test_functional.py": [ - "e423461f4810db07f20464ee13dffccc0851c5f2", + "60b950fc8aa8da00a28d6212c46c6c5c75a2ab0a", "support" ], "tools/serve/test_serve.py": [ @@ -657278,7 +658770,7 @@ "support" ], "tools/wptrunner/requirements.txt": [ - "fcb5922d10d53718997d0d5dca2e3f92e0862c8b", + "0e71ed50411b6697198d2b19787506ff959d7e11", "support" ], "tools/wptrunner/requirements_chrome.txt": [ @@ -657530,7 +659022,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/base.py": [ - "1dc962cfb0835dc4a5b9a6d7d760409a7df12204", + "fa266e3542916c97dad6b018038ec87a3397f262", "support" ], "tools/wptrunner/wptrunner/executors/executorchrome.py": [ @@ -657546,7 +659038,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executormarionette.py": [ - "4ab7bf3dde9c76fe160597bccc2df772199750a0", + "cc1d1e400c7970e6bc0993563efb569288b2d473", "support" ], "tools/wptrunner/wptrunner/executors/executoropera.py": [ @@ -657558,7 +659050,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executorselenium.py": [ - "c1d66b5706eb7a6803707c51253f8f5874690dbe", + "f81c0034c8bfe0c919c17927ff901680998fc41f", "support" ], "tools/wptrunner/wptrunner/executors/executorservo.py": [ @@ -657570,7 +659062,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executorwebdriver.py": [ - "879bd68d522f949426d5b8d4a6599c2e40efe3e8", + "553b79e750a4c3deab4a81e1cba73b94860e32e1", "support" ], "tools/wptrunner/wptrunner/executors/executorwebkit.py": [ @@ -657582,7 +659074,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/protocol.py": [ - "f8292ff5ec118b8f3d80da96bcd07586bedba45a", + "74a7cc4b7fc686318b9944272dc4118ae3cb95e4", "support" ], "tools/wptrunner/wptrunner/executors/pytestrunner/__init__.py": [ @@ -657658,7 +659150,7 @@ "support" ], "tools/wptrunner/wptrunner/testdriver-extra.js": [ - "ef962d35f22b915a74363ca53b10b3a05f630952", + "d77731a158e7e6069b04be1d9cad690c5e822d2b", "support" ], "tools/wptrunner/wptrunner/testdriver-vendor.js": [ @@ -657686,7 +659178,7 @@ "support" ], "tools/wptrunner/wptrunner/testrunner.py": [ - "931a7822d0b2ba5dad26e28326f3c817be15cc8c", + "46e3ff7926de2f2a2c86c8971e9f5a07f1f33a8a", "support" ], "tools/wptrunner/wptrunner/tests/__init__.py": [ @@ -657830,7 +659322,7 @@ "support" ], "tools/wptrunner/wptrunner/wptrunner.py": [ - "92ee971975316637b21a5af404d090aabdc7ec22", + "7ac7b709436c3b9b5fb9580a845e24eaeda71a32", "support" ], "tools/wptrunner/wptrunner/wpttest.py": [ @@ -657845,10 +659337,6 @@ "8e87d388488bbc21c664209fecd2f3e030411b0e", "support" ], - "tools/wptserve/.travis.yml": [ - "00183731ba5eb009c50a2d93285c379a7e7f8f5c", - "support" - ], "tools/wptserve/LICENSE": [ "45896e6be2bd51f4b78e9703caefb9b672e10a55", "support" @@ -657918,7 +659406,7 @@ "support" ], "tools/wptserve/tests/functional/base.py": [ - "e49c8287c5985aa5ebbed04ef3070bc785831733", + "f8331f5086d31730a8b86c0b708162d8e505f30d", "support" ], "tools/wptserve/tests/functional/docroot/document.txt": [ @@ -658046,11 +659534,11 @@ "support" ], "tools/wptserve/tests/functional/test_pipes.py": [ - "7aa73353386624e37b6c48fc087f8e9bd0ecb93a", + "fdac4537d64fb5d9c1fb8dd3e148cac7c5ec240a", "support" ], "tools/wptserve/tests/functional/test_request.py": [ - "096c0535b9ae79a9782be097545a51e526a29106", + "d94580140e21d5b8b901d84e35895e6a2a6a5edf", "support" ], "tools/wptserve/tests/functional/test_response.py": [ @@ -658094,15 +659582,15 @@ "support" ], "tools/wptserve/wptserve/pipes.py": [ - "cded8f6ea02d5058c0eda5c695d95a3824e9978f", + "cbae6d6fcb93ada3773fb58e73b43c7da8b267e2", "support" ], "tools/wptserve/wptserve/ranges.py": [ - "976cb1781a0dfe618038d94ea29169e6b86b3f98", + "104dca2ef6f834af8df341e508d8a101e4243957", "support" ], "tools/wptserve/wptserve/request.py": [ - "cb575ccdba4514a456c0cbf73904bb63c12fd7ff", + "990774cbb9e6a1666dfd3356266ae024ea5f68db", "support" ], "tools/wptserve/wptserve/response.py": [ diff --git a/tests/wpt/metadata/css/css-flexbox/dynamic-bsize-change.html.ini b/tests/wpt/metadata/css/css-flexbox/dynamic-bsize-change.html.ini new file mode 100644 index 00000000000..dc8b13ba93d --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/dynamic-bsize-change.html.ini @@ -0,0 +1,2 @@ +[dynamic-bsize-change.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-000.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-000.html.ini new file mode 100644 index 00000000000..8b5ff5f50c1 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-000.html.ini @@ -0,0 +1,2 @@ +[control-chars-000.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-001.html.ini new file mode 100644 index 00000000000..6eea3f81655 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-001.html.ini @@ -0,0 +1,2 @@ +[control-chars-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-002.html.ini new file mode 100644 index 00000000000..d10c36f2964 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-002.html.ini @@ -0,0 +1,2 @@ +[control-chars-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-003.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-003.html.ini new file mode 100644 index 00000000000..d6f8a027759 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-003.html.ini @@ -0,0 +1,2 @@ +[control-chars-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-004.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-004.html.ini new file mode 100644 index 00000000000..ff8d343c25b --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-004.html.ini @@ -0,0 +1,2 @@ +[control-chars-004.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-005.html.ini new file mode 100644 index 00000000000..843ad12c7f7 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-005.html.ini @@ -0,0 +1,2 @@ +[control-chars-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-006.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-006.html.ini new file mode 100644 index 00000000000..99865a198f6 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-006.html.ini @@ -0,0 +1,2 @@ +[control-chars-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-007.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-007.html.ini new file mode 100644 index 00000000000..508d9957b8e --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-007.html.ini @@ -0,0 +1,2 @@ +[control-chars-007.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-008.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-008.html.ini new file mode 100644 index 00000000000..1738df4851f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-008.html.ini @@ -0,0 +1,2 @@ +[control-chars-008.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-00B.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-00B.html.ini new file mode 100644 index 00000000000..31eba84d345 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-00B.html.ini @@ -0,0 +1,2 @@ +[control-chars-00B.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-00D.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-00D.html.ini new file mode 100644 index 00000000000..c1b4dc8af5d --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-00D.html.ini @@ -0,0 +1,2 @@ +[control-chars-00D.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-00E.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-00E.html.ini new file mode 100644 index 00000000000..3968f5f9e89 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-00E.html.ini @@ -0,0 +1,2 @@ +[control-chars-00E.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-00F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-00F.html.ini new file mode 100644 index 00000000000..0b0d02c263c --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-00F.html.ini @@ -0,0 +1,2 @@ +[control-chars-00F.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-010.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-010.html.ini new file mode 100644 index 00000000000..03e308782b5 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-010.html.ini @@ -0,0 +1,2 @@ +[control-chars-010.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-011.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-011.html.ini new file mode 100644 index 00000000000..5eaef40e8ca --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-011.html.ini @@ -0,0 +1,2 @@ +[control-chars-011.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-012.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-012.html.ini new file mode 100644 index 00000000000..bf2ff8b5017 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-012.html.ini @@ -0,0 +1,2 @@ +[control-chars-012.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-013.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-013.html.ini new file mode 100644 index 00000000000..53cd0764b67 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-013.html.ini @@ -0,0 +1,2 @@ +[control-chars-013.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-014.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-014.html.ini new file mode 100644 index 00000000000..9b0bbdf58fe --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-014.html.ini @@ -0,0 +1,2 @@ +[control-chars-014.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-015.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-015.html.ini new file mode 100644 index 00000000000..416b69f4d7a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-015.html.ini @@ -0,0 +1,2 @@ +[control-chars-015.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-016.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-016.html.ini new file mode 100644 index 00000000000..c69422404e4 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-016.html.ini @@ -0,0 +1,2 @@ +[control-chars-016.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-017.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-017.html.ini new file mode 100644 index 00000000000..f520bc38e7d --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-017.html.ini @@ -0,0 +1,2 @@ +[control-chars-017.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-018.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-018.html.ini new file mode 100644 index 00000000000..85e95732e3a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-018.html.ini @@ -0,0 +1,2 @@ +[control-chars-018.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-019.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-019.html.ini new file mode 100644 index 00000000000..d992fd534bc --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-019.html.ini @@ -0,0 +1,2 @@ +[control-chars-019.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01A.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01A.html.ini new file mode 100644 index 00000000000..cfddeae9f22 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01A.html.ini @@ -0,0 +1,2 @@ +[control-chars-01A.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01B.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01B.html.ini new file mode 100644 index 00000000000..d1e0e6b9f15 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01B.html.ini @@ -0,0 +1,2 @@ +[control-chars-01B.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01C.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01C.html.ini new file mode 100644 index 00000000000..d8bdc44d8ae --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01C.html.ini @@ -0,0 +1,2 @@ +[control-chars-01C.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01D.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01D.html.ini new file mode 100644 index 00000000000..c98607086c0 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01D.html.ini @@ -0,0 +1,2 @@ +[control-chars-01D.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01E.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01E.html.ini new file mode 100644 index 00000000000..748ef5294d8 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01E.html.ini @@ -0,0 +1,2 @@ +[control-chars-01E.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-01F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-01F.html.ini new file mode 100644 index 00000000000..82d2124bda1 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-01F.html.ini @@ -0,0 +1,2 @@ +[control-chars-01F.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-07F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-07F.html.ini new file mode 100644 index 00000000000..0e19383f65d --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-07F.html.ini @@ -0,0 +1,2 @@ +[control-chars-07F.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-080.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-080.html.ini new file mode 100644 index 00000000000..4124ec4f58a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-080.html.ini @@ -0,0 +1,2 @@ +[control-chars-080.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-081.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-081.html.ini new file mode 100644 index 00000000000..dab2227c23b --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-081.html.ini @@ -0,0 +1,2 @@ +[control-chars-081.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-082.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-082.html.ini new file mode 100644 index 00000000000..e9672509dc4 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-082.html.ini @@ -0,0 +1,2 @@ +[control-chars-082.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-083.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-083.html.ini new file mode 100644 index 00000000000..cfdfcc9860b --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-083.html.ini @@ -0,0 +1,2 @@ +[control-chars-083.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-084.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-084.html.ini new file mode 100644 index 00000000000..e14e920fd29 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-084.html.ini @@ -0,0 +1,2 @@ +[control-chars-084.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-085.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-085.html.ini new file mode 100644 index 00000000000..0a9bf159a93 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-085.html.ini @@ -0,0 +1,2 @@ +[control-chars-085.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-086.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-086.html.ini new file mode 100644 index 00000000000..81a9f5df256 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-086.html.ini @@ -0,0 +1,2 @@ +[control-chars-086.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-087.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-087.html.ini new file mode 100644 index 00000000000..2a7d2bdf6f0 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-087.html.ini @@ -0,0 +1,2 @@ +[control-chars-087.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-088.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-088.html.ini new file mode 100644 index 00000000000..941e79c33bb --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-088.html.ini @@ -0,0 +1,2 @@ +[control-chars-088.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-089.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-089.html.ini new file mode 100644 index 00000000000..2d380014c51 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-089.html.ini @@ -0,0 +1,2 @@ +[control-chars-089.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08A.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08A.html.ini new file mode 100644 index 00000000000..7fef30e5750 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08A.html.ini @@ -0,0 +1,2 @@ +[control-chars-08A.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08B.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08B.html.ini new file mode 100644 index 00000000000..1747f3806fb --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08B.html.ini @@ -0,0 +1,2 @@ +[control-chars-08B.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08C.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08C.html.ini new file mode 100644 index 00000000000..7a63e951454 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08C.html.ini @@ -0,0 +1,2 @@ +[control-chars-08C.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08D.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08D.html.ini new file mode 100644 index 00000000000..0a48430eb36 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08D.html.ini @@ -0,0 +1,2 @@ +[control-chars-08D.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08E.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08E.html.ini new file mode 100644 index 00000000000..127d41d36e7 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08E.html.ini @@ -0,0 +1,2 @@ +[control-chars-08E.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-08F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-08F.html.ini new file mode 100644 index 00000000000..88bbd75179f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-08F.html.ini @@ -0,0 +1,2 @@ +[control-chars-08F.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-090.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-090.html.ini new file mode 100644 index 00000000000..a65a36db13f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-090.html.ini @@ -0,0 +1,2 @@ +[control-chars-090.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-091.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-091.html.ini new file mode 100644 index 00000000000..c33a61dc3b5 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-091.html.ini @@ -0,0 +1,2 @@ +[control-chars-091.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-092.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-092.html.ini new file mode 100644 index 00000000000..d9147c77c23 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-092.html.ini @@ -0,0 +1,2 @@ +[control-chars-092.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-093.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-093.html.ini new file mode 100644 index 00000000000..205ca01117a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-093.html.ini @@ -0,0 +1,2 @@ +[control-chars-093.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-094.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-094.html.ini new file mode 100644 index 00000000000..352ca3815d7 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-094.html.ini @@ -0,0 +1,2 @@ +[control-chars-094.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-095.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-095.html.ini new file mode 100644 index 00000000000..7deb6fd90bb --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-095.html.ini @@ -0,0 +1,2 @@ +[control-chars-095.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-096.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-096.html.ini new file mode 100644 index 00000000000..a36a8c28570 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-096.html.ini @@ -0,0 +1,2 @@ +[control-chars-096.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-097.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-097.html.ini new file mode 100644 index 00000000000..44a89ff1f14 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-097.html.ini @@ -0,0 +1,2 @@ +[control-chars-097.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-098.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-098.html.ini new file mode 100644 index 00000000000..a5ae7dd54c4 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-098.html.ini @@ -0,0 +1,2 @@ +[control-chars-098.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-099.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-099.html.ini new file mode 100644 index 00000000000..1553b48bf1b --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-099.html.ini @@ -0,0 +1,2 @@ +[control-chars-099.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09A.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09A.html.ini new file mode 100644 index 00000000000..9907c26a62a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09A.html.ini @@ -0,0 +1,2 @@ +[control-chars-09A.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09B.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09B.html.ini new file mode 100644 index 00000000000..bb5c9961e71 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09B.html.ini @@ -0,0 +1,2 @@ +[control-chars-09B.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09C.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09C.html.ini new file mode 100644 index 00000000000..76e02dcc1ce --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09C.html.ini @@ -0,0 +1,2 @@ +[control-chars-09C.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09D.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09D.html.ini new file mode 100644 index 00000000000..662b20d92e0 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09D.html.ini @@ -0,0 +1,2 @@ +[control-chars-09D.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09E.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09E.html.ini new file mode 100644 index 00000000000..eec9dce8069 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09E.html.ini @@ -0,0 +1,2 @@ +[control-chars-09E.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/control-chars-09F.html.ini b/tests/wpt/metadata/css/css-text/white-space/control-chars-09F.html.ini new file mode 100644 index 00000000000..f2281628a73 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/control-chars-09F.html.ini @@ -0,0 +1,2 @@ +[control-chars-09F.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-001.html.ini new file mode 100644 index 00000000000..8c95fc3b691 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-001.html.ini @@ -0,0 +1,2 @@ +[line-edge-white-space-collapse-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-002.html.ini new file mode 100644 index 00000000000..754626ab7bc --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/line-edge-white-space-collapse-002.html.ini @@ -0,0 +1,2 @@ +[line-edge-white-space-collapse-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini index 5f219ddc85f..98c044f3c1a 100644 --- a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini +++ b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini @@ -68,6 +68,6 @@ [text-indent intermediate] expected: FAIL - [border-top-width end] + [bottom intermediate] 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/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini deleted file mode 100644 index dc2e45516de..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[traverse_the_history_5.html] - [Multiple history traversals, last would be aborted] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini index 20865f493ec..9579b42287e 100644 --- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini @@ -30,3 +30,6 @@ [Set HTTP URL frame location.protocol to data] expected: FAIL + [Set HTTP URL frame location.protocol to x] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini index 0f1a214d0ee..6b57ca778ee 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini @@ -5,7 +5,7 @@ expected: TIMEOUT [picture: source (max-width:500px) valid image, img valid image, resize to wide] - expected: FAIL + expected: TIMEOUT [picture: source (max-width:500px) valid image, img broken image, resize to narrow] expected: TIMEOUT @@ -16,18 +16,9 @@ [picture: source (max-width:500px) broken image, img valid image, resize to narrow] expected: FAIL - [img (srcset 1 cand) valid image, resize to wide] - expected: FAIL - - [picture: same URL in source (max-width:500px) and img, resize to wide] - expected: FAIL - [img (srcset 1 cand) valid image, resize to narrow] expected: FAIL - [picture: source (max-width:500px) valid image, img broken image, resize to wide] - expected: FAIL - [picture: same URL in source (max-width:500px) and img, resize to narrow] expected: FAIL 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 deleted file mode 100644 index 8cc42056d34..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini +++ /dev/null @@ -1,10 +0,0 @@ -[non-active-document.html] - [DOMParser] - expected: FAIL - - [createHTMLDocument] - expected: FAIL - - [<template>] - expected: FAIL - diff --git a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini index 818a429ed39..2ed601c6ff4 100644 --- a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini +++ b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini @@ -1,4 +1,4 @@ -[no-quirks.html] +[quirks.html] [top: -\\31 .5] expected: FAIL diff --git a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini index 86cf34ce8de..29123761468 100644 --- a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini +++ b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini @@ -1,13 +1,7 @@ [urlencoded-parser.any.html] - [response.formData() with input: a&b&c] - expected: FAIL - [response.formData() with input: _charset_=windows-1252&test=%C2x] expected: FAIL - [response.formData() with input: &&&a=b&&&&c=d&] - expected: FAIL - [request.formData() with input: _charset_=windows-1252&test=%C2x] expected: FAIL @@ -17,14 +11,20 @@ [response.formData() with input: a=b&c=d] expected: FAIL - -[urlencoded-parser.any.worker.html] [request.formData() with input: a&b&c] expected: FAIL [response.formData() with input: a=b&c=d&] expected: FAIL + [request.formData() with input: a=b&c=d] + expected: FAIL + + +[urlencoded-parser.any.worker.html] + [request.formData() with input: a&b&c] + expected: FAIL + [request.formData() with input: a=b&c=d&] expected: FAIL @@ -34,3 +34,12 @@ [request.formData() with input: &&&a=b&&&&c=d&] expected: FAIL + [request.formData() with input: _charset_=windows-1252&test=%C2x] + expected: FAIL + + [request.formData() with input: a=b&c=d] + expected: FAIL + + [response.formData() with input: _charset_=windows-1252&test=%C2x] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini index a56bad443a2..66bd350083b 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini @@ -1,5 +1,4 @@ [realtimeanalyser-fft-scaling.html] - expected: TIMEOUT [X 2048-point FFT peak position is not equal to 64. Got 0.] expected: FAIL diff --git a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini index bfd4d6dd2d6..bf2a1d61bab 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini @@ -1,5 +1,4 @@ [import-in-moduleworker.html] - expected: ERROR [Base URL in module dedicated workers: import] expected: FAIL diff --git a/tests/wpt/web-platform-tests/.travis.yml b/tests/wpt/web-platform-tests/.travis.yml index e0abc3cb953..b14cfafbdf7 100644 --- a/tests/wpt/web-platform-tests/.travis.yml +++ b/tests/wpt/web-platform-tests/.travis.yml @@ -4,23 +4,19 @@ language: python branches: only: - master -addons: - hosts: - - web-platform.test - - www.web-platform.test - - www1.web-platform.test - - www2.web-platform.test - - xn--n8j6ds53lwwkrqhv28a.web-platform.test - - xn--lve-6lad.web-platform.test before_install: # This needs be sourced as it sets various env vars - . ./tools/ci/before_install.sh install: - ./tools/ci/install.sh matrix: + # The use of `if` conditionals to exclude jobs from master should align with + # jobs unconditionally listed by `./wpt test-jobs`, regardless of affected + # paths. (The reverse is not true, as the manifest job could run on PRs too.) fast_finish: true include: - name: "tag master + upload manifest" + if: type = push AND branch = master os: linux python: "2.7" env: @@ -33,18 +29,22 @@ matrix: file: $WPT_MANIFEST_FILE.gz skip_cleanup: true - name: "lint" + # lint is run both on master and on PRs os: linux python: "2.7" env: JOB=lint SCRIPT=tools/ci/ci_lint.sh - name: "update-built-tests.sh" + if: type = pull_request os: linux python: "2.7" env: JOB=update_built SCRIPT=tools/ci/ci_built_diff.sh - name: "build-css-testsuites.sh" + if: type = pull_request os: linux python: "2.7" env: JOB=build_css SCRIPT=css/build-css-testsuites.sh - name: "stability (Firefox Nightly)" + if: type = pull_request os: linux python: "2.7" addons: @@ -54,8 +54,8 @@ matrix: env: - JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=firefox:nightly - name: "stability (Chrome Dev)" + if: type = pull_request os: linux - sudo: required python: "2.7" addons: apt: @@ -65,14 +65,17 @@ matrix: env: - JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=chrome:dev - name: "tools/ unittests (Python 2)" + if: type = pull_request os: linux python: "2.7" env: JOB=tools_unittest TOXENV=py27 HYPOTHESIS_PROFILE=ci SCRIPT=tools/ci/ci_tools_unittest.sh - name: "tools/ unittests (Python 3)" + if: type = pull_request os: linux python: "3.6" env: JOB=tools_unittest TOXENV=py36 HYPOTHESIS_PROFILE=ci SCRIPT=tools/ci/ci_tools_unittest.sh - name: "tools/wpt/ unittests" + if: type = pull_request os: linux python: "2.7" addons: @@ -81,10 +84,12 @@ matrix: - libnss3-tools env: JOB=wpt_integration TOXENV=py27,py27-flake8 SCRIPT=tools/ci/ci_wpt.sh - name: "resources/ tests" + if: type = pull_request os: linux python: "2.7" env: JOB=resources_unittest TOXENV=py27 SCRIPT=tools/ci/ci_resources_unittest.sh - name: "infrastructure/ tests" + if: type = pull_request os: linux python: "2.7" env: JOB=wptrunner_infrastructure SCRIPT=tools/ci/ci_wptrunner_infrastructure.sh diff --git a/tests/wpt/web-platform-tests/background-fetch/abort.https.window.js b/tests/wpt/web-platform-tests/background-fetch/abort.https.window.js deleted file mode 100644 index 588fcac012f..00000000000 --- a/tests/wpt/web-platform-tests/background-fetch/abort.https.window.js +++ /dev/null @@ -1,50 +0,0 @@ -// META: script=/service-workers/service-worker/resources/test-helpers.sub.js -// META: script=resources/utils.js -'use strict'; - -// Covers basic functionality provided by BackgroundFetchManager.abort(). -// https://wicg.github.io/background-fetch/#background-fetch-registration-abort - -backgroundFetchTest(async (test, backgroundFetch) => { - const registration = await backgroundFetch.fetch( - uniqueId(), - ['resources/feature-name.txt', '/serviceworker/resources/slow-response.php']); - - assert_true(await registration.abort()); - assert_false(await registration.abort()); - -}, 'Aborting the same registration twice fails'); - -backgroundFetchTest(async (test, backgroundFetch) => { - const registration = await backgroundFetch.fetch( - uniqueId(), - ['resources/feature-name.txt', '/serviceworker/resources/slow-response.php']); - const resultPromise = getMessageFromServiceWorker(); - - await new Promise(resolve => { - registration.onprogress = async (e) => { - // The size of the first file. - if (e.target.downloaded < 16) - return; - - // At this point the first file is downloaded. - - assert_true(await registration.abort()); - - const {type, eventRegistration, results} = await resultPromise; - - assert_equals(eventRegistration.result, 'failure'); - assert_equals(eventRegistration.failureReason, 'aborted'); - - assert_equals(type, 'backgroundfetchabort'); - assert_equals(results.length, 1); - - assert_true(results[0].url.includes('resources/feature-name.txt')); - assert_equals(results[0].status, 200); - assert_equals(results[0].text, 'Background Fetch'); - - resolve(); - }; - }); - -}, 'Calling BackgroundFetchRegistration.abort sets the correct fields and responses are still available');
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js b/tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js index 2e3fbfff1a8..af4655dbad4 100644 --- a/tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js +++ b/tests/wpt/web-platform-tests/background-fetch/service_workers/sw.js @@ -27,4 +27,3 @@ function handleBackgroundFetchUpdateEvent(event) { self.addEventListener('backgroundfetchsuccess', handleBackgroundFetchUpdateEvent); self.addEventListener('backgroundfetchfail', handleBackgroundFetchUpdateEvent); -self.addEventListener('backgroundfetchabort', handleBackgroundFetchUpdateEvent); diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/directive-name-case-insensitive.sub.html b/tests/wpt/web-platform-tests/content-security-policy/generic/directive-name-case-insensitive.sub.html new file mode 100644 index 00000000000..c65c59fb23f --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/generic/directive-name-case-insensitive.sub.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> + +<head> + <meta http-equiv="Content-Security-Policy" content=" + IMg-sRC 'self' 'unsafe-inline' http://{{domains[www1]}}:{{ports[http][0]}}; + img-src 'self' 'unsafe-inline' http://{{domains[www2]}}:{{ports[http][0]}};"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> + +<body> + <script> + var t1 = async_test("Test that the www1 image is allowed to load"); + var t2 = async_test("Test that the www2 image is not allowed to load"); + var t_spv = async_test("Test that the www2 image throws a violation event"); + window.addEventListener("securitypolicyviolation", t_spv.step_func_done(function(e) { + assert_equals(e.violatedDirective, "img-src"); + assert_equals(e.blockedURI, "http://{{domains[www2]}}:{{ports[http][0]}}/content-security-policy/support/fail.png"); + })); + </script> + + <img src="http://{{domains[www1]}}:{{ports[http][0]}}/content-security-policy/support/pass.png" + onload="t1.done();" + onerror="t1.step(function() { assert_unreached('www1 image should have loaded'); t1.done(); });"> + + <img src="http://{{domains[www2]}}:{{ports[http][0]}}/content-security-policy/support/fail.png" + onerror="t2.done();" + onload="t2.step(function() { assert_unreached('www2 image should not have loaded'); t2.done(); });"> +</body> + +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html b/tests/wpt/web-platform-tests/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html new file mode 100644 index 00000000000..3b54528d56a --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/inheritance/blob-url-self-navigate-inherits.sub.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> + +<head> + <script nonce="abc" src="/resources/testharness.js"></script> + <script nonce="abc" src="/resources/testharnessreport.js"></script> +</head> + +<!-- This tests that navigating a main window to a local scheme preserves the current CSP. + We need to test this in a main window with no parent/opener so we use + a link with target=_blank and rel=noopener. --> +<body> + <script> + const a = document.createElement("a") + a.href = "support/navigate-self-to-blob.html?csp=script-src%20%27nonce-abc%27&report_id={{$id:uuid()}}"; + a.target = "_blank" + a.rel = "noopener" + a.click() + </script> + <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=script-src%20%27nonce-abc%27&reportID={{$id}}'></script> +</body> + +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html b/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html new file mode 100644 index 00000000000..9ea069969ca --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html @@ -0,0 +1,6 @@ +<script nonce="abc"> + var blob_string = "<script>alert(document.domain)<\/script>"; + var blob = new Blob([blob_string], {type : 'text/html'}); + var url = URL.createObjectURL(blob); + location.href=url; +</script> diff --git a/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers new file mode 100644 index 00000000000..27aa5f4a102 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/inheritance/support/navigate-self-to-blob.html.sub.headers @@ -0,0 +1,4 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Pragma: no-cache +Content-Security-Policy: {{GET[csp]}}; report-uri http://{{host}}:{{ports[http][0]}}/content-security-policy/support/report.py?op=put&reportID={{GET[report_id]}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html new file mode 100644 index 00000000000..64d9498d6d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html @@ -0,0 +1,20 @@ +<html> +<head> + <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-c6TzhBw/snA+hlDMGOuKLWXIkb2sawA/S1wbSe6FeEM=';"> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> +</head> +<body> + <script nonce="abc"> + var t1 = async_test("Should convert the script contents to UTF-8 before hashing"); + window.addEventListener("securitypolicyviolation", t1.unreached_func("Should not have fired a spv")); + </script> + + <!-- � (micro sign) has the value of 0xB5 in latin-1 and of 0xC2B5 in utf-8 but the hash value should be the same as the utf-8 computed one --> + <script> + // � - latin micro sign + t1.done(); + </script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers new file mode 100644 index 00000000000..acc92f4e80b --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html.sub.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-8859-1 diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html new file mode 100644 index 00000000000..fdcc54534cc --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html @@ -0,0 +1,20 @@ +<html> +<head> + <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-hbNM6T3uO5pu4o5YfNnUmwtq5VHHMr7V5ospXtx9bqU=';"> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> +</head> +<body> + <script nonce="abc"> + var t3 = async_test("Should convert the script contents to UTF-8 before hashing"); + window.addEventListener("securitypolicyviolation", t3.unreached_func("Should not have fired a spv")); + </script> + + <!-- � (latin capital letter g with breve) has the value of 0xAB in latin-3 and of 0xC49E in utf-8 but the hash value should be the same as the utf-8 computed one --> + <script> + // � - latin capital letter g with breve + t3.done(); + </script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers new file mode 100644 index 00000000000..ae3e03dae1f --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html.sub.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-8859-3 diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html new file mode 100644 index 00000000000..23a64df1792 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html @@ -0,0 +1,20 @@ +<html> +<head> + <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-ST0rpskqtEC0Q0hqbIAZFeE1KBMJeGZGyYaTcTkieG8=';"> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> +</head> +<body> + <script nonce="abc"> + var t2 = async_test("Should convert the script contents to UTF-8 before hashing"); + window.addEventListener("securitypolicyviolation", t2.unreached_func("Should not have fired a spv")); + </script> + + <!-- � (greek small letter mu) has the value of 0xEC in latin-7 and of 0xCEBC in utf-8 but the hash value should be the same as the utf-8 computed one --> + <script> + // � - greek small letter mu + t2.done(); + </script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers new file mode 100644 index 00000000000..9550b0de30a --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html.sub.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-8859-7 diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html new file mode 100644 index 00000000000..a29d197a1ce --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html @@ -0,0 +1,20 @@ +<html> +<head> + <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-hbNM6T3uO5pu4o5YfNnUmwtq5VHHMr7V5ospXtx9bqU=';"> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> +</head> +<body> + <script nonce="abc"> + var t3 = async_test("Should convert the script contents to UTF-8 before hashing"); + window.addEventListener("securitypolicyviolation", t3.unreached_func("Should not have fired a spv")); + </script> + + <!-- � (latin capital letter g with breve) has the value of 0xD0 in latin-9 and of 0xC49E in utf-8 but the hash value should be the same as the utf-8 computed one --> + <script> + // � - latin capital letter g with breve + t3.done(); + </script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers new file mode 100644 index 00000000000..6382ff86a72 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html.sub.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=iso-8859-9 diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html new file mode 100644 index 00000000000..58730a72cc5 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html @@ -0,0 +1,31 @@ +<html> +<head> + <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-YJSaNEZFStZqU2Mp2EttwhcP2aT9lnDvexn+BM2HfKo=';"> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> +</head> +<body> + <script nonce="abc"> + var t = async_test("Should convert the script contents to UTF-8 before hashing"); + var count = 0; + var script_ran = function() { + // if both blocks run the tests is succsssful + if (++count == 2) t.done(); + } + window.addEventListener("securitypolicyviolation", t.unreached_func("Should not have fired a spv")); + + // Insert a script element that contains the U+FFFD replacement character + var scr1 = document.createElement('script'); + scr1.text ="//\uFFFD\nscript_ran();"; + document.body.appendChild(scr1); + + // Insert a script element that contains a surrogate character but it otherwise + // entirely identical to the previously inserted one, the surrogate should be + // be converted to U+FFFD when converting to UTF-8 so it should have the + // same hash as the one inserted before + var scr2 = document.createElement('script'); + scr2.text ="//\uD801\nscript_ran();"; + document.body.appendChild(scr2); + </script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers new file mode 100644 index 00000000000..2d1c08b9e8a --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8-lone-surrogate.html.sub.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=utf-8 diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html new file mode 100644 index 00000000000..b770cba2466 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html @@ -0,0 +1,36 @@ +<html> +<head> + <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' + 'sha256-c6TzhBw/snA+hlDMGOuKLWXIkb2sawA/S1wbSe6FeEM=' + 'sha256-ST0rpskqtEC0Q0hqbIAZFeE1KBMJeGZGyYaTcTkieG8=' + 'sha256-hbNM6T3uO5pu4o5YfNnUmwtq5VHHMr7V5ospXtx9bqU=';"> + <!-- hashes matching the 3 script blocks below --> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> +</head> +<body> + <script nonce="abc"> + var t1 = async_test("Should convert the script contents to UTF-8 before hashing - latin micro sign"); + window.addEventListener("securitypolicyviolation", t1.unreached_func("Should not have fired a spv")); + var t2 = async_test("Should convert the script contents to UTF-8 before hashing - greek small letter mu"); + window.addEventListener("securitypolicyviolation", t2.unreached_func("Should not have fired a spv")); + var t3 = async_test("Should convert the script contents to UTF-8 before hashing - latin capital letter g with breve"); + window.addEventListener("securitypolicyviolation", t3.unreached_func("Should not have fired a spv")); + </script> + + <!-- the hash values of these script blocks should match the same values + of identical script blocks in documents with other encodings --> + <script> + // µ - latin micro sign + t1.done(); + </script> + <script> + // μ - greek small letter mu + t2.done(); + </script> + <script> + // Ğ - latin capital letter g with breve + t3.done(); + </script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers new file mode 100644 index 00000000000..2d1c08b9e8a --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/hash-always-converted-to-utf-8/utf-8.html.sub.headers @@ -0,0 +1 @@ +Content-Type: text/html; charset=utf-8 diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/absolute-non-replaced-height-013.html b/tests/wpt/web-platform-tests/css/CSS2/positioning/absolute-non-replaced-height-013.html new file mode 100644 index 00000000000..46929f360a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/absolute-non-replaced-height-013.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<title>Auto margin-top and margin-bottom, non-auto everything else</title> +<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-height"> +<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; top:50%; bottom:50%; width:100px; height:100px; margin:auto; background:green;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change-ref.html new file mode 100644 index 00000000000..b8db7ea2c7d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change-ref.html @@ -0,0 +1,18 @@ +<!doctype html> +<title>CSS Test Reference</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<style> + div { + border: 1px solid; + } + #myHeightChanges { + width: 100px; + height: 200px; + background: green; + } +</style> +<div style="display:flex; flex-direction:column"> + <div style="height:auto"> + <div id="myHeightChanges"></div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change.html b/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change.html new file mode 100644 index 00000000000..7148f26e277 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/dynamic-bsize-change.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>CSS Test: Dynamic change to the block size inside an auto-sized flex item</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1496833"> +<link rel="match" href="dynamic-bsize-change-ref.html"> +<style> + div { + border: 1px solid; + } + #myHeightChanges { + width: 100px; + height: 100px; + background: green; + } +</style> +<div style="display:flex; flex-direction:column"> + <div style="height:auto"> + <div id="myHeightChanges"></div> + </div> +</div> +<script> +onload = function() { + window.unused = myHeightChanges.offsetTop; + myHeightChanges.style.height = "200px"; +} +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css b/tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css index 602e114880a..78fdd5e975a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css +++ b/tests/wpt/web-platform-tests/css/css-grid/abspos/support/grid.css @@ -68,6 +68,12 @@ grid-row: 3; } +.thirdRowThirdColumn { + background-color: salmon; + grid-column: 3; + grid-row: 3; +} + .firstRowThirdColumn { background-color: magenta; grid-column: 3; diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css index 602e114880a..78fdd5e975a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/support/grid.css @@ -68,6 +68,12 @@ grid-row: 3; } +.thirdRowThirdColumn { + background-color: salmon; + grid-column: 3; + grid-row: 3; +} + .firstRowThirdColumn { background-color: magenta; grid-column: 3; diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-001.html new file mode 100644 index 00000000000..cb5e8ee23b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-001.html @@ -0,0 +1,95 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with relative offsets</title> +<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-item-sizing"> +<meta name="assert" content="Checks that relative offests work for grid items."> +<link rel="stylesheet" href="support/grid.css"> +<style> +.grid { + position: relative; + grid: 90px 60px 30px / 200px 150px 100px; + inline-size: 600px; + block-size: 300px; +} + +.grid > div { position: relative; } +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<div id="log"></div> + +<h3>Direction LTR</h3> + +<div class="grid"> + <div class="firstRowFirstColumn" style="left: 10px; top: 9px;" + data-offset-x="10" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div> + <div class="secondRowSecondColumn" style="left: -15px; top: -12px;" + data-offset-x="185" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div> + <div class="thirdRowThirdColumn" style="right: 30px; bottom: 21px;" + data-offset-x="320" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div> +</div> + +<h3>Direction RTL</h3> + +<div class="grid directionRTL"> + <div class="firstRowFirstColumn" style="left: 10px; top: 9px;" + data-offset-x="410" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div> + <div class="secondRowSecondColumn" style="left: -15px; top: -12px;" + data-offset-x="235" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div> + <div class="thirdRowThirdColumn" style="right: 30px; bottom: 21px;" + data-offset-x="120" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div> +</div> + +<h2>Writing Mode vertical-lr</h2> + +<h3>Direction LTR</h3> + +<div class="grid verticalLR"> + <div class="firstRowFirstColumn" style="left: 9px; top: 10px;" + data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div> + <div class="secondRowSecondColumn" style="left: -12px; top: -15px;" + data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div> + <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;" + data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div> +</div> + +<h3>Direction RTL</h3> + +<div class="grid verticalLR directionRTL"> + <div class="firstRowFirstColumn" style="left: 9px; top: 10px;" + data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div> + <div class="secondRowSecondColumn" style="left: -12px; top: -15px;" + data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div> + <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;" + data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div> +</div> + +<h2>Writing Mode vertical-rl</h2> + +<h3>Direction LTR</h3> + +<div class="grid verticalRL"> + <div class="firstRowFirstColumn" style="left: 9px; top: 10px;" + data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div> + <div class="secondRowSecondColumn" style="left: -12px; top: -15px;" + data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div> + <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;" + data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div> +</div> + +<h3>Direction RTL</h3> + +<div class="grid verticalRL directionRTL"> + <div class="firstRowFirstColumn" style="left: 9px; top: 10px;" + data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div> + <div class="secondRowSecondColumn" style="left: -12px; top: -15px;" + data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div> + <div class="thirdRowThirdColumn" style="right: 21px; bottom: 30px;" + data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div> +</div> + diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-002.html b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-002.html new file mode 100644 index 00000000000..d92fca3ebb0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/grid-items-relative-offsets-002.html @@ -0,0 +1,94 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Grid items with relative offsets</title> +<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-item-sizing"> +<meta name="assert" content="Checks that relative percentage offests work for grid items."> +<link rel="stylesheet" href="support/grid.css"> +<style> +.grid { + position: relative; + grid: 90px 60px 30px / 200px 150px 100px; + inline-size: 600px; + block-size: 300px; +} + +.grid > div { position: relative; } +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.grid')"> + +<div id="log"></div> + +<h3>Direction LTR</h3> + +<div class="grid"> + <div class="firstRowFirstColumn" style="left: 5%; top: 10%;" + data-offset-x="10" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div> + <div class="secondRowSecondColumn" style="left: -10%; top: -20%;" + data-offset-x="185" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div> + <div class="thirdRowThirdColumn" style="right: 30%; bottom: 70%;" + data-offset-x="320" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div> +</div> + +<h3>Direction RTL</h3> + +<div class="grid directionRTL"> + <div class="firstRowFirstColumn" style="left: 5%; top: 10%;" + data-offset-x="410" data-offest-y="9" data-expected-width="200" data-expected-height="90"></div> + <div class="secondRowSecondColumn" style="left: -10%; top: -20%;" + data-offset-x="235" data-offest-y="78" data-expected-width="150" data-expected-height="60"></div> + <div class="thirdRowThirdColumn" style="right: 30%; bottom: 70%;" + data-offset-x="120" data-offest-y="129" data-expected-width="100" data-expected-height="30"></div> +</div> + +<h2>Writing Mode vertical-lr</h2> + +<h3>Direction LTR</h3> + +<div class="grid verticalLR"> + <div class="firstRowFirstColumn" style="left: 10%; top: 5%;" + data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div> + <div class="secondRowSecondColumn" style="left: -20%; top: -10%;" + data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div> + <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;" + data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div> +</div> + +<h3>Direction RTL</h3> + +<div class="grid verticalLR directionRTL"> + <div class="firstRowFirstColumn" style="left: 10%; top: 5%;" + data-offset-x="9" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div> + <div class="secondRowSecondColumn" style="left: -20%; top: -10%;" + data-offset-x="78" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div> + <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;" + data-offset-x="129" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div> +</div> + +<h2>Writing Mode vertical-rl</h2> + +<h3>Direction LTR</h3> + +<div class="grid verticalRL"> + <div class="firstRowFirstColumn" style="left: 10%; top: 5%;" + data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div> + <div class="secondRowSecondColumn" style="left: -20%; top: -10%;" + data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div> + <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;" + data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div> +</div> + +<h3>Direction RTL</h3> + +<div class="grid verticalRL directionRTL"> + <div class="firstRowFirstColumn" style="left: 10%; top: 5%;" + data-offset-x="219" data-offest-y="10" data-expected-width="90" data-expected-height="200"></div> + <div class="secondRowSecondColumn" style="left: -20%; top: -10%;" + data-offset-x="138" data-offest-y="75" data-expected-width="60" data-expected-height="150"></div> + <div class="thirdRowThirdColumn" style="right: 70%; bottom: 30%;" + data-offset-x="99" data-offest-y="120" data-expected-width="30" data-expected-height="100"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css b/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css index 602e114880a..78fdd5e975a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-items/support/grid.css @@ -68,6 +68,12 @@ grid-row: 3; } +.thirdRowThirdColumn { + background-color: salmon; + grid-column: 3; + grid-row: 3; +} + .firstRowThirdColumn { background-color: magenta; grid-column: 3; diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css b/tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css index 602e114880a..78fdd5e975a 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-model/support/grid.css @@ -68,6 +68,12 @@ grid-row: 3; } +.thirdRowThirdColumn { + background-color: salmon; + grid-column: 3; + grid-row: 3; +} + .firstRowThirdColumn { background-color: magenta; grid-column: 3; diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html index 98150558dae..1d757df168b 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html @@ -537,4 +537,61 @@ test(function(){ assert_parsed_type(gen_prop('<length># | fail', 'fail'), '10px, 20px', CSSUnitValue); }, 'CSSStyleValue.parse[All] returns list of CSSUnitValues for <length>#'); +// Direct CSSStyleValue objects: + +function gen_all_props() { + return [ + gen_prop('*', 'foo'), + gen_prop('foo', 'foo'), + gen_prop('<angle>', '0deg'), + gen_prop('<color>', 'rgb(1, 2, 3)'), + gen_prop('<custom-ident>', 'thing'), + gen_prop('<image>', 'url(a)'), + gen_prop('<integer>', '0'), + gen_prop('<length-percentage>', 'calc(10px + 10%)'), + gen_prop('<length>', '0px'), + gen_prop('<number>', '0.5'), + gen_prop('<percentage>', '0%'), + gen_prop('<resolution>', '0dpi'), + gen_prop('<time>', '0s'), + gen_prop('<transform-function>', 'rotateX(0deg)'), + gen_prop('<transform-list>', 'rotateX(0deg)'), + gen_prop('<url>', 'url(a)') + ]; +} + +test(function(){ + let props0 = gen_all_props(); + let props1 = gen_all_props(); + + for (let i = 0; i < props0.length; i++) { + let prop0 = props0[i]; + let prop1 = props1[i]; + + // Abuse computedStyleMap to get the initialValue (just to get some + // value that will parse for prop0/1's syntax). + let initialValue = target.computedStyleMap().get(prop0); + + // We only care about direct CSSStyleValue instances in this test. + // Ultimately, in some future version of CSS TypedOM, we may have no + // direct CSSStyleValue instances at all, which is fine. + if (initialValue.constructor !== CSSStyleValue) { + continue; + } + + let value = CSSStyleValue.parse(prop0, initialValue.toString()); + + // A value parsed for prop0 must be assignable to prop0. + target.attributeStyleMap.clear(); + target.attributeStyleMap.set(prop0, value); // Don't throw. + + // A value parsed for prop0 must not be assignable to prop1, even if + // the properties have compatible syntaxes. + assert_throws(new TypeError(), () => { + target.attributeStyleMap.clear(); + target.attributeStyleMap.set(prop1, value); + }); + } +}, 'Direct CSSStyleValue instances are tied to their associated property'); + </script> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-001.html b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-001.html new file mode 100644 index 00000000000..694087f56b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-001.html @@ -0,0 +1,21 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: the selector inside :host-context() affects specificity</title> +<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> +<link rel="match" href="reference/green-box.html"> +<p>Test passes if you see a single 100px by 100px green box below.</p> +<div id="host"></div> +<script> + host.attachShadow({ mode: 'open' }).innerHTML = ` + <style> + :host-context(#host) { + width: 100px; + height: 100px; + background: green; + } + :host { + background: red; + } + </style> + `; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-002.html b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-002.html new file mode 100644 index 00000000000..3d4d3e5b245 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-002.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: :host-context() is accounted for during specificity computation</title> +<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> +<link rel="match" href="reference/green-box.html"> +<p>Test passes if you see a single 100px by 100px green box below.</p> +<div id="host"></div> +<script> + host.attachShadow({ mode: 'open' }).innerHTML = ` + <style> + .foo span { + display: block; + width: 100px; + height: 100px; + background: red; + } + :host-context(*) span { + background: green; + } + </style> + <div class="foo"><span></span></div> + `; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-003.html b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-003.html new file mode 100644 index 00000000000..7abf8847c95 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/host-context-specificity-003.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: the :host-context() selector affects specificity</title> +<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> +<link rel="match" href="reference/green-box.html"> +<p>Test passes if you see a single 100px by 100px green box below.</p> +<div id="host"></div> +<script> + host.attachShadow({ mode: 'open' }).innerHTML = ` + <style> + :host-context(*) div { + width: 100px; + height: 100px; + background: green; + } + div { + background: red; + } + </style> + <div></div> + `; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/host-specificity-003.html b/tests/wpt/web-platform-tests/css/css-scoping/host-specificity-003.html new file mode 100644 index 00000000000..54a22599d8f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scoping/host-specificity-003.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Test: the :host() selector affects specificity</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/1915"> +<link rel="help" href="https://bugzil.la/1454165"> +<link rel="match" href="reference/green-box.html"> +<p>Test passes if you see a single 100px by 100px green box below.</p> +<div id="host"></div> +<script> + host.attachShadow({ mode: 'open' }).innerHTML = ` + <style> + :host(*) div { + width: 100px; + height: 100px; + background: green; + } + div { + background: red; + } + </style> + <div></div> + `; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html new file mode 100644 index 00000000000..2a56298e982 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/"> + +<p>There should be no red below.</p> +<div id="container" style="writing-mode:vertical-rl; overflow:auto; width:300px; height:300px;"> + <div style="width:300px; background:red;"></div> + <div style="width:400px; font-size:16px; line-height:25px;"> + <span id="displayMe" style="color:red; display:none;"> + FAIL<br>FAIL<br>FAIL<br>FAIL<br> + </span> + line<br> + </div> + <div id="displayMeToo" style="display:none; width:300px; background:red;"></div> +</div> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + test(()=> { + var container = document.getElementById("container"); + var displayMe = document.getElementById("displayMe"); + var displayMeToo = document.getElementById("displayMeToo"); + // Scroll the text container into view. + container.scrollLeft = 100; + displayMe.style.display = "inline"; + displayMeToo.style.display = "block"; + assert_equals(container.scrollLeft, 300); + }, "Line at edge of scrollport shouldn't jump visually when content is inserted before"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html new file mode 100644 index 00000000000..5b3bc918d15 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test reference</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<style> +div { padding-left: 50px; } +</style> + +<p>Test passes if there is a single black X below and no red. +<div>X</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html new file mode 100644 index 00000000000..65969260c5e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: text-indent percentage resolution basis</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#text-indent-property"> +<meta name="flags" content=""> +<link rel="match" href="reference/text-indent-percentage-002-ref.html"> +<meta name="assert" content="Percentages in text-indent refer to width of the element's content box"> +<style> +section { position: absolute; } +section, div { + border-right: 10px solid white; + margin-right: 10px; + padding-right: 10px; +} +div { + box-sizing: border-box; + width: 120px; +} +.test div { text-indent: 50%; color: red; } +.ref div { text-indent: 50px; } +</style> + +<p>Test passes if there is a single black X below and no red. +<section class=test><div>X</div></section> +<section class=ref><div>X</div></section> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html new file mode 100644 index 00000000000..f81390da873 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: text-indent percentage resolution basis</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#text-indent-property"> +<meta name="flags" content=""> +<link rel="match" href="reference/text-indent-percentage-002-ref.html"> +<meta name="assert" content="Percentages in text-indent refer to width of the element's content box"> +<style> +section { position: absolute; } +section, div { + border-right: 10px solid white; + margin-right: 10px; + padding-right: 10px; +} +div { + box-sizing: border-box; + width: 120px; +} +.test div { text-indent: 50%; color: red; overflow: hidden; } /* overflow:hidden should not make any difference, but it does in some browsers */ +.ref div { text-indent: 50px; } +</style> + +<p>Test passes if there is a single black X below and no red. +<section class=test><div>X</div></section> +<section class=ref><div>X</div></section> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html new file mode 100644 index 00000000000..73f4c219558 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang=en> +<meta charset="utf-8"> +<title>CSS Text Test: text-indent percentage resolution basis, in a calc expressiong</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#text-indent-property"> +<meta name="flags" content=""> +<link rel="match" href="reference/text-indent-percentage-002-ref.html"> +<meta name="assert" content="Percentages in text-indent refer to width of the element's content box, when used in a calc expression"> +<style> +section { position: absolute; } +section, div { + border-right: 10px solid white; + margin-right: 10px; + padding-right: 10px; +} +div { + box-sizing: border-box; + width: 120px; +} +.test div { text-indent: calc(25px + 25%); color: red; } +.ref div { text-indent: 50px; } +</style> + +<p>Test passes if there is a single black X below and no red. +<section class=test><div>X</div></section> +<section class=ref><div>X</div></section> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-000.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-000.html new file mode 100644 index 00000000000..b038fe9a90d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-000.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0000</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0000, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0000" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-001.html new file mode 100644 index 00000000000..e43fda55431 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-001.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0001</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0001, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0001" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-002.html new file mode 100644 index 00000000000..a81a30723aa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-002.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0002</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0002, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0002" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-003.html new file mode 100644 index 00000000000..e0d156a9795 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-003.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0003</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0003, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0003" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-004.html new file mode 100644 index 00000000000..b33c4475ba9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-004.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0004</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0004, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0004" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-005.html new file mode 100644 index 00000000000..d14e86b80b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-005.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0005</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0005, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0005" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-006.html new file mode 100644 index 00000000000..2b05272fec8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-006.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0006</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0006, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0006" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-007.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-007.html new file mode 100644 index 00000000000..60587d9abdb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-007.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0007</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0007, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0007" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-008.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-008.html new file mode 100644 index 00000000000..fbe91aae055 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-008.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0008</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0008, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0008" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00B.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00B.html new file mode 100644 index 00000000000..6cdf0b35cf1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00B.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+000B</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+000B, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\000B" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00D.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00D.html new file mode 100644 index 00000000000..b7d1d44b0cc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00D.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+000D</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+000D, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\000D" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00E.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00E.html new file mode 100644 index 00000000000..826b4bb0d6a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00E.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+000E</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+000E, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\000E" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00F.html new file mode 100644 index 00000000000..53618a8b79d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-00F.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+000F</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+000F, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\000F" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-010.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-010.html new file mode 100644 index 00000000000..52c66387695 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-010.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0010</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0010, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0010" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-011.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-011.html new file mode 100644 index 00000000000..8aa8d94b918 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-011.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0011</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0011, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0011" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-012.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-012.html new file mode 100644 index 00000000000..9300ae3a903 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-012.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0012</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0012, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0012" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-013.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-013.html new file mode 100644 index 00000000000..f0e2b547cee --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-013.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0013</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0013, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0013" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-014.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-014.html new file mode 100644 index 00000000000..e8c776a9d7d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-014.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0014</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0014, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0014" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-015.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-015.html new file mode 100644 index 00000000000..718909dd476 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-015.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0015</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0015, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0015" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-016.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-016.html new file mode 100644 index 00000000000..2ba460c03c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-016.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0016</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0016, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0016" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-017.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-017.html new file mode 100644 index 00000000000..b4c96ca6523 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-017.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0017</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0017, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0017" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-018.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-018.html new file mode 100644 index 00000000000..3a4c59e18a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-018.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0018</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0018, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0018" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-019.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-019.html new file mode 100644 index 00000000000..9517e79e4aa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-019.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0019</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0019, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0019" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01A.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01A.html new file mode 100644 index 00000000000..4f61bcb7538 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01A.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+001A</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+001A, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\001A" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01B.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01B.html new file mode 100644 index 00000000000..fe9842b9ac0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01B.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+001B</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+001B, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\001B" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01C.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01C.html new file mode 100644 index 00000000000..aadc1a9138d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01C.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+001C</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+001C, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\001C" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01D.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01D.html new file mode 100644 index 00000000000..266d30084ef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01D.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+001D</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+001D, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\001D" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01E.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01E.html new file mode 100644 index 00000000000..8cd3ddff511 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01E.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+001E</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+001E, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\001E" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01F.html new file mode 100644 index 00000000000..61db980951d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-01F.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+001F</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+001F, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\001F" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-07F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-07F.html new file mode 100644 index 00000000000..27d5f02c4b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-07F.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+007F</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+007F, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\007F" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-080.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-080.html new file mode 100644 index 00000000000..ceedd013611 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-080.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0080</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0080, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0080" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-081.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-081.html new file mode 100644 index 00000000000..0e16b010461 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-081.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0081</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0081, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0081" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-082.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-082.html new file mode 100644 index 00000000000..c8461a7b2ea --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-082.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0082</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0082, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0082" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-083.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-083.html new file mode 100644 index 00000000000..ec723809ff0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-083.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0083</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0083, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0083" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-084.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-084.html new file mode 100644 index 00000000000..24936817385 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-084.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0084</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0084, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0084" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-085.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-085.html new file mode 100644 index 00000000000..52dba2a1b61 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-085.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0085</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0085, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0085" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-086.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-086.html new file mode 100644 index 00000000000..39b132c5885 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-086.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0086</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0086, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0086" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-087.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-087.html new file mode 100644 index 00000000000..2320088a7fc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-087.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0087</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0087, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0087" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-088.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-088.html new file mode 100644 index 00000000000..12acc233258 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-088.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0088</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0088, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0088" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-089.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-089.html new file mode 100644 index 00000000000..367503c88c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-089.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0089</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0089, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0089" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08A.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08A.html new file mode 100644 index 00000000000..1a21992d970 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08A.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+008A</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+008A, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\008A" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08B.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08B.html new file mode 100644 index 00000000000..1ed441a4554 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08B.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+008B</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+008B, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\008B" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08C.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08C.html new file mode 100644 index 00000000000..0c63ee54b60 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08C.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+008C</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+008C, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\008C" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08D.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08D.html new file mode 100644 index 00000000000..e908f8e1a89 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08D.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+008D</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+008D, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\008D" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08E.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08E.html new file mode 100644 index 00000000000..55e87a556b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08E.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+008E</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+008E, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\008E" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08F.html new file mode 100644 index 00000000000..2d9bac97309 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-08F.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+008F</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+008F, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\008F" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-090.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-090.html new file mode 100644 index 00000000000..c93258878c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-090.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0090</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0090, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0090" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-091.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-091.html new file mode 100644 index 00000000000..a21f8779add --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-091.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0091</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0091, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0091" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-092.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-092.html new file mode 100644 index 00000000000..5304eac57e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-092.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0092</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0092, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0092" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-093.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-093.html new file mode 100644 index 00000000000..a092e873066 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-093.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0093</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0093, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0093" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-094.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-094.html new file mode 100644 index 00000000000..9005e8d098e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-094.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0094</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0094, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0094" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-095.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-095.html new file mode 100644 index 00000000000..6befbaa1bb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-095.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0095</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0095, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0095" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-096.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-096.html new file mode 100644 index 00000000000..75e69d976b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-096.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0096</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0096, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0096" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-097.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-097.html new file mode 100644 index 00000000000..8a2c4467ae8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-097.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0097</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0097, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0097" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-098.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-098.html new file mode 100644 index 00000000000..47e097789b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-098.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0098</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0098, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0098" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-099.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-099.html new file mode 100644 index 00000000000..73a6ea6f225 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-099.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+0099</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+0099, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\0099" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09A.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09A.html new file mode 100644 index 00000000000..b34f9dc146e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09A.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+009A</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+009A, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\009A" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09B.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09B.html new file mode 100644 index 00000000000..4c5fcdd45a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09B.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+009B</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+009B, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\009B" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09C.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09C.html new file mode 100644 index 00000000000..6056a1c3de6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09C.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+009C</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+009C, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\009C" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09D.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09D.html new file mode 100644 index 00000000000..850d2696c4e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09D.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+009D</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+009D, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\009D" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09E.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09E.html new file mode 100644 index 00000000000..9613f9d01e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09E.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+009E</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+009E, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\009E" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09F.html b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09F.html new file mode 100644 index 00000000000..44f6f83f2d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/control-chars-09F.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset=utf-8> +<title>Control charcters must be visible: U+009F</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#white-space-processing"> +<link rel=mismatch href="reference/control-chars-000-ref.html"> +<meta name=flags content=""> +<meta name=assert content="U+009F, which is in the unicode category CC, must be visible"> +<style> +div { + font-size: 4em; +} +div::after { content: "\009F" } /* Injecting via CSS, to avoid any mangling by the html parser */ +</style> + +<p>Test passes if there is a visible character below. + +<div></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-001.html new file mode 100644 index 00000000000..4e144e6c330 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-001.html @@ -0,0 +1,40 @@ +<!doctype html> +<html> +<meta charset=utf-8> +<link rel="author" title="Mike Bremford" href="mailto:mike@bfo.com"> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/line-edge-white-space-collapse-001-ref.html"> +<meta name="flags" content=""> +<title>White space collapse at end of line collapses through an inline</title> +<style> +div { font: 30px/30px monospace; } +span span { border-left: 30px solid green } +aside { + font: 30px/30px monospace; + width: 30px; + background: red; + position: absolute; + z-index:-1; + height: 300px; + + /* to avoid accidental bleeding at the edges by a pixel or a sub pixel*/ + box-sizing: border-box; + border: solid white 5px; + margin-left: 1ch; +} +</style> + +<p>Test passes if there is a single green rectangle next to ABCDEFGHIJ, and no red. + +<aside></aside> +<div><span>A <span> </span> </span></div> +<div><span>B <span> </span> </span></div> +<div><span>C <span> </span> </span></div> +<div><span>D <span> </span></span></div> +<div><span>E <span> </span> </span></div> +<div><span>F <span> </span> </span></div> +<div><span>G <span> </span></span></div> +<div><span>H<span> </span> </span></div> +<div><span>I<span> </span></span></div> +<div><span>J<span></span></span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-002.html new file mode 100644 index 00000000000..f3dbf4609f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/line-edge-white-space-collapse-002.html @@ -0,0 +1,40 @@ +<!doctype html> +<html> +<meta charset=utf-8> +<link rel="author" title="Mike Bremford" href="mailto:mike@bfo.com"> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/line-edge-white-space-collapse-002-ref.html"> +<meta name="flags" content=""> +<title>White space collapse at start of line collapses through an inline</title> +<style> +div { font: 30px/30px monospace; } +span span { border-left: 30px solid green } +aside { + font: 30px/30px monospace; + width: 30px; + background: red; + position: absolute; + z-index:-1; + height: 300px; + + /* to avoid accidental bleeding at the edges by a pixel or a sub pixel*/ + box-sizing: border-box; + border: solid white 5px; +} +</style> + +<p>Test passes if there is a single green rectangle, and no red. The letters KLMNOPQRST must be immediately to its right, vertically aligned with each other. + +<aside></aside> +<div><span> <span> </span> K</span></div> +<div><span> <span> </span> L</span></div> +<div><span> <span> </span> M</span></div> +<div><span><span> </span> N</span></div> +<div><span> <span> </span> O </span></div> +<div><span> <span> </span> P</span></div> +<div><span><span> </span> Q</span></div> +<div><span> <span> </span>R</span></div> +<div><span><span> </span>S</span></div> +<div><span><span></span>T</span></div> + diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/control-chars-000-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/control-chars-000-ref.html new file mode 100644 index 00000000000..9d5fcb27147 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/control-chars-000-ref.html @@ -0,0 +1,6 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS test mismatch reference</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> + +<p>Test passes if there is a visible character below. diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html new file mode 100644 index 00000000000..02fa594255f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-001-ref.html @@ -0,0 +1,23 @@ +<!doctype html> +<html> +<meta charset=utf-8> +<link rel="author" title="Mike Bremford" href="mailto:mike@bfo.com"> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> +<title>CSS test reference</title> +<style> +div { font: 30px/30px monospace; } +span { border-left: 30px solid green } +</style> + +<p>Test passes if there is a single green rectangle next to ABCDEFGHIJ, and no red. + +<div>A<span></span></div> +<div>B<span></span></div> +<div>C<span></span></div> +<div>D<span></span></div> +<div>E<span></span></div> +<div>F<span></span></div> +<div>G<span></span></div> +<div>H<span></span></div> +<div>I<span></span></div> +<div>J<span></span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html new file mode 100644 index 00000000000..ea1faa2ed1f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/line-edge-white-space-collapse-002-ref.html @@ -0,0 +1,24 @@ +<!doctype html> +<html> +<meta charset=utf-8> +<link rel="author" title="Mike Bremford" href="mailto:mike@bfo.com"> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> +<title>CSS test reference</title> +<style> +div { font: 30px/30px monospace; } +span { border-left: 30px solid green } +</style> + +<p>Test passes if there is a single green rectangle, and no red. The letters KLMNOPQRST must be immediately to its right, vertically aligned with each other. + +<div><span>K</span></div> +<div><span>L</span></div> +<div><span>M</span></div> +<div><span>N</span></div> +<div><span>O</span></div> +<div><span>P</span></div> +<div><span>Q</span></div> +<div><span>R</span></div> +<div><span>S</span></div> +<div><span>T</span></div> + diff --git a/tests/wpt/web-platform-tests/css/support/grid.css b/tests/wpt/web-platform-tests/css/support/grid.css index 602e114880a..78fdd5e975a 100644 --- a/tests/wpt/web-platform-tests/css/support/grid.css +++ b/tests/wpt/web-platform-tests/css/support/grid.css @@ -68,6 +68,12 @@ grid-row: 3; } +.thirdRowThirdColumn { + background-color: salmon; + grid-column: 3; + grid-row: 3; +} + .firstRowThirdColumn { background-color: magenta; grid-column: 3; diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md index eb9b9fb0413..91686ce7f54 100644 --- a/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testdriver.md @@ -80,5 +80,13 @@ between the function being called and the promise settling. To send special keys, one must send the respective key's codepoint. Since this uses the WebDriver protocol, you can find a [list for code points to special keys in the spec](https://w3c.github.io/webdriver/webdriver-spec.html#keyboard-actions). For example, to send the tab key you would send "\uE004". +### `test_driver.action_sequence(actions)` + - `actions` <[Array]<[Object]>> an array of Action objects` + - `action` <[Object]> A single action. See [spec](https://www.w3.org/TR/webdriver/#actions) for format + +This function causes a sequence of actions to be sent to the browser. It is based of the [WebDriver API](https://www.w3.org/TR/webdriver/#actions). +The action can be a keyboard action, a pointer action or a pause. It returns a `Promise` that +resolves after the actions have been sent or rejects if an error was thrown. + [activation]: https://html.spec.whatwg.org/multipage/interaction.html#activation [testharness]: {{ site.baseurl }}{% link _writing-tests/testharness.md %} diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html new file mode 100644 index 00000000000..9f78ea4bc29 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<style> + body, html { + height: 100%; + width: 100%; + } + #spacer { + width: 1500px; + height: 1500px; + background-color: red; + } +</style> +<body> + <p>This page is scrollable.</p> + <div id="spacer"></div> +</body> diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html new file mode 100644 index 00000000000..6f827c919a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-frame-no-scroll-manual.tentative.html @@ -0,0 +1,113 @@ +<!doctype html> +<meta name="timeout" content="long"> +<title>vertical-scroll test for touch-action</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/experimental-features/resources/common.js"></script> +<script src="/feature-policy/experimental-features/resources/vertical-scroll.js"></script> +<style> +html, body { + height: 100%; + width: 100%; +} + +iframe { + width: 90%; + height: 90%; + margin: 0; + padding: 0; +} + +.spacer { + width: 100%; + height: 100%; + margin: 100%; +} +</style> +<iframe></iframe> +<br/> +<p>Spacers below to make page scrollable</p> +<br/> +<div class="spacer"></div> +<div class="spacer"></div> +<p> EOF </p> + +<script> + "use strict"; + + let url = url_base + "vertical-scroll-scrollable-content.html"; + let iframeElement = document.querySelector("iframe"); + + // Wait for the helper scripts to load. + promise_test(async() => { + if (window.input_api_ready) + return Promise.resolve(); + await new Promise( (r) => { + window.resolve_on_input_api_ready = r; + }); + }, "Make sure input injection API is ready."); + + // Sanity-check: Verify we can scroll using the test-API (empty <iframe>). + promise_test(async() => { + window.scrollTo(0, 0); + + await inject_input("down"); + assert_greater_than(window.scrollY, 0, "Page must have scrolled down."); + + await inject_input("right"); + assert_greater_than(window.scrollX, 0, "Page must have scrolled right."); + }, "Verify that the page normally scrolls."); + + // Sanity-check: <iframe> normally scrolls. + promise_test(async() => { + // Make sure <window> can scroll both towards right and bottom. + window.scrollTo(0, 0); + + await loadUrlInIframe(iframeElement, url); + iframeElement.contentWindow.scrollTo(0, 0); + + await inject_input("down"); + assert_greater_than( + iframeElement.contentWindow.scrollY, + 0, + "<iframe> must have scrolled down."); + + + // Apply the scroll gesture. + await inject_input("right"); + assert_greater_than( + iframeElement.contentWindow.scrollX, + 0, + "<iframe> must have scrolled right."); + + }, "Verify that the <iframe> normally scrolls."); + + // Disable 'vertical-scroll': <iframe> should only scroll horizontally. + promise_test(async() => { + window.scrollTo(0, 0); + + // Disallow vertical scroll and reload the <iframe>. + setFeatureState(iframeElement, "vertical-scroll", "'none'"); + await loadUrlInIframe(iframeElement, url); + iframeElement.contentWindow.scrollTo(0, 0); + + // Apply the scroll gesture. Main frame should and <iframe> should not + // scroll vertically. + await inject_input("down"); + assert_equals(iframeElement.contentWindow.scrollY, + 0, + "<iframe> must not scroll vertically."); + assert_greater_than(window.scrollY, + 0, + "Page must scroll vertically."); + + window.scrollTo(0, 0); + iframeElement.contentWindow.scrollTo(0, 0); + + await inject_input("right"); + assert_greater_than(iframeElement.contentWindow.scrollX, + 0, + "<iframe> must have scrolled right."); + }, "When 'vertical-scroll' is disabled in a document, scrollable contents " + + "can only *horizontally* scroll."); +</script> diff --git a/tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js b/tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js index 1195656a2a4..976d6d6bcef 100644 --- a/tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js +++ b/tests/wpt/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter-tests.js @@ -56,6 +56,8 @@ testText("<div><span>abc </span><span style='white-space:pre'></span> def", "abc testText("<div>abc <input> def", "abc def", "Whitespace around <input> should not be collapsed"); testText("<div>abc <span style='display:inline-block'></span> def", "abc def", "Whitespace around inline-block should not be collapsed"); testText("<div>abc <span style='display:inline-block'> def </span> ghi", "abc def ghi", "Trailing space at end of inline-block should be collapsed"); +testText("<div><input> <div>abc</div>", "abc", "Whitespace between <input> and block should be collapsed"); +testText("<div><span style='inline-block'></span> <div>abc</div>", "abc", "Whitespace between inline-block and block should be collapsed"); /**** Soft line breaks ****/ diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini new file mode 100644 index 00000000000..a3a9625fcee --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini @@ -0,0 +1,3 @@ +[elementPosition.html] + expected: + if product == "chrome": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini new file mode 100644 index 00000000000..7a6cf82bbd3 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini @@ -0,0 +1,3 @@ +[elementTiming.html] + expected: + if product == "chrome": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini new file mode 100644 index 00000000000..b809f4ebf61 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini @@ -0,0 +1,3 @@ +[eventOrder.html] + expected: + if product == "chrome": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini new file mode 100644 index 00000000000..889e1f4b86b --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini @@ -0,0 +1,3 @@ +[multiDevice.html] + expected: + if product == "chrome": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html new file mode 100644 index 00000000000..145852e7b51 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>TestDriver actions: element position</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<style> +div#test { + position: fixed; + left: -100px; + top: -25px; + width: 200px; + height: 75px; + background-color:blue; +} +</style> + +<div id="test"> +</div> + +<script> +let events = []; + +async_test(t => { + let test = document.getElementById("test"); + test.addEventListener("click", e => { + events.push(e.clientX); + events.push(e.clientY) + }); + + let div = document.getElementById("test"); + let actions = new test_driver.Actions() + .pointerMove(0, 0, {origin: test}) + .pointerDown() + .pointerUp() + .send() + .then(t.step_func_done(() => assert_array_equals(events, [50, 25]))) + .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e))); +}); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementTiming.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementTiming.html new file mode 100644 index 00000000000..cdfdff55f33 --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementTiming.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>TestDriver actions: element timing</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<style> +div#test1, div#test2 { + position: fixed; + top: 0; + left: 0; + width: 100px; + height: 100px; + background-color: blue; +} + +div#test2 { + display: none; + left: -100px; + background-color: green; +} +</style> + +<div id="test1"> +</div> + +<div id="test2"> +</div> + +<script> +let events = []; + +async_test(t => { + let test1 = document.getElementById("test1"); + let test2 = document.getElementById("test2"); + document.getElementById("test1").addEventListener("click", + () => {test2.style.display = "block"; test2.style.top = "100px"; test2.style.left = "0"}); + document.getElementById("test2").addEventListener("click", + e => {events.push(e.clientX); events.push(e.clientY)}); + + let div = document.getElementById("backing"); + let actions = new test_driver.Actions() + .pointerMove(0, 0, {origin: test1}) + .pointerDown() + .pointerUp() + .pointerMove(0, 0, {origin: test2}) + .pointerDown() + .pointerUp() + .send() + .then(t.step_func_done(() => assert_array_equals(events, [50, 150]))) + .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e))); +}); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html new file mode 100644 index 00000000000..c85b861c7fd --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>TestDriver actions: event order</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<button id="a">Button a</button> +<button id="b">Button b</button> + +<script> +// Pointer 1 is added before Pointer 2 so it comes first in the list of sources +// Therefore its actions happen first +let events = []; + +async_test(t => { + Array.prototype.forEach.call(document.getElementsByTagName("button"), + (x) => x.addEventListener("mousedown", () => {events.push(x.id)})); + + let button_a = document.getElementById("a"); + let button_b = document.getElementById("b"); + let actions = new test_driver.Actions() + .addPointer("pointer1") + .addPointer("pointer2") + .pointerMove(0, 0, {origin: button_a, sourceName: "pointer1"}) + .pointerMove(0, 0, {origin: button_b, sourceName: "pointer2"}) + .pointerDown({sourceName: "pointer2"}) + .pointerDown({sourceName: "pointer1"}) + .pointerUp({sourceName: "pointer2"}) + .pointerUp({sourceName: "pointer1"}) + .send() + .then(t.step_func_done(() => assert_array_equals(events, ["a", "b"]))) + .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e))); +}); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiDevice.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiDevice.html new file mode 100644 index 00000000000..5cab1206dbe --- /dev/null +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/multiDevice.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>TestDriver actions: multiple devices</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<input type="text" id="text"></input> + +<script> +async_test(t => { + let text_box = document.getElementById("text"); + let actions = new test_driver.Actions() + .pointerMove(0, 0, {origin: text_box}) + .pointerDown() + .pointerUp() + .addTick() + .keyDown("p") + .keyUp("p") + .keyDown("a") + .keyUp("a") + .keyDown("s") + .keyUp("s") + .keyDown("s") + .keyUp("s"); + + actions.send() + .then(() => { + assert_true(text_box.value == "pass"); + t.done(); + }) + .catch(t.unreached_func("Actions sequence failed")); +}); +</script> diff --git a/tests/wpt/web-platform-tests/payment-request/META.yml b/tests/wpt/web-platform-tests/payment-request/META.yml index f8460d403ff..0a075e19c6b 100644 --- a/tests/wpt/web-platform-tests/payment-request/META.yml +++ b/tests/wpt/web-platform-tests/payment-request/META.yml @@ -6,3 +6,4 @@ suggested_reviewers: - MSFTkihans - mnoorenberghe - romandev + - edenchuang diff --git a/tests/wpt/web-platform-tests/resources/testdriver-actions.js b/tests/wpt/web-platform-tests/resources/testdriver-actions.js new file mode 100644 index 00000000000..46c68858e45 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/testdriver-actions.js @@ -0,0 +1,391 @@ +(function() { + let sourceNameIdx = 0; + + /** + * Builder for creating a sequence of actions + */ + function Actions() { + this.sourceTypes = new Map([["key", KeySource], + ["pointer", PointerSource], + ["general", GeneralSource]]); + this.sources = new Map(); + this.sourceOrder = []; + for (let sourceType of this.sourceTypes.keys()) { + this.sources.set(sourceType, new Map()); + } + this.currentSources = new Map(); + for (let sourceType of this.sourceTypes.keys()) { + this.currentSources.set(sourceType, null); + } + this.createSource("general"); + this.tickIdx = 0; + } + + Actions.prototype = { + /** + * Generate the action sequence suitable for passing to + * test_driver.action_sequence + * + * @returns {Array} Array of WebDriver-compatible actions sequences + */ + serialize: function() { + let actions = []; + for (let [sourceType, sourceName] of this.sourceOrder) { + let source = this.sources.get(sourceType).get(sourceName); + let serialized = source.serialize(this.tickIdx + 1); + if (serialized) { + serialized.id = sourceName; + actions.push(serialized); + } + } + return actions; + }, + + /** + * Generate and send the action sequence + * + * @returns {Promise} fulfilled after the sequence is executed, + * rejected if any actions fail. + */ + send: function() { + let actions; + try { + actions = this.serialize(); + } catch(e) { + return Promise.reject(e); + } + return test_driver.action_sequence(actions); + }, + + /** + * Get the action source with a particular source type and name. + * If no name is passed, a new source with the given type is + * created. + * + * @param {String} type - Source type ('general', 'key', or 'pointer') + * @param {String?} name - Name of the source + * @returns {Source} Source object for that source. + */ + getSource: function(type, name) { + if (!this.sources.has(type)) { + throw new Error(`${type} is not a valid action type`); + } + if (name === null || name === undefined) { + name = this.currentSources.get(type); + } + if (name === null || name === undefined) { + return this.createSource(type, null); + } + return this.sources.get(type).get(name); + }, + + setSource: function(type, name) { + if (!this.sources.has(type)) { + throw new Error(`${type} is not a valid action type`); + } + if (!this.sources.get(type).has(name)) { + throw new Error(`${name} is not a valid source for ${type}`); + } + this.currentSources.set(type, name); + return this; + }, + + /** + * Add a new key input source with the given name + * + * @param {String} name - Name of the key source + * @param {Bool} set - Set source as the default key source + * @returns {Actions} + */ + addKeyboard: function(name, set=true) { + this.createSource("key", name, true); + if (set) { + this.setKeyboard(name); + } + return this; + }, + + /** + * Set the current default key source + * + * @param {String} name - Name of the key source + * @returns {Actions} + */ + setKeyboard: function(name) { + this.setSource("key", name); + return this; + }, + + /** + * Add a new pointer input source with the given name + * + * @param {String} type - Name of the key source + * @param {String} pointerType - Type of pointing device + * @param {Bool} set - Set source as the default key source + * @returns {Actions} + */ + addPointer: function(name, pointerType="mouse", set=true) { + this.createSource("pointer", name, true, {pointerType: pointerType}); + if (set) { + this.setPointer(name); + } + return this; + }, + + /** + * Set the current default pointer source + * + * @param {String} name - Name of the pointer source + * @returns {Actions} + */ + setPointer: function(name) { + this.setSource("pointer", name); + return this; + }, + + createSource: function(type, name, parameters={}) { + if (!this.sources.has(type)) { + throw new Error(`${type} is not a valid action type`); + } + let sourceNames = new Set(); + for (let [_, name] of this.sourceOrder) { + sourceNames.add(name); + } + if (!name) { + do { + name = "" + sourceNameIdx++; + } while (sourceNames.has(name)) + } else { + if (sourceNames.has(name)) { + throw new Error(`Alreay have a source of type ${type} named ${name}.`); + } + } + this.sources.get(type).set(name, new (this.sourceTypes.get(type))(parameters)); + this.currentSources.set(type, name); + this.sourceOrder.push([type, name]); + return this.sources.get(type).get(name); + }, + + /** + * Insert a new actions tick + * + * @param {Number?} duration - Minimum length of the tick in ms. + * @returns {Actions} + */ + addTick: function(duration) { + this.tickIdx += 1; + if (duration) { + this.pause(duration); + } + return this; + }, + + /** + * Add a pause to the current tick + * + * @param {Number?} duration - Minimum length of the tick in ms. + * @returns {Actions} + */ + pause: function(duration) { + this.getSource("general").addPause(this, duration); + return this; + }, + + /** + * Create a keyDown event for the current default key source + * + * @param {String} key - Key to press + * @param {String?} sourceName - Named key source to use or null for the default key source + * @returns {Actions} + */ + keyDown: function(key, {sourceName=null}={}) { + let source = this.getSource("key", sourceName); + source.keyDown(this, key); + return this; + }, + + /** + * Create a keyDown event for the current default key source + * + * @param {String} key - Key to release + * @param {String?} sourceName - Named key source to use or null for the default key source + * @returns {Actions} + */ + keyUp: function(key, {sourceName=null}={}) { + let source = this.getSource("key", sourceName); + source.keyUp(this, key); + return this; + }, + + /** + * Create a pointerDown event for the current default pointer source + * + * @param {String} button - Button to press + * @param {String?} sourceName - Named pointer source to use or null for the default + * pointer source + * @returns {Actions} + */ + pointerDown: function({button=0, sourceName=null}={}) { + let source = this.getSource("pointer", sourceName); + source.pointerDown(this, button); + return this; + }, + + /** + * Create a pointerUp event for the current default pointer source + * + * @param {String} button - Button to release + * @param {String?} sourceName - Named pointer source to use or null for the default pointer + * source + * @returns {Actions} + */ + pointerUp: function({button=0, sourceName=null}={}) { + let source = this.getSource("pointer", sourceName); + source.pointerUp(this, button); + return this; + }, + + /** + * Create a move event for the current default pointer source + * + * @param {Number} x - Destination x coordinate + * @param {Number} y - Destination y coordinate + * @param {String|Element} origin - Origin of the coordinate system. + * Either "pointer", "viewport" or an Element + * @param {Number?} duration - Time in ms for the move + * @param {String?} sourceName - Named pointer source to use or null for the default pointer + * source + * @returns {Actions} + */ + pointerMove: function(x, y, + {origin="viewport", duration, sourceName=null}={}) { + let source = this.getSource("pointer", sourceName); + source.pointerMove(this, x, y, duration, origin); + return this; + }, + }; + + function GeneralSource() { + this.actions = new Map(); + } + + GeneralSource.prototype = { + serialize: function(tickCount) { + if (!this.actions.size) { + return undefined; + } + let actions = []; + let data = {"type": "none", "actions": actions}; + for (let i=0; i<tickCount; i++) { + if (this.actions.has(i)) { + actions.push(this.actions.get(i)); + } else { + actions.push({"type": "pause"}); + } + } + return data; + }, + + addPause: function(actions, duration) { + let tick = actions.tickIdx; + if (this.actions.has(tick)) { + throw new Error(`Already have a pause action for the current tick`); + } + this.actions.set(tick, {type: "pause", duration: duration}); + }, + }; + + function KeySource() { + this.actions = new Map(); + } + + KeySource.prototype = { + serialize: function(tickCount) { + if (!this.actions.size) { + return undefined; + } + let actions = []; + let data = {"type": "key", "actions": actions}; + for (let i=0; i<tickCount; i++) { + if (this.actions.has(i)) { + actions.push(this.actions.get(i)); + } else { + actions.push({"type": "pause"}); + } + } + return data; + }, + + keyDown: function(actions, key) { + let tick = actions.tickIdx; + if (this.actions.has(tick)) { + tick = actions.addTick().tickIdx; + } + this.actions.set(tick, {type: "keyDown", value: key}); + }, + + keyUp: function(actions, key) { + let tick = actions.tickIdx; + if (this.actions.has(tick)) { + tick = actions.addTick().tickIdx; + } + this.actions.set(tick, {type: "keyUp", value: key}); + }, + }; + + function PointerSource(parameters={pointerType: "mouse"}) { + let pointerType = parameters.pointerType || "mouse"; + if (!["mouse", "pen", "touch"].includes(pointerType)) { + throw new Error(`Invalid pointerType ${pointerType}`); + } + this.type = pointerType; + this.actions = new Map(); + } + + PointerSource.prototype = { + serialize: function(tickCount) { + if (!this.actions.size) { + return undefined; + } + let actions = []; + let data = {"type": "pointer", "actions": actions, "parameters": {"pointerType": this.type}}; + for (let i=0; i<tickCount; i++) { + if (this.actions.has(i)) { + actions.push(this.actions.get(i)); + } else { + actions.push({"type": "pause"}); + } + } + return data; + }, + + pointerDown: function(actions, button) { + let tick = actions.tickIdx; + if (this.actions.has(tick)) { + tick = actions.addTick().tickIdx; + } + this.actions.set(tick, {type: "pointerDown", button}); + }, + + pointerUp: function(actions, button) { + let tick = actions.tickIdx; + if (this.actions.has(tick)) { + tick = actions.addTick().tickIdx; + } + this.actions.set(tick, {type: "pointerUp", button}); + }, + + pointerMove: function(actions, x, y, duration, origin) { + let tick = actions.tickIdx; + if (this.actions.has(tick)) { + tick = actions.addTick().tickIdx; + } + this.actions.set(tick, {type: "pointerMove", x, y, origin}); + if (duration) { + this.actions.get(tick).duration = duration; + } + }, + }; + + test_driver.Actions = Actions; +})(); diff --git a/tests/wpt/web-platform-tests/resources/testdriver.js b/tests/wpt/web-platform-tests/resources/testdriver.js index 42ec824d015..e0741e8d61d 100644 --- a/tests/wpt/web-platform-tests/resources/testdriver.js +++ b/tests/wpt/web-platform-tests/resources/testdriver.js @@ -171,6 +171,29 @@ */ freeze: function() { return window.test_driver_internal.freeze(); + }, + + /** + * Send a sequence of actions + * + * This function sends a sequence of actions to the top level window + * to perform. It is modeled after the behaviour of {@link + * https://w3c.github.io/webdriver/#actions|WebDriver Actions Command} + * + * @param {Array} actions - an array of actions. The format is the same as the actions + property of the WebDriver command {@link + https://w3c.github.io/webdriver/#perform-actions|Perform + Actions} command. Each element is an object representing an + input source and each input source itself has an actions + property detailing the behaviour of that source at each timestep + (or tick). Authors are not expected to construct the actions + sequence by hand, but to use the builder api provided in + testdriver-actions.js + * @returns {Promise} fufiled after the actions are performed, or rejected in + * the cases the WebDriver command errors + */ + action_sequence(actions) { + return window.test_driver_internal.action_sequence(actions); } }; @@ -205,6 +228,16 @@ */ freeze: function() { return Promise.reject(new Error("unimplemented")); + }, + + /** + * Send a sequence of pointer actions + * + * @returns {Promise} fufilled after actions are sent, rejected if any actions + * fail + */ + action_sequence: function(actions) { + return Promise.reject(new Error("unimplemented")); } }; })(); diff --git a/tests/wpt/web-platform-tests/tools/serve/test_functional.py b/tests/wpt/web-platform-tests/tools/serve/test_functional.py index e423461f481..60b950fc8aa 100644 --- a/tests/wpt/web-platform-tests/tools/serve/test_functional.py +++ b/tests/wpt/web-platform-tests/tools/serve/test_functional.py @@ -55,7 +55,7 @@ def test_subprocess_exit(server_subprocesses, tempfile_name): # which are relevant to this functionality. Disable the check so that # the constructor is only used to create relevant processes. with open(tempfile_name, 'w') as handle: - json.dump({"check_subdomains": False}, handle) + json.dump({"check_subdomains": False, "bind_address": False}, handle) # The `logger` module from the wptserver package uses a singleton # pattern which resists testing. In order to avoid conflicting with diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt index fcb5922d10d..0e71ed50411 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt @@ -2,4 +2,4 @@ html5lib == 1.0.1 mozinfo == 0.10 mozlog==3.8 mozdebug == 0.1 -urllib3[secure] == 1.22 +urllib3[secure]==1.23 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py index 1dc962cfb08..fa266e35429 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py @@ -508,7 +508,8 @@ class CallbackHandler(object): self.actions = { "click": ClickAction(self.logger, self.protocol), - "send_keys": SendKeysAction(self.logger, self.protocol) + "send_keys": SendKeysAction(self.logger, self.protocol), + "action_sequence": ActionSequenceAction(self.logger, self.protocol) } def __call__(self, result): @@ -539,7 +540,8 @@ class CallbackHandler(object): except Exception: self.logger.warning("Action %s failed" % action) self.logger.warning(traceback.format_exc()) - self._send_message("complete", "failure") + self._send_message("complete", "error") + raise else: self.logger.debug("Action %s completed" % action) self._send_message("complete", "success") @@ -559,13 +561,9 @@ class ClickAction(object): def __call__(self, payload): selector = payload["selector"] - elements = self.protocol.select.elements_by_selector(selector) - if len(elements) == 0: - raise ValueError("Selector matches no elements") - elif len(elements) > 1: - raise ValueError("Selector matches multiple elements") + element = self.protocol.select.element_by_selector(selector) self.logger.debug("Clicking element: %s" % selector) - self.protocol.click.element(elements[0]) + self.protocol.click.element(element) class SendKeysAction(object): @@ -576,10 +574,27 @@ class SendKeysAction(object): def __call__(self, payload): selector = payload["selector"] keys = payload["keys"] - elements = self.protocol.select.elements_by_selector(selector) - if len(elements) == 0: - raise ValueError("Selector matches no elements") - elif len(elements) > 1: - raise ValueError("Selector matches multiple elements") + element = self.protocol.select.element_by_selector(selector) self.logger.debug("Sending keys to element: %s" % selector) - self.protocol.send_keys.send_keys(elements[0], keys) + self.protocol.send_keys.send_keys(element, keys) + + +class ActionSequenceAction(object): + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + # TODO: some sort of shallow error checking + actions = payload["actions"] + for actionSequence in actions: + if actionSequence["type"] == "pointer": + for action in actionSequence["actions"]: + if (action["type"] == "pointerMove" and + isinstance(action["origin"], dict)): + action["origin"] = self.get_element(action["origin"]["selector"]) + self.protocol.action_sequence.send_actions({"actions": actions}) + + def get_element(self, selector): + element = self.protocol.select.element_by_selector(selector) + return element diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py index 4ab7bf3dde9..cc1d1e400c7 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py @@ -19,7 +19,8 @@ from .base import (CallbackHandler, WebDriverProtocol, extra_timeout, strip_server) -from .protocol import (AssertsProtocolPart, +from .protocol import (ActionSequenceProtocolPart, + AssertsProtocolPart, BaseProtocolPart, TestharnessProtocolPart, PrefsProtocolPart, @@ -359,6 +360,16 @@ class MarionetteSendKeysProtocolPart(SendKeysProtocolPart): return element.send_keys(keys) +class MarionetteActionSequenceProtocolPart(ActionSequenceProtocolPart): + def setup(self): + self.marionette = self.parent.marionette + + def send_actions(self, actions): + actions = self.marionette._to_json(actions) + self.logger.info(actions) + self.marionette._send_message("WebDriver:PerformActions", actions) + + class MarionetteTestDriverProtocolPart(TestDriverProtocolPart): def setup(self): self.marionette = self.parent.marionette @@ -433,6 +444,7 @@ class MarionetteProtocol(Protocol): MarionetteSelectorProtocolPart, MarionetteClickProtocolPart, MarionetteSendKeysProtocolPart, + MarionetteActionSequenceProtocolPart, MarionetteTestDriverProtocolPart, MarionetteAssertsProtocolPart, MarionetteCoverageProtocolPart] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py index c1d66b5706e..f81c0034c8b 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py @@ -18,6 +18,7 @@ from .protocol import (BaseProtocolPart, SelectorProtocolPart, ClickProtocolPart, SendKeysProtocolPart, + ActionSequenceProtocolPart, TestDriverProtocolPart) from ..testrunner import Stop @@ -26,15 +27,18 @@ here = os.path.join(os.path.split(__file__)[0]) webdriver = None exceptions = None RemoteConnection = None +Command = None def do_delayed_imports(): global webdriver global exceptions global RemoteConnection + global Command from selenium import webdriver from selenium.common import exceptions from selenium.webdriver.remote.remote_connection import RemoteConnection + from selenium.webdriver.remote.command import Command class SeleniumBaseProtocolPart(BaseProtocolPart): @@ -135,6 +139,7 @@ class SeleniumClickProtocolPart(ClickProtocolPart): def element(self, element): return element.click() + class SeleniumSendKeysProtocolPart(SendKeysProtocolPart): def setup(self): self.webdriver = self.parent.webdriver @@ -143,6 +148,14 @@ class SeleniumSendKeysProtocolPart(SendKeysProtocolPart): return element.send_keys(keys) +class SeleniumActionSequenceProtocolPart(ActionSequenceProtocolPart): + def setup(self): + self.webdriver = self.parent.webdriver + + def send_actions(self, actions): + self.webdriver.execute(Command.W3C_ACTIONS, {"actions": actions}) + + class SeleniumTestDriverProtocolPart(TestDriverProtocolPart): def setup(self): self.webdriver = self.parent.webdriver @@ -163,7 +176,8 @@ class SeleniumProtocol(Protocol): SeleniumSelectorProtocolPart, SeleniumClickProtocolPart, SeleniumSendKeysProtocolPart, - SeleniumTestDriverProtocolPart] + SeleniumTestDriverProtocolPart, + SeleniumActionSequenceProtocolPart] def __init__(self, executor, browser, capabilities, **kwargs): do_delayed_imports() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py index 879bd68d522..553b79e750a 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py @@ -18,6 +18,7 @@ from .protocol import (BaseProtocolPart, SelectorProtocolPart, ClickProtocolPart, SendKeysProtocolPart, + ActionSequenceProtocolPart, TestDriverProtocolPart) from ..testrunner import Stop @@ -25,6 +26,7 @@ import webdriver as client here = os.path.join(os.path.split(__file__)[0]) + class WebDriverBaseProtocolPart(BaseProtocolPart): def setup(self): self.webdriver = self.parent.webdriver @@ -146,6 +148,14 @@ class WebDriverSendKeysProtocolPart(SendKeysProtocolPart): return element.send_element_command("POST", "value", {"value": list(keys)}) +class WebDriverActionSequenceProtocolPart(ActionSequenceProtocolPart): + def setup(self): + self.webdriver = self.parent.webdriver + + def send_actions(self, actions): + self.webdriver.actions.perform(actions) + + class WebDriverTestDriverProtocolPart(TestDriverProtocolPart): def setup(self): self.webdriver = self.parent.webdriver @@ -166,6 +176,7 @@ class WebDriverProtocol(Protocol): WebDriverSelectorProtocolPart, WebDriverClickProtocolPart, WebDriverSendKeysProtocolPart, + WebDriverActionSequenceProtocolPart, WebDriverTestDriverProtocolPart] def __init__(self, executor, browser, capabilities, **kwargs): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py index f8292ff5ec1..74a7cc4b7fc 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/protocol.py @@ -242,6 +242,14 @@ class SelectorProtocolPart(ProtocolPart): name = "select" + def element_by_selector(self, selector): + elements = self.elements_by_selector(selector) + if len(elements) == 0: + raise ValueError("Selector '%s' matches no elements" % selector) + elif len(elements) > 1: + raise ValueError("Selector '%s' matches multiple elements" % selector) + return elements[0] + @abstractmethod def elements_by_selector(self, selector): """Select elements matching a CSS selector @@ -279,6 +287,20 @@ class SendKeysProtocolPart(ProtocolPart): pass +class ActionSequenceProtocolPart(ProtocolPart): + """Protocol part for performing trusted clicks""" + __metaclass__ = ABCMeta + + name = "action_sequence" + + @abstractmethod + def send_actions(self, actions): + """Send a sequence of actions to the window. + + :param actions: A protocol-specific handle to an array of actions.""" + pass + + class TestDriverProtocolPart(ProtocolPart): """Protocol part that implements the basic functionality required for all testdriver-based tests.""" diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js index ef962d35f22..d77731a158e 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testdriver-extra.js @@ -70,4 +70,22 @@ window.opener.postMessage({"type": "action", "action": "send_keys", "selector": selector, "keys": keys}, "*"); return pending_promise; }; + + window.test_driver_internal.action_sequence = function(actions) { + const pending_promise = new Promise(function(resolve, reject) { + pending_resolve = resolve; + pending_reject = reject; + }); + for (let actionSequence of actions) { + if (actionSequence.type == "pointer") { + for (let action of actionSequence.actions) { + if (action.type == "pointerMove" && action.origin instanceof Element) { + action.origin = {selector: get_selector(action.origin)}; + } + } + } + } + window.opener.postMessage({"type": "action", "action": "action_sequence", "actions": actions}, "*"); + return pending_promise; + }; })(); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py index 931a7822d0b..46e3ff7926d 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py @@ -52,7 +52,7 @@ class TestRunner(object): :param command_queue: subprocess.Queue used to send commands to the process :param result_queue: subprocess.Queue used to send results to the - parent TestManager process + parent TestRunnerManager process :param executor: TestExecutor object that will actually run a test. """ self.command_queue = command_queue @@ -304,7 +304,7 @@ class TestRunnerManager(threading.Thread): self.test_runner_proc = None - threading.Thread.__init__(self, name="Thread-TestrunnerManager-%i" % self.manager_number) + threading.Thread.__init__(self, name="TestRunnerManager-%i" % self.manager_number) # This is started in the actual new thread self.logger = None @@ -321,9 +321,9 @@ class TestRunnerManager(threading.Thread): self.capture_stdio = capture_stdio def run(self): - """Main loop for the TestManager. + """Main loop for the TestRunnerManager. - TestManagers generally receive commands from their + TestRunnerManagers generally receive commands from their TestRunner updating them on the status of a test. They may also have a stop flag set by the main thread indicating that the manager should shut down the next time the event loop @@ -490,7 +490,7 @@ class TestRunnerManager(threading.Thread): self.child_stop_flag) self.test_runner_proc = Process(target=start_runner, args=args, - name="Thread-TestRunner-%i" % self.manager_number) + name="TestRunner-%i" % self.manager_number) self.test_runner_proc.start() self.logger.debug("Test runner started") # Now we wait for either an init_succeeded event or an init_failed event @@ -623,10 +623,10 @@ class TestRunnerManager(threading.Thread): def wait_finished(self): assert isinstance(self.state, RunnerManagerState.running) - # The browser should be stopped already, but this ensures we do any post-stop - # processing self.logger.debug("Wait finished") + # The browser should be stopped already, but this ensures we do any + # post-stop processing return self.after_test_end(self.state.test, True) def after_test_end(self, test, restart): @@ -674,7 +674,7 @@ class TestRunnerManager(threading.Thread): self.cleanup() def teardown(self): - self.logger.debug("teardown in testrunnermanager") + self.logger.debug("TestRunnerManager teardown") self.test_runner_proc = None self.command_queue.close() self.remote_queue.close() @@ -695,7 +695,7 @@ class TestRunnerManager(threading.Thread): self.test_runner_proc.terminate() self.test_runner_proc.join(10) else: - self.logger.debug("Testrunner exited with code %i" % self.test_runner_proc.exitcode) + self.logger.debug("Runner process exited with code %i" % self.test_runner_proc.exitcode) def runner_teardown(self): self.ensure_runner_stopped() @@ -705,7 +705,7 @@ class TestRunnerManager(threading.Thread): self.remote_queue.put((command, args)) def cleanup(self): - self.logger.debug("TestManager cleanup") + self.logger.debug("TestRunnerManager cleanup") if self.browser: self.browser.cleanup() while True: @@ -716,12 +716,17 @@ class TestRunnerManager(threading.Thread): else: if cmd == "log": self.log(*data) + elif cmd == "runner_teardown": + # It's OK for the "runner_teardown" message to be left in + # the queue during cleanup, as we will already have tried + # to stop the TestRunner in `stop_runner`. + pass else: - self.logger.warning("%r: %r" % (cmd, data)) + self.logger.warning("Command left in command_queue during cleanup: %r, %r" % (cmd, data)) while True: try: cmd, data = self.remote_queue.get_nowait() - self.logger.warning("%r: %r" % (cmd, data)) + self.logger.warning("Command left in remote_queue during cleanup: %r, %r" % (cmd, data)) except Empty: break @@ -747,7 +752,7 @@ class ManagerGroup(object): restart_on_unexpected=True, debug_info=None, capture_stdio=True): - """Main thread object that owns all the TestManager threads.""" + """Main thread object that owns all the TestRunnerManager threads.""" self.suite_name = suite_name self.size = size self.test_source_cls = test_source_cls diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py index 92ee9719753..7ac7b709436 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py @@ -39,6 +39,7 @@ metadata files are used to store the expected test results. def setup_logging(*args, **kwargs): global logger logger = wptlogging.setup(*args, **kwargs) + return logger def get_loader(test_paths, product, debug=None, run_info_extras=None, **kwargs): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml b/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml deleted file mode 100644 index 00183731ba5..00000000000 --- a/tests/wpt/web-platform-tests/tools/wptserve/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: python - -sudo: false - -cache: - directories: - - $HOME/.cache/pip - -matrix: - include: - - python: 2.7 - env: TOXENV=py27 - - python: pypy - env: TOXENV=pypy - -install: - - pip install -U tox codecov - -script: - - tox - -after_success: - - coverage combine - - codecov diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py index e49c8287c59..f8331f5086d 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py @@ -75,7 +75,7 @@ class TestUsingServer(unittest.TestCase): req.add_data(body) if auth is not None: - req.add_header("Authorization", "Basic %s" % base64.b64encode('%s:%s' % auth)) + req.add_header("Authorization", b"Basic %s" % base64.b64encode((b"%s:%s" % auth))) return urlopen(req) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py index 7aa73353386..fdac4537d64 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py @@ -57,40 +57,35 @@ class TestSlice(TestUsingServer): self.assertEqual(resp.read(), expected[:10]) class TestSub(TestUsingServer): - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_config(self): resp = self.request("/sub.txt", query="pipe=sub") - expected = "localhost localhost %i" % self.server.port + expected = b"localhost localhost %i" % self.server.port self.assertEqual(resp.read().rstrip(), expected) @pytest.mark.xfail(sys.platform == "win32", reason="https://github.com/web-platform-tests/wpt/issues/12949") - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_file_hash(self): resp = self.request("/sub_file_hash.sub.txt") - expected = """ + expected = b""" md5: JmI1W8fMHfSfCarYOSxJcw== sha1: nqpWqEw4IW8NjD6R375gtrQvtTo= sha224: RqQ6fMmta6n9TuA/vgTZK2EqmidqnrwBAmQLRQ== sha256: G6Ljg1uPejQxqFmvFOcV/loqnjPTW5GSOePOfM/u0jw= sha384: lkXHChh1BXHN5nT5BYhi1x67E1CyYbPKRKoF2LTm5GivuEFpVVYtvEBHtPr74N9E -sha512: r8eLGRTc7ZznZkFjeVLyo6/FyQdra9qmlYCwKKxm3kfQAswRS9+3HsYk3thLUhcFmmWhK4dXaICz -JwGFonfXwg==""" +sha512: r8eLGRTc7ZznZkFjeVLyo6/FyQdra9qmlYCwKKxm3kfQAswRS9+3HsYk3thLUhcFmmWhK4dXaICzJwGFonfXwg==""" self.assertEqual(resp.read().rstrip(), expected.strip()) def test_sub_file_hash_unrecognized(self): with self.assertRaises(urllib.error.HTTPError): self.request("/sub_file_hash_unrecognized.sub.txt") - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_headers(self): resp = self.request("/sub_headers.txt", query="pipe=sub", headers={"X-Test": "PASS"}) - expected = "PASS" + expected = b"PASS" self.assertEqual(resp.read().rstrip(), expected) @pytest.mark.xfail(sys.platform == "win32", reason="https://github.com/web-platform-tests/wpt/issues/12949") - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_location(self): resp = self.request("/sub_location.sub.txt?query_string") expected = """ @@ -101,30 +96,26 @@ pathname: /sub_location.sub.txt port: {0} query: ?query_string scheme: http -server: http://localhost:{0}""".format(self.server.port) +server: http://localhost:{0}""".format(self.server.port).encode("ascii") self.assertEqual(resp.read().rstrip(), expected.strip()) - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_params(self): resp = self.request("/sub_params.txt", query="test=PASS&pipe=sub") - expected = "PASS" + expected = b"PASS" self.assertEqual(resp.read().rstrip(), expected) - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_url_base(self): resp = self.request("/sub_url_base.sub.txt") - self.assertEqual(resp.read().rstrip(), "Before / After") + self.assertEqual(resp.read().rstrip(), b"Before / After") - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_uuid(self): resp = self.request("/sub_uuid.sub.txt") - self.assertRegexpMatches(resp.read().rstrip(), r"Before [a-f0-9-]+ After") + self.assertRegexpMatches(resp.read().rstrip(), b"Before [a-f0-9-]+ After") - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_sub_var(self): resp = self.request("/sub_var.sub.txt") port = self.server.port - expected = "localhost %s A %s B localhost C" % (port, port) + expected = b"localhost %d A %d B localhost C" % (port, port) self.assertEqual(resp.read().rstrip(), expected) class TestTrickle(TestUsingServer): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py index 096c0535b9a..d94580140e2 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py @@ -1,5 +1,4 @@ -import sys - +# -*- coding: utf-8 -*- import pytest wptserve = pytest.importorskip("wptserve") @@ -115,16 +114,40 @@ class TestRequest(TestUsingServer): resp = self.request("/test/some_route") self.assertEqual(b"some route", resp.read()) + def test_non_ascii_in_headers(self): + @wptserve.handlers.handler + def handler(request, response): + return request.headers["foo"] + + route = ("GET", "/test/test_unicode_in_headers", handler) + self.server.router.register(*route) + + # Try some non-ASCII characters and the server shouldn't crash. + encoded_text = u"你好".encode("utf-8") + resp = self.request(route[1], headers={"foo": encoded_text}) + self.assertEqual(encoded_text, resp.read()) + + # Try a different encoding from utf-8 to make sure the binary value is + # returned in verbatim. + encoded_text = u"どうも".encode("shift-jis") + resp = self.request(route[1], headers={"foo": encoded_text}) + self.assertEqual(encoded_text, resp.read()) + class TestAuth(TestUsingServer): - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_auth(self): @wptserve.handlers.handler def handler(request, response): - return " ".join((request.auth.username, request.auth.password)) + return b" ".join((request.auth.username, request.auth.password)) route = ("GET", "/test/test_auth", handler) self.server.router.register(*route) - resp = self.request(route[1], auth=("test", "PASS")) + + resp = self.request(route[1], auth=(b"test", b"PASS")) + self.assertEqual(200, resp.getcode()) + self.assertEqual([b"test", b"PASS"], resp.read().split(b" ")) + + encoded_text = u"どうも".encode("shift-jis") + resp = self.request(route[1], auth=(encoded_text, encoded_text)) self.assertEqual(200, resp.getcode()) - self.assertEqual(["test", "PASS"], resp.read().split(" ")) + self.assertEqual([encoded_text, encoded_text], resp.read().split(b" ")) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py index cded8f6ea02..cbae6d6fcb9 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py @@ -1,5 +1,6 @@ from cgi import escape from collections import deque +import base64 import gzip as gzip_module import hashlib import os @@ -393,7 +394,7 @@ class SubFunctions(object): @staticmethod def file_hash(request, algorithm, path): - algorithm = algorithm.decode("ascii") + assert isinstance(algorithm, text_type) if algorithm not in SubFunctions.supported_algorithms: raise ValueError("Unsupported encryption algorithm: '%s'" % algorithm) @@ -401,7 +402,7 @@ class SubFunctions(object): absolute_path = os.path.join(request.doc_root, path) try: - with open(absolute_path) as f: + with open(absolute_path, "rb") as f: hash_obj.update(f.read()) except IOError: # In this context, an unhandled IOError will be interpreted by the @@ -411,7 +412,7 @@ class SubFunctions(object): # the path to the file to be hashed is invalid. raise Exception('Cannot open file for hash computation: "%s"' % absolute_path) - return hash_obj.digest().encode('base64').strip() + return base64.b64encode(hash_obj.digest()).strip() def template(request, content, escape_type="html"): #TODO: There basically isn't any error handling here @@ -490,9 +491,14 @@ def template(request, content, escape_type="html"): escape_func = {"html": lambda x:escape(x, quote=True), "none": lambda x:x}[escape_type] - #Should possibly support escaping for other contexts e.g. script - #TODO: read the encoding of the response - return escape_func(text_type(value)).encode("utf-8") + # Should possibly support escaping for other contexts e.g. script + # TODO: read the encoding of the response + # cgi.escape() only takes text strings in Python 3. + if isinstance(value, binary_type): + value = value.decode("utf-8") + elif isinstance(value, int): + value = text_type(value) + return escape_func(value).encode("utf-8") template_regexp = re.compile(br"{{([^}]*)}}") new_content = template_regexp.sub(config_replacement, content) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py index 976cb1781a0..104dca2ef6f 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/ranges.py @@ -3,6 +3,10 @@ from .utils import HTTPException class RangeParser(object): def __call__(self, header, file_size): + try: + header = header.decode("ascii") + except UnicodeDecodeError: + raise HTTPException(400, "Non-ASCII range header value") prefix = "bytes=" if not header.startswith(prefix): raise HTTPException(416, message="Unrecognised range type %s" % (header,)) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py index cb575ccdba4..990774cbb9e 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py @@ -1,7 +1,7 @@ import base64 import cgi from six.moves.http_cookies import BaseCookie -from six import BytesIO +from six import BytesIO, binary_type, text_type import tempfile from six.moves.urllib.parse import parse_qsl, urlsplit @@ -308,7 +308,7 @@ class Request(object): self.raw_input.seek(0) fs = cgi.FieldStorage(fp=self.raw_input, environ={"REQUEST_METHOD": self.method}, - headers=self.headers, + headers=self.raw_headers, keep_blank_values=True) self._POST = MultiDict.from_field_storage(fs) self.raw_input.seek(pos) @@ -318,7 +318,7 @@ class Request(object): def cookies(self): if self._cookies is None: parser = BaseCookie() - cookie_headers = self.headers.get("cookie", "") + cookie_headers = self.headers.get("cookie", b"") parser.load(cookie_headers) cookies = Cookies() for key, value in parser.iteritems(): @@ -355,11 +355,34 @@ class H2Request(Request): super(H2Request, self).__init__(request_handler) +def _maybe_encode(s): + """Encodes a text-type string into binary data using iso-8859-1. + + Returns `str` in Python 2 and `bytes` in Python 3. The function is a no-op + if the argument already has a binary type. + """ + if isinstance(s, binary_type): + return s + + # Python 3 assumes iso-8859-1 when parsing headers, which will garble text + # with non ASCII characters. We try to encode the text back to binary. + # https://github.com/python/cpython/blob/273fc220b25933e443c82af6888eb1871d032fb8/Lib/http/client.py#L213 + if isinstance(s, text_type): + return s.encode("iso-8859-1") + + raise TypeError("Unexpected value in RequestHeaders: %r" % s) + + class RequestHeaders(dict): - """Dictionary-like API for accessing request headers.""" + """Read-only dictionary-like API for accessing request headers. + + Unlike BaseHTTPRequestHandler.headers, this class always returns all + headers with the same name (separated by commas). And it ensures all keys + (i.e. names of headers) and values have binary type. + """ def __init__(self, items): for header in items.keys(): - key = header.lower() + key = _maybe_encode(header).lower() # get all headers with the same name values = items.getallmatchingheaders(header) if len(values) > 1: @@ -369,15 +392,17 @@ class RequestHeaders(dict): for value in values: # getallmatchingheaders returns raw header lines, so # split to get name, value - multiples.append(value.split(':', 1)[1].strip()) - dict.__setitem__(self, key, multiples) + multiples.append(_maybe_encode(value).split(b':', 1)[1].strip()) + headers = multiples else: - dict.__setitem__(self, key, [items[header]]) + headers = [_maybe_encode(items[header])] + dict.__setitem__(self, key, headers) def __getitem__(self, key): """Get all headers of a certain (case-insensitive) name. If there is more than one, the values are returned comma separated""" + key = _maybe_encode(key) values = dict.__getitem__(self, key.lower()) if len(values) == 1: return values[0] @@ -403,6 +428,7 @@ class RequestHeaders(dict): def get_list(self, key, default=missing): """Get all the header values for a particular field name as a list""" + key = _maybe_encode(key) try: return dict.__getitem__(self, key.lower()) except KeyError: @@ -412,6 +438,7 @@ class RequestHeaders(dict): raise def __contains__(self, key): + key = _maybe_encode(key) return dict.__contains__(self, key.lower()) def iteritems(self): @@ -590,21 +617,28 @@ class Authentication(object): The password supplied in the HTTP Authorization header, or None + + Both attributes are binary strings (`str` in Py2, `bytes` in Py3), since + RFC7617 Section 2.1 does not specify the encoding for username & passsword + (as long it's compatible with ASCII). UTF-8 should be a relatively safe + choice if callers need to decode them as most browsers use it. """ def __init__(self, headers): self.username = None self.password = None - auth_schemes = {"Basic": self.decode_basic} + auth_schemes = {b"Basic": self.decode_basic} if "authorization" in headers: header = headers.get("authorization") - auth_type, data = header.split(" ", 1) + assert isinstance(header, binary_type) + auth_type, data = header.split(b" ", 1) if auth_type in auth_schemes: self.username, self.password = auth_schemes[auth_type](data) else: raise HTTPException(400, "Unsupported authentication scheme %s" % auth_type) def decode_basic(self, data): - decoded_data = base64.decodestring(data) - return decoded_data.split(":", 1) + assert isinstance(data, binary_type) + decoded_data = base64.b64decode(data) + return decoded_data.split(b":", 1) |