diff options
Diffstat (limited to 'tests')
807 files changed, 12421 insertions, 7631 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-duration-computed.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-duration-computed.html.ini new file mode 100644 index 00000000000..0bb304465a7 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-duration-computed.html.ini @@ -0,0 +1,27 @@ +[animation-duration-computed.html] + [Property animation-duration value 'auto'] + expected: FAIL + + [Property animation-duration value 'auto, auto'] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:auto] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:auto, auto] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:--t] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:--t, --t2] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:none] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:scroll()] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:view()] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-002.html.ini new file mode 100644 index 00000000000..d695ff0e521 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-002.html.ini @@ -0,0 +1,2 @@ +[border-image-002.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-003.html.ini new file mode 100644 index 00000000000..182fa949db8 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-003.html.ini @@ -0,0 +1,2 @@ +[border-image-003.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-004.html.ini new file mode 100644 index 00000000000..e4f30d04308 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-004.html.ini @@ -0,0 +1,2 @@ +[border-image-004.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-006.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-006.html.ini new file mode 100644 index 00000000000..14f85783493 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-006.html.ini @@ -0,0 +1,2 @@ +[border-image-006.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-007.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-007.html.ini new file mode 100644 index 00000000000..ffa1e8712d8 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-007.html.ini @@ -0,0 +1,2 @@ +[border-image-007.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-011.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-011.html.ini new file mode 100644 index 00000000000..962f3b5d4d8 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-011.html.ini @@ -0,0 +1,2 @@ +[border-image-011.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-012.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-012.html.ini new file mode 100644 index 00000000000..126a8510576 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/border-image-012.html.ini @@ -0,0 +1,2 @@ +[border-image-012.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini index 206453f3c7a..4d2a4b9f6d7 100644 --- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/parsing/background-valid.html.ini @@ -5,9 +5,6 @@ [e.style['background'\] = "none" should set background-color] expected: FAIL - [e.style['background'\] = "none" should set background-position] - expected: FAIL - [e.style['background'\] = "url(\\"https://example.com/\\") 1px 2px / 3px 4px space round local padding-box content-box, rgb(5, 6, 7) url(\\"https://example.com/\\") 1px 2px / 3px 4px space round local padding-box content-box" should set background-attachment] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini deleted file mode 100644 index eb3cf41a070..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[opacity-animation-ending-correctly-002.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/css/css-position/overlay/overlay-transition-backdrop.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/overlay/overlay-transition-backdrop.html.ini new file mode 100644 index 00000000000..f6389e9308d --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-position/overlay/overlay-transition-backdrop.html.ini @@ -0,0 +1,2 @@ +[overlay-transition-backdrop.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/cssom/HTMLLinkElement-load-event.html.ini b/tests/wpt/metadata-layout-2020/css/cssom/HTMLLinkElement-load-event.html.ini new file mode 100644 index 00000000000..cff25974ea9 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/cssom/HTMLLinkElement-load-event.html.ini @@ -0,0 +1,3 @@ +[HTMLLinkElement-load-event.html] + [Link element load event doesn't block the parser.] + expected: FAIL diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 11b98518104..6bd57108d76 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -35,6 +35,13 @@ {} ] ], + "append-image-using-illegal-map.html": [ + "c78e74eeed7b6dfee3b267c4b81bd2f511923de9", + [ + null, + {} + ] + ], "aria-hidden-with-select.html": [ "2aedbcfb82d4f94925a89294d11d1e4c2a6564a6", [ @@ -197,7 +204,7 @@ ] ], "map-update-crash.html": [ - "db7c664251a67e43d0a4dd31eaa8a2b1efd3b938", + "5787de8059ff9bf5eea44435750462886617bcff", [ null, {} @@ -224,6 +231,13 @@ {} ] ], + "removed-from-flat-tree.html": [ + "2deaf6ab390608a49d2ec93fe7082ed85605712b", + [ + null, + {} + ] + ], "serialize-with-no-document.html": [ "f7719cf2ff1838b1125e08c5f86cf57910732c0e", [ @@ -323,7 +337,7 @@ "normal-flow": { "crashtests": { "block-in-inline-ax-crash.html": [ - "dee9ed8a1b8ed368d854e2d4c7f8cd3dfcd2e222", + "bbb484073a38a9920da07ffcb049e0ef00c241e2", [ null, {} @@ -4223,6 +4237,17 @@ {} ] ], + "invalidation": { + "crashtests": { + "nth-child-of-attribute-crash.html": [ + "8f30fbb5e77610fc4b113c976a2efb1dacd88041", + [ + null, + {} + ] + ] + } + }, "spurious-brace-crash.html": [ "b1a462a9690ea40836c0d7cb0cdf9779b9702750", [ @@ -4390,6 +4415,13 @@ {} ] ], + "delete-after-empty-script-element.html": [ + "c06a4af8026aaaa946d694c57a4558806d97ddb5", + [ + null, + {} + ] + ], "delete-after-justifyleft-in-closed-editable-dialog.html": [ "185cb01ee51dbf91717887f51ad82812690e0e90", [ @@ -4453,6 +4485,13 @@ {} ] ], + "designMode-off-during-inserthorizontalrule.html": [ + "21a61998986e17652a2affb52b2139b78bc23b16", + [ + null, + {} + ] + ], "execCommand-at-load-with-changing-editing-host.html": [ "ec1dd30dc023205ce479df1038d08279c315ae62", [ @@ -4481,6 +4520,13 @@ {} ] ], + "forwarddelete-after-editable-slot-element-outside-body.html": [ + "480f02ded967d5a2e845302d384d03a2c87285c4", + [ + null, + {} + ] + ], "forwarddelete-at-empty-text-node-in-body.html": [ "4fba13d5d8eb3f0939e9265c709a00eec452ddf0", [ @@ -4516,6 +4562,20 @@ {} ] ], + "indent-in-inline-editing-host-outside-body.html": [ + "d56a0fd248b9f98f4d6355e2ac0f4736b5014e09", + [ + null, + {} + ] + ], + "indent-in-textarea-in-designMode-during-outdent.html": [ + "313c51bb5a0e12c841cb06ab512595b6afee52d8", + [ + null, + {} + ] + ], "indent-outdent-after-closing-editable-dialog-element.html": [ "7f73de048d714c99ce47ae4da61d7128e53216e8", [ @@ -4537,6 +4597,13 @@ {} ] ], + "insertText-nested-by-DOMSubtreeModified.html": [ + "45b0e67ed4635afba892e20396afee801486ca4d", + [ + null, + {} + ] + ], "inserthorizontalrule-in-fieldset-and-everything-styled-white-space-pre.html": [ "d06157e78429b9365f5122180426f46b96785b96", [ @@ -4558,6 +4625,13 @@ {} ] ], + "inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html": [ + "d7224c3095df66cfa792e21f8b7af991c7610baa", + [ + null, + {} + ] + ], "inserthorizontalrule-with-selecting-text-in-document-element.html": [ "c46b0359e86d4b3d4f0c317260d0ad63d24ec98d", [ @@ -4866,6 +4940,13 @@ {} ] ], + "removeformat-in-number-input-immediately-after-type-change-and-stepUp.html": [ + "d83c2e00790f1a9d825ffa4742bd7504f5cc7f63", + [ + null, + {} + ] + ], "remve-documentElement-after-inserthtml-svg-and-td.html": [ "eebeac317da782b8738c4ad5ee45390f66f1b35e", [ @@ -19811,6 +19892,36 @@ } }, "offscreen": { + "shadows": { + "2d.shadow.blur.high-manual.html": [ + "46c50324488d37f63049a7211c8af2c147af9f79", + [ + null, + {} + ] + ], + "2d.shadow.blur.high-manual.worker.js": [ + "8bd06da381ba1427a6532d1e711acb58c1cf3f81", + [ + null, + {} + ] + ], + "2d.shadow.blur.low-manual.html": [ + "19a42a683ccf12990ef2d0183529e2666276d2b1", + [ + null, + {} + ] + ], + "2d.shadow.blur.low-manual.worker.js": [ + "67bc8c424e9ddb00909a28c831f774c963ecce69", + [ + null, + {} + ] + ] + }, "text": { "2d.text.draw.fill.basic-manual.html": [ "af1cb9d94a3db8619d297a4bb14f7828bc2baa3d", @@ -22162,7 +22273,7 @@ ] ], "pointerevent_touch-action-rotated-divs_touch-manual.html": [ - "1c09b15f1f99eead72a0689ab14a4facb1c61e3f", + "194e933f91ab068ff3fb2abc7dd064316380de68", [ null, {} @@ -28206,22 +28317,6 @@ ] ] }, - "window-placement": { - "fullscreen-companion-window-manual.tentative.https.html": [ - "10f30a1906076c1eef1476fe5686c1d93e4412cc", - [ - null, - {} - ] - ], - "multi-screen-fullscreen-manual.tentative.https.html": [ - "620cd6e507d9dbe8f3f43c59ae973733d7c78cd8", - [ - null, - {} - ] - ] - }, "xhr": { "send-authentication-existing-session-manual.htm": [ "a80efd6e8436408db15d8019beef3abc0dfd0ab9", @@ -29869,6 +29964,19 @@ {} ] ], + "monolithic-overflow-021-print.html": [ + "584c4943dcf16e1713c93a6b482b858076163842", + [ + null, + [ + [ + "/css/printing/monolithic-overflow-021-print-ref.html", + "==" + ] + ], + {} + ] + ], "page-name-001-print.html": [ "56281bb4ed5f8b3e34401420b10504ed6c0e00fd", [ @@ -128704,7 +128812,7 @@ ] ], "cancel-animation-shadow-slot-invalidation.html": [ - "d67a22443bbdb872895ee90bf752d951ebd5eb35", + "a5c9c6763f58485a15ef21f20c4ec92025ca8993", [ null, [ @@ -135200,21 +135308,99 @@ {} ] ], - "border-image-017.xht": [ - "33492ca78b31e3078c9c63616340672aed356478", + "border-image-002.html": [ + "ac76eb2a5ef7b5fa13e5a89b8bf302b8cd08a7c8", [ null, [ [ - "/css/reference/ref-filled-green-100px-square.xht", + "/css/css-backgrounds/reference/ref-filled-green-100px-square.xht", "==" ] ], {} ] ], - "border-image-018.xht": [ - "9ce6c82d564b3c68dc7cb0dbf738ad0b6321a5da", + "border-image-003.html": [ + "6d4ee0fde93d57bfb0640e646b5ebc55cb441f1b", + [ + null, + [ + [ + "/css/css-backgrounds/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "border-image-004.html": [ + "844d98bb3cd84e99c5c56d9a0b79352412609c2b", + [ + null, + [ + [ + "/css/css-backgrounds/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "border-image-006.html": [ + "e3782f2ecd1a48964491b16c404b23b2c4d01e7f", + [ + null, + [ + [ + "/css/css-backgrounds/reference/border-image-006-ref.html", + "==" + ] + ], + {} + ] + ], + "border-image-007.html": [ + "41ac9dac37fb5b11c09be99b1a325f9190e00f8d", + [ + null, + [ + [ + "/css/css-backgrounds/reference/border-image-007-ref.html", + "==" + ] + ], + {} + ] + ], + "border-image-011.html": [ + "357845bbf719a6eb310ce7f31b58126bbcd55172", + [ + null, + [ + [ + "/css/css-backgrounds/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "border-image-012.html": [ + "16a6e9061dfd0371bcf8675d8599f1221bf4f2cb", + [ + null, + [ + [ + "/css/css-backgrounds/reference/border-image-012-ref.html", + "==" + ] + ], + {} + ] + ], + "border-image-017.xht": [ + "33492ca78b31e3078c9c63616340672aed356478", [ null, [ @@ -135226,8 +135412,8 @@ {} ] ], - "border-image-019.xht": [ - "d07db369ab5734a353c905800f9363f3aeb96152", + "border-image-018.xht": [ + "9ce6c82d564b3c68dc7cb0dbf738ad0b6321a5da", [ null, [ @@ -135239,8 +135425,8 @@ {} ] ], - "border-image-020.xht": [ - "c4fc9ace4aae08b502047db062bf61099d224ee4", + "border-image-019.xht": [ + "d07db369ab5734a353c905800f9363f3aeb96152", [ null, [ @@ -135252,13 +135438,13 @@ {} ] ], - "border-image-6.html": [ - "bc4cb1386b5cc634539fb4a6cd5c8599ec013f21", + "border-image-020.xht": [ + "c4fc9ace4aae08b502047db062bf61099d224ee4", [ null, [ [ - "/css/css-backgrounds/border-image-6-ref.html", + "/css/reference/ref-filled-green-100px-square.xht", "==" ] ], @@ -158187,6 +158373,19 @@ {} ] ], + "container-units-sharing-via-rule-node.html": [ + "e1a5c714516bfea5e482acc4f5b9811bbc975a21", + [ + null, + [ + [ + "/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html", + "==" + ] + ], + {} + ] + ], "counters-in-container-dynamic.html": [ "d85ab6cb425ba792914b39901cd3f3ba3943b606", [ @@ -159268,6 +159467,97 @@ {} ] ], + "content-visibility-with-popover-top-layer-000.html": [ + "fef4f5e5405e038aa10c1c0e21a71df6a82cd78f", + [ + null, + [ + [ + "/css/css-contain/content-visibility/container-ref.html", + "==" + ] + ], + {} + ] + ], + "content-visibility-with-popover-top-layer-001.html": [ + "fb3c9096da6305883ff42ce59981f34ad1f4b112", + [ + null, + [ + [ + "/css/css-contain/content-visibility/container-ref.html", + "==" + ] + ], + {} + ] + ], + "content-visibility-with-popover-top-layer-002.html": [ + "48b436f4de19ee35f3684794c49b786bcd9cb005", + [ + null, + [ + [ + "/css/css-contain/content-visibility/container-ref.html", + "==" + ] + ], + {} + ] + ], + "content-visibility-with-popover-top-layer-003.html": [ + "df3cf07a0159f9254f0fd78d193716c74aa70068", + [ + null, + [ + [ + "/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html", + "==" + ] + ], + {} + ] + ], + "content-visibility-with-popover-top-layer-004.html": [ + "bbf4567e37d4c1df68ce9119ec3952722324f12e", + [ + null, + [ + [ + "/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html", + "==" + ] + ], + {} + ] + ], + "content-visibility-with-popover-top-layer-005.html": [ + "264d7b317e0a3fb2fc655c6cceda29d2fe252f9d", + [ + null, + [ + [ + "/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html", + "==" + ] + ], + {} + ] + ], + "content-visibility-with-popover-top-layer-hide-after-addition.html": [ + "e3934bf46f80d7e22c0209470b8b7ed6f92e47cd", + [ + null, + [ + [ + "/css/css-contain/content-visibility/container-ref.html", + "==" + ] + ], + {} + ] + ], "content-visibility-with-top-layer-000.html": [ "61856611f9eb8b170325a12114df78beefaaf2d5", [ @@ -160751,7 +161041,7 @@ ] ], "css3-counter-styles-202.html": [ - "909118fb109a0f93070353040dc300e049dea5e7", + "6f00ee8b2d8d0bb44ab0a10aae18dfe57e42e589", [ null, [ @@ -160792,7 +161082,7 @@ ] ], "css3-counter-styles-205.html": [ - "fdd74e837d39d6cf9805be992d19a8aa7deeed07", + "4b62cfeb77ac199978e257a770c1a19bb5cd0774", [ null, [ @@ -164346,7 +164636,7 @@ ] ], "display-contents-slot-attach-whitespace.html": [ - "867f1f059247cc1ba0ce5ded559b5f42e0473cf1", + "c29b5ba6348130981ff47505c8f8281806a3ef64", [ null, [ @@ -205482,7 +205772,7 @@ ] ], "mask-image-5.html": [ - "d98ddf8de57d723afdc2ed0274dbfbf178dbaa54", + "12f0f6000794388b73ac55b3747cf556b4ac8ee4", [ null, [ @@ -213053,6 +213343,19 @@ {} ] ], + "scrollbar-gutter-dynamic-002.html": [ + "a830e6b680b82984cfb1e95831288c5b804e9aaa", + [ + null, + [ + [ + "/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html", + "==" + ] + ], + {} + ] + ], "scrollbar-gutter-rtl-002.html": [ "8d0376defdfc69ecb44fc2134c81573e553db2bb", [ @@ -215657,6 +215960,32 @@ ] }, "overlay": { + "overlay-transition-backdrop-entry.html": [ + "89299e3a8ea088d93e308f50966bca9372d3eff1", + [ + null, + [ + [ + "/css/css-position/overlay/green-ref.html", + "==" + ] + ], + {} + ] + ], + "overlay-transition-backdrop.html": [ + "b730e4334659c8f2d8071a651b7004583b6f96c3", + [ + null, + [ + [ + "/css/css-position/overlay/green-ref.html", + "==" + ] + ], + {} + ] + ], "overlay-transition-finished.html": [ "bf0aefac3f3d26376980bdb48ad8058210d77898", [ @@ -222483,7 +222812,7 @@ ] ], "slotted-with-pseudo-element.html": [ - "e1a91952d70cc190fff101a4e26af719a2900257", + "f2b33ae49474ff6594acd2052d400d781d4101af", [ null, [ @@ -241885,6 +242214,19 @@ ] ] }, + "text-stroke-width-subpixel.html": [ + "97cbc3f44de91ceb094283de84f7fb9a9e018d36", + [ + null, + [ + [ + "/css/css-text/text-stroke-width-subpixel-notref.html", + "!=" + ] + ], + {} + ] + ], "text-transform": { "math": { "text-transform-math-auto-001.html": [ @@ -257822,7 +258164,7 @@ ] ], "svg-scale-013.html": [ - "00c754552fde8c2bf5cb97525c727c2082d98701", + "d94e0b7d09b4a15f3f1aca128fecf5786a7cfed2", [ null, [ @@ -257835,7 +258177,7 @@ ] ], "svg-scale-014.html": [ - "15662267c2e15a52b84b85c47293abdc9978bec3", + "f2acf1b0c66fe86ebd25898b731ffa3d28c5f0fe", [ null, [ @@ -258394,7 +258736,7 @@ ] ], "transform-3d-rotateY-stair-below-001.xht": [ - "8d9b610bf030a83a60185dadd3b26c6e546af261", + "bcb28dbd516738fb276047e4bb636b1032845ced", [ null, [ @@ -258410,7 +258752,7 @@ [ [ 0, - 14 + 20 ], [ 0, @@ -291975,6 +292317,90 @@ ] ], "forms": { + "button-appearance-native-horizontal.optional.html": [ + "44579ac29212bb9544c505e022fab0c1719437c5", + [ + null, + [ + [ + "/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html", + "!=" + ] + ], + {} + ] + ], + "button-appearance-native-vertical.optional.html": [ + "3a0c61b4902c2e1b89893eddf493d04563435c0a", + [ + null, + [ + [ + "/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html", + "!=" + ] + ], + {} + ] + ], + "button-appearance-none-horizontal.optional.html": [ + "2679c6f04d711d332468a85792c8500aa7de019e", + [ + null, + [ + [ + "/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html", + "!=" + ] + ], + {} + ] + ], + "button-appearance-none-vertical.optional.html": [ + "b37565a4099b66bf1d1b0556b230b311c70f4fac", + [ + null, + [ + [ + "/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html", + "!=" + ] + ], + {} + ] + ], "color-input-appearance-native-horizontal.optional.html": [ "ef5fc29fcfd7f8c7231cea99eedff921792cc5ab", [ @@ -302276,7 +302702,7 @@ ] ], "mq-negative-range-001.html": [ - "f311463877a3d3a76905461fe0fddf647e487047", + "761df3ac087b8aee9eb04e9d91c877f12472bcd6", [ null, [ @@ -302289,7 +302715,7 @@ ] ], "mq-negative-range-002.html": [ - "59a58a1d5c7ee4d2e054b41c7d06b69fb15bf185", + "e905b39231da5dc35d1a3abf1cd67a4b2b34aa9e", [ null, [ @@ -303000,7 +303426,7 @@ ] ], "offset-path-ray-contain-004.html": [ - "9848259133f6d5557787e9bf8f5cf29a0284f5b4", + "d5c5ecf3c7ca741698e9a89ed5396441d0747851", [ null, [ @@ -303009,7 +303435,23 @@ "==" ] ], - {} + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 20 + ], + [ + 0, + 10 + ] + ] + ] + ] + } ] ], "offset-path-ray-contain-005.html": [ @@ -304348,6 +304790,32 @@ {} ] ], + "negated-nth-child-when-ancestor-changes.html": [ + "0d76146f19ad312d42a09cd89c14824424c193d3", + [ + null, + [ + [ + "/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html", + "==" + ] + ], + {} + ] + ], + "negated-nth-last-child-when-ancestor-changes.html": [ + "27f66ee3244dc58e4bb09a64222d8f2b55524ea0", + [ + null, + [ + [ + "/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html", + "==" + ] + ], + {} + ] + ], "nth-child-containing-ancestor.html": [ "a7f246328c8f5f48c7f32822ea8dfdecde474022", [ @@ -308489,26 +308957,13 @@ ] }, "layers": { - "2d.layer.endlayer.alone.html": [ - "a7a5933b33d0d9e6a183d1bd5ab3a2e88d6a507f", - [ - null, - [ - [ - "/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html", - "==" - ] - ], - {} - ] - ], - "2d.layer.endlayer.unmatched.html": [ - "5f5398323264e5cc33b4f6ebb744128b92d18946", + "2d.layer.cross-layer-paths.html": [ + "7feebfdce6d1b8a712636654925fb6a143a8a839", [ null, [ [ - "/html/canvas/element/layers/2d.layer.endlayer.unmatched-expected.html", + "/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html", "==" ] ], @@ -308931,6 +309386,19 @@ {} ] ], + "2d.layer.reset.html": [ + "aabf74cc4d1dd216f69658b6e6ab97a29eeab3ae", + [ + null, + [ + [ + "/html/canvas/element/layers/2d.layer.reset-expected.html", + "==" + ] + ], + {} + ] + ], "2d.layer.restore-style.html": [ "2537f409d6d99e0175667725ffedd5c384071864", [ @@ -308989,6 +309457,19 @@ } ] ], + "2d.layer.unclosed-nested.html": [ + "c02aae4af116be203af40610444db1cf7b91624b", + [ + null, + [ + [ + "/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html", + "==" + ] + ], + {} + ] + ], "2d.layer.unclosed.html": [ "788889ee7ef1ca5fe1b33dd011dafa10e9d141df", [ @@ -310015,52 +310496,26 @@ ] }, "layers": { - "2d.layer.endlayer.alone.html": [ - "6a0e5cce71719615966c649a1623ed98e27637b6", + "2d.layer.cross-layer-paths.html": [ + "f167ae00bdf18f985cab62f350466bc903dbddaf", [ null, [ [ - "/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html", + "/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html", "==" ] ], {} ] ], - "2d.layer.endlayer.alone.w.html": [ - "ddb2671aaabf37d51b6f4167e8bd16bd2fb88998", + "2d.layer.cross-layer-paths.w.html": [ + "5b1f7f949cc57e12c7477ef3229369407c20fc1f", [ null, [ [ - "/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html", - "==" - ] - ], - {} - ] - ], - "2d.layer.endlayer.unmatched.html": [ - "b204c49e5eb1d67dd4785b3cd2fc68afb2f90542", - [ - null, - [ - [ - "/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html", - "==" - ] - ], - {} - ] - ], - "2d.layer.endlayer.unmatched.w.html": [ - "2e1cb62c32a94ef4965b7cefdd5489055595acf7", - [ - null, - [ - [ - "/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html", + "/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html", "==" ] ], @@ -310873,6 +311328,32 @@ {} ] ], + "2d.layer.reset.html": [ + "6fae595a84b7ac40ea0f38eed0edc2102024dec0", + [ + null, + [ + [ + "/html/canvas/offscreen/layers/2d.layer.reset-expected.html", + "==" + ] + ], + {} + ] + ], + "2d.layer.reset.w.html": [ + "d050b90841a2fec48142ea0d69d04cd5bb8b3a04", + [ + null, + [ + [ + "/html/canvas/offscreen/layers/2d.layer.reset-expected.html", + "==" + ] + ], + {} + ] + ], "2d.layer.restore-style.html": [ "a3593cd2a82748df9db8bd74a67dbc29dcaefb31", [ @@ -310989,6 +311470,32 @@ } ] ], + "2d.layer.unclosed-nested.html": [ + "b7be6d82423805c7d138ea3ee53561a2a9cc9433", + [ + null, + [ + [ + "/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html", + "==" + ] + ], + {} + ] + ], + "2d.layer.unclosed-nested.w.html": [ + "dd1c36ea471975155643be51277562e3e3e785c6", + [ + null, + [ + [ + "/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html", + "==" + ] + ], + {} + ] + ], "2d.layer.unclosed.html": [ "689ee801cf27dcb8b61e9e89c5655a31708d689b", [ @@ -314447,7 +314954,7 @@ ] ], "video-controls-vertical-writing-mode.html": [ - "d124396ab2c0383febe73c557e94dfd1e6401ace", + "acd258811290c60258c3a0dbf6c290d207225bd5", [ null, [ @@ -329425,7 +329932,7 @@ }, "support": { ".azure-pipelines.yml": [ - "428411d04ab83f754150f2a955f82ee49ab6476b", + "4dae0798b03e7635d64e47036ea4ffc2d2d5d557", [] ], ".gitattributes": [ @@ -329519,6 +330026,18 @@ [] ] }, + "private-aggregation": { + "debug": { + "report-shared-storage": [ + "7ffdb70773d47d2e5943253d27520b5cece907ba", + [] + ] + }, + "report-shared-storage": [ + "7ffdb70773d47d2e5943253d27520b5cece907ba", + [] + ] + }, "web-identity": [ "2095182bd040631d1ecaaa70d456d67dee3aee15", [] @@ -333030,7 +333549,7 @@ [] ], "iframe-with-embedded-popup-expect-no-hints.html": [ - "21efd76180c1542d6d06b2c67b5c57ffe8b9676b", + "96d2886f0e3e73a346c3a85fc334c8fd06e2b737", [] ], "util.js": [ @@ -352141,6 +352660,20 @@ ] } }, + "default-src": { + "default-src-sri_hash.sub.html.sub.headers": [ + "6f2066063873ce43deefa16b7d021f0eba0f70cc", + [] + ], + "externalScript.js": [ + "2920b03c9bc98d16d4c7ebefaf8bcef268c3796c", + [] + ], + "simpleSourcedScript.js": [ + "deca86508fffd807ffd71dc2fc7554bbaba7e1e2", + [] + ] + }, "embedded-enforcement": { "META.yml": [ "1cdc709f21e2e435b69af943ae2d2e9c0731540f", @@ -353489,7 +354022,7 @@ [] ], "script-src-sri_hash.sub.html.sub.headers": [ - "25cd6541acac853f97723ab329a8c060a8609365", + "971525ff762b3fec2ec8b27706e21237ac07af40", [] ], "script-src-strict_dynamic_and_unsafe_eval_eval.html.headers": [ @@ -354437,7 +354970,7 @@ ] }, "fedcm-helper.sub.js": [ - "270ac1d743ab4c8b679256feba4b9c2f07bdf891", + "79136b5958fa584842daf5455e6f419851842d00", [] ], "fedcm-iframe-level2.html": [ @@ -374002,10 +374535,6 @@ "9ed21b722270dcb6a73620b40a3b253126fdbdec", [] ], - "border-image-6-ref.html": [ - "f3e3bb79c05336a3fa3aa0abe66260ddc8652884", - [] - ], "border-image-calc-ref.html": [ "f827ca7fd0b9f4e1e06334fcb475e38938a29237", [] @@ -374423,6 +374952,18 @@ "fe42b5325785950f31e2eb2d6cca9a15410af061", [] ], + "border-image-006-ref.html": [ + "8e5ef401ec4226c014a48b9dfb2fac5aa1cabb54", + [] + ], + "border-image-007-ref.html": [ + "9200edd797e1159d8de08e86acac63227cc07889", + [] + ], + "border-image-012-ref.html": [ + "c11db014019ff4616f7a1c259773194d71630f74", + [] + ], "border-image-image-type-003-ref.html": [ "690f9ad11ad0e63d57c8c7ee10737690b7c8a061", [] @@ -374672,7 +375213,7 @@ [] ], "reference.html": [ - "439747a9ff2e21613c7cb5a6cb8fc8cb1311fd1e", + "95db5aa78c75ff5a6a2f1b00126afc3937cd66eb", [] ], "subpixel-repeat-no-repeat-mix-ref.html": [ @@ -376695,6 +377236,10 @@ "6c8261959f674aa8a80f1f1f8fda343e64450114", [] ], + "container-units-sharing-via-rule-node-ref.html": [ + "c664ce4ccf38f781834dfbdc4d38f8d7af57484b", + [] + ], "counters-ref.html": [ "303c1e89bdfe5449177a2d144f4be1e1760a80d5", [] @@ -376883,6 +377428,10 @@ "5e1e9bdde841828cbd4fc3d6cc165305361f4f36", [] ], + "content-with-popover-top-layer-ref.html": [ + "59b2304d9efff8796c1191c5f22627c0e18c60a7", + [] + ], "content-with-top-layer-ref.html": [ "eadc5f65d1e8bd875e271b0fd27540dac8d2ae5f", [] @@ -376933,6 +377482,10 @@ "a3f8079595378781de584179beeb63072c50810a", [] ], + "spacer-with-popover-top-layer-ref.html": [ + "6c4c65f58c32679f7396cf6cf9ae094b32546c23", + [] + ], "spacer-with-top-layer-ref.html": [ "e274b0fcaa1602c0528c60c1fc022cb9694b1ad4", [] @@ -377678,7 +378231,7 @@ [] ], "css3-counter-styles-202-ref.html": [ - "52712e3fd07fb6e243eb9855c32ffaa546ee75c7", + "e7abaad87e5373be2f2c3f101846e1c1c3ae0b97", [] ], "css3-counter-styles-203-ref.html": [ @@ -377692,7 +378245,7 @@ [] ], "css3-counter-styles-205-ref.html": [ - "7d8e6fb613e885c90bd12d9e09b2a176473743f1", + "45b7037a8c159aadfe01d8c9975de50a92e64cab", [] ], "css3-counter-styles-206-ref.html": [ @@ -392524,7 +393077,7 @@ [] ], "mask-image-5-ref.html": [ - "19a251ef0fd89e2ea24fbea485e65414f07f8575", + "a24b349c5e7497e9a7532328d3bf3a90b971fe35", [] ], "mask-image-6-ref.html": [ @@ -394302,6 +394855,10 @@ "5f2f7bff26420e949093a822d8995d9fcc3f1f51", [] ], + "scrollbar-gutter-dynamic-002-ref.html": [ + "b1db1a8cb719dad46703275cf66cc6b2c20708e8", + [] + ], "scrollbar-gutter-rtl-002-ref.html": [ "e6510a081353db996c4ead14ad6a167b90d48297", [] @@ -400674,6 +401231,10 @@ [] ] }, + "text-stroke-width-subpixel-notref.html": [ + "ba5e8d90f3e9ea0681610b0c83cd8d32fee834d8", + [] + ], "text-transform": { "math": { "text-transform-math-auto-001-ref.html": [ @@ -410852,6 +411413,10 @@ "528c4980de590bc48c3017b246052b561f170bbd", [] ], + "monolithic-overflow-021-print-ref.html": [ + "112b1ebdccf07881e49c9420cc0f214861126d30", + [] + ], "page-name-001-print-ref.html": [ "69c5c37b5a3cc4ed47fab1f8105e5f2351e2d07b", [] @@ -411143,6 +411708,14 @@ "a3cc6d3d8f56fd31c4b19d23af606d7c65487145", [] ], + "negated-nth-child-when-ancestor-changes-ref.html": [ + "bfa9d00e1b6ce666b8b3dc667dd7db07de8c48ad", + [] + ], + "negated-nth-last-child-when-ancestor-changes-ref.html": [ + "27f51e6da2864293bf9daf7f4c11c31678ebd8d5", + [] + ], "nth-child-containing-ancestor-ref.html": [ "6e6680d8c3f63b0539a62c7eb0bb010d48bc4409", [] @@ -411780,7 +412353,7 @@ "reactions": { "resources": { "reactions.js": [ - "5ed32a4fa48c816f57b2cd0f6df5e7deda95000b", + "0e4b94e02a911f3841b46ee3b283547997f81658", [] ] } @@ -421636,12 +422209,8 @@ ] }, "layers": { - "2d.layer.endlayer.alone-expected.html": [ - "607526e4376282dcb4b8a359ada7a23a5fdb3286", - [] - ], - "2d.layer.endlayer.unmatched-expected.html": [ - "e6dd85b7e261c50956d3018d6e2a56e4c3f87600", + "2d.layer.cross-layer-paths-expected.html": [ + "c394ecdfe3904f0afb1e4879241cf38d985155e6", [] ], "2d.layer.global-states.alpha-expected.html": [ @@ -421772,6 +422341,10 @@ "22a9770331d82a0965e6f06f4f98dfe8c681da09", [] ], + "2d.layer.reset-expected.html": [ + "93131dca9cfee5953e4a06cee99ec1429d8f062d", + [] + ], "2d.layer.restore-style-expected.html": [ "1d0ac3558d1d4c15609c364a6e5678ed329fa272", [] @@ -421783,6 +422356,10 @@ "2d.layer.unclosed-expected.html": [ "c41b253c95ba2b4f970b6ae59b58e444df14d866", [] + ], + "2d.layer.unclosed-nested-expected.html": [ + "5e90134a2505d39da1285122f2df86fe05c8f027", + [] ] }, "manual": { @@ -422511,6 +423088,32 @@ "d0524194c9186da948d150da7b36f0f1144a61f9", [] ], + "fill-and-stroke-styles": { + "2d.gradient.interpolate.alpha.png": [ + "af5ac0f07d64e7598e0ea6a8e37cff2a5c4ea2a0", + [] + ], + "2d.gradient.interpolate.color.png": [ + "af5ac0f07d64e7598e0ea6a8e37cff2a5c4ea2a0", + [] + ], + "2d.gradient.interpolate.coloralpha.png": [ + "552e6ee44b1a3bed7d474e198e7cf1ed3a1be5cb", + [] + ], + "2d.gradient.interpolate.multiple.png": [ + "86122450d3a35ef2db3c2917dfdb919fdfb9c4ec", + [] + ], + "2d.gradient.interpolate.overlap.png": [ + "5c2bb964e0fd379309797343aa869c195f2f742a", + [] + ], + "2d.gradient.interpolate.vertical.png": [ + "37d6a00c6279daf43fa436d201799b8c2e527cb7", + [] + ] + }, "filters": { "2d.filter.canvasFilterObject.dropShadow.tentative-expected.html": [ "86c5710132f348bd3e2332983d7211f4b3315cdb", @@ -422518,12 +423121,8 @@ ] }, "layers": { - "2d.layer.endlayer.alone-expected.html": [ - "607526e4376282dcb4b8a359ada7a23a5fdb3286", - [] - ], - "2d.layer.endlayer.unmatched-expected.html": [ - "e6dd85b7e261c50956d3018d6e2a56e4c3f87600", + "2d.layer.cross-layer-paths-expected.html": [ + "c394ecdfe3904f0afb1e4879241cf38d985155e6", [] ], "2d.layer.global-states.alpha-expected.html": [ @@ -422650,6 +423249,10 @@ "2833849da67f06693a228d9d3cec8c5ba56c8a8c", [] ], + "2d.layer.reset-expected.html": [ + "93131dca9cfee5953e4a06cee99ec1429d8f062d", + [] + ], "2d.layer.restore-style-expected.html": [ "1d0ac3558d1d4c15609c364a6e5678ed329fa272", [] @@ -422661,6 +423264,10 @@ "2d.layer.unclosed-expected.html": [ "c41b253c95ba2b4f970b6ae59b58e444df14d866", [] + ], + "2d.layer.unclosed-nested-expected.html": [ + "5e90134a2505d39da1285122f2df86fe05c8f027", + [] ] }, "manual": { @@ -422687,6 +423294,48 @@ [] ] }, + "shadows": { + "2d.shadow.alpha.2.png": [ + "8764e89b371d41428f0ba45d9c0391e41b0dd8a2", + [] + ], + "2d.shadow.alpha.3.png": [ + "8764e89b371d41428f0ba45d9c0391e41b0dd8a2", + [] + ], + "2d.shadow.alpha.4.png": [ + "8764e89b371d41428f0ba45d9c0391e41b0dd8a2", + [] + ], + "2d.shadow.alpha.5.png": [ + "8764e89b371d41428f0ba45d9c0391e41b0dd8a2", + [] + ], + "2d.shadow.blur.high.png": [ + "743640b79f8810c193ae9ad86fdfaa76ee5f4943", + [] + ], + "2d.shadow.blur.low.png": [ + "99fb651c21bca0fe563843d987bdf0f0ff9a6db6", + [] + ], + "2d.shadow.canvas.alpha.png": [ + "8764e89b371d41428f0ba45d9c0391e41b0dd8a2", + [] + ], + "2d.shadow.gradient.alpha.png": [ + "8764e89b371d41428f0ba45d9c0391e41b0dd8a2", + [] + ], + "2d.shadow.image.alpha.png": [ + "8764e89b371d41428f0ba45d9c0391e41b0dd8a2", + [] + ], + "2d.shadow.pattern.alpha.png": [ + "8764e89b371d41428f0ba45d9c0391e41b0dd8a2", + [] + ] + }, "text": { "2d.text.draw.fill.basic.png": [ "70d7b046cb226cfcb2bfeebe3477d3b580d8270a", @@ -422753,10 +423402,6 @@ ] }, "tools": { - "PRESUBMIT.py": [ - "c7fb93ae6fd14e0006dda63ba5279524d6bad9b8", - [] - ], "gentest.py": [ "6574ff53238375b9018a8c307572efadf9259fd9", [] @@ -422770,7 +423415,7 @@ [] ], "gentestutilsunion.py": [ - "0542e32571a0524090ab5800dbb258cb9acc2450", + "cf141f2f07475edb4912b6846aa67468648a6a74", [] ], "name2dir-canvas.yaml": [ @@ -422822,53 +423467,29 @@ "yaml": { "element": { "drawing-text-to-the-canvas.yaml": [ - "3443ad35b3cdccffb0dcb383b946dcd81a0521d5", - [] - ], - "fill-and-stroke-styles.yaml": [ - "9d35dde661c724d6f166d7bd5db7a423295b546d", + "55597b31594dedf449feba0761f298f83801eaf8", [] ], "meta.yaml": [ "e8c425042668653f6908e6cf25ad6bf658aeb2f5", [] ], - "shadows.yaml": [ - "7a7c115a7c44d450fc60d2e5bbb544cc5c75d225", - [] - ], "text-styles.yaml": [ - "407e34621091a6324cbd1ace8510738adaaec967", + "0eba21943c08be58e03b0f0930ca92566dc336e1", [] ], "the-canvas-element.yaml": [ "d6d8cd801b410909fdee32b7e0c9f903fda469de", [] - ], - "the-canvas-state.yaml": [ - "045208615436efec1596a2f14cb62f02fa8e470a", - [] ] }, "offscreen": { - "fill-and-stroke-styles.yaml": [ - "5f794d61e6f31080804238818c58d14925de9ebc", - [] - ], "meta.yaml": [ "bd761937f40e8796f6192e09741c1c2bccf3df2d", [] ], - "shadows.yaml": [ - "ec1bdd101e7067d3a3fdf101b84f55a2c4d47813", - [] - ], "text.yaml": [ - "784a099aca09747325bbc800a0976031a4324d08", - [] - ], - "the-canvas-state.yaml": [ - "afb4cf956c6d564fc29b85ec7354361a123c9f5d", + "0907076cc8a5eb0da6adaabfb531c027325735c6", [] ], "the-offscreen-canvas.yaml": [ @@ -422898,16 +423519,20 @@ "408e932abe86b31ce3e8d88672e04abed12b74b2", [] ], + "fill-and-stroke-styles.yaml": [ + "e30eb010088699f6b15347c1722f3490035ae369", + [] + ], "filters.yaml": [ "a5c2b9864b6becd54f06d0639ddc96d46bfca263", [] ], "layers.yaml": [ - "8ca05bec84d72f48fdde9aa90e0d6ad1efceccd1", + "63edf62e3b83b552d3a9cd0c04b5a29bec544c86", [] ], "line-styles.yaml": [ - "604f4f3659a40b89b05f1bce3968f2580dce3c6f", + "47bf3af97ec75a2933384862c028106bce2b8e2c", [] ], "path-objects.yaml": [ @@ -422926,6 +423551,14 @@ "dd088aa396f47e70a6e66b0b9c7d8ffca0fa0e1e", [] ], + "shadows.yaml": [ + "366ac0b6072dfaa9de58abbda84525d9fe1806d1", + [] + ], + "the-canvas-state.yaml": [ + "045208615436efec1596a2f14cb62f02fa8e470a", + [] + ], "transformations.yaml": [ "0d2265be7aa0c94ccbddc41f4051dbf082bfc186", [] @@ -422983,6 +423616,10 @@ "iframeTest.js": [ "501a864d4677e1c7e5ddc0b4c4868ac8712e4723", [] + ], + "redirect_none_to_credentialless.py": [ + "7f0c35e93e69d7fe4c78a05d813b7f614e3e885d", + [] ] }, "video.https.window.js.headers": [ @@ -423598,7 +424235,7 @@ [] ], "resource-popup.html": [ - "2957e35f59b6aef225cf46bcdd4430412de9e2a2", + "ee08bcb4962aed59f6221b9d97369e764a33ea05", [] ], "universal-worker.js": [ @@ -428483,7 +429120,7 @@ [] ], "video-controls-vertical-writing-mode-ref.html": [ - "9a2d1d064139b4f58dc06c1d588c50b89a97aaec", + "e65bf6cbe808b4ea2674f3540a5d3845966a5dce", [] ] }, @@ -429033,6 +429670,10 @@ "delayed-broken-video.py": [ "4eae3261f765cc36ae60f99e25a6c52dbed62d86", [] + ], + "media-min-width.html": [ + "6d429d70fd20206208bfac2749fcd4aea72a1a59", + [] ] } }, @@ -434316,6 +434957,14 @@ ] } }, + "https-upgrades": { + "resources": { + "pass.html": [ + "5c7ca343e9b2bbe4774ed127d905c8c77b09e47f", + [] + ] + } + }, "idle-detection": { "META.yml": [ "adbdc7bd93d71cee1fb318dfd36a8bd5cd305892", @@ -441132,6 +441781,26 @@ } } }, + "private-aggregation": { + "resources": { + "private-aggregation-helper-module.js": [ + "f5a8533d0f384391785f8f1af0fe29782296f081", + [] + ], + "reports.py": [ + "fc6260c784d5b2eae33c993acd106c46c75e50c4", + [] + ], + "util.js": [ + "7b3a2c54f880c4dcdd2f460e39a25281b11587c0", + [] + ] + }, + "shared-storage-permissions-policy-none.https.html.headers": [ + "878191015163abd568cff4664c0b7dbe0b2239a6", + [] + ] + }, "proximity": { "META.yml": [ "87450781306a3941fe13d756a3761fdecd829016", @@ -443421,7 +444090,7 @@ [] ], "webxr-test.js": [ - "ab2c6faa0ee84ba95f5969de4f57d4c607d8c638", + "c5eb1bd14b881d9d6149d6fd0e9b627a5d9b4bee", [] ], "webxr-test.js.headers": [ @@ -450182,7 +450851,7 @@ [] ], "pytest.ini": [ - "bf58dc409aa28b42d1dccc866ad14a49e8c6875c", + "3347ec6dbdbcbb20ab02875db0c086517abe1cda", [] ], "requirements_flake8.txt": [ @@ -450194,7 +450863,7 @@ [] ], "requirements_pytest.txt": [ - "6dc497515bc452414df067fef55c72ac8f8b76fd", + "2ca04f876e4c0457a21c75461be95c7e10aadbbb", [] ], "requirements_tests.txt": [ @@ -450265,7 +450934,7 @@ [] ], "serve.py": [ - "e5aa5f0d89683cec6c952841869418b00f24c2ec", + "1725399facab11c621633c606ff50f8e2ce4e6a4", [] ], "test_functional.py": [ @@ -458140,11 +458809,11 @@ [] ], "script.py": [ - "d994c6388d8c2405cc52c5f81d60b516f701cf46", + "99b26927403515de31d822336ee4d5ed062f7cd6", [] ], "session.py": [ - "7c1fef30ae131993ab8adc0205fba11bbd6dea86", + "cdcef11b94f24cfa24232812126b28a12ed4c13a", [] ] }, @@ -458257,7 +458926,7 @@ [] ], "run.py": [ - "58e0004f9be4b21e8ada52f91a0cb45459b910c0", + "15be2af2d3d7a969910deb3a83365c733354dd1e", [] ], "testfiles.py": [ @@ -458730,7 +459399,7 @@ [] ], "print_pdf_runner.html": [ - "3ce18d4dd823e042e986ce94f2f858977a0ddb19", + "fbe09bab989d31e635c04b9f944b4498b8fe31cc", [] ], "products.py": [ @@ -458774,7 +459443,7 @@ [] ], "testloader.py": [ - "950273c38941ca95ae3ab068f7573983d4da76f6", + "8cd24f2f5aecf75cb9f05e41a6fb48c45422a5ff", [] ], "testrunner.py": [ @@ -461906,17 +462575,17 @@ ], "bidi": { "__init__.py": [ - "625cd3a6304c4d7d9118aa8071b66aaa970d9182", + "4e039d2a69ced81f11ec04615ca68d4a13329746", [] ], "browsing_context": { "__init__.py": [ - "a887aeb8a459dfd7f6e8257f4bf633179628b432", + "e076885859e7e57dabe568c1e53fca05b9499f68", [] ], "capture_screenshot": { "__init__.py": [ - "066c34f3f28ae7e74e083748a5138bd74a03c540", + "924f0521dd73dbffdd0676f57e660bb1b91d9e40", [] ] }, @@ -462003,6 +462672,12 @@ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", [] ] + }, + "reload": { + "__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + [] + ] } }, "errors": { @@ -462268,7 +462943,7 @@ [] ], "test_click_wdspec.html": [ - "a9451ec82bec97654896f697704218bb6068d14e", + "7c6eb6e6e2ea5efa26f9c2e3feffd26d45fb83fe", [] ] } @@ -462644,11 +463319,11 @@ ], "support": { "__init__.py": [ - "a7b33cc15f4652b9fec16cf202d0801e053beb55", + "0535edd2142e39aad37cc1a0ca58dca1fa01164a", [] ], "asserts.py": [ - "f5812bc8932360a68fa40237ca8a4e1b8ef2d205", + "04bd1993316be1bb449c81ccb22f0f623e38d215", [] ], "defaults.py": [ @@ -462656,19 +463331,19 @@ [] ], "fixtures.py": [ - "eca9fda4bef1964515ac89bbc6c1efcf4000c50d", + "ba166ae8da87de03ec68c9c112f67c0d2a6036f3", [] ], "fixtures_bidi.py": [ - "39ed3a5bbfd8f77bb71c9566ba7b5880af81689b", + "6e53bf7c24390d4bf24b019ddd6a9cbbb209e699", [] ], "fixtures_http.py": [ - "03be83a20e125257ed3d1b423fbc991de40660f6", + "1533dca2bd986e541b41f85e6e9dc07a38a06e18", [] ], "helpers.py": [ - "45f4f4d23922dc3bf28d4d3117208f70ef90ca7f", + "c0d0cb11dc4d5156b7fcb16f418acd6da8b4682a", [] ], "html": { @@ -462689,7 +463364,7 @@ [] ], "render.html": [ - "d0408480dafbbeb34856553f176034489c51907a", + "6f1fadb64bee121740443089620ba68718d98855", [] ], "subframe.html": [ @@ -462697,15 +463372,15 @@ [] ], "test_actions.html": [ - "0253add960792f79bef8a8747dac26661c4a2f86", + "40e4b5aa37c2f4ebd14d10a476b44ff7dbd6799e", [] ], "test_actions_pointer.html": [ - "f1fd9b2da3f860a4c2afcd4176bfc2aee067d2f8", + "dd169f0c5bcc292a554a72035a49ae6cec25816a", [] ], "test_actions_scroll.html": [ - "b6e281e581816f7f42b5e92387adc3047fa4f891", + "cc9278954a0e0bb278f940b2f6e091e0c90a086b", [] ] }, @@ -462715,7 +463390,7 @@ [] ], "authentication.py": [ - "62067dd1667cd5535d4f90d35ae21474d4481666", + "db247af610a9b754920ee782e80330f15f26288c", [] ], "cached.py": [ @@ -462723,7 +463398,7 @@ [] ], "headers.py": [ - "ddae62dc6afabfaa9ceca93f5215d4afc5d002ed", + "71c4901c44522847ec93d5fc5b57c4720fadbce9", [] ], "must-revalidate.py": [ @@ -462740,27 +463415,19 @@ ] }, "http_request.py": [ - "242dc9c9188708eaceccd32c9379e5c9d14fbbd4", + "a936d7f1f0408133227245d86e8bc713e8c64675", [] ], "image.py": [ - "055ebe71fbc568741432a9c19344996286876a2a", + "9597b05a22fe29c9bd107d5ff7e1e9a41de802a0", [] ], "inline.py": [ - "494ca74f92653d8d898e5922d0b0f1add0c4ab04", + "a0a8d3881ef5f48644c4ef1d6398dbad77dcc11f", [] ], "keys.py": [ - "e835a6a596f8d52d691afff812c9dacc5012b9e0", - [] - ], - "merge_dictionaries.py": [ - "72f1cab352dec4f333aa9f5498d6115276a3f836", - [] - ], - "pdf.py": [ - "573ec1af4b284fdb015931c8c0a4436ae2af7e79", + "c353644dddfde4178829b0253c2c5064d7bd3fd5", [] ], "screenshot.py": [ @@ -463542,6 +464209,10 @@ "9c2e4709fdd48e82b52ae14b65a43be2478ea9e9", [] ], + "receive-many-with-backpressure_wsh.py": [ + "8e35beebdf5027fdcb034eda27ebfb2a4c2dbd4c", + [] + ], "referrer_wsh.py": [ "9df652dc3cbf12f6364462839e340848dec8e08f", [] @@ -465956,18 +466627,18 @@ [] ] }, - "window-placement": { + "window-management": { "META.yml": [ - "2c6d60f4e71a754754425c0b633e68429ccbca71", + "74f926f230fb9f7e0026dd083d3f3e9ce5ac6093", [] ], "README.md": [ - "d9e324c9118f59e1a39fb5f30864230d7e50aaf3", + "e96a8a00b8b94c92755b96dc203ade889a83bcb9", [] ], "resources": { "helpers.js": [ - "92442f913324fd46788297e6c9171ef2f0461db9", + "3c869f168e134cd844d1ad66585474edbdcff5ce", [] ] } @@ -469145,7 +469816,7 @@ ] ], "database-names-by-origin.html": [ - "374b05c8fd292185403711a34515aa5566f34c54", + "5833b7e9ba9ba4f40b24a36d34a86983ce1a9b73", [ null, { @@ -481537,7 +482208,7 @@ }, "accname": { "basic.html": [ - "097123569dbd826e8a4c8a872f221a6b6657831e", + "d84f4dc3b95a062b61e1cc4bd2554d744545f82d", [ null, { @@ -493561,6 +494232,13 @@ {} ] ], + "default-src-sri_hash.sub.html": [ + "87fce5961fd1854303377ee939b21b6275b312cf", + [ + null, + {} + ] + ], "default-src-strict_dynamic_and_unsafe_inline.html": [ "bf45820ade2d75e4405ddc1780780345dcf7c997", [ @@ -493742,35 +494420,35 @@ }, "font-src": { "font-match-allowed.sub.html": [ - "ebba1e0096ca077dea9de0d92756d5ab56d6fb93", + "54e04d4f7af9a72fb0c3ab111767510cb5cd950c", [ null, {} ] ], "font-mismatch-blocked.sub.html": [ - "b164cf0f172c97540d96a25fad239b67ccaaff16", + "fb491cb58d20e46cc3e5c6f0dadde4b2546351d6", [ null, {} ] ], "font-none-blocked.sub.html": [ - "eae1b4986d9e58d5eeae595398a6ef5169ed5d47", + "b8dbb7530aa148a161e7b74fa7af0849b42c39bf", [ null, {} ] ], "font-self-allowed.html": [ - "b8d46e5c9877d3845270bf1e0a686dbd8735aecc", + "aeca1285e4f6c7975818153c51e67b9c070e2059", [ null, {} ] ], "font-stylesheet-font-blocked.sub.html": [ - "3b47d0b2e22f72bb39cce8f3f98f21b97d4f7004", + "4b34bc5746d438362aa2ae11c7714a91993d51b5", [ null, {} @@ -496743,35 +497421,35 @@ ] ], "img-src-4_1.sub.html": [ - "9e4e345a1670bf951c4736978ad9e66da6496bed", + "a0ddceb64c6eb03f0822c94545f08aaebf303e92", [ null, {} ] ], "img-src-full-host-wildcard-blocked.sub.html": [ - "23c33d56553817384b0ab6928eb8939459562c48", + "e7f3472072efe2a00db707f13f22f191cbb3cab5", [ null, {} ] ], "img-src-host-partial-wildcard-allowed.sub.html": [ - "d2d36d1341c526d9ed8f83e92a376374563c9aa5", + "f80ff2d4dd93da01f0fd8a643c2b8f4af64cbe9b", [ null, {} ] ], "img-src-none-blocks.html": [ - "9bc0326ef8a2d8ae8112de50e16f013f6a475e21", + "5a05970f6006c2977db2f4e828d79c5d6369e114", [ null, {} ] ], "img-src-port-wildcard-allowed.sub.html": [ - "215c10089bb547645fe304f6d3345016ea2b99d5", + "993be396ae17057e822c473f2a9fc7064406b5f7", [ null, {} @@ -496785,7 +497463,7 @@ ] ], "img-src-wildcard-allowed.html": [ - "72326ee6fc615ee15219c64b5f6a0a5d1bbe81c1", + "050a4d14100bb1ef719d6700bfbd37a97424af59", [ null, {} @@ -497389,7 +498067,7 @@ }, "navigation": { "javascript-url-navigation-inherits-csp.html": [ - "21c4fb33ce2d66db750d92a892e3871bd5d9b576", + "39f4747d19191d01a17bfd0da3c3cb6ca7d783d4", [ null, {} @@ -497697,7 +498375,7 @@ ] ], "report-uri-from-child-frame.html": [ - "1be496194b637b74efdfc6c3dcc27dd1e6dd896d", + "2040a34a8f71502c30b099834d5e511d154e72ae", [ null, {} @@ -498129,7 +498807,7 @@ ] ], "script-src-sri_hash.sub.html": [ - "b59206824dc8b3849a3324d943af1867c536c3b2", + "9216e2b0d4971fc46d0010e8dfa7375845187a8d", [ null, {} @@ -501719,6 +502397,15 @@ {} ] ], + "fedcm-context.https.html": [ + "7675866272116b72d4ce41c286d2c178847a5a4e", + [ + null, + { + "testdriver": true + } + ] + ], "fedcm-cross-origin-policy.https.html": [ "b2a68b00c8e47a00dbc71534504dc89b62e1448f", [ @@ -501756,84 +502443,84 @@ ], "fedcm-multi-idp": { "abort-multiple-gets-through-first-idp.https.html": [ - "eb9f7da7b26200a936b4d6ce304466bb4c1128e4", + "ed7c1300bd1b95cd3f7d233e7a0ee638829f2990", [ null, {} ] ], "abort-multiple-gets-through-second-idp.https.html": [ - "7e7ec2ce3d18b193183c2444b708c9d0927f1d2d", + "dfe8969932b8a88ba9f52284c99a0fb1e4628a71", [ null, {} ] ], "get-before-and-after-onload.https.html": [ - "fa9ec7b52fca1faf6cdd29ce6deef31669417f7b", + "dc332870abc729eb10069ccae02012278c178abe", [ null, {} ] ], "get-before-and-during-onload.https.html": [ - "93ee2075fe54128d55c8d69262134bad36840505", + "6a61891a3027c80d4ee6c360ad5b5f924b70f3ef", [ null, {} ] ], "get-before-onload-and-during-dom-content-loaded.https.html": [ - "edc293daff8806efea54d86425d29828fdbdfd87", + "65aeb72dcf16f1e14f5720460160f12edb559b7c", [ null, {} ] ], "multiple-gets-after-abort.https.html": [ - "b7b03e4a147d30e5d55ae8d757c0f666374bb7e7", + "12f88d3068e5847117242f511230d05e63c0b9fe", [ null, {} ] ], "multiple-gets-after-onload.https.html": [ - "1a806a2049d39990039b10e690a8505ad1e5856b", + "bf8d717381b5c9d1c2864537d67f37ef7d997847", [ null, {} ] ], "multiple-gets-before-onload.https.html": [ - "69a70ce47de9dbe946d0451cda0f0a68aa45cbd8", + "e754b86ec65c4b4ea41e3ada4f8e3f6ea51f1f83", [ null, {} ] ], "multiple-gets-during-onload.https.html": [ - "e98b63ff339f5948188d7422a80e2ba70cd886b1", + "252732c9643374b42bc688d65e2ac5d14a5a7de4", [ null, {} ] ], "single-get-after-onload.https.html": [ - "a34ff84aabdf3e4297af4a126f670d6587fc9b5f", + "a023e3c57fd9fd3319b5bf4681b8f80d880e30e1", [ null, {} ] ], "single-get-before-onload.https.html": [ - "91195fc5a75f626796b73dbaf1d5dea386519c26", + "be94d17d8f2b69a33e8f68ae455764f947a044c8", [ null, {} ] ], "single-get-during-onload.https.html": [ - "17939d2d9353fa255c746729f14a37c7383d1814", + "8383c3b9ff848a7395983ae8a45fc4bc9d7c42ff", [ null, {} @@ -503486,6 +504173,20 @@ {} ] ], + "anchor-position-auto-002.html": [ + "1c86fe2e4678f5fc7600d16f6580b24b60117330", + [ + null, + {} + ] + ], + "anchor-position-auto-003.html": [ + "33ef58b2af4692f071596aa005f4e72954d6c04f", + [ + null, + {} + ] + ], "anchor-position-borders-001.html": [ "1e2ecbc909cee0f9f301481c12ab6a8fc9b4ff0c", [ @@ -504281,7 +504982,7 @@ ] ], "inheritance.html": [ - "dd9d6469336cbc6bbf4fa3eba84e6ba05afad6de", + "6e7697b9d81db6888077318389e1d70964241b3c", [ null, {} @@ -504331,7 +505032,7 @@ ] ], "animation-computed.html": [ - "9152c49ee0cfedaff778f95765986392ea643f15", + "f8d34b889ba19dfc7d9fd4d644da499b979d4166", [ null, {} @@ -504436,7 +505137,7 @@ ] ], "animation-duration-computed.html": [ - "ef2ef69059fa9f92910b7a716faf499a16a757e7", + "a8bc1600f80489414d3068ec06dc97daeedb8c69", [ null, {} @@ -504597,7 +505298,7 @@ ] ], "animation-shorthand.html": [ - "8b482ff900f0d0a31189add815b08a7c6ca406b1", + "0856ab24a04634c9449b0b43decc19f3ac63de60", [ null, {} @@ -505123,7 +505824,7 @@ ] ], "background-position-valid.html": [ - "1c05517c62aeee4f2d4837a3a9cf7b8880bd6e19", + "dac7b1012a009ed9def788bc06951b86de3d86e3", [ null, {} @@ -505221,7 +505922,7 @@ ] ], "background-valid.html": [ - "cb086dd3ec87d902d47f209688f0cee21921ab97", + "e011c2238d2df73452dd011a8114415556ea790a", [ null, {} @@ -506401,7 +507102,7 @@ ] ], "all-prop-revert-layer.html": [ - "ac665a9bedbfdb873f361a1bae2cb46ed4510fd0", + "fa29b5106a7bab8bb8f7f5ce5ccc864fbeda312d", [ null, {} @@ -506711,7 +507412,7 @@ ] ], "scope-deep.html": [ - "e7dd96c5ac77c3d432a010332e43319f58471c53", + "0e88778202fc847e447e8f3838440b2c9babbefc", [ null, {} @@ -508339,6 +509040,13 @@ {} ] ], + "content-visibility-with-popover-top-layer-006.html": [ + "fbe8b9fbb777b2fdd632ddc0f17e69fbfed06bd7", + [ + null, + {} + ] + ], "content-visibility-with-top-layer-006.html": [ "36a79532a9a73bf13a675ac2b81537e5512b158f", [ @@ -515829,6 +516537,41 @@ null, {} ] + ], + "subgrid-baseline-005.html": [ + "455439f79808db13751b7960982f0e5285d8daa2", + [ + null, + {} + ] + ], + "subgrid-baseline-006.html": [ + "23d2b3b60622619c5fee11c507c5d1ca71134b56", + [ + null, + {} + ] + ], + "subgrid-baseline-007.html": [ + "f8477bea50ce2317f2c321f8a60d9d86da070a9a", + [ + null, + {} + ] + ], + "subgrid-baseline-008.html": [ + "1ef23599f9571a7b9ba6f2ab6565f5ded1194759", + [ + null, + {} + ] + ], + "subgrid-baseline-009.html": [ + "b7bf46d8745fada176e5d9c69d2d2ea063be07bd", + [ + null, + {} + ] ] }, "table-grid-item-005.html": [ @@ -516015,7 +516758,7 @@ ] ], "image-set-parsing.html": [ - "053ab85422f0ee55f671492cd8e408b84cc7192b", + "801cb828c500a574b9cb25b801ad42dbaaf0898b", [ null, {} @@ -517499,7 +518242,7 @@ ] ], "mask-position-valid.html": [ - "f2d2c4a8d14cab6739b3bf6e5559ce1a1ceb6c28", + "c70e18c47a3d369b79acb0e51410a87c2fae8112", [ null, {} @@ -517527,7 +518270,7 @@ ] ], "mask-valid.sub.html": [ - "4b2ebfb7c782469e4239ff3358d71c208badb04d", + "e0646444d48dd3d92f85d2f50323e984dbe9877e", [ null, {} @@ -520404,7 +521147,7 @@ ] ], "keyframes-004.html": [ - "67924fb01cdab74e34cf66243429775bf701c665", + "2dee8c2e64083d517c3a5c7c13a543c09c32a60e", [ null, {} @@ -520425,7 +521168,7 @@ ] ], "shadow-cascade-order-001.html": [ - "c51696e483374e3d7346f105a7e8b85d8fce7606", + "59b71b0ee105bba69d68d8535832538f01a39e07", [ null, {} @@ -521522,7 +522265,7 @@ ] ], "scroll-start-fieldset.html": [ - "da48c6ce25ecc7d570959f70a0735181200413fc", + "9a0190506e41ccb45f053df82f9963e09f7d7fcd", [ null, {} @@ -521618,6 +522361,41 @@ {} ] ], + "scrollbar-color-001.html": [ + "c056990934466f1804ca096ec7b8f3f5b8162646", + [ + null, + {} + ] + ], + "scrollbar-color-002.html": [ + "70bfa5586d98abe9aaa882e868d221f3812eda5b", + [ + null, + {} + ] + ], + "scrollbar-color-003.html": [ + "3fb42bedeafc4e0a98760d686935c5b9efd086fb", + [ + null, + {} + ] + ], + "scrollbar-color-004.html": [ + "5932cc5d4e1be0b9fb1d6f390e0e3bd2c27d51a4", + [ + null, + {} + ] + ], + "scrollbar-color-005.html": [ + "52d0027fba6e942fd1452402967e9fd09b5b8211", + [ + null, + {} + ] + ], "scrollbar-color-parsing.html": [ "17b649d54c8f12cb490bdd732770c95cec02273d", [ @@ -521688,6 +522466,55 @@ {} ] ], + "scrollbar-width-010.html": [ + "ea117030673bd022cb4e2d73795bb7586c90571c", + [ + null, + {} + ] + ], + "scrollbar-width-011.html": [ + "a5f60dc28b0cf9d09953b714e56bab8cbf7f8b67", + [ + null, + {} + ] + ], + "scrollbar-width-012.html": [ + "a685d6c05b8f941d3962ae349d350846e0e4f5ae", + [ + null, + {} + ] + ], + "scrollbar-width-013.html": [ + "f6460a4797a6cb377dd7df03340d734813604a25", + [ + null, + {} + ] + ], + "scrollbar-width-014.html": [ + "f737bc366023e54c766e6b9e2281f52defb309a2", + [ + null, + {} + ] + ], + "scrollbar-width-015.html": [ + "88a6af27bad259aceb69c3e1667097c70adece5b", + [ + null, + {} + ] + ], + "scrollbar-width-016.html": [ + "7d64131743f18ab744246e034de8d540688178a7", + [ + null, + {} + ] + ], "scrollbar-width-keywords.html": [ "94ccd6ef6d550c83c97ba9525135cc309cc35842", [ @@ -529419,7 +530246,7 @@ ] ], "animation-duration.html": [ - "fa78ece016dec262d5ab5d3272ac0ed9f4addeab", + "edff11c8a2ce5c6555069aa0e87a7d9d1a3705b7", [ null, {} @@ -530987,7 +531814,7 @@ ] ], "white-space.html": [ - "f050da2839e5341093b14247e4d44ed79c6c742f", + "dfb6e08718372b9e501b8b1e008f626b7614e260", [ null, {} @@ -533719,6 +534546,20 @@ {} ] ], + "HTMLLinkElement-load-event.html": [ + "7062f1545061f23c88d38f9f3195dfbcaa133538", + [ + null, + {} + ] + ], + "HTMLStyleElement-load-event.html": [ + "8d4062ed0d4296b4da113c9eea8ddc0c079b6dad", + [ + null, + {} + ] + ], "MediaList.html": [ "8308ee89e4bacea93d438bb85a2481c590a8dfb8", [ @@ -534471,7 +535312,7 @@ ] ], "shorthand-values.html": [ - "b64f7e9a12f87812cf3e77d218f8a627c87b27bb", + "f831cba2ca5f9aae6a4d610eeba3bfd42ab4d056", [ null, {} @@ -536234,7 +537075,7 @@ ] ], "test_media_queries.html": [ - "20fca4affd24e5a3d1335b9d39420f653c7cd9fb", + "f9490bf051a111b4bc88f603d9f23e18e968c769", [ null, {} @@ -536328,7 +537169,7 @@ ] ], "offset-path-interpolation-006.html": [ - "5b95501909ceca7d55ebcab03654d942edb43756", + "27bdd3d0c0e70ee334d548343241562c303df080", [ null, {} @@ -536393,7 +537234,7 @@ ] ], "offset-anchor-parsing-valid.html": [ - "6cb4d44117fa6361fc87efdee22e79bc6df749b5", + "97a3c54131f1af3b71c635ee5ff37be8a3502ff0", [ null, {} @@ -536435,21 +537276,21 @@ ] ], "offset-path-computed.html": [ - "7b5a8c16438612737af2a5f4fbc0755e7aa7a291", + "5bd857f62d2fffa40a630518e1fbd371e00c2c64", [ null, {} ] ], "offset-path-parsing-invalid.html": [ - "28b45db8469f2b953df0381e9877bfc03f8b5b71", + "0c8f3ea04cd48c50052903b64dda3262d60fea6f", [ null, {} ] ], "offset-path-parsing-valid.html": [ - "8a22b9420eed7831dcf564b64db8f9ebe36b453e", + "be74ed08a40815864c7abb7a72d16c87aa9d9902", [ null, {} @@ -536470,7 +537311,7 @@ ] ], "offset-position-parsing-valid.html": [ - "bc0d19a460f4f22f9a061ae6932f31637c7231d6", + "032a5b42b46d5bae228e6a112c50623d76dbc1b1", [ null, {} @@ -537864,7 +538705,7 @@ ] ], "modal-pseudo-class.html": [ - "079f4063d45c3af9d0a8b4e4993517bfcdec6f6a", + "f11de65eff677b4ed7fde36f6536f6518e461ab6", [ null, { @@ -538609,7 +539450,7 @@ ] ], "HTMLElement.html": [ - "0a1d40199e633e9677da09f34e42200965b5241c", + "b89f2409121827df1084b5d027c7ac75f71b7d56", [ null, {} @@ -539251,7 +540092,7 @@ }, "document-picture-in-picture": { "beforeunload-is-disabled.https.html": [ - "3dd2b8a6d19fd55d7b2a2d91a9d7557ec8b0bfcd", + "35e3e2c5470184253dd071602909ad3699024061", [ null, { @@ -542871,7 +543712,7 @@ }, "parts": { "basic-dom-part-objects.tentative.html": [ - "175f5d555b9b1ecd8e2d503f0e8e7eb22fdf3b7b", + "6e52576b0b46570db7a37e4e59e0e9a3cfe9aa21", [ null, {} @@ -543709,6 +544550,15 @@ ] }, "editing": { + "edit-context": { + "edit-context-property.tentative.html": [ + "b6f46dc517bca88611c2d6fd18219fec75e65832", + [ + null, + {} + ] + ] + }, "event.html": [ "16d640be2183722ca4f260452ed80b8bb09d2dd2", [ @@ -547375,7 +548225,7 @@ ] ], "background-image-multiple-elements.html": [ - "11f8c05f9668bdd1f037e28f8df6773c8f3db951", + "d4998b47ff1ba841035d7b8c7e4ef2b71dce9384", [ null, {} @@ -547517,7 +548367,7 @@ ] ], "image-rect-iframe.html": [ - "00986366e612b4285d2dd6d901638053bd8eaef5", + "3342f5688e784cc09f563b4c34b88b601f615e1a", [ null, {} @@ -547636,7 +548486,7 @@ ] ], "observe-video-poster.html": [ - "5607733529671882bfde5be4c037b7a1614a84a5", + "ba1ddc7151ce18ce2c3fc4ce70ddfc4d1cc3e562", [ null, {} @@ -586976,14 +587826,14 @@ ] ], "2d.text.drawing.style.fontKerning.with.uppercase.html": [ - "fd91a09d732af4c0b1b0ede99e8bd5459532f385", + "991f35af0dd841cc3c3671330a6454dbcb7ffe58", [ null, {} ] ], "2d.text.drawing.style.fontVariant.settings.html": [ - "cf0a32305d0dbce3e0a7d408ca64083b7b7e0f27", + "cff5ad183a084adddc905ef76ff58e7a3ad6a5f9", [ null, {} @@ -588961,6 +589811,106 @@ ] ] }, + "layers": { + "2d.layer.invalid-calls.beginLayer-reset-endLayer.html": [ + "74e05e1e48e7901aa0e2383eb66af0a7e14def3e", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.beginLayer-restore.html": [ + "1979cb6c73a1097d4351ca80331d68f9ce853cfd", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.beginLayer-save-endLayer.html": [ + "c635ac75b99d8de628fa5d4fad4e04e286b99479", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.endLayer.html": [ + "c39a352d65fa5f5d41d550f199a8d859aec6cdb8", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.save-beginLayer-restore.html": [ + "e2d4d5658904ccf8650309b7e9c27a57f1512cf7", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.save-endLayer.html": [ + "f4308e1191dddebd530f12b759b72c84c27ebabf", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.beginLayer-endLayer.html": [ + "609cb19a7d861b23ac1453ce7f0b6f1693827d2d", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.beginLayer-save.html": [ + "965804029605fe048a81f9431b35db3e5921253e", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.beginLayer.html": [ + "055668333179fc7a8908bd5437d123fdccbf4d62", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.restore.html": [ + "b7a370306fd418d552b4b538a953c2cecabb4751", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.save-beginLayer.html": [ + "816398c7fc6c10d97996159e0b17f8ba42da620d", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.save.html": [ + "d8df8cedcec37ba4505639141dbbff8b96574176", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.save_reset_restore.html": [ + "4c733263a636cdcad67c872744a9cbc13bc9883c", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.save_restore.html": [ + "27ae70278e8d68e28038d278a76f0f4220cf158e", + [ + null, + {} + ] + ] + }, "line-styles": { "2d.line.cap.butt.html": [ "f8c7cab1f2ecd2b0020291ee836b1bd4019c2bc3", @@ -589025,6 +589975,13 @@ {} ] ], + "2d.line.fill.noop.html": [ + "6dd8804ab033dafb3ce372240400d1171de84ee4", + [ + null, + {} + ] + ], "2d.line.invalid.strokestyle.html": [ "89a234ecc3831b641a81b2c65b89ece857a5c018", [ @@ -591565,7 +592522,7 @@ ] ], "2d.shadow.canvas.alpha.html": [ - "222199e6463982df871004f74b710fb6e67abb1b", + "18818fa726593489977d56fecd62edd2ab19290b", [ null, {} @@ -591698,42 +592655,42 @@ ] ], "2d.shadow.image.alpha.html": [ - "8d9022d61da7980dac5201f248af355bc2e63797", + "f00e1752dfce41d340507da48ab0272dde9aea85", [ null, {} ] ], "2d.shadow.image.basic.html": [ - "351e75152214af6b352529b616cbf9f68b9f6093", + "d106e223db791cbac2ff0e9c994e88956a6a08c8", [ null, {} ] ], "2d.shadow.image.scale.html": [ - "cbec7ccce16518c940732ee5b4f551ee203e6552", + "7e07fff3783c3e32cd23729643d3c3b24edf8806", [ null, {} ] ], "2d.shadow.image.section.html": [ - "472559b736dc09effd4d9580a13e43b0e9ae0a45", + "a1b3e7032fb72bb25d07d1871d163f4645345e33", [ null, {} ] ], "2d.shadow.image.transparent.1.html": [ - "768e961df0e69c5a34a0274cf5892d1788ea819e", + "74d8b22951024420ae6b5945fd2a88375c09166e", [ null, {} ] ], "2d.shadow.image.transparent.2.html": [ - "a445b7aebe83ccd9ac283cac5e94a503740527b5", + "1a52a52c3fe16f4cb3825a18cad7f1018fcf4200", [ null, {} @@ -591775,28 +592732,28 @@ ] ], "2d.shadow.pattern.alpha.html": [ - "8e602d6c2b273823ca51bad47fbfbd3afd7bff61", + "10b5414b1234d0eca2b2b20f8cf9cefb4cfd983a", [ null, {} ] ], "2d.shadow.pattern.basic.html": [ - "c776d6bc3bcbc4ac2b6c761bb1314456d088b62f", + "47d2149a57e57b7c7203b00d855e0c68d2567d3a", [ null, {} ] ], "2d.shadow.pattern.transparent.1.html": [ - "c3dca30138b7378941a314072b4b6890f5117a1a", + "c41dd8377871ff01ee988a74b871f932f9afcd9b", [ null, {} ] ], "2d.shadow.pattern.transparent.2.html": [ - "ecb82412be2ec42879012ec1a05b5423c4732528", + "ddaf21fe9088b4a4565520f420a23146fc5e0deb", [ null, {} @@ -591917,14 +592874,14 @@ ] ], "2d.text.draw.baseline.hanging.html": [ - "7b3a0a9373bc87de31ce263c5bd6d2fc482ef43b", + "3ad15f31501a0f47a3b95e5c1f8567fcf66a20d2", [ null, {} ] ], "2d.text.draw.baseline.ideographic.html": [ - "8da9aabb942a17ad8cd63534539be447f9f4d09e", + "8d402223a4f213b5ecfedf78f7b5d292305177cc", [ null, {} @@ -591945,28 +592902,28 @@ ] ], "2d.text.draw.space.collapse.end.html": [ - "15b802f1c48989df9e19a8c300c4363411e00552", + "ab49fcb4f600bf19cc1d3bb17b17afbefff6f556", [ null, {} ] ], "2d.text.draw.space.collapse.other.html": [ - "3454cfb6fbacd51a78c4c2c77da0a29aee22876c", + "30727c858e4479e76bfdfdd6f7435a09ef66d1a1", [ null, {} ] ], "2d.text.draw.space.collapse.space.html": [ - "20c5f70569daeb597a4aca5f52c591905530672c", + "23405071725a3bf7c6d0e535635bea3487d682f1", [ null, {} ] ], "2d.text.draw.space.collapse.start.html": [ - "c06efba5c856e0c6ecb8701dd0c961cf29675b37", + "cee64201eedf2f9112c84a0b99f479632ca631a8", [ null, {} @@ -591987,7 +592944,14 @@ ] ], "2d.text.font.parse.complex.html": [ - "7f11506b38231dfe647a9fb73225929ca17e4443", + "12e1d60e5684ace3713e16040fdca8c4186ba37f", + [ + null, + {} + ] + ], + "2d.text.font.parse.complex2.html": [ + "d85765fcd3a6fb622733b1b182029ef119ffb353", [ null, {} @@ -592043,7 +593007,7 @@ ] ], "2d.text.measure.width.space.html": [ - "b6f2ef50f761ae63c95b4fbf1a067f78669f8c7e", + "1cf93c032d43b8e6c9bafd46c231dc494e408b95", [ null, {} @@ -594732,6 +595696,13 @@ {} ] ], + "2d.fillStyle.CSSRGB.html": [ + "1670d642951f9d6da3aaa5b4c5f1fd76f478e61b", + [ + null, + {} + ] + ], "2d.fillStyle.default.html": [ "58075168e8aab857a262858ecf2a778ee11aeffa", [ @@ -596665,14 +597636,14 @@ ] ], "2d.gradient.interpolate.outside.html": [ - "0dda6c0c23573c886a7b37574662c2bfa36cfdec", + "02ca008518f9ed64e1d4cc048d9652b7b0d89d57", [ null, {} ] ], "2d.gradient.interpolate.outside.worker.js": [ - "66fc180e7e90de2e521e110c480ee23eeba667cd", + "d6c89616613bac3dd21b0f391e203af3846825e4", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.html", {} @@ -596735,70 +597706,98 @@ ] ], "2d.gradient.interpolate.zerosize.fill.html": [ - "71d5cb85dd6182d9c2b004aa96d499a32c28b09d", + "27579fc829bd7092b7b7178e0895fc982c7ba7ec", [ null, {} ] ], "2d.gradient.interpolate.zerosize.fill.worker.js": [ - "3b86cec3afc9c209fe7b8036410e8da576eab0e4", + "916b1cb9779367a0685f27dac28189a0c4caa0ff", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.html", {} ] ], "2d.gradient.interpolate.zerosize.fillRect.html": [ - "1b3851cd99ae02365c445a7eb1fef96be94b7e61", + "9cf2c7350fe9e4af33a634d5f9be05ed6c615cbb", [ null, {} ] ], "2d.gradient.interpolate.zerosize.fillRect.worker.js": [ - "f6ab1d9348761352ca2e4f91563bda7f611974fa", + "607ad85ae746597b714ef6771e6456478a1af554", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.html", {} ] ], + "2d.gradient.interpolate.zerosize.fillText.html": [ + "59f0964461983f00e1719a215b10711f569ca888", + [ + null, + {} + ] + ], + "2d.gradient.interpolate.zerosize.fillText.worker.js": [ + "417b564e6d9e8879c8f3bd242ba1813ff7cade89", + [ + "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.html", + {} + ] + ], "2d.gradient.interpolate.zerosize.stroke.html": [ - "3b66f6c12ad22df8253adf6cf416ca4ca8a889bb", + "562f46796c42f777a76b8d42201c30235dc8378e", [ null, {} ] ], "2d.gradient.interpolate.zerosize.stroke.worker.js": [ - "7e215017485a128f9fdeb4a2090653b17e42e2fb", + "b969be6f850110f27eb2d34c4b19dc5fb23c9a10", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.html", {} ] ], "2d.gradient.interpolate.zerosize.strokeRect.html": [ - "e7fd7e7858bf1093fe0fa257de17e25a88224723", + "de1e57bbcca0c083e6333fe99136b0e019c4a9ce", [ null, {} ] ], "2d.gradient.interpolate.zerosize.strokeRect.worker.js": [ - "d7344fb4e61254b16607165514e90138063b6027", + "b9884d4adf634c8db1e92bfe9da151a1325244e4", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.html", {} ] ], + "2d.gradient.interpolate.zerosize.strokeText.html": [ + "153ec102ac617416e0047202a275890bf7a6575d", + [ + null, + {} + ] + ], + "2d.gradient.interpolate.zerosize.strokeText.worker.js": [ + "f0d719262768203334d327287510e8e3c8361ca4", + [ + "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.html", + {} + ] + ], "2d.gradient.linear.nonfinite.html": [ - "bc10ecee537d17ab96ebfb3b68385916d5954619", + "6c8f8ec38a88bcd04b234e0059c6b15c14c9f31d", [ null, {} ] ], "2d.gradient.linear.nonfinite.worker.js": [ - "87f689186bba5ca3cc5e017027d57260537e5b6e", + "9fd4949d7db53ebcf6cc080393a1278bdb1fb22e", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.html", {} @@ -596861,28 +597860,28 @@ ] ], "2d.gradient.object.crosscanvas.html": [ - "7ea9d84a4c06cce2278559bdb49093f0273f59ec", + "6d229ea3d5a64a764653a3534df12008e0816602", [ null, {} ] ], "2d.gradient.object.crosscanvas.worker.js": [ - "f877d596ddffdc2a27acb897a5cf54dafad10d38", + "1afebdea1b0ef2a30fd3fb7ff62fc4ae2eed2515", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.html", {} ] ], "2d.gradient.object.invalidcolor.html": [ - "51160c586f2d846ee69762be787950ea29e12a9d", + "3db5afeeb544477a32d936e49923a01312e37d58", [ null, {} ] ], "2d.gradient.object.invalidcolor.worker.js": [ - "40e84ba42be39161a6fb8e0a4939e4e677fb175d", + "33b524fbed2a25e766119dc88c3db218a1f064d2", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.html", {} @@ -596902,6 +597901,34 @@ {} ] ], + "2d.gradient.object.return.html": [ + "779b941d20bdd2ed9ff6580f51724830f9c21365", + [ + null, + {} + ] + ], + "2d.gradient.object.return.worker.js": [ + "a279eed4f3e5be54218becaa9bb69527e1659179", + [ + "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.html", + {} + ] + ], + "2d.gradient.object.type.html": [ + "aa72183ca5d1226c539f128915038e1954f1fed5", + [ + null, + {} + ] + ], + "2d.gradient.object.type.worker.js": [ + "e0101dfca41eb8b74373ab3789ed2bb51aa45b0e", + [ + "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.html", + {} + ] + ], "2d.gradient.object.update.html": [ "00c60041e733a78da95d297f4ceae4aef7e6b671", [ @@ -596917,168 +597944,168 @@ ] ], "2d.gradient.radial.cone.behind.html": [ - "9a07ec4dc2f418a94979e1b0fd0a40350b471332", + "4a639778ccdce406816f5133d7f017f9a0b3f282", [ null, {} ] ], "2d.gradient.radial.cone.behind.worker.js": [ - "806a83f7a533e00ec3b52d4f6e6858a0aa58f95d", + "114dab0a2197cf53de47ef124d5bbe1940a4efc3", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.html", {} ] ], "2d.gradient.radial.cone.beside.html": [ - "1ab27b46c41865d08610b6218e2167b7d33fa80a", + "94fe289b1a4795a02692b79589ac0a21d81fb50e", [ null, {} ] ], "2d.gradient.radial.cone.beside.worker.js": [ - "2bb0860a6d25a3cfd1c724ac3f7c3403727acec3", + "e6f53fb999276ab7766769ccd963f1a79164e45d", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.html", {} ] ], "2d.gradient.radial.cone.bottom.html": [ - "87cac451d6427cf155ef1331c94bb1800a26f2ee", + "7cf9867dba8835ef95730d8c860faf35c6254603", [ null, {} ] ], "2d.gradient.radial.cone.bottom.worker.js": [ - "a9c859e7ceaaa0e804b53709e5e6cf1bd26c4482", + "132d131bcaef0a84dd25a35c79b97b81458d32fd", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.html", {} ] ], "2d.gradient.radial.cone.cylinder.html": [ - "649b83cc8f8c7227dfde27eb94e380b4afba03e6", + "27f75a8a743ae373c125c47f08b368bd6be01a9a", [ null, {} ] ], "2d.gradient.radial.cone.cylinder.worker.js": [ - "8223f5265548b5a060ec20eb42b93f4f08647b74", + "9534174757b9fc6825ef11af957cde09f47b258a", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.html", {} ] ], "2d.gradient.radial.cone.front.html": [ - "6ad51c17955e4a89580d84e70fb32e6398e71905", + "b46155701c9ce8a3ab16f385731741da9445acba", [ null, {} ] ], "2d.gradient.radial.cone.front.worker.js": [ - "a1eb55f2ecc309e1389100e622d37dc47ff6d85b", + "fffce0f9f2f572523df964e78c7d77230f0c4649", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.html", {} ] ], "2d.gradient.radial.cone.shape1.html": [ - "7de944a5209e2cf06ee98fd5a95ca63467ec6088", + "5c4d8125265df8f994bcc4d8d240f95421104fe3", [ null, {} ] ], "2d.gradient.radial.cone.shape1.worker.js": [ - "0d211a0c67a017023aa02c0e587faf6b63de8636", + "5bd3f5eafa94ef2b6c7c9b746b60b60a3c639975", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.html", {} ] ], "2d.gradient.radial.cone.shape2.html": [ - "a748546c1a8f4b047440b4c00076a88546c361e4", + "1dec145e58ae062037cbe6a113a45044bd246abb", [ null, {} ] ], "2d.gradient.radial.cone.shape2.worker.js": [ - "2f561598b9ff70a523177dfda08fdef11ce0a54b", + "31638cff3d5624a0b49196c88f825bc8030741df", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.html", {} ] ], "2d.gradient.radial.cone.top.html": [ - "802006beecd47633957f598b07bcdab7682e97fe", + "6cffa28175ae44d0a6ae04b1dbe9b1c48aab9d46", [ null, {} ] ], "2d.gradient.radial.cone.top.worker.js": [ - "731ee8f807c769f265ffdde131aa72eab5917e12", + "85a9eae40542a79ce2dab05041dc0cf17f14acfa", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.html", {} ] ], "2d.gradient.radial.equal.html": [ - "3786e180f3bdcbc7b7f58c5d16e3c2e710400346", + "52319ef6126b61ce125b819900d1184370becb09", [ null, {} ] ], "2d.gradient.radial.equal.worker.js": [ - "d046809a314f66b2a09034cd8f0116691c020e96", + "7f5ad50ff390b760cea8a477a7df4c7a7db98f38", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.html", {} ] ], "2d.gradient.radial.inside1.html": [ - "db269a9b926aca3d3db7855f629e730dd96127ad", + "f0da2c2742ad96e131d9925435baf52e775df590", [ null, {} ] ], "2d.gradient.radial.inside1.worker.js": [ - "bc48654ece556af6fb00937353a2668307bd43bb", + "37ed851ab31dd33d47d13884cac09bd83c0c4e62", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.html", {} ] ], "2d.gradient.radial.inside2.html": [ - "23de3b00f863a99886da9f87a1fa21ac0ad18ee9", + "3f255027a160e76fae41f049a04a012e9da99662", [ null, {} ] ], "2d.gradient.radial.inside2.worker.js": [ - "ffc1040d0b0ab3c84b97d10cf7a45db8ba896afa", + "0f36051e6a190e1d12b0e452858752704e65f92f", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.html", {} ] ], "2d.gradient.radial.inside3.html": [ - "bbb2ecbcdcaa8d41a7eed5434f06d69281674daa", + "1ef80a568ee6aa85eb3761aceed9c3ae89d52d61", [ null, {} ] ], "2d.gradient.radial.inside3.worker.js": [ - "792d9e7852b9a4ee5236efe4fde14ab1d1b017e6", + "3c9131dbb3f3df0c35eed9a06e58fc1f56426a2c", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.html", {} @@ -597099,98 +598126,98 @@ ] ], "2d.gradient.radial.nonfinite.html": [ - "8ba0476938d7e7ec664170a03b17720a16229bea", + "4f068bbda576b63dc549434b3c07fe6592a19143", [ null, {} ] ], "2d.gradient.radial.nonfinite.worker.js": [ - "dd25e607b2c8dabcda4d27bf2ac936aeb0ab21af", + "641a341ecc0dfc89787b2c3e4109ef67dd7c5e8e", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.html", {} ] ], "2d.gradient.radial.outside1.html": [ - "6c65f23960a9b7e365ed92cd8ea4ccdd9bb4b64a", + "61fed27df87677c2aa82e16e56644f3043231856", [ null, {} ] ], "2d.gradient.radial.outside1.worker.js": [ - "d7beb71d2f2ffdfc060f42de8501b15349237c2a", + "b23eb81d148e96a4d38b68539952dd3f057115d0", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.html", {} ] ], "2d.gradient.radial.outside2.html": [ - "8f4c48ebc1284ca1b6a79e852733a78b4f72abe6", + "814beccf510b580733ab8c4a09937fbad0a65d9c", [ null, {} ] ], "2d.gradient.radial.outside2.worker.js": [ - "6c753e38b10e063493f8662d40b674863e8d4b42", + "44eb4f4b2ce46a46591d930ebc8a6bfaac102e24", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.html", {} ] ], "2d.gradient.radial.outside3.html": [ - "5cfd30876d668206ba8bc0096548921f800e6ce6", + "632ada6b9ceed5d2885b75dfb5291f36c6fa52c4", [ null, {} ] ], "2d.gradient.radial.outside3.worker.js": [ - "70593ceb292d8c6e46647282f8f8807e464ed450", + "16d0c1a8ee0dbaee34d0bd9524e688710e2756cd", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.html", {} ] ], "2d.gradient.radial.touch1.html": [ - "983071ec6530edbd47d20712f5396c7dfe997acc", + "38235188133209b1123dff491fc46c242c2b3e7f", [ null, {} ] ], "2d.gradient.radial.touch1.worker.js": [ - "21bbce1e74125e4933508c76c2f714ef0539179e", + "853ad165a3f10f575511171cce3cedb7e4f0221c", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.html", {} ] ], "2d.gradient.radial.touch2.html": [ - "bd23924988288de3e319e2bfbfaf1487706732d4", + "af5bbd78971fa2b3bf0fa0e7f265a2e3cb0f1d96", [ null, {} ] ], "2d.gradient.radial.touch2.worker.js": [ - "75abd38d5d765ade99b381ca717a25f81bd38b8b", + "434c27b0b1f2a9eee41f21d88d7082bbb4994d62", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.html", {} ] ], "2d.gradient.radial.touch3.html": [ - "bdaed6f7daa822318fbb073e162bbe89be37c8f4", + "1cf578bc80db5735de11929bbcc031619e5211b0", [ null, {} ] ], "2d.gradient.radial.touch3.worker.js": [ - "b2f3b0b4102e1b4cfefe49e340b1460fff4d8516", + "34fb0caa4489107c123049cfed706c38634962e5", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.html", {} @@ -597239,392 +598266,406 @@ ] ], "2d.pattern.basic.canvas.html": [ - "6f66f500e3792654bde4648623a26321fd971302", + "f82a259e439ed18c9a167b2ecdb75b2690c37a85", [ null, {} ] ], "2d.pattern.basic.canvas.worker.js": [ - "6f6b882416aa13e733e7ab54bd6560f6d548180f", + "510723f009d3792830b61699d14a18835b9fe5c5", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.html", {} ] ], "2d.pattern.basic.image.html": [ - "9efa9d6363cc48da1e038b5009b10228d970e53d", + "ab7b7bbeb56de43d55dbbc1d77d2e6434e7fd5f4", [ null, {} ] ], "2d.pattern.basic.image.worker.js": [ - "776f1dbabd80bdcc3e3269dd18d132ce97e5dd9a", + "14cfcbc9939e7a365131e549489cfae828f4b3b5", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.html", {} ] ], "2d.pattern.basic.nocontext.html": [ - "9fa124277ea3fd7facb2d7fbe2662c36d6a4f931", + "66e301a002f052a8ff78fe701807331558dd245a", [ null, {} ] ], "2d.pattern.basic.nocontext.worker.js": [ - "11c307653d5385ab2813b55594af7f08b748feda", + "f6c24c82ca2b24a6d0651f2f568ca1a2bbdeca51", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.html", {} ] ], + "2d.pattern.basic.type.html": [ + "1edb4fd22789b25cb6e5f8e1a49d427e5d5515c7", + [ + null, + {} + ] + ], + "2d.pattern.basic.type.worker.js": [ + "56a8a7d23cd4713810dfaebe3bce94d1071cc9f0", + [ + "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.html", + {} + ] + ], "2d.pattern.basic.zerocanvas.html": [ - "c7f61889ad5c969639427ebe3b38e5ace9c00ac0", + "7100c8313fc20dcce3e2fb3e18cdc0549eb1c998", [ null, {} ] ], "2d.pattern.basic.zerocanvas.worker.js": [ - "caeff7cdfab3e1b56ba271b49820e94fae991f91", + "9bf487cf7475312c048e734b18eb711796d5d9ed", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.html", {} ] ], "2d.pattern.crosscanvas.html": [ - "fbb7e5266e8b7842a9868e3fe388999ac3273623", + "bdf89021bb1c943b4a3bdebe71ae5bc9195f6ae7", [ null, {} ] ], "2d.pattern.crosscanvas.worker.js": [ - "bd24b44b0c9e68592db03123922afc27b2b79ee2", + "d9004fc028bca07f8e38e7de68d5e548cf0c50fd", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.html", {} ] ], "2d.pattern.image.null.html": [ - "4297814be97f245427652d37e61aa4ef0b509257", + "fbec25862d1d68bd4285a8c047718d747f351b11", [ null, {} ] ], "2d.pattern.image.null.worker.js": [ - "c7d9969619b27a10a5b9ef9794d73a129595eb6b", + "a68ddfdbd72b9d4a9937dd279b8cffca53f89307", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.html", {} ] ], "2d.pattern.image.string.html": [ - "469f2236fed3d1b69c55c0dd88b259581b75f6b8", + "ff7355d2a46bb3b14581fcc46d88bf3a36284c65", [ null, {} ] ], "2d.pattern.image.string.worker.js": [ - "f8525e4a49487ed59d762e6772c53ece4a162c79", + "dc53d82292c269baa3ab0fd132cf3aa1d8b48424", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.html", {} ] ], "2d.pattern.image.undefined.html": [ - "475d8ddafaca795302cedba56ae06135c001e561", + "845f823e7fb01b6cdd32b8ed30e4be07db218a41", [ null, {} ] ], "2d.pattern.image.undefined.worker.js": [ - "dbfdbe9a1e1bbfb11c2c77437e892d46d2268945", + "32f57494930cbfea928c5c31f0dcffacbf447022", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.html", {} ] ], "2d.pattern.modify.canvas1.html": [ - "11586f5aa7230da02bbe9d461325b4b748a98ab0", + "ebeb92c7f5a7797aa4e086802f107db8971d0f83", [ null, {} ] ], "2d.pattern.modify.canvas1.worker.js": [ - "3dde0ef9a07ef73492b81fcaee8b829636cb4c60", + "8e4f9ed4473af4bb1d43f6f41b737313dcfbfa30", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.html", {} ] ], "2d.pattern.modify.canvas2.html": [ - "568140a8db34a657a26080cd3cae4f961e13b0fb", + "042ebba3b76e64bc7d9a77f55886f5a5917ff558", [ null, {} ] ], "2d.pattern.modify.canvas2.worker.js": [ - "fd70a2fcbb9633abfdbc0bc82f9d5d8bbcae05cd", + "ed17db8127b02f34801204a84e1415d8b008997c", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.html", {} ] ], "2d.pattern.paint.norepeat.basic.html": [ - "a60a61efc26e4ce591d6a569701d8ad8b7bc422f", + "8ab1c8eb402bd0465437e5f12d1b28f17969e31c", [ null, {} ] ], "2d.pattern.paint.norepeat.basic.worker.js": [ - "13c5dd2815610c52ac1feb21bf0235ae692854c9", + "9ac4e1605c7c03388fe29fc23530b6c9c854d54a", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.html", {} ] ], "2d.pattern.paint.norepeat.coord1.html": [ - "4a254b3afcf0959d7ed239dab5896d2dc20bb39b", + "4bdd356df7a780533ed839462f4f5c4998080785", [ null, {} ] ], "2d.pattern.paint.norepeat.coord1.worker.js": [ - "948da3a132acfe01d8b1073293cb0bc0316dd309", + "6c4a1409b7d4fc3360f62919ef5e9d47937a2668", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.html", {} ] ], "2d.pattern.paint.norepeat.coord2.html": [ - "306428a61628860c343f3aa6ef193aac66b25d6e", + "b9164ec6a94063d69a31557f2c57282cec7a64ce", [ null, {} ] ], "2d.pattern.paint.norepeat.coord2.worker.js": [ - "fa90ff652a23a0c9ec904aec545c82a3742d901e", + "d2fdd86022a318bed3776f49e80b61fd301afb5a", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.html", {} ] ], "2d.pattern.paint.norepeat.coord3.html": [ - "556fca6beffc1bd12fca097ade8f20cc70337b5f", + "e2983948c2ddf5a2bcb4cc6713de5ed9544abb55", [ null, {} ] ], "2d.pattern.paint.norepeat.coord3.worker.js": [ - "834516e96a49526f97597abb4b2591121e62f4e6", + "584a5d6cfdd48a7675e514bcc9f2309578e85fbd", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.html", {} ] ], "2d.pattern.paint.norepeat.outside.html": [ - "c049b79aeb9342b981719f543e9cad270685a932", + "43a718d44aa70251a2613994884ce779f5b8db7a", [ null, {} ] ], "2d.pattern.paint.norepeat.outside.worker.js": [ - "93e7a312fb50856b8a949c98d9f10284232a2a57", + "0b5fef95ce0e7d2ae12897d4ea2b697df4bc3ce6", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.html", {} ] ], "2d.pattern.paint.orientation.canvas.html": [ - "f7305573c4668f65f9bb18a8a03cd4594e418fd3", + "b63535c70653f0348c796984b92f6aec96b560f2", [ null, {} ] ], "2d.pattern.paint.orientation.canvas.worker.js": [ - "7896c70def22cb760f6cbc47dcf5d971eb424591", + "2fbe52af73647d81d1f3000158cdec688c28b748", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.html", {} ] ], "2d.pattern.paint.orientation.image.html": [ - "c5dc174416a5d4c04a53223a11cda328c8d97600", + "0b3645981e3cb6f40df906e9b8be27e185d5ade1", [ null, {} ] ], "2d.pattern.paint.orientation.image.worker.js": [ - "56b072be4dd678958717d8925ee19ff11bacae22", + "b303b2d813b7b540ab6e9f7ad72aa0d0a1234ba9", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.html", {} ] ], "2d.pattern.paint.repeat.basic.html": [ - "9327111eb7a46a95ade0c99b083cdb35ef9d5fde", + "b6647f776ed886855c1aaf34a837044d9bef8935", [ null, {} ] ], "2d.pattern.paint.repeat.basic.worker.js": [ - "6e77679552a819365e7a4cc69fad2f480ba419ae", + "37f4c04228c2214698446c88a9676cbb834ea1b0", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.html", {} ] ], "2d.pattern.paint.repeat.coord1.html": [ - "098abc71651d2ca23e906b14c2b072f4fde62a87", + "54b24ac705b60be780e4a48382c1daa528769193", [ null, {} ] ], "2d.pattern.paint.repeat.coord1.worker.js": [ - "28c8d07b6a4b45c28b3a3b4cfe04baa6330c8386", + "efbd1c58469bd780dbe89aa495852712892d36a8", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.html", {} ] ], "2d.pattern.paint.repeat.coord2.html": [ - "4ee7aac5fa861436445facd5b5c7787892dac649", + "a77ce2c6964c38d89bcaaefacbe379eaedce135a", [ null, {} ] ], "2d.pattern.paint.repeat.coord2.worker.js": [ - "6b2228e558c67551909dcfe9b1f4882357cbbbdd", + "db707ecb0a656fd783d43aca1227075415f46541", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.html", {} ] ], "2d.pattern.paint.repeat.coord3.html": [ - "ed1bb4243d463b08dde2cea67146151c5aada6ad", + "10f380fed3552551545c9fe0d78008dbbc2c1a83", [ null, {} ] ], "2d.pattern.paint.repeat.coord3.worker.js": [ - "fc3911fbb136da63179284ef491ca5f9d482cbb1", + "e58cddccfeb2f0873cf64a0cffa25495fcdf59cc", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.html", {} ] ], "2d.pattern.paint.repeat.outside.html": [ - "420562c5efdd0a874f002724705145e4515af1ba", + "6558e07c5b627ac980581e589f52c44df2bd3f4d", [ null, {} ] ], "2d.pattern.paint.repeat.outside.worker.js": [ - "b4d6774ec732a6388466b6a26ccd3b24e9861889", + "4a173af0b40a5eab5531d8037855441cb7bb1e06", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.html", {} ] ], "2d.pattern.paint.repeatx.basic.html": [ - "ee2c477c936d3c63d05a17d53f23bc02e4b0652d", + "494b72cfb94ab88351aa0d47608bd9c95f5dce0b", [ null, {} ] ], "2d.pattern.paint.repeatx.basic.worker.js": [ - "157207a7c54733b1ddfdbedb6c2fbd08975520c0", + "e776f7a008a959b895ea3a4342095ba16adddebf", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.html", {} ] ], "2d.pattern.paint.repeatx.coord1.html": [ - "0e9a92e51cbb55bd88b27c9cb5a6ed0a748a7194", + "6caef0cb1fa8fbfa7f5cb4dfe26993d61d0882c5", [ null, {} ] ], "2d.pattern.paint.repeatx.coord1.worker.js": [ - "684d2b7b4cbfca33fe968be111756d501067feb9", + "57c2102cc834952d05feed42d985fcc26b2376e6", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.html", {} ] ], "2d.pattern.paint.repeatx.outside.html": [ - "83e8ef37dc86e05ff75fa08ee35084e8c5ce2821", + "b3229c8d875fc15972d14da52fbb936cf8139b37", [ null, {} ] ], "2d.pattern.paint.repeatx.outside.worker.js": [ - "bbb7b9055dd4d856db7e248eddef6c5e660a0baa", + "e40f6aa20751a95d7ca5304a4aea3a3740e98a44", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.html", {} ] ], "2d.pattern.paint.repeaty.basic.html": [ - "48948452af0fac0c4f469650d3e0fd727c4daa25", + "d88f3a0ab659ef47945be75b26b0176bd538ad5a", [ null, {} ] ], "2d.pattern.paint.repeaty.basic.worker.js": [ - "0eec87ca75f771c6a6533e7df9ced2c1161d7a4d", + "6a53b5dc4d2027e3933c12c7d341578deda13937", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.html", {} ] ], "2d.pattern.paint.repeaty.coord1.html": [ - "79ca84193e86b65d918ccbcd7ec1fc00186429fa", + "59bfeb2abf1c97528c27092c6e78788246947388", [ null, {} ] ], "2d.pattern.paint.repeaty.coord1.worker.js": [ - "c5f0f4bcc24f23902f789b8bca4710961189f966", + "d59abb6e0751a37ef9a9e0b464055455b1012859", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.html", {} ] ], "2d.pattern.paint.repeaty.outside.html": [ - "f7fcc3e45a6e52ddad976f1fdfb6cc3e565aea59", + "ad2bd3383f3a3fd6223543dd524308d4f69df37e", [ null, {} ] ], "2d.pattern.paint.repeaty.outside.worker.js": [ - "7201c3f133c26713812bf20d7fd9005de5bd51a8", + "c4feba10ca228136279d0220033531575af72ae3", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.html", {} @@ -597645,14 +598686,14 @@ ] ], "2d.pattern.repeat.empty.html": [ - "550edecf1e14a46f1bf4a5fe2de66d2e3c63b724", + "c2197893d7849589e90abf8b902963824661e009", [ null, {} ] ], "2d.pattern.repeat.empty.worker.js": [ - "9777e188fad5b4f2bc06aa5396a7174e679d2290", + "5aefc0dab3e74814754653b941ce9cab660b51c2", [ "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.html", {} @@ -597728,6 +598769,48 @@ {} ] ], + "2d.pattern.transform.identity.html": [ + "2d73296395d4d63c366f64d1993e766fbca4d0db", + [ + null, + {} + ] + ], + "2d.pattern.transform.identity.worker.js": [ + "a33c771346e5e5ee2edb53fd9f866f2e5762eda8", + [ + "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.html", + {} + ] + ], + "2d.pattern.transform.infinity.html": [ + "aa58ad119f48123d00fc443ab958cfe3a96364f2", + [ + null, + {} + ] + ], + "2d.pattern.transform.infinity.worker.js": [ + "999739b8488605cfd5b28b4cfbbf494d760e659a", + [ + "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.html", + {} + ] + ], + "2d.pattern.transform.invalid.html": [ + "f2420d4a2baecd81503eefa71cf94e012582b920", + [ + null, + {} + ] + ], + "2d.pattern.transform.invalid.worker.js": [ + "163951807fa4dab8c21bf23c0596625278ecf0f5", + [ + "html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.html", + {} + ] + ], "2d.strokeStyle.default.html": [ "cd7e424374a31debc172a150fd41bc572a8a4204", [ @@ -597913,6 +598996,204 @@ ] ] }, + "layers": { + "2d.layer.invalid-calls.beginLayer-reset-endLayer.html": [ + "c0b11aa6115b1526ebac823caace5bd489481223", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js": [ + "1c147d6f349b0c6dbbd01322129ce8055899619f", + [ + "html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.html", + {} + ] + ], + "2d.layer.invalid-calls.beginLayer-restore.html": [ + "022532b329d4d657fb6c5eb56584989df1b077fe", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.beginLayer-restore.worker.js": [ + "1aa86635e65cdecdc27766f5e4f60125bf938cf5", + [ + "html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.html", + {} + ] + ], + "2d.layer.invalid-calls.beginLayer-save-endLayer.html": [ + "26dd0eee4bcfe01501b351248eed170f83e082a3", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js": [ + "613921c67c2c0304ddf150b195a298e756b199ff", + [ + "html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.html", + {} + ] + ], + "2d.layer.invalid-calls.endLayer.html": [ + "440249980ad890359a9b857d3fb9408410d9cde5", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.endLayer.worker.js": [ + "b2ba231b9c7d13788029242d9c2a52cd72679cc4", + [ + "html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.html", + {} + ] + ], + "2d.layer.invalid-calls.save-beginLayer-restore.html": [ + "c2b09961acfa44a59f9f47559fd2566a4b12d585", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.save-beginLayer-restore.worker.js": [ + "d155379fcb38acfa06d1cd09011343e9960d89b4", + [ + "html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.html", + {} + ] + ], + "2d.layer.invalid-calls.save-endLayer.html": [ + "01b62d1e859d9f0bf1b98239f29ce88a21f60702", + [ + null, + {} + ] + ], + "2d.layer.invalid-calls.save-endLayer.worker.js": [ + "353c1b00cdc61bcdf3977a4f029eed1c2860edd4", + [ + "html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.html", + {} + ] + ], + "2d.layer.valid-calls.beginLayer-endLayer.html": [ + "0a6e195ca8636ea34cc488cb52c4a93a40c10ca1", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.beginLayer-endLayer.worker.js": [ + "a10bcd98b75e342ad647741e8d2cf91967abffe2", + [ + "html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.html", + {} + ] + ], + "2d.layer.valid-calls.beginLayer-save.html": [ + "12abcc5270c845bf3e0bd0418375c93a49564c33", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.beginLayer-save.worker.js": [ + "03fbeeb4f4837af5f92ba150297bc43d5b2aa434", + [ + "html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.html", + {} + ] + ], + "2d.layer.valid-calls.beginLayer.html": [ + "2178138e8d232348ad140353a88212f3002e48be", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.beginLayer.worker.js": [ + "e64be136d786b682d92979b739ab237a6288242f", + [ + "html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.html", + {} + ] + ], + "2d.layer.valid-calls.restore.html": [ + "156dd5abbdc0bbd7ca4caac605acf7b7e9944d76", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.restore.worker.js": [ + "7417d12abe8412e5e13a1e58d262d466a6e3ce20", + [ + "html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.html", + {} + ] + ], + "2d.layer.valid-calls.save-beginLayer.html": [ + "afe735764ecebca789c41cdb49ce43dfdde4cdcd", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.save-beginLayer.worker.js": [ + "773ba77a1578d3083de0e8e376776aa125c6845c", + [ + "html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.html", + {} + ] + ], + "2d.layer.valid-calls.save.html": [ + "2b2de23bb88de79c10320437e91967c50ba32b01", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.save.worker.js": [ + "5bbf0386fe9faf9c62b423f69db05931888988e4", + [ + "html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.html", + {} + ] + ], + "2d.layer.valid-calls.save_reset_restore.html": [ + "ec5aa6455e30abcc63a03371911684f86f7d9f33", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.save_reset_restore.worker.js": [ + "3636c94357d6ec598535237260277cfe94ab2844", + [ + "html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.html", + {} + ] + ], + "2d.layer.valid-calls.save_restore.html": [ + "1682bca91c8e1f663c4862a7fe4a93d06e554d30", + [ + null, + {} + ] + ], + "2d.layer.valid-calls.save_restore.worker.js": [ + "8607722df732b622597736bf8dd0407f06b91493", + [ + "html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.html", + {} + ] + ] + }, "line-styles": { "2d.line.cap.butt.html": [ "145e145cb419e97fa6906084c8bd6ee91c042be2", @@ -598040,6 +599321,20 @@ {} ] ], + "2d.line.fill.noop.html": [ + "0d1aa4be30e646173c85856eeb180479fe6e6e55", + [ + null, + {} + ] + ], + "2d.line.fill.noop.worker.js": [ + "e3e8c14b3fb672129a0531bef1743f654aa42686", + [ + "html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.html", + {} + ] + ], "2d.line.invalid.strokestyle.html": [ "fa67e3b3f826f559967801dfb5523dd2a0f7dfed", [ @@ -598507,7 +599802,7 @@ ] ], "offscreencanvas.transferrable.html": [ - "d321c324fa0019fa542864e78032c00ff34d247a", + "76796034e9a2da76d059f65cdefa2a4e8b7dfda5", [ null, {} @@ -602046,70 +603341,70 @@ }, "shadows": { "2d.shadow.alpha.1.html": [ - "603d5e5da4274a3f47dd390adb25f40403eae2d0", + "765cf41b213e7acd5764ea56f8880fb38846775c", [ null, {} ] ], "2d.shadow.alpha.1.worker.js": [ - "0bc92ac4141752c173d1e520ee9c2acd8aea1ab7", + "869aa017e7e3a159467c233784a4d90142c14adc", [ "html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.html", {} ] ], "2d.shadow.alpha.2.html": [ - "254d214c4cd1f5bd036fe6fa40e1308b429944f1", + "be2209608fc521f15886a291c282435784efb8ff", [ null, {} ] ], "2d.shadow.alpha.2.worker.js": [ - "ff543b3c8000b9a83f567ccdf1fa5dcb47f79327", + "dce91f2e4d3dca7d59576621c0cceac7629074d4", [ "html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.html", {} ] ], "2d.shadow.alpha.3.html": [ - "2c50c0d748a59694e8b6f24bd0ca3815af1439d0", + "7239b3cea7b759510039b035aa9621e4af66be0c", [ null, {} ] ], "2d.shadow.alpha.3.worker.js": [ - "d8bc071c85d9ca97ce50d620eb1e1c407171fd4b", + "93fc665cedcb1698335c199ec570d7a83e968c18", [ "html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.html", {} ] ], "2d.shadow.alpha.4.html": [ - "d86ee4c4bff063ae5c8a3f07e65ce72a607559c7", + "468db2a7166c0db205743ac934b31045a1cd7d39", [ null, {} ] ], "2d.shadow.alpha.4.worker.js": [ - "4fdb8ca7dc58026a7f61940e25aa4b2e66a6b5c9", + "2be63d3effaa20dc336c2555cb8a397d835f735e", [ "html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.html", {} ] ], "2d.shadow.alpha.5.html": [ - "4c1a9b08cb051094667aef27d441100312dc0a64", + "92ac9717f2a2e11eee1ec7bb581674d5f5a86c64", [ null, {} ] ], "2d.shadow.alpha.5.worker.js": [ - "be4b78d87c55ecd3eba17836b6507e413d411640", + "016616ac8c3d652f3cc4edaa0d5cd935b0656b81", [ "html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.html", {} @@ -602130,28 +603425,28 @@ ] ], "2d.shadow.attributes.shadowBlur.invalid.html": [ - "8f199766fe22f77582e0b44c646be4db7fb94dcb", + "51d1a4a804d038b5e969d53aa27072be8ad940ee", [ null, {} ] ], "2d.shadow.attributes.shadowBlur.invalid.worker.js": [ - "303b43e8193e87c15d21d5159223cf5f4f6e3c9f", + "2e3a28b789eb37ddeee5f7dcec5f5618f3ca7a69", [ "html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.html", {} ] ], "2d.shadow.attributes.shadowBlur.valid.html": [ - "299826a5a2e96de50e1693cd16935def63c6ee3c", + "06495f6c3172e144b3536a07769d8a519ed85067", [ null, {} ] ], "2d.shadow.attributes.shadowBlur.valid.worker.js": [ - "c41588b50edffd1affd01a722b56c3ce38baea83", + "d0292edaecd10c7a56d68495a46d2841675fed42", [ "html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.html", {} @@ -602172,28 +603467,28 @@ ] ], "2d.shadow.attributes.shadowColor.invalid.html": [ - "93a480b307b30c3f13c7043028a0a2aa9efde235", + "ac1d9e733304c308933dd81bc85a94d6022adfcd", [ null, {} ] ], "2d.shadow.attributes.shadowColor.invalid.worker.js": [ - "67e0fa80bc072e7901d00948dd5cd9457e9ddb9d", + "c962f2508dd5c1f4a879b0bfb5b7e281a19df696", [ "html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.html", {} ] ], "2d.shadow.attributes.shadowColor.valid.html": [ - "acd36360a8f67ab06c9159fc375f8eefb4aae046", + "340f11f54f3c7896d4bc40645628638604377451", [ null, {} ] ], "2d.shadow.attributes.shadowColor.valid.worker.js": [ - "02444723b4ed0c6089bcef887bafc03eaf8a394e", + "6d7eb0504d412f632314033cd368cf89787fce7f", [ "html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.html", {} @@ -602214,168 +603509,168 @@ ] ], "2d.shadow.attributes.shadowOffset.invalid.html": [ - "be055aa37ce3bcdb18f66d58a092b378df69e89f", + "d789284b0a5db5d176301bb0441c771a4f36d0d0", [ null, {} ] ], "2d.shadow.attributes.shadowOffset.invalid.worker.js": [ - "37ae2e6b7852ae3d1f71530fd91ae84b67da9b7e", + "9eb89cd58144a9b0c47a7256f16e7c6f0471d044", [ "html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.html", {} ] ], "2d.shadow.attributes.shadowOffset.valid.html": [ - "785966cb38e68b849fb559d12e677e52ba70bf19", + "82f5f0118d0ef1c9d4d98e74a5aecf7ef776ee26", [ null, {} ] ], "2d.shadow.attributes.shadowOffset.valid.worker.js": [ - "a6e047ee2b701d0d4b4938c36cf7d9b21a10e94e", + "5881c5bca5148ed0b1057c9a56128abf8a7495ac", [ "html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.html", {} ] ], "2d.shadow.canvas.alpha.html": [ - "ae046cfe19dfb658adf80706bd68213d4ca52285", + "cae4235e8cf364eea70b5de85af44c2620386de2", [ null, {} ] ], "2d.shadow.canvas.alpha.worker.js": [ - "21d6309c18321bc949f3526623e48d67545dc3a8", + "0fa74a20706f215f90646d86eabaa177e45cdba5", [ "html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.html", {} ] ], "2d.shadow.canvas.basic.html": [ - "3ba1cf1fb06b5ea4876c9f12be9981fb423aaa1a", + "f5784e914f567103f8a90c5fb93002776b57b231", [ null, {} ] ], "2d.shadow.canvas.basic.worker.js": [ - "8ec3f4acb3c1dc505e14ca1b8b987b59ba44b5b4", + "6a2d916a75431756d584090775e3feafeba546c0", [ "html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.html", {} ] ], "2d.shadow.canvas.transparent.1.html": [ - "960d870923d4e063b7d0fc61cea90a6d2d8dc9fa", + "62b3f83272a2b36239cb1f6d58db7bedccdd91c1", [ null, {} ] ], "2d.shadow.canvas.transparent.1.worker.js": [ - "7fd807bda4e65dd7908e560994b7417a7ab36e39", + "1b02897d62ed8cab7c46b5be34d076f7386dd533", [ "html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.html", {} ] ], "2d.shadow.canvas.transparent.2.html": [ - "2f1d31d7066555906647fecfe237c675eaed9158", + "0f8045352356fbc33efa12f36c0aa28277a89805", [ null, {} ] ], "2d.shadow.canvas.transparent.2.worker.js": [ - "1347eb095feecff4cb0d0318b8552b599678c280", + "6e468e28e000b5277a3083e76cae299d63c6638c", [ "html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.html", {} ] ], "2d.shadow.clip.1.html": [ - "a762ab5f9f1af56996f282b38f71a126fa6a707c", + "4df101d513c8e523ddb30ffb9c2f2878fab36210", [ null, {} ] ], "2d.shadow.clip.1.worker.js": [ - "2a6423a8b290c933dcf480697e28e74be65381ab", + "6b05ceb226f1d53d2cbc8030d7b3d76da1369ebb", [ "html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.html", {} ] ], "2d.shadow.clip.2.html": [ - "31055d7200d1e5beeaa59f4ec62c8e1f918a8f94", + "6a09ea53f3654f0489cd2d31881240b301ff1782", [ null, {} ] ], "2d.shadow.clip.2.worker.js": [ - "2c6b8deacd450bee021dd9c548a345684d9526e0", + "4cdfcfdcfcd6d32a12253396e604b2edd72cb0f6", [ "html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.html", {} ] ], "2d.shadow.clip.3.html": [ - "3b62b233d1415f8ab1116dda3e534ad1cb53c5a4", + "d1732e9f5b7481df0bf025558980c739a383a84c", [ null, {} ] ], "2d.shadow.clip.3.worker.js": [ - "c97f9e5c63a33f9a34841fcd370b91f0efbe80c6", + "6f8b79d1fea35fac2e9ac96eef2dc85ff0b120a4", [ "html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.html", {} ] ], "2d.shadow.composite.1.html": [ - "e9a400f1e10b870480b01cd79036e088e26f5e60", + "d6014fbd45734b480cf43f25fedc5de2ba9da6c7", [ null, {} ] ], "2d.shadow.composite.1.worker.js": [ - "10baafad47e4664ac6e5f134d7724b034ed79c50", + "28637706e15e671017c496d8dad7d383c8620a57", [ "html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.html", {} ] ], "2d.shadow.composite.2.html": [ - "0a4c515bac2b433475c72e9ceb6cfcb41c9d0187", + "87f2e3ba0f71b8f36d48132e0077f9c204f35868", [ null, {} ] ], "2d.shadow.composite.2.worker.js": [ - "20c89c1390cf17cf940a8ec003fdbc0dccbd6f30", + "a144446ec55611a068903a9e36724f1562c19f20", [ "html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.html", {} ] ], "2d.shadow.composite.3.html": [ - "56218430ef42c715c7e36848db3897a38b7cd754", + "f3cafa983abf0f9e6348c86c9c2f50fc7f215c73", [ null, {} ] ], "2d.shadow.composite.3.worker.js": [ - "1257b3f5749222248588b0df4ed2288d65f8d45a", + "ba29487eea0ad721041ef3a8b573ec6309e6bac1", [ "html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.html", {} @@ -602452,140 +603747,140 @@ ] ], "2d.shadow.gradient.alpha.html": [ - "384838584e0b6620ec7e8ffe1825da767c8b5962", + "199dd6c3fab619b18467284497153d98c5c599cd", [ null, {} ] ], "2d.shadow.gradient.alpha.worker.js": [ - "65d582dd790f9eb137774b32b46f4bdf63c99c5c", + "0f9a6449c4bcc776f2c094973cd770e6c899ded5", [ "html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.html", {} ] ], "2d.shadow.gradient.basic.html": [ - "c411b64e84359f733b15fc65c8d5346891c6cfe8", + "6746f03f3d86f8d16c6afee114ec13d9226cb401", [ null, {} ] ], "2d.shadow.gradient.basic.worker.js": [ - "2630acc1a4cbe69400202008d0cda48d7969f5ea", + "068b48bb6f8488625c8ba5da94f92db34b853ead", [ "html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.html", {} ] ], "2d.shadow.gradient.transparent.1.html": [ - "852d4268fd5d18f63d14cbafafce646914198acb", + "7e7309e976ee6c805eff7810e923b5090d44f528", [ null, {} ] ], "2d.shadow.gradient.transparent.1.worker.js": [ - "b08401426af70523d41a370e09d803694ba82b50", + "1102848ecbdfed0eab4e44b6505b40642c3ff26b", [ "html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.html", {} ] ], "2d.shadow.gradient.transparent.2.html": [ - "b2c7967d1a717aecf97e69c1529f3aacd62c23e9", + "8259eb9ae5d76f93afd0618b64aa74f05b26a06c", [ null, {} ] ], "2d.shadow.gradient.transparent.2.worker.js": [ - "bc651c594ea6e39c9f99f5c8553e63c772baa4d7", + "5fcf4ee93d0a8c689aa6e1fdaf6f70f6671f434a", [ "html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.html", {} ] ], "2d.shadow.image.alpha.html": [ - "9d14a7233aae0640241dc79ff6689dcc2c6183dd", + "f7f797fd0b5b3d57a51452998d10b277deb170f3", [ null, {} ] ], "2d.shadow.image.alpha.worker.js": [ - "5c290b06cb28443802c4d97b613f41b5a695d3e0", + "827bd2ce65285f5075473a4a8f9b826f0e4c0ffc", [ "html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.html", {} ] ], "2d.shadow.image.basic.html": [ - "b1066aa084f2951ea7ae0d7f6644e43a63be87e1", + "5b959fdd92da3ba65811347bc7397d2f9a640c0e", [ null, {} ] ], "2d.shadow.image.basic.worker.js": [ - "750326c8944aa6165fedafce5ff1537d5f886e00", + "2d02232c6836d550785a87499a808eea355fe6e3", [ "html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.html", {} ] ], "2d.shadow.image.scale.html": [ - "a6710d727b053f89f1e587143ddf6fc5d0c057b1", + "7e2536c0522127beb4b1feca82da3c91f0e61659", [ null, {} ] ], "2d.shadow.image.scale.worker.js": [ - "14e4334f0e07e3f208759bd9cd2a7c7b0a5d04ca", + "2c10381f98aa43636a50f973d05238a008695bb8", [ "html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.html", {} ] ], "2d.shadow.image.section.html": [ - "be2e6ed5e69aff4db956f143d39f0df455fc8849", + "7744ee153bcb80aa89c0730ee3a8b20dd795136f", [ null, {} ] ], "2d.shadow.image.section.worker.js": [ - "c63121c802290056f2f693bcdd2dacbdeb4637a1", + "94affdfb6abdd5fb1ee75a676b879b4d7c4f4671", [ "html/canvas/offscreen/shadows/2d.shadow.image.section.worker.html", {} ] ], "2d.shadow.image.transparent.1.html": [ - "23cafc60750d59cd55551e4a24de12ed07dc0aa6", + "30db23ce76c9d5e422b64260db1ff1a75b90201d", [ null, {} ] ], "2d.shadow.image.transparent.1.worker.js": [ - "dbae8a5061e3be62f09f075c243cf67753cfe55a", + "c5421d70426241e0275536bf6071cd9d7392e71f", [ "html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.html", {} ] ], "2d.shadow.image.transparent.2.html": [ - "6567dacf523b4d99bfcf2ef26fff936c7058d090", + "9b3b206a264547a0abadb8a83a06774fca1b004d", [ null, {} ] ], "2d.shadow.image.transparent.2.worker.js": [ - "c424274bb51828504bf7de4f874d90a1d9ef25d0", + "071c584fa84bb1800f59b1a7c3118a628016398e", [ "html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.html", {} @@ -602662,168 +603957,168 @@ ] ], "2d.shadow.pattern.alpha.html": [ - "04f6ee2e81a5c1b77be684deb9b77b63a0e70e94", + "c45654f9991b5439174e55c64aa4bb319a61d07c", [ null, {} ] ], "2d.shadow.pattern.alpha.worker.js": [ - "8b29bfb064a32c509dd9afe96aaf0445c27cbf53", + "41a826a158f4a4ccb9ac4005f2209d3a59ccabb1", [ "html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.html", {} ] ], "2d.shadow.pattern.basic.html": [ - "64d6b59308b32f5e7fd55ab9a238d3d46bb21899", + "4e372c0932d85d8db0545b185e3ccdac663b31e9", [ null, {} ] ], "2d.shadow.pattern.basic.worker.js": [ - "db9aefeaf4d53621a594b3ab049f5eb577ffbfdd", + "7a8f7e84796a9d72fa463ec337efd8834da418b6", [ "html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.html", {} ] ], "2d.shadow.pattern.transparent.1.html": [ - "fe06c3afde10f255a1c5c1b2d5e49b419098fb7b", + "72fa7b29f8ebc6d73f9647609e356478b1f1a731", [ null, {} ] ], "2d.shadow.pattern.transparent.1.worker.js": [ - "b2ebc0ae2cfe2bf059bec8586134bc712b033efd", + "8414db6d08ca1126edfc02d780bbf8e325b1f103", [ "html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.html", {} ] ], "2d.shadow.pattern.transparent.2.html": [ - "358113f07cddaa9f6873f809bd48331d7aa2b73f", + "6ad8ece009a391daa5615e607edbe097fe999786", [ null, {} ] ], "2d.shadow.pattern.transparent.2.worker.js": [ - "cb963008f9446d67375cae6de3e2a5a75857807e", + "726a42d6cd4e845c8266b3c6ebea5defc40a0cf4", [ "html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.html", {} ] ], "2d.shadow.stroke.basic.html": [ - "27edc8750ba65ba441272a125d65e98f306fed82", + "c569865a60c78e9ce93cca90c48bf02eadba49d0", [ null, {} ] ], "2d.shadow.stroke.basic.worker.js": [ - "b62e6c75e56f265a119e72201263f2eb82fda5b6", + "9d7d0ec3210adfe18860b0327725b2c3df3accba", [ "html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.html", {} ] ], "2d.shadow.stroke.cap.1.html": [ - "46f915b73e761d6ed7f23a282955df3280de1ff1", + "b170f88cf65bf2fc54e974679fd581ba8af8f2c1", [ null, {} ] ], "2d.shadow.stroke.cap.1.worker.js": [ - "21c588ac299c68792332c06e15f642117c38cc0f", + "582915d28bf1b195b1192fc8a51cdf0b803f82c1", [ "html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.html", {} ] ], "2d.shadow.stroke.cap.2.html": [ - "91bfd80d2b18aff8a754ce4603256000e9d8f08b", + "8bbb016bd5e0830dfcfd3e9b6df7f73fd322f7f6", [ null, {} ] ], "2d.shadow.stroke.cap.2.worker.js": [ - "aa607cd6efc0b8f7539cc4802f9f5478f8c7eac6", + "13108bec9e418edd61f18bc5a258e026b0e4f66e", [ "html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.html", {} ] ], "2d.shadow.stroke.join.1.html": [ - "1a57acb5f37b839bedf30620be759d495d8a7e4f", + "f0ef2d250eafbc411cb3148dbecc0b49a8cfe78a", [ null, {} ] ], "2d.shadow.stroke.join.1.worker.js": [ - "8628fd993bd831f665d055a63b69ac815b3a9906", + "0cc1b5f1963b9ff48217890176542fc8a938471c", [ "html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.html", {} ] ], "2d.shadow.stroke.join.2.html": [ - "394226c0ed56e8b51f9a8356dfd673fcb7f86020", + "f2800aa19a961be7bc86ec890d902ad69d3f404e", [ null, {} ] ], "2d.shadow.stroke.join.2.worker.js": [ - "06bcbd2c48adacdfcd7cf4117fa407571664df51", + "925f65a28ee67a50090662f4909f783d13ba6fa3", [ "html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.html", {} ] ], "2d.shadow.stroke.join.3.html": [ - "2bf7d3dbc1bbd32e746a4b12635f148b97d557da", + "390e6a80486a4e546699cb204ff33462fdd9ac6a", [ null, {} ] ], "2d.shadow.stroke.join.3.worker.js": [ - "5c52537a31eb5218ad1e243990df15643ab9a3b3", + "827a6d666234834c0d0ed95949809aa93b217c48", [ "html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.html", {} ] ], "2d.shadow.transform.1.html": [ - "3fefcfc087a9263a69d0e07305a3eca5aaceebb9", + "23946b20a56bd2f96d4d3ab9c4cdcd4d5bb99d26", [ null, {} ] ], "2d.shadow.transform.1.worker.js": [ - "6227d8487f681b0fab9ff5e8bd7e0676a8223ef5", + "6ac8da4c97d6162eed2000ee2cf2e5760575adc3", [ "html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.html", {} ] ], "2d.shadow.transform.2.html": [ - "a4ba056c75927dc20ee2daf09a71bebbad7a4c3f", + "edcd20bdcabe57608d986f5d9a8950269ab6e67a", [ null, {} ] ], "2d.shadow.transform.2.worker.js": [ - "32c322af916955781512b864a56d51779781f4a0", + "e9e745a2ab87e9c04180cef4230c6a2f227dcd41", [ "html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.html", {} @@ -603042,28 +604337,28 @@ ] ], "2d.text.draw.baseline.hanging.html": [ - "0b8228343289fe59d269b4ccf63dc48b6008edda", + "0bd15ff0068e7b238d359e772b2c0fad01e04b04", [ null, {} ] ], "2d.text.draw.baseline.hanging.worker.js": [ - "fca74d6938184d68f11790b86fbdb0240cd11d8e", + "4a5ced7b38f95fc9cef8ef3b6290b8ebd8b6338b", [ "html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.html", {} ] ], "2d.text.draw.baseline.ideographic.html": [ - "c996444b860a079402dbeb20344578c94877e58d", + "3a1d6e5159c052eadc9fd3073fd3b6dbc70344ef", [ null, {} ] ], "2d.text.draw.baseline.ideographic.worker.js": [ - "0ffa6fe299a0cb9a03778f0f32a57141074d0b7c", + "b39c10b74f0c3ce27eb79f81bef5903616722bd7", [ "html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.html", {} @@ -603262,14 +604557,14 @@ ] ], "2d.text.draw.space.collapse.end.html": [ - "9215203eaa7411477c24265e1120d9cca9be220b", + "a9dcfb11c42f891fe6405624aab2c8a2950ff38c", [ null, {} ] ], "2d.text.draw.space.collapse.end.worker.js": [ - "f910b274bd4ab39e54f9d8ca841bab559e0f5ecb", + "87ae8b8d58bd76f0c86dc8a335ff863f0c0d85c2", [ "html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.html", {} @@ -603290,42 +604585,42 @@ ] ], "2d.text.draw.space.collapse.other.html": [ - "a0cc560f507f7fc4ad466dd928962e9f7be59616", + "c9808a4c71616be86b0dd70b3291a425d97f5d41", [ null, {} ] ], "2d.text.draw.space.collapse.other.worker.js": [ - "12edf7f7e7f7074a7c47a4d91024e4d6fc2bcf1f", + "f072b76dd81bec651b7552ab2b6cb938235f88d2", [ "html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.html", {} ] ], "2d.text.draw.space.collapse.space.html": [ - "240ba7460c41e76e02030dd46d564bd3e378b0ba", + "1ed09048961c25b4841009ee124edfc51380c381", [ null, {} ] ], "2d.text.draw.space.collapse.space.worker.js": [ - "3ce5ef88f73553136dc0ed74d04ef8dda215c167", + "979a8a0f1cc55ea5683d84239b93e4de241bef5f", [ "html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.html", {} ] ], "2d.text.draw.space.collapse.start.html": [ - "43fa32f8aebb47acedaebba8acc91fc42f08e800", + "1581ce111cecb855d8cdb0cf003ada4004529dcc", [ null, {} ] ], "2d.text.draw.space.collapse.start.worker.js": [ - "2f742ac2b672df16e94818a689e4e208390098f8", + "79f8326561c2a7bbd5215e088db883c55f6337b7", [ "html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.html", {} @@ -603353,14 +604648,14 @@ ] ], "2d.text.drawing.style.fontKerning.with.uppercase.html": [ - "380d8e7212f73defa0a7fd7b31550e104690800c", + "7f6b57921e4ae6252fb6947059734315898e3af7", [ null, {} ] ], "2d.text.drawing.style.fontKerning.with.uppercase.worker.js": [ - "afce6c3955cfb880767fd8f8cc8d14c1af1fe6bc", + "4e0f32c69274eacf0c26a63cee34c00ccdf6983c", [ "html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.html", {} @@ -603374,14 +604669,14 @@ ] ], "2d.text.drawing.style.fontVariant.settings.html": [ - "5ed17baf956418e233d6d66b5b566e4f0454be30", + "9756d095ba74fd386b1249b2c1cf24c9381c29ba", [ null, {} ] ], "2d.text.drawing.style.fontVariant.settings.worker.js": [ - "9486b8ae1a4a3a65ef0379086bb6a0150f25ab48", + "30c78388ae45586a86289a89509210db79993b28", [ "html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.html", {} @@ -603598,19 +604893,33 @@ ] ], "2d.text.font.parse.complex.html": [ - "30e937804f2db3893077219c209277d4bf43f3b0", + "69453437fe2998190c441198ce3086b36ad4e2d4", [ null, {} ] ], "2d.text.font.parse.complex.worker.js": [ - "28cb41c572a9df5184319c2dc2d742230b0a0c93", + "71d039cfacaa027eef8922ba62fd49422b8e9ee7", [ "html/canvas/offscreen/text/2d.text.font.parse.complex.worker.html", {} ] ], + "2d.text.font.parse.complex2.html": [ + "af94ac720a6d266d31f2455fb209424febaa55af", + [ + null, + {} + ] + ], + "2d.text.font.parse.complex2.worker.js": [ + "45575f8814092483fd2f3e09b071f75bb2a89d89", + [ + "html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.html", + {} + ] + ], "2d.text.font.parse.family.html": [ "989014fb37c786fa74b0f3c8ab1fcf3678b66d7c", [ @@ -603780,14 +605089,14 @@ ] ], "2d.text.measure.width.space.html": [ - "bff53f4f0e49f5ed3a1d6068460f29567f20ebc2", + "6ef4255b834ec995cc2d4cfb8455912ce6014719", [ null, {} ] ], "2d.text.measure.width.space.worker.js": [ - "83020b34f58a5af83023097aa8c56c203058b985", + "5ee4ee3ff74a000465a1d2fc4cc2f7bd8d931dec", [ "html/canvas/offscreen/text/2d.text.measure.width.space.worker.html", {} @@ -605675,6 +606984,79 @@ } ] ], + "iframe-coep-redirect.https.window.js": [ + "a9f6a1c88e2c5ca62bfa3a8186ee44f0b138f81d", + [ + "html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.html?1-4", + { + "script_metadata": [ + [ + "variant", + "?1-4" + ], + [ + "variant", + "?5-last" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" + ], + [ + "script", + "./resources/iframeTest.js" + ] + ] + } + ], + [ + "html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.html?5-last", + { + "script_metadata": [ + [ + "variant", + "?1-4" + ], + [ + "variant", + "?5-last" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" + ], + [ + "script", + "./resources/iframeTest.js" + ] + ] + } + ] + ], "iframe-coep-require-corp.https.window.js": [ "a70d4ff8fc4abc3e865400f2e5f2ba217ba9b9d9", [ @@ -608627,7 +610009,7 @@ ] ], "named_targeting.https.html": [ - "00eb6506e9b9b18bfb385bc4a0dd64dcd48a8b38", + "10929847ee64d1f47e78b1c34af55c963871c055", [ null, {} @@ -609845,7 +611227,7 @@ ] ], "002.html": [ - "c9a22ed6db3a9d05c0ebb6a627c29a390d6674cd", + "ddfa7c4ade67dac1675316db156319e180b11ac9", [ null, { @@ -609863,7 +611245,7 @@ ] ], "005.html": [ - "33ed630fe061955d94cf0b314d665f4277102226", + "047011d071d28b84e4ef3b0ee1b3830bc4a42215", [ null, { @@ -613490,7 +614872,7 @@ ] ], "event-propagate-disabled.tentative.html": [ - "9c8642d10f99b16d41401f28489104d4b4a651cf", + "e3dcd43a17ab2a4bd2b3807f699236d080b95f52", [ null, { @@ -613500,7 +614882,7 @@ ] ], "fieldset-event-propagation.tentative.html": [ - "11822e4dd48db047212833a48a82b60c7e9cae72", + "6d1a39c1de90b9a1dee36a1880b5fcfb51106ae9", [ null, { @@ -615044,8 +616426,15 @@ {} ] ], + "resource-selection-source-media-env-change.html": [ + "30d591ae6e7db18116eeb47dcf0be7c980112288", + [ + null, + {} + ] + ], "resource-selection-source-media.html": [ - "6332f0890dba075f7c8d465633d4a6f04b28fc3c", + "df5f47add2bfe2e48856d553072e013644c5effc", [ null, {} @@ -616279,13 +617668,6 @@ ] ] }, - "video_008.htm": [ - "c5cb25ed4c2085511b9fdb6b695537734bbc4317", - [ - null, - {} - ] - ], "video_loop_base.html": [ "9b5d69b31a033e226ffe4ada1e154293f33ec9a1", [ @@ -621566,7 +622948,7 @@ ] ], "name-attribute.tentative.html": [ - "f283633aab43af3cc854cc25d838f71705264a12", + "48980d0a5e257f7b17422ba4f8d931f9f58d7e0e", [ null, {} @@ -622491,7 +623873,7 @@ ] ], "popover-light-dismiss.html": [ - "0f206f1c700a5fd4def13f49ee927e4526fa1e56", + "009d10609b09bb84733dd379fef72bb068d78396", [ null, { @@ -622693,7 +624075,7 @@ ] ], "async_009.htm": [ - "501edda065a87dc706f545ec442484ad93264bb4", + "307aa4641283b42d0a0b09efcff69870678e3a1c", [ null, {} @@ -626637,14 +628019,14 @@ ] ], "disabled.html": [ - "f9600439298136e86a6c298e6ae002ab156b4234", + "8808675eb69b17c7763b407ea7ce4458e9e08fda", [ null, {} ] ], "enabled.html": [ - "1948343c1866263e2d3edb7b6c35e3ab4155f3f0", + "0ad0e1b402a2646d41f736271c65d413455a67e2", [ null, {} @@ -628507,14 +629889,14 @@ }, "clearing-the-stack-back-to-a-given-context": { "clearing-stack-back-to-a-table-body-context.html": [ - "4d45fa55520c990bfb085a880ed5e576c5a28919", + "07af33d01e26273017ec62c7be65ceb7afb92538", [ null, {} ] ], "clearing-stack-back-to-a-table-context.html": [ - "135540a5cbe5f8da1918a2eb0cb64fe0637f5b71", + "1bf9c5bba604c1bcbf3ced0f65cc1ac1133bc667", [ null, {} @@ -632292,6 +633674,24 @@ ] ] }, + "https-upgrades": { + "tentative": { + "fallback.sub.html": [ + "8fdf0dc8360f371644e5bf35656202535d1869da", + [ + null, + {} + ] + ], + "upgrade.https.sub.html": [ + "71a1fe1dde618163c259d13eb14797c22785c247", + [ + null, + {} + ] + ] + } + }, "idle-detection": { "basics.tentative.https.window.js": [ "32cb6204b99012abd26ba78d838929c8183a7c9a", @@ -635910,7 +637310,7 @@ ] ], "video-poster.html": [ - "fdc691819bd302e7f37226abe44abfe62a779d06", + "aaf2ce8a746b61d93398c21059ccb3d8040ed01c", [ null, {} @@ -640101,7 +641501,7 @@ ] ], "ImageCapture-grabFrame.html": [ - "bf5e9400a038f2432ce1bee3a3b345f3c82e5ea5", + "a9a6930aafc577d9d554491341473287b0454d79", [ null, {} @@ -640115,7 +641515,7 @@ ] ], "MediaStreamTrack-applyConstraints-fast.html": [ - "d80ab67321fe5a238efe5e917aba037d2a406981", + "38fabdcdfac2f898a2b2e485215611600b75433d", [ null, {} @@ -640158,7 +641558,7 @@ ] ], "MediaStreamTrack-getCapabilities-fast.html": [ - "55272d1499517a6fda0b7e06068928b4e1127b27", + "391dbb58f0a41d020a7b9c352b387f761fa726c7", [ null, {} @@ -640183,7 +641583,7 @@ ] ], "MediaStreamTrack-getSettings-fast.html": [ - "a4ecbe61181640f7f993f7f5c9cd3fd4e992f72c", + "91c308622cbc9270352df31b951a6b50eba26bc2", [ null, {} @@ -640199,21 +641599,21 @@ ] ], "detached-HTMLCanvasElement.html": [ - "e27950fc5edfea8357344f91198f0105775fef2c", + "9ccc51f7b1f28a34ce01fceddde938f801b1efb3", [ null, {} ] ], "getPhotoCapabilities.html": [ - "94962a03f4d372a70eae10b8722987bfaede0054", + "8b6ab891ff8cead9d99ac017db5065ed4dad709f", [ null, {} ] ], "getPhotoSettings.html": [ - "454037355942f8bd63afffa9578dfc02cd3fcfc5", + "04a7a5395fc72f13284af4b0e6f0a92b6b15737a", [ null, {} @@ -640250,14 +641650,14 @@ ] ], "takePhoto-reject.html": [ - "4deee97d7bc77859602aa25d51e547bd0290409b", + "fff36e1a3b8bcf46c6a6f3ac765a509f37c45a07", [ null, {} ] ], "takePhoto-with-PhotoSettings.html": [ - "58708612456fc669c5a445b76ad110fcbb0bb27d", + "2946e782d0b99166c0b0c928e6ea32da76c01562", [ null, {} @@ -640271,7 +641671,7 @@ ] ], "takePhoto.html": [ - "6b27f085a8a383657400c29189527b81d7264987", + "44586406c470cef6a591a3a94081fdfd0a90f7ea", [ null, {} @@ -640456,7 +641856,7 @@ ] ], "MediaRecorder-peerconnection.https.html": [ - "86c9d4f4a2621b766ac6b6e76621541a29e5588c", + "9d74ab59388c66102767795bece4b32285e2b11f", [ null, { @@ -640506,7 +641906,7 @@ ], "passthrough": { "MediaRecorder-passthrough.https.html": [ - "ceeae2eade89f80b3c13dd0970f99eed55e5aeea", + "6a8ebf50dd59c87eeef411566998bd5bb79ff9a9", [ null, { @@ -652316,6 +653716,43 @@ ] } }, + "private-aggregation": { + "shared-storage-permissions-policy-none.https.html": [ + "3593ed71ea6b1e755c8c5e71492eb46699496922", + [ + null, + {} + ] + ], + "shared-storage-surface-failure-2.https.html": [ + "b39ecd8d74b56acb418d77e61561edf4573e9502", + [ + null, + {} + ] + ], + "shared-storage-surface-failure.https.html": [ + "9dc62b1bb714b0a4c119b913bbf8611282680450", + [ + null, + {} + ] + ], + "shared-storage-surface-success-2.https.html": [ + "8203fd11eaa325c9c4e4bf294676287a4e86453b", + [ + null, + {} + ] + ], + "shared-storage-surface-success.https.html": [ + "7012180c713f19d4645a898119327586f142eca8", + [ + null, + {} + ] + ] + }, "private-click-measurement": { "idlharness.window.js": [ "1d0539a7bf56d071d247cded4ed2f4555b34bf6f", @@ -668412,7 +669849,7 @@ "scroll-animations": { "css": { "animation-duration-auto.tentative.html": [ - "cfb7cf2c1e4aad9ba103833199a4440e9381bc74", + "01982859137855c7f6c3c5011b013ea715c9c4ea", [ null, {} @@ -668433,7 +669870,7 @@ ] ], "animation-shorthand.html": [ - "a17dd431264453f52f69fb8d3f55a1413f0680ba", + "b7d5947a212b67a5e9a0ce1b53785b562e622554", [ null, {} @@ -674639,7 +676076,7 @@ ] ], "declarative-with-disabled-shadow.tentative.html": [ - "849bffa5a7f6e8b9417f2a030b36ff408c117256", + "bcf53403addb673b609ecbc2a4299d84a701fc3e", [ null, {} @@ -675152,7 +676589,7 @@ ] ], "focus-reverse-unassignable-slot.html": [ - "2eec3acc88a11915e1bcc78d57b2e53eb117b4f1", + "5d7f332b854b201abd0b50162f21f63e92a61ee1", [ null, { @@ -686670,6 +688107,13 @@ ] }, "scripted": { + "script-invalid-script-type.html": [ + "9602dd525bd4d2b77b8d4ffadebef9e568a98c77", + [ + null, + {} + ] + ], "script-runs-in-shadow-tree.html": [ "9693db333ff18c1e6f39515be29c77d551e4e2fe", [ @@ -692360,7 +693804,7 @@ ] ], "request-video-frame-callback-during-xr-session.https.html": [ - "34561ee5fd065944d133fa5d314b6ced2f79473e", + "7afbabcee0b7760d852f4e0139f4693b7f402190", [ null, {} @@ -692381,7 +693825,7 @@ ] ], "request-video-frame-callback-webrtc.https.html": [ - "6a1bdae19efdd0f0eec2d1d07ca9f41435a55659", + "22c90f8460500dd126b133caa177b92332a310d5", [ null, {} @@ -692598,7 +694042,7 @@ ] ], "basic.html": [ - "5cb838647015de9ea295e60184b2300bbb718bfe", + "5fbe1fe2aa50cc5b00a59280286c471e69049eef", [ null, { @@ -699367,7 +700811,7 @@ ] ], "audiocontext-suspend-resume-close.html": [ - "192317dda26968269f35f000adfec9c0450236b1", + "ea93cab96a63e114d8b6399d22278a8f2b945039", [ null, {} @@ -704208,7 +705652,7 @@ ] ], "videoFrame-construction.crossOriginSource.sub.html": [ - "62f2bd934f1d09afb4be1314048fe773db9239b3", + "81906d33b7992620f3319395ae2f3003c70bf2ac", [ null, {} @@ -709132,14 +710576,14 @@ ] ], "simplecall-no-ssrcs.https.html": [ - "f2e20846234bb4703d23c876f468994dcd74be30", + "b47cd30eaf4e5db337a1fb91e34e9ede16ee5421", [ null, {} ] ], "simplecall.https.html": [ - "dbf6b9a5083a87feeeb3d93befa0a06017be8553", + "28c0c5c38bb69a9e1bd2662d04b55200ddee1cdd", [ null, {} @@ -720030,6 +721474,393 @@ ] ] }, + "send-many-64K-messages-with-backpressure.any.js": [ + "e93231f2df9e491f4a98d36cf21306f7bba12283", + [ + "websockets/send-many-64K-messages-with-backpressure.any.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.html?wpt_flags=h2", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.html?wss", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.serviceworker.html?wpt_flags=h2", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.serviceworker.html?wss", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.sharedworker.html?wpt_flags=h2", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.sharedworker.html?wss", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.worker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.worker.html?wpt_flags=h2", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ], + [ + "websockets/send-many-64K-messages-with-backpressure.any.worker.html?wss", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "constants.sub.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wss" + ], + [ + "variant", + "?wpt_flags=h2" + ] + ], + "timeout": "long" + } + ] + ], "stream": { "tentative": { "abort.any.js": [ @@ -724427,7 +726258,7 @@ ] ], "webxr_permissions_policy.https.html": [ - "9146dd88f05aebd6ed991a95ede3652a669f1a35", + "e47677c8e2ce354c7e55fcb505be5c86fbac1db8", [ null, {} @@ -724889,9 +726720,39 @@ ] ] }, - "window-placement": { + "window-management": { + "multi-screen-fullscreen-companion.tentative.https.html": [ + "a4b09f3d5a8100cc8e9e21ce74678ecc84e7ca39", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], + "multi-screen-fullscreen-enter.tentative.https.html": [ + "b67907807b4f71c8430241201e0b0aebe739b017", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], + "multi-screen-fullscreen-move.tentative.https.html": [ + "b91ee4cdc4b619b249ea73841a501d476f6e640f", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], "multi-screen-window-open.tentative.https.html": [ - "c453107d568e79fd5a4a8cfb96e46bf1dc4a2a98", + "708e571c27f950ed414d5e5ea9981bfdec93880a", [ null, { @@ -725699,7 +727560,7 @@ ] ], "Worker_cross_origin_security_err.htm": [ - "8417adbefdad83678b06cdb076696e19b70c32a0", + "a3e49df79ad41267ca1838101dd4132194da5549", [ null, { @@ -725921,7 +727782,7 @@ ] ], "same-origin.html": [ - "0bfc503d06f0231a778735b6714f9ec2b7652e7e", + "ad464ad50d13d59a12dd6780f33f7f59702a3043", [ null, { @@ -726016,7 +727877,7 @@ ] ], "same-origin.html": [ - "cdc36c17183fb161e281865f160ab27e35f0ed1e", + "7c86319c14d4842afb66ebfeb8735e1771f3af57", [ null, { @@ -727040,7 +728901,7 @@ ] ], "dedicated-worker-import-failure.html": [ - "4c705e73251f41d8b7ff796cda5a5629968ec130", + "d4e104760e0cd271cb49c849a0415ccca6e5871a", [ null, {} @@ -749273,7 +751134,7 @@ ] }, "background-clip-content-box.html": [ - "7a0248d3dff3d3cc2bc11f9a0c03a9bac7e9c273", + "5dc2b477d32b0fea71a34277a1ec4ee0bed79f36", [ null, {} @@ -749540,34 +751401,6 @@ {} ] ], - "border-image-1.html": [ - "2318f6c1666bc6d7c7d45bb1691082fb73c86cad", - [ - null, - {} - ] - ], - "border-image-10.html": [ - "4fa2c2a2f8a7bde9bb31aa43d841c35acde1c1d8", - [ - null, - {} - ] - ], - "border-image-11.html": [ - "cc662698b702e081a57daff72cd91f87a0bb5df3", - [ - null, - {} - ] - ], - "border-image-12.html": [ - "d5cacb027ead8d4b0fde79bcbbd1e6f2d07af491", - [ - null, - {} - ] - ], "border-image-13.html": [ "52095cf289f8a46d348d08611e52c12e1731e676", [ @@ -749596,48 +751429,6 @@ {} ] ], - "border-image-2.html": [ - "b6936125b142f705ae6dd2b2ae24f55dcbdbeb22", - [ - null, - {} - ] - ], - "border-image-3.html": [ - "d4f1524112ea4516d626b4ad6f3742bdbb96ad01", - [ - null, - {} - ] - ], - "border-image-4.html": [ - "619b677e114f3e8f842d4539b486e5b56953653f", - [ - null, - {} - ] - ], - "border-image-7.html": [ - "4142dcb427c3ffdd5a0458d20ab7c1c0d3528630", - [ - null, - {} - ] - ], - "border-image-8.html": [ - "26eaf68c208abbef85077b1a0bd4ed8eb4347867", - [ - null, - {} - ] - ], - "border-image-9.html": [ - "5d805ec7527111006a0a6b24a71ef85606d1a91e", - [ - null, - {} - ] - ], "border-image-image-type-001.htm": [ "ebc152fe74bd165b68cda0953ce3ef5545aa998d", [ @@ -753414,7 +755205,7 @@ "browsing_context": { "capture_screenshot": { "capture_screenshot.py": [ - "f6e4c34d8d103eb4d0c67d0b001ae2fecc2ec709", + "79cc5025ab9fd99890b143a3c2d0f1eab89b9cc2", [ null, {} @@ -753462,7 +755253,7 @@ }, "context_created": { "context_created.py": [ - "9a0c74cbb851ed377c8155e9fc013441453a42af", + "080ef581b33da81059b558f5bbabd173d10e4ad4", [ null, {} @@ -753607,7 +755398,7 @@ }, "print": { "background.py": [ - "b527aef3827f4e574bd53d7542cb4061bcb3e903", + "1b854742eacf25458b3220532eec2d996aed5e37", [ null, {} @@ -753621,7 +755412,7 @@ ] ], "invalid.py": [ - "114aeb62dcc27474a0869c0964b8dca2e95c8053", + "7193ecd017269de841fb02d12d4e22ae2562d127", [ null, {} @@ -753637,14 +755428,14 @@ ] ], "orientation.py": [ - "4dee803bc8b099b0cb5757f671c577c5b60ab373", + "2e410d74302c9fb4fafe770d860cba3cb9a5f112", [ null, {} ] ], "page.py": [ - "b66fb9881e5c8bbe530d2056e959d76a0add6e44", + "ef1c07d142fae404eed9a52a5d891d3496bf83eb", [ null, {} @@ -753686,7 +755477,7 @@ }, "errors": { "errors.py": [ - "0d6e9ea0e15f40ce2c04da8bae9e6c5e6c699d3f", + "b54f26b8c96997de5564d7398a7be21b3311c52f", [ null, {} @@ -753823,14 +755614,14 @@ ] ], "event_buffer.py": [ - "99a95df104951a2760d5a6a2f13e887d277f25aa", + "a5f038865c74f9a39f18d9919e474eead1de0f90", [ null, {} ] ], "javascript.py": [ - "fe8a9b6b58a0b576f2f4e6a9d735340bd1f92940", + "f687f76c0e2fa1a2b5292e24dc4eab2940f3f899", [ null, {} @@ -753862,7 +755653,7 @@ "network": { "before_request_sent": { "before_request_sent.py": [ - "39e5b5a3cfdaaba9a39cae5e6fdb73ae3d09a673", + "d1a9269729f195356e1b24ec090c05a567e4d187", [ null, {} @@ -753871,7 +755662,7 @@ }, "combined": { "network_events.py": [ - "7f8f134af0d6688f4ee2055a75005ddbeca7faa7", + "f4af23bfd2f58679a8a044df87fe48a5f5e7e5bc", [ null, {} @@ -753880,14 +755671,14 @@ }, "response_completed": { "response_completed.py": [ - "1df23cda5946b6321640fad7763b3e3eecbec946", + "1043f52cb72a82dcfc9edcd8c1e9998082dd178c", [ null, {} ] ], "response_completed_cached.py": [ - "eb344885087b2ab28794589be5e150bdc351d691", + "ea1366cb9676c135a6dd330183a4a346ebf01e62", [ null, {} @@ -753896,14 +755687,14 @@ }, "response_started": { "response_started.py": [ - "e3fd7a4d35cdada7cd829e76d71cb0e28d0168a3", + "2d6c1c835439298bdefd446758730f822cfa0cac", [ null, {} ] ], "response_started_cached.py": [ - "15373b7107bcbe24d429133999adf6b6d42e6d77", + "6e0a7431c6bf867853f69f370f8c667529646fcf", [ null, {} @@ -754007,7 +755798,7 @@ ] ], "result_node.py": [ - "378f6bed92704591f73d1be7de445d579a035c1b", + "a2359b164ebbd6e3ef0abba42ad43106bc38e2d9", [ null, {} @@ -754132,7 +755923,7 @@ ] ], "result_node.py": [ - "ae07b940d056aefb264aac8755ad891d6a23bda9", + "89ce95ed21da1088334e11238c296a565d27e498", [ null, {} @@ -754233,7 +756024,7 @@ "session": { "new": { "connect.py": [ - "7118f77ea0f0d62ed6f1960e19b8ec840491e9d7", + "d5872cd3ba542c92f70bd7280598637f903e5aa2", [ null, {} @@ -754242,7 +756033,7 @@ }, "status": { "status.py": [ - "eee102fee71f7de9e13740938d2fb8cc23e6b94d", + "13d131bfec5dfc7116a60ab09c2f1354405ef73a", [ null, {} @@ -754251,21 +756042,21 @@ }, "subscribe": { "contexts.py": [ - "785542fee5bf555fd8fd71c08c17b0a071ffb615", + "111e7ef1031cfe5471519eb444620d3412ee5d21", [ null, {} ] ], "events.py": [ - "ee00e35a64642b9cbb57ed232bb3b8f7d473b7df", + "2953aafe03fa5c49a736876a720f902b2769e9ab", [ null, {} ] ], "invalid.py": [ - "005574b03ca265a73e5569c27d08f9f456347b5b", + "056f6827281e9e0a56b01f76ca296133f38fadf4", [ null, {} @@ -754274,21 +756065,21 @@ }, "unsubscribe": { "contexts.py": [ - "98b119d82d14b0b8b6868ed87a10c1a397accb6b", + "ec38df3beded08754ab9bbcbf9aa5725666f7a1f", [ null, {} ] ], "events.py": [ - "52a293fe1e4ecb307de2f23462d083807f5b083c", + "728518768833ef08c37d31e2436da96ef696f4b9", [ null, {} ] ], "invalid.py": [ - "7fd25546e3f1a8ab64ce1f359c5bd40e30b2cfab", + "e6f3050da318755b037d9e828cc77cfad611912e", [ null, {} @@ -754327,7 +756118,7 @@ }, "back": { "back.py": [ - "62434323e0ad5339a861d0752d29f7d1f95c81cc", + "bc97a9ed6157e3003ef19889cb9695cb487d1807", [ null, {} @@ -754479,7 +756270,7 @@ ] ], "navigate.py": [ - "4d1c48235ca176554375ebd26fb4d96aabad4d4d", + "96883ad3b640f2e00b9ce0dae4dab06872ce3ba4", [ null, {} @@ -754585,7 +756376,7 @@ ] ], "collections.py": [ - "5dfbf2059470a2f17604a0a3d9bf47f905bca82e", + "2b57120a4cc699b65f639891ab91053a3b07fa5c", [ null, {} @@ -754652,7 +756443,7 @@ ] ], "collections.py": [ - "ec5d5ee1e32beb19b799b633534ec31fcfb0c7ad", + "939eb8916fb9203b7fa4c15af151085e2506fbcf", [ null, {} @@ -754827,7 +756618,7 @@ }, "forward": { "forward.py": [ - "f27be403f9e95bd2359d5ae6224f6ae2708ff7c8", + "7945f188309a08412f26aba17c3ae405c53d50a7", [ null, {} @@ -755145,7 +756936,7 @@ }, "get_window_handle": { "get.py": [ - "68441da5ef8460bb472beecd2e31a6cc34f0faa3", + "50ff0d306b50b7ae9d140cd18c898a4ac8f4796e", [ null, {} @@ -755309,7 +757100,7 @@ ] ], "navigate.py": [ - "d61377af275902c48083d3d84b35c3bba30bc34e", + "a9ff3f6a05890201bd354d6d37312ce52c20c083", [ null, {} @@ -755595,21 +757386,21 @@ }, "print": { "background.py": [ - "22b392db2e3c51dbf68fe616bb3340535adf53f8", + "4f2f85980bae434c04f536d2ea7a2e8a3c6065bf", [ null, {} ] ], "orientation.py": [ - "c2afacf94fb45adb7d163fd45974416b6a9fcc25", + "107cf380df6044d9b7fd335691efa7bd6b3181a1", [ null, {} ] ], "printcmd.py": [ - "f3fe50bd92d6a7dc4f8bf0c2290f2ecebc0dd1d7", + "aec7769c3e890406508544b3d84410abf6a7a84f", [ null, { @@ -755618,7 +757409,7 @@ ] ], "user_prompts.py": [ - "fb13ec2d65a25038641a42a67e48237fdef60c10", + "ade1c38a5c473037df15352ab119db57a728822c", [ null, { @@ -755629,7 +757420,7 @@ }, "refresh": { "refresh.py": [ - "b3647130c77ec6c0c84514ff9f599b9a872303e7", + "93a71bbf8b10f1fa2f18824c7ca512dcc011cf26", [ null, {} diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini new file mode 100644 index 00000000000..0bb304465a7 --- /dev/null +++ b/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini @@ -0,0 +1,27 @@ +[animation-duration-computed.html] + [Property animation-duration value 'auto'] + expected: FAIL + + [Property animation-duration value 'auto, auto'] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:auto] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:auto, auto] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:--t] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:--t, --t2] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:none] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:scroll()] + expected: FAIL + + [Resolved value of animation-duration:auto with animation-timeline:view()] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-002.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-002.html.ini new file mode 100644 index 00000000000..d695ff0e521 --- /dev/null +++ b/tests/wpt/metadata/css/css-backgrounds/border-image-002.html.ini @@ -0,0 +1,2 @@ +[border-image-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-003.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-003.html.ini new file mode 100644 index 00000000000..182fa949db8 --- /dev/null +++ b/tests/wpt/metadata/css/css-backgrounds/border-image-003.html.ini @@ -0,0 +1,2 @@ +[border-image-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-004.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-004.html.ini new file mode 100644 index 00000000000..e4f30d04308 --- /dev/null +++ b/tests/wpt/metadata/css/css-backgrounds/border-image-004.html.ini @@ -0,0 +1,2 @@ +[border-image-004.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-006.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-006.html.ini new file mode 100644 index 00000000000..14f85783493 --- /dev/null +++ b/tests/wpt/metadata/css/css-backgrounds/border-image-006.html.ini @@ -0,0 +1,2 @@ +[border-image-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/border-image-012.html.ini b/tests/wpt/metadata/css/css-backgrounds/border-image-012.html.ini new file mode 100644 index 00000000000..126a8510576 --- /dev/null +++ b/tests/wpt/metadata/css/css-backgrounds/border-image-012.html.ini @@ -0,0 +1,2 @@ +[border-image-012.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini b/tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini index 206453f3c7a..4d2a4b9f6d7 100644 --- a/tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini +++ b/tests/wpt/metadata/css/css-backgrounds/parsing/background-valid.html.ini @@ -5,9 +5,6 @@ [e.style['background'\] = "none" should set background-color] expected: FAIL - [e.style['background'\] = "none" should set background-position] - expected: FAIL - [e.style['background'\] = "url(\\"https://example.com/\\") 1px 2px / 3px 4px space round local padding-box content-box, rgb(5, 6, 7) url(\\"https://example.com/\\") 1px 2px / 3px 4px space round local padding-box content-box" should set background-attachment] expected: FAIL diff --git a/tests/wpt/metadata/css/css-position/overlay/overlay-transition-backdrop.html.ini b/tests/wpt/metadata/css/css-position/overlay/overlay-transition-backdrop.html.ini new file mode 100644 index 00000000000..f6389e9308d --- /dev/null +++ b/tests/wpt/metadata/css/css-position/overlay/overlay-transition-backdrop.html.ini @@ -0,0 +1,2 @@ +[overlay-transition-backdrop.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/text-stroke-width-subpixel.html.ini b/tests/wpt/metadata/css/css-text/text-stroke-width-subpixel.html.ini new file mode 100644 index 00000000000..b60ebc9df3a --- /dev/null +++ b/tests/wpt/metadata/css/css-text/text-stroke-width-subpixel.html.ini @@ -0,0 +1,2 @@ +[text-stroke-width-subpixel.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini index 5df2147d428..9b57dd697c9 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/transform-interpolation-004.html.ini @@ -8,33 +8,15 @@ [Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (1) should be [translate(13px, 90%)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.25) should be [translate3d(7px, -6px, 11px) skewX(1.25rad) matrix3d(1, 0, 0, 0, 0, 1.25, 0, 0, 0, 0, 1, -0.001875, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateZ(2em)\] to [translateZ(3em)\] at (0.75) should be [translateZ(2.75em)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (-1) should be [translate3d(12px, 4px, 16px) skewX(0rad) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.005, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (-1) should be [translate3d(12px, 4px, 16px) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.003, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 200, 300, 1)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (-1) should be [translate3d(12px, 4px, 16px) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.003, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0) should be [matrix3d(1, 0, 0, 0, 1.5574077246549023, 1, 0, 0, -0.02, 0.01, 0.97, -0.0025, 8, -4, 12, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (0) should be [translateX(12px) translateY(70%) translateZ(2em)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (2) should be [matrix3d(1, 0, 0, 0, -11.227342763749263, 3, 0, 0, 0.021237113402061854, -0.010618556701030927, 1.03, -0.0014653608247422677, -8, 4, -12, 0.9861443298969074)\]] - expected: FAIL - [CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 400, 600, 1)\]] expected: FAIL @@ -44,12 +26,6 @@ [Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (0) should be [skewX(10rad) translateY(70%)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.25) should be [translate3d(7px, -6px, 11px) skewX(1.25rad) matrix3d(1, 0, 0, 0, 0, 1.25, 0, 0, 0, 0, 1, -0.001875, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0) should be [translate3d(8px, -4px, 12px) matrix3d(1, 0, 0, 0, 1.55741, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (0.75) should be [translate(12.75px, 85%)\]] expected: FAIL @@ -59,18 +35,9 @@ [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (2) should be [translate3d(0px, -20px, 4px) matrix3d(1, 0, 0, 0, -4.67222, 3, 0, 0, 0, 0, 1, -0.0015, 0, 0, 0, 1)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 1.1186572632293585, 1.25, 0, 0, -0.0151159793814433, 0.00755798969072165, 0.9775, -0.002378247422680413, 6, -3, 9, 1.0012989690721648)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 1.1186572632293585, 1.25, 0, 0, -0.0151159793814433, 0.00755798969072165, 0.9775, -0.002378247422680413, 6, -3, 9, 1.0012989690721648)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (2) should be [translate3d(0px, -20px, 4px) skewX(3rad) matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0.0025, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -0.7525665307288518, 1.75, 0, 0, -0.005115979381443298, 0.002557989690721649, 0.9924999999999999, -0.002128247422680412, 2, -1, 3, 1.001298969072165)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (-1) should be [translate3d(12px, 4px, 16px) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.003, 0, 0, 0, 1)\]] expected: FAIL @@ -83,27 +50,15 @@ [CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (1) should be [matrix(1, 0, 0, 1, 0, 0) \]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.25) should be [translate3d(7px, -6px, 11px) skewX(1.25rad) matrix3d(1, 0, 0, 0, 0, 1.25, 0, 0, 0, 0, 1, -0.001875, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (-1) should be [skewX(0rad) translateY(50%)\]] expected: FAIL [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (2) should be [matrix3d(1, 0, 0, 0, -11.227342763749263, 3, 0, 0, 0.021237113402061854, -0.010618556701030927, 1.03, -0.0014653608247422677, -8, 4, -12, 0.9861443298969074)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 0, 0, 0, -0.03876288659793814, 0.01938144329896907, 0.94, -0.0029653608247422686, 16, -8, 24, 0.986144329896907)\]] - expected: FAIL - [Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (0.25) should be [translateX(12.25px)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.75) should be [translate3d(5px, -10px, 9px) skewX(1.75rad) matrix3d(1, 0, 0, 0, 0, 1.75, 0, 0, 0, 0, 1, -0.000625, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0.621795827675797, 1, 0, 0, 0, 0, 1, 0, 2, -1, 3, 1)\]] - expected: FAIL - [CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 75, 150, 225, 1)\]] expected: FAIL @@ -113,54 +68,27 @@ [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0) should be [matrix(1, 0, 1.5574077246549023, 1, 0, 0)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (2) should be [matrix3d(1, 0, 0, 0, -11.227342763749263, 3, 0, 0, 0.021237113402061854, -0.010618556701030927, 1.03, -0.0014653608247422677, -8, 4, -12, 0.9861443298969074)\]] - expected: FAIL - [Web Animations: property <transform> from [translateZ(2em)\] to [translateZ(3em)\] at (0) should be [translateZ(2em)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 0, 0, 0, -0.03876288659793814, 0.01938144329896907, 0.94, -0.0029653608247422686, 16, -8, 24, 0.986144329896907)\]] - expected: FAIL - - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (1) should be [translate3d(4px, -12px, 8px) matrix3d(1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]] - expected: FAIL - [CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.75) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 25, 50, 75, 1)\]] expected: FAIL [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0) should be [matrix(1, 0, 1.5574077246549023, 1, 0, 0)\]] expected: FAIL - [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 1, 0, 0, 0, 0, 1, 0, 8, -4, 12, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(12px, 70%, 2em)\] to [translate3d(13px, 90%, 3em)\] at (-1) should be [translate3d(11px, 50%, 1em)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (2) should be [translate3d(0px, -20px, 4px) matrix3d(1, 0, 0, 0, -4.67222, 3, 0, 0, 0, 0, 1, -0.0015, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0) should be [matrix(1, 0, 1.5574077246549023, 1, 0, 0)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0) should be [translate3d(8px, -4px, 12px) skewX(1rad) matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (1) should be [translateX(13px)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -1.2494279662824135, 1, 0, 0, 0, 0, 1, 0, 6, -3, 9, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (2) should be [matrix3d(1, 0, 0, 0, -5.9274874511779405, 1, 0, 0, 0, 0, 1, 0, 16, -8, 24, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (2) should be [translate3d(0px, -20px, 4px) skewX(3rad) matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0.0025, 0, 0, 0, 1)\]] expected: FAIL @@ -176,9 +104,6 @@ [Web Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0.621795827675797, 1, 0, 0, 0, 0, 1, 0, 2, -1, 3, 1)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (-1) should be [translate3d(12px, 4px, 16px) skewX(0rad) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.005, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateZ(2em)\] to [translateZ(3em)\] at (-1) should be [translateZ(1em)\]] expected: FAIL @@ -191,9 +116,6 @@ [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0) should be [matrix(1, 0, 1.5574077246549023, 1, 0, 0)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.75) should be [translate3d(5px, -10px, 9px) matrix3d(1, 0, 0, 0, 0.681366, 1.75, 0, 0, 0, 0, 1, -0.002125, 0, 0, 0, 1)\]] expected: FAIL @@ -209,24 +131,15 @@ [Web Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (-1) should be [matrix3d(1, 0, 0, 0, 5.2998553125713235, 1, 0, 0, 0, 0, 1, 0, -8, 4, -12, 1)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0) should be [translate3d(8px, -4px, 12px) matrix3d(1, 0, 0, 0, 1.55741, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]] - expected: FAIL - [CSS Transitions: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (1) should be [matrix(1, 0, 0, 1, 0, 0) \]] expected: FAIL [Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (0.75) should be [skewX(17.5rad) translateY(85%)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0) should be [matrix3d(1, 0, 0, 0, 1.5574077246549023, 1, 0, 0, -0.02, 0.01, 0.97, -0.0025, 8, -4, 12, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (1) should be [translateX(13px) translateY(90%) translateZ(3em)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (2) should be [translate3d(0px, -20px, 4px) skewX(3rad) matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0.0025, 0, 0, 0, 1)\]] - expected: FAIL - [CSS Transitions: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 200, 300, 1)\]] expected: FAIL @@ -239,63 +152,27 @@ [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.75) should be [translate3d(5px, -10px, 9px) skewX(1.75rad) matrix3d(1, 0, 0, 0, 0, 1.75, 0, 0, 0, 0, 1, -0.000625, 0, 0, 0, 1)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 1.1186572632293585, 1.25, 0, 0, -0.0151159793814433, 0.00755798969072165, 0.9775, -0.002378247422680413, 6, -3, 9, 1.0012989690721648)\]] - expected: FAIL - [Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (-1) should be [translate(11px, 50%)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0.621795827675797, 1, 0, 0, 0, 0, 1, 0, 2, -1, 3, 1)\]] - expected: FAIL - - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (2) should be [translate3d(0px, -20px, 4px) matrix3d(1, 0, 0, 0, -4.67222, 3, 0, 0, 0, 0, 1, -0.0015, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (-1) should be [translate3d(12px, 4px, 16px) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.003, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -0.7525665307288518, 1.75, 0, 0, -0.005115979381443298, 0.002557989690721649, 0.9924999999999999, -0.002128247422680412, 2, -1, 3, 1.001298969072165)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(12px, 70%, 2em)\] to [translate3d(13px, 90%, 3em)\] at (0) should be [translate3d(12px, 70%, 2em)\]] expected: FAIL [Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (2) should be [translateX(14px) translateY(110%) translateZ(4em)\]] expected: FAIL - [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 1, 0, 0, 0, 0, 1, 0, 8, -4, 12, 1)\]] - expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.75) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 25, 50, 75, 1)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 1, 0, 0, 0, 0, 1, 0, 8, -4, 12, 1)\]] - expected: FAIL - - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (1) should be [translate3d(4px, -12px, 8px) matrix3d(1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (2) should be [translateX(14px)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.25) should be [translate3d(7px, -6px, 11px) matrix3d(1, 0, 0, 0, 1.46007, 1.25, 0, 0, 0, 0, 1, -0.002375, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0) should be [translate3d(8px, -4px, 12px) matrix3d(1, 0, 0, 0, 1.55741, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]] expected: FAIL - [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (-1) should be [matrix3d(1, 0, 0, 0, 5.2998553125713235, 1, 0, 0, 0, 0, 1, 0, -8, 4, -12, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -0.7525665307288518, 1.75, 0, 0, -0.005115979381443298, 0.002557989690721649, 0.9924999999999999, -0.002128247422680412, 2, -1, 3, 1.001298969072165)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.75) should be [translate3d(5px, -10px, 9px) matrix3d(1, 0, 0, 0, 0.681366, 1.75, 0, 0, 0, 0, 1, -0.002125, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.25) should be [translate3d(7px, -6px, 11px) matrix3d(1, 0, 0, 0, 1.46007, 1.25, 0, 0, 0, 0, 1, -0.002375, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (0.25) should be [skewX(12.5rad) translateY(75%)\]] expected: FAIL @@ -308,66 +185,36 @@ [CSS Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (2) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -100, -200, -300, 1)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.75) should be [translate3d(5px, -10px, 9px) matrix3d(1, 0, 0, 0, 0.681366, 1.75, 0, 0, 0, 0, 1, -0.002125, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateY(70%)\] to [translateY(90%)\] at (-1) should be [translateY(50%)\]] expected: FAIL [Web Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.75) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 25, 50, 75, 1)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (2) should be [matrix3d(1, 0, 0, 0, -11.227342763749263, 3, 0, 0, 0.021237113402061854, -0.010618556701030927, 1.03, -0.0014653608247422677, -8, 4, -12, 0.9861443298969074)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (1) should be [matrix(1, 0, 0, 1, 0, 0) \]] expected: FAIL [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.25) should be [translate3d(7px, -6px, 11px) matrix3d(1, 0, 0, 0, 1.46007, 1.25, 0, 0, 0, 0, 1, -0.002375, 0, 0, 0, 1)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0) should be [translate3d(8px, -4px, 12px) skewX(1rad) matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (2) should be [translate(14px, 110%)\]] expected: FAIL - [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (2) should be [matrix3d(1, 0, 0, 0, -5.9274874511779405, 1, 0, 0, 0, 0, 1, 0, 16, -8, 24, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 1, 0, 0, 0, 0, 1, 0, 8, -4, 12, 1)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.75) should be [translate3d(5px, -10px, 9px) skewX(1.75rad) matrix3d(1, 0, 0, 0, 0, 1.75, 0, 0, 0, 0, 1, -0.000625, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate(12px, 70%)\] to [translate(13px, 90%)\] at (0) should be [translate(12px, 70%)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0) should be [translate3d(8px, -4px, 12px) matrix3d(1, 0, 0, 0, 1.55741, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.75) should be [translate3d(5px, -10px, 9px) matrix3d(1, 0, 0, 0, 0.681366, 1.75, 0, 0, 0, 0, 1, -0.002125, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateY(70%)\] to [translateY(90%)\] at (1) should be [translateY(90%)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 1.1186572632293585, 1.25, 0, 0, -0.0151159793814433, 0.00755798969072165, 0.9775, -0.002378247422680413, 6, -3, 9, 1.0012989690721648)\]] - expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (1) should be [translate3d(4px, -12px, 8px) skewX(2rad) matrix(1, 0, 0, 2, 0, 0)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0) should be [matrix3d(1, 0, 0, 0, 1.5574077246549023, 1, 0, 0, -0.02, 0.01, 0.97, -0.0025, 8, -4, 12, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (-1) should be [translateX(11px)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0) should be [translate3d(8px, -4px, 12px) skewX(1rad) matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -0.0025, 0, 0, 0, 1)\]] - expected: FAIL - [CSS Transitions: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 400, 600, 1)\]] expected: FAIL @@ -377,15 +224,9 @@ [Web Animations: property <transform> from [translateZ(2em)\] to [translateZ(3em)\] at (1) should be [translateZ(3em)\]] expected: FAIL - [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -1.2494279662824135, 1, 0, 0, 0, 0, 1, 0, 6, -3, 9, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (-1) should be [translate3d(12px, 4px, 16px) skewX(0rad) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.005, 0, 0, 0, 1)\]] expected: FAIL - [CSS Animations: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -1.2494279662824135, 1, 0, 0, 0, 0, 1, 0, 6, -3, 9, 1)\]] - expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (1) should be [translate3d(4px, -12px, 8px) skewX(2rad) matrix(1, 0, 0, 2, 0, 0)\]] expected: FAIL @@ -404,30 +245,9 @@ [Web Animations: property <transform> from [translate3d(12px, 70%, 2em)\] to [translate3d(13px, 90%, 3em)\] at (0.75) should be [translate3d(12.75px, 85%, 2.75em)\]] expected: FAIL - [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0.621795827675797, 1, 0, 0, 0, 0, 1, 0, 2, -1, 3, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (1) should be [translate3d(4px, -12px, 8px) skewX(2rad) matrix(1, 0, 0, 2, 0, 0)\]] expected: FAIL - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (0.25) should be [translate3d(7px, -6px, 11px) matrix3d(1, 0, 0, 0, 1.46007, 1.25, 0, 0, 0, 0, 1, -0.002375, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (2) should be [translate3d(0px, -20px, 4px) skewX(3rad) matrix3d(1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0.0025, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (2) should be [translate3d(0px, -20px, 4px) matrix3d(1, 0, 0, 0, -4.67222, 3, 0, 0, 0, 0, 1, -0.0015, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (-1) should be [translate3d(12px, 4px, 16px) skewX(0rad) matrix3d(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -0.005, 0, 0, 0, 1)\]] - expected: FAIL - - [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (2) should be [matrix3d(1, 0, 0, 0, -5.9274874511779405, 1, 0, 0, 0, 0, 1, 0, 16, -8, 24, 1)\]] - expected: FAIL - - [CSS Transitions: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (-1) should be [matrix3d(1, 0, 0, 0, 5.2998553125713235, 1, 0, 0, 0, 0, 1, 0, -8, 4, -12, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0) should be [matrix3d(1, 0, 0, 0, 1.5574077246549023, 1, 0, 0, -0.02, 0.01, 0.97, -0.0025, 8, -4, 12, 1)\]] expected: FAIL @@ -443,15 +263,6 @@ [CSS Transitions: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0.25) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 75, 150, 225, 1)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (0.75) should be [matrix3d(1, 0, 0, 0, -0.7525665307288518, 1.75, 0, 0, -0.005115979381443298, 0.002557989690721649, 0.9924999999999999, -0.002128247422680412, 2, -1, 3, 1.001298969072165)\]] - expected: FAIL - - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (-1) should be [matrix3d(1, 0, 0, 0, 0, 0, 0, 0, -0.03876288659793814, 0.01938144329896907, 0.94, -0.0029653608247422686, 16, -8, 24, 0.986144329896907)\]] - expected: FAIL - - [CSS Animations: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) scaleY(2) perspective(500px)\] at (1) should be [translate3d(4px, -12px, 8px) matrix3d(1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateY(70%)\] to [translateY(90%)\] at (0) should be [translateY(70%)\]] expected: FAIL @@ -464,27 +275,17 @@ [Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (0.25) should be [translateX(12.25px) translateY(75%) translateZ(2.25em)\]] expected: FAIL - [CSS Transitions: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [translate3d(4px, -12px, 8px) skewX(2rad) scaleY(2)\] at (0.75) should be [translate3d(5px, -10px, 9px) skewX(1.75rad) matrix3d(1, 0, 0, 0, 0, 1.75, 0, 0, 0, 0, 1, -0.000625, 0, 0, 0, 1)\]] - expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3D(100px, 200px, 300px)\] to [none\] at (0) should be [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 200, 300, 1)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [translate3d(8px, -4px, 12px) skewX(1rad) perspective(400px)\] to [scaleY(2) skewX(2rad) perspective(500px)\] at (1) should be [matrix3d(1, 0, 0, 0, -2.185039863261519, 2, 0, 0, 0, 0, 1, -0.002, 0, 0, 0, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translateX(12px) translateY(70%) translateZ(2em)\] to [translateX(13px) translateY(90%) translateZ(3em)\] at (-1) should be [translateX(11px) translateY(50%) translateZ(1em)\]] expected: FAIL [Web Animations: property <transform> from [translateX(12px)\] to [translateX(13px)\] at (0.75) should be [translateX(12.75px)\]] expected: FAIL - [CSS Transitions with transition: all: property <transform> from [skewX(1rad)\] to [translate3d(8px, -4px, 12px) skewX(2rad)\] at (-1) should be [matrix3d(1, 0, 0, 0, 5.2998553125713235, 1, 0, 0, 0, 0, 1, 0, -8, 4, -12, 1)\]] - expected: FAIL - [Web Animations: property <transform> from [translate3d(12px, 70%, 2em)\] to [translate3d(13px, 90%, 3em)\] at (0.25) should be [translate3d(12.25px, 75%, 2.25em)\]] expected: FAIL [Web Animations: property <transform> from [skewX(10rad) translateY(70%)\] to [skewX(20rad) translateY(90%)\] at (1) should be [skewX(20rad) translateY(90%)\]] expected: FAIL - diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-load-event.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-load-event.html.ini new file mode 100644 index 00000000000..cff25974ea9 --- /dev/null +++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-load-event.html.ini @@ -0,0 +1,3 @@ +[HTMLLinkElement-load-event.html] + [Link element load event doesn't block the parser.] + expected: FAIL diff --git a/tests/wpt/metadata/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html.ini b/tests/wpt/metadata/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html.ini new file mode 100644 index 00000000000..abc91030830 --- /dev/null +++ b/tests/wpt/metadata/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html.ini @@ -0,0 +1,2 @@ +[negated-nth-child-when-ancestor-changes.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html.ini b/tests/wpt/metadata/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html.ini new file mode 100644 index 00000000000..f908ecc15fd --- /dev/null +++ b/tests/wpt/metadata/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html.ini @@ -0,0 +1,2 @@ +[negated-nth-last-child-when-ancestor-changes.html] + expected: FAIL diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini index 6b36b7c0d59..53c21f695d4 100644 --- a/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini +++ b/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini @@ -43,7 +43,7 @@ expected: FAIL [popover on HTMLElement must enqueue an attributeChanged reaction when adding popover content attribute] - expected: FAIL + expected: PRECONDITION_FAILED [popover on HTMLElement must enqueue an attributeChanged reaction when replacing an existing attribute] - expected: FAIL + expected: PRECONDITION_FAILED diff --git a/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini index 4e03d42d068..8eb904ed506 100644 --- a/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini @@ -34,3 +34,6 @@ [local https to local https: success.] expected: FAIL + + [private to private: success.] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index d7ccdbdf676..1bca09f21d6 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -1,10 +1,9 @@ [iframe-src-aboutblank-navigate-immediately.html] - expected: TIMEOUT [Navigating to a different document with window.open] expected: FAIL [Navigating to a different document with link click] - expected: TIMEOUT + expected: FAIL [Navigating to a different document with form submission] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini new file mode 100644 index 00000000000..60a4fa51f8a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini @@ -0,0 +1,3 @@ +[a-click.html] + [aElement.click() before the load event must NOT replace] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini new file mode 100644 index 00000000000..f49298fea1f --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini @@ -0,0 +1,4 @@ +[pageload-image-in-popup.html] + expected: TIMEOUT + [The document for a standalone media file should have one child in the body.] + expected: NOTRUN diff --git a/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini b/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini index 24c9e5d3926..90eb9ed743b 100644 --- a/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini +++ b/tests/wpt/metadata/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini @@ -1,5 +1,4 @@ [cross-origin-objects.html] - expected: TIMEOUT [Basic sanity-checking (cross-origin)] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini index 3613f3de8bf..558ce5dcaa5 100644 --- a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini +++ b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini @@ -1,5 +1,4 @@ [embedded-opener-remove-frame.html] - expected: CRASH [opener and "removed" embedded documents] expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini b/tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini index 3db28a14187..3f02c8abdf5 100644 --- a/tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini +++ b/tests/wpt/metadata/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html.ini @@ -2,3 +2,5 @@ [Testing basic functionalities of fontKerning for canvas] expected: FAIL + [Testing basic functionalities of fontVariant for canvas] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.cross-layer-paths.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.cross-layer-paths.html.ini new file mode 100644 index 00000000000..31a9fbece14 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.cross-layer-paths.html.ini @@ -0,0 +1,2 @@ +[2d.layer.cross-layer-paths.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini new file mode 100644 index 00000000000..496ead4da9e --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-reset-endLayer.html] + [Raises exception on beginLayer() + reset() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini new file mode 100644 index 00000000000..444711d1cb5 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-restore.html] + [Raises exception on beginLayer() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini new file mode 100644 index 00000000000..faa85d2001e --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-save-endLayer.html] + [Raises exception on beginLayer() + save() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html.ini new file mode 100644 index 00000000000..a0fa169daf0 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.endLayer.html] + [Raises exception on lone endLayer calls.] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini new file mode 100644 index 00000000000..aa99622e06d --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.save-beginLayer-restore.html] + [Raises exception on save() + beginLayer() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html.ini new file mode 100644 index 00000000000..6e387a858cc --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.save-endLayer.html] + [Raises exception on save() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.reset.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.reset.html.ini new file mode 100644 index 00000000000..a8ea215b961 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.reset.html.ini @@ -0,0 +1,2 @@ +[2d.layer.reset.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.unclosed-nested.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.unclosed-nested.html.ini new file mode 100644 index 00000000000..05e5e6521b0 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.unclosed-nested.html.ini @@ -0,0 +1,2 @@ +[2d.layer.unclosed-nested.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini new file mode 100644 index 00000000000..533365a84e0 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer-endLayer.html] + [No exception raised on beginLayer() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html.ini new file mode 100644 index 00000000000..e20d4c7cbee --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer-save.html] + [No exception raised on beginLayer() + save().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html.ini new file mode 100644 index 00000000000..1b6445b05e9 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer.html] + [No exception raised on lone beginLayer() calls.] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html.ini new file mode 100644 index 00000000000..e477a705dc3 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.save-beginLayer.html] + [No exception raised on save() + beginLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html.ini b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html.ini new file mode 100644 index 00000000000..bb8658055e1 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.save_reset_restore.html] + [No exception raised on save() + reset() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini index cb95d477d9f..6977cd809fb 100644 --- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini +++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html.ini @@ -2,3 +2,5 @@ [Space characters at the end of a line are collapsed (per CSS)] expected: FAIL + [Space characters at the end of a line are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini index 1eb038b12c4..788874e33cb 100644 --- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini +++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020, and collapsed (per CSS)] expected: FAIL + [Space characters are converted to U+0020, and are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini index 6aebf256e44..29a17e29f3c 100644 --- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini +++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020, and collapsed (per CSS)] expected: FAIL + [Space characters are converted to U+0020, and are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html.ini new file mode 100644 index 00000000000..14a3cd3ba4d --- /dev/null +++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html.ini @@ -0,0 +1,3 @@ +[2d.text.draw.space.collapse.start.html] + [Space characters at the start of a line are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.font.parse.complex.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.font.parse.complex.html.ini deleted file mode 100644 index 6c349803d6b..00000000000 --- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.font.parse.complex.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[2d.text.font.parse.complex.html] - [Canvas test: 2d.text.font.parse.complex] - expected: FAIL - diff --git a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini index 471785ac065..e2d0be20f73 100644 --- a/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini +++ b/tests/wpt/metadata/html/canvas/element/text-styles/2d.text.measure.width.space.html.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020 and collapsed (per CSS)] expected: FAIL + [Space characters are converted to U+0020 and NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html.ini new file mode 100644 index 00000000000..d5060a30811 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html.ini @@ -0,0 +1,3 @@ +[2d.fillStyle.CSSRGB.html] + [CSSRGB works as color input] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html.ini new file mode 100644 index 00000000000..0a8b4be90d6 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html.ini @@ -0,0 +1,3 @@ +[2d.gradient.interpolate.zerosize.fillText.html] + [OffscreenCanvas test: 2d.gradient.interpolate.zerosize.fillText] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js.ini new file mode 100644 index 00000000000..0a6c14e61c4 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js.ini @@ -0,0 +1,3 @@ +[2d.gradient.interpolate.zerosize.fillText.worker.html] + [2d] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html.ini new file mode 100644 index 00000000000..dc008b71116 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html.ini @@ -0,0 +1,3 @@ +[2d.gradient.interpolate.zerosize.strokeText.html] + [OffscreenCanvas test: 2d.gradient.interpolate.zerosize.strokeText] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js.ini new file mode 100644 index 00000000000..2dc871e9499 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js.ini @@ -0,0 +1,3 @@ +[2d.gradient.interpolate.zerosize.strokeText.worker.html] + [2d] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html.ini new file mode 100644 index 00000000000..4c3373ceaba --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html.ini @@ -0,0 +1,3 @@ +[2d.pattern.basic.type.html] + [OffscreenCanvas test: 2d.pattern.basic.type] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js.ini new file mode 100644 index 00000000000..94a6165796f --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js.ini @@ -0,0 +1,3 @@ +[2d.pattern.basic.type.worker.html] + [2d] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html.ini new file mode 100644 index 00000000000..e3346f3c063 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html.ini @@ -0,0 +1,3 @@ +[2d.pattern.transform.identity.html] + [OffscreenCanvas test: 2d.pattern.transform.identity] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js.ini new file mode 100644 index 00000000000..09484f510c6 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js.ini @@ -0,0 +1,3 @@ +[2d.pattern.transform.identity.worker.html] + [2d] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html.ini new file mode 100644 index 00000000000..f364e3ccc8e --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html.ini @@ -0,0 +1,3 @@ +[2d.pattern.transform.infinity.html] + [OffscreenCanvas test: 2d.pattern.transform.infinity] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js.ini new file mode 100644 index 00000000000..2bde0688389 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js.ini @@ -0,0 +1,3 @@ +[2d.pattern.transform.infinity.worker.html] + [2d] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html.ini new file mode 100644 index 00000000000..31a9fbece14 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html.ini @@ -0,0 +1,2 @@ +[2d.layer.cross-layer-paths.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html.ini new file mode 100644 index 00000000000..c1f94bab034 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html.ini @@ -0,0 +1,2 @@ +[2d.layer.cross-layer-paths.w.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html.ini deleted file mode 100644 index 8707ec46c87..00000000000 --- a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.layer.endlayer.alone.html] - expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html.ini deleted file mode 100644 index 9634b39bdea..00000000000 --- a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.layer.endlayer.alone.w.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html.ini deleted file mode 100644 index 3159d54e5d5..00000000000 --- a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.layer.endlayer.unmatched.html] - expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html.ini deleted file mode 100644 index 842409080a7..00000000000 --- a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.layer.endlayer.unmatched.w.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini new file mode 100644 index 00000000000..496ead4da9e --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-reset-endLayer.html] + [Raises exception on beginLayer() + reset() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js.ini new file mode 100644 index 00000000000..f21042077c2 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.html] + [Raises exception on beginLayer() + reset() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini new file mode 100644 index 00000000000..444711d1cb5 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-restore.html] + [Raises exception on beginLayer() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js.ini new file mode 100644 index 00000000000..0d70c915210 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-restore.worker.html] + [Raises exception on beginLayer() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini new file mode 100644 index 00000000000..faa85d2001e --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-save-endLayer.html] + [Raises exception on beginLayer() + save() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js.ini new file mode 100644 index 00000000000..e0d36e7a967 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.beginLayer-save-endLayer.worker.html] + [Raises exception on beginLayer() + save() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html.ini new file mode 100644 index 00000000000..a0fa169daf0 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.endLayer.html] + [Raises exception on lone endLayer calls.] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js.ini new file mode 100644 index 00000000000..6be52066638 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.endLayer.worker.html] + [Raises exception on lone endLayer calls.] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini new file mode 100644 index 00000000000..aa99622e06d --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.save-beginLayer-restore.html] + [Raises exception on save() + beginLayer() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js.ini new file mode 100644 index 00000000000..1daf8a926bf --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.save-beginLayer-restore.worker.html] + [Raises exception on save() + beginLayer() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html.ini new file mode 100644 index 00000000000..6e387a858cc --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.save-endLayer.html] + [Raises exception on save() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js.ini new file mode 100644 index 00000000000..8d2d20076f7 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.invalid-calls.save-endLayer.worker.html] + [Raises exception on save() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.html.ini new file mode 100644 index 00000000000..a8ea215b961 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.html.ini @@ -0,0 +1,2 @@ +[2d.layer.reset.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.w.html.ini new file mode 100644 index 00000000000..ffe6604630a --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.reset.w.html.ini @@ -0,0 +1,2 @@ +[2d.layer.reset.w.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html.ini new file mode 100644 index 00000000000..05e5e6521b0 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html.ini @@ -0,0 +1,2 @@ +[2d.layer.unclosed-nested.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html.ini new file mode 100644 index 00000000000..e721c702a1d --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html.ini @@ -0,0 +1,2 @@ +[2d.layer.unclosed-nested.w.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini new file mode 100644 index 00000000000..533365a84e0 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer-endLayer.html] + [No exception raised on beginLayer() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js.ini new file mode 100644 index 00000000000..578649c9794 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer-endLayer.worker.html] + [No exception raised on beginLayer() + endLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html.ini new file mode 100644 index 00000000000..e20d4c7cbee --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer-save.html] + [No exception raised on beginLayer() + save().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js.ini new file mode 100644 index 00000000000..ada8e6e57b5 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer-save.worker.html] + [No exception raised on beginLayer() + save().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html.ini new file mode 100644 index 00000000000..1b6445b05e9 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer.html] + [No exception raised on lone beginLayer() calls.] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js.ini new file mode 100644 index 00000000000..6987943ebe6 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.beginLayer.worker.html] + [No exception raised on lone beginLayer() calls.] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html.ini new file mode 100644 index 00000000000..e477a705dc3 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.save-beginLayer.html] + [No exception raised on save() + beginLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js.ini new file mode 100644 index 00000000000..662b71b7dbc --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.save-beginLayer.worker.html] + [No exception raised on save() + beginLayer().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html.ini new file mode 100644 index 00000000000..bb8658055e1 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.save_reset_restore.html] + [No exception raised on save() + reset() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js.ini new file mode 100644 index 00000000000..14c92491ba3 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js.ini @@ -0,0 +1,3 @@ +[2d.layer.valid-calls.save_reset_restore.worker.html] + [No exception raised on save() + reset() + restore().] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini b/tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini index 4c5795bed90..d441d8d17f7 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html.ini @@ -14,3 +14,5 @@ [Test that calling getContext('2d') on a detached OffscreenCanvas throws exception.] expected: FAIL + [Test that transfer an OffscreenCanvas that already have a 2d context throws exception.] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini index cb95d477d9f..6977cd809fb 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html.ini @@ -2,3 +2,5 @@ [Space characters at the end of a line are collapsed (per CSS)] expected: FAIL + [Space characters at the end of a line are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini index a6d773d8450..e71752d438f 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js.ini @@ -2,3 +2,5 @@ [Space characters at the end of a line are collapsed (per CSS)] expected: FAIL + [Space characters at the end of a line are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini index 1eb038b12c4..788874e33cb 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020, and collapsed (per CSS)] expected: FAIL + [Space characters are converted to U+0020, and are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini index 8959b461ee0..1c2b191e43d 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020, and collapsed (per CSS)] expected: FAIL + [Space characters are converted to U+0020, and are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini index 6aebf256e44..29a17e29f3c 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020, and collapsed (per CSS)] expected: FAIL + [Space characters are converted to U+0020, and are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini index 7a55af6845d..247f77f59f7 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020, and collapsed (per CSS)] expected: FAIL + [Space characters are converted to U+0020, and are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini index 2e400f45551..6c165dc1372 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html.ini @@ -2,3 +2,5 @@ [Space characters at the start of a line are collapsed (per CSS)] expected: FAIL + [Space characters at the start of a line are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini index 32469f60d90..22e8d76dcd7 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js.ini @@ -2,3 +2,5 @@ [Space characters at the start of a line are collapsed (per CSS)] expected: FAIL + [Space characters at the start of a line are NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini index 3db28a14187..3f02c8abdf5 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html.ini @@ -2,3 +2,5 @@ [Testing basic functionalities of fontKerning for canvas] expected: FAIL + [Testing basic functionalities of fontVariant for canvas] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini index caffba5a37d..fcd8921b0cb 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js.ini @@ -2,3 +2,5 @@ [Testing basic functionalities of fontKerning for canvas] expected: FAIL + [Testing basic functionalities of fontVariant for canvas] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.html.ini new file mode 100644 index 00000000000..5459525b077 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.html.ini @@ -0,0 +1,3 @@ +[2d.text.font.parse.complex2.html] + [OffscreenCanvas test: 2d.text.font.parse.complex2] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js.ini new file mode 100644 index 00000000000..805965d47e9 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.font.parse.complex2.worker.html] + [2d] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini index 5ed3378b4f6..c2696aebba2 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.html.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas] expected: FAIL + [Space characters are converted to U+0020 and NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini index fc8abc87933..7f49879d842 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js.ini @@ -2,3 +2,5 @@ [Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas] expected: FAIL + [Space characters are converted to U+0020 and NOT collapsed] + expected: FAIL diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini index d169bd2e9fa..58a99633547 100644 --- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini @@ -1,15 +1,19 @@ [supported-elements.html] + expected: TIMEOUT [Contenteditable element should support autofocus] expected: FAIL [Element with tabindex should support autofocus] - expected: FAIL + expected: TIMEOUT [Host element with delegatesFocus including no focusable descendants should be skipped] - expected: FAIL + expected: NOTRUN [Area element should support autofocus] - expected: FAIL + expected: NOTRUN [Host element with delegatesFocus should support autofocus] - expected: FAIL + expected: NOTRUN + + [Non-HTMLElement should not support autofocus] + expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini new file mode 100644 index 00000000000..a7b23688dad --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini @@ -0,0 +1,3 @@ +[resource-selection-source-media-env-change.html] + [the <source> media attribute: no reaction to environment change] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini index 93215a877a4..3ecab634971 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html.ini @@ -2,3 +2,5 @@ [the <source> media attribute has no effect] expected: FAIL + [the <source> media attribute] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/video_008.htm.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/video_008.htm.ini deleted file mode 100644 index 9abec1b147d..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/video_008.htm.ini +++ /dev/null @@ -1,4 +0,0 @@ -[video_008.htm] - [HTML5 Media Elements: 'media' attribute] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini index 841bafc6eca..26704422bbe 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_escaping-2.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini index 6f7461b9472..53b0601e68c 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini @@ -1,4 +1,5 @@ [iframe_sandbox_popups_nonescaping-1.html] type: testharness + expected: CRASH [Check that popups from a sandboxed iframe do not escape the sandbox] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini index 84d07e03c64..7907a19a508 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini @@ -56,9 +56,6 @@ [multipart/form-data: \\r\\n in value (normal form)] expected: FAIL - [multipart/form-data: \\r\\n in value (formdata event)] - expected: FAIL - [multipart/form-data: \\n\\r in value (normal form)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/historical.html.ini b/tests/wpt/metadata/html/semantics/forms/historical.html.ini deleted file mode 100644 index 5d8289307cc..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/historical.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[historical.html] - [<input name=isindex> should not be supported] - expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini index c6a7a498152..671b79580ec 100644 --- a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini +++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini @@ -10,3 +10,6 @@ [mutation event and toggle event order matches order of insertion in set of named elements] expected: FAIL + + [mutation event and toggle event order matches tree order] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/disabled.html.ini b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/disabled.html.ini deleted file mode 100644 index 1bad2c00b1a..00000000000 --- a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/disabled.html.ini +++ /dev/null @@ -1,18 +0,0 @@ -[disabled.html] - [':disabled' should match only disabled elements] - expected: FAIL - - [':disabled' should not match elements whose disabled attribute has been removed] - expected: FAIL - - [':disabled' should also match elements whose disabled attribute has been set] - expected: FAIL - - [':disabled' should also match elements whose disabled attribute has been set twice] - expected: FAIL - - [':disabled' should also match disabled elements whose type has changed] - expected: FAIL - - [':disabled' should not match elements not in the document] - expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini index 31bfd644df0..8bcf3a07de4 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini @@ -1,9 +1,10 @@ [promise-job-entry.html] + expected: TIMEOUT [Fulfillment handler on fulfilled promise] expected: FAIL [Rejection handler on pending-then-rejected promise] - expected: FAIL + expected: TIMEOUT [Sanity check: this all works as expected with no promises involved] expected: FAIL @@ -15,4 +16,4 @@ expected: FAIL [Fulfillment handler on pending-then-fulfilled promise] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini b/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini index 04c2032c723..39d039a0132 100644 --- a/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini +++ b/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini @@ -1,5 +1,5 @@ [cross-partition.https.tentative.html] - expected: TIMEOUT + expected: CRASH [BroadcastChannel messages aren't received from a cross-partition iframe] expected: FAIL diff --git a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini deleted file mode 100644 index b7b36c1d3a4..00000000000 --- a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[018.html] - expected: TIMEOUT - [origin of the script that invoked the method, javascript:] - expected: TIMEOUT diff --git a/tests/wpt/metadata/websockets/send-many-64K-messages-with-backpressure.any.js.ini b/tests/wpt/metadata/websockets/send-many-64K-messages-with-backpressure.any.js.ini new file mode 100644 index 00000000000..96f9da18cec --- /dev/null +++ b/tests/wpt/metadata/websockets/send-many-64K-messages-with-backpressure.any.js.ini @@ -0,0 +1,27 @@ +[send-many-64K-messages-with-backpressure.any.serviceworker.html] + expected: ERROR + +[send-many-64K-messages-with-backpressure.any.sharedworker.html?wss] + expected: ERROR + +[send-many-64K-messages-with-backpressure.any.html?wpt_flags=h2] + [sending 50 messages of size 65536 with backpressure applied should not hang] + expected: FAIL + + +[send-many-64K-messages-with-backpressure.any.serviceworker.html?wpt_flags=h2] + expected: ERROR + +[send-many-64K-messages-with-backpressure.any.worker.html?wpt_flags=h2] + [sending 50 messages of size 65536 with backpressure applied should not hang] + expected: FAIL + + +[send-many-64K-messages-with-backpressure.any.serviceworker.html?wss] + expected: ERROR + +[send-many-64K-messages-with-backpressure.any.sharedworker.html] + expected: ERROR + +[send-many-64K-messages-with-backpressure.any.sharedworker.html?wpt_flags=h2] + expected: ERROR diff --git a/tests/wpt/mozilla/meta/mozilla/img_placeholder_load.html.ini b/tests/wpt/mozilla/meta/mozilla/img_placeholder_load.html.ini new file mode 100644 index 00000000000..f6e96da94e0 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/img_placeholder_load.html.ini @@ -0,0 +1,4 @@ +[img_placeholder_load.html] + expected: TIMEOUT + [Loading a placeholder image should trigger an error on the img element] + expected: TIMEOUT diff --git a/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini b/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini new file mode 100644 index 00000000000..d380380616c --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/task_queue_throttling.any.js.ini @@ -0,0 +1,3 @@ +[task_queue_throttling.any.html] + [Throttling the performance timeline task queue.] + expected: FAIL diff --git a/tests/wpt/web-platform-tests/.azure-pipelines.yml b/tests/wpt/web-platform-tests/.azure-pipelines.yml index 428411d04ab..4dae0798b03 100644 --- a/tests/wpt/web-platform-tests/.azure-pipelines.yml +++ b/tests/wpt/web-platform-tests/.azure-pipelines.yml @@ -144,7 +144,8 @@ jobs: steps: - task: UsePythonVersion@0 inputs: - versionSpec: '3.7' + # TODO(#40525): Revert back to 3.7 once the Mac agent's Python v3.7 contains bz2 again. + versionSpec: '3.7.16' - template: tools/ci/azure/checkout.yml - template: tools/ci/azure/tox_pytest.yml parameters: @@ -176,7 +177,8 @@ jobs: steps: - task: UsePythonVersion@0 inputs: - versionSpec: '3.7' + # TODO(#40525): Revert back to 3.7 once the Mac agent's Python v3.7 contains bz2 again. + versionSpec: '3.7.16' - template: tools/ci/azure/checkout.yml - template: tools/ci/azure/tox_pytest.yml parameters: @@ -209,7 +211,8 @@ jobs: # full checkout required - task: UsePythonVersion@0 inputs: - versionSpec: '3.7' + # TODO(#40525): Revert back to 3.7 once the Mac agent's Python v3.7 contains bz2 again. + versionSpec: '3.7.16' - template: tools/ci/azure/install_chrome.yml - template: tools/ci/azure/install_firefox.yml - template: tools/ci/azure/update_hosts.yml diff --git a/tests/wpt/web-platform-tests/.well-known/private-aggregation/debug/report-shared-storage b/tests/wpt/web-platform-tests/.well-known/private-aggregation/debug/report-shared-storage new file mode 100644 index 00000000000..7ffdb70773d --- /dev/null +++ b/tests/wpt/web-platform-tests/.well-known/private-aggregation/debug/report-shared-storage @@ -0,0 +1,7 @@ +"""Endpoint to receive and return aggregatable reports.""" +from importlib import import_module + +reports = import_module('private-aggregation.resources.reports') + +def main(request, response): + return reports.handle_request(request) diff --git a/tests/wpt/web-platform-tests/.well-known/private-aggregation/report-shared-storage b/tests/wpt/web-platform-tests/.well-known/private-aggregation/report-shared-storage new file mode 100644 index 00000000000..7ffdb70773d --- /dev/null +++ b/tests/wpt/web-platform-tests/.well-known/private-aggregation/report-shared-storage @@ -0,0 +1,7 @@ +"""Endpoint to receive and return aggregatable reports.""" +from importlib import import_module + +reports = import_module('private-aggregation.resources.reports') + +def main(request, response): + return reports.handle_request(request) diff --git a/tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html b/tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html index 374b05c8fd2..5833b7e9ba9 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html +++ b/tests/wpt/web-platform-tests/IndexedDB/database-names-by-origin.html @@ -126,7 +126,7 @@ for (const databaseKind of ['open', 'closed']) { const sameOriginDbNames = await crossOriginHelper( testCase, mode, sameOrigin, { action: 'get-database-names' }); assert_in_array( - sameOriginDbNames, dbName, + dbName, sameOriginDbNames, `Database creation should reflect in same-origin ${mode}`); const otherOriginDbNames = await crossOriginHelper( diff --git a/tests/wpt/web-platform-tests/accessibility/crashtests/append-image-using-illegal-map.html b/tests/wpt/web-platform-tests/accessibility/crashtests/append-image-using-illegal-map.html new file mode 100644 index 00000000000..c78e74eeed7 --- /dev/null +++ b/tests/wpt/web-platform-tests/accessibility/crashtests/append-image-using-illegal-map.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<map name="map1"><button><li>xyz</li></button></map> +<script> + const image = document.createElement('img'); + image.setAttribute('src', 'exists.gif'); + image.setAttribute('usemap', '#map1'); + document.documentElement.appendChild(image); +</script> diff --git a/tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html b/tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html index db7c664251a..5787de8059f 100644 --- a/tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html +++ b/tests/wpt/web-platform-tests/accessibility/crashtests/map-update-crash.html @@ -7,7 +7,7 @@ This test passes if it does not crash. <img usemap="#map2"> <map id=map name="map2"> <command id=command> - <article id=article ></article> + <article id=article></article> </command> </map> <script> diff --git a/tests/wpt/web-platform-tests/accessibility/crashtests/removed-from-flat-tree.html b/tests/wpt/web-platform-tests/accessibility/crashtests/removed-from-flat-tree.html new file mode 100644 index 00000000000..2deaf6ab390 --- /dev/null +++ b/tests/wpt/web-platform-tests/accessibility/crashtests/removed-from-flat-tree.html @@ -0,0 +1,3 @@ +<!DOCTYPE html> +<audio src="foo"></audio> +<template shadowroot="closed"></template> diff --git a/tests/wpt/web-platform-tests/accname/basic.html b/tests/wpt/web-platform-tests/accname/basic.html index 097123569db..d84f4dc3b95 100644 --- a/tests/wpt/web-platform-tests/accname/basic.html +++ b/tests/wpt/web-platform-tests/accname/basic.html @@ -5,6 +5,16 @@ <script src="/resources/testdriver-vendor.js"></script> <script src="/resources/testdriver-actions.js"></script> +<!-- + +These tests should remain solid and passing in any implementation that supports get_computed_label. + +It uses a standard promise_test (rather than aria-util.js) to reduce other dependencies. + +If you're adding something you expect to fail in one or more implementations, you probably want a different file. + +--> + <div id='d' style='height: 100px; width: 100px' role="group" aria-label="test label"></div> <h1 id="h">test heading</h1> <script> diff --git a/tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html b/tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html index 21efd76180c..96d2886f0e3 100644 --- a/tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html +++ b/tests/wpt/web-platform-tests/client-hints/sandbox/resources/iframe-with-embedded-popup-expect-no-hints.html @@ -7,6 +7,6 @@ }); </script> -<iframe src="embedded-popup-expect-no-hints.html" /> +<iframe src="embedded-popup-expect-no-hints.html"></iframe> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html b/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html new file mode 100644 index 00000000000..87fce5961fd --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html @@ -0,0 +1,109 @@ +<!DOCTYPE HTML> +<html> + +<head> + <title>External scripts with matching SRI hash (in default-src) should be allowed.</title> + <script src='/resources/testharness.js' nonce='dummy'></script> + <script src='/resources/testharnessreport.js' nonce='dummy'></script> + + <!-- CSP served: default-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=='; style-src 'unsafe-inline' --> + <!-- ShA256 is intentionally mixed case --> +</head> + +<body> + <h1>External scripts with matching SRI hash (in default-src) should be allowed.</h1> + <div id='log'></div> + + <script nonce='dummy'> + var port = "{{ports[http][0]}}"; + if (location.protocol === "https:") + port = "{{ports[https][0]}}"; + var crossorigin_base = location.protocol + "//{{domains[www]}}:" + port; + + // Test name, src, integrity, expected to run. + var test_cases = [ + [ 'matching integrity', + './simpleSourcedScript.js', + 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=', + true ], + [ 'matching integrity (case-insensitive algorithm)', + './simpleSourcedScript.js', + 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=', + true ], + [ 'multiple matching integrity', + './simpleSourcedScript.js', + 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA==', + true ], + [ 'no integrity', + './simpleSourcedScript.js', + '', + false ], + [ 'matching plus unsupported integrity', + './simpleSourcedScript.js', + 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha999-xyz', + true ], + [ 'mismatched integrity', + './simpleSourcedScript.js', + 'sha256-xyz', + false ], + [ 'multiple mismatched integrity', + './simpleSourcedScript.js', + 'sha256-xyz sha256-zyx', + false ], + [ 'partially matching integrity', + './simpleSourcedScript.js', + 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha256-xyz', + false ], + [ 'crossorigin no integrity but allowed host', + crossorigin_base + '/content-security-policy/script-src/crossoriginScript.js', + '', + true ], + [ 'crossorigin mismatched integrity but allowed host', + crossorigin_base + '/content-security-policy/script-src/crossoriginScript.js', + 'sha256-kKJ5c48yxzaaSBupJSCmY50hkD8xbVgZgLHLtmnkeAo=', + true ], + ]; + + test(_ => { + for (item of test_cases) { + async_test(t => { + var s = document.createElement('script'); + s.id = item[0].replace(' ', '-'); + s.src = item[1]; + s.integrity = item[2]; + s.setAttribute('crossorigin', 'anonymous'); + + if (item[3]) { + s.onerror = t.unreached_func("Script should load! " + s.src); + window.addEventListener('message', t.step_func(e => { + if (e.data == s.id) + t.done(); + })); + } else { + s.onerror = t.step_func_done(); + window.addEventListener('message', t.step_func(e => { + if (e.data == s.id) + assert_unreached("Script should not execute!"); + })); + } + + document.body.appendChild(s); + }, item[0]); + } + }, "Load all the tests."); + </script> + + <script nonce='dummy'> + var externalRan = false; + </script> + <script src='./externalScript.js' + integrity="sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0="></script> + <script nonce='dummy'> + test(function() { + assert_true(externalRan, 'External script ran.'); + }, 'External script in a script tag with matching SRI hash should run.'); + </script> + +</body> + +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html.sub.headers new file mode 100644 index 00000000000..6f206606387 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/default-src/default-src-sri_hash.sub.html.sub.headers @@ -0,0 +1,5 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Content-Security-Policy: default-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=='; style-src 'unsafe-inline' diff --git a/tests/wpt/web-platform-tests/content-security-policy/default-src/externalScript.js b/tests/wpt/web-platform-tests/content-security-policy/default-src/externalScript.js new file mode 100644 index 00000000000..2920b03c9bc --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/default-src/externalScript.js @@ -0,0 +1 @@ +externalRan = true;
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/content-security-policy/default-src/simpleSourcedScript.js b/tests/wpt/web-platform-tests/content-security-policy/default-src/simpleSourcedScript.js new file mode 100644 index 00000000000..deca86508ff --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/default-src/simpleSourcedScript.js @@ -0,0 +1 @@ +window.postMessage(document.currentScript.id, "*"); diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html index ebba1e0096c..54e04d4f7af 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-match-allowed.sub.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id="log"/> + <div id="log"></div> <script> async_test(function(t) { document.addEventListener("securitypolicyviolation", t.unreached_func("Loading allowed fonts should not trigger a violation.")); diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html index b164cf0f172..fb491cb58d2 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-mismatch-blocked.sub.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id="log"/> + <div id="log"></div> <script> async_test(function(t) { var link = document.createElement('link'); diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html index eae1b4986d9..b8dbb7530aa 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-none-blocked.sub.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id="log"/> + <div id="log"></div> <script> async_test(function(t) { var link = document.createElement('link'); diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html index b8d46e5c987..aeca1285e4f 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-self-allowed.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id="log"/> + <div id="log"></div> <script> async_test(function(t) { document.addEventListener("securitypolicyviolation", t.unreached_func("Loading allowed fonts should not trigger a violation.")); diff --git a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html index 3b47d0b2e22..4b34bc5746d 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/font-src/font-stylesheet-font-blocked.sub.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id="log"/> + <div id="log"></div> <script> async_test(function(t) { var link = document.createElement('link'); diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html index 9e4e345a167..a0ddceb64c6 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-4_1.sub.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id='log'/> + <div id='log'></div> <script> async_test(function(t) { diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html index 23c33d56553..e7f3472072e 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-full-host-wildcard-blocked.sub.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id='log'/> + <div id='log'></div> <script> var t1 = async_test("img src does not match full host and wildcard csp directive"); diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html index d2d36d1341c..f80ff2d4dd9 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-host-partial-wildcard-allowed.sub.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id='log'/> + <div id='log'></div> <script> var t1 = async_test("img src matches correctly partial wildcard host csp directive"); diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html index 9bc0326ef8a..5a05970f600 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html +++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-none-blocks.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id='log'/> + <div id='log'></div> <script> var t1 = async_test("img-src with 'none' source should not match"); diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html index 215c10089bb..993be396ae1 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-port-wildcard-allowed.sub.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id='log'/> + <div id='log'></div> <script> var t1 = async_test("img-src with wildcard port should match any port"); diff --git a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html index 72326ee6fc6..050a4d14100 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html +++ b/tests/wpt/web-platform-tests/content-security-policy/img-src/img-src-wildcard-allowed.html @@ -7,7 +7,7 @@ <script src='/resources/testharnessreport.js'></script> </head> <body> - <div id='log'/> + <div id='log'></div> <script> var t1 = async_test("img-src with wildcard should match all"); diff --git a/tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html b/tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html index 21c4fb33ce2..39f4747d191 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html +++ b/tests/wpt/web-platform-tests/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html @@ -3,7 +3,7 @@ <script src="/resources/testharnessreport.js"></script> <script> - var window_url = encodeURIComponent("javascript:'<iframe src=/content-security-policy/support/fail.js />'"); + var window_url = encodeURIComponent("javascript:'<iframe src=/content-security-policy/support/fail.js></iframe>'"); var report_cookie_name = encodeURIComponent("javascript-url-navigation-inherits-csp"); window.open("support/test_csp_self_window.sub.html?window_url=" + window_url + "&report_cookie_name=" + report_cookie_name); setTimeout(function() { diff --git a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html index 1be496194b6..2040a34a8f7 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html +++ b/tests/wpt/web-platform-tests/content-security-policy/reporting/report-uri-from-child-frame.html @@ -18,6 +18,6 @@ } } </script> - <iframe src="support/generate-csp-report.html"/> + <iframe src="support/generate-csp-report.html"></iframe> </body> </html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html index b59206824dc..9216e2b0d49 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html @@ -6,7 +6,8 @@ <script src='/resources/testharness.js' nonce='dummy'></script> <script src='/resources/testharnessreport.js' nonce='dummy'></script> - <!-- CSP served: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=' --> + <!-- CSP served: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA==' --> + <!-- ShA256 is intentionally mixed case --> </head> <body> @@ -25,9 +26,13 @@ './simpleSourcedScript.js', 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=', true ], + [ 'matching integrity (case-insensitive algorithm)', + './simpleSourcedScript.js', + 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=', + true ], [ 'multiple matching integrity', './simpleSourcedScript.js', - 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=', + 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c= sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA==', true ], [ 'no integrity', './simpleSourcedScript.js', diff --git a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers index 25cd6541aca..971525ff762 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/content-security-policy/script-src/script-src-sri_hash.sub.html.sub.headers @@ -2,4 +2,4 @@ Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0, false Pragma: no-cache -Content-Security-Policy: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'sha256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=' +Content-Security-Policy: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA==' diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-context.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-context.https.html new file mode 100644 index 00000000000..76758662721 --- /dev/null +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-context.https.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<title>Federated Credential Management API context tests.</title> +<link rel="help" href="https://fedidcg.github.io/FedCM"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<body> + +<script type="module"> +import {request_options_with_mediation_required, + request_options_with_context, + fedcm_get_title_promise, + fedcm_test} from './support/fedcm-helper.sub.js'; + +fedcm_test(async t => { + navigator.credentials.get(request_options_with_mediation_required()); + const title = await fedcm_get_title_promise(); + assert_true(title.toLowerCase().includes('sign in')); +}, "FedCM call defaults to 'signin' context."); + +fedcm_test(async t => { + navigator.credentials.get(request_options_with_context("manifest.py", "signup")); + const title = await fedcm_get_title_promise(t); + assert_true(title.toLowerCase().includes('sign up')); +}, "FedCM with 'signup' context."); + +fedcm_test(async t => { + navigator.credentials.get(request_options_with_context("manifest.py", "use")); + const title = await fedcm_get_title_promise(); + assert_true(title.toLowerCase().includes('use')); +}, "FedCM with 'use' context."); + +fedcm_test(async t => { + navigator.credentials.get(request_options_with_context("manifest.py", "continue")); + const title = await fedcm_get_title_promise(); + assert_true(title.toLowerCase().includes('continue')); +}, "FedCM with 'continue' context."); +</script> diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html index eb9f7da7b26..ed7c1300bd1 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-first-idp.https.html @@ -8,20 +8,20 @@ import { set_fedcm_cookie, set_alt_fedcm_cookie, - default_request_options, - default_alt_request_options + request_options_with_mediation_required, + alt_request_options_with_mediation_required } from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); promise_test(async t => { let first_controller = new AbortController(); - let first_test_options = default_request_options(); + let first_test_options = request_options_with_mediation_required(); first_test_options.signal = first_controller.signal; const first_cred = navigator.credentials.get(first_test_options); let second_controller = new AbortController(); - let second_test_options = default_alt_request_options(); + let second_test_options = alt_request_options_with_mediation_required(); second_test_options.signal = second_controller.signal; const second_cred = navigator.credentials.get(second_test_options); diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html index 7e7ec2ce3d1..dfe8969932b 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/abort-multiple-gets-through-second-idp.https.html @@ -8,20 +8,20 @@ import { set_fedcm_cookie, set_alt_fedcm_cookie, - default_request_options, - default_alt_request_options + request_options_with_mediation_required, + alt_request_options_with_mediation_required } from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); promise_test(async t => { let first_controller = new AbortController(); - let first_test_options = default_request_options(); + let first_test_options = request_options_with_mediation_required(); first_test_options.signal = first_controller.signal; const first_cred = navigator.credentials.get(first_test_options); let second_controller = new AbortController(); - let second_test_options = default_alt_request_options(); + let second_test_options = alt_request_options_with_mediation_required(); second_test_options.signal = second_controller.signal; const second_cred = navigator.credentials.get(second_test_options); diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html index fa9ec7b52fc..dc332870abc 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html @@ -7,7 +7,7 @@ <body> <script type="module"> -import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js'; +import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); let has_window_loaded = false; @@ -22,12 +22,12 @@ promise_test(async t => { let first_cred_resolved = false; assert_false(has_window_loaded); // First navigator.credentials.get() is called prior to window.onload - const first_cred = navigator.credentials.get(default_request_options()).finally(() => { first_cred_resolved = true; }); + const first_cred = navigator.credentials.get(request_options_with_mediation_required()).finally(() => { first_cred_resolved = true; }); await Promise.all([cookies_promise, window_loaded]); assert_true(has_window_loaded); assert_false(first_cred_resolved); // Second navigator.credentials.get() is called after window.onload but before first navigator.credentials.get() resolves - const second_cred = navigator.credentials.get(default_alt_request_options()); + const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required()); const rejection = promise_rejects_dom(t, 'NotAllowedError', second_cred); const first = await first_cred; assert_equals(first.token, "token"); diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html index 93ee2075fe5..6a61891a302 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html @@ -7,7 +7,7 @@ <body> <script type="module"> -import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js'; +import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); @@ -15,14 +15,14 @@ promise_test(async t => { let has_window_loaded = false; const window_loaded = new Promise(resolve => { window.addEventListener('load', async () => { - const second_cred = navigator.credentials.get(default_alt_request_options()); + const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required()); await promise_rejects_dom(t, 'NetworkError', second_cred); has_window_loaded = true; resolve(); }); }); assert_false(has_window_loaded); - const first_cred = navigator.credentials.get(default_request_options()); + const first_cred = navigator.credentials.get(request_options_with_mediation_required()); await Promise.all([cookies_promise, window_loaded]); assert_true(has_window_loaded); const first = await first_cred; diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html index edc293daff8..65aeb72dcf1 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html @@ -7,7 +7,7 @@ <body> <script type="module"> -import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js'; +import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); @@ -15,14 +15,14 @@ promise_test(async t => { let has_dom_content_loaded = false; const dom_content_loaded = new Promise(resolve => { document.addEventListener('DOMContentLoaded', async () => { - const second_cred = navigator.credentials.get(default_alt_request_options()); + const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required()); await promise_rejects_dom(t, 'NetworkError', second_cred); has_dom_content_loaded = true; resolve(); }); }); assert_false(has_dom_content_loaded); - const first_cred = navigator.credentials.get(default_request_options()); + const first_cred = navigator.credentials.get(request_options_with_mediation_required()); await Promise.all([cookies_promise, dom_content_loaded]); assert_true(has_dom_content_loaded); const first = await first_cred; diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html index b7b03e4a147..12f88d3068e 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-abort.https.html @@ -8,20 +8,20 @@ import { set_fedcm_cookie, set_alt_fedcm_cookie, - default_request_options, - default_alt_request_options + request_options_with_mediation_required, + alt_request_options_with_mediation_required } from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); promise_test(async t => { let first_controller = new AbortController(); - let first_test_options = default_request_options(); + let first_test_options = request_options_with_mediation_required(); first_test_options.signal = first_controller.signal; const first_cred = navigator.credentials.get(first_test_options); let second_controller = new AbortController(); - let second_test_options = default_alt_request_options(); + let second_test_options = alt_request_options_with_mediation_required(); second_test_options.signal = second_controller.signal; const second_cred = navigator.credentials.get(second_test_options); @@ -32,8 +32,8 @@ promise_rejects_dom(t, 'AbortError', second_cred) ]); - const third_cred = navigator.credentials.get(default_request_options()); - const fourth_cred = navigator.credentials.get(default_alt_request_options()); + const third_cred = navigator.credentials.get(request_options_with_mediation_required()); + const fourth_cred = navigator.credentials.get(alt_request_options_with_mediation_required()); // NetworkError is returned when another IDP is selected. await promise_rejects_dom(t, 'NetworkError', fourth_cred); diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html index 1a806a2049d..bf8d717381b 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html @@ -7,7 +7,7 @@ <body> <script type="module"> -import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js'; +import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); const window_loaded = new Promise(resolve => { @@ -18,8 +18,8 @@ const window_loaded = new Promise(resolve => { promise_test(async t => { await Promise.all([cookies_promise, window_loaded]); - const first_cred = navigator.credentials.get(default_request_options()); - const second_cred = navigator.credentials.get(default_alt_request_options()); + const first_cred = navigator.credentials.get(request_options_with_mediation_required()); + const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required()); // NetworkError is returned when another IDP is selected. await promise_rejects_dom(t, 'NetworkError', second_cred); const first = await first_cred; diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html index 69a70ce47de..e754b86ec65 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html @@ -7,7 +7,7 @@ <body> <script type="module"> -import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js'; +import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); let has_window_loaded = false; @@ -18,8 +18,8 @@ window.addEventListener('load', () => { // TODO(crbug.com/1374869): Add multi IDP test where second IDP is selected. promise_test(async t => { assert_false(has_window_loaded); - const first_cred = navigator.credentials.get(default_alt_request_options()); - const second_cred = navigator.credentials.get(default_request_options()); + const first_cred = navigator.credentials.get(alt_request_options_with_mediation_required()); + const second_cred = navigator.credentials.get(request_options_with_mediation_required()); await cookies_promise; await promise_rejects_dom(t, 'NetworkError', second_cred); const first = await first_cred; diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html index e98b63ff339..252732c9643 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html @@ -7,15 +7,15 @@ <body> <script type="module"> -import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js'; +import {set_fedcm_cookie, set_alt_fedcm_cookie, request_options_with_mediation_required, alt_request_options_with_mediation_required} from '../support/fedcm-helper.sub.js'; let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]); promise_test(async t => { const window_loaded = new Promise(resolve => { window.addEventListener('load', async () => { - const first_cred = navigator.credentials.get(default_request_options()); - const second_cred = navigator.credentials.get(default_alt_request_options()); + const first_cred = navigator.credentials.get(request_options_with_mediation_required()); + const second_cred = navigator.credentials.get(alt_request_options_with_mediation_required()); await cookies_promise; await promise_rejects_dom(t, 'NetworkError', second_cred); const first = await first_cred; diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html index a34ff84aabd..a023e3c57fd 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-after-onload.https.html @@ -7,7 +7,7 @@ <body> <script type="module"> -import {set_fedcm_cookie, default_request_options} from '../support/fedcm-helper.sub.js'; +import {set_fedcm_cookie, request_options_with_mediation_required} from '../support/fedcm-helper.sub.js'; const window_loaded = new Promise(resolve => { window.addEventListener('load', () => { @@ -18,7 +18,7 @@ const window_loaded = new Promise(resolve => { promise_test(async t => { await set_fedcm_cookie(); await window_loaded; - const cred = await navigator.credentials.get(default_request_options()); + const cred = await navigator.credentials.get(request_options_with_mediation_required()); assert_equals(cred.token, "token"); }, "Single `get` call after onload is allowed."); diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html index 91195fc5a75..be94d17d8f2 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-before-onload.https.html @@ -7,7 +7,7 @@ <body> <script type="module"> -import {set_fedcm_cookie, default_request_options} from '../support/fedcm-helper.sub.js'; +import {set_fedcm_cookie, request_options_with_mediation_required} from '../support/fedcm-helper.sub.js'; let has_window_loaded = false; const window_loaded = new Promise(resolve => { @@ -18,7 +18,7 @@ const window_loaded = new Promise(resolve => { }); promise_test(async t => { - const first_cred = navigator.credentials.get(default_request_options()); + const first_cred = navigator.credentials.get(request_options_with_mediation_required()); assert_false(has_window_loaded); await set_fedcm_cookie(); await window_loaded; diff --git a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html index 17939d2d935..8383c3b9ff8 100644 --- a/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html +++ b/tests/wpt/web-platform-tests/credential-management/fedcm-multi-idp/single-get-during-onload.https.html @@ -7,12 +7,12 @@ <body> <script type="module"> -import {default_request_options, set_fedcm_cookie} from '../support/fedcm-helper.sub.js'; +import {request_options_with_mediation_required, set_fedcm_cookie} from '../support/fedcm-helper.sub.js'; promise_test(async t => { const window_loaded = new Promise(resolve => { window.addEventListener('load', async () => { - const first_cred = navigator.credentials.get(default_request_options()); + const first_cred = navigator.credentials.get(request_options_with_mediation_required()); await set_fedcm_cookie(); const first = await first_cred; assert_equals(first.token, "token"); diff --git a/tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js b/tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js index 270ac1d743a..79136b5958f 100644 --- a/tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js +++ b/tests/wpt/web-platform-tests/credential-management/support/fedcm-helper.sub.js @@ -78,6 +78,26 @@ export function request_options_with_mediation_optional(manifest_filename) { return options; } +export function request_options_with_context(manifest_filename, context) { + if (manifest_filename === undefined) { + manifest_filename = "manifest.py"; + } + const manifest_path = `https://{{host}}:{{ports[https][0]}}/\ +credential-management/support/fedcm/${manifest_filename}`; + return { + identity: { + providers: [{ + configURL: manifest_path, + clientId: '1', + nonce: '2' + }], + context: context + }, + mediation: 'required' + }; +} + + // Test wrapper which does FedCM-specific setup. export function fedcm_test(test_func, test_name) { promise_test(async t => { @@ -117,3 +137,15 @@ export function request_options_with_login_hint(manifest_filename, login_hint) { return options; } + +export function fedcm_get_title_promise(t) { + async function helper(resolve) { + try { + const title = await window.test_driver.get_fedcm_dialog_title(); + resolve(title); + } catch (ex) { + t.step_timeout(100, helper); + } + } + return new Promise(helper); +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html index dee9ed8a1b8..bbb484073a3 100644 --- a/tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html +++ b/tests/wpt/web-platform-tests/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html @@ -30,7 +30,7 @@ oElement.insertAdjacentElement('beforeend',function(){ }(); oRange.insertNode(oInsertedElement) } -document.addEventListener("load", event_handler_EC9_load, true); +document.addEventListener("load", event_handler_EC9_load, { capture: true, once: true }); function event_handler_ECA_DOMCharacterDataModified() { var oElement = event.srcElement; var oParent =function(){ diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-002.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-002.html new file mode 100644 index 00000000000..1c86fe2e467 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-002.html @@ -0,0 +1,200 @@ +<!DOCTYPE html> +<title>Tests automatic anchor fallbacks created from the base style</title> +<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#fallback-automatic"> +<link rel="auto" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<script src="support/test-common.js"></script> + +<style> +body { + margin: 0; +} + +.cb { + position: absolute; + width: 500px; + height: 500px; +} + +.anchor { + position: absolute; + width: 100px; + height: 100px; + background: orange; +} + +.target { + position: absolute; + width: 100px; + height: 100px; + background: lime; +} + +.flip-x { + top: anchor(top); + left: anchor(auto); +} + +.flip-x-same { + width: 200px; + top: anchor(top); + left: anchor(auto-same); +} + +.flip-y { + top: anchor(auto); + left: anchor(left); +} + +.flip-y-same { + height: 200px; + left: anchor(left); + top: anchor(auto-same); +} + +.flip-both { + top: anchor(auto); + left: anchor(auto); +} + +#anchor1 { + top: 50px; + left:200px; + anchor-name: --a1; +} + +#anchor2 { + bottom: 50px; + left: 200px; + anchor-name: --a2; +} + +#anchor3 { + left: 50px; + top: 200px; + anchor-name: --a3; +} + +#anchor4 { + right: 50px; + top: 200px; + anchor-name: --a4 +} + +#anchor5 { + top: 50px; + left: 50px; + anchor-name: --a5; +} + +#anchor6 { + top: 50px; + right: 50px; + anchor-name: --a6; +} + +#anchor7 { + bottom: 50px; + left: 50px; + anchor-name: --a7; +} + +#anchor8 { + bottom: 50px; + right: 50px; + anchor-name: --a8; +} + +#anchor9 { + top: 200px; + right: 50px; + anchor-name: --a9; +} + +#anchor10 { + top: 200px; + left: 50px; + anchor-name: --a10; +} + +#anchor11 { + left: 200px; + top: 50px; + anchor-name: --a11; +} + +#anchor12 { + left: 200px; + bottom: 50px; + anchor-name: --a12; +} + +#target1 { anchor-default: --a1; } +#target2 { anchor-default: --a2; } +#target3 { anchor-default: --a3; } +#target4 { anchor-default: --a4; } +#target5 { anchor-default: --a5; } +#target6 { anchor-default: --a6; } +#target7 { anchor-default: --a7; } +#target8 { anchor-default: --a8; } +#target9 { anchor-default: --a9; } +#target10 { anchor-default: --a10; } +#target11 { anchor-default: --a11; } +#target12 { anchor-default: --a12; } + +</style> + +<body onload="checkLayoutForAnchorPos('.target')"> + <!-- Test cases creating flipped fallbacks in one axis --> + <div class="cb"> + <div class="anchor" id="anchor1"></div> + <div class="anchor" id="anchor2"></div> + <div class="anchor" id="anchor3"></div> + <div class="anchor" id="anchor4"></div> + + <div class="target flip-y" id="target1" + data-offset-x="200" data-offset-y="150"></div> + <div class="target flip-y" id="target2" + data-offset-x="200" data-offset-y="250"></div> + <div class="target flip-x" id="target3" + data-offset-x="150" data-offset-y="200"></div> + <div class="target flip-x" id="target4" + data-offset-x="250" data-offset-y="200"></div> + </div> + + <!-- Test cases creating flipped fallbacks in both axes --> + <div class="cb" style="top: 500px"> + <div class="anchor" id="anchor5"></div> + <div class="anchor" id="anchor6"></div> + <div class="anchor" id="anchor7"></div> + <div class="anchor" id="anchor8"></div> + + <div class="target flip-both" id="target5" + data-offset-x="150" data-offset-y="150"></div> + <div class="target flip-both" id="target6" + data-offset-x="250" data-offset-y="150"></div> + <div class="target flip-both" id="target7" + data-offset-x="150" data-offset-y="250"></div> + <div class="target flip-both" id="target8" + data-offset-x="250" data-offset-y="250"></div> + </div> + + <!-- Test cases for `auto-same` flipping --> + <div class="cb" style="top: 1000px"> + <div class="anchor" id="anchor9"></div> + <div class="anchor" id="anchor10"></div> + <div class="anchor" id="anchor11"></div> + <div class="anchor" id="anchor12"></div> + + <div class="target flip-x-same" id="target9" + data-offset-x="250" data-offset-y="200"></div> + <div class="target flip-x-same" id="target10" + data-offset-x="50" data-offset-y="200"></div> + <div class="target flip-y-same" id="target11" + data-offset-x="200" data-offset-y="50"></div> + <div class="target flip-y-same" id="target12" + data-offset-x="200" data-offset-y="250"></div> + </div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-003.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-003.html new file mode 100644 index 00000000000..33ef58b2af4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-position-auto-003.html @@ -0,0 +1,168 @@ +<!DOCTYPE html> +<title>Tests automatic anchor fallbacks created from an @try rule</title> +<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#fallback-automatic"> +<link rel="auto" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<script src="support/test-common.js"></script> + +<style> +body { + margin: 0; +} + +.cb { + position: absolute; + width: 500px; + height: 500px; +} + +.anchor { + position: absolute; + width: 100px; + height: 100px; + background: orange; +} + +.target { + position: absolute; + width: 100px; + height: 100px; + background: lime; + position-fallback: --pf; +} + +@position-fallback --pf { + @try { + top: anchor(auto); + left: anchor(auto); + } +} + +#anchor1 { + top: 50px; + left: 50px; + anchor-name: --a1; +} + +#anchor2 { + top: 50px; + right: 50px; + anchor-name: --a2; +} + +#anchor3 { + bottom: 50px; + left: 50px; + anchor-name: --a3; +} + +#anchor4 { + bottom: 50px; + right: 50px; + anchor-name: --a4; +} + +#target1 { anchor-default: --a1; } +#target2 { anchor-default: --a2; } +#target3 { anchor-default: --a3; } +#target4 { anchor-default: --a4; } + +#anchor5 { + top: 200px; + right: 50px; + anchor-name: --a5; +} + +#anchor6 { + bottom: 50px; + left: 200px; + anchor-name: --a6; +} + +#target5 { + top: anchor(top); + left: anchor(auto); + anchor-default: --a5; + position-fallback: --pf-empty; +} + +#target6 { + top: anchor(auto); + left: anchor(left); + anchor-default: --a6; + position-fallback: --pf-empty; +} + +#anchor7 { + bottom: 50px; + right: 50px; + anchor-name: --a7; +} + +#target7 { + top: anchor(auto); + anchor-default: --a7; + position-fallback: --pf-flip-x; +} + +#target8 { + left: anchor(auto); + anchor-default: --a7; + position-fallback: --pf-flip-y; +} + +@position-fallback --pf-empty { + @try {} +} + +@position-fallback --pf-flip-x { + @try { left: anchor(auto); } +} + +@position-fallback --pf-flip-y { + @try { top: anchor(auto); } +} +</style> + +<body onload="checkLayoutForAnchorPos('.target')"> + <!-- Test cases creating auto fallbacks from an @try rule --> + <div class="cb"> + <div class="anchor" id="anchor1"></div> + <div class="anchor" id="anchor2"></div> + <div class="anchor" id="anchor3"></div> + <div class="anchor" id="anchor4"></div> + + <div class="target" id="target1" + data-offset-x="150" data-offset-y="150"></div> + <div class="target" id="target2" + data-offset-x="250" data-offset-y="150"></div> + <div class="target" id="target3" + data-offset-x="150" data-offset-y="250"></div> + <div class="target" id="target4" + data-offset-x="250" data-offset-y="250"></div> + </div> + + <div class="cb" style="top: 500px"> + <div class="anchor" id="anchor5"></div> + <div class="anchor" id="anchor6"></div> + <div class="anchor" id="anchor7"></div> + + <!-- Test cases where `anchor(auto)` is in base style, so no auto fallbacks + are created from @try rules, and targets end up overflowing the + containing block. --> + <div class="target" id="target5" + data-offset-x="450" data-offset-y="200"></div> + <div class="target" id="target6" + data-offset-x="200" data-offset-y="450"></div> + + <!-- Test cases where `anchor(auto)` is used in both axes, but the `@try` + rule affects only one axis, so we only flip in one axis, and the + targets end up overflowing the containing block. --> + <div class="target" id="target7" + data-offset-x="250" data-offset-y="450"></div> + <div class="target" id="target8" + data-offset-x="450" data-offset-y="250"></div> + </div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html b/tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html index d67a22443bb..a5c9c6763f5 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html +++ b/tests/wpt/web-platform-tests/css/css-animations/cancel-animation-shadow-slot-invalidation.html @@ -18,7 +18,7 @@ <div id="dirty" class="none">PASS</div> <script> const root = host.attachShadow({mode:"open"}); - root.innerHTML = "<slot />"; + root.innerHTML = "<slot></slot>"; requestAnimationFrame(() => { root.firstChild.name = "skip-slot"; dirty.className = ""; diff --git a/tests/wpt/web-platform-tests/css/css-animations/inheritance.html b/tests/wpt/web-platform-tests/css/css-animations/inheritance.html index dd9d6469336..6e7697b9d81 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/inheritance.html +++ b/tests/wpt/web-platform-tests/css/css-animations/inheritance.html @@ -17,7 +17,7 @@ <script> assert_not_inherited('animation-delay', '0s', '2s'); assert_not_inherited('animation-direction', 'normal', 'reverse'); -assert_not_inherited('animation-duration', 'auto', '3s'); +assert_not_inherited('animation-duration', '0s', '3s'); assert_not_inherited('animation-fill-mode', 'none', 'forwards'); assert_not_inherited('animation-iteration-count', '1', '4'); assert_not_inherited('animation-name', 'none', 'spinner'); diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html index 9152c49ee0c..f8d34b889ba 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html @@ -18,24 +18,24 @@ // [ none | <keyframes-name> ] test(() => { - assert_equals(getComputedStyle(document.getElementById('target')).animation, "auto ease 0s 1 normal none running none"); + assert_equals(getComputedStyle(document.getElementById('target')).animation, "0s ease 0s 1 normal none running none"); }, "Default animation value"); test_computed_value("animation", "1s", "1s ease 0s 1 normal none running none"); -test_computed_value("animation", "cubic-bezier(0, -2, 1, 3)", "auto cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none"); +test_computed_value("animation", "cubic-bezier(0, -2, 1, 3)", "0s cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none"); test_computed_value("animation", "1s -3s", "1s ease -3s 1 normal none running none"); -test_computed_value("animation", "4", "auto ease 0s 4 normal none running none"); -test_computed_value("animation", "reverse", "auto ease 0s 1 reverse none running none"); -test_computed_value("animation", "both", "auto ease 0s 1 normal both running none"); -test_computed_value("animation", "paused", "auto ease 0s 1 normal none paused none"); -test_computed_value("animation", "none", "auto ease 0s 1 normal none running none"); -test_computed_value("animation", "anim", "auto ease 0s 1 normal none running anim"); +test_computed_value("animation", "4", "0s ease 0s 4 normal none running none"); +test_computed_value("animation", "reverse", "0s ease 0s 1 reverse none running none"); +test_computed_value("animation", "both", "0s ease 0s 1 normal both running none"); +test_computed_value("animation", "paused", "0s ease 0s 1 normal none paused none"); +test_computed_value("animation", "none", "0s ease 0s 1 normal none running none"); +test_computed_value("animation", "anim", "0s ease 0s 1 normal none running anim"); test_computed_value("animation", "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)", "1s cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim"); test_computed_value("animation", "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)", - "auto ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none"); + "0s ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none"); // TODO: Add test with a single timing-function keyword. </script> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html index ef2ef69059f..a8bc1600f80 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html @@ -15,6 +15,34 @@ test_computed_value("animation-duration", "500ms", "0.5s"); test_computed_value("animation-duration", "calc(2 * 3s)", "6s"); test_computed_value("animation-duration", "20s, 10s"); + +// https://github.com/w3c/csswg-drafts/issues/6530 +test_computed_value("animation-duration", "auto", "0s"); +test_computed_value("animation-duration", "auto, auto", "0s, 0s"); + +// Test that the resolved value of the specified animation-duration +// is as expected given some value for animation-timeline. +function test_auto_duration(duration, timeline, expected) { + test((t) => { + t.add_cleanup(() => { + target.style = ""; + }); + target.style.animationDuration = duration; + target.style.animationTimeline = timeline; + assert_equals(expected, getComputedStyle(target).animationDuration); + }, `Resolved value of animation-duration:${duration} with animation-timeline:${timeline}`); +} + +test_auto_duration("auto", "auto", "0s"); +test_auto_duration("auto", "auto, auto", "auto"); +test_auto_duration("auto", "--t", "auto"); +test_auto_duration("auto", "--t, --t2", "auto"); +test_auto_duration("auto", "none", "auto"); +test_auto_duration("auto", "scroll()", "auto"); +test_auto_duration("auto", "view()", "auto"); +test_auto_duration("0s", "auto", "0s"); +test_auto_duration("0s", "auto, auto", "0s"); + </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html index 8b482ff900f..0856ab24a04 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html @@ -34,9 +34,9 @@ test_shorthand_value('animation', 'anim paused both reverse, 4 1s -3s cubic-bezi 'animation-fill-mode': 'both, none', 'animation-play-state': 'paused, running', 'animation-name': 'anim, none', - 'animation-timeline': 'auto, auto', - 'animation-range-start': 'normal, normal', - 'animation-range-end': 'normal, normal', + 'animation-timeline': 'auto', + 'animation-range-start': 'normal', + 'animation-range-end': 'normal', }); test_shorthand_value('animation', '4 1s -3s cubic-bezier(0, -2, 1, 3), anim paused both reverse', { @@ -48,9 +48,9 @@ test_shorthand_value('animation', '4 1s -3s cubic-bezier(0, -2, 1, 3), anim paus 'animation-fill-mode': 'none, both', 'animation-play-state': 'running, paused', 'animation-name': 'none, anim', - 'animation-timeline': 'auto, auto', - 'animation-range-start': 'normal, normal', - 'animation-range-end': 'normal, normal', + 'animation-timeline': 'auto', + 'animation-range-start': 'normal', + 'animation-range-end': 'normal', }); </script> </body> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html index 7a0248d3dff..5dc2b477d32 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-content-box.html @@ -24,7 +24,7 @@ background-color:red; } </style> - <head/> + </head> <body> <p> "Test passes if the background color is limited to the content only and border is blue dotted without red." diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-002.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-002.html new file mode 100644 index 00000000000..ac76eb2a5ef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-002.html @@ -0,0 +1,53 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Backgrounds and Borders Test: border-image-slice (basic)</title> + + <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net"> + <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice"> + <link rel="match" href="reference/ref-filled-green-100px-square.xht"> + + <meta name="flags" content=""> + + <!-- + + This is a follow-up to + Pull Request 8788: Update css-backgrounds/border-image tests + https://github.com/web-platform-tests/wpt/pull/8788 + + Credit should go to Chris Nardi for trying to fix + 16 border-image tests with 2 relevant commits + + --> + + <style> + div#red-overlapped-ref + { + background-color: red; + height: 100px; + width: 100px; + } + + div#green-overlapping-test + { + border: red solid 40px; + + border-image-slice: 1; + border-image-source: url("support/1pxgreen-98pxred.png"); + } + + div#green-filled-center + { + background-color: green; + height: 20px; + } + </style> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div id="red-overlapped-ref"> + <div id="green-overlapping-test"> + <div id="green-filled-center"></div> + </div> + </div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-003.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-003.html new file mode 100644 index 00000000000..6d4ee0fde93 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-003.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Backgrounds and Borders Test: border-image-slice with fill keyword (basic)</title> + + <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net"> + <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice"> + <link rel="match" href="reference/ref-filled-green-100px-square.xht"> + + <meta name="flags" content=""> + + <!-- + + This is a follow-up to + Pull Request 8788: Update css-backgrounds/border-image tests + https://github.com/web-platform-tests/wpt/pull/8788 + + Credit should go to Chris Nardi for trying to fix + 16 border-image tests with 2 relevant commits + + --> + + <style> + div#red-overlapped-ref + { + background-color: red; + height: 100px; + width: 100px; + } + + div#green-overlapping-test + { + border: red solid 40px; + height: 20px; + + border-image-slice: 5 fill; + border-image-source: url("support/12x12-green.png"); + } + </style> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div id="red-overlapped-ref"> + <div id="green-overlapping-test"></div> + </div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-004.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-004.html new file mode 100644 index 00000000000..844d98bb3cd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-004.html @@ -0,0 +1,53 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Backgrounds and Borders Test: border-image-slice with a percentage unit value (basic)</title> + + <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net"> + <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice"> + <link rel="match" href="reference/ref-filled-green-100px-square.xht"> + + <meta name="flags" content=""> + + <!-- + + This is a follow-up to + Pull Request 8788: Update css-backgrounds/border-image tests + https://github.com/web-platform-tests/wpt/pull/8788 + + Credit should go to Chris Nardi for trying to fix + 16 border-image tests with 2 relevant commits + + --> + + <style> + div#red-overlapped-ref + { + background-color: red; + height: 100px; + width: 100px; + } + + div#green-overlapping-test + { + border: red solid 40px; + + border-image-slice: 1%; + border-image-source: url("support/1pxgreen-98pxred.png"); + } + + div#green-filled-center + { + background-color: green; + height: 20px; + } + </style> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div id="red-overlapped-ref"> + <div id="green-overlapping-test"> + <div id="green-filled-center"></div> + </div> + </div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-006.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-006.html new file mode 100644 index 00000000000..e3782f2ecd1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-006.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Backgrounds and Borders Test: border-image-slice (basic)</title> + + <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net"> + <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice"> + <link rel="match" href="reference/border-image-006-ref.html"> + + <meta name="flags" content=""> + + <!-- + + This is a follow-up to + Pull Request 8788: Update css-backgrounds/border-image tests + https://github.com/web-platform-tests/wpt/pull/8788 + + Credit should go to Chris Nardi for trying to fix + 16 border-image tests with 2 relevant commits + + --> + + <style> + div#outer-test + { + border: red solid 25px; + width: 50px; + + border-image-source: url("support/1x1-green.png"); + } + + div#inner-blue + { + border: blue solid 1px; + height: 48px; + } + </style> + + <p>Test passes if there is an hollow blue square with smaller filled green squares at its corners and <strong>no red</strong>. + + <div id="outer-test"> + <div id="inner-blue"></div> + </div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-007.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-007.html new file mode 100644 index 00000000000..41ac9dac37f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-007.html @@ -0,0 +1,70 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Backgrounds and Borders Test: border-image-width with various values (basic)</title> + + <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net"> + <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-width"> + <link rel="match" href="reference/border-image-007-ref.html"> + + <meta name="flags" content=""> + + <!-- + + This is a follow-up to + Pull Request 8788: Update css-backgrounds/border-image tests + https://github.com/web-platform-tests/wpt/pull/8788 + + Credit should go to Chris Nardi for trying to fix + 16 border-image tests with 2 relevant commits + + --> + + <style> + div.outer-parent + { + border: red solid 40px; + border-image-slice: 24; + border-image-source: url("support/50x50-green.png"); + height: 12px; + margin-bottom: 16px; + padding: 2px 4px 6px 8px; + width: 8px; + } + + div.inner-child + { + background-color: blue; + height: 100%; + width: 100%; + } + + div#first-subtest + { + border-image-width: 1px; + } + + div#second-subtest + { + border-image-width: 1px 5px; + } + + div#third-subtest + { + border-image-width: 1px 5px 10px; + } + + div#fourth-subtest + { + border-image-width: 1px 5px 10px 15px; + } + </style> + + <div class="outer-parent" id="first-subtest"><div class="inner-child"></div></div> + + <div class="outer-parent" id="second-subtest"><div class="inner-child"></div></div> + + <div class="outer-parent" id="third-subtest"><div class="inner-child"></div></div> + + <div class="outer-parent" id="fourth-subtest"><div class="inner-child"></div></div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-011.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-011.html new file mode 100644 index 00000000000..357845bbf71 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-011.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Backgrounds and Borders Test: border-image-outset (basic)</title> + + <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net"> + <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-outset"> + <link rel="match" href="reference/ref-filled-green-100px-square.xht"> + + <meta name="flags" content=""> + + <!-- + + This is a follow-up to + Pull Request 8788: Update css-backgrounds/border-image tests + https://github.com/web-platform-tests/wpt/pull/8788 + + Credit should go to Chris Nardi for trying to fix + 16 border-image tests with 2 relevant commits + + --> + + <style> + div#red-overlapped-ref + { + background-color: red; + padding: 24px; + height: 52px; + width: 52px; + /* border-box is therefore 100px by 100px */ + } + + div#green-overlapping-test + { + background-color: green; + border: red solid 1px; + height: 50px; + width: 50px; /* border-box is 52px by 52px */ + + border-image-outset: 24px; /* 24px is equal to padding belt */ + border-image-slice: 25; + border-image-source: url("support/60x60-green.png"); + border-image-width: 25px; /* we make sure that we will fill the outset */ + } + </style> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div id="red-overlapped-ref"> + <div id="green-overlapping-test"></div> + </div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-012.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-012.html new file mode 100644 index 00000000000..16a6e9061df --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-012.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Backgrounds and Borders Test: border-image-outset property does not trigger scrolling</title> + + <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net"> + <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-outset"> + <link rel="match" href="reference/border-image-012-ref.html"> + + <meta name="flags" content="scroll"> + + <!-- + + This is a follow-up to + Pull Request 8788: Update css-backgrounds/border-image tests + https://github.com/web-platform-tests/wpt/pull/8788 + + Credit should go to Chris Nardi for trying to fix + 16 border-image tests with 2 relevant commits + + --> + + <style> + div#red-overlapped-ref + { + background-color: red; + width: 100px; + height: 100px; + overflow: auto; + } + + div#green-overlapping-test + { + background-color: green; + border: 1px solid red; + width: 98px; + height: 98px; + /* border-box is therefore 100px by 100px */ + + border-image-source: url("support/60x60-green.png"); + border-image-slice: 10; + border-image-width: 10px; + border-image-outset: 9px; + } + </style> + + <p>Test passes if there is a filled green square and if it has <strong>no scrollbar</strong>. + + <div id="red-overlapped-ref"> + <div id="green-overlapping-test"></div> + </div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-1.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-1.html deleted file mode 100644 index 2318f6c1666..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-1.html +++ /dev/null @@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #1 border-image-source - </title> - <meta name="assert" content="Basic support for the border-image-source property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - - <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-source"> - - <style type="text/css"> - - #test { - background-color: #009900; - border : 10px solid red; - width : 20px; - height : 20px; - - border-image-source: url(support/img-ref-1.png); - } - - </style> - -</head> -<body> - - <p> - Pass if the square is fully green without any red border. - </p> - - <div id="test"></div> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-10.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-10.html deleted file mode 100644 index 4fa2c2a2f8a..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-10.html +++ /dev/null @@ -1,50 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #10 border-image-width - </title> - <meta name="assert" content="Support for 4 values for the border-image-width property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-width"> - - <style type="text/css"> - - #test { - border : 10px solid red; - width : 20px; - height : 20px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 10; - border-image-width : 1px 5px 10px 15px; - } - - #ref { - border-top : 1px solid #009900; - border-right : 5px solid #009900; - border-bottom : 10px solid #009900; - border-left : 15px solid #009900; - - padding: 9px 5px 0 0; - width : 15px; - height : 20px; - } - - </style> - -</head> -<body> - - <p> - Pass if both squares are identical. - </p> - - <p id="test"></p> - <p id="ref"></p> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-11.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-11.html deleted file mode 100644 index cc662698b70..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-11.html +++ /dev/null @@ -1,49 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #11 border-image-outset - </title> - <meta name="assert" content="Basic support for the border-image-outset property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-source"> - - <style type="text/css"> - - #fail { - background-color: red; - padding : 9px; - width : 24px; - height : 24px; - } - - #test { - background-color: #009900; - border : 1px solid red; - width : 22px; - height : 22px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 10; - border-image-width : 10px; - border-image-outset: 9px; - } - - </style> - -</head> -<body> - - <p> - Pass if the square is green. - </p> - - <div id="fail"> - <div id="test"></div> - </div> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-12.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-12.html deleted file mode 100644 index d5cacb027ea..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-12.html +++ /dev/null @@ -1,49 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #12 border-image-outset - </title> - <meta name="assert" content="The border-image-outset property should not trigger scroll" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-outset"> - - <style type="text/css"> - - #fail { - background-color: red; - width : 42px; - height : 42px; - overflow : auto; - } - - #test { - background-color: #009900; - border : 1px solid red; - width : 40px; - height : 40px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 10; - border-image-width : 10px; - border-image-outset: 9px; - } - - </style> - -</head> -<body> - - <p> - Pass if there is <strong>no</strong> scrollbars around the square - </p> - - <div id="fail"> - <div id="test"></div> - </div> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-2.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-2.html deleted file mode 100644 index b6936125b14..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-2.html +++ /dev/null @@ -1,53 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #2 border-image-slice - </title> - <meta name="assert" content="Basic support for the border-image-slice property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice"> - - <style type="text/css"> - - #fail { - background-color: red; - width : 60px; - height : 60px; - } - - #filler { - background-color: #009900; - width : 40px; - height : 40px; - } - - #test { - border : 10px solid red; - width : 40px; - height : 40px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 10; - } - - </style> - -</head> -<body> - - <p> - Pass if the square is fully green. - </p> - - <div id="fail"> - <div id="test"> - <div id="filler"></div> - </div> - </div> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-3.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-3.html deleted file mode 100644 index d4f1524112e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-3.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #3 border-image-slice - </title> - <meta name="assert" content="Support for the fill keyword on the border-image-slice property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice"> - - <style type="text/css"> - - #fail { - background-color: red; - width : 60px; - height : 60px; - } - - #test { - background-color: red; - border : 10px solid red; - width : 40px; - height : 40px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 10 fill; - } - - </style> - -</head> -<body> - - <p> - Pass if the square is fully green. - </p> - - <div id="fail"> - <div id="test"></div> - </div> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-4.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-4.html deleted file mode 100644 index 619b677e114..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-4.html +++ /dev/null @@ -1,53 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #4 border-image-slice - </title> - <meta name="assert" content="Support for percentage with the border-image-slice property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice"> - - <style type="text/css"> - - #fail { - background-color: red; - width : 60px; - height : 60px; - } - - #filler { - background-color: #009900; - width : 40px; - height : 40px; - } - - #test { - border : 10px solid red; - width : 40px; - height : 40px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 33%; - } - - </style> - -</head> -<body> - - <p> - Pass if the square is fully green. - </p> - - <div id="fail"> - <div id="test"> - <div id="filler"></div> - </div> - </div> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6-ref.html deleted file mode 100644 index f3e3bb79c05..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6-ref.html +++ /dev/null @@ -1,69 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>border-image-6-ref</title> - - <style type="text/css"> - #container { - position: relative; - - width: 60px; - height: 60px; - } - - #filler { - position: absolute; - top: 10px; - left: 10px; - - width: 40px; - height: 40px; - - background-color: #090; - } - - .small { - position: absolute; - - width: 10px; - height: 10px; - - /* orange appears here to make it super-clear if this doesn't load */ - background: url(support/img-ref-1.png) orange; - } - - .small.top { - top: 0; - } - - .small.bottom { - bottom: 0; - } - - .small.left { - left: 0; - } - - .small.right { - right: 0; - } - </style> - - </head> - <body> - - <p> - Pass if the green square have smaller green squares at its corners and <strong>no</strong> red borders. - </p> - - <div id="container"> - <div id="filler"></div> - <div class="small top left"></div> - <div class="small top right"></div> - <div class="small bottom left"></div> - <div class="small bottom right"></div> - </div> - - </body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6.html deleted file mode 100644 index bc4cb1386b5..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-6.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #6 border-image-slice - </title> - <meta name="assert" content="The border-image-slice property default value is 100%" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#border-image-slice"> - - <link rel="match" href="border-image-6-ref.html" /> - - <style type="text/css"> - - #filler { - background-color : #009900; - width : 40px; - height: 40px; - } - - #test { - border : 10px solid red; - width : 40px; - height : 40px; - - border-image-source: url(support/img-ref-1.png); - } - - </style> - -</head> -<body> - - <p> - Pass if the green square have smaller green squares at its corners and <strong>no</strong> red borders. - </p> - - <div id="test"> - <div id="filler"></div> - </div> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-7.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-7.html deleted file mode 100644 index 4142dcb427c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-7.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #7 border-image-width - </title> - <meta name="assert" content="Basic support for the border-image-width property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-width"> - - <style type="text/css"> - - #test { - border : 10px solid red; - width : 20px; - height : 20px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 10; - border-image-width : 1px; - } - - #ref { - border : 1px solid #009900; - padding: 9px; - width : 20px; - height : 20px; - } - - </style> - -</head> -<body> - - <p> - Pass if both squares are identical. - </p> - - <p id="test"></p> - <p id="ref"></p> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-8.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-8.html deleted file mode 100644 index 26eaf68c208..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-8.html +++ /dev/null @@ -1,50 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #8 border-image-width - </title> - <meta name="assert" content="Support for 2 values for the border-image-width property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-width"> - - <style type="text/css"> - - #test { - border : 10px solid red; - width : 20px; - height : 20px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 10; - border-image-width : 1px 5px; - } - - #ref { - border-top : 1px solid #009900; - border-right : 5px solid #009900; - border-bottom : 1px solid #009900; - border-left : 5px solid #009900; - - padding: 9px 5px 9px 5px; - width : 20px; - height : 20px; - } - - </style> - -</head> -<body> - - <p> - Pass if both squares are identical. - </p> - - <p id="test"></p> - <p id="ref"></p> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-9.html b/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-9.html deleted file mode 100644 index 5d805ec7527..00000000000 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/border-image-9.html +++ /dev/null @@ -1,50 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title> - CSS Border and Background: border-image #9 border-image-width - </title> - <meta name="assert" content="Support for 3 values for the border-image-width property" /> - - <link rel="author" title="Jérémie Patonnier" href="mailto:jeremie@patonnier.net" / > - - <link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-width"> - - <style type="text/css"> - - #test { - border : 10px solid red; - width : 20px; - height : 20px; - - border-image-source: url(support/img-ref-1.png); - border-image-slice : 10; - border-image-width : 1px 5px 10px; - } - - #ref { - border-top : 1px solid #009900; - border-right : 5px solid #009900; - border-bottom : 10px solid #009900; - border-left : 5px solid #009900; - - padding: 9px 5px 0 5px; - width : 20px; - height : 20px; - } - - </style> - -</head> -<body> - - <p> - Pass if both squares are identical. - </p> - - <p id="test"></p> - <p id="ref"></p> - -</body> -</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html index 1c05517c62a..dac7b1012a0 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-position-valid.html @@ -38,6 +38,11 @@ test_valid_value("background-position", "top 17px right 18px", "right 18px top 1 test_valid_value("background-position", "bottom center", ["center bottom", "bottom"]); test_valid_value("background-position", "top left", "left top"); test_valid_value("background-position", "bottom right 19%", ["right 19% bottom", "right 19% bottom 0%"]); // "right 19% bottom 0%" in Edge +test_valid_value("background-position", "20% 0%"); +test_valid_value("background-position", "0% 0%"); +test_valid_value("background-position", "0%", ["0%", "0% center"]); +test_valid_value("background-position", "0% center", ["0%", "0% center"]); +test_valid_value("background-position", "center 0%"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html index cb086dd3ec8..e011c2238d2 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/parsing/background-valid.html @@ -25,7 +25,7 @@ test_valid_value("background", test_shorthand_value('background', 'none', { 'background-image': 'none', - 'background-position': '0%', + 'background-position': '0% 0%', 'background-size': 'auto', 'background-repeat': 'repeat', 'background-attachment': 'scroll', diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-006-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-006-ref.html new file mode 100644 index 00000000000..8e5ef401ec4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-006-ref.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reftest reference</title> + + <style> + table + { + border-spacing: 0px; + table-layout: fixed; + } + + td + { + padding: 0px; + } + + td.green-square + { + background-color: green; + height: 25px; + width: 25px; + } + + td#blue-square + { + border: blue solid 1px; + height: 48px; + width: 48px; + } + </style> + + <p>Test passes if there is an hollow blue square with smaller filled green squares at its corners and <strong>no red</strong>. + + <table> + + <tr><td class="green-square"><td><td class="green-square"> + + <tr><td><td id="blue-square"><td> + + <tr><td class="green-square"><td><td class="green-square"> + + </table> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-007-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-007-ref.html new file mode 100644 index 00000000000..9200edd797e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-007-ref.html @@ -0,0 +1,63 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reftest reference</title> + + <style> + div.outer + { + height: 20px; + margin-bottom: 16px; + width: 20px; + } + + div.inside + { + background-color: blue; + height: 12px; + margin: 2px 4px 6px 8px; + width: 8px; + } + + div#first-subtest + { + border: green solid 1px; + padding: 39px; + } + + div#second-subtest + { + border-top: green solid 1px; + border-right: green solid 5px; + border-bottom: green solid 1px; + border-left: green solid 5px; + padding: 39px 35px; + } + + div#third-subtest + { + border-top: green solid 1px; + border-right: green solid 5px; + border-bottom: green solid 10px; + border-left: green solid 5px; + padding: 39px 35px 30px; + } + + div#fourth-subtest + { + border-top: green solid 1px; + border-right: green solid 5px; + border-bottom: green solid 10px; + border-left: green solid 15px; + padding: 39px 35px 30px 25px; + } + </style> + + <div class="outer" id="first-subtest"><div class="inside"></div></div> + + <div class="outer" id="second-subtest"><div class="inside"></div></div> + + <div class="outer" id="third-subtest"><div class="inside"></div></div> + + <div class="outer" id="fourth-subtest"><div class="inside"></div></div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-012-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-012-ref.html new file mode 100644 index 00000000000..c11db014019 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/border-image-012-ref.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> + + <meta charset="utf-8"> + + <title>CSS Reftest reference</title> + + <style> + div + { + background-color: green; + height: 100px; + width: 100px; + } + </style> + + <p>Test passes if there is a filled green square and if it has <strong>no scrollbar</strong>. + + <div></div> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html index 439747a9ff2..95db5aa78c7 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/reference.html @@ -32,7 +32,7 @@ } </style> - <head/> + </head> <body> <p> "Test passes if the border is blue dotted without red." diff --git a/tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html index ac665a9bedb..fa29b5106a7 100644 --- a/tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html +++ b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-revert-layer.html @@ -329,6 +329,7 @@ text-transform: lowercase; text-underline-offset: 123px; text-underline-position: under; + text-wrap: nowrap; top: 123px; touch-action: none; transform: scale(-1); @@ -345,7 +346,8 @@ vector-effect: non-scaling-stroke; vertical-align: 123px; visibility: collapse; - white-space: pre; + white-space-collapse: preserve; + white-space-trim: discard-inner; widows: 123; width: 123px; will-change: height; diff --git a/tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html b/tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html index e7dd96c5ac7..0e88778202f 100644 --- a/tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html +++ b/tests/wpt/web-platform-tests/css/css-cascade/scope-deep.html @@ -22,7 +22,7 @@ function createStyleSheet(length, i) { `.trim(); } -// <div class=s0><div class=s1>...<span/>...</div></div> +// <div class=s0><div class=s1>...<span></span>...</div></div> function createElementChain(length, i) { if (length < 1) throw 'Invalid length'; diff --git a/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html new file mode 100644 index 00000000000..c664ce4ccf3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node-ref.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<style> +.test { + border: 1px solid; + max-width: max-content; +} + +span { + display: block; + background-color: green; +} +</style> +<div class="test"> + <span style="width: 40px; height: 40px"></span> +</div> +<div class="test"> + <span style="width: 100px; height: 100px"></span> +</div> +<div class="test"> + <span style="width: 200px; height: 200px"></span> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node.html b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node.html new file mode 100644 index 00000000000..e1a5c714516 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-sharing-via-rule-node.html @@ -0,0 +1,53 @@ +<!doctype html> +<meta charset="utf-8"> +<link rel="help" href="https://drafts.csswg.org/css-contain-3/#container-lengths"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1835179"> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="author" href="https://mozilla.org" title="Mozilla"> +<link rel="match" href="container-units-sharing-via-rule-node-ref.html"> +<style> +.test { + position: relative; + z-index: 0; + border: 1px solid; + max-width: max-content; +} + +.container { + position: absolute; + container-type: size; + inset: 0; +} + +.container-content { + position: absolute; + top: 0; + left: 0; + width: 100cqi; + height: 100cqb; + background-color: green; +} + +span { + display: block; + background-color: red; +} +</style> +<div class="test"> + <div class="container"> + <div class="container-content"></div> + </div> + <span style="width: 40px; height: 40px"></span> +</div> +<div class="test"> + <div class="container"> + <div class="container-content"></div> + </div> + <span style="width: 100px; height: 100px"></span> +</div> +<div class="test"> + <div class="container"> + <div class="container-content"></div> + </div> + <span style="width: 200px; height: 200px"></span> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-000.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-000.html new file mode 100644 index 00000000000..fef4f5e5405 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-000.html @@ -0,0 +1,29 @@ +<!doctype html> +<html class="reftest-wait"> +<meta charset="utf8"> +<title>CSS Content Visibility: popover doesn't show when hidden</title> +<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> +<link rel="match" href="container-ref.html"> +<meta name="assert" content="top layer popovers don't render when in skipped subtrees"> + +<script src="/common/reftest-wait.js"></script> + +<style> +.box { width: 150px; height: 150px; background: lightblue } +.hidden { content-visibility: hidden } +</style> + +<div class="box hidden"> +Fail +<div popover id=popover>Fail<div id=inner></div></div> +</div> + +<script> +function runTest() { + popover.showPopover(); + takeScreenshot(); +} + +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-001.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-001.html new file mode 100644 index 00000000000..fb3c9096da6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-001.html @@ -0,0 +1,30 @@ +<!doctype html> +<html class="reftest-wait"> +<meta charset="utf8"> +<title>CSS Content Visibility: popover doesn't show when hidden after render</title> +<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> +<link rel="match" href="container-ref.html"> +<meta name="assert" content="top layer popovers don't render when in skipped subtrees"> + +<script src="/common/reftest-wait.js"></script> + +<style> +.box { width: 150px; height: 150px; background: lightblue } +.hidden { content-visibility: hidden } +</style> + +<div id=container class=box> +Fail +<div popover id=popover>Fail<div id=inner></div></div> +</div> + +<script> +function runTest() { + container.classList.add("hidden"); + popover.showPopover(); + takeScreenshot(); +} + +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-002.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-002.html new file mode 100644 index 00000000000..48b436f4de1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-002.html @@ -0,0 +1,32 @@ +<!doctype html> +<html class="reftest-wait"> +<meta charset="utf8"> +<title>CSS Content Visibility: popover doesn't show when hidden after render</title> +<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> +<link rel="match" href="container-ref.html"> +<meta name="assert" content="top layer popovers don't render when in skipped subtrees"> + +<script src="/common/reftest-wait.js"></script> + +<style> +.box { width: 150px; height: 150px; background: lightblue } +.hidden { content-visibility: hidden } +</style> + +<div id=container class=box> +content +<div popover id=popover>popover<div id=inner></div></div> +</div> + +<script> +function runTest() { + container.classList.add("hidden"); + popover.showPopover(); + inner.getBoundingClientRect(); + + takeScreenshot(); +} + +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-003.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-003.html new file mode 100644 index 00000000000..df3cf07a015 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-003.html @@ -0,0 +1,37 @@ +<!doctype html> +<html class="reftest-wait"> +<meta charset="utf8"> +<title>CSS Content Visibility: popover shows when rendered</title> +<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> +<link rel="match" href="content-with-popover-top-layer-ref.html"> +<meta name="assert" content="top layer popovers start rendering when c-v is removed"> + +<script src="/common/reftest-wait.js"></script> + +<style> +.box { width: 100px; height: 100px; border: 1px solid black; } +.hidden { content-visibility: hidden } +#popover { outline: none; } +</style> + +<div id=container class=box> +This test passes if you can see “PASS” in a white box. +<div popover id=popover>PASS<div id=inner></div></div> +</div> +text + +<script> +function unhide() { + container.classList.remove("hidden"); + takeScreenshot(); +} + +function runTest() { + container.classList.add("hidden"); + popover.showPopover(); + requestAnimationFrame(unhide); +} + +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-004.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-004.html new file mode 100644 index 00000000000..bbf4567e37d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-004.html @@ -0,0 +1,31 @@ +<!doctype html> +<html class="reftest-wait"> +<meta charset="utf8"> +<title>CSS Content Visibility: popover shows under c-v auto</title> +<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> +<link rel="match" href="spacer-with-popover-top-layer-ref.html"> +<meta name="assert" content="top layer popovers render under c-v auto"> + +<script src="/common/reftest-wait.js"></script> + +<style> +.box { width: 100px; height: 100px; border: 1px solid black; } +.auto { content-visibility: auto } +.spacer { width: 10px; height: 3000px; background: lightblue; } +</style> + +<div class=spacer></div> +<div id=container class="box auto"> +content +<div popover id=popover>PASS<div id=inner></div></div> +</div> + +<script> +function runTest() { + popover.showPopover(); + takeScreenshot(); +} + +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-005.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-005.html new file mode 100644 index 00000000000..264d7b317e0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-005.html @@ -0,0 +1,31 @@ +<!doctype html> +<html class="reftest-wait"> +<meta charset="utf8"> +<title>CSS Content Visibility: popover shows under c-v auto</title> +<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> +<link rel="match" href="spacer-with-popover-top-layer-ref.html"> +<meta name="assert" content="top layer popovers render under c-v auto"> + +<script src="/common/reftest-wait.js"></script> + +<style> +.box { width: 100px; height: 100px; border: 1px solid black; } +.auto { content-visibility: auto } +.spacer { width: 10px; height: 3000px; background: lightblue; } +</style> + +<div class=spacer></div> +<div id=container class="box"> +content +<div popover id=popover><div id=inner class="auto">PASS</div></div> +</div> + +<script> +function runTest() { + popover.showPopover(); + takeScreenshot(); +} + +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-006.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-006.html new file mode 100644 index 00000000000..fbe8b9fbb77 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-006.html @@ -0,0 +1,35 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS Content Visibility: offscreen c-v auto content is relevant when in top layer</title> +<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> +<meta name="assert" content="offscreen c-v auto content is relevant when in top layer"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +#inner { + content-visibility: auto; + contain-intrinsic-size: 100px 100px; +} +</style> + +<div popover id="popover"> + <div id="spacer" style="height: 100000px;"></div> + <div id="inner"> + <div style="height: 200px; width: 200px;">content</div> + </div> +</div> + +<script> +test(() => { + popover.showPopover(); + + // Even though the element with `content-visibility: auto` has an ancestor + // in the top layer, this element is not in the top layer list (although + // it's in the top layer stacking context). This means it should not be + // relevant to the user, because it is not onscreen. + assert_equals(inner.getBoundingClientRect().height, 100); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-hide-after-addition.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-hide-after-addition.html new file mode 100644 index 00000000000..e3934bf46f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-with-popover-top-layer-hide-after-addition.html @@ -0,0 +1,33 @@ +<!doctype html> +<html class="reftest-wait"> +<meta charset="utf8"> +<title>CSS Content Visibility: popover doesn't show when hidden after showModal()</title> +<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> +<link rel="match" href="container-ref.html"> +<meta name="assert" content="top layer popovers don't render when in skipped subtrees"> + +<script src="/common/reftest-wait.js"></script> + +<style> +.box { width: 150px; height: 150px; background: lightblue } +.hidden { content-visibility: hidden } +</style> + +<div id=container class=box> +FAIL +<div popover id=popovers>FAIL<div id=inner></div></div> +</div> + +<script> +function runTest() { + popovers.showPopover(); + inner.getBoundingClientRect(); + + container.classList.add("hidden"); + + takeScreenshot(); +} + +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html new file mode 100644 index 00000000000..59b2304d9ef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-with-popover-top-layer-ref.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS Content Visibility: popover shows when rendered (ref)</title> + +<style> +.box { width: 100px; height: 100px; border: 1px solid black; } +#popover { outline: none; } +</style> + +<div id=container class=box> +This test passes if you can see “PASS” in a white box. +<div popover id=popover>PASS<div id=inner></div></div> +</div> +text + +<script> +popover.showPopover(); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html new file mode 100644 index 00000000000..6c4c65f58c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/spacer-with-popover-top-layer-ref.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf8"> +<title>CSS Content Visibility: popover shows under c-v auto (ref)</title> + +<style> +.box { width: 100px; height: 100px; border: 1px solid black; } +.spacer { width: 10px; height: 3000px; background: lightblue; } +</style> + +<div class=spacer></div> +<div id=container class=box> +content +<div popover id=popover>PASS<div id=inner></div></div> +</div> + +<script> +popover.showPopover(); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html index 52712e3fd07..e7abaad87e5 100644 --- a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html +++ b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202-ref.html @@ -10,33 +10,33 @@ ol li { list-style-type: cjk-earthly-branch; } /* the following CSS is not part of the test */ .test { font-size: 25px; } -ol { margin: 0; padding-left: 8em; } +ol { margin: 0; padding-left: 8em; line-height: 100%;} </style> </head> <body> <p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p> <div class="test"> -<ol start="13"><div><bdi dir=ltr>子子、</bdi>子子</div></ol> -<ol start="14"><div><bdi dir=ltr>子丑、</bdi>子丑</div></ol> -<ol start="77"><div><bdi dir=ltr>巳辰、</bdi>巳辰</div></ol> -<ol start="80"><div><bdi dir=ltr>巳未、</bdi>巳未</div></ol> -<ol start="99"><div><bdi dir=ltr>未寅、</bdi>未寅</div></ol> -<ol start="100"><div><bdi dir=ltr>未卯、</bdi>未卯</div></ol> -<ol start="101"><div><bdi dir=ltr>未辰、</bdi>未辰</div></ol> -<ol start="222"><div><bdi dir=ltr>子巳巳、</bdi>子巳巳</div></ol> -<ol start="540"><div><bdi dir=ltr>寅未亥、</bdi>寅未亥</div></ol> -<ol start="999"><div><bdi dir=ltr>巳戌寅、</bdi>巳戌寅</div></ol> -<ol start="1000"><div><bdi dir=ltr>巳戌卯、</bdi>巳戌卯</div></ol> -<ol start="1005"><div><bdi dir=ltr>巳戌申、</bdi>巳戌申</div></ol> -<ol start="1060"><div><bdi dir=ltr>午卯卯、</bdi>午卯卯</div></ol> -<ol start="1065"><div><bdi dir=ltr>午卯申、</bdi>午卯申</div></ol> -<ol start="1800"><div><bdi dir=ltr>亥辰亥、</bdi>亥辰亥</div></ol> -<ol start="1860"><div><bdi dir=ltr>亥酉亥、</bdi>亥酉亥</div></ol> -<ol start="5865"><div><bdi dir=ltr>寅卯未申、</bdi>寅卯未申</div></ol> -<ol start="7005"><div><bdi dir=ltr>寅亥午申、</bdi>寅亥午申</div></ol> -<ol start="7800"><div><bdi dir=ltr>卯巳子亥、</bdi>卯巳子亥</div></ol> -<ol start="7864"><div><bdi dir=ltr>卯巳午卯、</bdi>卯巳午卯</div></ol> -<ol start="9999"><div><bdi dir=ltr>辰申辰寅、</bdi>辰申辰寅</div></ol> +<ol start="13"><div><bdi dir=ltr>13、</bdi>13</div></ol> +<ol start="14"><div><bdi dir=ltr>14、</bdi>14</div></ol> +<ol start="77"><div><bdi dir=ltr>77、</bdi>77</div></ol> +<ol start="80"><div><bdi dir=ltr>80、</bdi>80</div></ol> +<ol start="99"><div><bdi dir=ltr>99、</bdi>99</div></ol> +<ol start="100"><div><bdi dir=ltr>100、</bdi>100</div></ol> +<ol start="101"><div><bdi dir=ltr>101、</bdi>101</div></ol> +<ol start="222"><div><bdi dir=ltr>222、</bdi>222</div></ol> +<ol start="540"><div><bdi dir=ltr>540、</bdi>540</div></ol> +<ol start="999"><div><bdi dir=ltr>999、</bdi>999</div></ol> +<ol start="1000"><div><bdi dir=ltr>1000、</bdi>1000</div></ol> +<ol start="1005"><div><bdi dir=ltr>1005、</bdi>1005</div></ol> +<ol start="1060"><div><bdi dir=ltr>1060、</bdi>1060</div></ol> +<ol start="1065"><div><bdi dir=ltr>1065、</bdi>1065</div></ol> +<ol start="1800"><div><bdi dir=ltr>1800、</bdi>1800</div></ol> +<ol start="1860"><div><bdi dir=ltr>1860、</bdi>1860</div></ol> +<ol start="5865"><div><bdi dir=ltr>5865、</bdi>5865</div></ol> +<ol start="7005"><div><bdi dir=ltr>7005、</bdi>7005</div></ol> +<ol start="7800"><div><bdi dir=ltr>7800、</bdi>7800</div></ol> +<ol start="7864"><div><bdi dir=ltr>7864、</bdi>7864</div></ol> +<ol start="9999"><div><bdi dir=ltr>9999、</bdi>9999</div></ol> </div> <!--Notes: You will need an appropriate font to run this test. diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html index 909118fb109..6f00ee8b2d8 100644 --- a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html +++ b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-earthly-branch/css3-counter-styles-202.html @@ -11,33 +11,33 @@ ol li { list-style-type: cjk-earthly-branch; } /* the following CSS is not part of the test */ .test { font-size: 25px; } -ol { margin: 0; padding-left: 8em; list-style-position: inside; } +ol { margin: 0; padding-left: 8em; list-style-position: inside; line-height: 100%;} </style> </head> <body> <p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p> <div class="test"> -<ol start="13"><li title="13">子子</li></ol> -<ol start="14"><li title="14">子丑</li></ol> -<ol start="77"><li title="77">巳辰</li></ol> -<ol start="80"><li title="80">巳未</li></ol> -<ol start="99"><li title="99">未寅</li></ol> -<ol start="100"><li title="100">未卯</li></ol> -<ol start="101"><li title="101">未辰</li></ol> -<ol start="222"><li title="222">子巳巳</li></ol> -<ol start="540"><li title="540">寅未亥</li></ol> -<ol start="999"><li title="999">巳戌寅</li></ol> -<ol start="1000"><li title="1000">巳戌卯</li></ol> -<ol start="1005"><li title="1005">巳戌申</li></ol> -<ol start="1060"><li title="1060">午卯卯</li></ol> -<ol start="1065"><li title="1065">午卯申</li></ol> -<ol start="1800"><li title="1800">亥辰亥</li></ol> -<ol start="1860"><li title="1860">亥酉亥</li></ol> -<ol start="5865"><li title="5865">寅卯未申</li></ol> -<ol start="7005"><li title="7005">寅亥午申</li></ol> -<ol start="7800"><li title="7800">卯巳子亥</li></ol> -<ol start="7864"><li title="7864">卯巳午卯</li></ol> -<ol start="9999"><li title="9999">辰申辰寅</li></ol> +<ol start="13"><li title="13">13</li></ol> +<ol start="14"><li title="14">14</li></ol> +<ol start="77"><li title="77">77</li></ol> +<ol start="80"><li title="80">80</li></ol> +<ol start="99"><li title="99">99</li></ol> +<ol start="100"><li title="100">100</li></ol> +<ol start="101"><li title="101">101</li></ol> +<ol start="222"><li title="222">222</li></ol> +<ol start="540"><li title="540">540</li></ol> +<ol start="999"><li title="999">999</li></ol> +<ol start="1000"><li title="1000">1000</li></ol> +<ol start="1005"><li title="1005">1005</li></ol> +<ol start="1060"><li title="1060">1060</li></ol> +<ol start="1065"><li title="1065">1065</li></ol> +<ol start="1800"><li title="1800">1800</li></ol> +<ol start="1860"><li title="1860">1860</li></ol> +<ol start="5865"><li title="5865">5865</li></ol> +<ol start="7005"><li title="7005">7005</li></ol> +<ol start="7800"><li title="7800">7800</li></ol> +<ol start="7864"><li title="7864">7864</li></ol> +<ol start="9999"><li title="9999">9999</li></ol> </div> <!--Notes: You will need an appropriate font to run this test. diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html index 7d8e6fb613e..45b7037a8c1 100644 --- a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html +++ b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205-ref.html @@ -10,34 +10,34 @@ ol li { list-style-type: cjk-heavenly-stem; } /* the following CSS is not part of the test */ .test { font-size: 25px; } -ol { margin: 0; padding-left: 8em; } +ol { margin: 0; padding-left: 8em; line-height: 100%;} </style> </head> <body> <p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p> <div class="test"> -<ol start="11"><div><bdi dir=ltr>甲甲、</bdi>甲甲</div></ol> -<ol start="12"><div><bdi dir=ltr>甲乙、</bdi>甲乙</div></ol> -<ol start="43"><div><bdi dir=ltr>丁丙、</bdi>丁丙</div></ol> -<ol start="77"><div><bdi dir=ltr>庚庚、</bdi>庚庚</div></ol> -<ol start="80"><div><bdi dir=ltr>庚癸、</bdi>庚癸</div></ol> -<ol start="99"><div><bdi dir=ltr>壬壬、</bdi>壬壬</div></ol> -<ol start="100"><div><bdi dir=ltr>壬癸、</bdi>壬癸</div></ol> -<ol start="101"><div><bdi dir=ltr>癸甲、</bdi>癸甲</div></ol> -<ol start="222"><div><bdi dir=ltr>乙乙乙、</bdi>乙乙乙</div></ol> -<ol start="540"><div><bdi dir=ltr>戊丙癸、</bdi>戊丙癸</div></ol> -<ol start="999"><div><bdi dir=ltr>壬壬壬、</bdi>壬壬壬</div></ol> -<ol start="1000"><div><bdi dir=ltr>壬壬癸、</bdi>壬壬癸</div></ol> -<ol start="1005"><div><bdi dir=ltr>壬癸戊、</bdi>壬癸戊</div></ol> -<ol start="1060"><div><bdi dir=ltr>癸戊癸、</bdi>癸戊癸</div></ol> -<ol start="1065"><div><bdi dir=ltr>癸己戊、</bdi>癸己戊</div></ol> -<ol start="1800"><div><bdi dir=ltr>甲庚壬癸、</bdi>甲庚壬癸</div></ol> -<ol start="1860"><div><bdi dir=ltr>甲辛戊癸、</bdi>甲辛戊癸</div></ol> -<ol start="5865"><div><bdi dir=ltr>戊辛己戊、</bdi>戊辛己戊</div></ol> -<ol start="7005"><div><bdi dir=ltr>己壬癸戊、</bdi>己壬癸戊</div></ol> -<ol start="7800"><div><bdi dir=ltr>庚庚壬癸、</bdi>庚庚壬癸</div></ol> -<ol start="7864"><div><bdi dir=ltr>庚辛己丁、</bdi>庚辛己丁</div></ol> -<ol start="9999"><div><bdi dir=ltr>壬壬壬壬、</bdi>壬壬壬壬</div></ol> +<ol start="11"><div><bdi dir=ltr>11、</bdi>11</div></ol> +<ol start="12"><div><bdi dir=ltr>12、</bdi>12</div></ol> +<ol start="43"><div><bdi dir=ltr>43、</bdi>43</div></ol> +<ol start="77"><div><bdi dir=ltr>77、</bdi>77</div></ol> +<ol start="80"><div><bdi dir=ltr>80、</bdi>80</div></ol> +<ol start="99"><div><bdi dir=ltr>99、</bdi>99</div></ol> +<ol start="100"><div><bdi dir=ltr>100、</bdi>100</div></ol> +<ol start="101"><div><bdi dir=ltr>101、</bdi>101</div></ol> +<ol start="222"><div><bdi dir=ltr>222、</bdi>222</div></ol> +<ol start="540"><div><bdi dir=ltr>540、</bdi>540</div></ol> +<ol start="999"><div><bdi dir=ltr>999、</bdi>999</div></ol> +<ol start="1000"><div><bdi dir=ltr>1000、</bdi>1000</div></ol> +<ol start="1005"><div><bdi dir=ltr>1005、</bdi>1005</div></ol> +<ol start="1060"><div><bdi dir=ltr>1060、</bdi>1060</div></ol> +<ol start="1065"><div><bdi dir=ltr>1065、</bdi>1065</div></ol> +<ol start="1800"><div><bdi dir=ltr>1800、</bdi>1800</div></ol> +<ol start="1860"><div><bdi dir=ltr>1860、</bdi>1860</div></ol> +<ol start="5865"><div><bdi dir=ltr>5865、</bdi>5865</div></ol> +<ol start="7005"><div><bdi dir=ltr>7005、</bdi>7005</div></ol> +<ol start="7800"><div><bdi dir=ltr>7800、</bdi>7800</div></ol> +<ol start="7864"><div><bdi dir=ltr>7864、</bdi>7864</div></ol> +<ol start="9999"><div><bdi dir=ltr>9999、</bdi>9999</div></ol> </div> <!--Notes: You will need an appropriate font to run this test. diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html index fdd74e837d3..4b62cfeb77a 100644 --- a/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html +++ b/tests/wpt/web-platform-tests/css/css-counter-styles/cjk-heavenly-stem/css3-counter-styles-205.html @@ -11,34 +11,34 @@ ol li { list-style-type: cjk-heavenly-stem; } /* the following CSS is not part of the test */ .test { font-size: 25px; } -ol { margin: 0; padding-left: 8em; list-style-position: inside; } +ol { margin: 0; padding-left: 8em; list-style-position: inside; line-height: 100%; } </style> </head> <body> <p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p> <div class="test"> -<ol start="11"><li title="11">甲甲</li></ol> -<ol start="12"><li title="12">甲乙</li></ol> -<ol start="43"><li title="43">丁丙</li></ol> -<ol start="77"><li title="77">庚庚</li></ol> -<ol start="80"><li title="80">庚癸</li></ol> -<ol start="99"><li title="99">壬壬</li></ol> -<ol start="100"><li title="100">壬癸</li></ol> -<ol start="101"><li title="101">癸甲</li></ol> -<ol start="222"><li title="222">乙乙乙</li></ol> -<ol start="540"><li title="540">戊丙癸</li></ol> -<ol start="999"><li title="999">壬壬壬</li></ol> -<ol start="1000"><li title="1000">壬壬癸</li></ol> -<ol start="1005"><li title="1005">壬癸戊</li></ol> -<ol start="1060"><li title="1060">癸戊癸</li></ol> -<ol start="1065"><li title="1065">癸己戊</li></ol> -<ol start="1800"><li title="1800">甲庚壬癸</li></ol> -<ol start="1860"><li title="1860">甲辛戊癸</li></ol> -<ol start="5865"><li title="5865">戊辛己戊</li></ol> -<ol start="7005"><li title="7005">己壬癸戊</li></ol> -<ol start="7800"><li title="7800">庚庚壬癸</li></ol> -<ol start="7864"><li title="7864">庚辛己丁</li></ol> -<ol start="9999"><li title="9999">壬壬壬壬</li></ol> +<ol start="11"><li title="11">11</li></ol> +<ol start="12"><li title="12">12</li></ol> +<ol start="43"><li title="43">43</li></ol> +<ol start="77"><li title="77">77</li></ol> +<ol start="80"><li title="80">80</li></ol> +<ol start="99"><li title="99">99</li></ol> +<ol start="100"><li title="100">100</li></ol> +<ol start="101"><li title="101">101</li></ol> +<ol start="222"><li title="222">222</li></ol> +<ol start="540"><li title="540">540</li></ol> +<ol start="999"><li title="999">999</li></ol> +<ol start="1000"><li title="1000">1000</li></ol> +<ol start="1005"><li title="1005">1005</li></ol> +<ol start="1060"><li title="1060">1060</li></ol> +<ol start="1065"><li title="1065">1065</li></ol> +<ol start="1800"><li title="1800">1800</li></ol> +<ol start="1860"><li title="1860">1860</li></ol> +<ol start="5865"><li title="5865">5865</li></ol> +<ol start="7005"><li title="7005">7005</li></ol> +<ol start="7800"><li title="7800">7800</li></ol> +<ol start="7864"><li title="7864">7864</li></ol> +<ol start="9999"><li title="9999">9999</li></ol> </div> <!--Notes: You will need an appropriate font to run this test. diff --git a/tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html b/tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html index 867f1f05924..c29b5ba6348 100644 --- a/tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html +++ b/tests/wpt/web-platform-tests/css/css-display/display-contents-slot-attach-whitespace.html @@ -7,5 +7,5 @@ <div id="host"><span>two</span> <span>words</span></div> <script> host.offsetTop; - host.attachShadow({mode:"open"}).innerHTML = "<slot />"; + host.attachShadow({mode:"open"}).innerHTML = "<slot></slot>"; </script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-005.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-005.html new file mode 100644 index 00000000000..455439f7980 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-005.html @@ -0,0 +1,79 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-grid-2/"> +<style> +.item { + inline-size: 40px; + box-sizing: border-box; + border: solid 5px hotpink; + line-height: 0; + margin-block-start: 3px; + margin-block-end: 5px; +} +.small { + width: 20px; + height: 20px; + border: solid 5px cyan; +} +.first { + align-self: baseline; +} +.last { + align-self: last baseline; +} +span { + width: 20px; + height: 20px; + box-sizing: border-box; + border: solid 5px orange; + display: inline-block; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.item')"> + +<div style="position: relative; display: grid; grid-template: 150px 150px 150px / 100px 100px 100px 100px;"> + <div style="display: grid; + gap: 10px; + grid-column: 1 / span 2; + grid-row: 1 / span 3; + grid-template: subgrid / subgrid; + margin-block-start: 5px; margin-block-end: 10px; + border: solid black 5px; + padding-block-start: 10px; padding-block-end: 20px;"> + <div style="display: grid; + gap: 20px; + grid-column: 1 / span 2; + grid-row: 1 / span 2; + grid-template: subgrid / subgrid; + margin-block-start: 3px; margin-block-end: 7px; + border: solid black 5px; + padding-block-start: 5px; padding-block-end: 10px;"> + <div data-offset-y="36" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-y="85" class="item last"> + <span></span><br><span></span> + </div> + <div data-offset-y="163" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-y="218" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-y="308" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-y="360" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-y="41" class="item small first"></div> + <div data-offset-y="110" class="item small last"></div> + <div data-offset-y="168" class="item small first"></div> + <div data-offset-y="243" class="item small last"></div> + <div data-offset-y="313" class="item small first"></div> + <div data-offset-y="385" class="item small last"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-006.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-006.html new file mode 100644 index 00000000000..23d2b3b6062 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-006.html @@ -0,0 +1,79 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-grid-2/"> +<style> +.item { + inline-size: 40px; + box-sizing: border-box; + border: solid 5px hotpink; + line-height: 0; + margin-block-start: 3px; + margin-block-end: 5px; +} +.small { + width: 30px; + height: 30px; + border: solid 5px cyan; +} +.first { + align-self: baseline; +} +.last { + align-self: last baseline; +} +span { + width: 20px; + height: 20px; + box-sizing: border-box; + border: solid 5px orange; + display: inline-block; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.item')"> + +<div style="writing-mode: vertical-rl; width: 600px; position: relative; display: grid; grid-template: 150px 150px 150px / 100px 100px 100px 100px;"> + <div style="display: grid; + gap: 10px; + grid-column: 1 / span 2; + grid-row: 1 / span 3; + grid-template: subgrid / subgrid; + margin-block-start: 5px; margin-block-end: 10px; + border: solid black 5px; + padding-block-start: 10px; padding-block-end: 20px;"> + <div style="display: grid; + gap: 20px; + grid-column: 1 / span 2; + grid-row: 1 / span 2; + grid-template: subgrid / subgrid; + margin-block-start: 3px; margin-block-end: 7px; + border: solid black 5px; + padding-block-start: 5px; padding-block-end: 10px;"> + <div data-offset-x="514" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="465" class="item last"> + <span></span><br><span></span> + </div> + <div data-offset-x="387" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="332" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-x="242" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="190" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-x="534" class="item small first"></div> + <div data-offset-x="465" class="item small last"></div> + <div data-offset-x="407" class="item small first"></div> + <div data-offset-x="332" class="item small last"></div> + <div data-offset-x="262" class="item small first"></div> + <div data-offset-x="190" class="item small last"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-007.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-007.html new file mode 100644 index 00000000000..f8477bea50c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-007.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-grid-2/"> +<style> +.item { + inline-size: 40px; + box-sizing: border-box; + border: solid 5px hotpink; + line-height: 0; + margin-block-start: 3px; + margin-block-end: 5px; +} +.small { + width: 20px; + height: 20px; + border: solid 5px cyan; +} +.first { + align-self: baseline; +} +.last { + align-self: last baseline; +} +.item.small.first { + block-size: 50px; +} +.item.small.last { + block-size: 100px; +} +span { + width: 20px; + height: 20px; + box-sizing: border-box; + border: solid 5px orange; + display: inline-block; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.item')"> + +<div style="position: relative; display: grid; grid-template: auto auto auto / 100px 100px 100px 100px;"> + <div style="display: grid; + gap: 10px; + grid-column: 1 / span 2; + grid-row: 1 / span 3; + grid-template: subgrid / subgrid; + margin-block-start: 5px; margin-block-end: 10px; + border: solid black 5px; + padding-block-start: 10px; padding-block-end: 20px;"> + <div style="display: grid; + gap: 20px; + grid-column: 1 / span 2; + grid-row: 1 / span 2; + grid-template: subgrid / subgrid; + margin-block-start: 3px; margin-block-end: 7px; + border: solid black 5px; + padding-block-start: 5px; padding-block-end: 10px;"> + <div data-offset-y="36" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-y="58" class="item last"> + <span></span><br><span></span> + </div> + <div data-offset-y="151" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-y="181" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-y="291" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-y="321" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-y="11" class="item small first"></div> + <div data-offset-y="3" class="item small last"></div> + <div data-offset-y="126" class="item small first"></div> + <div data-offset-y="126" class="item small last"></div> + <div data-offset-y="266" class="item small first"></div> + <div data-offset-y="266" class="item small last"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-008.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-008.html new file mode 100644 index 00000000000..1ef23599f95 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-008.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-grid-2/"> +<style> +.item { + inline-size: 40px; + box-sizing: border-box; + border: solid 5px hotpink; + line-height: 0; + margin-block-start: 3px; + margin-block-end: 5px; +} +.small { + width: 20px; + height: 20px; + border: solid 5px cyan; +} +.first { + align-self: baseline; +} +.last { + align-self: last baseline; +} +.item.small.first { + block-size: 50px; +} +.item.small.last { + block-size: 100px; +} +span { + width: 20px; + height: 20px; + box-sizing: border-box; + border: solid 5px orange; + display: inline-block; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.item')"> + +<div style="writing-mode: vertical-rl; width: 600px; position: relative; display: grid; grid-template: auto auto auto / 100px 100px 100px 100px;"> + <div style="display: grid; + gap: 10px; + grid-column: 1 / span 2; + grid-row: 1 / span 3; + grid-template: subgrid / subgrid; + margin-block-start: 5px; margin-block-end: 10px; + border: solid black 5px; + padding-block-start: 10px; padding-block-end: 20px;"> + <div style="display: grid; + gap: 20px; + grid-column: 1 / span 2; + grid-row: 1 / span 2; + grid-template: subgrid / subgrid; + margin-block-start: 3px; margin-block-end: 7px; + border: solid black 5px; + padding-block-start: 5px; padding-block-end: 10px;"> + <div data-offset-x="514" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="428" class="item last"> + <span></span><br><span></span> + </div> + <div data-offset-x="325" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="234" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-x="131" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="40" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-x="524" class="item small first"></div> + <div data-offset-x="393" class="item small last"></div> + <div data-offset-x="335" class="item small first"></div> + <div data-offset-x="199" class="item small last"></div> + <div data-offset-x="141" class="item small first"></div> + <div data-offset-x="5" class="item small last"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-009.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-009.html new file mode 100644 index 00000000000..b7bf46d8745 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-baseline-009.html @@ -0,0 +1,83 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-grid-2/"> +<style> +.item { + writing-mode: vertical-rl; + block-size: 80px; + box-sizing: border-box; + border: solid 5px hotpink; + line-height: 0; + margin-block-start: 10px; + margin-block-end: 15px; +} +.small { + width: 20px; + height: 20px; + border: solid 5px cyan; +} +.first { + justify-self: baseline; +} +.last { + justify-self: last baseline; +} +span { + width: 20px; + height: 20px; + box-sizing: border-box; + border: solid 5px orange; + display: inline-block; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.item')"> + +<div style="width: 600px; position: relative; display: grid; grid-auto-flow: column; grid-template: 100px 100px 100px 100px / auto auto auto;"> + <div style="display: grid; + grid-auto-flow: column; + gap: 10px; + grid-column: 1 / span 3; + grid-row: 1 / span 2; + grid-template: subgrid / subgrid; + margin-inline-start: 5px; margin-inline-end: 10px; + border: solid black 5px; + padding-inline-start: 10px; padding-inline-end: 20px;"> + <div style="display: grid; + direction: rtl; + grid-auto-flow: column; + gap: 20px; + grid-column: 1 / span 2; + grid-row: 1 / span 2; + grid-template: subgrid / subgrid; + margin-inline-start: 3px; margin-inline-end: 7px; + border: solid black 5px; + padding-inline-start: 5px; padding-inline-end: 10px;"> + <div data-offset-x="292" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="237" class="item last"> + <span></span><br><span></span> + </div> + <div data-offset-x="112" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="57" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-x="475" class="item first"> + <span></span><br><span></span> + </div> + <div data-offset-x="420" class="item last"> + <span></span><br><span></span> + </div> + </div> + <div data-offset-x="177" class="item small first"></div> + <div data-offset-x="102" class="item small last"></div> + <div data-offset-x="357" class="item small first"></div> + <div data-offset-x="282" class="item small last"></div> + <div data-offset-x="540" class="item small first"></div> + <div data-offset-x="465" class="item small last"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html b/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html index 053ab85422f..801cb828c50 100644 --- a/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html +++ b/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html @@ -309,6 +309,7 @@ function test_image_set_parsing() { test_valid_value_variants('border-image-source', 'image-set(url("example.png") 1x)', 'image-set(url("example.png") 1x)'); test_valid_value_variants('border-image-source', 'image-set(url("example.png") 1x, "example.png" 3x)', 'image-set(url("example.png") 1x, url("example.png") 3x)'); + test_invalid_value_variants('background-image', 'image-set(url("example.png") -20x)'); test_invalid_value_variants('background-image', "image-set(none, url(example.png) 1x)"); test_invalid_value_variants('background-image', "image-set()"); test_invalid_value_variants('background-image', "image-set('example.jpeg' 92pid url(example.png) 1x)"); diff --git a/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html b/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html index 19a251ef0fd..a24b349c5e7 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html +++ b/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5-ref.html @@ -14,6 +14,6 @@ </style> </head> <body> - <div/> + <div></div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html b/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html index d98ddf8de57..12f0f600079 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html +++ b/tests/wpt/web-platform-tests/css/css-masking/mask-image/mask-image-5.html @@ -21,6 +21,6 @@ </style> </head> <body> - <div class="mask-by-data-url"/> + <div class="mask-by-data-url"></div> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html index f2d2c4a8d14..c70e18c47a3 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html +++ b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-position-valid.html @@ -27,9 +27,13 @@ test_valid_value("mask-position", "right 40%"); test_valid_value("mask-position", "top"); test_valid_value("mask-position", "top center", "top"); test_valid_value("mask-position", "center", "center"); - test_valid_value("mask-position", "bottom left, right 20%", "left bottom, right 20%"); test_valid_value("mask-position", "top, center, left"); +test_valid_value("mask-position", "20% 0%"); +test_valid_value("mask-position", "0% 0%"); +test_valid_value("mask-position", "0%", ["0%", "0% center"]); +test_valid_value("mask-position", "0% center", ["0%", "0% center"]); +test_valid_value("mask-position", "center 0%"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html index 4b2ebfb7c78..e0646444d48 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html +++ b/tests/wpt/web-platform-tests/css/css-masking/parsing/mask-valid.sub.html @@ -63,7 +63,7 @@ test_valid_value('mask', 'none alpha', 'alpha'); test_shorthand_value('mask', 'none', { 'mask-image': 'none', - 'mask-position': '0%', + 'mask-position': '0% 0%', 'mask-size': 'auto', 'mask-repeat': 'repeat', 'mask-origin': 'border-box', @@ -73,7 +73,7 @@ test_shorthand_value('mask', 'none', { }) test_shorthand_value('mask', 'none, linear-gradient(to left bottom, red, blue) padding-box', { 'mask-image': 'none, linear-gradient(to left bottom, red, blue)', - 'mask-position': '0%, 0%', + 'mask-position': '0% 0%, 0% 0%', 'mask-size': 'auto, auto', 'mask-repeat': 'repeat, repeat', 'mask-origin': 'border-box, padding-box', diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html new file mode 100644 index 00000000000..b1db1a8cb71 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002-ref.html @@ -0,0 +1,68 @@ +<!DOCTYPE html> +<html> + <meta charset="utf-8"> + <title>CSS Test Reference</title> + <style> + .line { + display: flex; + } + + .container { + writing-mode: horizontal-tb; + direction: ltr; + + block-size: 200px; + inline-size: 200px; + margin: 10px; + background: deepskyblue; + } + + .content { + inline-size: 100%; + block-size: 200%; + background: lightsalmon; + } + </style> + + <div class="line"> + <div id="auto-auto" class="container" style="overflow-y: auto; scrollbar-gutter: stable both-edges"> + <div class="content"></div> + </div> + + <div id="scroll-auto" class="container" style="overflow-y: scroll; scrollbar-gutter: stable both-edges"> + <div class="content"></div> + </div> + + <div id="hidden-auto" class="container" style="overflow-y: hidden; scrollbar-gutter: stable both-edges"> + <div class="content"></div> + </div> + </div> + + <div class="line"> + <div id="auto-stable" class="container" style="overflow-y: auto; scrollbar-gutter: auto"> + <div class="content"></div> + </div> + + <div id="scroll-stable" class="container" style="overflow-y: scroll; scrollbar-gutter: auto"> + <div class="content"></div> + </div> + + <div id="hidden-stable" class="container" style="overflow-y: hidden; scrollbar-gutter: auto"> + <div class="content"></div> + </div> + </div> + + <div class="line"> + <div id="hidden-stable-both" class="container" style="overflow-y: auto; scrollbar-gutter: stable"> + <div class="content"></div> + </div> + + <div id="hidden-stable-both" class="container" style="overflow-y: scroll; scrollbar-gutter: stable"> + <div class="content"></div> + </div> + + <div id="hidden-stable-both" class="container" style="overflow-y: hidden; scrollbar-gutter: stable"> + <div class="content"></div> + </div> + </div> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002.html new file mode 100644 index 00000000000..a830e6b680b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-dynamic-002.html @@ -0,0 +1,87 @@ +<!DOCTYPE html> +<html class="reftest-wait"> + <meta charset="utf-8"> + <title>CSS Overflow: test scrollbar-gutter dynamic update</title> + <link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev"> + <link rel="help" href="https://drafts.csswg.org/css-overflow-4/#scrollbar-gutter-property"> + <link rel="match" href="scrollbar-gutter-dynamic-002-ref.html"> + <script src="/common/reftest-wait.js"></script> + + <style> + .line { + display: flex; + } + + .container { + writing-mode: horizontal-tb; + direction: ltr; + + block-size: 200px; + inline-size: 200px; + margin: 10px; + background: deepskyblue; + } + + .content { + inline-size: 100%; + block-size: 200%; + background: lightsalmon; + } + </style> + + <div class="line"> + <div id="auto-auto" class="container" style="overflow-y: auto; scrollbar-gutter: auto"> + <div class="content"></div> + </div> + + <div id="scroll-auto" class="container" style="overflow-y: scroll; scrollbar-gutter: auto"> + <div class="content"></div> + </div> + + <div id="hidden-auto" class="container" style="overflow-y: hidden; scrollbar-gutter: auto"> + <div class="content"></div> + </div> + </div> + + <div class="line"> + <div id="auto-stable" class="container" style="overflow-y: auto; scrollbar-gutter: stable"> + <div class="content"></div> + </div> + + <div id="scroll-stable" class="container" style="overflow-y: scroll; scrollbar-gutter: stable"> + <div class="content"></div> + </div> + + <div id="hidden-stable" class="container" style="overflow-y: hidden; scrollbar-gutter: stable"> + <div class="content"></div> + </div> + </div> + + <div class="line"> + <div id="auto-stable-both" class="container" style="overflow-y: auto; scrollbar-gutter: stable both-edges"> + <div class="content"></div> + </div> + + <div id="scroll-stable-both" class="container" style="overflow-y: scroll; scrollbar-gutter: stable both-edges"> + <div class="content"></div> + </div> + + <div id="hidden-stable-both" class="container" style="overflow-y: hidden; scrollbar-gutter: stable both-edges"> + <div class="content"></div> + </div> + </div> +<script> + requestAnimationFrame(() => requestAnimationFrame(() => { + document.getElementById('auto-auto').style.scrollbarGutter = 'stable both-edges'; + document.getElementById('scroll-auto').style.scrollbarGutter = 'stable both-edges'; + document.getElementById('hidden-auto').style.scrollbarGutter = 'stable both-edges'; + document.getElementById('auto-stable').style.scrollbarGutter = 'auto'; + document.getElementById('scroll-stable').style.scrollbarGutter = 'auto'; + document.getElementById('hidden-stable').style.scrollbarGutter = 'auto'; + document.getElementById('auto-stable-both').style.scrollbarGutter = 'stable'; + document.getElementById('scroll-stable-both').style.scrollbarGutter = 'stable'; + document.getElementById('hidden-stable-both').style.scrollbarGutter = 'stable'; + takeScreenshot(); + })); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop-entry.html b/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop-entry.html new file mode 100644 index 00000000000..89299e3a8ea --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop-entry.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>CSS Position Test: overlay transition with ::backdrop during entry animation</title> +<link rel="help" href="https://drafts.csswg.org/css-position-4/#overlay"> +<link rel="match" href="green-ref.html"> +<link rel="author" href="mailto:jarhar@chromium.org"> +<style> + body { + background-color: green; + } + [popover] { + display: block; + visibility: hidden; + transition-delay: 2s; + transition-property: overlay; + transition-duration: 2s; + } + [popover]::backdrop { + background-color: blue; + } +</style> +<div popover id="foo"></div> +<script> + foo.offsetTop; + foo.showPopover(); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop.html b/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop.html new file mode 100644 index 00000000000..b730e433465 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-position/overlay/overlay-transition-backdrop.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<title>CSS Position Test: overlay transition with ::backdrop</title> +<link rel="help" href="https://drafts.csswg.org/css-position-4/#overlay"> +<link rel="match" href="green-ref.html"> +<link rel="author" href="mailto:jarhar@chromium.org"> +<style> + [popover] { + display: block; + visibility: hidden; + transition: overlay 60s step-end; + } + [popover]::backdrop { + background-color: green; + } +</style> +<div popover id="foo"></div> +<script> + foo.showPopover(); + foo.hidePopover(); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html b/tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html index 67924fb01cd..2dee8c2e640 100644 --- a/tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html +++ b/tests/wpt/web-platform-tests/css/css-scoping/keyframes-004.html @@ -19,7 +19,7 @@ animation: myanim 10s infinite; } </style> - <slot /> + <slot></slot> `; assert_equals(document.getElementById('in-document').getAnimations().length, 1); diff --git a/tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html b/tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html index c51696e4833..59b71b0ee10 100644 --- a/tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html +++ b/tests/wpt/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html @@ -22,12 +22,12 @@ // <my-list> // <:shadow> // <style>::slotted(my-item) { color: blue; }</style> -// <slot/> +// <slot></slot> // </:shadow> // <my-item style="color: green;"> // <:shadow> // <style>:host { color: yellow; }</style> -// <slot/> +// <slot></slot> // </:shadow> // ITEM // </my-item> diff --git a/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html b/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html index e1a91952d70..f2b33ae4947 100644 --- a/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html +++ b/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html @@ -14,7 +14,7 @@ <script> function attachShadowWithSlottedStyle(host, styleString) { var root = host.attachShadow({mode:"open"}); - root.innerHTML = "<style>"+styleString+"</style><slot/>"; + root.innerHTML = "<style>"+styleString+"</style><slot></slot>"; } attachShadowWithSlottedStyle(host1, "::slotted(span)::before { content: 'PASS' }"); diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html index da48c6ce25e..9a0190506e4 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/scroll-start-fieldset.html @@ -41,6 +41,10 @@ </fieldset> <script> let scroller = document.getElementById("scroller"); + // fieldsets' clientHeight and scrollHeight can be affected by the presence of + // a scrollbar which has been anecdotally measured to be 15 on several + // platforms. + const scrollbar_width = 15; const max_vertical_scroll_offset = scroller.scrollHeight - scroller.clientHeight; // The fieldset's width is set based on the size of its contents: @@ -56,7 +60,6 @@ expectation: { scrollTop: 100, msg: "scroll-start: <length> sets initial scroll position", - approx: false } }, { @@ -64,7 +67,6 @@ expectation: { scrollTop: 0.25 * max_vertical_scroll_offset, msg: "scroll-start: <percent> sets initial scroll position", - approx: true } }, { @@ -72,7 +74,6 @@ expectation: { scrollTop: 50, msg: "scroll-start: <calc> sets initial scroll position", - approx: false } }, { @@ -80,7 +81,6 @@ expectation: { scrollTop: 0, msg: "scroll-start: start sets initial scroll position", - approx: false } }, { @@ -88,7 +88,6 @@ expectation: { scrollTop: 0.5 * max_vertical_scroll_offset, msg: "scroll-start: center sets initial scroll position", - approx: true } }, { @@ -96,7 +95,6 @@ expectation: { scrollTop: max_vertical_scroll_offset, msg: "scroll-start: end sets initial scroll position", - approx: false } }, { @@ -104,7 +102,6 @@ expectation: { scrollTop: 0, msg: "scroll-start: top sets initial scroll position", - approx: false } }, { @@ -112,7 +109,6 @@ expectation: { scrollTop: max_vertical_scroll_offset, msg: "scroll-start: bottom sets initial scroll position", - approx: false } }, { @@ -120,7 +116,6 @@ expectation: { scrollTop: max_vertical_scroll_offset, msg: "scroll-start is clamped", - approx: false } } ]; @@ -139,13 +134,11 @@ async function test_scroll_start(scroll_start, expectation) { await resetScroller(scroll_start); - if (expectation.approx) { - assert_approx_equals(scroller.scrollTop, expectation.scrollTop, 1, expectation.msg); - } else { - assert_equals(scroller.scrollTop, expectation.scrollTop, expectation.msg); - } + assert_approx_equals(scroller.scrollTop, expectation.scrollTop, + scrollbar_width, expectation.msg); } + promise_test(async () => { for (let test_case of test_cases) { await test_scroll_start(test_case.scroll_start, diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-001.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-001.html new file mode 100644 index 00000000000..c0569909344 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-001.html @@ -0,0 +1,62 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-color auto on the root defers to ::-webkit-scrollbar</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + :root { + scrollbar-color: auto; + } + + :root::-webkit-scrollbar { + display: none; + } + + /* This is so that browsers that don't implement the WebKit prefix still pass the test */ + @supports not selector(::-webkit-scrollbar) { + :root { + overflow: hidden; + } + } + + :root, + body { + margin: 0; + padding: 0; + } + + #content { + height: 10vh; + width: 100%; + background: lightsalmon; + } + + #expander { + /* force vertical scroll */ + height: 200vh; + width: 300px; + background: gray; + } +</style> + +<body> + + <div id="content"></div> + + <div id="expander"></div> + + <script> + test(function () { + let root = document.documentElement; + let body = document.body; + let content = document.getElementById('content'); + + assert_equals(root.offsetWidth, window.innerWidth, "viewport does not show a scrollbar"); + assert_equals(body.offsetWidth, root.offsetWidth, "body matches root"); + assert_equals(content.offsetWidth, body.offsetWidth, "content matches body"); + }, "scrollbar-color auto on the root defers to ::-webkit-scrollbar"); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-002.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-002.html new file mode 100644 index 00000000000..70bfa5586d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-002.html @@ -0,0 +1,55 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-color non-auto on the root overrides ::-webkit-scrollbar</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + :root { + scrollbar-color: yellow blue; + } + + :root::-webkit-scrollbar { + display: none; + } + + :root, + body { + margin: 0; + padding: 0; + } + + #content { + height: 10vh; + width: 100%; + background: lightsalmon; + } + + #expander { + /* force vertical scroll */ + height: 200vh; + width: 300px; + background: gray; + } +</style> + +<body> + + <div id="content"></div> + + <div id="expander"></div> + + <script> + test(function () { + let root = document.documentElement; + let body = document.body; + let content = document.getElementById('content'); + + assert_less_than(root.offsetWidth, window.innerWidth, "viewport has a scrollbar"); + assert_equals(body.offsetWidth, root.offsetWidth, "body matches root"); + assert_equals(content.offsetWidth, body.offsetWidth, "content matches body"); + }, "scrollbar-color non-auto on the root overrides ::-webkit-scrollbar"); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-003.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-003.html new file mode 100644 index 00000000000..3fb42bedeaf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-003.html @@ -0,0 +1,89 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-color on scrollable areas correctly interacts with ::-webkit-scrollbar on container</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + .container { + overflow: auto; + height: 200px; + width: 200px; + margin: 1px; + padding: 0px; + border: none; + background: deepskyblue; + } + + .content { + height: 300px; + width: 100%; + background: lightsalmon; + } + + .container.auto { + scrollbar-color: auto; + } + + .container.auto::-webkit-scrollbar { + display: none; + } + + /* This is so that browsers that don't implement the WebKit prefix still pass the test */ + @supports not selector(::-webkit-scrollbar) { + .container.auto { + overflow: hidden; + } + } + + .container.themed { + scrollbar-color: yellow blue; + } + + .container.themed::-webkit-scrollbar { + display: none; + } +</style> +<script> + function performTest() { + setup({ explicit_done: true }); + + test(function () { + let container = document.getElementById('container_auto'); + let content = document.getElementById('content_auto'); + assert_equals(container.scrollWidth, 200, "auto scrollWidth"); + assert_equals(container.clientWidth, 200, "auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "auto offsetWidth"); + }, "scrollbar-color auto defers to ::-webkit-scrollbar"); + + test(function () { + let container = document.getElementById('container_themed'); + let content = document.getElementById('content_themed'); + assert_less_than(container.scrollWidth, container.offsetWidth, "themed scrollWidth"); + assert_less_than(container.clientWidth, container.offsetWidth, "themed clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "themed offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "themed clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "themed offsetWidth"); + }, "scrollbar-color yellow blue overrides ::-webkit-scrollbar"); + + done(); + } +</script> + +<body onload="performTest()"> + + Test scrollbar-color: vertical scrollbar + + <div class="container auto" id="container_auto"> + <div class="content" id="content_auto">auto</div> + </div> + + <div class="container themed" id="container_themed"> + <div class="content" id="content_themed">themed</div> + </div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-004.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-004.html new file mode 100644 index 00000000000..5932cc5d4e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-004.html @@ -0,0 +1,60 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-color on body correctly interacts with ::-webkit-scrollbar</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + .container { + overflow: auto; + height: 200px; + width: 200px; + margin: 1px; + padding: 0px; + border: none; + background: deepskyblue; + } + + .content { + height: 300px; + width: 100%; + background: lightsalmon; + } + + body { + scrollbar-color: yellow blue; + } + + ::-webkit-scrollbar { + display: none; + } +</style> +<script> + function performTest() { + setup({ explicit_done: true }); + + test(function () { + let container = document.getElementById('container_themed'); + let content = document.getElementById('content_themed'); + assert_less_than(container.scrollWidth, container.offsetWidth, "themed scrollWidth"); + assert_less_than(container.clientWidth, container.offsetWidth, "themed clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "themed offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "themed clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "themed offsetWidth"); + }, "scrollbar-color yellow blue on body overrides ::-webkit-scrollbar"); + + done(); + } +</script> + +<body onload="performTest()"> + + Test scrollbar-color: vertical scrollbar + + <div class="container themed" id="container_themed"> + <div class="content" id="content_themed">themed</div> + </div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-005.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-005.html new file mode 100644 index 00000000000..52d0027fba6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-color-005.html @@ -0,0 +1,60 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-color on body correctly interacts with ::-webkit-scrollbar on scrollable area</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + .container { + overflow: auto; + height: 200px; + width: 200px; + margin: 1px; + padding: 0px; + border: none; + background: deepskyblue; + } + + .content { + height: 300px; + width: 100%; + background: lightsalmon; + } + + body { + scrollbar-color: yellow blue; + } + + .container::-webkit-scrollbar { + display: none; + } +</style> +<script> + function performTest() { + setup({ explicit_done: true }); + + test(function () { + let container = document.getElementById('container_themed'); + let content = document.getElementById('content_themed'); + assert_less_than(container.scrollWidth, container.offsetWidth, "themed scrollWidth"); + assert_less_than(container.clientWidth, container.offsetWidth, "themed clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "themed offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "themed clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "themed offsetWidth"); + }, "scrollbar-color yellow blue on body overrides ::-webkit-scrollbar on scrollable area"); + + done(); + } +</script> + +<body onload="performTest()"> + + Test scrollbar-color: vertical scrollbar + + <div class="container themed" id="container_themed"> + <div class="content" id="content_themed">themed</div> + </div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-010.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-010.html new file mode 100644 index 00000000000..ea117030673 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-010.html @@ -0,0 +1,62 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-width auto on the root defers to ::-webkit-scrollbar on the root</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + :root { + scrollbar-width: auto; + } + + :root::-webkit-scrollbar { + display: none; + } + + /* This is so that browsers that don't implement the WebKit prefix still pass the test */ + @supports not selector(::-webkit-scrollbar) { + :root { + overflow: hidden; + } + } + + :root, + body { + margin: 0; + padding: 0; + } + + #content { + height: 10vh; + width: 100%; + background: lightsalmon; + } + + #expander { + /* force vertical scroll */ + height: 200vh; + width: 300px; + background: gray; + } +</style> + +<body> + + <div id="content"></div> + + <div id="expander"></div> + + <script> + test(function () { + let root = document.documentElement; + let body = document.body; + let content = document.getElementById('content'); + + assert_equals(root.offsetWidth, window.innerWidth, "viewport does not show a scrollbar"); + assert_equals(body.offsetWidth, root.offsetWidth, "body matches root"); + assert_equals(content.offsetWidth, body.offsetWidth, "content matches body"); + }, "scrollbar-width auto on the root defers to ::-webkit-scrollbar"); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-011.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-011.html new file mode 100644 index 00000000000..a5f60dc28b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-011.html @@ -0,0 +1,55 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-width thin on the root overrides ::-webkit-scrollbar on the root</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + :root { + scrollbar-width: thin; + } + + :root::-webkit-scrollbar { + display: none; + } + + :root, + body { + margin: 0; + padding: 0; + } + + #content { + height: 10vh; + width: 100%; + background: lightsalmon; + } + + #expander { + /* force vertical scroll */ + height: 200vh; + width: 300px; + background: gray; + } +</style> + +<body> + + <div id="content"></div> + + <div id="expander"></div> + + <script> + test(function () { + let root = document.documentElement; + let body = document.body; + let content = document.getElementById('content'); + + assert_less_than(root.offsetWidth, window.innerWidth, "viewport has a scrollbar"); + assert_equals(body.offsetWidth, root.offsetWidth, "body matches root"); + assert_equals(content.offsetWidth, body.offsetWidth, "content matches body"); + }, "scrollbar-width thin on the root overrides ::-webkit-scrollbar"); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-012.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-012.html new file mode 100644 index 00000000000..a685d6c05b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-012.html @@ -0,0 +1,56 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-width none on the root overrides ::-webkit-scrollbar on the root</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + :root { + scrollbar-width: none; + } + + :root::-webkit-scrollbar { + width: 20px; + background-color: lightgray; + } + + :root, + body { + margin: 0; + padding: 0; + } + + #content { + height: 10vh; + width: 100%; + background: lightsalmon; + } + + #expander { + /* force vertical scroll */ + height: 200vh; + width: 300px; + background: gray; + } +</style> + +<body> + + <div id="content"></div> + + <div id="expander"></div> + + <script> + test(function () { + let root = document.documentElement; + let body = document.body; + let content = document.getElementById('content'); + + assert_equals(root.offsetWidth, window.innerWidth, "viewport does not show a scrollbar"); + assert_equals(body.offsetWidth, root.offsetWidth, "body matches root"); + assert_equals(content.offsetWidth, body.offsetWidth, "content matches body"); + }, "scrollbar-width none on the root overrides ::-webkit-scrollbar"); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-013.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-013.html new file mode 100644 index 00000000000..f6460a4797a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-013.html @@ -0,0 +1,55 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-width thin on the root overridess ::-webkit-scrollbar</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + :root { + scrollbar-width: thin; + } + + ::-webkit-scrollbar { + display: none; + } + + :root, + body { + margin: 0; + padding: 0; + } + + #content { + height: 10vh; + width: 100%; + background: lightsalmon; + } + + #expander { + /* force vertical scroll */ + height: 200vh; + width: 300px; + background: gray; + } +</style> + +<body> + + <div id="content"></div> + + <div id="expander"></div> + + <script> + test(function () { + let root = document.documentElement; + let body = document.body; + let content = document.getElementById('content'); + + assert_less_than(root.offsetWidth, window.innerWidth, "viewport has a scrollbar"); + assert_equals(body.offsetWidth, root.offsetWidth, "body matches root"); + assert_equals(content.offsetWidth, body.offsetWidth, "content matches body"); + }, "scrollbar-width thin on the root overridess ::-webkit-scrollbar"); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-014.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-014.html new file mode 100644 index 00000000000..f737bc36602 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-014.html @@ -0,0 +1,55 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-width thin on the body doesn't override ::-webkit-scrollbar on root</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + body { + scrollbar-width: thin; + } + + :root::-webkit-scrollbar { + display: none; + } + + :root, + body { + margin: 0; + padding: 0; + } + + #content { + height: 10vh; + width: 100%; + background: lightsalmon; + } + + #expander { + /* force vertical scroll */ + height: 200vh; + width: 300px; + background: gray; + } +</style> + +<body> + + <div id="content"></div> + + <div id="expander"></div> + + <script> + test(function () { + let root = document.documentElement; + let body = document.body; + let content = document.getElementById('content'); + + assert_equals(root.offsetWidth, window.innerWidth, "viewport does not show a scrollbar"); + assert_equals(body.offsetWidth, root.offsetWidth, "body matches root"); + assert_equals(content.offsetWidth, body.offsetWidth, "content matches body"); + }, "scrollbar-width thin on the body doesn't override ::-webkit-scrollbar on root"); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-015.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-015.html new file mode 100644 index 00000000000..88a6af27bad --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-015.html @@ -0,0 +1,87 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-width on scrollable areas correctly interacts with ::-webkit-scrollbar</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + .container { + overflow: auto; + height: 200px; + width: 200px; + margin: 1px; + padding: 0px; + border: none; + background: deepskyblue; + } + + .content { + height: 300px; + width: 100%; + background: lightsalmon; + } + + .container.auto { + scrollbar-width: auto; + } + + /* This is so that browsers that don't implement the WebKit prefix still pass the test */ + @supports not selector(::-webkit-scrollbar) { + .container.auto { + overflow: hidden; + } + } + + ::-webkit-scrollbar { + display: none; + } + + .container.thin { + scrollbar-width: thin; + } +</style> +<script> + function performTest() { + setup({ explicit_done: true }); + + // ltr + + test(function () { + let container = document.getElementById('container_auto'); + let content = document.getElementById('content_auto'); + assert_equals(container.scrollWidth, 200, "auto scrollWidth"); + assert_equals(container.clientWidth, 200, "auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "auto offsetWidth"); + }, "scrollbar-width auto defers to ::-webkit-scrollbar"); + + test(function () { + let container = document.getElementById('container_thin'); + let content = document.getElementById('content_thin'); + assert_less_than(container.scrollWidth, container.offsetWidth, "thin scrollWidth"); + assert_less_than(container.clientWidth, container.offsetWidth, "thin clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "thin offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "thin clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "thin offsetWidth"); + }, "scrollbar-width thin overrides ::-webkit-scrollbar"); + + done(); + } +</script> + +<body onload="performTest()"> + + Test scrollbar-width: vertical scrollbar + + <div class="container auto" id="container_auto"> + <div class="content" id="content_auto">auto</div> + </div> + + <div class="container thin" id="container_thin"> + <div class="content" id="content_thin">thin</div> + </div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-016.html b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-016.html new file mode 100644 index 00000000000..7d64131743f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scrollbars/scrollbar-width-016.html @@ -0,0 +1,114 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Scrollbars: scrollbar-width on scrollable areas correctly interacts with ::-webkit-scrollbar on container</title> +<link rel="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<style> + .container { + overflow: auto; + height: 200px; + width: 200px; + margin: 1px; + padding: 0px; + border: none; + background: deepskyblue; + } + + .content { + height: 300px; + width: 100%; + background: lightsalmon; + } + + .container.auto { + scrollbar-width: auto; + } + + .container.auto::-webkit-scrollbar { + display: none; + } + + /* This is so that browsers that don't implement the WebKit prefix still pass the test */ + @supports not selector(::-webkit-scrollbar) { + .container.auto { + overflow: hidden; + } + } + + .container.thin { + scrollbar-width: thin; + } + + .container.thin::-webkit-scrollbar { + display: none; + } + + .container.none { + scrollbar-width: none; + } + + .container.none::-webkit-scrollbar { + width: 20px; + background-color: lightgray; + } +</style> +<script> + function performTest() { + setup({ explicit_done: true }); + + // ltr + + test(function () { + let container = document.getElementById('container_auto'); + let content = document.getElementById('content_auto'); + assert_equals(container.scrollWidth, 200, "auto scrollWidth"); + assert_equals(container.clientWidth, 200, "auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "auto offsetWidth"); + }, "scrollbar-width auto defers to ::-webkit-scrollbar"); + + test(function () { + let container = document.getElementById('container_thin'); + let content = document.getElementById('content_thin'); + assert_less_than(container.scrollWidth, container.offsetWidth, "thin scrollWidth"); + assert_less_than(container.clientWidth, container.offsetWidth, "thin clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "thin offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "thin clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "thin offsetWidth"); + }, "scrollbar-width thin overrides ::-webkit-scrollbar"); + + test(function () { + let container = document.getElementById('container_none'); + let content = document.getElementById('content_none'); + assert_equals(container.scrollWidth, 200, "none scrollWidth"); + assert_equals(container.clientWidth, 200, "none clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "none offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "none clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "none offsetWidth"); + }, "scrollbar-width none overrides ::-webkit-scrollbar"); + + done(); + } +</script> + +<body onload="performTest()"> + + Test scrollbar-width: vertical scrollbar + + <div class="container auto" id="container_auto"> + <div class="content" id="content_auto">auto</div> + </div> + + <div class="container thin" id="container_thin"> + <div class="content" id="content_thin">thin</div> + </div> + + <div class="container none" id="container_none"> + <div class="content" id="content_none">none</div> + </div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel-notref.html b/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel-notref.html new file mode 100644 index 00000000000..ba5e8d90f3e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel-notref.html @@ -0,0 +1,2 @@ +<!doctype html> +<div style="font: 20px monospace; -webkit-text-stroke-width: 0.5px; -webkit-text-stroke-color: lime; color: white">A</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel.html b/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel.html new file mode 100644 index 00000000000..97cbc3f44de --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-stroke-width-subpixel.html @@ -0,0 +1,5 @@ +<!doctype html> +<title>-webkit-text-stroke-width is not snapped to device pixels</title> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1837692"> +<link rel="mismatch" href="text-stroke-width-subpixel-notref.html"> +<div style="font: 20px monospace; -webkit-text-stroke-width: 0.1px; -webkit-text-stroke-color: lime; color: white">A</div> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html b/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html index 00c754552fd..d94e0b7d09b 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-013.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html> <head> - <title>CSS Transforms Test: SVG presentation attribute and scale horizontally -0.5 and vertically -1.5</title> + <title>CSS Transforms Test: SVG presentation attribute and scale horizontally -0.5 and vertically -1.25</title> <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> @@ -20,7 +20,7 @@ <body> <p>The test passes if you see a green square and no red.</p> <svg> - <rect x="-400" y="-133.333" width="400" height="133.333" fill="green" transform="scale(-0.5, -1.5)"/> + <rect x="-400" y="-160" width="400" height="160" fill="green" transform="scale(-0.5, -1.25)"/> </svg> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html b/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html index 15662267c2e..f2acf1b0c66 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/scale/svg-scale-014.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html> <head> - <title>CSS Transforms Test: SVG presentation attribute and scale horizontally -1.5 and vertically -0.5</title> + <title>CSS Transforms Test: SVG presentation attribute and scale horizontally -1.25 and vertically -0.5</title> <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#svg-transform"> <link rel="help" href="http://www.w3.org/TR/css-transforms-1/#two-d-transform-functions"> @@ -20,7 +20,7 @@ <body> <p>The test passes if you see a green square and no red.</p> <svg> - <rect x="-133.333" y="-400" width="133.333" height="400" fill="green" transform="scale(-1.5, -0.5)"/> + <rect x="-160" y="-400" width="160" height="400" fill="green" transform="scale(-1.25, -0.5)"/> </svg> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht b/tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht index 8d9b610bf03..bcb28dbd516 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-3d-rotateY-stair-below-001.xht @@ -5,7 +5,7 @@ <link rel="author" title="Apple Inc." href="http://www.apple.com/"/> <link rel="help" href="http://www.w3.org/TR/css-transforms-2/#3d-transform-rendering"/> <link rel="match" href="reference/transform-3d-rotateY-stair-above-ref-001.xht"/> - <meta name="fuzzy" content="maxDifference=0-14;totalPixels=0-80" /> + <meta name="fuzzy" content="maxDifference=0-20;totalPixels=0-80" /> <meta name="assert" content="A rotateY transform with perspective should result in a trapezoid."/> <style type="text/css"><![CDATA[ diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html index fa78ece016d..edff11c8a2c 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-duration.html @@ -29,4 +29,14 @@ runListValuedPropertyTests('animation-duration', [ }, ]); +test((t) => { + let div = document.createElement('div'); + t.add_cleanup(() => { + div.remove(); + }); + document.body.append(div); + let actual = div.computedStyleMap().get('animation-duration').toString(); + assert_equals(actual, 'auto'); +}, 'Computed value of animation-duration is auto'); + </script> diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html index f050da2839e..dfb6e087183 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/white-space.html @@ -13,12 +13,35 @@ <script> 'use strict'; -runPropertyTests('white-space', [ - { syntax: 'normal'}, - { syntax: 'pre' }, +runPropertyTests('white-space-collapse', [ + { syntax: 'collapse'}, + { syntax: 'discard' }, + { syntax: 'preserve' }, + { syntax: 'preserve-breaks' }, + { syntax: 'preserve-spaces' }, + { syntax: 'break-spaces' }, +]); + +runPropertyTests('text-wrap', [ + { syntax: 'wrap'}, { syntax: 'nowrap' }, - { syntax: 'pre-wrap' }, - { syntax: 'pre-line' }, + { syntax: 'balance' }, + { syntax: 'stable' }, + { syntax: 'pretty' }, ]); +runPropertyTests('white-space-trim', [ + { syntax: 'none'}, + { syntax: 'discard-before' }, + { syntax: 'discard-after' }, + { syntax: 'discard-inner' }, +]); + +runUnsupportedPropertyTests('white-space-trim', [ + 'discard-before discard-after', + 'discard-before discard-inner', + 'discard-after discard-inner', + 'discard-before discard-after discard-inner' +]) + </script> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html new file mode 100644 index 00000000000..44579ac2921 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-horizontal.optional.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org"> +<link rel="help" href="https://html.spec.whatwg.org/#the-button-element"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow"> +<title>Button appearance native writing mode horizontal</title> +<meta charset="utf-8"> +<link rel="mismatch" href="button-appearance-none-horizontal.optional.html"> +<link rel="mismatch" href="button-appearance-native-vertical.optional.html"> +<link rel="mismatch" href="button-appearance-none-vertical.optional.html"> + +<!-- Note test description should be the same across all files to mismatch on. --> +<p>The button element below should match the correct writing mode.</p> +<button style="writing-mode: horizontal-tb"></button> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html new file mode 100644 index 00000000000..3a0c61b4902 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-native-vertical.optional.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org"> +<link rel="help" href="https://html.spec.whatwg.org/#the-button-element"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow"> +<title>Button appearance native writing mode vertical</title> +<meta charset="utf-8"> +<link rel="mismatch" href="button-appearance-none-vertical.optional.html"> +<link rel="mismatch" href="button-appearance-native-horizontal.optional.html"> +<link rel="mismatch" href="button-appearance-none-horizontal.optional.html"> + +<!-- Note test description should be the same across all files to mismatch on. --> +<p>The button element below should match the correct writing mode.</p> +<button style="writing-mode: vertical-rl"></button> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html new file mode 100644 index 00000000000..2679c6f04d7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-horizontal.optional.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org"> +<link rel="help" href="https://html.spec.whatwg.org/#the-button-element"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow"> +<title>Button appearance none writing mode horizontal</title> +<meta charset="utf-8"> +<link rel="mismatch" href="button-appearance-native-horizontal.optional.html"> +<link rel="mismatch" href="button-appearance-none-vertical.optional.html"> +<link rel="mismatch" href="button-appearance-native-vertical.optional.html"> + +<!-- Note test description should be the same across all files to mismatch on. --> +<p>The button element below should match the correct writing mode.</p> +<button style="writing-mode: horizontal-tb; appearance: none;"></button> diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html new file mode 100644 index 00000000000..b37565a4099 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-writing-modes/forms/button-appearance-none-vertical.optional.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Di Zhang" href="mailto:dizhangg@chromium.org"> +<link rel="help" href="https://html.spec.whatwg.org/#the-button-element"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow"> +<title>Button appearance none writing mode vertical</title> +<meta charset="utf-8"> +<link rel="mismatch" href="button-appearance-native-vertical.optional.html"> +<link rel="mismatch" href="button-appearance-none-horizontal.optional.html"> +<link rel="mismatch" href="button-appearance-native-horizontal.optional.html"> + +<!-- Note test description should be the same across all files to mismatch on. --> +<p>The button element below should match the correct writing mode.</p> +<button style="writing-mode: vertical-lr; appearance: none;"></button> diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-load-event.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-load-event.html new file mode 100644 index 00000000000..7062f154506 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-load-event.html @@ -0,0 +1,32 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Link element load event doesn't block the parser.</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://html.spec.whatwg.org/#link-type-stylesheet"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + let NUM_LOADS = 0; +</script> +<link rel="stylesheet" href="data:text/css,*{}" onload="++NUM_LOADS"> +<script> +let t = async_test(document.title); +window.addEventListener("load", t.step_func_done(() => { + assert_equals(NUM_LOADS, 2, "Load event should've fired for all links"); +})); +t.step(function() { + assert_equals(document.styleSheets.length, 1, "Should expose the sheet to the OM before running script"); + // We can't quite assert that NUM_LOADS is zero (even though it almost-always + // should be the case), in case the parser yields just before executing the + // script but after parsing the link load. + let loadsBefore = NUM_LOADS; + // Intentionally the same href as above, to test caching behavior. + document.write(` + <link rel="stylesheet" href="data:text/css,*{}" onload="++NUM_LOADS"> + `); + assert_equals(document.styleSheets.length, 2, "Should expose both sheets to the OM before running second script"); + assert_equals(NUM_LOADS, loadsBefore, "Shouldn't fire the load event sync"); + assert_not_equals(document.styleSheets[0], document.styleSheets[1], "Should be different sheets"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLStyleElement-load-event.html b/tests/wpt/web-platform-tests/css/cssom/HTMLStyleElement-load-event.html new file mode 100644 index 00000000000..8d4062ed0d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLStyleElement-load-event.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf-8"> +<title>style elements fire load events properly</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://html.spec.whatwg.org/#update-a-style-block"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + let NUM_LOADS = 0; +</script> +<style onload="++NUM_LOADS"></style> +<style onload="++NUM_LOADS">:root { background-color: lime }</style> +<style onload="++NUM_LOADS">:root { background-color: lime }</style> <!-- Intentionally the same --> +<script> +async_test(function(t) { + assert_equals(document.styleSheets.length, 3, "Should expose the three stylesheets to the OM sync"); + assert_equals(NUM_LOADS, 0, "Should not fire load event sync"); + window.addEventListener("load", t.step_func_done(() => { + assert_equals(NUM_LOADS, 3, "Load event should've fired for all nodes"); + })); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/cssom/shorthand-values.html b/tests/wpt/web-platform-tests/css/cssom/shorthand-values.html index b64f7e9a12f..f831cba2ca5 100644 --- a/tests/wpt/web-platform-tests/css/cssom/shorthand-values.html +++ b/tests/wpt/web-platform-tests/css/cssom/shorthand-values.html @@ -29,7 +29,7 @@ 'border-top: 1px; border-right: 1px; border-bottom: 1px; border-left: 1px;': 'border-width: 1px; border-style: none; border-color: currentcolor;', 'border-top: 1px; border-right: 2px; border-bottom: 3px; border-left: 4px;': 'border-width: 1px 2px 3px 4px; border-style: none; border-color: currentcolor;', 'border: 1px; border-top: 2px;': 'border-width: 2px 1px 1px; border-style: none; border-color: currentcolor; border-image: none;', - 'border: 1px; border-top: 1px !important;': 'border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-right-style: none; border-bottom-style: none; border-left-style: none; border-right-color: currentcolor; border-bottom-color: currentcolor; border-left-color: currentcolor; border-image: none; border-top-width: 1px !important; border-top-style: none !important; border-top-color: currentcolor !important;', + 'border: 1px; border-top: 1px !important;': 'border-right: 1px; border-bottom: 1px; border-left: 1px; border-image: none; border-top: 1px !important;', 'border: 1px; border-top-color: red;': 'border-width: 1px; border-style: none; border-color: red currentcolor currentcolor; border-image: none;', 'border: solid; border-style: dotted': 'border: dotted;', 'border-width: 1px;': 'border-width: 1px;', diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html b/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html index f311463877a..761df3ac087 100644 --- a/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html +++ b/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-001.html @@ -18,8 +18,6 @@ div { and (min-height: -100px) and - (min-resolution: -1dpi) - and (min-color: -10) and (min-color-index: -10) diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html b/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html index 59a58a1d5c7..e905b39231d 100644 --- a/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html +++ b/tests/wpt/web-platform-tests/css/mediaqueries/mq-negative-range-002.html @@ -18,8 +18,6 @@ div { and (not (max-height: -100px)) and - (not (max-resolution: -1dpi)) - and (not (max-color: -10)) and (not (max-color-index: -10)) diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html index 20fca4affd2..f9490bf051a 100644 --- a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html +++ b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html @@ -463,10 +463,10 @@ setup({ "explicit_done": true }); expression_should_be_known(feature + ": 1.5x"); expression_should_be_known(feature + ": 2.0dppx"); expression_should_be_known(feature + ": 0dpi"); - expression_should_be_known(feature + ": -3dpi"); expression_should_be_known(feature + ": 0dppx"); expression_should_be_known(feature + ": 0x"); expression_should_be_known(feature + ": calc(6x / 2)"); + expression_should_be_unknown(feature + ": -3dpi"); } // Find the resolution using max-resolution diff --git a/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html b/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html index 5b95501909c..27bdd3d0c0e 100644 --- a/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html +++ b/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html @@ -12,7 +12,7 @@ </head> <style> .parent { - offset-path: ellipse(10% 10%); + offset-path: ellipse(10% 10% at 50% 50%); } .target { offset-path: circle(10px); @@ -62,7 +62,7 @@ to: 'ellipse(40% 50% at 25% 25%)', }, [ {at: -0.3, expect: 'ellipse(1% 0% at 57.5% 57.5%)'}, - {at: 0, expect: 'ellipse(10% 10%)'}, + {at: 0, expect: 'ellipse(10% 10% at 50% 50%)'}, {at: 0.3, expect: 'ellipse(19% 22% at 42.5% 42.5%)'}, {at: 0.6, expect: 'ellipse(28% 34% at 35% 35%)'}, {at: 1, expect: 'ellipse(40% 50% at 25% 25%)'}, diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html b/tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html index 9848259133f..d5c5ecf3c7c 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-ray-contain-004.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property"> <link rel="match" href="offset-path-ray-contain-004-ref.html"> <meta name="assert" content="This tests that the element should be contained in ray() path circle."> + <meta name="fuzzy" content="maxDifference=0-20; totalPixels=0-10"/> <style> #container { width: 300px; diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html index 6cb4d44117f..97a3c54131f 100644 --- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html +++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-anchor-parsing-valid.html @@ -15,7 +15,7 @@ test_valid_value("offset-anchor", "auto"); test_valid_value("offset-anchor", "left bottom"); -test_valid_value("offset-anchor", "center center"); +test_valid_value("offset-anchor", "center center", "center"); test_valid_value("offset-anchor", "right center"); test_valid_value("offset-anchor", "center top"); test_valid_value("offset-anchor", "center bottom"); diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html index 7b5a8c16438..5bd857f62d2 100644 --- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html +++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-computed.html @@ -56,7 +56,45 @@ test_computed_value("offset-path", 'path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 'path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")', ]); -// url, shape and geometry-box paths are not yet supported by implementations. +test_computed_value("offset-path", "inset(100%)"); +test_computed_value("offset-path", "inset(0 1px)", "inset(0px 1px)"); +test_computed_value("offset-path", "inset(0px 1px 2%)"); +test_computed_value("offset-path", "inset(0px 1px 2% 3em)", "inset(0px 1px 2% 48px)"); +test_computed_value("offset-path", "inset(0px round 100%)"); +test_computed_value("offset-path", "inset(0px round 0 1px)", "inset(0px round 0px 1px)"); +test_computed_value("offset-path", "inset(0px round 0px 1px 2%)"); +test_computed_value("offset-path", "inset(0px round 0px 1px 2% 3em)", "inset(0px round 0px 1px 2% 48px)"); +test_computed_value("offset-path", "inset(10px round 20% / 0px 1px 2% 3px)"); + +test_computed_value("offset-path", "circle()"); +test_computed_value("offset-path", "circle(100px)"); +test_computed_value("offset-path", "circle(closest-side)", "circle()"); +test_computed_value("offset-path", "circle(at 50% 50%)"); +test_computed_value("offset-path", "circle(100px at 50% 50%)"); +test_computed_value("offset-path", "circle(farthest-side at center top)", "circle(farthest-side at 50% 0%)"); +test_computed_value("offset-path", "circle(4% at top right)", "circle(4% at 100% 0%)"); + +test_computed_value("offset-path", "ellipse()"); +test_computed_value("offset-path", "ellipse(1px closest-side)"); +test_computed_value("offset-path", "ellipse(at 50% 50%)"); +test_computed_value("offset-path", "ellipse(closest-side closest-side at 10% 20%)", "ellipse(at 10% 20%)"); +test_computed_value("offset-path", "ellipse(farthest-side 4% at bottom left)", "ellipse(farthest-side 4% at 0% 100%)"); + +test_computed_value("offset-path", "polygon(1% 2%)"); +test_computed_value("offset-path", "polygon(1px 2px, 3% 4%)"); + +test_computed_value("offset-path", "content-box"); +test_computed_value("offset-path", "border-box"); +test_computed_value("offset-path", "view-box"); + +test_computed_value("offset-path", "inset(10% 20% 30% 40%) border-box", "inset(10% 20% 30% 40%)"); +test_computed_value("offset-path", "fill-box ellipse(at 50% 60%)", "ellipse(at 50% 60%) fill-box"); +test_computed_value("offset-path", "ray(0deg) stroke-box"); +// Mentionted above above. +test_computed_value("offset-path", 'path("m 20 0 h -100") view-box', [ + 'path("M 20 0 H -80") view-box', + 'path("m 20 0 h -100") view-box' +]); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html index 28b45db8469..0c8f3ea04cd 100644 --- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html +++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-invalid.html @@ -18,6 +18,12 @@ test_invalid_value("offset-path", 'path("M 20 30 A 60 70 80")'); test_invalid_value("offset-path", 'path("")'); test_invalid_value("offset-path", 'path(" ")'); +// We ignore `<fill-rule>` from offset-path: path(). +// https://github.com/w3c/fxtf-drafts/issues/512 +// https://github.com/w3c/csswg-drafts/issues/7390 +test_invalid_value("offset-path", 'path(nonzero, "M 0 0 H 100")'); +test_invalid_value("offset-path", 'path(evenodd, "M 0 0 H 100")'); + test_invalid_value("offset-path", "ray(0 sides)"); test_invalid_value("offset-path", "ray(closest-side)"); test_invalid_value("offset-path", "ray(closest-side 0deg closest-side)"); diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html index 8a22b9420ee..be74ed08a40 100644 --- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html +++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-path-parsing-valid.html @@ -49,12 +49,42 @@ test_valid_value("offset-path", test_valid_value("offset-path", 'url("http://www.example.com/index.html#polyline1")'); +// https://drafts.csswg.org/css-shapes-1/#basic-shape-serialization +test_valid_value("offset-path", "inset(100%)"); +test_valid_value("offset-path", "inset(0 1px)", "inset(0px 1px)"); +test_valid_value("offset-path", "inset(0px 1px 2%)"); +test_valid_value("offset-path", "inset(0px 1px 2% 3em)"); +test_valid_value("offset-path", "inset(0px round 100%)"); +test_valid_value("offset-path", "inset(0px round 0 1px)", "inset(0px round 0px 1px)"); +test_valid_value("offset-path", "inset(0px round 0px 1px 2%)"); +test_valid_value("offset-path", "inset(0px round 0px 1px 2% 3em)"); +test_valid_value("offset-path", "inset(10px round 20% / 0px 1px 2% 3em)"); + +test_valid_value("offset-path", "circle()"); test_valid_value("offset-path", "circle(100px)"); +test_valid_value("offset-path", "circle(closest-side)", "circle()"); +test_valid_value("offset-path", "circle(at 50% 50%)"); test_valid_value("offset-path", "circle(100px at 50% 50%)"); +test_valid_value("offset-path", "circle(farthest-side at 0% 0%)"); + +test_valid_value("offset-path", "ellipse()"); +test_valid_value("offset-path", "ellipse(1px closest-side)"); +test_valid_value("offset-path", "ellipse(at 50% 50%)"); +test_valid_value("offset-path", "ellipse(closest-side closest-side at 10% 20%)", "ellipse(at 10% 20%)"); +test_valid_value("offset-path", "ellipse(farthest-side 4% at 0% 100%)"); + +test_valid_value("offset-path", "polygon(1% 2%)"); +test_valid_value("offset-path", "polygon(1px 2px, 3em 4em)"); + +test_valid_value("offset-path", "content-box"); test_valid_value("offset-path", "border-box"); -test_valid_value("offset-path", "inset(10% 20% 30% 40%) border-box"); +test_valid_value("offset-path", "view-box"); + +test_valid_value("offset-path", "inset(10% 20% 30% 40%) border-box", "inset(10% 20% 30% 40%)"); test_valid_value("offset-path", "fill-box ellipse(50% 60%)", "ellipse(50% 60%) fill-box"); test_valid_value("offset-path", "content-box ellipse(50% 60% at 50% 50%)", "ellipse(50% 60% at 50% 50%) content-box"); +test_valid_value("offset-path", "ray(0deg) stroke-box"); +test_valid_value("offset-path", 'path("m 20 0 h -100") view-box'); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html b/tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html index bc0d19a460f..032a5b42b46 100644 --- a/tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html +++ b/tests/wpt/web-platform-tests/css/motion/parsing/offset-position-parsing-valid.html @@ -16,7 +16,7 @@ test_valid_value("offset-position", "auto"); test_valid_value("offset-position", "normal"); test_valid_value("offset-position", "left bottom"); -test_valid_value("offset-position", "center center"); +test_valid_value("offset-position", "center center", "center"); test_valid_value("offset-position", "right center"); test_valid_value("offset-position", "center top"); test_valid_value("offset-position", "center bottom"); diff --git a/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print-ref.html b/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print-ref.html new file mode 100644 index 00000000000..112b1ebdccf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print-ref.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<style> + body { + margin: 0; + } +</style> +<div style="height:200vh; background:green;"></div> diff --git a/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print.html b/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print.html new file mode 100644 index 00000000000..584c4943dcf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/printing/monolithic-overflow-021-print.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1451760"> +<link rel="match" href="monolithic-overflow-021-print-ref.html"> +<style> + body { + margin: 0; + } +</style> +<div style="break-before:page; background:red;"> + <div style="border-bottom:50vh solid green; background:red;"> + <div style="contain:size; height:150vh; background:green;"></div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/crashtests/nth-child-of-attribute-crash.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/crashtests/nth-child-of-attribute-crash.html new file mode 100644 index 00000000000..8f30fbb5e77 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/crashtests/nth-child-of-attribute-crash.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<style> +#elements [blue] { + color: blue; +} +#elements :nth-child(1 of :not([blue])) { + color: revert; +} +</style> +<div id="elements"> + <div blue>Child 1</div> + <div>Child 2</div> +</div> +<script> +requestAnimationFrame(() => + requestAnimationFrame(() => { + elements.children[1].setAttribute("blue", ""); + elements.children[1].removeAttribute("blue"); + elements.children[0].removeAttribute("blue"); + })); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html new file mode 100644 index 00000000000..bfa9d00e1b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes-ref.html @@ -0,0 +1,10 @@ +<!doctype html> +<meta charset="utf-8" /> +<div> + <p style="color: green">Negated</p> + <p style="color: green">Not ignored</p> + <p>Not ignored</p> + <p style="color: green">Not ignored</p> + <p>Not ignored</p> + <p style="color: green">Negated</p> +</div> diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html new file mode 100644 index 00000000000..0d76146f19a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-child-when-ancestor-changes.html @@ -0,0 +1,24 @@ +<!doctype html> +<meta charset="utf-8" /> +<title>CSS Selectors Invalidation: :not(:nth-child(... of class)) when ancestor changes</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="negated-nth-child-when-ancestor-changes-ref.html"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#child-index"> +<style> +.ancestor :not(:nth-child(even of .c)) { + color: green; +} +</style> +<div id="toggler"> + <p>Negated</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p>Negated</p> +</div> +<script> + document.documentElement.offsetTop; + toggler.classList.toggle("ancestor"); +</script> + diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html new file mode 100644 index 00000000000..27f51e6da28 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes-ref.html @@ -0,0 +1,10 @@ +<!doctype html> +<meta charset="utf-8" /> +<div> + <p style="color: green">Negated</p> + <p>Not ignored</p> + <p style="color: green">Not ignored</p> + <p>Not ignored</p> + <p style="color: green">Not ignored</p> + <p style="color: green">Negated</p> +</div> diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html new file mode 100644 index 00000000000..27f66ee3244 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/negated-nth-last-child-when-ancestor-changes.html @@ -0,0 +1,24 @@ +<!doctype html> +<meta charset="utf-8" /> +<title>CSS Selectors Invalidation: :not(:nth-last-child(... of class)) when ancestor changes</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="negated-nth-last-child-when-ancestor-changes-ref.html"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#child-index"> +<style> +.ancestor :not(:nth-last-child(even of .c)) { + color: green; +} +</style> +<div id="toggler"> + <p>Negated</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p>Negated</p> +</div> +<script> + document.documentElement.offsetTop; + toggler.classList.toggle("ancestor"); +</script> + diff --git a/tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html b/tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html index 079f4063d45..f11de65eff6 100644 --- a/tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html +++ b/tests/wpt/web-platform-tests/css/selectors/modal-pseudo-class.html @@ -11,7 +11,7 @@ <dialog id="dialog">Just another dialog.</dialog> <div id="container"> - <button id="btn"/> + <button id="btn"></button> </div> <script> diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html index 0a1d40199e6..b89f2409121 100644 --- a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html @@ -23,7 +23,7 @@ testReflectAttribute('tabIndex', 'tabindex', '0', '1', 'tabIndex on HTMLElement' testReflectAttribute('accessKey', 'accesskey', 'a', 'b', 'accessKey on HTMLElement'); testReflectAttributeWithContentValues('draggable', 'draggable', true, 'true', false, 'false', 'draggable on HTMLElement'); testReflectAttributeWithContentValues('spellcheck', 'spellcheck', true, 'true', false, 'false', 'spellcheck on HTMLElement'); -testReflectAttribute('popover', 'popover', 'auto', 'manual', 'popover on HTMLElement'); +testReflectAttribute('popover', 'popover', 'auto', 'manual', 'popover on HTMLElement', undefined, undefined, () => 'popover' in HTMLElement.prototype); testNodeDisconnector(function (customElement) { customElement.parentNode.innerText = ''; diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js b/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js index 5ed32a4fa48..0e4b94e02a9 100644 --- a/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/resources/reactions.js @@ -126,8 +126,11 @@ function testCloner(testFunction, name) { }, name + ' must enqueue an attributeChanged reaction when cloning an element only for observed attributes'); } -function testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, contentValue1, validValue2, contentValue2, name, elementName, interfaceName) { +function testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, contentValue1, validValue2, contentValue2, name, elementName, interfaceName, optionalSupportPredicate) { test(function () { + if (optionalSupportPredicate) { + assert_implements_optional(optionalSupportPredicate()); + } if (elementName === undefined) { var element = define_new_custom_element([contentAttributeName]); var instance = document.createElement(element.name); @@ -144,6 +147,9 @@ function testReflectAttributeWithContentValues(jsAttributeName, contentAttribute }, name + ' must enqueue an attributeChanged reaction when adding ' + contentAttributeName + ' content attribute'); test(function () { + if (optionalSupportPredicate) { + assert_implements_optional(optionalSupportPredicate()); + } if (elementName === undefined) { var element = define_new_custom_element([contentAttributeName]); var instance = document.createElement(element.name); @@ -160,8 +166,8 @@ function testReflectAttributeWithContentValues(jsAttributeName, contentAttribute }, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute'); } -function testReflectAttribute(jsAttributeName, contentAttributeName, validValue1, validValue2, name, elementName, interfaceName) { - testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, validValue1, validValue2, validValue2, name, elementName, interfaceName); +function testReflectAttribute(jsAttributeName, contentAttributeName, validValue1, validValue2, name, elementName, interfaceName, optionalSupportPredicate) { + testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, validValue1, validValue2, validValue2, name, elementName, interfaceName, optionalSupportPredicate); } function testReflectBooleanAttribute(jsAttributeName, contentAttributeName, name, elementName, interfaceName) { diff --git a/tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html b/tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html index 3dd2b8a6d19..35e3e2c5470 100644 --- a/tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html +++ b/tests/wpt/web-platform-tests/document-picture-in-picture/beforeunload-is-disabled.https.html @@ -11,7 +11,7 @@ await test_driver.bless('request PiP window from top window'); const pipWindow = await documentPictureInPicture.requestWindow(); var onbeforeunloadDisabled = true; - pipWindow.window.onbeforeunload = () => { + pipWindow.onbeforeunload = () => { onbeforeunloadDisabled = false; return "This is a test"; } diff --git a/tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html b/tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html index 175f5d555b9..6e52576b0b4 100644 --- a/tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html +++ b/tests/wpt/web-platform-tests/dom/parts/basic-dom-part-objects.tentative.html @@ -6,9 +6,9 @@ <div id=target style="display:none"> Imperative test element - <span></span> A - <span></span> B - <span></span> C + <span>A</span> + <span>B</span> + <span>C</span> </div> <div style="display:none"> @@ -18,19 +18,60 @@ </div> <script> -test(() => { - const target = document.getElementById('target'); - assert_true(target.children.length >= 3); - const documentPart = document.getDocumentPart(); - assert_true(documentPart instanceof DocumentPart,'document should have a DocumentPart'); - const parts = documentPart.getParts(); - assert_true(!!parts,'getParts should return something'); - const nodePart = new NodePart(target); - assert_true(!!nodePart); +const target = document.getElementById('target'); +assert_true(target.children.length >= 3); + +function addCleanup(t, part) { + t.add_cleanup(() => part.disconnect()); + return part; +} + +test((t) => { + const root = document.getPartRoot(); + assert_true(root instanceof DocumentPartRoot); + assert_true(root instanceof PartRoot); + const parts = root.getParts(); + assert_equals(parts.length,0,'getParts() should start out empty'); + + const nodePart = addCleanup(t,new NodePart(root,target)); + assert_true(nodePart instanceof NodePart); assert_equals(nodePart.node,target); - const childNodePart = new ChildNodePart(target.children[0], target.children[1]); - assert_true(!!childNodePart); + assert_equals(nodePart.root,root); + assert_equals(root.getParts().length,1,'getParts() for the root should now have this nodePart'); + assert_equals(root.getParts()[0],nodePart); + assert_equals(parts.length,0,'Return value of getParts() is not live'); + + assert_throws_dom("NotSupportedError",() => new NodePart(nodePart,target.children[0]),'Constructing a Part with a NodePart as the PartRoot should throw'); + + const childNodePart = addCleanup(t,new ChildNodePart(root,target.children[0], target.children[2])); + assert_true(childNodePart instanceof ChildNodePart); + assert_true(childNodePart instanceof Part); + assert_equals(childNodePart.root,root); assert_equals(childNodePart.previousSibling,target.children[0]); - assert_equals(childNodePart.nextSibling,target.children[1]); + assert_equals(childNodePart.nextSibling,target.children[2]); + assert_equals(childNodePart.getParts().length,0,'childNodePart.getParts() should start out empty'); + assert_equals(root.getParts().length,2); + assert_equals(root.getParts()[1],childNodePart); + + const nodeBefore = target.previousSibling || target.parentNode; + const nodePartBefore = addCleanup(t,new NodePart(root,nodeBefore)); + assert_equals(root.getParts().length,3,'getParts() for the root should now have this nodePart'); + assert_array_equals(root.getParts(),[nodePartBefore,nodePart,childNodePart],'getParts() should return nodes in tree order'); + + const nodePart2 = addCleanup(t,new NodePart(childNodePart,target.children[2])); + assert_equals(nodePart2.root,childNodePart); + assert_equals(root.getParts().length,3,'getParts() for the root DocumentPartRoot shouldn\'t change'); + assert_array_equals(childNodePart.getParts(),[nodePart2]); + + nodePart2.disconnect(); + assert_equals(nodePart2.root,null); + assert_equals(nodePart2.node,target.children[2],'node should still be connected'); + assert_equals(childNodePart.getParts().length,0,'calling disconnect() should remove the part from root.getParts()'); + assert_equals(root.getParts().length,3,'getParts() for the root DocumentPartRoot still shouldn\'t change'); + nodePart2.disconnect(); // Calling twice should be ok. + + childNodePart.disconnect(); + assert_equals(childNodePart.root,null); + assert_array_equals(root.getParts(),[nodePartBefore,nodePart]); }, 'Basic imperative DOM Parts object construction'); </script> diff --git a/tests/wpt/web-platform-tests/editing/crashtests/delete-after-empty-script-element.html b/tests/wpt/web-platform-tests/editing/crashtests/delete-after-empty-script-element.html new file mode 100644 index 00000000000..c06a4af8026 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/delete-after-empty-script-element.html @@ -0,0 +1,19 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +</head> +<body> +A +<script> +addEventListener("load", () => { + document.documentElement.contentEditable = true; + getSelection().collapse(document.body.lastChild, document.body.lastChild.length); + document.execCommand("delete"); +}); +</script> +<li> +<form readonly contenteditable> +</form> +<script> +</script></li></body></html> diff --git a/tests/wpt/web-platform-tests/editing/crashtests/designMode-off-during-inserthorizontalrule.html b/tests/wpt/web-platform-tests/editing/crashtests/designMode-off-during-inserthorizontalrule.html new file mode 100644 index 00000000000..21a61998986 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/designMode-off-during-inserthorizontalrule.html @@ -0,0 +1,22 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<script> +document.addEventListener("DOMContentLoaded", () => { + document.designMode = "on"; + document.addEventListener("DOMNodeRemoved", () => { + document.documentElement.normalize(); + document.designMode = "off"; + }); + getSelection().collapse(document.querySelector("address").firstChild, 1); + document.execCommand("insertHorizontalRule"); +}); +</script> +</head> +<body> +<address> +A +</address> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/editing/crashtests/forwarddelete-after-editable-slot-element-outside-body.html b/tests/wpt/web-platform-tests/editing/crashtests/forwarddelete-after-editable-slot-element-outside-body.html new file mode 100644 index 00000000000..480f02ded96 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/forwarddelete-after-editable-slot-element-outside-body.html @@ -0,0 +1,28 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<script> +document.addEventListener("DOMContentLoaded", () => { + const slot = document.createElement("slot"); + document.documentElement.appendChild(slot); + const anchor = document.querySelector("a[contenteditable]"); + const selection = document.getSelection() + getSelection().collapse(anchor, 0); + getSelection().setBaseAndExtent( + document, 0, + document.documentElement, document.documentElement.childNodes.length + ); + const range = selection.getRangeAt(0); + document.documentElement.contentEditable = true; + document.documentElement.contentEditable = false; + range.collapse(false); + getSelection().removeAllRanges(); + getSelection().addRange(range); + document.documentElement.contentEditable = true; + document.execCommand("forwardDelete"); +}); +</script> +</head><body> +<a contenteditable></a> +</body></html> diff --git a/tests/wpt/web-platform-tests/editing/crashtests/indent-in-inline-editing-host-outside-body.html b/tests/wpt/web-platform-tests/editing/crashtests/indent-in-inline-editing-host-outside-body.html new file mode 100644 index 00000000000..d56a0fd248b --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/indent-in-inline-editing-host-outside-body.html @@ -0,0 +1,18 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<script> +addEventListener("load", () => { + const samp = document.createElement("samp"); + samp.innerText = "ABC"; + samp.contentEditable = true; + document.documentElement.appendChild(samp); + getSelection().selectAllChildren(samp); + document.execCommand("indent"); +}); +</script> +</head> +<body> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/editing/crashtests/indent-in-textarea-in-designMode-during-outdent.html b/tests/wpt/web-platform-tests/editing/crashtests/indent-in-textarea-in-designMode-during-outdent.html new file mode 100644 index 00000000000..313c51bb5a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/indent-in-textarea-in-designMode-during-outdent.html @@ -0,0 +1,34 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +</head> +<body> +A +<script> +addEventListener("load", () => { + const textarea = document.querySelector("textarea"); + textarea.addEventListener("focusin", onFocusIn); + textarea.select(); + document.execCommand("outdent"); +}); + +function onFocusIn() { + document.querySelector("marquee").onstart = () => { + document.designMode = "off"; + window.find("AA"); + }; + document.designMode = "on"; + document.execCommand("selectAll"); + document.execCommand("indent"); + document.designMode = "on"; +} +</script> +<fieldset> +<textarea></textarea> +AA +</fieldset> +<marquee id="b"></marquee> +<blockquote contenteditable="true"></blockquote> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/editing/crashtests/insertText-nested-by-DOMSubtreeModified.html b/tests/wpt/web-platform-tests/editing/crashtests/insertText-nested-by-DOMSubtreeModified.html new file mode 100644 index 00000000000..45b0e67ed46 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/insertText-nested-by-DOMSubtreeModified.html @@ -0,0 +1,29 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<script> +document.addEventListener("DOMContentLoaded", () => { + const output = document.querySelector("output"); + const table = document.querySelector("table"); + table.addEventListener("DOMSubtreeModified", () => { + document.execCommand("bold"); + document.execCommand("hiliteColor", false, "white"); + output.appendChild(table); + document.execCommand("forwardDelete"); + table.setAttribute("onwebkitsourceclose", "foo()"); + document.execCommand("insertText", false, "a"); + }); + document.execCommand("selectAll"); + table.insertRow(); +}); +</script> +</head> +<body> +<canvas contenteditable> +<output> +<table tabindex="0" autofocus></table> +</output> +</canvas> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/editing/crashtests/inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html b/tests/wpt/web-platform-tests/editing/crashtests/inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html new file mode 100644 index 00000000000..d7224c3095d --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/inserthorizontalrule-with-range-ending-in-collapsible-spaces-before-comment.html @@ -0,0 +1,25 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<script> +document.addEventListener("DOMContentLoaded", () => { + getSelection().setBaseAndExtent( + document.querySelector("b"), 0, + document.querySelector("i").firstChild, 2 + ); + document.documentElement.contentEditable = true; + document.execCommand("insertHorizontalRule"); +}); +</script> +</head> +<body> +<div> +<b> +</b> +<i>X +</i> +<!-- COMMENT --> +</div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/editing/crashtests/removeformat-in-number-input-immediately-after-type-change-and-stepUp.html b/tests/wpt/web-platform-tests/editing/crashtests/removeformat-in-number-input-immediately-after-type-change-and-stepUp.html new file mode 100644 index 00000000000..d83c2e00790 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/removeformat-in-number-input-immediately-after-type-change-and-stepUp.html @@ -0,0 +1,20 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<script> +document.addEventListener("DOMContentLoaded", () => { + const input = document.querySelector("input"); + input.select(); + input.type = "number"; + document.querySelector("switch").scrollIntoView(true); + input.stepUp(1); + document.execCommand("removeFormat"); +}); +</script> +</head> +<body> +<input> +<switch> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/editing/edit-context/edit-context-property.tentative.html b/tests/wpt/web-platform-tests/editing/edit-context/edit-context-property.tentative.html new file mode 100644 index 00000000000..b6f46dc517b --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/edit-context/edit-context-property.tentative.html @@ -0,0 +1,71 @@ +<!DOCTYPE html> +<html> +<head> +<title>EditContext: The HTMLElement.editContext property</title> +<meta name="author" title="Dan Clark" href="mailto:daniec@microsoft.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src='../../html/resources/common.js'></script> +</head> +<body> +<script> + +test(function () { + assert_true('editContext' in HTMLElement.prototype, 'Element.prototype.editContext must exist'); + assert_equals(typeof(document.createElement('div').editContext), 'object', 'An instance of div must have editContext which is an object'); +}, 'Check the existence of HTMLElement.editContext'); + +test(function () { + assert_false('editContext' in Node.prototype, 'Node.prototype.editContext must not exist'); + assert_false('editContext' in Element.prototype, 'Element.prototype.editContext must not exist'); + assert_false('editContext' in CharacterData.prototype, 'CharacterData.prototype.editContext must not exist'); + assert_false('editContext' in Comment.prototype, 'Comment.prototype.editContext must not exist'); + assert_equals(typeof(document.createComment('').editContext), 'undefined', 'An instance of comment must not have editContext'); + assert_false('editContext' in Document.prototype, 'Document.prototype.editContext must not exist'); + assert_equals(typeof(document.editContext), 'undefined', 'An instance of document must not have editContext which is a function'); + assert_false('editContext' in DocumentFragment.prototype, 'DocumentFragment.prototype.editContext must not exist'); + assert_equals(typeof((new DOMParser()).parseFromString('', 'text/html').editContext), 'undefined', 'An instance of document must not have editContext which is a function'); + assert_false('editContext' in Text.prototype, 'Text.prototype.editContext must not exist'); + assert_equals(typeof(document.createTextNode('').editContext), 'undefined', 'An instance of text node must not have editContext'); +}, 'Nodes other than Element should not have editContext'); + +test(function () { + assert_throws_js(TypeError, function () { + document.createElement('div').editContext = "hello"; + }, 'editContext must throw a TypeError when set to a string'); + + assert_throws_js(TypeError, function () { + document.createElement('div').editContext = 42; + }, 'editContext must throw a TypeError when set to a number'); + + assert_throws_js(TypeError, function () { + document.createElement('div').editContext = document.createElement('span'); + }, 'editContext must throw a TypeError when set to a node'); +}, 'HTMLElement.editContext must throw a TypeError if set to something other than an EditContext'); + +test(function () { + const EDIT_CONTEXT_ALLOWED_ELEMENTS = HTML5_SHADOW_ALLOWED_ELEMENTS.concat(['canvas']); + for (const elementName of EDIT_CONTEXT_ALLOWED_ELEMENTS) { + const element = document.createElement(elementName); + const ec = new EditContext(); + element.editContext = ec; + assert_equals(element.editContext, ec, 'Getting HTMLElement.editContext should yield the same EditContext instance'); + } +}, 'HTMLElement.editContext can be set on the shadow root elements plus canvas.'); + +test(function () { + // EditContext shares all of the shadow root disallowed elements except for canvas. + const EDIT_CONTEXT_DISALLOWED_ELEMENTS = HTML5_SHADOW_DISALLOWED_ELEMENTS.toSpliced(HTML5_SHADOW_DISALLOWED_ELEMENTS.indexOf('canvas'), 1); + for (const elementName of EDIT_CONTEXT_DISALLOWED_ELEMENTS) { + const element = document.createElement(elementName); + const ec = new EditContext(); + assert_throws_dom('NotSupportedError', () => { + element.editContext = ec; + }, `Setting editContext on <${elementName}> must throw.`); + assert_equals(element.editContext, null); + } +}, 'Setting HTMLElement.editContext must throw a NotSupportedError for disallowed elements'); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html b/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html index 11f8c05f966..d4998b47ff1 100644 --- a/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html +++ b/tests/wpt/web-platform-tests/element-timing/background-image-multiple-elements.html @@ -82,7 +82,7 @@ body { <div width=200 height=100 id="div2" class="my_div" elementtiming="et2"> Sample text inside div. </div> -<div id="div3"/> +<div id="div3"> I am a div that should not be observed! </div> </body> diff --git a/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html b/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html index 00986366e61..3342f5688e7 100644 --- a/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html +++ b/tests/wpt/web-platform-tests/element-timing/image-rect-iframe.html @@ -29,5 +29,5 @@ body { }); }, 'Element Timing entry in iframe has coordinates relative to the iframe.'); </script> -<iframe src="resources/iframe-with-square-sends-entry.html"/> +<iframe src="resources/iframe-with-square-sends-entry.html"></iframe> </body> diff --git a/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html b/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html index 56077335296..ba1ddc7151c 100644 --- a/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html +++ b/tests/wpt/web-platform-tests/element-timing/observe-video-poster.html @@ -29,4 +29,4 @@ body { margin: 0; } </style> -<video elementtiming='my_poster' id='the_poster' src='/media/test.mp4' poster='resources/circle.svg'/> +<video elementtiming='my_poster' id='the_poster' src='/media/test.mp4' poster='resources/circle.svg'></video> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html index fd91a09d732..991f35af0dd 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html @@ -21,34 +21,36 @@ _addTest(function(canvas, ctx) { _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "Normal"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); - ctx.fontKerning = "Auto"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "normal"; _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); ctx.fontKerning = "Auto"; - ctx.fontKerning = "noRmal"; _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); - ctx.fontKerning = "Auto"; + ctx.fontKerning = "auto"; + ctx.fontKerning = "noRmal"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); + ctx.fontKerning = "auto"; ctx.fontKerning = "NoRMal"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); - ctx.fontKerning = "Auto"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); + ctx.fontKerning = "auto"; ctx.fontKerning = "NORMAL"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "None"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); - ctx.fontKerning = "Auto"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "none"; _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); ctx.fontKerning = "Auto"; - ctx.fontKerning = "nOne"; _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); - ctx.fontKerning = "Auto"; + ctx.fontKerning = "auto"; + ctx.fontKerning = "nOne"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); + ctx.fontKerning = "auto"; ctx.fontKerning = "nonE"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); - ctx.fontKerning = "Auto"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); + ctx.fontKerning = "auto"; ctx.fontKerning = "NONE"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); }); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html index cf0a32305d0..cff5ad183a0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html @@ -8,7 +8,7 @@ <body class="show_output"> <h1>2d.text.drawing.style.fontVariant.settings</h1> -<p class="desc">Testing basic functionalities of fontKerning for canvas</p> +<p class="desc">Testing basic functionalities of fontVariant for canvas</p> <p class="output">Actual output:</p> @@ -16,7 +16,7 @@ <ul id="d"></ul> <script> -var t = async_test("Testing basic functionalities of fontKerning for canvas"); +var t = async_test("Testing basic functionalities of fontVariant for canvas"); _addTest(function(canvas, ctx) { // Setting fontVariantCaps with lower cases @@ -43,29 +43,33 @@ _addTest(function(canvas, ctx) { ctx.fontVariantCaps = "titling-caps"; _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); - // Setting fontVariantCaps with lower cases and upper cases word. + // Setting fontVariantCaps with mixed-case values is not valid ctx.fontVariantCaps = "nORmal"; + _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); + + ctx.fontVariantCaps = "normal"; _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "smaLL-caps"; - _assertSame(ctx.fontVariantCaps, "small-caps", "ctx.fontVariantCaps", "\"small-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "all-small-CAPS"; - _assertSame(ctx.fontVariantCaps, "all-small-caps", "ctx.fontVariantCaps", "\"all-small-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "pEtitE-caps"; - _assertSame(ctx.fontVariantCaps, "petite-caps", "ctx.fontVariantCaps", "\"petite-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "All-Petite-Caps"; - _assertSame(ctx.fontVariantCaps, "all-petite-caps", "ctx.fontVariantCaps", "\"all-petite-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "uNIcase"; - _assertSame(ctx.fontVariantCaps, "unicase", "ctx.fontVariantCaps", "\"unicase\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "titling-CAPS"; - _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); // Setting fontVariantCaps with non-existing font variant. + ctx.fontVariantCaps = "titling-caps"; ctx.fontVariantCaps = "abcd"; _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html new file mode 100644 index 00000000000..c394ecdfe39 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths-expected.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.cross-layer-paths</title> +<h1>2d.layer.cross-layer-paths</h1> +<p class="desc">Checks that path defined in a layer is usable outside.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext('2d'); + + ctx.moveTo(50, 0); ctx.lineTo(50, 100); ctx.stroke(); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths.html new file mode 100644 index 00000000000..7feebfdce6d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.cross-layer-paths.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<link rel="match" href="2d.layer.cross-layer-paths-expected.html"> +<title>Canvas test: 2d.layer.cross-layer-paths</title> +<h1>2d.layer.cross-layer-paths</h1> +<p class="desc">Checks that path defined in a layer is usable outside.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext('2d'); + + ctx.beginLayer(); + ctx.translate(50, 0); + ctx.moveTo(0, 0); + ctx.endLayer(); + ctx.lineTo(50, 100); + ctx.stroke(); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html deleted file mode 100644 index 607526e4376..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone-expected.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE html> -<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<title>Canvas test: 2d.layer.endlayer.alone</title> -<h1>2d.layer.endlayer.alone</h1> -<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p> -<canvas id="canvas" width="200" height="200"> - <p class="fallback">FAIL (fallback content)</p> -</canvas> -<script> - const canvas = document.getElementById("canvas"); - const ctx = canvas.getContext('2d'); - - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - ctx.globalAlpha = 0.5; - - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); -</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone.html deleted file mode 100644 index a7a5933b33d..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.alone.html +++ /dev/null @@ -1,24 +0,0 @@ -<!DOCTYPE html> -<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<link rel="match" href="2d.layer.endlayer.alone-expected.html"> -<title>Canvas test: 2d.layer.endlayer.alone</title> -<h1>2d.layer.endlayer.alone</h1> -<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p> -<canvas id="canvas" width="200" height="200"> - <p class="fallback">FAIL (fallback content)</p> -</canvas> -<script> - const canvas = document.getElementById("canvas"); - const ctx = canvas.getContext('2d'); - - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - ctx.globalAlpha = 0.5; - - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); - - ctx.endLayer(); -</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched.html deleted file mode 100644 index 5f539832326..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched.html +++ /dev/null @@ -1,28 +0,0 @@ -<!DOCTYPE html> -<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<link rel="match" href="2d.layer.endlayer.unmatched-expected.html"> -<title>Canvas test: 2d.layer.endlayer.unmatched</title> -<h1>2d.layer.endlayer.unmatched</h1> -<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p> -<canvas id="canvas" width="200" height="200"> - <p class="fallback">FAIL (fallback content)</p> -</canvas> -<script> - const canvas = document.getElementById("canvas"); - const ctx = canvas.getContext('2d'); - - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - - ctx.globalAlpha = 0.5; - - // This endlayer call should no-op. - ctx.endLayer(); - - ctx.beginLayer(); - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); - ctx.endLayer(); -</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html new file mode 100644 index 00000000000..74e05e1e48e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.invalid-calls.beginLayer-reset-endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.invalid-calls.beginLayer-reset-endLayer</h1> +<p class="desc">Raises exception on beginLayer() + reset() + endLayer().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Raises exception on beginLayer() + reset() + endLayer()."); +_addTest(function(canvas, ctx) { + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.reset(); + ctx.endLayer(); + }); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html new file mode 100644 index 00000000000..1979cb6c73a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-restore.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.invalid-calls.beginLayer-restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.invalid-calls.beginLayer-restore</h1> +<p class="desc">Raises exception on beginLayer() + restore().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Raises exception on beginLayer() + restore()."); +_addTest(function(canvas, ctx) { + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.restore(); + }); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html new file mode 100644 index 00000000000..c635ac75b99 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.invalid-calls.beginLayer-save-endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.invalid-calls.beginLayer-save-endLayer</h1> +<p class="desc">Raises exception on beginLayer() + save() + endLayer().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Raises exception on beginLayer() + save() + endLayer()."); +_addTest(function(canvas, ctx) { + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.save(); + ctx.endLayer(); + }); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html new file mode 100644 index 00000000000..c39a352d65f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.endLayer.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.invalid-calls.endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.invalid-calls.endLayer</h1> +<p class="desc">Raises exception on lone endLayer calls.</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Raises exception on lone endLayer calls."); +_addTest(function(canvas, ctx) { + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.endLayer(); + }); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html new file mode 100644 index 00000000000..e2d4d565890 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-beginLayer-restore.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.invalid-calls.save-beginLayer-restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.invalid-calls.save-beginLayer-restore</h1> +<p class="desc">Raises exception on save() + beginLayer() + restore().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Raises exception on save() + beginLayer() + restore()."); +_addTest(function(canvas, ctx) { + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.save(); + ctx.beginLayer(); + ctx.restore(); + }); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html new file mode 100644 index 00000000000..f4308e1191d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.invalid-calls.save-endLayer.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.invalid-calls.save-endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.invalid-calls.save-endLayer</h1> +<p class="desc">Raises exception on save() + endLayer().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Raises exception on save() + endLayer()."); +_addTest(function(canvas, ctx) { + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.save(); + ctx.endLayer(); + }); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset-expected.html new file mode 100644 index 00000000000..93131dca9cf --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset-expected.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.reset</title> +<h1>2d.layer.reset</h1> +<p class="desc">Checks that reset discards any pending layers.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext('2d'); + + ctx.fillRect(10, 10, 75, 50); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset.html new file mode 100644 index 00000000000..aabf74cc4d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.reset.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<link rel="match" href="2d.layer.reset-expected.html"> +<title>Canvas test: 2d.layer.reset</title> +<h1>2d.layer.reset</h1> +<p class="desc">Checks that reset discards any pending layers.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext('2d'); + + // Global states: + ctx.globalAlpha = 0.3; + ctx.globalCompositeOperation = 'source-in'; + ctx.shadowOffsetX = -3; + ctx.shadowOffsetY = 3; + ctx.shadowColor = 'rgba(0, 30, 0, 0.3)'; + + ctx.beginLayer({filter: 'dropShadow', dx: -3, dy: 3}); + + // Layer states: + ctx.globalAlpha = 0.6; + ctx.globalCompositeOperation = 'source-in'; + ctx.shadowOffsetX = -6; + ctx.shadowOffsetY = 6; + ctx.shadowColor = 'rgba(0, 60, 0, 0.6)'; + + ctx.reset(); + + ctx.fillRect(10, 10, 75, 50); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html new file mode 100644 index 00000000000..5e90134a250 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested-expected.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.unclosed-nested</title> +<h1>2d.layer.unclosed-nested</h1> +<p class="desc">Check that layers are rendered even if not closed.</p> +<canvas id="canvas" width="200" height="200"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext('2d'); + + const canvas1 = document.createElement('canvas'); + const ctx1 = canvas1.getContext('2d'); + ctx1.fillStyle = 'rgba(0,255,0,1)'; + ctx1.fillRect(70,70,75,50); + + const canvas2 = document.createElement('canvas'); + const ctx2 = canvas2.getContext('2d'); + ctx2.fillStyle = 'rgba(225,0,0,1)'; + ctx2.fillRect(50,50,75,50); + ctx2.drawImage(canvas1, 0, 0); + + ctx.fillStyle = 'rgba(0,0,255,1)'; + ctx.fillRect(60,60,75,50); + ctx.globalAlpha = 0.5; + ctx.drawImage(canvas2, 0, 0); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched-expected.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested.html index e6dd85b7e26..c02aae4af11 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.endlayer.unmatched-expected.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.unclosed-nested.html @@ -1,8 +1,9 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<title>Canvas test: 2d.layer.endlayer.unmatched</title> -<h1>2d.layer.endlayer.unmatched</h1> -<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p> +<link rel="match" href="2d.layer.unclosed-nested-expected.html"> +<title>Canvas test: 2d.layer.unclosed-nested</title> +<h1>2d.layer.unclosed-nested</h1> +<p class="desc">Check that layers are rendered even if not closed.</p> <canvas id="canvas" width="200" height="200"> <p class="fallback">FAIL (fallback content)</p> </canvas> @@ -12,13 +13,16 @@ ctx.fillStyle = 'rgba(0, 0, 255, 1)'; ctx.fillRect(60, 60, 75, 50); - ctx.globalAlpha = 0.5; ctx.beginLayer(); ctx.fillStyle = 'rgba(225, 0, 0, 1)'; ctx.fillRect(50, 50, 75, 50); + + ctx.beginLayer(); ctx.fillStyle = 'rgba(0, 255, 0, 1)'; ctx.fillRect(70, 70, 75, 50); + ctx.endLayer(); + // Missing ctx.endLayer() here. </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html new file mode 100644 index 00000000000..609cb19a7d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-endLayer.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.valid-calls.beginLayer-endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.valid-calls.beginLayer-endLayer</h1> +<p class="desc">No exception raised on beginLayer() + endLayer().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("No exception raised on beginLayer() + endLayer()."); +_addTest(function(canvas, ctx) { + + ctx.beginLayer(); + ctx.save(); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html new file mode 100644 index 00000000000..96580402960 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer-save.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.valid-calls.beginLayer-save</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.valid-calls.beginLayer-save</h1> +<p class="desc">No exception raised on beginLayer() + save().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("No exception raised on beginLayer() + save()."); +_addTest(function(canvas, ctx) { + + ctx.beginLayer(); + ctx.save(); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html new file mode 100644 index 00000000000..05566833317 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.beginLayer.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.valid-calls.beginLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.valid-calls.beginLayer</h1> +<p class="desc">No exception raised on lone beginLayer() calls.</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("No exception raised on lone beginLayer() calls."); +_addTest(function(canvas, ctx) { + + ctx.beginLayer(); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.restore.html new file mode 100644 index 00000000000..b7a370306fd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.restore.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.valid-calls.restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.valid-calls.restore</h1> +<p class="desc">No exception raised on lone restore() calls.</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("No exception raised on lone restore() calls."); +_addTest(function(canvas, ctx) { + + ctx.restore(); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html new file mode 100644 index 00000000000..816398c7fc6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save-beginLayer.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.valid-calls.save-beginLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.valid-calls.save-beginLayer</h1> +<p class="desc">No exception raised on save() + beginLayer().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("No exception raised on save() + beginLayer()."); +_addTest(function(canvas, ctx) { + + ctx.save(); + ctx.beginLayer(); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save.html new file mode 100644 index 00000000000..d8df8cedcec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.valid-calls.save</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.valid-calls.save</h1> +<p class="desc">No exception raised on lone save() calls.</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("No exception raised on lone save() calls."); +_addTest(function(canvas, ctx) { + + ctx.save(); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html new file mode 100644 index 00000000000..4c733263a63 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_reset_restore.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.valid-calls.save_reset_restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.valid-calls.save_reset_restore</h1> +<p class="desc">No exception raised on save() + reset() + restore().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("No exception raised on save() + reset() + restore()."); +_addTest(function(canvas, ctx) { + + ctx.save(); + ctx.reset(); + ctx.restore(); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_restore.html b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_restore.html new file mode 100644 index 00000000000..27ae70278e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/layers/2d.layer.valid-calls.save_restore.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.valid-calls.save_restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.layer.valid-calls.save_restore</h1> +<p class="desc">No exception raised on save() + restore().</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("No exception raised on save() + restore()."); +_addTest(function(canvas, ctx) { + + ctx.save(); + ctx.restore(); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/line-styles/2d.line.fill.noop.html b/tests/wpt/web-platform-tests/html/canvas/element/line-styles/2d.line.fill.noop.html new file mode 100644 index 00000000000..6dd8804ab03 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/line-styles/2d.line.fill.noop.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.line.fill.noop</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.line.fill.noop</h1> +<p class="desc">Filling a line draws nothing</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Filling a line draws nothing"); +_addTest(function(canvas, ctx) { + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; + ctx.lineWidth = 20; + ctx.beginPath(); + ctx.moveTo(10, 20); + ctx.lineTo(90, 30); + ctx.fill(); + _assertPixel(canvas, 50,24, 0,255,0,255); + _assertPixel(canvas, 50,25, 0,255,0,255); + _assertPixel(canvas, 50,26, 0,255,0,255); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html index 222199e6463..18818fa7265 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.canvas.alpha.html @@ -36,5 +36,4 @@ _addTest(function(canvas, ctx) { }); </script> -<img src="/images/transparent50.png" id="transparent50.png" class="resource"> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html index 8d9022d61da..f00e1752dfc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.alpha.html @@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#00f'; - ctx.drawImage(document.getElementById('transparent50.png'), 0, -50); + var img = document.getElementById('transparent50.png'); + ctx.drawImage(img, 0, -50); _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html index 351e7515221..d106e223db7 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.basic.html @@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) { ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#0f0'; ctx.shadowOffsetY = 50; - ctx.drawImage(document.getElementById('red.png'), 0, -50); + var img = document.getElementById('red.png'); + ctx.drawImage(img, 0, -50); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html index cbec7ccce16..7e07fff3783 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.scale.html @@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - ctx.drawImage(document.getElementById('redtransparent.png'), 0, 0, 100, 50, -10, -50, 240, 50); + var img = document.getElementById('redtransparent.png'); + ctx.drawImage(img, 0, 0, 100, 50, -10, -50, 240, 50); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html index 472559b736d..a1b3e7032fb 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.section.html @@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#f00'; - ctx.drawImage(document.getElementById('redtransparent.png'), 50, 0, 50, 50, 0, -50, 50, 50); + var img = document.getElementById('redtransparent.png'); + ctx.drawImage(img, 50, 0, 50, 50, 0, -50, 50, 50); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html index 768e961df0e..74d8b229510 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.1.html @@ -23,7 +23,8 @@ _addTest(function(canvas, ctx) { ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#f00'; ctx.shadowOffsetY = 50; - ctx.drawImage(document.getElementById('transparent.png'), 0, -50); + var img = document.getElementById('transparent.png'); + ctx.drawImage(img, 0, -50); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html index a445b7aebe8..1a52a52c3fe 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.image.transparent.2.html @@ -25,9 +25,10 @@ _addTest(function(canvas, ctx) { ctx.fillRect(50, 0, 50, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - ctx.drawImage(document.getElementById('redtransparent.png'), 50, -50); + var img = document.getElementById('redtransparent.png'); + ctx.drawImage(img, 50, -50); ctx.shadowColor = '#f00'; - ctx.drawImage(document.getElementById('redtransparent.png'), -50, -50); + ctx.drawImage(img, -50, -50); _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html index 8e602d6c2b2..10b5414b123 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.alpha.html @@ -19,7 +19,8 @@ var t = async_test("Shadows are drawn correctly for partially-transparent fill patterns"); _addTest(function(canvas, ctx) { - var pattern = ctx.createPattern(document.getElementById('transparent50.png'), 'repeat'); + var img = document.getElementById('transparent50.png'); + var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html index c776d6bc3bc..47d2149a57e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.basic.html @@ -19,7 +19,8 @@ var t = async_test("Shadows are drawn for fill patterns"); _addTest(function(canvas, ctx) { - var pattern = ctx.createPattern(document.getElementById('red.png'), 'repeat'); + var img = document.getElementById('red.png'); + var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#0f0'; diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html index c3dca30138b..c41dd837787 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.1.html @@ -19,7 +19,8 @@ var t = async_test("Shadows are not drawn for transparent fill patterns"); _addTest(function(canvas, ctx) { - var pattern = ctx.createPattern(document.getElementById('transparent.png'), 'repeat'); + var img = document.getElementById('transparent.png'); + var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#f00'; diff --git a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html index ecb82412be2..ddaf21fe908 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/shadows/2d.shadow.pattern.transparent.2.html @@ -19,7 +19,8 @@ var t = async_test("Shadows are not drawn for transparent parts of fill patterns"); _addTest(function(canvas, ctx) { - var pattern = ctx.createPattern(document.getElementById('redtransparent.png'), 'repeat'); + var img = document.getElementById('redtransparent.png'); + var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#0f0'; diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html index 7b3a0a9373b..3ad15f31501 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html @@ -33,7 +33,7 @@ _addTest(function(canvas, ctx) { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'hanging'; - ctx.fillText('CC', 0, 12.5); + ctx.fillText('CC', 0, -30); _assertPixelApprox(canvas, 5,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 95,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html index 8da9aabb942..8d402223a4f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html @@ -33,7 +33,7 @@ _addTest(function(canvas, ctx) { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'ideographic'; - ctx.fillText('CC', 0, 31.25); + ctx.fillText('CC', 0, 81.25); _assertPixelApprox(canvas, 5,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 95,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html index 15b802f1c48..ab49fcb4f60 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html @@ -14,7 +14,7 @@ <body class="show_output"> <h1>2d.text.draw.space.collapse.end</h1> -<p class="desc">Space characters at the end of a line are collapsed (per CSS)</p> +<p class="desc">Space characters at the end of a line are NOT collapsed</p> <span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span> @@ -23,7 +23,7 @@ <p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt=""> <ul id="d"></ul> <script> -var t = async_test("Space characters at the end of a line are collapsed (per CSS)"); +var t = async_test("Space characters at the end of a line are NOT collapsed"); _addTest(function(canvas, ctx) { ctx.font = '50px CanvasTest'; @@ -33,7 +33,7 @@ _addTest(function(canvas, ctx) { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textAlign = 'right'; - ctx.fillText('EE ', 100, 37.5); + ctx.fillText('EE ', 150, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }), 500); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html index 3454cfb6fba..30727c858e4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html @@ -14,7 +14,7 @@ <body class="show_output"> <h1>2d.text.draw.space.collapse.other</h1> -<p class="desc">Space characters are converted to U+0020, and collapsed (per CSS)</p> +<p class="desc">Space characters are converted to U+0020, and are NOT collapsed</p> <span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span> @@ -23,7 +23,7 @@ <p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt=""> <ul id="d"></ul> <script> -var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)"); +var t = async_test("Space characters are converted to U+0020, and are NOT collapsed"); _addTest(function(canvas, ctx) { ctx.font = '50px CanvasTest'; @@ -32,7 +32,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5); + ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }), 500); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html index 20c5f70569d..23405071725 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html @@ -14,7 +14,7 @@ <body class="show_output"> <h1>2d.text.draw.space.collapse.space</h1> -<p class="desc">Space characters are converted to U+0020, and collapsed (per CSS)</p> +<p class="desc">Space characters are converted to U+0020, and are NOT collapsed</p> <span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span> @@ -23,7 +23,7 @@ <p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt=""> <ul id="d"></ul> <script> -var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)"); +var t = async_test("Space characters are converted to U+0020, and are NOT collapsed"); _addTest(function(canvas, ctx) { ctx.font = '50px CanvasTest'; @@ -32,7 +32,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E EE', -100, 37.5); + ctx.fillText('E EE', -150, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }), 500); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html index c06efba5c85..cee64201eed 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html @@ -14,7 +14,7 @@ <body class="show_output"> <h1>2d.text.draw.space.collapse.start</h1> -<p class="desc">Space characters at the start of a line are collapsed (per CSS)</p> +<p class="desc">Space characters at the start of a line are NOT collapsed</p> <span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span> @@ -23,7 +23,7 @@ <p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt=""> <ul id="d"></ul> <script> -var t = async_test("Space characters at the start of a line are collapsed (per CSS)"); +var t = async_test("Space characters at the start of a line are NOT collapsed"); _addTest(function(canvas, ctx) { ctx.font = '50px CanvasTest'; @@ -32,7 +32,7 @@ _addTest(function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText(' EE', 0, 37.5); + ctx.fillText(' EE', -50, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }), 500); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html index 7f11506b382..12e1d60e568 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex.html @@ -20,7 +20,7 @@ var t = async_test(""); _addTest(function(canvas, ctx) { ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif'; - _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font\", sans-serif'"); + _assert(['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font), "['italic small-caps 12px \"Unknown Font\", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font)"); }); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex2.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex2.html new file mode 100644 index 00000000000..d85765fcd3a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.font.parse.complex2.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.text.font.parse.complex2</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.text.font.parse.complex2</h1> +<p class="desc"></p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test(""); +_addTest(function(canvas, ctx) { + + ctx.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif'; + _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font #2", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font #2\", sans-serif'"); + +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html index b6f2ef50f76..1cf93c032d4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/text-styles/2d.text.measure.width.space.html @@ -14,7 +14,7 @@ <body class="show_output"> <h1>2d.text.measure.width.space</h1> -<p class="desc">Space characters are converted to U+0020 and collapsed (per CSS)</p> +<p class="desc">Space characters are converted to U+0020 and NOT collapsed</p> <span style="font-family: CanvasTest; position: absolute; visibility: hidden">A</span> @@ -23,7 +23,7 @@ <ul id="d"></ul> <script> -var t = async_test("Space characters are converted to U+0020 and collapsed (per CSS)"); +var t = async_test("Space characters are converted to U+0020 and NOT collapsed"); _addTest(function(canvas, ctx) { deferTest(); @@ -34,11 +34,11 @@ _addTest(function(canvas, ctx) { ctx.font = '50px CanvasTest'; _assertSame(ctx.measureText('A B').width, 150, "ctx.measureText('A B').width", "150"); _assertSame(ctx.measureText('A B').width, 200, "ctx.measureText('A B').width", "200"); - _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 150, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "150"); + _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 650, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "650"); _assert(ctx.measureText('A \x0b B').width >= 200, "ctx.measureText('A \\x0b B').width >= 200"); - _assertSame(ctx.measureText(' AB').width, 100, "ctx.measureText(' AB').width", "100"); - _assertSame(ctx.measureText('AB ').width, 100, "ctx.measureText('AB ').width", "100"); + _assertSame(ctx.measureText(' AB').width, 150, "ctx.measureText(' AB').width", "150"); + _assertSame(ctx.measureText('AB ').width, 150, "ctx.measureText('AB ').width", "150"); }), 500); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html new file mode 100644 index 00000000000..1670d642951 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.CSSRGB.html @@ -0,0 +1,60 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.fillStyle.CSSRGB</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.fillStyle.CSSRGB</h1> +<p class="desc">CSSRGB works as color input</p> + + +<script> +var t = async_test("CSSRGB works as color input"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = new CSSRGB(1, 0, 1); + _assertSame(ctx.fillStyle, '#ff00ff', "ctx.fillStyle", "'#ff00ff'"); + ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 50,25, 255,0,255,255); + + const color = new CSSRGB(0, CSS.percent(50), 0); + ctx.fillStyle = color; + _assertSame(ctx.fillStyle, '#008000', "ctx.fillStyle", "'#008000'"); + ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 50,25, 0,128,0,255); + color.g = 0; + ctx.fillStyle = color; + _assertSame(ctx.fillStyle, '#000000', "ctx.fillStyle", "'#000000'"); + ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 50,25, 0,0,0,255); + + color.alpha = 0; + ctx.fillStyle = color; + _assertSame(ctx.fillStyle, 'rgba(0, 0, 0, 0)', "ctx.fillStyle", "'rgba(0, 0, 0, 0)'"); + ctx.reset(); + color.alpha = 0.5; + ctx.fillStyle = color; + ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 50,25, 0,0,0,128); + + ctx.fillStyle = new CSSHSL(CSS.deg(0), 1, 1).toRGB(); + _assertSame(ctx.fillStyle, '#ffffff', "ctx.fillStyle", "'#ffffff'"); + ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 50,25, 255,255,255,255); + + color.alpha = 1; + color.g = 1; + ctx.fillStyle = color; + ctx.fillRect(0, 0, 100, 50); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.alpha.png Binary files differnew file mode 100644 index 00000000000..af5ac0f07d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.alpha.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.color.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.color.png Binary files differnew file mode 100644 index 00000000000..af5ac0f07d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.color.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.png Binary files differnew file mode 100644 index 00000000000..552e6ee44b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.multiple.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.multiple.png Binary files differnew file mode 100644 index 00000000000..86122450d3a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.multiple.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html index 0dda6c0c235..02ca008518f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.html @@ -22,9 +22,11 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(25, 0, 75, 0); g.addColorStop(0.4, '#0f0'); g.addColorStop(0.6, '#0f0'); + ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); _assertPixelApprox(canvas, 20,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js index 66fc180e7e9..d6c89616613 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js @@ -18,9 +18,11 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(25, 0, 75, 0); g.addColorStop(0.4, '#0f0'); g.addColorStop(0.6, '#0f0'); + ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); _assertPixelApprox(canvas, 20,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.overlap.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.overlap.png Binary files differnew file mode 100644 index 00000000000..5c2bb964e0f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.overlap.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.vertical.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.vertical.png Binary files differnew file mode 100644 index 00000000000..37d6a00c627 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.vertical.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html index 71d5cb85dd6..27579fc829b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html @@ -22,6 +22,7 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js index 3b86cec3afc..916b1cb9779 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js @@ -18,6 +18,7 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html index 1b3851cd99a..9cf2c7350fe 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html @@ -22,6 +22,7 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js index f6ab1d93487..607ad85ae74 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js @@ -18,6 +18,7 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html new file mode 100644 index 00000000000..59f09644619 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.gradient.interpolate.zerosize.fillText</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.gradient.interpolate.zerosize.fillText</h1> +<p class="desc"></p> + + +<script> +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) + g.addColorStop(0, '#f00'); + g.addColorStop(1, '#f00'); + ctx.fillStyle = g; + ctx.font = '100px sans-serif'; + ctx.fillText("AA", 0, 50); + _assertGreen(ctx, 100, 50); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js new file mode 100644 index 00000000000..417b564e6d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.worker.js @@ -0,0 +1,31 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.gradient.interpolate.zerosize.fillText +// Description: +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) + g.addColorStop(0, '#f00'); + g.addColorStop(1, '#f00'); + ctx.fillStyle = g; + ctx.font = '100px sans-serif'; + ctx.fillText("AA", 0, 50); + _assertGreen(ctx, 100, 50); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html index 3b66f6c12ad..562f46796c4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html @@ -22,6 +22,7 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js index 7e215017485..b969be6f850 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js @@ -18,6 +18,7 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html index e7fd7e7858b..de1e57bbcca 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html @@ -22,6 +22,7 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js index d7344fb4e61..b9884d4adf6 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js @@ -18,6 +18,7 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html new file mode 100644 index 00000000000..153ec102ac6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.gradient.interpolate.zerosize.strokeText</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.gradient.interpolate.zerosize.strokeText</h1> +<p class="desc"></p> + + +<script> +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) + g.addColorStop(0, '#f00'); + g.addColorStop(1, '#f00'); + ctx.strokeStyle = g; + ctx.font = '100px sans-serif'; + ctx.strokeText("AA", 0, 50); + _assertGreen(ctx, 100, 50); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js new file mode 100644 index 00000000000..f0d71926276 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.worker.js @@ -0,0 +1,31 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.gradient.interpolate.zerosize.strokeText +// Description: +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + + var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) + g.addColorStop(0, '#f00'); + g.addColorStop(1, '#f00'); + ctx.strokeStyle = g; + ctx.font = '100px sans-serif'; + ctx.strokeText("AA", 0, 50); + _assertGreen(ctx, 100, 50); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html index bc10ecee537..6c8f8ec38a8 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html @@ -8,7 +8,7 @@ <h1>2d.gradient.linear.nonfinite</h1> <p class="desc">createLinearGradient() throws TypeError if arguments are not finite</p> - +<p class="notes">Defined in "Web IDL" (draft) <script> var t = async_test("createLinearGradient() throws TypeError if arguments are not finite"); var t_pass = t.done.bind(t); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js index 87f689186bb..9fd4949d7db 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js @@ -1,7 +1,7 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.gradient.linear.nonfinite // Description:createLinearGradient() throws TypeError if arguments are not finite -// Note: +// Note:<p class="notes">Defined in "Web IDL" (draft) importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html index 7ea9d84a4c0..6d229ea3d5a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html @@ -22,8 +22,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var g = offscreenCanvas2.getContext('2d').createLinearGradient(0, 0, 100, 0); + var g = new OffscreenCanvas(100, 50).getContext('2d').createLinearGradient(0, 0, 100, 0); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js index f877d596ddf..1afebdea1b0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js @@ -18,8 +18,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var g = offscreenCanvas2.getContext('2d').createLinearGradient(0, 0, 100, 0); + var g = new OffscreenCanvas(100, 50).getContext('2d').createLinearGradient(0, 0, 100, 0); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html index 51160c586f2..3db5afeeb54 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.html @@ -22,6 +22,15 @@ t.step(function() { var g = ctx.createLinearGradient(0, 0, 100, 0); assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, ""); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'rgb(NaN%, NaN%, NaN%)'); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, null); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, undefined); }); + + var g = ctx.createRadialGradient(0, 0, 0, 100, 0, 0); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, ""); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'rgb(NaN%, NaN%, NaN%)'); }); assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); }); assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); }); assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, null); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js index 40e84ba42be..33b524fbed2 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.invalidcolor.worker.js @@ -18,6 +18,15 @@ t.step(function() { var g = ctx.createLinearGradient(0, 0, 100, 0); assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, ""); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'rgb(NaN%, NaN%, NaN%)'); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, null); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, undefined); }); + + var g = ctx.createRadialGradient(0, 0, 0, 100, 0, 0); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, ""); }); + assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'rgb(NaN%, NaN%, NaN%)'); }); assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); }); assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); }); assert_throws_dom("SYNTAX_ERR", function() { g.addColorStop(0, null); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.html new file mode 100644 index 00000000000..779b941d20b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.gradient.object.return</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.gradient.object.return</h1> +<p class="desc">createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient</p> + + +<script> +var t = async_test("createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + window.CanvasGradient.prototype.thisImplementsCanvasGradient = true; + + var g1 = ctx.createLinearGradient(0, 0, 100, 0); + _assertDifferent(g1.addColorStop, undefined, "g1.addColorStop", "undefined"); + _assertSame(g1.thisImplementsCanvasGradient, true, "g1.thisImplementsCanvasGradient", "true"); + + var g2 = ctx.createRadialGradient(0, 0, 10, 0, 0, 20); + _assertDifferent(g2.addColorStop, undefined, "g2.addColorStop", "undefined"); + _assertSame(g2.thisImplementsCanvasGradient, true, "g2.thisImplementsCanvasGradient", "true"); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.js new file mode 100644 index 00000000000..a279eed4f3e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.return.worker.js @@ -0,0 +1,30 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.gradient.object.return +// Description:createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + self.CanvasGradient.prototype.thisImplementsCanvasGradient = true; + + var g1 = ctx.createLinearGradient(0, 0, 100, 0); + _assertDifferent(g1.addColorStop, undefined, "g1.addColorStop", "undefined"); + _assertSame(g1.thisImplementsCanvasGradient, true, "g1.thisImplementsCanvasGradient", "true"); + + var g2 = ctx.createRadialGradient(0, 0, 10, 0, 0, 20); + _assertDifferent(g2.addColorStop, undefined, "g2.addColorStop", "undefined"); + _assertSame(g2.thisImplementsCanvasGradient, true, "g2.thisImplementsCanvasGradient", "true"); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.html new file mode 100644 index 00000000000..aa72183ca5d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.gradient.object.type</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.gradient.object.type</h1> +<p class="desc">window.CanvasGradient exists and has the right properties</p> + +<p class="notes">Defined in "Web IDL" (draft) +<script> +var t = async_test("window.CanvasGradient exists and has the right properties"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + _assertDifferent(window.CanvasGradient, undefined, "window.CanvasGradient", "undefined"); + _assertDifferent(window.CanvasGradient.prototype.addColorStop, undefined, "window.CanvasGradient.prototype.addColorStop", "undefined"); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.js new file mode 100644 index 00000000000..e0101dfca41 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.object.type.worker.js @@ -0,0 +1,23 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.gradient.object.type +// Description:window.CanvasGradient exists and has the right properties +// Note:<p class="notes">Defined in "Web IDL" (draft) + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("window.CanvasGradient exists and has the right properties"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + _assertDifferent(self.CanvasGradient, undefined, "self.CanvasGradient", "undefined"); + _assertDifferent(self.CanvasGradient.prototype.addColorStop, undefined, "self.CanvasGradient.prototype.addColorStop", "undefined"); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html index 9a07ec4dc2f..4a639778ccd 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js index 806a83f7a53..114dab0a219 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html index 1ab27b46c41..94fe289b1a4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js index 2bb0860a6d2..e6f53fb9992 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html index 87cac451d64..7cf9867dba8 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js index a9c859e7cea..132d131bcae 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html index 649b83cc8f8..27f75a8a743 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js index 8223f526554..9534174757b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html index 6ad51c17955..b46155701c9 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js index a1eb55f2ecc..fffce0f9f2f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html index 7de944a5209..5c4d8125265 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html @@ -21,19 +21,23 @@ t.step(function() { var ctx = canvas.getContext('2d'); var tol = 1; // tolerance to avoid antialiasing artifacts + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; ctx.beginPath(); ctx.moveTo(30+tol, 40); ctx.lineTo(110, -20+tol); ctx.lineTo(110, 100-tol); ctx.fill(); + var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js index 0d211a0c67a..5bd3f5eafa9 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js @@ -17,19 +17,23 @@ t.step(function() { var ctx = canvas.getContext('2d'); var tol = 1; // tolerance to avoid antialiasing artifacts + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; ctx.beginPath(); ctx.moveTo(30+tol, 40); ctx.lineTo(110, -20+tol); ctx.lineTo(110, 100-tol); ctx.fill(); + var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html index a748546c1a8..1dec145e58a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html @@ -21,19 +21,23 @@ t.step(function() { var ctx = canvas.getContext('2d'); var tol = 1; // tolerance to avoid antialiasing artifacts + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#0f0'; ctx.beginPath(); ctx.moveTo(30-tol, 40); ctx.lineTo(110, -20-tol); ctx.lineTo(110, 100+tol); ctx.fill(); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js index 2f561598b9f..31638cff3d5 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js @@ -17,19 +17,23 @@ t.step(function() { var ctx = canvas.getContext('2d'); var tol = 1; // tolerance to avoid antialiasing artifacts + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#0f0'; ctx.beginPath(); ctx.moveTo(30-tol, 40); ctx.lineTo(110, -20-tol); ctx.lineTo(110, 100+tol); ctx.fill(); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html index 802006beecd..6cffa28175a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js index 731ee8f807c..85a9eae4054 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html index 3786e180f3b..52319ef6126 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js index d046809a314..7f5ad50ff39 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html index db269a9b926..f0da2c2742a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js index bc48654ece5..37ed851ab31 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html index 23de3b00f86..3f255027a16 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js index ffc1040d0b0..0f36051e6a1 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html index bbb2ecbcdca..1ef80a568ee 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.html @@ -22,12 +22,14 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(0.993, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js index 792d9e7852b..3c9131dbb3f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js @@ -18,12 +18,14 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(0.993, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html index 8ba0476938d..4f068bbda57 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html @@ -8,7 +8,7 @@ <h1>2d.gradient.radial.nonfinite</h1> <p class="desc">createRadialGradient() throws TypeError if arguments are not finite</p> - +<p class="notes">Defined in "Web IDL" (draft) <script> var t = async_test("createRadialGradient() throws TypeError if arguments are not finite"); var t_pass = t.done.bind(t); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js index dd25e607b2c..641a341ecc0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js @@ -1,7 +1,7 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.gradient.radial.nonfinite // Description:createRadialGradient() throws TypeError if arguments are not finite -// Note: +// Note:<p class="notes">Defined in "Web IDL" (draft) importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html index 6c65f23960a..61fed27df87 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js index d7beb71d2f2..b23eb81d148 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html index 8f4c48ebc12..814beccf510 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js index 6c753e38b10..44eb4f4b2ce 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html index 5cfd30876d6..632ada6b9ce 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.html @@ -22,12 +22,14 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10); g.addColorStop(0, '#0f0'); g.addColorStop(0.001, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js index 70593ceb292..16d0c1a8ee0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js @@ -18,12 +18,14 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10); g.addColorStop(0, '#0f0'); g.addColorStop(0.001, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html index 983071ec653..38235188133 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js index 21bbce1e741..853ad165a3f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html index bd239249882..af5bbd78971 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.html @@ -22,6 +22,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150); g.addColorStop(0, '#f00'); g.addColorStop(0.01, '#0f0'); @@ -29,6 +30,7 @@ t.step(function() { g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js index 75abd38d5d7..434c27b0b1f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js @@ -18,6 +18,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150); g.addColorStop(0, '#f00'); g.addColorStop(0.01, '#0f0'); @@ -25,6 +26,7 @@ t.step(function() { g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html index bdaed6f7daa..1cf578bc80d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.html @@ -22,11 +22,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js index b2f3b0b4102..34fb0caa448 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js @@ -18,11 +18,13 @@ t.step(function() { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + var g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50); g.addColorStop(0, '#f00'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html index 6f66f500e37..f82a259e439 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.html @@ -22,13 +22,16 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + + var pattern = ctx.createPattern(canvas2, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js index 6f6b882416a..510723f009d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js @@ -18,13 +18,16 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + + var pattern = ctx.createPattern(canvas2, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 50,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html index 9efa9d6363c..ab7b7bbeb56 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.html @@ -10,38 +10,24 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); -}); +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js index 776f1dbabd8..14cfcbc9939 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.image.worker.js @@ -6,37 +6,24 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html index 9fa124277ea..66e301a002f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.html @@ -20,13 +20,15 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + var canvas2 = new OffscreenCanvas(100, 50); + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#f00'; ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); _assertPixel(canvas, 1,48, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js index 11c307653d5..f6c24c82ca2 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js @@ -16,13 +16,15 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + var canvas2 = new OffscreenCanvas(100, 50); + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#f00'; ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); _assertPixel(canvas, 1,48, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html new file mode 100644 index 00000000000..1edb4fd2278 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.pattern.basic.type</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.pattern.basic.type</h1> +<p class="desc"></p> + + +<script> +promise_test(async t => { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + _assertDifferent(window.CanvasPattern, undefined, "window.CanvasPattern", "undefined"); + + window.CanvasPattern.prototype.thisImplementsCanvasPattern = true; + + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + _assert(pattern.thisImplementsCanvasPattern, "pattern.thisImplementsCanvasPattern"); + +}, ""); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js new file mode 100644 index 00000000000..56a8a7d23cd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.type.worker.js @@ -0,0 +1,25 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.pattern.basic.type +// Description: +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +promise_test(async t => { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + _assertDifferent(self.CanvasPattern, undefined, "self.CanvasPattern", "undefined"); + + self.CanvasPattern.prototype.thisImplementsCanvasPattern = true; + + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + _assert(pattern.thisImplementsCanvasPattern, "pattern.thisImplementsCanvasPattern"); + t.done(); +}, ""); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html index c7f61889ad5..7100c8313fc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html @@ -25,11 +25,13 @@ t.step(function() { _assertSame(canvas.width, 0, "canvas.width", "0"); _assertSame(canvas.height, 10, "canvas.height", "10"); assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(canvas, 'repeat'); }); + canvas.width = 10; canvas.height = 0; _assertSame(canvas.width, 10, "canvas.width", "10"); _assertSame(canvas.height, 0, "canvas.height", "0"); assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(canvas, 'repeat'); }); + canvas.width = 0; canvas.height = 0; _assertSame(canvas.width, 0, "canvas.width", "0"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js index caeff7cdfab..9bf487cf747 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js @@ -21,11 +21,13 @@ t.step(function() { _assertSame(canvas.width, 0, "canvas.width", "0"); _assertSame(canvas.height, 10, "canvas.height", "10"); assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(canvas, 'repeat'); }); + canvas.width = 10; canvas.height = 0; _assertSame(canvas.width, 10, "canvas.width", "10"); _assertSame(canvas.height, 0, "canvas.height", "0"); assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(canvas, 'repeat'); }); + canvas.width = 0; canvas.height = 0; _assertSame(canvas.width, 0, "canvas.width", "0"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html index fbb7e5266e8..bdf89021bb1 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.html @@ -10,36 +10,22 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var pattern = offscreenCanvas2.getContext('2d').createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 50,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + + var pattern = new OffscreenCanvas(100, 50).getContext('2d').createPattern(img, 'no-repeat'); + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 50,25, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js index bd24b44b0c9..d9004fc028b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js @@ -6,35 +6,22 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var pattern = offscreenCanvas2.getContext('2d').createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 50,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + + var pattern = new OffscreenCanvas(100, 50).getContext('2d').createPattern(img, 'no-repeat'); + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 50,25, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html index 4297814be97..fbec25862d1 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.html @@ -8,7 +8,7 @@ <h1>2d.pattern.image.null</h1> <p class="desc"></p> - +<p class="notes">Defined in "Web IDL" (draft) <script> var t = async_test(""); var t_pass = t.done.bind(t); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js index c7d9969619b..a68ddfdbd72 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.null.worker.js @@ -1,7 +1,7 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.pattern.image.null // Description: -// Note: +// Note:<p class="notes">Defined in "Web IDL" (draft) importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html index 469f2236fed..ff7355d2a46 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.html @@ -8,7 +8,7 @@ <h1>2d.pattern.image.string</h1> <p class="desc"></p> - +<p class="notes">Defined in "Web IDL" (draft) <script> var t = async_test(""); var t_pass = t.done.bind(t); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js index f8525e4a494..dc53d82292c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.string.worker.js @@ -1,7 +1,7 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.pattern.image.string // Description: -// Note: +// Note:<p class="notes">Defined in "Web IDL" (draft) importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html index 475d8ddafac..845f823e7fb 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.html @@ -8,7 +8,7 @@ <h1>2d.pattern.image.undefined</h1> <p class="desc"></p> - +<p class="notes">Defined in "Web IDL" (draft) <script> var t = async_test(""); var t_pass = t.done.bind(t); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js index dbfdbe9a1e1..32f57494930 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js @@ -1,7 +1,7 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.pattern.image.undefined // Description: -// Note: +// Note:<p class="notes">Defined in "Web IDL" (draft) importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html index 11586f5aa72..ebeb92c7f5a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.html @@ -20,15 +20,19 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 50); + ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); _assertPixel(canvas, 1,48, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js index 3dde0ef9a07..8e4f9ed4473 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js @@ -16,15 +16,19 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 50); + ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); _assertPixel(canvas, 1,48, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html index 568140a8db3..042ebba3b76 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.html @@ -20,19 +20,23 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + + var pattern = ctx.createPattern(canvas2, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 50); + ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); _assertPixel(canvas, 1,48, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js index fd70a2fcbb9..ed17db8127b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js @@ -16,19 +16,23 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + + var pattern = ctx.createPattern(canvas2, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 50); + ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); _assertPixel(canvas, 1,48, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html index a60a61efc26..8ab1c8eb402 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html @@ -10,38 +10,25 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js index 13c5dd28156..9ac4e1605c7 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js @@ -6,37 +6,25 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html index 4a254b3afcf..4bdd356df7a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html @@ -10,12 +10,7 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -24,27 +19,19 @@ t.step(function() { ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#f00'; ctx.fillRect(50, 0, 50, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 0); - ctx.fillRect(-50, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.translate(50, 0); + ctx.fillRect(-50, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js index 948da3a132a..6c4a1409b7d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -20,26 +15,19 @@ t.step(function() { ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#f00'; ctx.fillRect(50, 0, 50, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 0); - ctx.fillRect(-50, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.translate(50, 0); + ctx.fillRect(-50, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html index 306428a6162..b9164ec6a94 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html @@ -10,41 +10,29 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(50, 0, 50, 50); - ctx.fillStyle = pattern; - ctx.translate(50, 0); - ctx.fillRect(-50, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 50, 50); + + ctx.fillStyle = '#f00'; + ctx.fillRect(50, 0, 50, 50); + + ctx.fillStyle = pattern; + ctx.translate(50, 0); + ctx.fillRect(-50, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js index fa90ff652a2..d2fdd86022a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js @@ -6,40 +6,29 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(50, 0, 50, 50); - ctx.fillStyle = pattern; - ctx.translate(50, 0); - ctx.fillRect(-50, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/green.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 50, 50); + + ctx.fillStyle = '#f00'; + ctx.fillRect(50, 0, 50, 50); + + ctx.fillStyle = pattern; + ctx.translate(50, 0); + ctx.fillRect(-50, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html index 556fca6beff..e2983948c2d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html @@ -10,41 +10,29 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 25); - ctx.fillRect(-50, -25, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 25); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/red.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.translate(50, 25); + ctx.fillRect(-50, -25, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 50, 25); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js index 834516e96a4..584a5d6cfdd 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js @@ -6,40 +6,29 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 25); - ctx.fillRect(-50, -25, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 25); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/red.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.translate(50, 25); + ctx.fillRect(-50, -25, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 50, 25); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html index c049b79aeb9..43a718d44aa 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html @@ -10,43 +10,31 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - ctx.fillRect(-100, 0, 100, 50); - ctx.fillRect(0, 50, 100, 50); - ctx.fillRect(100, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/red.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); + ctx.fillRect(-100, 0, 100, 50); + ctx.fillRect(0, 50, 100, 50); + ctx.fillRect(100, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js index 93e7a312fb5..0b5fef95ce0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js @@ -6,42 +6,31 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - ctx.fillRect(-100, 0, 100, 50); - ctx.fillRect(0, 50, 100, 50); - ctx.fillRect(100, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/red.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); + ctx.fillRect(-100, 0, 100, 50); + ctx.fillRect(0, 50, 100, 50); + ctx.fillRect(100, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html index f7305573c46..b63535c7065 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html @@ -22,17 +22,20 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 25); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 25, 100, 25); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + + var pattern = ctx.createPattern(canvas2, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 25); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); _assertPixel(canvas, 1,48, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js index 7896c70def2..2fbe52af736 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js @@ -18,17 +18,20 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 25); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 25, 100, 25); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); + + var pattern = ctx.createPattern(canvas2, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 25); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 98,1, 0,255,0,255); _assertPixel(canvas, 1,48, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html index c5dc174416a..0b3645981e3 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html @@ -10,43 +10,31 @@ <script> -var t = async_test("Image patterns do not get flipped when painted"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rrgg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.save(); - ctx.translate(0, -103); - ctx.fillRect(0, 103, 100, 50); - ctx.restore(); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 25); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/rrgg-256x256.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.save(); + ctx.translate(0, -103); + ctx.fillRect(0, 103, 100, 50); + ctx.restore(); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 25); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, "Image patterns do not get flipped when painted"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js index 56b072be4dd..b303b2d813b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js @@ -6,42 +6,31 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Image patterns do not get flipped when painted"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rrgg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.save(); - ctx.translate(0, -103); - ctx.fillRect(0, 103, 100, 50); - ctx.restore(); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 25); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/rrgg-256x256.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'no-repeat'); + ctx.fillStyle = pattern; + ctx.save(); + ctx.translate(0, -103); + ctx.fillRect(0, 103, 100, 50); + ctx.restore(); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 25); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, "Image patterns do not get flipped when painted"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html index 9327111eb7a..b6647f776ed 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html @@ -10,38 +10,25 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/green-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js index 6e77679552a..37f4c04228c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js @@ -6,37 +6,25 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/green-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html index 098abc71651..54b24ac705b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html @@ -10,39 +10,26 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rgrg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(-128, -78); - ctx.fillRect(128, 78, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/rgrg-256x256.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.translate(-128, -78); + ctx.fillRect(128, 78, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js index 28c8d07b6a4..efbd1c58469 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js @@ -6,38 +6,26 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rgrg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(-128, -78); - ctx.fillRect(128, 78, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/rgrg-256x256.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.translate(-128, -78); + ctx.fillRect(128, 78, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html index 4ee7aac5fa8..a77ce2c6964 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html @@ -10,36 +10,22 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/grgr-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/ggrr-256x256.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); -}); + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js index 6b2228e558c..db707ecb0a6 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js @@ -6,35 +6,22 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/grgr-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/ggrr-256x256.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html index ed1bb4243d4..10f380fed35 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html @@ -10,38 +10,25 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rgrg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(-128, -78); - ctx.fillRect(128, 78, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + var response = await fetch('/images/rgrg-256x256.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + ctx.translate(-128, -78); + ctx.fillRect(128, 78, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js index fc3911fbb13..e58cddccfeb 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js @@ -6,37 +6,25 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rgrg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(-128, -78); - ctx.fillRect(128, 78, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/rgrg-256x256.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + ctx.translate(-128, -78); + ctx.fillRect(128, 78, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html index 420562c5efd..6558e07c5b6 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html @@ -10,39 +10,26 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 25); - ctx.fillRect(-50, -25, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/green-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.translate(50, 25); + ctx.fillRect(-50, -25, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js index b4d6774ec73..4a173af0b40 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js @@ -6,38 +6,26 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 25); - ctx.fillRect(-50, -25, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/green-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = pattern; + ctx.translate(50, 25); + ctx.fillRect(-50, -25, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html index ee2c477c936..494b72cfb94 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html @@ -10,12 +10,7 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -24,26 +19,18 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 16); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/green-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-x'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js index 157207a7c54..e776f7a008a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -20,25 +15,18 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 16); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/green-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-x'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html index 0e9a92e51cb..6caef0cb1fa 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html @@ -10,43 +10,31 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.translate(0, 16); - ctx.fillRect(0, -16, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 16); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,25, 0,255,0,255); - _assertPixel(canvas, 98,25, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/red-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-x'); + ctx.fillStyle = pattern; + ctx.translate(0, 16); + ctx.fillRect(0, -16, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 16); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,25, 0,255,0,255); + _assertPixel(canvas, 98,25, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js index 684d2b7b4cb..57c2102cc83 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js @@ -6,42 +6,31 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.translate(0, 16); - ctx.fillRect(0, -16, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 16); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,25, 0,255,0,255); - _assertPixel(canvas, 98,25, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/red-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-x'); + ctx.fillStyle = pattern; + ctx.translate(0, 16); + ctx.fillRect(0, -16, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 16); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,25, 0,255,0,255); + _assertPixel(canvas, 98,25, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html index 83e8ef37dc8..b3229c8d875 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html @@ -10,40 +10,28 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 16); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/red-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-x'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 16); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js index bbb7b9055dd..e40f6aa2075 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js @@ -6,39 +6,28 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 16); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/red-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-x'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 16); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html index 48948452af0..d88f3a0ab65 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html @@ -10,12 +10,7 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -24,26 +19,18 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 16, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/green-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-y'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js index 0eec87ca75f..6a53b5dc4d2 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -20,25 +15,18 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 16, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/green-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-y'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html index 79ca84193e8..59bfeb2abf1 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html @@ -10,43 +10,31 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.translate(48, 0); - ctx.fillRect(-48, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 16, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 50,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 50,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/red-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-y'); + ctx.fillStyle = pattern; + ctx.translate(48, 0); + ctx.fillRect(-48, 0, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 16, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 50,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 50,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js index c5f0f4bcc24..d59abb6e075 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js @@ -6,42 +6,31 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.translate(48, 0); - ctx.fillRect(-48, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 16, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 50,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 50,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/red-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-y'); + ctx.fillStyle = pattern; + ctx.translate(48, 0); + ctx.fillRect(-48, 0, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 16, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 50,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 50,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html index f7fcc3e45a6..ad2bd3383f3 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html @@ -10,40 +10,28 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 16, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); - -}); + + var response = await fetch('/images/red-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-y'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 16, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js index 7201c3f133c..c4feba10ca2 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js @@ -6,39 +6,28 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 16, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + + var response = await fetch('/images/red-16x16.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat-y'); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 16, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html index 550edecf1e1..c2197893d78 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.html @@ -10,38 +10,24 @@ <script> -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-1x1.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, ""); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 200, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/green-1x1.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, ""); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 200, 50); -}); + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + +}, ""); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js index 9777e188fad..5aefc0dab3e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js @@ -6,37 +6,24 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test(""); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-1x1.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, ""); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 200, 50); - _assertPixel(canvas, 1,1, 0,255,0,255); - _assertPixel(canvas, 98,1, 0,255,0,255); - _assertPixel(canvas, 1,48, 0,255,0,255); - _assertPixel(canvas, 98,48, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/green-1x1.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, ""); + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 200, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}, ""); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html new file mode 100644 index 00000000000..2d73296395d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.pattern.transform.identity</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.pattern.transform.identity</h1> +<p class="desc"></p> + + +<script> +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + pattern.setTransform(new DOMMatrix()); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js new file mode 100644 index 00000000000..a33c771346e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.identity.worker.js @@ -0,0 +1,35 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.pattern.transform.identity +// Description: +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + pattern.setTransform(new DOMMatrix()); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html new file mode 100644 index 00000000000..aa58ad119f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.pattern.transform.infinity</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.pattern.transform.infinity</h1> +<p class="desc"></p> + + +<script> +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + pattern.setTransform({a: Infinity}); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js new file mode 100644 index 00000000000..999739b8488 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.infinity.worker.js @@ -0,0 +1,35 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.pattern.transform.infinity +// Description: +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + pattern.setTransform({a: Infinity}); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, 100, 50); + + _assertPixel(canvas, 1,1, 0,255,0,255); + _assertPixel(canvas, 98,1, 0,255,0,255); + _assertPixel(canvas, 1,48, 0,255,0,255); + _assertPixel(canvas, 98,48, 0,255,0,255); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.html new file mode 100644 index 00000000000..f2420d4a2ba --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.pattern.transform.invalid</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.pattern.transform.invalid</h1> +<p class="desc"></p> + + +<script> +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + assert_throws_js(TypeError, function() { pattern.setTransform({a: 1, m11: 2}); }); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.js new file mode 100644 index 00000000000..163951807fa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.transform.invalid.worker.js @@ -0,0 +1,24 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.pattern.transform.invalid +// Description: +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + var canvas2 = new OffscreenCanvas(100, 50); + var pattern = ctx.createPattern(canvas2, 'no-repeat'); + assert_throws_js(TypeError, function() { pattern.setTransform({a: 1, m11: 2}); }); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html new file mode 100644 index 00000000000..c394ecdfe39 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths-expected.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.cross-layer-paths</title> +<h1>2d.layer.cross-layer-paths</h1> +<p class="desc">Checks that path defined in a layer is usable outside.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext('2d'); + + ctx.moveTo(50, 0); ctx.lineTo(50, 100); ctx.stroke(); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html new file mode 100644 index 00000000000..f167ae00bdf --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<link rel="match" href="2d.layer.cross-layer-paths-expected.html"> +<title>Canvas test: 2d.layer.cross-layer-paths</title> +<h1>2d.layer.cross-layer-paths</h1> +<p class="desc">Checks that path defined in a layer is usable outside.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = new OffscreenCanvas(100, 50); + const ctx = canvas.getContext('2d'); + + ctx.beginLayer(); + ctx.translate(50, 0); + ctx.moveTo(0, 0); + ctx.endLayer(); + ctx.lineTo(50, 100); + ctx.stroke(); + + const outputCanvas = document.getElementById("canvas"); + outputCanvas.getContext('2d').drawImage(canvas, 0, 0); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html index 2e1cb62c32a..5b1f7f949cc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.w.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.cross-layer-paths.w.html @@ -1,32 +1,24 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <html class="reftest-wait"> -<link rel="match" href="2d.layer.endlayer.unmatched-expected.html"> -<title>Canvas test: 2d.layer.endlayer.unmatched</title> -<h1>2d.layer.endlayer.unmatched</h1> -<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p> -<canvas id="canvas" width="200" height="200"> +<link rel="match" href="2d.layer.cross-layer-paths-expected.html"> +<title>Canvas test: 2d.layer.cross-layer-paths</title> +<h1>2d.layer.cross-layer-paths</h1> +<p class="desc">Checks that path defined in a layer is usable outside.</p> +<canvas id="canvas" width="100" height="50"> <p class="fallback">FAIL (fallback content)</p> </canvas> <script id='myWorker' type='text/worker'> self.onmessage = function(e) { - const canvas = new OffscreenCanvas(200, 200); + const canvas = new OffscreenCanvas(100, 50); const ctx = canvas.getContext('2d'); - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - - ctx.globalAlpha = 0.5; - - // This endlayer call should no-op. - ctx.endLayer(); - ctx.beginLayer(); - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); + ctx.translate(50, 0); + ctx.moveTo(0, 0); ctx.endLayer(); + ctx.lineTo(50, 100); + ctx.stroke(); const bitmap = canvas.transferToImageBitmap(); self.postMessage(bitmap, bitmap); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html deleted file mode 100644 index 607526e4376..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone-expected.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE html> -<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<title>Canvas test: 2d.layer.endlayer.alone</title> -<h1>2d.layer.endlayer.alone</h1> -<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p> -<canvas id="canvas" width="200" height="200"> - <p class="fallback">FAIL (fallback content)</p> -</canvas> -<script> - const canvas = document.getElementById("canvas"); - const ctx = canvas.getContext('2d'); - - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - ctx.globalAlpha = 0.5; - - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); -</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html deleted file mode 100644 index e6dd85b7e26..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched-expected.html +++ /dev/null @@ -1,24 +0,0 @@ -<!DOCTYPE html> -<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<title>Canvas test: 2d.layer.endlayer.unmatched</title> -<h1>2d.layer.endlayer.unmatched</h1> -<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p> -<canvas id="canvas" width="200" height="200"> - <p class="fallback">FAIL (fallback content)</p> -</canvas> -<script> - const canvas = document.getElementById("canvas"); - const ctx = canvas.getContext('2d'); - - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - - ctx.globalAlpha = 0.5; - - ctx.beginLayer(); - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); - ctx.endLayer(); -</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html deleted file mode 100644 index b204c49e5eb..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.unmatched.html +++ /dev/null @@ -1,31 +0,0 @@ -<!DOCTYPE html> -<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<link rel="match" href="2d.layer.endlayer.unmatched-expected.html"> -<title>Canvas test: 2d.layer.endlayer.unmatched</title> -<h1>2d.layer.endlayer.unmatched</h1> -<p class="desc">A test to make sure an unmatched endLayer is a no-op and has no effect on the code following it.</p> -<canvas id="canvas" width="200" height="200"> - <p class="fallback">FAIL (fallback content)</p> -</canvas> -<script> - const canvas = new OffscreenCanvas(200, 200); - const ctx = canvas.getContext('2d'); - - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - - ctx.globalAlpha = 0.5; - - // This endlayer call should no-op. - ctx.endLayer(); - - ctx.beginLayer(); - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); - ctx.endLayer(); - - const outputCanvas = document.getElementById("canvas"); - outputCanvas.getContext('2d').drawImage(canvas, 0, 0); -</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html new file mode 100644 index 00000000000..c0b11aa6115 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.invalid-calls.beginLayer-reset-endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.invalid-calls.beginLayer-reset-endLayer</h1> +<p class="desc">Raises exception on beginLayer() + reset() + endLayer().</p> + + +<script> +var t = async_test("Raises exception on beginLayer() + reset() + endLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.reset(); + ctx.endLayer(); + }); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js new file mode 100644 index 00000000000..1c147d6f349 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-reset-endLayer.worker.js @@ -0,0 +1,26 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.invalid-calls.beginLayer-reset-endLayer +// Description:Raises exception on beginLayer() + reset() + endLayer(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Raises exception on beginLayer() + reset() + endLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.reset(); + ctx.endLayer(); + }); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html new file mode 100644 index 00000000000..022532b329d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.invalid-calls.beginLayer-restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.invalid-calls.beginLayer-restore</h1> +<p class="desc">Raises exception on beginLayer() + restore().</p> + + +<script> +var t = async_test("Raises exception on beginLayer() + restore()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.restore(); + }); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js new file mode 100644 index 00000000000..1aa86635e65 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-restore.worker.js @@ -0,0 +1,25 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.invalid-calls.beginLayer-restore +// Description:Raises exception on beginLayer() + restore(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Raises exception on beginLayer() + restore()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.restore(); + }); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html new file mode 100644 index 00000000000..26dd0eee4bc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.invalid-calls.beginLayer-save-endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.invalid-calls.beginLayer-save-endLayer</h1> +<p class="desc">Raises exception on beginLayer() + save() + endLayer().</p> + + +<script> +var t = async_test("Raises exception on beginLayer() + save() + endLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.save(); + ctx.endLayer(); + }); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js new file mode 100644 index 00000000000..613921c67c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.beginLayer-save-endLayer.worker.js @@ -0,0 +1,26 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.invalid-calls.beginLayer-save-endLayer +// Description:Raises exception on beginLayer() + save() + endLayer(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Raises exception on beginLayer() + save() + endLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.beginLayer(); + ctx.save(); + ctx.endLayer(); + }); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html new file mode 100644 index 00000000000..440249980ad --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.invalid-calls.endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.invalid-calls.endLayer</h1> +<p class="desc">Raises exception on lone endLayer calls.</p> + + +<script> +var t = async_test("Raises exception on lone endLayer calls."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.endLayer(); + }); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js new file mode 100644 index 00000000000..b2ba231b9c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.endLayer.worker.js @@ -0,0 +1,24 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.invalid-calls.endLayer +// Description:Raises exception on lone endLayer calls. +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Raises exception on lone endLayer calls."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.endLayer(); + }); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html new file mode 100644 index 00000000000..c2b09961acf --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.invalid-calls.save-beginLayer-restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.invalid-calls.save-beginLayer-restore</h1> +<p class="desc">Raises exception on save() + beginLayer() + restore().</p> + + +<script> +var t = async_test("Raises exception on save() + beginLayer() + restore()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.save(); + ctx.beginLayer(); + ctx.restore(); + }); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js new file mode 100644 index 00000000000..d155379fcb3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-beginLayer-restore.worker.js @@ -0,0 +1,26 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.invalid-calls.save-beginLayer-restore +// Description:Raises exception on save() + beginLayer() + restore(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Raises exception on save() + beginLayer() + restore()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.save(); + ctx.beginLayer(); + ctx.restore(); + }); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html new file mode 100644 index 00000000000..01b62d1e859 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.invalid-calls.save-endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.invalid-calls.save-endLayer</h1> +<p class="desc">Raises exception on save() + endLayer().</p> + + +<script> +var t = async_test("Raises exception on save() + endLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.save(); + ctx.endLayer(); + }); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js new file mode 100644 index 00000000000..353c1b00cdc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.invalid-calls.save-endLayer.worker.js @@ -0,0 +1,25 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.invalid-calls.save-endLayer +// Description:Raises exception on save() + endLayer(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Raises exception on save() + endLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + assert_throws_dom("INVALID_STATE_ERR", function() { + ctx.save(); + ctx.endLayer(); + }); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset-expected.html new file mode 100644 index 00000000000..93131dca9cf --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset-expected.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.reset</title> +<h1>2d.layer.reset</h1> +<p class="desc">Checks that reset discards any pending layers.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext('2d'); + + ctx.fillRect(10, 10, 75, 50); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.html new file mode 100644 index 00000000000..6fae595a84b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<link rel="match" href="2d.layer.reset-expected.html"> +<title>Canvas test: 2d.layer.reset</title> +<h1>2d.layer.reset</h1> +<p class="desc">Checks that reset discards any pending layers.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = new OffscreenCanvas(100, 50); + const ctx = canvas.getContext('2d'); + + // Global states: + ctx.globalAlpha = 0.3; + ctx.globalCompositeOperation = 'source-in'; + ctx.shadowOffsetX = -3; + ctx.shadowOffsetY = 3; + ctx.shadowColor = 'rgba(0, 30, 0, 0.3)'; + + ctx.beginLayer({filter: 'dropShadow', dx: -3, dy: 3}); + + // Layer states: + ctx.globalAlpha = 0.6; + ctx.globalCompositeOperation = 'source-in'; + ctx.shadowOffsetX = -6; + ctx.shadowOffsetY = 6; + ctx.shadowColor = 'rgba(0, 60, 0, 0.6)'; + + ctx.reset(); + + ctx.fillRect(10, 10, 75, 50); + + const outputCanvas = document.getElementById("canvas"); + outputCanvas.getContext('2d').drawImage(canvas, 0, 0); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.w.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.w.html new file mode 100644 index 00000000000..d050b90841a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.reset.w.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<html class="reftest-wait"> +<link rel="match" href="2d.layer.reset-expected.html"> +<title>Canvas test: 2d.layer.reset</title> +<h1>2d.layer.reset</h1> +<p class="desc">Checks that reset discards any pending layers.</p> +<canvas id="canvas" width="100" height="50"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script id='myWorker' type='text/worker'> + self.onmessage = function(e) { + const canvas = new OffscreenCanvas(100, 50); + const ctx = canvas.getContext('2d'); + + // Global states: + ctx.globalAlpha = 0.3; + ctx.globalCompositeOperation = 'source-in'; + ctx.shadowOffsetX = -3; + ctx.shadowOffsetY = 3; + ctx.shadowColor = 'rgba(0, 30, 0, 0.3)'; + + ctx.beginLayer({filter: 'dropShadow', dx: -3, dy: 3}); + + // Layer states: + ctx.globalAlpha = 0.6; + ctx.globalCompositeOperation = 'source-in'; + ctx.shadowOffsetX = -6; + ctx.shadowOffsetY = 6; + ctx.shadowColor = 'rgba(0, 60, 0, 0.6)'; + + ctx.reset(); + + ctx.fillRect(10, 10, 75, 50); + + const bitmap = canvas.transferToImageBitmap(); + self.postMessage(bitmap, bitmap); + }; +</script> +<script> + const blob = new Blob([document.getElementById('myWorker').textContent]); + const worker = new Worker(URL.createObjectURL(blob)); + worker.addEventListener('message', msg => { + const outputCtx = document.getElementById("canvas").getContext('2d'); + outputCtx.drawImage(msg.data, 0, 0); + document.documentElement.classList.remove("reftest-wait"); + }); + worker.postMessage(null); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html new file mode 100644 index 00000000000..5e90134a250 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested-expected.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>Canvas test: 2d.layer.unclosed-nested</title> +<h1>2d.layer.unclosed-nested</h1> +<p class="desc">Check that layers are rendered even if not closed.</p> +<canvas id="canvas" width="200" height="200"> + <p class="fallback">FAIL (fallback content)</p> +</canvas> +<script> + const canvas = document.getElementById("canvas"); + const ctx = canvas.getContext('2d'); + + const canvas1 = document.createElement('canvas'); + const ctx1 = canvas1.getContext('2d'); + ctx1.fillStyle = 'rgba(0,255,0,1)'; + ctx1.fillRect(70,70,75,50); + + const canvas2 = document.createElement('canvas'); + const ctx2 = canvas2.getContext('2d'); + ctx2.fillStyle = 'rgba(225,0,0,1)'; + ctx2.fillRect(50,50,75,50); + ctx2.drawImage(canvas1, 0, 0); + + ctx.fillStyle = 'rgba(0,0,255,1)'; + ctx.fillRect(60,60,75,50); + ctx.globalAlpha = 0.5; + ctx.drawImage(canvas2, 0, 0); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html index 6a0e5cce717..b7be6d82423 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.html @@ -1,9 +1,9 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<link rel="match" href="2d.layer.endlayer.alone-expected.html"> -<title>Canvas test: 2d.layer.endlayer.alone</title> -<h1>2d.layer.endlayer.alone</h1> -<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p> +<link rel="match" href="2d.layer.unclosed-nested-expected.html"> +<title>Canvas test: 2d.layer.unclosed-nested</title> +<h1>2d.layer.unclosed-nested</h1> +<p class="desc">Check that layers are rendered even if not closed.</p> <canvas id="canvas" width="200" height="200"> <p class="fallback">FAIL (fallback content)</p> </canvas> @@ -15,12 +15,16 @@ ctx.fillRect(60, 60, 75, 50); ctx.globalAlpha = 0.5; + ctx.beginLayer(); ctx.fillStyle = 'rgba(225, 0, 0, 1)'; ctx.fillRect(50, 50, 75, 50); + + ctx.beginLayer(); ctx.fillStyle = 'rgba(0, 255, 0, 1)'; ctx.fillRect(70, 70, 75, 50); ctx.endLayer(); + // Missing ctx.endLayer() here. const outputCanvas = document.getElementById("canvas"); outputCanvas.getContext('2d').drawImage(canvas, 0, 0); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html index ddb2671aaab..dd1c36ea471 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.endlayer.alone.w.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.unclosed-nested.w.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <html class="reftest-wait"> -<link rel="match" href="2d.layer.endlayer.alone-expected.html"> -<title>Canvas test: 2d.layer.endlayer.alone</title> -<h1>2d.layer.endlayer.alone</h1> -<p class="desc">A test to make sure a single endLayer with no beginLayer is a no-op.</p> +<link rel="match" href="2d.layer.unclosed-nested-expected.html"> +<title>Canvas test: 2d.layer.unclosed-nested</title> +<h1>2d.layer.unclosed-nested</h1> +<p class="desc">Check that layers are rendered even if not closed.</p> <canvas id="canvas" width="200" height="200"> <p class="fallback">FAIL (fallback content)</p> </canvas> @@ -17,12 +17,16 @@ ctx.fillRect(60, 60, 75, 50); ctx.globalAlpha = 0.5; + ctx.beginLayer(); ctx.fillStyle = 'rgba(225, 0, 0, 1)'; ctx.fillRect(50, 50, 75, 50); + + ctx.beginLayer(); ctx.fillStyle = 'rgba(0, 255, 0, 1)'; ctx.fillRect(70, 70, 75, 50); ctx.endLayer(); + // Missing ctx.endLayer() here. const bitmap = canvas.transferToImageBitmap(); self.postMessage(bitmap, bitmap); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html new file mode 100644 index 00000000000..0a6e195ca86 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.valid-calls.beginLayer-endLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.valid-calls.beginLayer-endLayer</h1> +<p class="desc">No exception raised on beginLayer() + endLayer().</p> + + +<script> +var t = async_test("No exception raised on beginLayer() + endLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.beginLayer(); + ctx.save(); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js new file mode 100644 index 00000000000..a10bcd98b75 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-endLayer.worker.js @@ -0,0 +1,23 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.valid-calls.beginLayer-endLayer +// Description:No exception raised on beginLayer() + endLayer(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("No exception raised on beginLayer() + endLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.beginLayer(); + ctx.save(); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html new file mode 100644 index 00000000000..12abcc5270c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.valid-calls.beginLayer-save</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.valid-calls.beginLayer-save</h1> +<p class="desc">No exception raised on beginLayer() + save().</p> + + +<script> +var t = async_test("No exception raised on beginLayer() + save()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.beginLayer(); + ctx.save(); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js new file mode 100644 index 00000000000..03fbeeb4f48 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer-save.worker.js @@ -0,0 +1,23 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.valid-calls.beginLayer-save +// Description:No exception raised on beginLayer() + save(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("No exception raised on beginLayer() + save()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.beginLayer(); + ctx.save(); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html new file mode 100644 index 00000000000..2178138e8d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.valid-calls.beginLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.valid-calls.beginLayer</h1> +<p class="desc">No exception raised on lone beginLayer() calls.</p> + + +<script> +var t = async_test("No exception raised on lone beginLayer() calls."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.beginLayer(); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js new file mode 100644 index 00000000000..e64be136d78 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.beginLayer.worker.js @@ -0,0 +1,22 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.valid-calls.beginLayer +// Description:No exception raised on lone beginLayer() calls. +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("No exception raised on lone beginLayer() calls."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.beginLayer(); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.html new file mode 100644 index 00000000000..156dd5abbdc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.valid-calls.restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.valid-calls.restore</h1> +<p class="desc">No exception raised on lone restore() calls.</p> + + +<script> +var t = async_test("No exception raised on lone restore() calls."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.restore(); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.js new file mode 100644 index 00000000000..7417d12abe8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.restore.worker.js @@ -0,0 +1,22 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.valid-calls.restore +// Description:No exception raised on lone restore() calls. +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("No exception raised on lone restore() calls."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.restore(); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html new file mode 100644 index 00000000000..afe735764ec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.valid-calls.save-beginLayer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.valid-calls.save-beginLayer</h1> +<p class="desc">No exception raised on save() + beginLayer().</p> + + +<script> +var t = async_test("No exception raised on save() + beginLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.save(); + ctx.beginLayer(); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js new file mode 100644 index 00000000000..773ba77a157 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save-beginLayer.worker.js @@ -0,0 +1,23 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.valid-calls.save-beginLayer +// Description:No exception raised on save() + beginLayer(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("No exception raised on save() + beginLayer()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.save(); + ctx.beginLayer(); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.html new file mode 100644 index 00000000000..2b2de23bb88 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.valid-calls.save</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.valid-calls.save</h1> +<p class="desc">No exception raised on lone save() calls.</p> + + +<script> +var t = async_test("No exception raised on lone save() calls."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.save(); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.js new file mode 100644 index 00000000000..5bbf0386fe9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save.worker.js @@ -0,0 +1,22 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.valid-calls.save +// Description:No exception raised on lone save() calls. +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("No exception raised on lone save() calls."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.save(); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html new file mode 100644 index 00000000000..ec5aa6455e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.valid-calls.save_reset_restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.valid-calls.save_reset_restore</h1> +<p class="desc">No exception raised on save() + reset() + restore().</p> + + +<script> +var t = async_test("No exception raised on save() + reset() + restore()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.save(); + ctx.reset(); + ctx.restore(); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js new file mode 100644 index 00000000000..3636c94357d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_reset_restore.worker.js @@ -0,0 +1,24 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.valid-calls.save_reset_restore +// Description:No exception raised on save() + reset() + restore(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("No exception raised on save() + reset() + restore()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.save(); + ctx.reset(); + ctx.restore(); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.html new file mode 100644 index 00000000000..1682bca91c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.layer.valid-calls.save_restore</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.layer.valid-calls.save_restore</h1> +<p class="desc">No exception raised on save() + restore().</p> + + +<script> +var t = async_test("No exception raised on save() + restore()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.save(); + ctx.restore(); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.js new file mode 100644 index 00000000000..8607722df73 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/layers/2d.layer.valid-calls.save_restore.worker.js @@ -0,0 +1,23 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.layer.valid-calls.save_restore +// Description:No exception raised on save() + restore(). +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("No exception raised on save() + restore()."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.save(); + ctx.restore(); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.html new file mode 100644 index 00000000000..0d1aa4be30e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.line.fill.noop</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.line.fill.noop</h1> +<p class="desc">Filling a line draws nothing</p> + + +<script> +var t = async_test("Filling a line draws nothing"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; + ctx.lineWidth = 20; + ctx.beginPath(); + ctx.moveTo(10, 20); + ctx.lineTo(90, 30); + ctx.fill(); + _assertPixel(canvas, 50,24, 0,255,0,255); + _assertPixel(canvas, 50,25, 0,255,0,255); + _assertPixel(canvas, 50,26, 0,255,0,255); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.js new file mode 100644 index 00000000000..e3e8c14b3fb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/line-styles/2d.line.fill.noop.worker.js @@ -0,0 +1,32 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.line.fill.noop +// Description:Filling a line draws nothing +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Filling a line draws nothing"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; + ctx.lineWidth = 20; + ctx.beginPath(); + ctx.moveTo(10, 20); + ctx.lineTo(90, 30); + ctx.fill(); + _assertPixel(canvas, 50,24, 0,255,0,255); + _assertPixel(canvas, 50,25, 0,255,0,255); + _assertPixel(canvas, 50,26, 0,255,0,255); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html index d321c324fa0..76796034e9a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable.html @@ -39,6 +39,7 @@ async_test(function(t) { assert_equals(offscreenCanvas.height, 0); }, "Test that offscreenCanvas's size is correct after being transferred to a worker."); + test(function() { function testException(contextType) { var worker = makeWorker(document.getElementById("myWorker").textContent); @@ -49,14 +50,13 @@ test(function() { }); } testException('2d'); - testException('webgl'); -}, "Test that transfer an OffscreenCanvas that has a context throws exception."); +}, "Test that transfer an OffscreenCanvas that already have a 2d context throws exception."); test(function() { var worker = makeWorker(document.getElementById("myWorker").textContent); var offscreenCanvas = new OffscreenCanvas(10, 10); worker.postMessage({offscreenCanvas}, [offscreenCanvas]); - assert_throws_dom("InvalidStateError", function() { + assert_throws_dom("DataCloneError", function() { worker.postMessage({offscreenCanvas}, [offscreenCanvas]); }); }, "Test that transfer an OffscreenCanvas twice throws exception."); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html index 603d5e5da42..765cf41b213 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.html @@ -25,6 +25,7 @@ t.step(function() { ctx.shadowColor = 'rgba(255, 0, 0, 0.01)'; ctx.shadowOffsetY = 50; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 4); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js index 0bc92ac4141..869aa017e7e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.1.worker.js @@ -21,6 +21,7 @@ t.step(function() { ctx.shadowColor = 'rgba(255, 0, 0, 0.01)'; ctx.shadowOffsetY = 50; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 4); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html index 254d214c4cd..be2209608fc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.html @@ -25,6 +25,7 @@ t.step(function() { ctx.shadowColor = 'rgba(0, 0, 255, 0.5)'; ctx.shadowOffsetY = 50; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.png Binary files differnew file mode 100644 index 00000000000..8764e89b371 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js index ff543b3c800..dce91f2e4d3 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.2.worker.js @@ -21,6 +21,7 @@ t.step(function() { ctx.shadowColor = 'rgba(0, 0, 255, 0.5)'; ctx.shadowOffsetY = 50; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html index 2c50c0d748a..7239b3cea7b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.html @@ -27,6 +27,7 @@ t.step(function() { ctx.shadowOffsetY = 50; ctx.globalAlpha = 0.5; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.png Binary files differnew file mode 100644 index 00000000000..8764e89b371 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js index d8bc071c85d..93fc665cedc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.3.worker.js @@ -23,6 +23,7 @@ t.step(function() { ctx.shadowOffsetY = 50; ctx.globalAlpha = 0.5; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html index d86ee4c4bff..468db2a7166 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.html @@ -27,6 +27,7 @@ t.step(function() { ctx.shadowOffsetY = 50; ctx.globalAlpha = 0.707; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.png Binary files differnew file mode 100644 index 00000000000..8764e89b371 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js index 4fdb8ca7dc5..2be63d3effa 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.4.worker.js @@ -23,6 +23,7 @@ t.step(function() { ctx.shadowOffsetY = 50; ctx.globalAlpha = 0.707; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html index 4c1a9b08cb0..92ac9717f2a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.html @@ -26,6 +26,7 @@ t.step(function() { ctx.shadowColor = '#00f'; ctx.shadowOffsetY = 50; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.png Binary files differnew file mode 100644 index 00000000000..8764e89b371 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js index be4b78d87c5..016616ac8c3 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.alpha.5.worker.js @@ -22,6 +22,7 @@ t.step(function() { ctx.shadowColor = '#00f'; ctx.shadowOffsetY = 50; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html index 8f199766fe2..51d1a4a804d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.html @@ -23,15 +23,30 @@ t.step(function() { ctx.shadowBlur = 1; ctx.shadowBlur = -2; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + ctx.shadowBlur = 1; ctx.shadowBlur = Infinity; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + ctx.shadowBlur = 1; ctx.shadowBlur = -Infinity; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + ctx.shadowBlur = 1; ctx.shadowBlur = NaN; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + + ctx.shadowBlur = 1; + ctx.shadowBlur = 'string'; + _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + + ctx.shadowBlur = 1; + ctx.shadowBlur = true; + _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + + ctx.shadowBlur = 1; + ctx.shadowBlur = false; + _assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0"); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js index 303b43e8193..2e3a28b789e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js @@ -19,15 +19,30 @@ t.step(function() { ctx.shadowBlur = 1; ctx.shadowBlur = -2; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + ctx.shadowBlur = 1; ctx.shadowBlur = Infinity; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + ctx.shadowBlur = 1; ctx.shadowBlur = -Infinity; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + ctx.shadowBlur = 1; ctx.shadowBlur = NaN; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + + ctx.shadowBlur = 1; + ctx.shadowBlur = 'string'; + _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + + ctx.shadowBlur = 1; + ctx.shadowBlur = true; + _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + + ctx.shadowBlur = 1; + ctx.shadowBlur = false; + _assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0"); t.done(); }); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html index 299826a5a2e..06495f6c317 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.html @@ -22,10 +22,13 @@ t.step(function() { ctx.shadowBlur = 1; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + ctx.shadowBlur = 0.5; _assertSame(ctx.shadowBlur, 0.5, "ctx.shadowBlur", "0.5"); + ctx.shadowBlur = 1e6; _assertSame(ctx.shadowBlur, 1e6, "ctx.shadowBlur", "1e6"); + ctx.shadowBlur = 0; _assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0"); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js index c41588b50ed..d0292edaecd 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js @@ -18,10 +18,13 @@ t.step(function() { ctx.shadowBlur = 1; _assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1"); + ctx.shadowBlur = 0.5; _assertSame(ctx.shadowBlur, 0.5, "ctx.shadowBlur", "0.5"); + ctx.shadowBlur = 1e6; _assertSame(ctx.shadowBlur, 1e6, "ctx.shadowBlur", "1e6"); + ctx.shadowBlur = 0; _assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0"); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html index 93a480b307b..ac1d9e73330 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.html @@ -23,12 +23,15 @@ t.step(function() { ctx.shadowColor = '#00ff00'; ctx.shadowColor = 'bogus'; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); + ctx.shadowColor = '#00ff00'; ctx.shadowColor = 'red bogus'; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); + ctx.shadowColor = '#00ff00'; ctx.shadowColor = ctx; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); + ctx.shadowColor = '#00ff00'; ctx.shadowColor = undefined; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js index 67e0fa80bc0..c962f2508dd 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js @@ -19,12 +19,15 @@ t.step(function() { ctx.shadowColor = '#00ff00'; ctx.shadowColor = 'bogus'; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); + ctx.shadowColor = '#00ff00'; ctx.shadowColor = 'red bogus'; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); + ctx.shadowColor = '#00ff00'; ctx.shadowColor = ctx; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); + ctx.shadowColor = '#00ff00'; ctx.shadowColor = undefined; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html index acd36360a8f..340f11f54f3 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.html @@ -22,6 +22,7 @@ t.step(function() { ctx.shadowColor = 'lime'; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); + ctx.shadowColor = 'RGBA(0,255, 0,0)'; _assertSame(ctx.shadowColor, 'rgba(0, 255, 0, 0)', "ctx.shadowColor", "'rgba(0, 255, 0, 0)'"); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js index 02444723b4e..6d7eb0504d4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowColor.valid.worker.js @@ -18,6 +18,7 @@ t.step(function() { ctx.shadowColor = 'lime'; _assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'"); + ctx.shadowColor = 'RGBA(0,255, 0,0)'; _assertSame(ctx.shadowColor, 'rgba(0, 255, 0, 0)', "ctx.shadowColor", "'rgba(0, 255, 0, 0)'"); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html index be055aa37ce..d789284b0a5 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.html @@ -26,18 +26,41 @@ t.step(function() { ctx.shadowOffsetY = Infinity; _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + ctx.shadowOffsetX = 1; ctx.shadowOffsetY = 2; ctx.shadowOffsetX = -Infinity; ctx.shadowOffsetY = -Infinity; _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + ctx.shadowOffsetX = 1; ctx.shadowOffsetY = 2; ctx.shadowOffsetX = NaN; ctx.shadowOffsetY = NaN; _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 2; + ctx.shadowOffsetX = 'string'; + ctx.shadowOffsetY = 'string'; + _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); + _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 2; + ctx.shadowOffsetX = true; + ctx.shadowOffsetY = true; + _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); + _assertSame(ctx.shadowOffsetY, 1, "ctx.shadowOffsetY", "1"); + + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 2; + ctx.shadowOffsetX = false; + ctx.shadowOffsetY = false; + _assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0"); + _assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0"); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js index 37ae2e6b785..9eb89cd5814 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js @@ -22,18 +22,41 @@ t.step(function() { ctx.shadowOffsetY = Infinity; _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + ctx.shadowOffsetX = 1; ctx.shadowOffsetY = 2; ctx.shadowOffsetX = -Infinity; ctx.shadowOffsetY = -Infinity; _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + ctx.shadowOffsetX = 1; ctx.shadowOffsetY = 2; ctx.shadowOffsetX = NaN; ctx.shadowOffsetY = NaN; _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 2; + ctx.shadowOffsetX = 'string'; + ctx.shadowOffsetY = 'string'; + _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); + _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 2; + ctx.shadowOffsetX = true; + ctx.shadowOffsetY = true; + _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); + _assertSame(ctx.shadowOffsetY, 1, "ctx.shadowOffsetY", "1"); + + ctx.shadowOffsetX = 1; + ctx.shadowOffsetY = 2; + ctx.shadowOffsetX = false; + ctx.shadowOffsetY = false; + _assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0"); + _assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0"); t.done(); }); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html index 785966cb38e..82f5f0118d0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.html @@ -24,18 +24,22 @@ t.step(function() { ctx.shadowOffsetY = 2; _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + ctx.shadowOffsetX = 0.5; ctx.shadowOffsetY = 0.25; _assertSame(ctx.shadowOffsetX, 0.5, "ctx.shadowOffsetX", "0.5"); _assertSame(ctx.shadowOffsetY, 0.25, "ctx.shadowOffsetY", "0.25"); + ctx.shadowOffsetX = -0.5; ctx.shadowOffsetY = -0.25; _assertSame(ctx.shadowOffsetX, -0.5, "ctx.shadowOffsetX", "-0.5"); _assertSame(ctx.shadowOffsetY, -0.25, "ctx.shadowOffsetY", "-0.25"); + ctx.shadowOffsetX = 0; ctx.shadowOffsetY = 0; _assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0"); _assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0"); + ctx.shadowOffsetX = 1e6; ctx.shadowOffsetY = 1e6; _assertSame(ctx.shadowOffsetX, 1e6, "ctx.shadowOffsetX", "1e6"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js index a6e047ee2b7..5881c5bca51 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js @@ -20,18 +20,22 @@ t.step(function() { ctx.shadowOffsetY = 2; _assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1"); _assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2"); + ctx.shadowOffsetX = 0.5; ctx.shadowOffsetY = 0.25; _assertSame(ctx.shadowOffsetX, 0.5, "ctx.shadowOffsetX", "0.5"); _assertSame(ctx.shadowOffsetY, 0.25, "ctx.shadowOffsetY", "0.25"); + ctx.shadowOffsetX = -0.5; ctx.shadowOffsetY = -0.25; _assertSame(ctx.shadowOffsetX, -0.5, "ctx.shadowOffsetX", "-0.5"); _assertSame(ctx.shadowOffsetY, -0.25, "ctx.shadowOffsetY", "-0.25"); + ctx.shadowOffsetX = 0; ctx.shadowOffsetY = 0; _assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0"); _assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0"); + ctx.shadowOffsetX = 1e6; ctx.shadowOffsetY = 1e6; _assertSame(ctx.shadowOffsetX, 1e6, "ctx.shadowOffsetX", "1e6"); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.html new file mode 100644 index 00000000000..46c50324488 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.shadow.blur.high</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.shadow.blur.high</h1> +<p class="desc">Shadows look correct for large blurs</p> + + +<script> +var t = async_test("Shadows look correct for large blurs"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#ff0'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowColor = '#00f'; + ctx.shadowOffsetY = 0; + ctx.shadowBlur = 100; + ctx.fillRect(-200, -200, 200, 400); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.worker.js new file mode 100644 index 00000000000..8bd06da381b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high-manual.worker.js @@ -0,0 +1,27 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.shadow.blur.high +// Description:Shadows look correct for large blurs +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Shadows look correct for large blurs"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#ff0'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowColor = '#00f'; + ctx.shadowOffsetY = 0; + ctx.shadowBlur = 100; + ctx.fillRect(-200, -200, 200, 400); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high.png Binary files differnew file mode 100644 index 00000000000..743640b79f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.high.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.html new file mode 100644 index 00000000000..19a42a683cc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.shadow.blur.low</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.shadow.blur.low</h1> +<p class="desc">Shadows look correct for small blurs</p> + + +<script> +var t = async_test("Shadows look correct for small blurs"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#ff0'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowColor = '#00f'; + ctx.shadowOffsetY = 25; + for (var x = 0; x < 100; ++x) { + ctx.save(); + ctx.beginPath(); + ctx.rect(x, 0, 1, 50); + ctx.clip(); + ctx.shadowBlur = x; + ctx.fillRect(-200, -200, 500, 200); + ctx.restore(); + } + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.worker.js new file mode 100644 index 00000000000..67bc8c424e9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low-manual.worker.js @@ -0,0 +1,34 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.shadow.blur.low +// Description:Shadows look correct for small blurs +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Shadows look correct for small blurs"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.fillStyle = '#ff0'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowColor = '#00f'; + ctx.shadowOffsetY = 25; + for (var x = 0; x < 100; ++x) { + ctx.save(); + ctx.beginPath(); + ctx.rect(x, 0, 1, 50); + ctx.clip(); + ctx.shadowBlur = x; + ctx.fillRect(-200, -200, 500, 200); + ctx.restore(); + } + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low.png Binary files differnew file mode 100644 index 00000000000..99fb651c21b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.blur.low.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html index ae046cfe19d..cae4235e8cf 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.html @@ -20,15 +20,17 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)'; ctx2.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#00f'; - ctx.drawImage(offscreenCanvas2, 0, -50); + ctx.drawImage(canvas2, 0, -50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.png Binary files differnew file mode 100644 index 00000000000..8764e89b371 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js index 21d6309c183..0fa74a20706 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.alpha.worker.js @@ -16,15 +16,17 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)'; ctx2.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#00f'; - ctx.drawImage(offscreenCanvas2, 0, -50); + ctx.drawImage(canvas2, 0, -50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html index 3ba1cf1fb06..f5784e914f5 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.html @@ -20,15 +20,17 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#0f0'; ctx.shadowOffsetY = 50; - ctx.drawImage(offscreenCanvas2, 0, -50); + ctx.drawImage(canvas2, 0, -50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js index 8ec3f4acb3c..6a2d916a754 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.basic.worker.js @@ -16,15 +16,17 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#0f0'; ctx.shadowOffsetY = 50; - ctx.drawImage(offscreenCanvas2, 0, -50); + ctx.drawImage(canvas2, 0, -50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html index 960d870923d..62b3f83272a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.html @@ -20,13 +20,15 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#f00'; ctx.shadowOffsetY = 50; - ctx.drawImage(offscreenCanvas2, 0, -50); + ctx.drawImage(canvas2, 0, -50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js index 7fd807bda4e..1b02897d62e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.1.worker.js @@ -16,13 +16,15 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#f00'; ctx.shadowOffsetY = 50; - ctx.drawImage(offscreenCanvas2, 0, -50); + ctx.drawImage(canvas2, 0, -50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html index 2f1d31d7066..0f804535235 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.html @@ -20,19 +20,21 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 50, 50); + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#f00'; ctx.fillRect(50, 0, 50, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - ctx.drawImage(offscreenCanvas2, 50, -50); + ctx.drawImage(canvas2, 50, -50); ctx.shadowColor = '#f00'; - ctx.drawImage(offscreenCanvas2, -50, -50); + ctx.drawImage(canvas2, -50, -50); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.js index 1347eb095fe..6e468e28e00 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.canvas.transparent.2.worker.js @@ -16,19 +16,21 @@ t.step(function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); + var canvas2 = new OffscreenCanvas(100, 50); + var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 50, 50); + ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#f00'; ctx.fillRect(50, 0, 50, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - ctx.drawImage(offscreenCanvas2, 50, -50); + ctx.drawImage(canvas2, 50, -50); ctx.shadowColor = '#f00'; - ctx.drawImage(offscreenCanvas2, -50, -50); + ctx.drawImage(canvas2, -50, -50); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.html index a762ab5f9f1..4df101d513c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.html @@ -24,6 +24,7 @@ t.step(function() { ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#f00'; ctx.fillRect(50, 0, 50, 50); + ctx.save(); ctx.beginPath(); ctx.rect(50, 0, 50, 50); @@ -32,6 +33,7 @@ t.step(function() { ctx.shadowOffsetX = 50; ctx.fillRect(0, 0, 50, 50); ctx.restore(); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js index 2a6423a8b29..6b05ceb226f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.1.worker.js @@ -20,6 +20,7 @@ t.step(function() { ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#f00'; ctx.fillRect(50, 0, 50, 50); + ctx.save(); ctx.beginPath(); ctx.rect(50, 0, 50, 50); @@ -28,6 +29,7 @@ t.step(function() { ctx.shadowOffsetX = 50; ctx.fillRect(0, 0, 50, 50); ctx.restore(); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html index 31055d7200d..6a09ea53f36 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.html @@ -24,6 +24,7 @@ t.step(function() { ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#0f0'; ctx.fillRect(50, 0, 50, 50); + ctx.save(); ctx.beginPath(); ctx.rect(0, 0, 50, 50); @@ -32,6 +33,7 @@ t.step(function() { ctx.shadowOffsetX = 50; ctx.fillRect(0, 0, 50, 50); ctx.restore(); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js index 2c6b8deacd4..4cdfcfdcfcd 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.2.worker.js @@ -20,6 +20,7 @@ t.step(function() { ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#0f0'; ctx.fillRect(50, 0, 50, 50); + ctx.save(); ctx.beginPath(); ctx.rect(0, 0, 50, 50); @@ -28,6 +29,7 @@ t.step(function() { ctx.shadowOffsetX = 50; ctx.fillRect(0, 0, 50, 50); ctx.restore(); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html index 3b62b233d14..d1732e9f5b7 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.html @@ -24,6 +24,7 @@ t.step(function() { ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#0f0'; ctx.fillRect(50, 0, 50, 50); + ctx.save(); ctx.beginPath(); ctx.rect(0, 0, 50, 50); @@ -33,6 +34,7 @@ t.step(function() { ctx.shadowOffsetX = 50; ctx.fillRect(-50, 0, 50, 50); ctx.restore(); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js index c97f9e5c63a..6f8b79d1fea 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.clip.3.worker.js @@ -20,6 +20,7 @@ t.step(function() { ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#0f0'; ctx.fillRect(50, 0, 50, 50); + ctx.save(); ctx.beginPath(); ctx.rect(0, 0, 50, 50); @@ -29,6 +30,7 @@ t.step(function() { ctx.shadowOffsetX = 50; ctx.fillRect(-50, 0, 50, 50); ctx.restore(); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html index e9a400f1e10..d6014fbd457 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.html @@ -27,6 +27,7 @@ t.step(function() { ctx.shadowOffsetX = 100; ctx.fillStyle = '#0f0'; ctx.fillRect(-100, 0, 200, 50); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js index 10baafad47e..28637706e15 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.1.worker.js @@ -23,6 +23,7 @@ t.step(function() { ctx.shadowOffsetX = 100; ctx.fillStyle = '#0f0'; ctx.fillRect(-100, 0, 200, 50); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html index 0a4c515bac2..87f2e3ba0f7 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.html @@ -27,6 +27,7 @@ t.step(function() { ctx.shadowBlur = 1; ctx.fillStyle = '#0f0'; ctx.fillRect(-10, -10, 120, 70); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js index 20c89c1390c..a144446ec55 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.2.worker.js @@ -23,6 +23,7 @@ t.step(function() { ctx.shadowBlur = 1; ctx.fillStyle = '#0f0'; ctx.fillRect(-10, -10, 120, 70); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html index 56218430ef4..f3cafa983ab 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.html @@ -27,6 +27,7 @@ t.step(function() { ctx.shadowBlur = 10; ctx.fillStyle = '#f00'; ctx.fillRect(200, 0, 100, 50); + _assertPixelApprox(canvas, 5,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js index 1257b3f5749..ba29487eea0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.composite.3.worker.js @@ -23,6 +23,7 @@ t.step(function() { ctx.shadowBlur = 10; ctx.fillStyle = '#f00'; ctx.fillRect(200, 0, 100, 50); + _assertPixelApprox(canvas, 5,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html index 384838584e0..199dd6c3fab 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.html @@ -29,6 +29,7 @@ t.step(function() { ctx.shadowColor = '#00f'; ctx.fillStyle = gradient; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.png Binary files differnew file mode 100644 index 00000000000..8764e89b371 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js index 65d582dd790..0f9a6449c4b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.alpha.worker.js @@ -25,6 +25,7 @@ t.step(function() { ctx.shadowColor = '#00f'; ctx.fillStyle = gradient; ctx.fillRect(0, -50, 100, 50); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html index c411b64e843..6746f03f3d8 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.html @@ -29,6 +29,7 @@ t.step(function() { ctx.shadowOffsetY = 50; ctx.fillStyle = gradient; ctx.fillRect(0, -50, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js index 2630acc1a4c..068b48bb6f8 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.basic.worker.js @@ -25,6 +25,7 @@ t.step(function() { ctx.shadowOffsetY = 50; ctx.fillStyle = gradient; ctx.fillRect(0, -50, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html index 852d4268fd5..7e7309e976e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.html @@ -29,6 +29,7 @@ t.step(function() { ctx.shadowOffsetY = 50; ctx.fillStyle = gradient; ctx.fillRect(0, -50, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js index b08401426af..1102848ecbd 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.1.worker.js @@ -25,6 +25,7 @@ t.step(function() { ctx.shadowOffsetY = 50; ctx.fillStyle = gradient; ctx.fillRect(0, -50, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html index b2c7967d1a7..8259eb9ae5d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.html @@ -33,6 +33,7 @@ t.step(function() { ctx.shadowColor = '#0f0'; ctx.fillStyle = gradient; ctx.fillRect(0, -50, 100, 50); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.js index bc651c594ea..5fcf4ee93d0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.gradient.transparent.2.worker.js @@ -29,6 +29,7 @@ t.step(function() { ctx.shadowColor = '#0f0'; ctx.fillStyle = gradient; ctx.fillRect(0, -50, 100, 50); + _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html index 9d14a7233aa..f7f797fd0b5 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html @@ -10,12 +10,7 @@ <script> -var t = async_test("Shadows are drawn correctly for partially-transparent images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -24,21 +19,12 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#00f'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent50.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/transparent50.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 0, -50); -}); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); + +}, "Shadows are drawn correctly for partially-transparent images"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.png Binary files differnew file mode 100644 index 00000000000..8764e89b371 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js index 5c290b06cb2..827bd2ce652 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are drawn correctly for partially-transparent images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -20,20 +15,12 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#00f'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent50.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/transparent50.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 0, -50); + + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); + t.done(); +}, "Shadows are drawn correctly for partially-transparent images"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html index b1066aa084f..5b959fdd92d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.html @@ -10,12 +10,7 @@ <script> -var t = async_test("Shadows are drawn for images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -24,21 +19,12 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#0f0'; ctx.shadowOffsetY = 50; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - _assertPixel(canvas, 50,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/red.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 0, -50); -}); + _assertPixel(canvas, 50,25, 0,255,0,255); + +}, "Shadows are drawn for images"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js index 750326c8944..2d02232c683 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.basic.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are drawn for images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -20,20 +15,12 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#0f0'; ctx.shadowOffsetY = 50; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - _assertPixel(canvas, 50,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/red.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 0, -50); + + _assertPixel(canvas, 50,25, 0,255,0,255); + t.done(); +}, "Shadows are drawn for images"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html index a6710d727b0..7e2536c0522 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.html @@ -10,12 +10,7 @@ <script> -var t = async_test("Shadows are drawn correctly for scaled images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -24,23 +19,14 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, 0, 100, 50, -10, -50, 240, 50); - _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); - _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); - _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/redtransparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 0, 0, 100, 50, -10, -50, 240, 50); -}); + _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); + _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); + +}, "Shadows are drawn correctly for scaled images"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js index 14e4334f0e0..2c10381f98a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.scale.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are drawn correctly for scaled images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -20,22 +15,14 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, 0, 100, 50, -10, -50, 240, 50); - _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); - _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); - _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/redtransparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 0, 0, 100, 50, -10, -50, 240, 50); + + _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); + _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); + t.done(); +}, "Shadows are drawn correctly for scaled images"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html index be2e6ed5e69..7744ee153bc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.html @@ -10,12 +10,7 @@ <script> -var t = async_test("Shadows are not drawn for areas outside image source rectangles"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -24,23 +19,14 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#f00'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 50, 0, 50, 50, 0, -50, 50, 50); - _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); - _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); - _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/redtransparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 50, 0, 50, 50, 0, -50, 50, 50); -}); + _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); + _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); + +}, "Shadows are not drawn for areas outside image source rectangles"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js index c63121c8022..94affdfb6ab 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.section.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are not drawn for areas outside image source rectangles"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -20,22 +15,14 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#f00'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 50, 0, 50, 50, 0, -50, 50, 50); - _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); - _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); - _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/redtransparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 50, 0, 50, 50, 0, -50, 50, 50); + + _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); + _assertPixelApprox(canvas, 50,25, 0,255,0,255, 2); + _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); + t.done(); +}, "Shadows are not drawn for areas outside image source rectangles"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html index 23cafc60750..30db23ce76c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.html @@ -10,12 +10,7 @@ <script> -var t = async_test("Shadows are not drawn for transparent images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -24,21 +19,12 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#f00'; ctx.shadowOffsetY = 50; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - _assertPixel(canvas, 50,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/transparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 0, -50); -}); + _assertPixel(canvas, 50,25, 0,255,0,255); + +}, "Shadows are not drawn for transparent images"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js index dbae8a5061e..c5421d70426 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.1.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are not drawn for transparent images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -20,20 +15,12 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#f00'; ctx.shadowOffsetY = 50; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - _assertPixel(canvas, 50,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/transparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 0, -50); + + _assertPixel(canvas, 50,25, 0,255,0,255); + t.done(); +}, "Shadows are not drawn for transparent images"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html index 6567dacf523..9b3b206a264 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.html @@ -10,12 +10,7 @@ <script> -var t = async_test("Shadows are not drawn for transparent parts of images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -26,25 +21,16 @@ t.step(function() { ctx.fillRect(50, 0, 50, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 50, -50); - ctx.shadowColor = '#f00'; - ctx.drawImage(bitmap, -50, -50); - _assertPixel(canvas, 25,25, 0,255,0,255); - _assertPixel(canvas, 50,25, 0,255,0,255); - _assertPixel(canvas, 75,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/redtransparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 50, -50); + ctx.shadowColor = '#f00'; + ctx.drawImage(img, -50, -50); -}); + _assertPixel(canvas, 25,25, 0,255,0,255); + _assertPixel(canvas, 50,25, 0,255,0,255); + _assertPixel(canvas, 75,25, 0,255,0,255); + +}, "Shadows are not drawn for transparent parts of images"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js index c424274bb51..071c584fa84 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.image.transparent.2.worker.js @@ -6,12 +6,7 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are not drawn for transparent parts of images"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); @@ -22,24 +17,16 @@ t.step(function() { ctx.fillRect(50, 0, 50, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 50, -50); - ctx.shadowColor = '#f00'; - ctx.drawImage(bitmap, -50, -50); - _assertPixel(canvas, 25,25, 0,255,0,255); - _assertPixel(canvas, 50,25, 0,255,0,255); - _assertPixel(canvas, 75,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/redtransparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + ctx.drawImage(img, 50, -50); + ctx.shadowColor = '#f00'; + ctx.drawImage(img, -50, -50); + + _assertPixel(canvas, 25,25, 0,255,0,255); + _assertPixel(canvas, 50,25, 0,255,0,255); + _assertPixel(canvas, 75,25, 0,255,0,255); + t.done(); +}, "Shadows are not drawn for transparent parts of images"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html index 04f6ee2e81a..c45654f9991 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.html @@ -10,36 +10,23 @@ <script> -var t = async_test("Shadows are drawn correctly for partially-transparent fill patterns"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent50.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#00f'; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/transparent50.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowOffsetY = 50; + ctx.shadowColor = '#00f'; + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); -}); + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); + +}, "Shadows are drawn correctly for partially-transparent fill patterns"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.png b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.png Binary files differnew file mode 100644 index 00000000000..8764e89b371 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.png diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js index 8b29bfb064a..41a826a158f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.alpha.worker.js @@ -6,35 +6,23 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are drawn correctly for partially-transparent fill patterns"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent50.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#00f'; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/transparent50.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowOffsetY = 50; + ctx.shadowColor = '#00f'; + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); + + _assertPixelApprox(canvas, 50,25, 127,0,127,255, 2); + t.done(); +}, "Shadows are drawn correctly for partially-transparent fill patterns"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html index 64d6b59308b..4e372c0932d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.html @@ -10,36 +10,23 @@ <script> -var t = async_test("Shadows are drawn for fill patterns"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 50; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/red.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowColor = '#0f0'; + ctx.shadowOffsetY = 50; + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); -}); + _assertPixel(canvas, 50,25, 0,255,0,255); + +}, "Shadows are drawn for fill patterns"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js index db9aefeaf4d..7a8f7e84796 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.basic.worker.js @@ -6,35 +6,23 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are drawn for fill patterns"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 50; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/red.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowColor = '#0f0'; + ctx.shadowOffsetY = 50; + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); + + _assertPixel(canvas, 50,25, 0,255,0,255); + t.done(); +}, "Shadows are drawn for fill patterns"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html index fe06c3afde1..72fa7b29f8e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.html @@ -10,36 +10,23 @@ <script> -var t = async_test("Shadows are not drawn for transparent fill patterns"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#f00'; - ctx.shadowOffsetY = 50; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/transparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowColor = '#f00'; + ctx.shadowOffsetY = 50; + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); -}); + _assertPixel(canvas, 50,25, 0,255,0,255); + +}, "Shadows are not drawn for transparent fill patterns"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js index b2ebc0ae2cf..8414db6d08c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.1.worker.js @@ -6,35 +6,23 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are not drawn for transparent fill patterns"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#f00'; - ctx.shadowOffsetY = 50; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/transparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.shadowColor = '#f00'; + ctx.shadowOffsetY = 50; + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); + + _assertPixel(canvas, 50,25, 0,255,0,255); + t.done(); +}, "Shadows are not drawn for transparent fill patterns"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html index 358113f07cd..6ad8ece009a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.html @@ -10,41 +10,27 @@ <script> -var t = async_test("Shadows are not drawn for transparent parts of fill patterns"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(50, 0, 50, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - _assertPixel(canvas, 25,25, 0,255,0,255); - _assertPixel(canvas, 50,25, 0,255,0,255); - _assertPixel(canvas, 75,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); + var response = await fetch('/images/redtransparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 50, 50); + ctx.fillStyle = '#0f0'; + ctx.fillRect(50, 0, 50, 50); + ctx.shadowOffsetY = 50; + ctx.shadowColor = '#0f0'; + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); -}); + _assertPixel(canvas, 25,25, 0,255,0,255); + _assertPixel(canvas, 50,25, 0,255,0,255); + _assertPixel(canvas, 75,25, 0,255,0,255); + +}, "Shadows are not drawn for transparent parts of fill patterns"); </script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js index cb963008f94..726a42d6cd4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.pattern.transparent.2.worker.js @@ -6,40 +6,27 @@ importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Shadows are not drawn for transparent parts of fill patterns"); -var t_pass = t.done.bind(t); -var t_fail = t.step_func(function(reason) { - throw reason; -}); -t.step(function() { +promise_test(async t => { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(50, 0, 50, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - _assertPixel(canvas, 25,25, 0,255,0,255); - _assertPixel(canvas, 50,25, 0,255,0,255); - _assertPixel(canvas, 75,25, 0,255,0,255); - }); - }).then(t_pass, t_fail); -}); + var response = await fetch('/images/redtransparent.png') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + var pattern = ctx.createPattern(img, 'repeat'); + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 50, 50); + ctx.fillStyle = '#0f0'; + ctx.fillRect(50, 0, 50, 50); + ctx.shadowOffsetY = 50; + ctx.shadowColor = '#0f0'; + ctx.fillStyle = pattern; + ctx.fillRect(0, -50, 100, 50); + + _assertPixel(canvas, 25,25, 0,255,0,255); + _assertPixel(canvas, 50,25, 0,255,0,255); + _assertPixel(canvas, 75,25, 0,255,0,255); + t.done(); +}, "Shadows are not drawn for transparent parts of fill patterns"); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html index 27edc8750ba..c569865a60c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.html @@ -30,6 +30,7 @@ t.step(function() { ctx.moveTo(0, -25); ctx.lineTo(100, -25); ctx.stroke(); + _assertPixel(canvas, 1,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 98,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js index b62e6c75e56..9d7d0ec3210 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.basic.worker.js @@ -26,6 +26,7 @@ t.step(function() { ctx.moveTo(0, -25); ctx.lineTo(100, -25); ctx.stroke(); + _assertPixel(canvas, 1,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 98,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html index 46f915b73e7..b170f88cf65 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.html @@ -33,6 +33,7 @@ t.step(function() { ctx.moveTo(100, -25); ctx.lineTo(150, -25); ctx.stroke(); + _assertPixel(canvas, 1,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 98,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js index 21c588ac299..582915d28bf 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.1.worker.js @@ -29,6 +29,7 @@ t.step(function() { ctx.moveTo(100, -25); ctx.lineTo(150, -25); ctx.stroke(); + _assertPixel(canvas, 1,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 98,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html index 91bfd80d2b1..8bbb016bd5e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.html @@ -31,6 +31,7 @@ t.step(function() { ctx.moveTo(25, -25); ctx.lineTo(75, -25); ctx.stroke(); + _assertPixel(canvas, 1,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 98,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js index aa607cd6efc..13108bec9e4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.cap.2.worker.js @@ -27,6 +27,7 @@ t.step(function() { ctx.moveTo(25, -25); ctx.lineTo(75, -25); ctx.stroke(); + _assertPixel(canvas, 1,25, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 98,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html index 1a57acb5f37..f0ef2d250ea 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.html @@ -32,6 +32,7 @@ t.step(function() { ctx.lineTo(-150, -50); ctx.lineTo(-151, -100); ctx.stroke(); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 48,48, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js index 8628fd993bd..0cc1b5f1963 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.1.worker.js @@ -28,6 +28,7 @@ t.step(function() { ctx.lineTo(-150, -50); ctx.lineTo(-151, -100); ctx.stroke(); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 48,48, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html index 394226c0ed5..f2800aa19a9 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.html @@ -34,6 +34,7 @@ t.step(function() { ctx.lineTo(-150, -50); ctx.lineTo(-151, -100); ctx.stroke(); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 48,48, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js index 06bcbd2c48a..925f65a28ee 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.2.worker.js @@ -30,6 +30,7 @@ t.step(function() { ctx.lineTo(-150, -50); ctx.lineTo(-151, -100); ctx.stroke(); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 48,48, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html index 2bf7d3dbc1b..390e6a80486 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.html @@ -33,6 +33,7 @@ t.step(function() { ctx.lineTo(-150, -50); ctx.lineTo(-151, -100); // (not an exact right angle, to avoid some other bug in Firefox 3) ctx.stroke(); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 48,48, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js index 5c52537a31e..827a6d66623 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.stroke.join.3.worker.js @@ -29,6 +29,7 @@ t.step(function() { ctx.lineTo(-150, -50); ctx.lineTo(-151, -100); // (not an exact right angle, to avoid some other bug in Firefox 3) ctx.stroke(); + _assertPixel(canvas, 1,1, 0,255,0,255); _assertPixel(canvas, 48,48, 0,255,0,255); _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html index 3fefcfc087a..23946b20a56 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.html @@ -26,6 +26,7 @@ t.step(function() { ctx.shadowColor = '#0f0'; ctx.translate(100, 100); ctx.fillRect(-100, -150, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js index 6227d8487f6..6ac8da4c97d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.1.worker.js @@ -22,6 +22,7 @@ t.step(function() { ctx.shadowColor = '#0f0'; ctx.translate(100, 100); ctx.fillRect(-100, -150, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html index a4ba056c759..edcd20bdcab 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.html @@ -26,6 +26,7 @@ t.step(function() { ctx.shadowColor = '#0f0'; ctx.rotate(Math.PI) ctx.fillRect(-100, 0, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js index 32c322af916..e9e745a2ab8 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/shadows/2d.shadow.transform.2.worker.js @@ -22,6 +22,7 @@ t.step(function() { ctx.shadowColor = '#0f0'; ctx.rotate(Math.PI) ctx.fillRect(-100, 0, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html index 0b822834328..0bd15ff0068 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html @@ -30,7 +30,7 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'hanging'; - ctx.fillText('CC', 0, 12.5); + ctx.fillText('CC', 0, -30); _assertPixelApprox(canvas, 5,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 95,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js index fca74d69381..4a5ced7b38f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.js @@ -26,7 +26,7 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'hanging'; - ctx.fillText('CC', 0, 12.5); + ctx.fillText('CC', 0, -30); _assertPixelApprox(canvas, 5,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 95,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html index c996444b860..3a1d6e5159c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html @@ -30,7 +30,7 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'ideographic'; - ctx.fillText('CC', 0, 31.25); + ctx.fillText('CC', 0, 81.25); _assertPixelApprox(canvas, 5,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 95,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js index 0ffa6fe299a..b39c10b74f0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.js @@ -26,7 +26,7 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'ideographic'; - ctx.fillText('CC', 0, 31.25); + ctx.fillText('CC', 0, 81.25); _assertPixelApprox(canvas, 5,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 95,5, 0,255,0,255, 2); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html index 9215203eaa7..a9dcfb11c42 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html @@ -6,11 +6,11 @@ <script src="/html/canvas/resources/canvas-tests.js"></script> <h1>2d.text.draw.space.collapse.end</h1> -<p class="desc">Space characters at the end of a line are collapsed (per CSS)</p> +<p class="desc">Space characters at the end of a line are NOT collapsed</p> <script> -var t = async_test("Space characters at the end of a line are collapsed (per CSS)"); +var t = async_test("Space characters at the end of a line are NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -30,7 +30,7 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textAlign = 'right'; - ctx.fillText('EE ', 100, 37.5); + ctx.fillText('EE ', 150, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }).then(t_pass, t_fail); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js index f910b274bd4..87ae8b8d58b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.js @@ -1,12 +1,12 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.text.draw.space.collapse.end -// Description:Space characters at the end of a line are collapsed (per CSS) +// Description:Space characters at the end of a line are NOT collapsed // Note: importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Space characters at the end of a line are collapsed (per CSS)"); +var t = async_test("Space characters at the end of a line are NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -26,7 +26,7 @@ t.step(function() { ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textAlign = 'right'; - ctx.fillText('EE ', 100, 37.5); + ctx.fillText('EE ', 150, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }).then(t_pass, t_fail); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html index a0cc560f507..c9808a4c716 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html @@ -6,11 +6,11 @@ <script src="/html/canvas/resources/canvas-tests.js"></script> <h1>2d.text.draw.space.collapse.other</h1> -<p class="desc">Space characters are converted to U+0020, and collapsed (per CSS)</p> +<p class="desc">Space characters are converted to U+0020, and are NOT collapsed</p> <script> -var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)"); +var t = async_test("Space characters are converted to U+0020, and are NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -29,7 +29,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5); + ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }).then(t_pass, t_fail); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js index 12edf7f7e7f..f072b76dd81 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.js @@ -1,12 +1,12 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.text.draw.space.collapse.other -// Description:Space characters are converted to U+0020, and collapsed (per CSS) +// Description:Space characters are converted to U+0020, and are NOT collapsed // Note: importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)"); +var t = async_test("Space characters are converted to U+0020, and are NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -25,7 +25,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5); + ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }).then(t_pass, t_fail); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html index 240ba7460c4..1ed09048961 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html @@ -6,11 +6,11 @@ <script src="/html/canvas/resources/canvas-tests.js"></script> <h1>2d.text.draw.space.collapse.space</h1> -<p class="desc">Space characters are converted to U+0020, and collapsed (per CSS)</p> +<p class="desc">Space characters are converted to U+0020, and are NOT collapsed</p> <script> -var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)"); +var t = async_test("Space characters are converted to U+0020, and are NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -29,7 +29,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E EE', -100, 37.5); + ctx.fillText('E EE', -150, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }).then(t_pass, t_fail); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js index 3ce5ef88f73..979a8a0f1cc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.js @@ -1,12 +1,12 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.text.draw.space.collapse.space -// Description:Space characters are converted to U+0020, and collapsed (per CSS) +// Description:Space characters are converted to U+0020, and are NOT collapsed // Note: importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Space characters are converted to U+0020, and collapsed (per CSS)"); +var t = async_test("Space characters are converted to U+0020, and are NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -25,7 +25,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E EE', -100, 37.5); + ctx.fillText('E EE', -150, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }).then(t_pass, t_fail); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html index 43fa32f8aeb..1581ce111ce 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html @@ -6,11 +6,11 @@ <script src="/html/canvas/resources/canvas-tests.js"></script> <h1>2d.text.draw.space.collapse.start</h1> -<p class="desc">Space characters at the start of a line are collapsed (per CSS)</p> +<p class="desc">Space characters at the start of a line are NOT collapsed</p> <script> -var t = async_test("Space characters at the start of a line are collapsed (per CSS)"); +var t = async_test("Space characters at the start of a line are NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -29,7 +29,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText(' EE', 0, 37.5); + ctx.fillText(' EE', -50, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }).then(t_pass, t_fail); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js index 2f742ac2b67..79f8326561c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.js @@ -1,12 +1,12 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.text.draw.space.collapse.start -// Description:Space characters at the start of a line are collapsed (per CSS) +// Description:Space characters at the start of a line are NOT collapsed // Note: importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Space characters at the start of a line are collapsed (per CSS)"); +var t = async_test("Space characters at the start of a line are NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -25,7 +25,7 @@ t.step(function() { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText(' EE', 0, 37.5); + ctx.fillText(' EE', -50, 37.5); _assertPixelApprox(canvas, 25,25, 0,255,0,255, 2); _assertPixelApprox(canvas, 75,25, 0,255,0,255, 2); }).then(t_pass, t_fail); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html index 380d8e7212f..7f6b57921e4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html @@ -22,34 +22,36 @@ t.step(function() { _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "Normal"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); - ctx.fontKerning = "auto"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "normal"; _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + ctx.fontKerning = "Auto"; + _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); ctx.fontKerning = "auto"; ctx.fontKerning = "noRmal"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "auto"; ctx.fontKerning = "NoRMal"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "auto"; ctx.fontKerning = "NORMAL"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "None"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); - ctx.fontKerning = "auto"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "none"; _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + ctx.fontKerning = "Auto"; + _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); ctx.fontKerning = "auto"; ctx.fontKerning = "nOne"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "auto"; ctx.fontKerning = "nonE"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "auto"; ctx.fontKerning = "NONE"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js index afce6c3955c..4e0f32c6927 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.js @@ -18,34 +18,36 @@ t.step(function() { _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "Normal"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); - ctx.fontKerning = "auto"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "normal"; _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + ctx.fontKerning = "Auto"; + _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); ctx.fontKerning = "auto"; ctx.fontKerning = "noRmal"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "auto"; ctx.fontKerning = "NoRMal"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "auto"; ctx.fontKerning = "NORMAL"; - _assertSame(ctx.fontKerning, "normal", "ctx.fontKerning", "\"normal\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "None"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); - ctx.fontKerning = "auto"; + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "none"; _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + ctx.fontKerning = "Auto"; + _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); ctx.fontKerning = "auto"; ctx.fontKerning = "nOne"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "auto"; ctx.fontKerning = "nonE"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); ctx.fontKerning = "auto"; ctx.fontKerning = "NONE"; - _assertSame(ctx.fontKerning, "none", "ctx.fontKerning", "\"none\""); + _assertSame(ctx.fontKerning, "auto", "ctx.fontKerning", "\"auto\""); t.done(); }); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html index 5ed17baf956..9756d095ba7 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html @@ -6,11 +6,11 @@ <script src="/html/canvas/resources/canvas-tests.js"></script> <h1>2d.text.drawing.style.fontVariant.settings</h1> -<p class="desc">Testing basic functionalities of fontKerning for canvas</p> +<p class="desc">Testing basic functionalities of fontVariant for canvas</p> <script> -var t = async_test("Testing basic functionalities of fontKerning for canvas"); +var t = async_test("Testing basic functionalities of fontVariant for canvas"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -44,29 +44,33 @@ t.step(function() { ctx.fontVariantCaps = "titling-caps"; _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); - // Setting fontVariantCaps with lower cases and upper cases word. + // Setting fontVariantCaps with mixed-case values is not valid ctx.fontVariantCaps = "nORmal"; + _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); + + ctx.fontVariantCaps = "normal"; _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "smaLL-caps"; - _assertSame(ctx.fontVariantCaps, "small-caps", "ctx.fontVariantCaps", "\"small-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "all-small-CAPS"; - _assertSame(ctx.fontVariantCaps, "all-small-caps", "ctx.fontVariantCaps", "\"all-small-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "pEtitE-caps"; - _assertSame(ctx.fontVariantCaps, "petite-caps", "ctx.fontVariantCaps", "\"petite-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "All-Petite-Caps"; - _assertSame(ctx.fontVariantCaps, "all-petite-caps", "ctx.fontVariantCaps", "\"all-petite-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "uNIcase"; - _assertSame(ctx.fontVariantCaps, "unicase", "ctx.fontVariantCaps", "\"unicase\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "titling-CAPS"; - _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); // Setting fontVariantCaps with non-existing font variant. + ctx.fontVariantCaps = "titling-caps"; ctx.fontVariantCaps = "abcd"; _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js index 9486b8ae1a4..30c78388ae4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.js @@ -1,12 +1,12 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.text.drawing.style.fontVariant.settings -// Description:Testing basic functionalities of fontKerning for canvas +// Description:Testing basic functionalities of fontVariant for canvas // Note: importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Testing basic functionalities of fontKerning for canvas"); +var t = async_test("Testing basic functionalities of fontVariant for canvas"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -40,29 +40,33 @@ t.step(function() { ctx.fontVariantCaps = "titling-caps"; _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); - // Setting fontVariantCaps with lower cases and upper cases word. + // Setting fontVariantCaps with mixed-case values is not valid ctx.fontVariantCaps = "nORmal"; + _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); + + ctx.fontVariantCaps = "normal"; _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "smaLL-caps"; - _assertSame(ctx.fontVariantCaps, "small-caps", "ctx.fontVariantCaps", "\"small-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "all-small-CAPS"; - _assertSame(ctx.fontVariantCaps, "all-small-caps", "ctx.fontVariantCaps", "\"all-small-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "pEtitE-caps"; - _assertSame(ctx.fontVariantCaps, "petite-caps", "ctx.fontVariantCaps", "\"petite-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "All-Petite-Caps"; - _assertSame(ctx.fontVariantCaps, "all-petite-caps", "ctx.fontVariantCaps", "\"all-petite-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "uNIcase"; - _assertSame(ctx.fontVariantCaps, "unicase", "ctx.fontVariantCaps", "\"unicase\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); ctx.fontVariantCaps = "titling-CAPS"; - _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); + _assertSame(ctx.fontVariantCaps, "normal", "ctx.fontVariantCaps", "\"normal\""); // Setting fontVariantCaps with non-existing font variant. + ctx.fontVariantCaps = "titling-caps"; ctx.fontVariantCaps = "abcd"; _assertSame(ctx.fontVariantCaps, "titling-caps", "ctx.fontVariantCaps", "\"titling-caps\""); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html index 30e937804f2..69453437fe2 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.html @@ -21,7 +21,7 @@ t.step(function() { var ctx = canvas.getContext('2d'); ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif'; - _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font\", sans-serif'"); + _assert(['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font), "['italic small-caps 12px \"Unknown Font\", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font)"); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js index 28cb41c572a..71d039cfaca 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex.worker.js @@ -17,7 +17,7 @@ t.step(function() { var ctx = canvas.getContext('2d'); ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif'; - _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font\", sans-serif'"); + _assert(['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font), "['italic small-caps 12px \"Unknown Font\", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font)"); t.done(); }); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.html new file mode 100644 index 00000000000..af94ac720a6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.text.font.parse.complex2</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.text.font.parse.complex2</h1> +<p class="desc"></p> + + +<script> +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif'; + _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font #2", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font #2\", sans-serif'"); + t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js new file mode 100644 index 00000000000..45575f88140 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.font.parse.complex2.worker.js @@ -0,0 +1,23 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.text.font.parse.complex2 +// Description: +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test(""); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + ctx.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif'; + _assertSame(ctx.font, 'italic small-caps 12px "Unknown Font #2", sans-serif', "ctx.font", "'italic small-caps 12px \"Unknown Font #2\", sans-serif'"); + t.done(); +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html index bff53f4f0e4..6ef4255b834 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.html @@ -6,11 +6,11 @@ <script src="/html/canvas/resources/canvas-tests.js"></script> <h1>2d.text.measure.width.space</h1> -<p class="desc">Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas</p> +<p class="desc">Space characters are converted to U+0020 and NOT collapsed</p> <script> -var t = async_test("Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas"); +var t = async_test("Space characters are converted to U+0020 and NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -28,11 +28,11 @@ t.step(function() { ctx.font = '50px CanvasTest'; _assertSame(ctx.measureText('A B').width, 150, "ctx.measureText('A B').width", "150"); _assertSame(ctx.measureText('A B').width, 200, "ctx.measureText('A B').width", "200"); - _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 150, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "150"); + _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 650, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "650"); _assert(ctx.measureText('A \x0b B').width >= 200, "ctx.measureText('A \\x0b B').width >= 200"); - _assertSame(ctx.measureText(' AB').width, 100, "ctx.measureText(' AB').width", "100"); - _assertSame(ctx.measureText('AB ').width, 100, "ctx.measureText('AB ').width", "100"); + _assertSame(ctx.measureText(' AB').width, 150, "ctx.measureText(' AB').width", "150"); + _assertSame(ctx.measureText('AB ').width, 150, "ctx.measureText('AB ').width", "150"); }).then(t_pass, t_fail); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js index 83020b34f58..5ee4ee3ff74 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.measure.width.space.worker.js @@ -1,12 +1,12 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. // OffscreenCanvas test in a worker:2d.text.measure.width.space -// Description:Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas +// Description:Space characters are converted to U+0020 and NOT collapsed // Note: importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas"); +var t = async_test("Space characters are converted to U+0020 and NOT collapsed"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -24,11 +24,11 @@ t.step(function() { ctx.font = '50px CanvasTest'; _assertSame(ctx.measureText('A B').width, 150, "ctx.measureText('A B').width", "150"); _assertSame(ctx.measureText('A B').width, 200, "ctx.measureText('A B').width", "200"); - _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 150, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "150"); + _assertSame(ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width, 650, "ctx.measureText('A \\x09\\x0a\\x0c\\x0d \\x09\\x0a\\x0c\\x0dB').width", "650"); _assert(ctx.measureText('A \x0b B').width >= 200, "ctx.measureText('A \\x0b B').width >= 200"); - _assertSame(ctx.measureText(' AB').width, 100, "ctx.measureText(' AB').width", "100"); - _assertSame(ctx.measureText('AB ').width, 100, "ctx.measureText('AB ').width", "100"); + _assertSame(ctx.measureText(' AB').width, 150, "ctx.measureText(' AB').width", "150"); + _assertSame(ctx.measureText('AB ').width, 150, "ctx.measureText('AB ').width", "150"); }).then(t_pass, t_fail); }); done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py b/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py deleted file mode 100644 index c7fb93ae6fd..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2023 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -"""Presubmit script for t/b/web_tests/external/wpt/html/canvas/tools. - -See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -for more details about the presubmit API built into depot_tools. -""" - - -def CommonChecks(input_api, output_api): - return input_api.canned_checks.RunPylint(input_api, output_api) - - -def CheckChangeOnUpload(input_api, output_api): - return CommonChecks(input_api, output_api) - - -def CheckChangeOnCommit(input_api, output_api): - return CommonChecks(input_api, output_api) diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py index 0542e32571a..cf141f2f074 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py +++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py @@ -500,7 +500,11 @@ def genTestUtils_union(NAME2DIRFILE: str) -> None: for variant_name, variant_params in variants.items(): test = original_test.copy() if variant_name or variant_params: - test['name'] += '.' + variant_name + # Append variant name. Variant names starting with '_' are + # not appended, which is useful to create variants with the same + # name in different folders (element vs. offscreen). + if not variant_name.startswith('_'): + test['name'] += '.' + variant_name test.update(variant_params) name = test['name'] diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/fill-and-stroke-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/fill-and-stroke-styles.yaml index 9d35dde661c..e30eb010088 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/fill-and-stroke-styles.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/fill-and-stroke-styles.yaml @@ -1,5 +1,6 @@ - name: 2d.fillStyle.parse.current.basic desc: currentColor is computed from the canvas element + canvasType: ['HtmlCanvas'] code: | canvas.setAttribute('style', 'color: #0f0'); ctx.fillStyle = '#f00'; @@ -10,6 +11,7 @@ - name: 2d.fillStyle.parse.current.changed desc: currentColor is computed when the attribute is set, not when it is painted + canvasType: ['HtmlCanvas'] code: | canvas.setAttribute('style', 'color: #0f0'); ctx.fillStyle = '#f00'; @@ -21,6 +23,7 @@ - name: 2d.fillStyle.parse.current.removed desc: currentColor is solid black when the canvas element is not in a document + canvasType: ['HtmlCanvas'] code: | // Try not to let it undetectably incorrectly pick up opaque-black // from other parts of the document: @@ -116,14 +119,16 @@ desc: window.CanvasGradient exists and has the right properties notes: &bindings Defined in "Web IDL" (draft) code: | - @assert window.CanvasGradient !== undefined; - @assert window.CanvasGradient.prototype.addColorStop !== undefined; + {% set root = 'self' if canvas_type == 'worker' else 'window' %} + @assert {{ root }}.CanvasGradient !== undefined; + @assert {{ root }}.CanvasGradient.prototype.addColorStop !== undefined; - name: 2d.gradient.object.return desc: createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient code: | - window.CanvasGradient.prototype.thisImplementsCanvasGradient = true; + {% set root = 'self' if canvas_type == 'worker' else 'window' %} + {{ root }}.CanvasGradient.prototype.thisImplementsCanvasGradient = true; var g1 = ctx.createLinearGradient(0, 0, 100, 0); @assert g1.addColorStop !== undefined; @@ -471,15 +476,23 @@ code: | ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var g = document.createElement('canvas').getContext('2d').createLinearGradient(0, 0, 100, 0); + var g = {{ create_canvas }}.getContext('2d').createLinearGradient(0, 0, 100, 0); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); @assert pixel 50,25 ==~ 0,255,0,255; expected: green + variants: + _HtmlCanvas: + canvasType: ['HtmlCanvas'] + create_canvas: document.createElement('canvas') + _OffscreenCanvas: + canvasType: ['OffscreenCanvas', 'Worker'] + create_canvas: new OffscreenCanvas(100, 50) - name: 2d.gradient.object.current + canvasType: ['HtmlCanvas'] code: | canvas.setAttribute('style', 'color: #f00'); @@ -1113,13 +1126,25 @@ images: - green.png code: | - @assert window.CanvasPattern !== undefined; + {% set root = 'self' if canvas_type == 'worker' else 'window' %} + @assert {{ root }}.CanvasPattern !== undefined; - window.CanvasPattern.prototype.thisImplementsCanvasPattern = true; + {{ root }}.CanvasPattern.prototype.thisImplementsCanvasPattern = true; - var img = document.getElementById('green.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'no-repeat'); @assert pattern.thisImplementsCanvasPattern; + variants: &load-image-variant-definition + _HtmlCanvas: + canvasType: ['HtmlCanvas'] + load_image: var img = document.getElementById('{{ (images or svgimages)[0] }}'); + _OffscreenCanvas: + canvasType: ['OffscreenCanvas', 'Worker'] + test_type: promise + load_image: |- + var response = await fetch('/images/{{ (images or svgimages)[0] }}') + var blob = await response.blob(); + var img = await createImageBitmap(blob); - name: 2d.pattern.basic.image images: @@ -1127,7 +1152,7 @@ code: | ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('green.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1137,15 +1162,14 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.basic.canvas code: | ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); @@ -1164,6 +1188,17 @@ @assert pixel 50,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: &create-canvas2-variant-definition + _HtmlCanvas: + canvasType: ['HtmlCanvas'] + create_canvas2: |- + var canvas2 = document.createElement('canvas'); + canvas2.width = 100; + canvas2.height = 50; + _OffscreenCanvas: + canvasType: ['OffscreenCanvas', 'Worker'] + create_canvas2: |- + var canvas2 = new OffscreenCanvas(100, 50); - name: 2d.pattern.basic.zerocanvas code: | @@ -1187,9 +1222,7 @@ - name: 2d.pattern.basic.nocontext code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var pattern = ctx.createPattern(canvas2, 'no-repeat'); ctx.fillStyle = '#0f0'; @@ -1203,12 +1236,11 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *create-canvas2-variant-definition - name: 2d.pattern.transform.identity code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var pattern = ctx.createPattern(canvas2, 'no-repeat'); pattern.setTransform(new DOMMatrix()); @@ -1223,12 +1255,11 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *create-canvas2-variant-definition - name: 2d.pattern.transform.infinity code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var pattern = ctx.createPattern(canvas2, 'no-repeat'); pattern.setTransform({a: Infinity}); @@ -1243,14 +1274,14 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *create-canvas2-variant-definition - name: 2d.pattern.transform.invalid code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var pattern = ctx.createPattern(canvas2, 'no-repeat'); @assert throws TypeError pattern.setTransform({a: 1, m11: 2}); + variants: *create-canvas2-variant-definition - name: 2d.pattern.image.undefined notes: *bindings @@ -1268,11 +1299,13 @@ @assert throws TypeError ctx.createPattern('../images/red.png', 'repeat'); - name: 2d.pattern.image.incomplete.nosrc + canvasType: ['HtmlCanvas'] code: | var img = new Image(); @assert ctx.createPattern(img, 'repeat') === null; - name: 2d.pattern.image.incomplete.immediate + canvasType: ['HtmlCanvas'] images: - red.png code: | @@ -1285,6 +1318,7 @@ @assert ctx.createPattern(img, 'repeat') === null; @moz-todo - name: 2d.pattern.image.incomplete.reload + canvasType: ['HtmlCanvas'] images: - yellow.png - red.png @@ -1299,6 +1333,7 @@ @assert ctx.createPattern(img, 'repeat') === null; @moz-todo - name: 2d.pattern.image.incomplete.emptysrc + canvasType: ['HtmlCanvas'] images: - red.png mozilla: {throws: !!null ''} @@ -1308,6 +1343,7 @@ @assert ctx.createPattern(img, 'repeat') === null; - name: 2d.pattern.image.incomplete.removedsrc + canvasType: ['HtmlCanvas'] images: - red.png mozilla: {throws: !!null ''} @@ -1317,6 +1353,7 @@ @assert ctx.createPattern(img, 'repeat') === null; - name: 2d.pattern.image.broken + canvasType: ['HtmlCanvas'] images: - broken.png code: | @@ -1324,6 +1361,7 @@ @assert throws INVALID_STATE_ERR ctx.createPattern(img, 'repeat'); - name: 2d.pattern.image.nonexistent + canvasType: ['HtmlCanvas'] images: - no-such-image-really.png code: | @@ -1331,6 +1369,7 @@ @assert throws INVALID_STATE_ERR ctx.createPattern(img, 'repeat'); - name: 2d.pattern.svgimage.nonexistent + canvasType: ['HtmlCanvas'] svgimages: - no-such-image-really.png code: | @@ -1338,6 +1377,7 @@ @assert throws INVALID_STATE_ERR ctx.createPattern(img, 'repeat'); - name: 2d.pattern.image.nonexistent-but-loading + canvasType: ['HtmlCanvas'] code: | var img = document.createElement("img"); img.src = "/images/no-such-image-really.png"; @@ -1347,6 +1387,7 @@ @assert ctx.createPattern(img, 'repeat') === null; - name: 2d.pattern.image.nosrc + canvasType: ['HtmlCanvas'] code: | var img = document.createElement("img"); @assert ctx.createPattern(img, 'repeat') === null; @@ -1354,6 +1395,7 @@ @assert ctx.createPattern(img, 'repeat') === null; - name: 2d.pattern.image.zerowidth + canvasType: ['HtmlCanvas'] images: - red-zerowidth.svg code: | @@ -1361,6 +1403,7 @@ @assert ctx.createPattern(img, 'repeat') === null; - name: 2d.pattern.image.zeroheight + canvasType: ['HtmlCanvas'] images: - red-zeroheight.svg code: | @@ -1368,6 +1411,7 @@ @assert ctx.createPattern(img, 'repeat') === null; - name: 2d.pattern.svgimage.zerowidth + canvasType: ['HtmlCanvas'] svgimages: - red-zerowidth.svg code: | @@ -1375,6 +1419,7 @@ @assert ctx.createPattern(img, 'repeat') === null; - name: 2d.pattern.svgimage.zeroheight + canvasType: ['HtmlCanvas'] svgimages: - red-zeroheight.svg code: | @@ -1387,7 +1432,7 @@ code: | ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('green-1x1.png'); + {{ load_image }} var pattern = ctx.createPattern(img, ""); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 200, 50); @@ -1397,6 +1442,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.repeat.null code: | @@ -1423,6 +1469,7 @@ @assert throws SYNTAX_ERR ctx.createPattern(canvas, "repeat\0"); - name: 2d.pattern.modify.image1 + canvasType: ['HtmlCanvas'] images: - green.png code: | @@ -1443,6 +1490,7 @@ expected: green - name: 2d.pattern.modify.image2 + canvasType: ['HtmlCanvas'] images: - green.png code: | @@ -1467,10 +1515,9 @@ expected: green - name: 2d.pattern.modify.canvas1 + canvasType: ['HtmlCanvas'] code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); @@ -1488,12 +1535,11 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *create-canvas2-variant-definition - name: 2d.pattern.modify.canvas2 code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#0f0'; ctx2.fillRect(0, 0, 100, 50); @@ -1515,14 +1561,15 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *create-canvas2-variant-definition - name: 2d.pattern.crosscanvas images: - green.png code: | - var img = document.getElementById('green.png'); + {{ load_image }} - var pattern = document.createElement('canvas').getContext('2d').createPattern(img, 'no-repeat'); + var pattern = {{ create_canvas }}.getContext('2d').createPattern(img, 'no-repeat'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = pattern; @@ -1530,6 +1577,19 @@ @assert pixel 50,25 == 0,255,0,255; expected: green + variants: + _HtmlCanvas: + canvasType: ['HtmlCanvas'] + load_image: var img = document.getElementById('{{ images[0] }}'); + create_canvas: document.createElement('canvas') + _OffscreenCanvas: + canvasType: ['OffscreenCanvas', 'Worker'] + test_type: promise + load_image: |- + var response = await fetch('/images/{{ images[0] }}') + var blob = await response.blob(); + var img = await createImageBitmap(blob); + create_canvas: new OffscreenCanvas(100, 50) - name: 2d.pattern.paint.norepeat.basic images: @@ -1538,7 +1598,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('green.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1548,6 +1608,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.norepeat.outside images: @@ -1556,7 +1617,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('red.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'no-repeat'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); @@ -1572,6 +1633,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.norepeat.coord1 images: @@ -1582,7 +1644,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(50, 0, 50, 50); - var img = document.getElementById('green.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'no-repeat'); ctx.fillStyle = pattern; ctx.translate(50, 0); @@ -1593,12 +1655,13 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.norepeat.coord2 images: - green.png code: | - var img = document.getElementById('green.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'no-repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 50, 50); @@ -1615,6 +1678,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.norepeat.coord3 images: @@ -1623,7 +1687,7 @@ ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('red.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'no-repeat'); ctx.fillStyle = pattern; ctx.translate(50, 25); @@ -1637,6 +1701,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeat.basic images: @@ -1645,7 +1710,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('green-16x16.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1655,6 +1720,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeat.outside images: @@ -1663,7 +1729,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('green-16x16.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = pattern; ctx.translate(50, 25); @@ -1674,6 +1740,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeat.coord1 images: @@ -1682,7 +1749,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('rgrg-256x256.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = pattern; ctx.translate(-128, -78); @@ -1693,12 +1760,13 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeat.coord2 images: - ggrr-256x256.png code: | - var img = document.getElementById('ggrr-256x256.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1708,12 +1776,13 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeat.coord3 images: - rgrg-256x256.png code: | - var img = document.getElementById('rgrg-256x256.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1726,6 +1795,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeatx.basic images: @@ -1736,7 +1806,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 16); - var img = document.getElementById('green-16x16.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat-x'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1746,6 +1816,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeatx.outside images: @@ -1754,7 +1825,7 @@ ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('red-16x16.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat-x'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1767,6 +1838,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeatx.coord1 images: @@ -1775,7 +1847,7 @@ ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('red-16x16.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat-x'); ctx.fillStyle = pattern; ctx.translate(0, 16); @@ -1791,6 +1863,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeaty.basic images: @@ -1801,7 +1874,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 16, 50); - var img = document.getElementById('green-16x16.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat-y'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1811,6 +1884,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeaty.outside images: @@ -1819,7 +1893,7 @@ ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('red-16x16.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat-y'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 100, 50); @@ -1832,6 +1906,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.repeaty.coord1 images: @@ -1840,7 +1915,7 @@ ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('red-16x16.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'repeat-y'); ctx.fillStyle = pattern; ctx.translate(48, 0); @@ -1856,6 +1931,7 @@ @assert pixel 50,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.orientation.image desc: Image patterns do not get flipped when painted @@ -1865,7 +1941,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var img = document.getElementById('rrgg-256x256.png'); + {{ load_image }} var pattern = ctx.createPattern(img, 'no-repeat'); ctx.fillStyle = pattern; ctx.save(); @@ -1881,6 +1957,7 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.pattern.paint.orientation.canvas desc: Canvas patterns do not get flipped when painted @@ -1888,9 +1965,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 25); @@ -1908,10 +1983,11 @@ @assert pixel 1,48 == 0,255,0,255; @assert pixel 98,48 == 0,255,0,255; expected: green - + variants: *create-canvas2-variant-definition - name: 2d.pattern.animated.gif desc: createPattern() of an animated GIF draws the first frame + canvasType: ['HtmlCanvas'] images: - anim-gr.gif code: | @@ -1930,6 +2006,7 @@ - name: 2d.fillStyle.CSSRGB desc: CSSRGB works as color input + canvasType: ['HtmlCanvas', 'OffscreenCanvas'] code: | ctx.fillStyle = new CSSRGB(1, 0, 1); @assert ctx.fillStyle === '#ff00ff'; @@ -1969,6 +2046,7 @@ - name: 2d.fillStyle.CSSHSL desc: CSSHSL works as color input + canvasType: ['HtmlCanvas', 'OffscreenCanvas'] code: | ctx.fillStyle = new CSSHSL(CSS.deg(180), 0.5, 0.5); ctx.fillRect(0, 0, 100, 50); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml index 8ca05bec84d..63edf62e3b8 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/layers.yaml @@ -271,6 +271,40 @@ ctx.fillRect(50, 50, 75, 50); ctx.endLayer(); +- name: 2d.layer.unclosed-nested + desc: Check that layers are rendered even if not closed. + size: [200, 200] + code: | + ctx.fillStyle = 'rgba(0, 0, 255, 1)'; + ctx.fillRect(60, 60, 75, 50); + ctx.globalAlpha = 0.5; + + ctx.beginLayer(); + ctx.fillStyle = 'rgba(225, 0, 0, 1)'; + ctx.fillRect(50, 50, 75, 50); + + ctx.beginLayer(); + ctx.fillStyle = 'rgba(0, 255, 0, 1)'; + ctx.fillRect(70, 70, 75, 50); + + ctx.endLayer(); + // Missing ctx.endLayer() here. + reference: | + const canvas1 = document.createElement('canvas'); + const ctx1 = canvas1.getContext('2d'); + ctx1.fillStyle = 'rgba(0,255,0,1)'; + ctx1.fillRect(70,70,75,50); + + const canvas2 = document.createElement('canvas'); + const ctx2 = canvas2.getContext('2d'); + ctx2.fillStyle = 'rgba(225,0,0,1)'; + ctx2.fillRect(50,50,75,50); + ctx2.drawImage(canvas1, 0, 0); + + ctx.fillStyle = 'rgba(0,0,255,1)'; + ctx.fillRect(60,60,75,50); + ctx.globalAlpha = 0.5; + ctx.drawImage(canvas2, 0, 0); - name: 2d.layer.render-opportunities desc: Check that layers state stack is flushed and rebuilt on frame renders. @@ -436,61 +470,119 @@ ctx.drawImage(canvas2[i], i, i); } - -- name: 2d.layer.endlayer.unmatched - desc: >- - A test to make sure an unmatched endLayer is a no-op and has no effect on - the code following it. - size: [200, 200] +- name: 2d.layer.reset + desc: Checks that reset discards any pending layers. code: | - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - - ctx.globalAlpha = 0.5; - - // This endlayer call should no-op. - ctx.endLayer(); + // Global states: + ctx.globalAlpha = 0.3; + ctx.globalCompositeOperation = 'source-in'; + ctx.shadowOffsetX = -3; + ctx.shadowOffsetY = 3; + ctx.shadowColor = 'rgba(0, 30, 0, 0.3)'; - ctx.beginLayer(); - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); - ctx.endLayer(); - reference: | - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); + ctx.beginLayer({filter: 'dropShadow', dx: -3, dy: 3}); - ctx.globalAlpha = 0.5; + // Layer states: + ctx.globalAlpha = 0.6; + ctx.globalCompositeOperation = 'source-in'; + ctx.shadowOffsetX = -6; + ctx.shadowOffsetY = 6; + ctx.shadowColor = 'rgba(0, 60, 0, 0.6)'; - ctx.beginLayer(); - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); - ctx.endLayer(); + ctx.reset(); + ctx.fillRect(10, 10, 75, 50); + reference: + ctx.fillRect(10, 10, 75, 50); -- name: 2d.layer.endlayer.alone - desc: A test to make sure a single endLayer with no beginLayer is a no-op. - size: [200, 200] +- name: 2d.layer.valid-calls + desc: No exception raised on {{ variant_desc }}. + variants: + save: + variant_desc: lone save() calls + code: ctx.save(); + beginLayer: + variant_desc: lone beginLayer() calls + code: ctx.beginLayer(); + restore: + variant_desc: lone restore() calls + code: ctx.restore(); + save_restore: + variant_desc: save() + restore() + code: |- + ctx.save(); + ctx.restore(); + save_reset_restore: + variant_desc: save() + reset() + restore() + code: |- + ctx.save(); + ctx.reset(); + ctx.restore(); + beginLayer-endLayer: + variant_desc: beginLayer() + endLayer() + code: |- + ctx.beginLayer(); + ctx.save(); + save-beginLayer: + variant_desc: save() + beginLayer() + code: |- + ctx.save(); + ctx.beginLayer(); + beginLayer-save: + variant_desc: beginLayer() + save() + code: |- + ctx.beginLayer(); + ctx.save(); + +- name: 2d.layer.invalid-calls + desc: Raises exception on {{ variant_desc }}. code: | - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - ctx.globalAlpha = 0.5; - - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); - + assert_throws_dom("INVALID_STATE_ERR", function() { + {{ call_sequence | indent(2) }} + }); + variants: + endLayer: + variant_desc: lone endLayer calls + call_sequence: ctx.endLayer(); + save-endLayer: + variant_desc: save() + endLayer() + call_sequence: |- + ctx.save(); + ctx.endLayer(); + beginLayer-restore: + variant_desc: beginLayer() + restore() + call_sequence: |- + ctx.beginLayer(); + ctx.restore(); + save-beginLayer-restore: + variant_desc: save() + beginLayer() + restore() + call_sequence: |- + ctx.save(); + ctx.beginLayer(); + ctx.restore(); + beginLayer-save-endLayer: + variant_desc: beginLayer() + save() + endLayer() + call_sequence: |- + ctx.beginLayer(); + ctx.save(); + ctx.endLayer(); + beginLayer-reset-endLayer: + variant_desc: beginLayer() + reset() + endLayer() + call_sequence: |- + ctx.beginLayer(); + ctx.reset(); + ctx.endLayer(); + +- name: 2d.layer.cross-layer-paths + desc: Checks that path defined in a layer is usable outside. + code: | + ctx.beginLayer(); + ctx.translate(50, 0); + ctx.moveTo(0, 0); ctx.endLayer(); - reference: | - ctx.fillStyle = 'rgba(0, 0, 255, 1)'; - ctx.fillRect(60, 60, 75, 50); - ctx.globalAlpha = 0.5; - - ctx.fillStyle = 'rgba(225, 0, 0, 1)'; - ctx.fillRect(50, 50, 75, 50); - ctx.fillStyle = 'rgba(0, 255, 0, 1)'; - ctx.fillRect(70, 70, 75, 50); + ctx.lineTo(50, 100); + ctx.stroke(); + reference: + ctx.moveTo(50, 0); + ctx.lineTo(50, 100); + ctx.stroke(); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml index 604f4f3659a..47bf3af97ec 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/line-styles.yaml @@ -395,6 +395,21 @@ ctx.lineCap = 'bevel'; @assert ctx.lineCap === 'butt'; +- name: 2d.line.fill.noop + desc: Filling a line draws nothing + code: | + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = '#f00'; + ctx.lineWidth = 20; + ctx.beginPath(); + ctx.moveTo(10, 20); + ctx.lineTo(90, 30); + ctx.fill(); + @assert pixel 50,24 == 0,255,0,255; + @assert pixel 50,25 == 0,255,0,255; + @assert pixel 50,26 == 0,255,0,255; + - name: 2d.line.join.bevel desc: lineJoin 'bevel' is rendered correctly code: | diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/shadows.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/shadows.yaml index 7a7c115a7c4..366ac0b6072 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/shadows.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/shadows.yaml @@ -481,10 +481,22 @@ ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#0f0'; ctx.shadowOffsetY = 50; - ctx.drawImage(document.getElementById('red.png'), 0, -50); + {{ load_image }} + ctx.drawImage(img, 0, -50); @assert pixel 50,25 == 0,255,0,255; expected: green + variants: &load-image-variant-definition + _HtmlCanvas: + canvasType: ['HtmlCanvas'] + load_image: var img = document.getElementById('{{ images[0] }}'); + _OffscreenCanvas: + canvasType: ['OffscreenCanvas', 'Worker'] + test_type: promise + load_image: |- + var response = await fetch('/images/{{ images[0] }}') + var blob = await response.blob(); + var img = await createImageBitmap(blob); - name: 2d.shadow.image.transparent.1 desc: Shadows are not drawn for transparent images @@ -495,10 +507,12 @@ ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#f00'; ctx.shadowOffsetY = 50; - ctx.drawImage(document.getElementById('transparent.png'), 0, -50); + {{ load_image }} + ctx.drawImage(img, 0, -50); @assert pixel 50,25 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.shadow.image.transparent.2 desc: Shadows are not drawn for transparent parts of images @@ -511,14 +525,16 @@ ctx.fillRect(50, 0, 50, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - ctx.drawImage(document.getElementById('redtransparent.png'), 50, -50); + {{ load_image }} + ctx.drawImage(img, 50, -50); ctx.shadowColor = '#f00'; - ctx.drawImage(document.getElementById('redtransparent.png'), -50, -50); + ctx.drawImage(img, -50, -50); @assert pixel 25,25 == 0,255,0,255; @assert pixel 50,25 == 0,255,0,255; @assert pixel 75,25 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.shadow.image.alpha desc: Shadows are drawn correctly for partially-transparent images @@ -529,7 +545,8 @@ ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#00f'; - ctx.drawImage(document.getElementById('transparent50.png'), 0, -50); + {{ load_image }} + ctx.drawImage(img, 0, -50); @assert pixel 50,25 ==~ 127,0,127,255; expected: | @@ -537,6 +554,7 @@ cr.set_source_rgb(0.5, 0, 0.5) cr.rectangle(0, 0, 100, 50) cr.fill() + variants: *load-image-variant-definition - name: 2d.shadow.image.section desc: Shadows are not drawn for areas outside image source rectangles @@ -547,12 +565,14 @@ ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#f00'; - ctx.drawImage(document.getElementById('redtransparent.png'), 50, 0, 50, 50, 0, -50, 50, 50); + {{ load_image }} + ctx.drawImage(img, 50, 0, 50, 50, 0, -50, 50, 50); @assert pixel 25,25 ==~ 0,255,0,255; @assert pixel 50,25 ==~ 0,255,0,255; @assert pixel 75,25 ==~ 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.shadow.image.scale desc: Shadows are drawn correctly for scaled images @@ -563,19 +583,19 @@ ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; ctx.shadowColor = '#0f0'; - ctx.drawImage(document.getElementById('redtransparent.png'), 0, 0, 100, 50, -10, -50, 240, 50); + {{ load_image }} + ctx.drawImage(img, 0, 0, 100, 50, -10, -50, 240, 50); @assert pixel 25,25 ==~ 0,255,0,255; @assert pixel 50,25 ==~ 0,255,0,255; @assert pixel 75,25 ==~ 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.shadow.canvas.basic desc: Shadows are drawn for canvases code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 100, 50); @@ -588,13 +608,22 @@ @assert pixel 50,25 == 0,255,0,255; expected: green + variants: &create-canvas2-variant-definition + _HtmlCanvas: + canvasType: ['HtmlCanvas'] + create_canvas2: |- + var canvas2 = document.createElement('canvas'); + canvas2.width = 100; + canvas2.height = 50; + _OffscreenCanvas: + canvasType: ['OffscreenCanvas', 'Worker'] + create_canvas2: |- + var canvas2 = new OffscreenCanvas(100, 50); - name: 2d.shadow.canvas.transparent.1 desc: Shadows are not drawn for transparent canvases code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var ctx2 = canvas2.getContext('2d'); ctx.fillStyle = '#0f0'; @@ -605,13 +634,12 @@ @assert pixel 50,25 == 0,255,0,255; expected: green + variants: *create-canvas2-variant-definition - name: 2d.shadow.canvas.transparent.2 desc: Shadows are not drawn for transparent parts of canvases code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = '#f00'; ctx2.fillRect(0, 0, 50, 50); @@ -630,15 +658,12 @@ @assert pixel 50,25 == 0,255,0,255; @assert pixel 75,25 == 0,255,0,255; expected: green + variants: *create-canvas2-variant-definition - name: 2d.shadow.canvas.alpha desc: Shadows are drawn correctly for partially-transparent canvases - images: - - transparent50.png code: | - var canvas2 = document.createElement('canvas'); - canvas2.width = 100; - canvas2.height = 50; + {{ create_canvas2 }} var ctx2 = canvas2.getContext('2d'); ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)'; ctx2.fillRect(0, 0, 100, 50); @@ -655,6 +680,7 @@ cr.set_source_rgb(0.5, 0, 0.5) cr.rectangle(0, 0, 100, 50) cr.fill() + variants: *create-canvas2-variant-definition - name: 2d.shadow.pattern.basic desc: Shadows are drawn for fill patterns @@ -662,7 +688,8 @@ images: - red.png code: | - var pattern = ctx.createPattern(document.getElementById('red.png'), 'repeat'); + {{ load_image }} + var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#0f0'; @@ -672,6 +699,7 @@ @assert pixel 50,25 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.shadow.pattern.transparent.1 desc: Shadows are not drawn for transparent fill patterns @@ -679,7 +707,8 @@ images: - transparent.png code: | - var pattern = ctx.createPattern(document.getElementById('transparent.png'), 'repeat'); + {{ load_image }} + var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); ctx.shadowColor = '#f00'; @@ -689,6 +718,7 @@ @assert pixel 50,25 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.shadow.pattern.transparent.2 desc: Shadows are not drawn for transparent parts of fill patterns @@ -696,7 +726,8 @@ images: - redtransparent.png code: | - var pattern = ctx.createPattern(document.getElementById('redtransparent.png'), 'repeat'); + {{ load_image }} + var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 50, 50); ctx.fillStyle = '#0f0'; @@ -710,6 +741,7 @@ @assert pixel 50,25 == 0,255,0,255; @assert pixel 75,25 == 0,255,0,255; expected: green + variants: *load-image-variant-definition - name: 2d.shadow.pattern.alpha desc: Shadows are drawn correctly for partially-transparent fill patterns @@ -717,7 +749,8 @@ images: - transparent50.png code: | - var pattern = ctx.createPattern(document.getElementById('transparent50.png'), 'repeat'); + {{ load_image }} + var pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.shadowOffsetY = 50; @@ -731,6 +764,7 @@ cr.set_source_rgb(0.5, 0, 0.5) cr.rectangle(0, 0, 100, 50) cr.fill() + variants: *load-image-variant-definition - name: 2d.shadow.gradient.basic desc: Shadows are drawn for gradient fills diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/the-canvas-state.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/the-canvas-state.yaml index 04520861543..04520861543 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/the-canvas-state.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/the-canvas-state.yaml diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml index 3443ad35b3c..55597b31594 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml @@ -850,37 +850,39 @@ code: | @assert ctx.fontKerning === "auto"; ctx.fontKerning = "Normal"; - @assert ctx.fontKerning === "normal"; - ctx.fontKerning = "Auto"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "normal"; @assert ctx.fontKerning === "normal"; ctx.fontKerning = "Auto"; - ctx.fontKerning = "noRmal"; @assert ctx.fontKerning === "normal"; - ctx.fontKerning = "Auto"; + ctx.fontKerning = "auto"; + ctx.fontKerning = "noRmal"; + @assert ctx.fontKerning === "auto"; + ctx.fontKerning = "auto"; ctx.fontKerning = "NoRMal"; - @assert ctx.fontKerning === "normal"; - ctx.fontKerning = "Auto"; + @assert ctx.fontKerning === "auto"; + ctx.fontKerning = "auto"; ctx.fontKerning = "NORMAL"; - @assert ctx.fontKerning === "normal"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "None"; - @assert ctx.fontKerning === "none"; - ctx.fontKerning = "Auto"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "none"; @assert ctx.fontKerning === "none"; ctx.fontKerning = "Auto"; - ctx.fontKerning = "nOne"; @assert ctx.fontKerning === "none"; - ctx.fontKerning = "Auto"; + ctx.fontKerning = "auto"; + ctx.fontKerning = "nOne"; + @assert ctx.fontKerning === "auto"; + ctx.fontKerning = "auto"; ctx.fontKerning = "nonE"; - @assert ctx.fontKerning === "none"; - ctx.fontKerning = "Auto"; + @assert ctx.fontKerning === "auto"; + ctx.fontKerning = "auto"; ctx.fontKerning = "NONE"; - @assert ctx.fontKerning === "none"; + @assert ctx.fontKerning === "auto"; - name: 2d.text.drawing.style.fontVariant.settings - desc: Testing basic functionalities of fontKerning for canvas + desc: Testing basic functionalities of fontVariant for canvas code: | // Setting fontVariantCaps with lower cases @assert ctx.fontVariantCaps === "normal"; @@ -906,29 +908,33 @@ ctx.fontVariantCaps = "titling-caps"; @assert ctx.fontVariantCaps === "titling-caps"; - // Setting fontVariantCaps with lower cases and upper cases word. + // Setting fontVariantCaps with mixed-case values is not valid ctx.fontVariantCaps = "nORmal"; + @assert ctx.fontVariantCaps === "titling-caps"; + + ctx.fontVariantCaps = "normal"; @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "smaLL-caps"; - @assert ctx.fontVariantCaps === "small-caps"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "all-small-CAPS"; - @assert ctx.fontVariantCaps === "all-small-caps"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "pEtitE-caps"; - @assert ctx.fontVariantCaps === "petite-caps"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "All-Petite-Caps"; - @assert ctx.fontVariantCaps === "all-petite-caps"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "uNIcase"; - @assert ctx.fontVariantCaps === "unicase"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "titling-CAPS"; - @assert ctx.fontVariantCaps === "titling-caps"; + @assert ctx.fontVariantCaps === "normal"; // Setting fontVariantCaps with non-existing font variant. + ctx.fontVariantCaps = "titling-caps"; ctx.fontVariantCaps = "abcd"; @assert ctx.fontVariantCaps === "titling-caps"; diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml index 407e3462109..0eba21943c0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/text-styles.yaml @@ -14,7 +14,12 @@ - name: 2d.text.font.parse.complex code: | ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif'; - @assert ctx.font === 'italic small-caps 12px "Unknown Font", sans-serif'; @moz-todo + @assert ['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font); + +- name: 2d.text.font.parse.complex2 + code: | + ctx.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif'; + @assert ctx.font === 'italic small-caps 12px "Unknown Font #2", sans-serif'; - name: 2d.text.font.parse.family code: | @@ -296,7 +301,7 @@ ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'ideographic'; - ctx.fillText('CC', 0, 31.25); + ctx.fillText('CC', 0, 81.25); @assert pixel 5,5 ==~ 0,255,0,255; @assert pixel 95,5 ==~ 0,255,0,255; @assert pixel 25,25 ==~ 0,255,0,255; @@ -317,7 +322,7 @@ ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'hanging'; - ctx.fillText('CC', 0, 12.5); + ctx.fillText('CC', 0, -30); @assert pixel 5,5 ==~ 0,255,0,255; @moz-todo @assert pixel 95,5 ==~ 0,255,0,255; @moz-todo @assert pixel 25,25 ==~ 0,255,0,255; @@ -328,7 +333,7 @@ expected: green - name: 2d.text.draw.space.collapse.space - desc: Space characters are converted to U+0020, and collapsed (per CSS) + desc: Space characters are converted to U+0020, and are NOT collapsed fonts: - CanvasTest code: | @@ -338,14 +343,14 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E EE', -100, 37.5); - @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo + ctx.fillText('E EE', -150, 37.5); + @assert pixel 25,25 ==~ 0,255,0,255; @assert pixel 75,25 ==~ 0,255,0,255; }), 500); expected: green - name: 2d.text.draw.space.collapse.other - desc: Space characters are converted to U+0020, and collapsed (per CSS) + desc: Space characters are converted to U+0020, and are NOT collapsed fonts: - CanvasTest code: | @@ -355,14 +360,14 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5); - @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo - @assert pixel 75,25 ==~ 0,255,0,255; @moz-todo + ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5); + @assert pixel 25,25 ==~ 0,255,0,255; + @assert pixel 75,25 ==~ 0,255,0,255; }), 500); expected: green - name: 2d.text.draw.space.collapse.start - desc: Space characters at the start of a line are collapsed (per CSS) + desc: Space characters at the start of a line are NOT collapsed fonts: - CanvasTest code: | @@ -372,14 +377,14 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText(' EE', 0, 37.5); - @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo + ctx.fillText(' EE', -50, 37.5); + @assert pixel 25,25 ==~ 0,255,0,255; @assert pixel 75,25 ==~ 0,255,0,255; }), 500); expected: green - name: 2d.text.draw.space.collapse.end - desc: Space characters at the end of a line are collapsed (per CSS) + desc: Space characters at the end of a line are NOT collapsed fonts: - CanvasTest code: | @@ -390,15 +395,15 @@ ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textAlign = 'right'; - ctx.fillText('EE ', 100, 37.5); + ctx.fillText('EE ', 150, 37.5); @assert pixel 25,25 ==~ 0,255,0,255; - @assert pixel 75,25 ==~ 0,255,0,255; @moz-todo + @assert pixel 75,25 ==~ 0,255,0,255; }), 500); expected: green - name: 2d.text.measure.width.space - desc: Space characters are converted to U+0020 and collapsed (per CSS) + desc: Space characters are converted to U+0020 and NOT collapsed fonts: - CanvasTest code: | @@ -410,11 +415,11 @@ ctx.font = '50px CanvasTest'; @assert ctx.measureText('A B').width === 150; @assert ctx.measureText('A B').width === 200; - @assert ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width === 150; @moz-todo + @assert ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width === 650; @assert ctx.measureText('A \x0b B').width >= 200; - @assert ctx.measureText(' AB').width === 100; @moz-todo - @assert ctx.measureText('AB ').width === 100; @moz-todo + @assert ctx.measureText(' AB').width === 150; + @assert ctx.measureText('AB ').width === 150; }), 500); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/fill-and-stroke-styles.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/fill-and-stroke-styles.yaml deleted file mode 100644 index 5f794d61e6f..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/fill-and-stroke-styles.yaml +++ /dev/null @@ -1,1586 +0,0 @@ -- name: 2d.fillStyle.invalidstring - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillStyle = 'invalid'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.fillStyle.invalidtype - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillStyle = null; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.fillStyle.get.solid - code: | - ctx.fillStyle = '#fa0'; - @assert ctx.fillStyle === '#ffaa00'; - t.done(); - -- name: 2d.fillStyle.get.semitransparent - code: | - ctx.fillStyle = 'rgba(255,255,255,0.45)'; - @assert ctx.fillStyle =~ /^rgba\(255, 255, 255, 0\.4\d+\)$/; - t.done(); - -- name: 2d.fillStyle.get.halftransparent - code: | - ctx.fillStyle = 'rgba(255,255,255,0.5)'; - @assert ctx.fillStyle === 'rgba(255, 255, 255, 0.5)'; - t.done(); - -- name: 2d.fillStyle.get.transparent - code: | - ctx.fillStyle = 'rgba(0,0,0,0)'; - @assert ctx.fillStyle === 'rgba(0, 0, 0, 0)'; - t.done(); - -- name: 2d.fillStyle.default - code: | - @assert ctx.fillStyle === '#000000'; - t.done(); - -- name: 2d.strokeStyle.default - code: | - @assert ctx.strokeStyle === '#000000'; - t.done(); - -- name: 2d.fillStyle.toStringFunctionCallback - desc: Passing a function in to ctx.fillStyle or ctx.strokeStyle with a toString callback works as specified - code: | - ctx.fillStyle = { toString: function() { return "#008000"; } }; - @assert ctx.fillStyle === "#008000"; - ctx.fillStyle = {}; - @assert ctx.fillStyle === "#008000"; - ctx.fillStyle = 800000; - @assert ctx.fillStyle === "#008000"; - @assert throws TypeError ctx.fillStyle = { toString: function() { throw new TypeError; } }; - ctx.strokeStyle = { toString: function() { return "#008000"; } }; - @assert ctx.strokeStyle === "#008000"; - ctx.strokeStyle = {}; - @assert ctx.strokeStyle === "#008000"; - ctx.strokeStyle = 800000; - @assert ctx.strokeStyle === "#008000"; - @assert throws TypeError ctx.strokeStyle = { toString: function() { throw new TypeError; } }; - t.done(); - -- name: 2d.gradient.interpolate.solid - code: | - var g = ctx.createLinearGradient(0, 0, 100, 0); - g.addColorStop(0, '#0f0'); - g.addColorStop(1, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.interpolate.color - code: | - var g = ctx.createLinearGradient(0, 0, 100, 0); - g.addColorStop(0, '#ff0'); - g.addColorStop(1, '#00f'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 25,25 ==~ 191,191,63,255 +/- 3; - @assert pixel 50,25 ==~ 127,127,127,255 +/- 3; - @assert pixel 75,25 ==~ 63,63,191,255 +/- 3; - t.done(); - -- name: 2d.gradient.interpolate.alpha - code: | - ctx.fillStyle = '#ff0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createLinearGradient(0, 0, 100, 0); - g.addColorStop(0, 'rgba(0,0,255, 0)'); - g.addColorStop(1, 'rgba(0,0,255, 1)'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 25,25 ==~ 191,191,63,255 +/- 3; - @assert pixel 50,25 ==~ 127,127,127,255 +/- 3; - @assert pixel 75,25 ==~ 63,63,191,255 +/- 3; - t.done(); - -- name: 2d.gradient.interpolate.coloralpha - code: | - var g = ctx.createLinearGradient(0, 0, 100, 0); - g.addColorStop(0, 'rgba(255,255,0, 0)'); - g.addColorStop(1, 'rgba(0,0,255, 1)'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 25,25 ==~ 190,190,65,65 +/- 3; - @assert pixel 50,25 ==~ 126,126,128,128 +/- 3; - @assert pixel 75,25 ==~ 62,62,192,192 +/- 3; - t.done(); - -- name: 2d.gradient.interpolate.outside - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createLinearGradient(25, 0, 75, 0); - g.addColorStop(0.4, '#0f0'); - g.addColorStop(0.6, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 20,25 ==~ 0,255,0,255; - @assert pixel 50,25 ==~ 0,255,0,255; - @assert pixel 80,25 ==~ 0,255,0,255; - t.done(); - -- name: 2d.gradient.interpolate.zerosize.fill - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.rect(0, 0, 100, 50); - ctx.fill(); - @assert pixel 40,20 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.interpolate.zerosize.stroke - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.strokeStyle = g; - ctx.rect(20, 20, 60, 10); - ctx.stroke(); - @assert pixel 19,19 == 0,255,0,255; - @assert pixel 20,19 == 0,255,0,255; - @assert pixel 21,19 == 0,255,0,255; - @assert pixel 19,20 == 0,255,0,255; - @assert pixel 20,20 == 0,255,0,255; - @assert pixel 21,20 == 0,255,0,255; - @assert pixel 19,21 == 0,255,0,255; - @assert pixel 20,21 == 0,255,0,255; - @assert pixel 21,21 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.interpolate.zerosize.fillRect - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 40,20 == 0,255,0,255; @moz-todo - t.done(); - -- name: 2d.gradient.interpolate.zerosize.strokeRect - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction) - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.strokeStyle = g; - ctx.strokeRect(20, 20, 60, 10); - @assert pixel 19,19 == 0,255,0,255; - @assert pixel 20,19 == 0,255,0,255; - @assert pixel 21,19 == 0,255,0,255; - @assert pixel 19,20 == 0,255,0,255; - @assert pixel 20,20 == 0,255,0,255; - @assert pixel 21,20 == 0,255,0,255; - @assert pixel 19,21 == 0,255,0,255; - @assert pixel 20,21 == 0,255,0,255; - @assert pixel 21,21 == 0,255,0,255; - t.done(); - - -- name: 2d.gradient.interpolate.vertical - code: | - var g = ctx.createLinearGradient(0, 0, 0, 50); - g.addColorStop(0, '#ff0'); - g.addColorStop(1, '#00f'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,12 ==~ 191,191,63,255 +/- 10; - @assert pixel 50,25 ==~ 127,127,127,255 +/- 5; - @assert pixel 50,37 ==~ 63,63,191,255 +/- 10; - t.done(); - -- name: 2d.gradient.interpolate.multiple - code: | - canvas.width = 200; - var g = ctx.createLinearGradient(0, 0, 200, 0); - g.addColorStop(0, '#ff0'); - g.addColorStop(0.5, '#0ff'); - g.addColorStop(1, '#f0f'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 200, 50); - @assert pixel 50,25 ==~ 127,255,127,255 +/- 3; - @assert pixel 100,25 ==~ 0,255,255,255 +/- 3; - @assert pixel 150,25 ==~ 127,127,255,255 +/- 3; - t.done(); - -- name: 2d.gradient.interpolate.overlap - code: | - canvas.width = 200; - var g = ctx.createLinearGradient(0, 0, 200, 0); - g.addColorStop(0, '#f00'); - g.addColorStop(0, '#ff0'); - g.addColorStop(0.25, '#00f'); - g.addColorStop(0.25, '#0f0'); - g.addColorStop(0.25, '#0f0'); - g.addColorStop(0.25, '#0f0'); - g.addColorStop(0.25, '#ff0'); - g.addColorStop(0.5, '#00f'); - g.addColorStop(0.5, '#0f0'); - g.addColorStop(0.75, '#00f'); - g.addColorStop(0.75, '#f00'); - g.addColorStop(0.75, '#ff0'); - g.addColorStop(0.5, '#0f0'); - g.addColorStop(0.5, '#0f0'); - g.addColorStop(0.5, '#ff0'); - g.addColorStop(1, '#00f'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 200, 50); - @assert pixel 49,25 ==~ 0,0,255,255 +/- 16; - @assert pixel 51,25 ==~ 255,255,0,255 +/- 16; - @assert pixel 99,25 ==~ 0,0,255,255 +/- 16; - @assert pixel 101,25 ==~ 255,255,0,255 +/- 16; - @assert pixel 149,25 ==~ 0,0,255,255 +/- 16; - @assert pixel 151,25 ==~ 255,255,0,255 +/- 16; - t.done(); - -- name: 2d.gradient.interpolate.overlap2 - code: | - var g = ctx.createLinearGradient(0, 0, 100, 0); - var ps = [ 0, 1/10, 1/4, 1/3, 1/2, 3/4, 1 ]; - for (var p = 0; p < ps.length; ++p) - { - g.addColorStop(ps[p], '#0f0'); - for (var i = 0; i < 15; ++i) - g.addColorStop(ps[p], '#f00'); - g.addColorStop(ps[p], '#0f0'); - } - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 30,25 == 0,255,0,255; - @assert pixel 40,25 == 0,255,0,255; - @assert pixel 60,25 == 0,255,0,255; - @assert pixel 80,25 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.empty - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createLinearGradient(0, 0, 0, 50); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 ==~ 0,255,0,255; - t.done(); - -- name: 2d.gradient.object.update - code: | - var g = ctx.createLinearGradient(-100, 0, 200, 0); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - g.addColorStop(0.1, '#0f0'); - g.addColorStop(0.9, '#0f0'); - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 ==~ 0,255,0,255; - t.done(); - -- name: 2d.gradient.object.compare - code: | - var g1 = ctx.createLinearGradient(0, 0, 100, 0); - var g2 = ctx.createLinearGradient(0, 0, 100, 0); - @assert g1 !== g2; - ctx.fillStyle = g1; - @assert ctx.fillStyle === g1; - t.done(); - -- name: 2d.gradient.object.crosscanvas - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var g = offscreenCanvas2.getContext('2d').createLinearGradient(0, 0, 100, 0); - g.addColorStop(0, '#0f0'); - g.addColorStop(1, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 ==~ 0,255,0,255; - t.done(); - -- name: 2d.gradient.object.invalidoffset - code: | - var g = ctx.createLinearGradient(0, 0, 100, 0); - @assert throws INDEX_SIZE_ERR g.addColorStop(-1, '#000'); - @assert throws INDEX_SIZE_ERR g.addColorStop(2, '#000'); - @assert throws TypeError g.addColorStop(Infinity, '#000'); - @assert throws TypeError g.addColorStop(-Infinity, '#000'); - @assert throws TypeError g.addColorStop(NaN, '#000'); - t.done(); - -- name: 2d.gradient.object.invalidcolor - code: | - var g = ctx.createLinearGradient(0, 0, 100, 0); - @assert throws SYNTAX_ERR g.addColorStop(0, ""); - @assert throws SYNTAX_ERR g.addColorStop(0, 'null'); - @assert throws SYNTAX_ERR g.addColorStop(0, 'undefined'); - @assert throws SYNTAX_ERR g.addColorStop(0, null); - @assert throws SYNTAX_ERR g.addColorStop(0, undefined); - t.done(); - -- name: 2d.gradient.linear.nonfinite - desc: createLinearGradient() throws TypeError if arguments are not finite - code: | - @nonfinite @assert throws TypeError ctx.createLinearGradient(<0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <1 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>); - t.done(); - -- name: 2d.gradient.linear.transform.1 - desc: Linear gradient coordinates are relative to the coordinate space at the time - of filling - code: | - var g = ctx.createLinearGradient(0, 0, 200, 0); - g.addColorStop(0, '#f00'); - g.addColorStop(0.25, '#0f0'); - g.addColorStop(0.75, '#0f0'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.translate(-50, 0); - ctx.fillRect(50, 0, 100, 50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.linear.transform.2 - desc: Linear gradient coordinates are relative to the coordinate space at the time - of filling - code: | - ctx.translate(100, 0); - var g = ctx.createLinearGradient(0, 0, 200, 0); - g.addColorStop(0, '#f00'); - g.addColorStop(0.25, '#0f0'); - g.addColorStop(0.75, '#0f0'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.translate(-150, 0); - ctx.fillRect(50, 0, 100, 50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.linear.transform.3 - desc: Linear gradient transforms do not experience broken caching effects - code: | - var g = ctx.createLinearGradient(0, 0, 200, 0); - g.addColorStop(0, '#f00'); - g.addColorStop(0.25, '#0f0'); - g.addColorStop(0.75, '#0f0'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(-50, 0); - ctx.fillRect(50, 0, 100, 50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.negative - desc: createRadialGradient() throws INDEX_SIZE_ERR if either radius is negative - code: | - @assert throws INDEX_SIZE_ERR ctx.createRadialGradient(0, 0, -0.1, 0, 0, 1); - @assert throws INDEX_SIZE_ERR ctx.createRadialGradient(0, 0, 1, 0, 0, -0.1); - @assert throws INDEX_SIZE_ERR ctx.createRadialGradient(0, 0, -0.1, 0, 0, -0.1); - t.done(); -- name: 2d.gradient.radial.nonfinite - - desc: createRadialGradient() throws TypeError if arguments are not finite - code: | - @nonfinite @assert throws TypeError ctx.createRadialGradient(<0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <1 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <1 Infinity -Infinity NaN>); - t.done(); - -- name: 2d.gradient.radial.inside1 - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200); - g.addColorStop(0, '#0f0'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.inside2 - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.inside3 - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100); - g.addColorStop(0, '#f00'); - g.addColorStop(0.993, '#f00'); - g.addColorStop(1, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.outside1 - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.outside2 - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10); - g.addColorStop(0, '#0f0'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.outside3 - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10); - g.addColorStop(0, '#0f0'); - g.addColorStop(0.001, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.touch1 - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; @moz-todo - @assert pixel 50,1 == 0,255,0,255; @moz-todo - @assert pixel 98,1 == 0,255,0,255; @moz-todo - @assert pixel 1,25 == 0,255,0,255; @moz-todo - @assert pixel 50,25 == 0,255,0,255; @moz-todo - @assert pixel 98,25 == 0,255,0,255; @moz-todo - @assert pixel 1,48 == 0,255,0,255; @moz-todo - @assert pixel 50,48 == 0,255,0,255; @moz-todo - @assert pixel 98,48 == 0,255,0,255; @moz-todo - t.done(); - -- name: 2d.gradient.radial.touch2 - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150); - g.addColorStop(0, '#f00'); - g.addColorStop(0.01, '#0f0'); - g.addColorStop(0.99, '#0f0'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.touch3 - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; @moz-todo - @assert pixel 50,1 == 0,255,0,255; @moz-todo - @assert pixel 98,1 == 0,255,0,255; @moz-todo - @assert pixel 1,25 == 0,255,0,255; @moz-todo - @assert pixel 50,25 == 0,255,0,255; @moz-todo - @assert pixel 98,25 == 0,255,0,255; @moz-todo - @assert pixel 1,48 == 0,255,0,255; @moz-todo - @assert pixel 50,48 == 0,255,0,255; @moz-todo - @assert pixel 98,48 == 0,255,0,255; @moz-todo - t.done(); - -- name: 2d.gradient.radial.equal - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; @moz-todo - @assert pixel 50,1 == 0,255,0,255; @moz-todo - @assert pixel 98,1 == 0,255,0,255; @moz-todo - @assert pixel 1,25 == 0,255,0,255; @moz-todo - @assert pixel 50,25 == 0,255,0,255; @moz-todo - @assert pixel 98,25 == 0,255,0,255; @moz-todo - @assert pixel 1,48 == 0,255,0,255; @moz-todo - @assert pixel 50,48 == 0,255,0,255; @moz-todo - @assert pixel 98,48 == 0,255,0,255; @moz-todo - t.done(); - -- name: 2d.gradient.radial.cone.behind - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; @moz-todo - @assert pixel 50,1 == 0,255,0,255; @moz-todo - @assert pixel 98,1 == 0,255,0,255; @moz-todo - @assert pixel 1,25 == 0,255,0,255; @moz-todo - @assert pixel 50,25 == 0,255,0,255; @moz-todo - @assert pixel 98,25 == 0,255,0,255; @moz-todo - @assert pixel 1,48 == 0,255,0,255; @moz-todo - @assert pixel 50,48 == 0,255,0,255; @moz-todo - @assert pixel 98,48 == 0,255,0,255; @moz-todo - t.done(); - -- name: 2d.gradient.radial.cone.front - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.cone.bottom - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101); - g.addColorStop(0, '#0f0'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.cone.top - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.cone.beside - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; @moz-todo - @assert pixel 50,1 == 0,255,0,255; @moz-todo - @assert pixel 98,1 == 0,255,0,255; @moz-todo - @assert pixel 1,25 == 0,255,0,255; @moz-todo - @assert pixel 50,25 == 0,255,0,255; @moz-todo - @assert pixel 98,25 == 0,255,0,255; @moz-todo - @assert pixel 1,48 == 0,255,0,255; @moz-todo - @assert pixel 50,48 == 0,255,0,255; @moz-todo - @assert pixel 98,48 == 0,255,0,255; @moz-todo - t.done(); - -- name: 2d.gradient.radial.cone.cylinder - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100); - g.addColorStop(0, '#0f0'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.cone.shape1 - code: | - var tol = 1; // tolerance to avoid antialiasing artifacts - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.beginPath(); - ctx.moveTo(30+tol, 40); - ctx.lineTo(110, -20+tol); - ctx.lineTo(110, 100-tol); - ctx.fill(); - var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4); - g.addColorStop(0, '#0f0'); - g.addColorStop(1, '#0f0'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.cone.shape2 - code: | - var tol = 1; // tolerance to avoid antialiasing artifacts - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4); - g.addColorStop(0, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.beginPath(); - ctx.moveTo(30-tol, 40); - ctx.lineTo(110, -20-tol); - ctx.lineTo(110, 100+tol); - ctx.fill(); - @assert pixel 1,1 == 0,255,0,255; @moz-todo - @assert pixel 50,1 == 0,255,0,255; @moz-todo - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; @moz-todo - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; @moz-todo - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.transform.1 - desc: Radial gradient coordinates are relative to the coordinate space at the time - of filling - code: | - var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2); - g.addColorStop(0, '#0f0'); - g.addColorStop(0.5, '#0f0'); - g.addColorStop(0.51, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.translate(50, 25); - ctx.scale(10, 10); - ctx.fillRect(-5, -2.5, 10, 5); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.transform.2 - desc: Radial gradient coordinates are relative to the coordinate space at the time - of filling - code: | - ctx.translate(100, 0); - var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2); - g.addColorStop(0, '#0f0'); - g.addColorStop(0.5, '#0f0'); - g.addColorStop(0.51, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.translate(-50, 25); - ctx.scale(10, 10); - ctx.fillRect(-5, -2.5, 10, 5); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.radial.transform.3 - desc: Radial gradient transforms do not experience broken caching effects - code: | - var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2); - g.addColorStop(0, '#0f0'); - g.addColorStop(0.5, '#0f0'); - g.addColorStop(0.51, '#f00'); - g.addColorStop(1, '#f00'); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(50, 25); - ctx.scale(10, 10); - ctx.fillRect(-5, -2.5, 10, 5); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.gradient.conic.positive.rotation - desc: Conic gradient with positive rotation - code: | - const g = ctx.createConicGradient(3*Math.PI/2, 50, 25); - // It's red in the upper right region and green on the lower left region - g.addColorStop(0, "#f00"); - g.addColorStop(0.25, "#0f0"); - g.addColorStop(0.50, "#0f0"); - g.addColorStop(0.75, "#f00"); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 25,15 ==~ 255,0,0,255 +/- 3; - @assert pixel 75,40 ==~ 0,255,0,255 +/- 3; - t.done(); - -- name: 2d.gradient.conic.negative.rotation - desc: Conic gradient with negative rotation - code: | - const g = ctx.createConicGradient(-Math.PI/2, 50, 25); - // It's red in the upper right region and green on the lower left region - g.addColorStop(0, "#f00"); - g.addColorStop(0.25, "#0f0"); - g.addColorStop(0.50, "#0f0"); - g.addColorStop(0.75, "#f00"); - ctx.fillStyle = g; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 25,15 ==~ 255,0,0,255 +/- 3; - @assert pixel 75,40 ==~ 0,255,0,255 +/- 3; - t.done(); - -- name: 2d.gradient.conic.invalid.inputs - desc: Conic gradient function with invalid inputs - code: | - @nonfinite @assert throws TypeError ctx.createConicGradient(<0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <1 Infinity -Infinity NaN>); - - const g = ctx.createConicGradient(0, 0, 25); - @nonfinite @assert throws TypeError g.addColorStop(<Infinity -Infinity NaN>, <'#f00'>); - @nonfinite @assert throws SYNTAX_ERR g.addColorStop(<0>, <Infinity -Infinity NaN>); - t.done(); - -- name: 2d.pattern.basic.image - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.basic.canvas - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); - ctx2.fillStyle = '#0f0'; - ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.pattern.basic.zerocanvas - code: | - canvas.width = 0; - canvas.height = 10; - @assert canvas.width === 0; - @assert canvas.height === 10; - @assert throws INVALID_STATE_ERR ctx.createPattern(canvas, 'repeat'); - canvas.width = 10; - canvas.height = 0; - @assert canvas.width === 10; - @assert canvas.height === 0; - @assert throws INVALID_STATE_ERR ctx.createPattern(canvas, 'repeat'); - canvas.width = 0; - canvas.height = 0; - @assert canvas.width === 0; - @assert canvas.height === 0; - @assert throws INVALID_STATE_ERR ctx.createPattern(canvas, 'repeat'); - t.done(); - -- name: 2d.pattern.basic.nocontext - code: | - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.pattern.image.undefined - code: | - @assert throws TypeError ctx.createPattern(undefined, 'repeat'); - t.done(); - -- name: 2d.pattern.image.null - code: | - @assert throws TypeError ctx.createPattern(null, 'repeat'); - t.done(); - -- name: 2d.pattern.image.string - code: | - @assert throws TypeError ctx.createPattern('../images/red.png', 'repeat'); - t.done(); - -- name: 2d.pattern.repeat.empty - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-1x1.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, ""); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 200, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.repeat.null - code: | - @assert ctx.createPattern(canvas, null) != null; - t.done(); - -- name: 2d.pattern.repeat.undefined - code: | - @assert throws SYNTAX_ERR ctx.createPattern(canvas, undefined); - t.done(); - -- name: 2d.pattern.repeat.unrecognised - code: | - @assert throws SYNTAX_ERR ctx.createPattern(canvas, "invalid"); - t.done(); - -- name: 2d.pattern.repeat.unrecognisednull - code: | - @assert throws SYNTAX_ERR ctx.createPattern(canvas, "null"); - t.done(); - -- name: 2d.pattern.repeat.case - code: | - @assert throws SYNTAX_ERR ctx.createPattern(canvas, "Repeat"); - t.done(); - -- name: 2d.pattern.repeat.nullsuffix - code: | - @assert throws SYNTAX_ERR ctx.createPattern(canvas, "repeat\0"); - t.done(); - -- name: 2d.pattern.modify.canvas1 - code: | - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); - ctx2.fillStyle = '#0f0'; - ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); - ctx2.fillStyle = '#f00'; - ctx2.fillRect(0, 0, 100, 50); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.pattern.modify.canvas2 - code: | - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); - ctx2.fillStyle = '#0f0'; - ctx2.fillRect(0, 0, 100, 50); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx2.fillStyle = '#f00'; - ctx2.fillRect(0, 0, 100, 50); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.pattern.crosscanvas - code: | - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var pattern = offscreenCanvas2.getContext('2d').createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.norepeat.basic - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.norepeat.outside - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - ctx.fillRect(-100, 0, 100, 50); - ctx.fillRect(0, 50, 100, 50); - ctx.fillRect(100, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.norepeat.coord1 - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(50, 0, 50, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 0); - ctx.fillRect(-50, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.norepeat.coord2 - code: | - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(50, 0, 50, 50); - ctx.fillStyle = pattern; - ctx.translate(50, 0); - ctx.fillRect(-50, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.norepeat.coord3 - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 25); - ctx.fillRect(-50, -25, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 25); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeat.basic - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeat.outside - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(50, 25); - ctx.fillRect(-50, -25, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeat.coord1 - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rgrg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.translate(-128, -78); - ctx.fillRect(128, 78, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeat.coord2 - code: | - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/grgr-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeat.coord3 - code: | - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rgrg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(-128, -78); - ctx.fillRect(128, 78, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeatx.basic - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 16); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeatx.outside - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 16); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeatx.coord1 - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-x'); - ctx.fillStyle = pattern; - ctx.translate(0, 16); - ctx.fillRect(0, -16, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 16); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeaty.basic - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 16, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/green-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeaty.outside - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 16, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.repeaty.coord1 - images: - - red-16x16.png - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red-16x16.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat-y'); - ctx.fillStyle = pattern; - ctx.translate(48, 0); - ctx.fillRect(-48, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 16, 50); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 50,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 50,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.orientation.image - desc: Image patterns do not get flipped when painted - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/rrgg-256x256.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.save(); - ctx.translate(0, -103); - ctx.fillRect(0, 103, 100, 50); - ctx.restore(); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 25); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.pattern.paint.orientation.canvas - desc: Canvas patterns do not get flipped when painted - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); - ctx2.fillStyle = '#f00'; - ctx2.fillRect(0, 0, 100, 25); - ctx2.fillStyle = '#0f0'; - ctx2.fillRect(0, 25, 100, 25); - var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat'); - ctx.fillStyle = pattern; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 25); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 98,1 == 0,255,0,255; - @assert pixel 1,48 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/shadows.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/shadows.yaml deleted file mode 100644 index ec1bdd101e7..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/shadows.yaml +++ /dev/null @@ -1,947 +0,0 @@ -- name: 2d.shadow.attributes.shadowBlur.initial - code: | - @assert ctx.shadowBlur === 0; - t.done(); - -- name: 2d.shadow.attributes.shadowBlur.valid - code: | - ctx.shadowBlur = 1; - @assert ctx.shadowBlur === 1; - ctx.shadowBlur = 0.5; - @assert ctx.shadowBlur === 0.5; - ctx.shadowBlur = 1e6; - @assert ctx.shadowBlur === 1e6; - ctx.shadowBlur = 0; - @assert ctx.shadowBlur === 0; - t.done(); - -- name: 2d.shadow.attributes.shadowBlur.invalid - code: | - ctx.shadowBlur = 1; - ctx.shadowBlur = -2; - @assert ctx.shadowBlur === 1; - ctx.shadowBlur = 1; - ctx.shadowBlur = Infinity; - @assert ctx.shadowBlur === 1; - ctx.shadowBlur = 1; - ctx.shadowBlur = -Infinity; - @assert ctx.shadowBlur === 1; - ctx.shadowBlur = 1; - ctx.shadowBlur = NaN; - @assert ctx.shadowBlur === 1; - t.done(); - -- name: 2d.shadow.attributes.shadowOffset.initial - code: | - @assert ctx.shadowOffsetX === 0; - @assert ctx.shadowOffsetY === 0; - t.done(); - -- name: 2d.shadow.attributes.shadowOffset.valid - code: | - ctx.shadowOffsetX = 1; - ctx.shadowOffsetY = 2; - @assert ctx.shadowOffsetX === 1; - @assert ctx.shadowOffsetY === 2; - ctx.shadowOffsetX = 0.5; - ctx.shadowOffsetY = 0.25; - @assert ctx.shadowOffsetX === 0.5; - @assert ctx.shadowOffsetY === 0.25; - ctx.shadowOffsetX = -0.5; - ctx.shadowOffsetY = -0.25; - @assert ctx.shadowOffsetX === -0.5; - @assert ctx.shadowOffsetY === -0.25; - ctx.shadowOffsetX = 0; - ctx.shadowOffsetY = 0; - @assert ctx.shadowOffsetX === 0; - @assert ctx.shadowOffsetY === 0; - ctx.shadowOffsetX = 1e6; - ctx.shadowOffsetY = 1e6; - @assert ctx.shadowOffsetX === 1e6; - @assert ctx.shadowOffsetY === 1e6; - t.done(); - -- name: 2d.shadow.attributes.shadowOffset.invalid - code: | - ctx.shadowOffsetX = 1; - ctx.shadowOffsetY = 2; - ctx.shadowOffsetX = Infinity; - ctx.shadowOffsetY = Infinity; - @assert ctx.shadowOffsetX === 1; - @assert ctx.shadowOffsetY === 2; - ctx.shadowOffsetX = 1; - ctx.shadowOffsetY = 2; - ctx.shadowOffsetX = -Infinity; - ctx.shadowOffsetY = -Infinity; - @assert ctx.shadowOffsetX === 1; - @assert ctx.shadowOffsetY === 2; - ctx.shadowOffsetX = 1; - ctx.shadowOffsetY = 2; - ctx.shadowOffsetX = NaN; - ctx.shadowOffsetY = NaN; - @assert ctx.shadowOffsetX === 1; - @assert ctx.shadowOffsetY === 2; - t.done(); - -- name: 2d.shadow.attributes.shadowColor.initial - code: | - @assert ctx.shadowColor === 'rgba(0, 0, 0, 0)'; - t.done(); - -- name: 2d.shadow.attributes.shadowColor.valid - code: | - ctx.shadowColor = 'lime'; - @assert ctx.shadowColor === '#00ff00'; - ctx.shadowColor = 'RGBA(0,255, 0,0)'; - @assert ctx.shadowColor === 'rgba(0, 255, 0, 0)'; - t.done(); - -- name: 2d.shadow.attributes.shadowColor.invalid - code: | - ctx.shadowColor = '#00ff00'; - ctx.shadowColor = 'bogus'; - @assert ctx.shadowColor === '#00ff00'; - ctx.shadowColor = '#00ff00'; - ctx.shadowColor = 'red bogus'; - @assert ctx.shadowColor === '#00ff00'; - ctx.shadowColor = '#00ff00'; - ctx.shadowColor = ctx; - @assert ctx.shadowColor === '#00ff00'; - ctx.shadowColor = '#00ff00'; - ctx.shadowColor = undefined; - @assert ctx.shadowColor === '#00ff00'; - t.done(); - -- name: 2d.shadow.enable.off.1 - desc: Shadows are not drawn when only shadowColor is set - code: | - ctx.shadowColor = '#f00'; - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.enable.off.2 - desc: Shadows are not drawn when only shadowColor is set - code: | - ctx.globalCompositeOperation = 'destination-atop'; - ctx.shadowColor = '#f00'; - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.enable.blur - desc: Shadows are drawn if shadowBlur is set - code: | - ctx.globalCompositeOperation = 'destination-atop'; - ctx.shadowColor = '#0f0'; - ctx.shadowBlur = 0.1; - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.enable.x - desc: Shadows are drawn if shadowOffsetX is set - code: | - ctx.globalCompositeOperation = 'destination-atop'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetX = 0.1; - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.enable.y - desc: Shadows are drawn if shadowOffsetY is set - code: | - ctx.globalCompositeOperation = 'destination-atop'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 0.1; - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.offset.positiveX - desc: Shadows can be offset with positive x - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetX = 50; - ctx.fillRect(0, 0, 50, 50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.offset.negativeX - desc: Shadows can be offset with negative x - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetX = -50; - ctx.fillRect(50, 0, 50, 50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.offset.positiveY - desc: Shadows can be offset with positive y - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 25; - ctx.fillRect(0, 0, 100, 25); - @assert pixel 50,12 == 0,255,0,255; - @assert pixel 50,37 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.offset.negativeY - desc: Shadows can be offset with negative y - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#0f0'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = -25; - ctx.fillRect(0, 25, 100, 25); - @assert pixel 50,12 == 0,255,0,255; - @assert pixel 50,37 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.outside - desc: Shadows of shapes outside the visible area can be offset onto the visible - area - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetX = 100; - ctx.fillRect(-100, 0, 25, 50); - ctx.shadowOffsetX = -100; - ctx.fillRect(175, 0, 25, 50); - ctx.shadowOffsetX = 0; - ctx.shadowOffsetY = 100; - ctx.fillRect(25, -100, 50, 25); - ctx.shadowOffsetY = -100; - ctx.fillRect(25, 125, 50, 25); - @assert pixel 12,25 == 0,255,0,255; - @assert pixel 87,25 == 0,255,0,255; - @assert pixel 50,12 == 0,255,0,255; - @assert pixel 50,37 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.clip.1 - desc: Shadows of clipped shapes are still drawn within the clipping region - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(50, 0, 50, 50); - ctx.save(); - ctx.beginPath(); - ctx.rect(50, 0, 50, 50); - ctx.clip(); - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetX = 50; - ctx.fillRect(0, 0, 50, 50); - ctx.restore(); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.clip.2 - desc: Shadows are not drawn outside the clipping region - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(50, 0, 50, 50); - ctx.save(); - ctx.beginPath(); - ctx.rect(0, 0, 50, 50); - ctx.clip(); - ctx.shadowColor = '#f00'; - ctx.shadowOffsetX = 50; - ctx.fillRect(0, 0, 50, 50); - ctx.restore(); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.clip.3 - desc: Shadows of clipped shapes are still drawn within the clipping region - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(50, 0, 50, 50); - ctx.save(); - ctx.beginPath(); - ctx.rect(0, 0, 50, 50); - ctx.clip(); - ctx.fillStyle = '#f00'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetX = 50; - ctx.fillRect(-50, 0, 50, 50); - ctx.restore(); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.stroke.basic - desc: Shadows are drawn for strokes - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.strokeStyle = '#f00'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 50; - ctx.beginPath(); - ctx.lineWidth = 50; - ctx.moveTo(0, -25); - ctx.lineTo(100, -25); - ctx.stroke(); - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.stroke.cap.1 - desc: Shadows are not drawn for areas outside stroke caps - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.strokeStyle = '#f00'; - ctx.shadowColor = '#f00'; - ctx.shadowOffsetY = 50; - ctx.beginPath(); - ctx.lineWidth = 50; - ctx.lineCap = 'butt'; - ctx.moveTo(-50, -25); - ctx.lineTo(0, -25); - ctx.moveTo(100, -25); - ctx.lineTo(150, -25); - ctx.stroke(); - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.stroke.cap.2 - desc: Shadows are drawn for stroke caps - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.strokeStyle = '#f00'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 50; - ctx.beginPath(); - ctx.lineWidth = 50; - ctx.lineCap = 'square'; - ctx.moveTo(25, -25); - ctx.lineTo(75, -25); - ctx.stroke(); - @assert pixel 1,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.stroke.join.1 - desc: Shadows are not drawn for areas outside stroke joins - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.strokeStyle = '#f00'; - ctx.shadowColor = '#f00'; - ctx.shadowOffsetX = 100; - ctx.lineWidth = 200; - ctx.lineJoin = 'bevel'; - ctx.beginPath(); - ctx.moveTo(-200, -50); - ctx.lineTo(-150, -50); - ctx.lineTo(-151, -100); - ctx.stroke(); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 48,48 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.stroke.join.2 - desc: Shadows are drawn for stroke joins - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(50, 0, 50, 50); - ctx.strokeStyle = '#f00'; - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetX = 100; - ctx.lineWidth = 200; - ctx.lineJoin = 'miter'; - ctx.beginPath(); - ctx.moveTo(-200, -50); - ctx.lineTo(-150, -50); - ctx.lineTo(-151, -100); - ctx.stroke(); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 48,48 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.stroke.join.3 - desc: Shadows are drawn for stroke joins respecting miter limit - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.strokeStyle = '#f00'; - ctx.shadowColor = '#f00'; - ctx.shadowOffsetX = 100; - ctx.lineWidth = 200; - ctx.lineJoin = 'miter'; - ctx.miterLimit = 0.1; - ctx.beginPath(); - ctx.moveTo(-200, -50); - ctx.lineTo(-150, -50); - ctx.lineTo(-151, -100); // (not an exact right angle, to avoid some other bug in Firefox 3) - ctx.stroke(); - @assert pixel 1,1 == 0,255,0,255; - @assert pixel 48,48 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,48 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.image.basic - desc: Shadows are drawn for images - images: - - red.png - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 50; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - @assert pixel 50,25 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.image.transparent.1 - desc: Shadows are not drawn for transparent images - images: - - transparent.png - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#f00'; - ctx.shadowOffsetY = 50; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - @assert pixel 50,25 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.image.transparent.2 - desc: Shadows are not drawn for transparent parts of images - images: - - redtransparent.png - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(50, 0, 50, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 50, -50); - ctx.shadowColor = '#f00'; - ctx.drawImage(bitmap, -50, -50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.image.alpha - desc: Shadows are drawn correctly for partially-transparent images - images: - - transparent50.png - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#00f'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent50.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, -50); - @assert pixel 50,25 ==~ 127,0,127,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.image.section - desc: Shadows are not drawn for areas outside image source rectangles - images: - - redtransparent.png - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#f00'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 50, 0, 50, 50, 0, -50, 50, 50); - @assert pixel 25,25 ==~ 0,255,0,255; - @assert pixel 50,25 ==~ 0,255,0,255; - @assert pixel 75,25 ==~ 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.image.scale - desc: Shadows are drawn correctly for scaled images - images: - - redtransparent.png - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - ctx.drawImage(bitmap, 0, 0, 100, 50, -10, -50, 240, 50); - @assert pixel 25,25 ==~ 0,255,0,255; - @assert pixel 50,25 ==~ 0,255,0,255; - @assert pixel 75,25 ==~ 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.canvas.basic - desc: Shadows are drawn for canvases - code: | - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); - ctx2.fillStyle = '#f00'; - ctx2.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 50; - ctx.drawImage(offscreenCanvas2, 0, -50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.canvas.transparent.1 - desc: Shadows are not drawn for transparent canvases - code: | - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#f00'; - ctx.shadowOffsetY = 50; - ctx.drawImage(offscreenCanvas2, 0, -50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.canvas.transparent.2 - desc: Shadows are not drawn for transparent parts of canvases - code: | - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); - ctx2.fillStyle = '#f00'; - ctx2.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(50, 0, 50, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - ctx.drawImage(offscreenCanvas2, 50, -50); - ctx.shadowColor = '#f00'; - ctx.drawImage(offscreenCanvas2, -50, -50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.canvas.alpha - desc: Shadows are drawn correctly for partially-transparent canvases - code: | - var offscreenCanvas2 = new OffscreenCanvas(100, 50); - var ctx2 = offscreenCanvas2.getContext('2d'); - ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)'; - ctx2.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#00f'; - ctx.drawImage(offscreenCanvas2, 0, -50); - @assert pixel 50,25 ==~ 127,0,127,255; - t.done(); - -- name: 2d.shadow.pattern.basic - desc: Shadows are drawn for fill patterns - images: - - red.png - code: | - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/red.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 50; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.pattern.transparent.1 - desc: Shadows are not drawn for transparent fill patterns - # http://bugs.webkit.org/show_bug.cgi?id=15266 - images: - - transparent.png - code: | - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#f00'; - ctx.shadowOffsetY = 50; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.pattern.transparent.2 - desc: Shadows are not drawn for transparent parts of fill patterns - images: - - redtransparent.png - code: | - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/redtransparent.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(50, 0, 50, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.pattern.alpha - desc: Shadows are drawn correctly for partially-transparent fill patterns - images: - - transparent50.png - code: | - var promise = new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", '/images/transparent50.png'); - xhr.responseType = 'blob'; - xhr.send(); - xhr.onload = function() { - resolve(xhr.response); - }; - }); - promise.then(function(response) { - return createImageBitmap(response).then(bitmap => { - var pattern = ctx.createPattern(bitmap, 'repeat'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#00f'; - ctx.fillStyle = pattern; - ctx.fillRect(0, -50, 100, 50); - }); - }).then(t_pass, t_fail); - -- name: 2d.shadow.gradient.basic - desc: Shadows are drawn for gradient fills - # http://bugs.webkit.org/show_bug.cgi?id=15266 - code: | - var gradient = ctx.createLinearGradient(0, 0, 100, 0); - gradient.addColorStop(0, '#f00'); - gradient.addColorStop(1, '#f00'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#0f0'; - ctx.shadowOffsetY = 50; - ctx.fillStyle = gradient; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.gradient.transparent.1 - desc: Shadows are not drawn for transparent gradient fills - # http://bugs.webkit.org/show_bug.cgi?id=15266 - code: | - var gradient = ctx.createLinearGradient(0, 0, 100, 0); - gradient.addColorStop(0, 'rgba(0,0,0,0)'); - gradient.addColorStop(1, 'rgba(0,0,0,0)'); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = '#f00'; - ctx.shadowOffsetY = 50; - ctx.fillStyle = gradient; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.gradient.transparent.2 - desc: Shadows are not drawn for transparent parts of gradient fills - code: | - var gradient = ctx.createLinearGradient(0, 0, 100, 0); - gradient.addColorStop(0, '#f00'); - gradient.addColorStop(0.499, '#f00'); - gradient.addColorStop(0.5, 'rgba(0,0,0,0)'); - gradient.addColorStop(1, 'rgba(0,0,0,0)'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 50, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(50, 0, 50, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - ctx.fillStyle = gradient; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.gradient.alpha - desc: Shadows are drawn correctly for partially-transparent gradient fills - code: | - var gradient = ctx.createLinearGradient(0, 0, 100, 0); - gradient.addColorStop(0, 'rgba(255,0,0,0.5)'); - gradient.addColorStop(1, 'rgba(255,0,0,0.5)'); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#00f'; - ctx.fillStyle = gradient; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 50,25 ==~ 127,0,127,255; - t.done(); - -- name: 2d.shadow.transform.1 - desc: Shadows take account of transformations - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - ctx.translate(100, 100); - ctx.fillRect(-100, -150, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.transform.2 - desc: Shadow offsets are not affected by transformations - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowOffsetY = 50; - ctx.shadowColor = '#0f0'; - ctx.rotate(Math.PI) - ctx.fillRect(-100, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.shadow.alpha.1 - desc: Shadow color alpha components are used - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = 'rgba(255, 0, 0, 0.01)'; - ctx.shadowOffsetY = 50; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 50,25 ==~ 0,255,0,255 +/- 4; - t.done(); - -- name: 2d.shadow.alpha.2 - desc: Shadow color alpha components are used - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.shadowColor = 'rgba(0, 0, 255, 0.5)'; - ctx.shadowOffsetY = 50; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 50,25 ==~ 127,0,127,255; - t.done(); - -- name: 2d.shadow.alpha.3 - desc: Shadows are affected by globalAlpha - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; // (work around broken Firefox globalAlpha caching) - ctx.shadowColor = '#00f'; - ctx.shadowOffsetY = 50; - ctx.globalAlpha = 0.5; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 50,25 ==~ 127,0,127,255; - t.done(); - -- name: 2d.shadow.alpha.4 - desc: Shadows with alpha components are correctly affected by globalAlpha - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; // (work around broken Firefox globalAlpha caching) - ctx.shadowColor = 'rgba(0, 0, 255, 0.707)'; - ctx.shadowOffsetY = 50; - ctx.globalAlpha = 0.707; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 50,25 ==~ 127,0,127,255; - t.done(); - -- name: 2d.shadow.alpha.5 - desc: Shadows of shapes with alpha components are drawn correctly - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = 'rgba(64, 0, 0, 0.5)'; - ctx.shadowColor = '#00f'; - ctx.shadowOffsetY = 50; - ctx.fillRect(0, -50, 100, 50); - @assert pixel 50,25 ==~ 127,0,127,255; - t.done(); - -- name: 2d.shadow.composite.1 - desc: Shadows are drawn using globalCompositeOperation - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.globalCompositeOperation = 'xor'; - ctx.shadowColor = '#f00'; - ctx.shadowOffsetX = 100; - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, 0, 200, 50); - @assert pixel 50,25 ==~ 0,255,0,255; - t.done(); - -- name: 2d.shadow.composite.2 - desc: Shadows are drawn using globalCompositeOperation - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.globalCompositeOperation = 'xor'; - ctx.shadowColor = '#f00'; - ctx.shadowBlur = 1; - ctx.fillStyle = '#0f0'; - ctx.fillRect(-10, -10, 120, 70); - @assert pixel 50,25 ==~ 0,255,0,255; - t.done(); - -- name: 2d.shadow.composite.3 - desc: Areas outside shadows are drawn correctly with destination-out - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.globalCompositeOperation = 'destination-out'; - ctx.shadowColor = '#f00'; - ctx.shadowBlur = 10; - ctx.fillStyle = '#f00'; - ctx.fillRect(200, 0, 100, 50); - @assert pixel 5,5 ==~ 0,255,0,255; - @assert pixel 50,25 ==~ 0,255,0,255; - t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml index 784a099aca0..0907076cc8a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml @@ -16,7 +16,13 @@ - name: 2d.text.font.parse.complex code: | ctx.font = 'small-caps italic 400 12px/2 Unknown Font, sans-serif'; - @assert ctx.font === 'italic small-caps 12px "Unknown Font", sans-serif'; @moz-todo + @assert ['italic small-caps 12px "Unknown Font", sans-serif', 'italic small-caps 12px Unknown Font, sans-serif'].includes(ctx.font); + t.done(); + +- name: 2d.text.font.parse.complex2 + code: | + ctx.font = 'small-caps italic 400 12px/2 "Unknown Font #2", sans-serif'; + @assert ctx.font === 'italic small-caps 12px "Unknown Font #2", sans-serif'; t.done(); - name: 2d.text.font.parse.family @@ -614,7 +620,7 @@ ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'ideographic'; - ctx.fillText('CC', 0, 31.25); + ctx.fillText('CC', 0, 81.25); @assert pixel 5,5 ==~ 0,255,0,255; @assert pixel 95,5 ==~ 0,255,0,255; @assert pixel 25,25 ==~ 0,255,0,255; @@ -638,7 +644,7 @@ ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textBaseline = 'hanging'; - ctx.fillText('CC', 0, 12.5); + ctx.fillText('CC', 0, -30); @assert pixel 5,5 ==~ 0,255,0,255; @moz-todo @assert pixel 95,5 ==~ 0,255,0,255; @moz-todo @assert pixel 25,25 ==~ 0,255,0,255; @@ -849,7 +855,7 @@ expected: green - name: 2d.text.draw.space.collapse.space - desc: Space characters are converted to U+0020, and collapsed (per CSS) + desc: Space characters are converted to U+0020, and are NOT collapsed fonts: - CanvasTest code: | @@ -862,14 +868,14 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E EE', -100, 37.5); - @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo + ctx.fillText('E EE', -150, 37.5); + @assert pixel 25,25 ==~ 0,255,0,255; @assert pixel 75,25 ==~ 0,255,0,255; }).then(t_pass, t_fail); expected: green - name: 2d.text.draw.space.collapse.other - desc: Space characters are converted to U+0020, and collapsed (per CSS) + desc: Space characters are converted to U+0020, and are NOT collapsed fonts: - CanvasTest code: | @@ -882,9 +888,9 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -100, 37.5); - @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo - @assert pixel 75,25 ==~ 0,255,0,255; @moz-todo + ctx.fillText('E \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dEE', -600, 37.5); + @assert pixel 25,25 ==~ 0,255,0,255; + @assert pixel 75,25 ==~ 0,255,0,255; }).then(t_pass, t_fail); expected: green @@ -909,7 +915,7 @@ expected: green - name: 2d.text.draw.space.collapse.start - desc: Space characters at the start of a line are collapsed (per CSS) + desc: Space characters at the start of a line are NOT collapsed fonts: - CanvasTest code: | @@ -922,14 +928,14 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; - ctx.fillText(' EE', 0, 37.5); - @assert pixel 25,25 ==~ 0,255,0,255; @moz-todo + ctx.fillText(' EE', -50, 37.5); + @assert pixel 25,25 ==~ 0,255,0,255; @assert pixel 75,25 ==~ 0,255,0,255; }).then(t_pass, t_fail); expected: green - name: 2d.text.draw.space.collapse.end - desc: Space characters at the end of a line are collapsed (per CSS) + desc: Space characters at the end of a line are NOT collapsed fonts: - CanvasTest code: | @@ -943,9 +949,9 @@ ctx.fillRect(0, 0, 100, 50); ctx.fillStyle = '#0f0'; ctx.textAlign = 'right'; - ctx.fillText('EE ', 100, 37.5); + ctx.fillText('EE ', 150, 37.5); @assert pixel 25,25 ==~ 0,255,0,255; - @assert pixel 75,25 ==~ 0,255,0,255; @moz-todo + @assert pixel 75,25 ==~ 0,255,0,255; }).then(t_pass, t_fail); expected: green @@ -983,7 +989,7 @@ }).then(t_pass, t_fail); - name: 2d.text.measure.width.space - desc: Space characters are converted to U+0020 and collapsed (per CSS) for OffscreenCanvas + desc: Space characters are converted to U+0020 and NOT collapsed fonts: - CanvasTest code: | @@ -995,11 +1001,11 @@ ctx.font = '50px CanvasTest'; @assert ctx.measureText('A B').width === 150; @assert ctx.measureText('A B').width === 200; - @assert ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width === 150; @moz-todo + @assert ctx.measureText('A \x09\x0a\x0c\x0d \x09\x0a\x0c\x0dB').width === 650; @assert ctx.measureText('A \x0b B').width >= 200; - @assert ctx.measureText(' AB').width === 100; @moz-todo - @assert ctx.measureText('AB ').width === 100; @moz-todo + @assert ctx.measureText(' AB').width === 150; + @assert ctx.measureText('AB ').width === 150; }).then(t_pass, t_fail); - name: 2d.text.measure.advances @@ -1379,38 +1385,40 @@ code: | @assert ctx.fontKerning === "auto"; ctx.fontKerning = "Normal"; - @assert ctx.fontKerning === "normal"; - ctx.fontKerning = "auto"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "normal"; @assert ctx.fontKerning === "normal"; + ctx.fontKerning = "Auto"; + @assert ctx.fontKerning === "normal"; ctx.fontKerning = "auto"; ctx.fontKerning = "noRmal"; - @assert ctx.fontKerning === "normal"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "auto"; ctx.fontKerning = "NoRMal"; - @assert ctx.fontKerning === "normal"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "auto"; ctx.fontKerning = "NORMAL"; - @assert ctx.fontKerning === "normal"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "None"; - @assert ctx.fontKerning === "none"; - ctx.fontKerning = "auto"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "none"; @assert ctx.fontKerning === "none"; + ctx.fontKerning = "Auto"; + @assert ctx.fontKerning === "none"; ctx.fontKerning = "auto"; ctx.fontKerning = "nOne"; - @assert ctx.fontKerning === "none"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "auto"; ctx.fontKerning = "nonE"; - @assert ctx.fontKerning === "none"; + @assert ctx.fontKerning === "auto"; ctx.fontKerning = "auto"; ctx.fontKerning = "NONE"; - @assert ctx.fontKerning === "none"; + @assert ctx.fontKerning === "auto"; t.done(); - name: 2d.text.drawing.style.fontVariant.settings - desc: Testing basic functionalities of fontKerning for canvas + desc: Testing basic functionalities of fontVariant for canvas code: | // Setting fontVariantCaps with lower cases @assert ctx.fontVariantCaps === "normal"; @@ -1436,29 +1444,33 @@ ctx.fontVariantCaps = "titling-caps"; @assert ctx.fontVariantCaps === "titling-caps"; - // Setting fontVariantCaps with lower cases and upper cases word. + // Setting fontVariantCaps with mixed-case values is not valid ctx.fontVariantCaps = "nORmal"; + @assert ctx.fontVariantCaps === "titling-caps"; + + ctx.fontVariantCaps = "normal"; @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "smaLL-caps"; - @assert ctx.fontVariantCaps === "small-caps"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "all-small-CAPS"; - @assert ctx.fontVariantCaps === "all-small-caps"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "pEtitE-caps"; - @assert ctx.fontVariantCaps === "petite-caps"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "All-Petite-Caps"; - @assert ctx.fontVariantCaps === "all-petite-caps"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "uNIcase"; - @assert ctx.fontVariantCaps === "unicase"; + @assert ctx.fontVariantCaps === "normal"; ctx.fontVariantCaps = "titling-CAPS"; - @assert ctx.fontVariantCaps === "titling-caps"; + @assert ctx.fontVariantCaps === "normal"; // Setting fontVariantCaps with non-existing font variant. + ctx.fontVariantCaps = "titling-caps"; ctx.fontVariantCaps = "abcd"; @assert ctx.fontVariantCaps === "titling-caps"; t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/the-canvas-state.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/the-canvas-state.yaml deleted file mode 100644 index afb4cf956c6..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/the-canvas-state.yaml +++ /dev/null @@ -1,92 +0,0 @@ -- name: 2d.state.saverestore.transformation - desc: save()/restore() affects the current transformation matrix - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.save(); - ctx.translate(200, 0); - ctx.restore(); - ctx.fillStyle = '#f00'; - ctx.fillRect(-200, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.state.saverestore.clip - desc: save()/restore() affects the clipping path - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.save(); - ctx.rect(0, 0, 1, 1); - ctx.clip(); - ctx.restore(); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.state.saverestore.path - desc: save()/restore() does not affect the current path - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.save(); - ctx.rect(0, 0, 100, 50); - ctx.restore(); - ctx.fillStyle = '#0f0'; - ctx.fill(); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.state.saverestore.bitmap - desc: save()/restore() does not affect the current bitmap - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.save(); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.restore(); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.state.saverestore.stack - desc: save()/restore() can be nested as a stack - code: | - ctx.lineWidth = 1; - ctx.save(); - ctx.lineWidth = 2; - ctx.save(); - ctx.lineWidth = 3; - @assert ctx.lineWidth === 3; - ctx.restore(); - @assert ctx.lineWidth === 2; - ctx.restore(); - @assert ctx.lineWidth === 1; - t.done(); - -- name: 2d.state.saverestore.stackdepth - desc: save()/restore() stack depth is not unreasonably limited - code: | - var limit = 512; - for (var i = 1; i < limit; ++i) - { - ctx.save(); - ctx.lineWidth = i; - } - for (var i = limit-1; i > 0; --i) - { - @assert ctx.lineWidth === i; - ctx.restore(); - } - t.done(); - -- name: 2d.state.saverestore.underflow - desc: restore() with an empty stack has no effect - code: | - for (var i = 0; i < 16; ++i) - ctx.restore(); - ctx.lineWidth = 0.5; - ctx.restore(); - @assert ctx.lineWidth === 0.5; - t.done(); diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.js b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.js new file mode 100644 index 00000000000..a9f6a1c88e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/iframe-coep-redirect.https.window.js @@ -0,0 +1,41 @@ +// META: variant=?1-4 +// META: variant=?5-last +// META: script=/common/get-host-info.sub.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js +// META: script=./resources/iframeTest.js +promise_test(async test => { + const test_token = token(); + const child_token = token(); + + const redirecting_child_url = cross_origin + "/common/dispatcher/executor.html?uuid=" + child_token; + + const child_url = + same_origin + + "/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py?redirectTo=" + redirecting_child_url; + + await send(newWindow(coep_credentialless), ` + let iframe = document.createElement("iframe"); + iframe.src = "${child_url}"; + document.body.appendChild(iframe); + `); + + await send(child_token, ` + send("${test_token}", "load"); + `); + + // There are no interoperable ways to check an iframe failed to load. So a + // timeout is being used. + // See https://github.com/whatwg/html/issues/125 + // Use a shorter timeout when it is expected to be reached. + // - The long delay reduces the false-positive rate. False-positive causes + // stability problems on bot, so a big delay is used to vanish them. + // https://crbug.com/1215956. + // - The short delay avoids delaying too much the test(s) for nothing and + // timing out. False-negative are not a problem, they just need not to + // overwhelm the true-negative, which is trivial to get. + step_timeout(()=>send(test_token, "block"), 6000); + + assert_equals(await receive(test_token), EXPECT_LOAD); +}); diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py new file mode 100644 index 00000000000..7f0c35e93e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/resources/redirect_none_to_credentialless.py @@ -0,0 +1,14 @@ +COEP_HEADER = b"|header(cross-origin-embedder-policy, credentialless)" +CORP_HEADER = b"|header(cross-origin-resource-policy, cross-origin)" + +def main(request, response): + """ + Causes a redirection that the initial response doesn't have credentialless and the + redirected response has credentialless. + """ + response.status = 302 + + location = \ + request.GET[b'redirectTo'] + b"&pipe=" + COEP_HEADER + CORP_HEADER + + response.headers.set(b"Location", location) diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html index 2957e35f59b..ee08bcb4962 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/resources/resource-popup.html @@ -15,7 +15,14 @@ bc.onmessage = () => { const id = setInterval(() => { if (win.closed || win.location.href !== 'about:blank') { clearInterval(id); - bc.postMessage({name: win.name || null, closed: win.closed}); + const winName = (() => { + try { + return win.name; + } catch (e) { + return null; + } + })(); + bc.postMessage({name: winName || null, closed: win.closed}); } }, 100); </script> diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html index 00eb6506e9b..10929847ee6 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html @@ -9,8 +9,7 @@ <script> -async function createCoopRestrictPropertiesPopup(name) { - const popupToken = token(); +async function createCoopRestrictPropertiesPopup(popupToken, name) { const url = SAME_ORIGIN.origin + '/common/dispatcher/executor.html' + `?uuid=${popupToken}` + '&pipe=|header(Cross-Origin-Opener-Policy, restrict-properties)'; @@ -26,15 +25,33 @@ async function createCoopRestrictPropertiesPopup(name) { } promise_test(async t => { - // Open two COOP: restrict-properties popups with the same name. + // Start by opening a first COOP: restrict-properties popup. No name is set to + // begin with. + const popupToken1 = token(); + const popup1 = await createCoopRestrictPropertiesPopup(popupToken1, ''); + + // Once the popup is live, explicitly set a name. const name = token(); - const popup1 = await createCoopRestrictPropertiesPopup(name); - const popup2 = await createCoopRestrictPropertiesPopup(name); + send(popupToken1, `window.name = '${name}'`); + + // To make sure this name has been propagated to other processes, send a dummy + // message from the popup to the main page, and wait for it to be received. + // It should be delivered after the name change is replicated. + const message_waiter = new Promise(resolve => { + onmessage = (event) => { + if (event.data == 'Waited enough') { resolve(); } + } + }); + send(popupToken1, `opener.postMessage('Waited enough', '*')`); + await message_waiter; - // Check that named targeting did not cross isolation boundaries. Two popups - // should have been created. + // Finally, call window.open with the same name. This should not resolve + // across browsing context groups, and create a brand new popup. + const popupToken2 = token(); + const popup2 = await createCoopRestrictPropertiesPopup(popupToken2, name); assert_not_equals(popup1, popup2, 'Named targeting resolved across isolation boundaries'); + }, 'Verify that named targeting does not work across isolation boundaries.'); </script> diff --git a/tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html b/tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html index c9a22ed6db3..ddfa7c4ade6 100644 --- a/tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html +++ b/tests/wpt/web-platform-tests/html/editing/dnd/canvas/002.html @@ -31,7 +31,7 @@ function start(event) </script> </head> <body onload="paint('gray')"> -<div draggable="true" ondragstart="start(event)"/> +<div draggable="true" ondragstart="start(event)"></div> <p>Drag green box above to the gray canvas below. Canvas should turn green when you drop green box on it.</p> <p> <canvas width="100" height="100" ondragenter="event.preventDefault()" ondragover="return false">Canvas</canvas> diff --git a/tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html b/tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html index 33ed630fe06..047011d071d 100644 --- a/tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html +++ b/tests/wpt/web-platform-tests/html/editing/dnd/canvas/005.html @@ -24,7 +24,7 @@ function start(event) </script> </head> <body> -<div draggable="true" ondragstart="start(event)"/> +<div draggable="true" ondragstart="start(event)"></div> <p>Drag green box above to the gray canvas below. Canvas should turn green when you drop green box on it.</p> <p><iframe src="helper-drop-here-canvas.xhtml">Canvas</iframe></p> <script> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html index 9a2d1d06413..e65bf6cbe80 100644 --- a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode-ref.html @@ -1,4 +1,4 @@ <!DOCTYPE html> <div> - <video controls /> + <video controls></video> </div> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html index d124396ab2c..acd25881129 100644 --- a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html @@ -4,5 +4,5 @@ <link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#embedded-content-rendering-rules" /> <link rel="match" href="video-controls-vertical-writing-mode-ref.html" /> <div style="writing-mode:vertical-lr"> - <video controls /> + <video controls></video> </div> diff --git a/tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html b/tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html index 9c8642d10f9..e3dcd43a17a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html +++ b/tests/wpt/web-platform-tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html @@ -93,12 +93,27 @@ } /** + * @param {Element} element + * @returns {boolean} + */ + function isFormControl(element) { + if (["button", "input", "select", "textarea"].includes(element.localName)) { + return true; + } + return element.constructor.formAssociated; + } + + function isDisabledFormControl(element) { + return isFormControl(element) && element.disabled; + } + + /** * @param {Element} target * @param {*} observedEvent */ function shouldNotBubble(target, observedEvent) { return ( - target.disabled && + isDisabledFormControl(target) && observedEvent.isTrusted && ["mousedown", "mouseup", "click"].includes(observedEvent.type) ); @@ -136,7 +151,7 @@ await t.step_func(clickerFn)(target); await new Promise(resolve => t.step_timeout(resolve, 0)); - const expected = element.disabled ? expectedEvents : nonDisabledExpectedEvents; + const expected = isDisabledFormControl(element) ? expectedEvents : nonDisabledExpectedEvents; assert_array_equals(observedEvents.map(e => e.type), expected, "Observed events"); for (const observed of observedEvents) { diff --git a/tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html b/tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html index 11822e4dd48..6d1a39c1de9 100644 --- a/tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html +++ b/tests/wpt/web-platform-tests/html/semantics/disabled-elements/fieldset-event-propagation.tentative.html @@ -15,34 +15,41 @@ </div> <div id=target2parent> - <fieldset disabled id=target2fieldset>hello world</div> + <fieldset disabled id=target2fieldset>hello world</fieldset> </div> <script> -promise_test(async () => { - let target1parentClicked = false; - let target1childClicked = false; - let target1fieldsetClicked = false; - target1parent.onclick = () => target1parentClicked = true; - target1child.onclick = () => target1childClicked = true; - target1fieldset.onclick = () => target1fieldsetClicked = true; - - await test_driver.click(target1child); - - assert_true(target1parentClicked, 'The parent of the fieldset should receive a click event.'); - assert_true(target1childClicked, 'The child of the fieldset should receive a click event.'); - assert_true(target1fieldsetClicked, 'The fieldset element should receive a click event.'); -}, 'Disabled fieldset elements should not prevent click event propagation.'); - -promise_test(async () => { - let target2parentClicked = false; - let target2fieldsetClicked = false; - target2parent.onclick = () => target2parentClicked = true; - target2fieldset.onclick = () => target2fieldsetClicked = true; - - await test_driver.click(target2fieldset); - - assert_true(target2parentClicked, 'The parent of the fieldset should receive a click event.'); - assert_true(target2fieldsetClicked, 'The fieldset element should receive a click event.'); -}, 'Disabled fieldset elements should not block click events.'); + const clickers = { + "native click": target => test_driver.click(target), + "click()": target => target.click(), + }; + + for (const [clickerName, clicker] of Object.entries(clickers)) { + promise_test(async () => { + let target1parentClicked = false; + let target1childClicked = false; + let target1fieldsetClicked = false; + target1parent.onclick = () => target1parentClicked = true; + target1child.onclick = () => target1childClicked = true; + target1fieldset.onclick = () => target1fieldsetClicked = true; + + await clicker(target1child); + + assert_true(target1parentClicked, 'The parent of the fieldset should receive a click event.'); + assert_true(target1childClicked, 'The child of the fieldset should receive a click event.'); + assert_true(target1fieldsetClicked, 'The fieldset element should receive a click event.'); + }, `Disabled fieldset elements should not prevent click event propagation from ${clickerName}`); + + promise_test(async () => { + let target2parentClicked = false; + let target2fieldsetClicked = false; + target2parent.onclick = () => target2parentClicked = true; + target2fieldset.onclick = () => target2fieldsetClicked = true; + + await clicker(target2fieldset); + + assert_true(target2parentClicked, 'The parent of the fieldset should receive a click event.'); + assert_true(target2fieldsetClicked, 'The fieldset element should receive a click event.'); + }, `Disabled fieldset elements should not block click events from ${clickerName}.`); + } </script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html new file mode 100644 index 00000000000..30d591ae6e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html @@ -0,0 +1,14 @@ +<!doctype html> +<title>the <source> media attribute: no reaction to environment change</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<iframe src="resources/media-min-width.html" width="300"></iframe> +<script> +const t = promise_test(async () => { + await new Promise(resolve => window.onload = resolve); + assert_equals(window[0].beforeEnvChange, '#a', 'beforeEnvChange'); + assert_equals(window[0].afterEnvChange, '#a', 'afterEnvChange'); + assert_equals(window[0].afterLoadCalled, '#b', 'afterLoadCalled'); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html index 6332f0890db..df5f47add2b 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html @@ -1,14 +1,14 @@ <!doctype html> -<title>the <source> media attribute has no effect</title> +<title>the <source> media attribute</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <div id=log></div> -<video><source src="resources/delayed-broken-video.py" media="none"></video> +<video><source src="resources/delayed-broken-video.py" media="not all"></video> <script> test(function() { var v = document.querySelector('video'); var s = document.querySelector('source'); - assert_equals(v.networkState, v.NETWORK_LOADING); - assert_equals(v.currentSrc, s.src); + assert_equals(v.networkState, v.NETWORK_NO_SOURCE); + assert_equals(v.currentSrc, ''); }); </script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html new file mode 100644 index 00000000000..6d429d70fd2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<video></video> +<script> +function createSource(src, media) { + var source = document.createElement('source'); + source.src = src; + if (media) { + source.media = media; + } + return source; +} +const rAF = () => new Promise(resolve => requestAnimationFrame(resolve)); +const hash = str => str.substr(str.lastIndexOf('#')); +(async () => { + const v = document.querySelector('video'); + v.append(createSource('delayed-broken-video.py#a', '(min-width: 200px)')); + v.append(createSource('delayed-broken-video.py#b')); + await rAF(); + await rAF(); + window.beforeEnvChange = hash(v.currentSrc); + window.frameElement.width = '150'; + await rAF(); + await rAF(); + window.afterEnvChange = hash(v.currentSrc); + v.load() + await rAF(); + await rAF(); + window.afterLoadCalled = hash(v.currentSrc); +})(); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_008.htm b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_008.htm deleted file mode 100644 index c5cb25ed4c2..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/video_008.htm +++ /dev/null @@ -1,47 +0,0 @@ -<!DOCTYPE HTML> -<html> - <head> - <title>HTML5 Media Elements: 'media' attribute</title> - <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> - <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> - <link rel="help" href="http://www.w3.org/TR/html5/video.html#the-source-element" /> - <meta name="assert" content="'media' attribute is 'all' by default." /> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <script type="text/javascript" src="/common/media.js"></script> - <script type="text/javascript"> - var videotest = async_test(); - - function do_play(event) - { - videotest.step(function() { - var vid = document.getElementById("video0"); - assert_true(vid.currentSrc.indexOf("movie_300") > 0); - }); - videotest.done(); - } - - var do_error = videotest.unreached_func(); - - </script> - </head> - <body> - <div id='log'></div> - - <video id="video0" autoplay onplay="do_play(event);" onerror="do_error();"> - <script type="text/javascript"> - - document.write( - "<source media='not all' src='" + getVideoURI("/media/movie_300") + "'" + - " />" - ); - document.write( - "<source src='" + getVideoURI("/media/movie_5") + "'" + - " media='all' />" - ); - - </script> - Your browser does not support media elements. - </video> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html index f283633aab4..48980d0a5e2 100644 --- a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html @@ -153,14 +153,14 @@ promise_test(async t => { if (mutation_event_received_ids.length == 0) { // ok if mutation events are not supported } else { - assert_array_equals(mutation_event_received_ids, ["e0", "e3", "e2", "e1"], - "removal events received in node insertion order, followed by addition event"); + assert_array_equals(mutation_event_received_ids, ["e0", "e2", "e3", "e1"], + "removal events received in tree order, followed by addition event"); } assert_element_states(elements, [0, 1, 0, 0], "states after mutation"); assert_array_equals(toggle_event_received_ids, [], "toggle events received before awaiting promises"); await Promise.all(toggle_event_promises); - assert_array_equals(toggle_event_received_ids, ["e1", "e0", "e3", "e2"], "toggle events received after awaiting promises"); -}, "mutation event and toggle event order matches order of insertion in set of named elements"); + assert_array_equals(toggle_event_received_ids, ["e1", "e0", "e2", "e3"], "toggle events received after awaiting promises"); +}, "mutation event and toggle event order matches tree order"); // This function is used to guard tests that test behavior that is // relevant only because of Mutation Events. If mutation events (for @@ -206,8 +206,26 @@ promise_test(async t => { assert_element_states(elements, [1, 0, 1], "states before mutation"); elements[1].open = true; assert_array_equals(received_ids, ["e0", "e2", "e1"], - "removal events received in node insertion order, followed by addition event, despite changes to name during mutation event"); + "removal events received in tree order, followed by addition event, despite changes to name during mutation event"); assert_element_states(elements, [0, 1, 0], "states after mutation"); }, "interaction of open attribute changes with mutation events"); +promise_test(async t => { + container.innerHTML = ` + <details></details> + <details></details> + <details name></details> + <details name></details> + <details name=""></details> + <details name=""></details> + `; + let elements = Array.from(container.querySelectorAll("details")); + + assert_element_states(elements, [0, 0, 0, 0, 0, 0], "initial states from open attribute"); + for (let i = 0; i < 6; ++i) { + elements[i].open = true; + } + assert_element_states(elements, [1, 1, 1, 1, 1, 1], "after setting all elements open"); +}, "empty and missing name attributes do not create groups"); + </script> diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html index 0f206f1c700..009d10609b0 100644 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html @@ -614,3 +614,32 @@ promise_test(async () => { p21.hidePopover(); // Cleanup },'Show other auto popover during "hide all popover until"'); </script> + +<div id=p25 popover> + <div id=p26 popover>26</div> + <div id=p27 popover>27</div> + <div id=p28 popover>28</div> +</div> +<script> +promise_test(async () => { + p25.showPopover(); + p26.showPopover(); + let events = []; + const logEvents = (e) => { events.push(`${e.newState === 'open' ? 'show' : 'hide'} ${e.target.id}`) }; + p26.addEventListener('beforetoggle', (e) => { + logEvents(e); + p28.showPopover(); + }); + p27.addEventListener('beforetoggle', logEvents); + p28.addEventListener('beforetoggle', (e) => { + logEvents(e); + p27.showPopover(); + }); + p27.showPopover(); + assert_array_equals(events, ['show p27', 'hide p26', 'show p28', 'show p27'], 'Nested showPopover should not fire event for its HideAllPopoversUntil'); + assert_false(p26.matches(':popover-open')); + assert_true(p27.matches(':popover-open')); + assert_false(p28.matches(':popover-open')); + p25.hidePopover(); // Cleanup +}, 'Nested showPopover'); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm index 501edda065a..307aa464128 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/async_009.htm @@ -12,7 +12,7 @@ var t = async_test("Document.write() silently fails from an Async script"); var log = t.step_func(function() { - document.write("<span id='writtenText'/>"); + document.write("<span id='writtenText'></span>"); assert_equals(null, document.getElementById('writtenText')); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html index f9600439298..8808675eb69 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/disabled.html @@ -26,6 +26,7 @@ </select> <textarea id=textarea1>textarea1</textarea> <textarea disabled id=textarea2>textarea2</textarea> +<fieldset id=fieldset1></fieldset> <fieldset disabled id=fieldset2> <legend><input type=checkbox id=club></legend> <p><label>Name on card: <input id=clubname required></label></p> @@ -39,21 +40,21 @@ <progress disabled></progress> <script> - testSelectorIdsMatch(":disabled", ["button2", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should match only disabled elements"); + testSelectorIdsMatch(":disabled", ["button2", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should match only disabled elements"); document.getElementById("button2").removeAttribute("disabled"); - testSelectorIdsMatch(":disabled", ["input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should not match elements whose disabled attribute has been removed"); + testSelectorIdsMatch(":disabled", ["input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should not match elements whose disabled attribute has been removed"); document.getElementById("button1").setAttribute("disabled", "disabled"); - testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set"); + testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set"); document.getElementById("button1").setAttribute("disabled", "disabled"); - testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set twice"); + testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set twice"); document.getElementById("input2").setAttribute("type", "submit"); // change input type to submit - testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should also match disabled elements whose type has changed"); + testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match disabled elements whose type has changed"); var input = document.createElement("input"); input.setAttribute("disabled", "disabled"); - testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "clubname", "clubnum"], "':disabled' should not match elements not in the document"); + testSelectorIdsMatch(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should not match elements not in the document"); </script> diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html index 1948343c186..0ad0e1b402a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/enabled.html @@ -36,6 +36,7 @@ </menu> </form> <fieldset id=fieldset1></fieldset> +<fieldset disabled id=fieldset2></fieldset> <script> testSelectorIdsMatch(":enabled", ["button1", "input1", "select1", "optgroup1", "option1", "textarea1", "submitbutton", "fieldset1"], "':enabled' elements that are not disabled"); diff --git a/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html b/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html index 4d45fa55520..07af33d01e2 100644 --- a/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html +++ b/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html @@ -112,13 +112,13 @@ var parameters = [ doc, 'thead', '<col id="col3" width="150"/>', 'col3', 'COL'], ['Clearing stack back to a table body context. Test <colgroup> in <tbody>', - doc, 'tbody', '<colgroup id="colgroup1" width="150"/>', 'colgroup1', 'COLGROUP'], + doc, 'tbody', '<colgroup id="colgroup1" width="150"></colgroup>', 'colgroup1', 'COLGROUP'], ['Clearing stack back to a table body context. Test <colgroup> in <tfoot>', - doc, 'tfoot', '<colgroup id="colgroup2" width="150"/>', 'colgroup2', 'COLGROUP'], + doc, 'tfoot', '<colgroup id="colgroup2" width="150"></colgroup>', 'colgroup2', 'COLGROUP'], ['Clearing stack back to a table body context. Test <colgroup> in <thead>', - doc, 'thead', '<colgroup id="colgroup3" width="150"/>', 'colgroup3', 'COLGROUP'], + doc, 'thead', '<colgroup id="colgroup3" width="150"></colgroup>', 'colgroup3', 'COLGROUP'], ['Clearing stack back to a table body context. Test <tbody> in <tbody>', doc, 'tbody', '<tbody id="tbody1"></tbody>', 'tbody1', 'TBODY', 1], diff --git a/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html b/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html index 135540a5cbe..1bf9c5bba60 100644 --- a/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html +++ b/tests/wpt/web-platform-tests/html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context.html @@ -62,7 +62,7 @@ var parameters = [ doc, '<caption id="caption1">Table caption</caption>', 'caption1', 'CAPTION'], ['Clearing stack back to a table context. Test <colgroup>', - doc, '<colgroup id="colgroup1" width="100%"/>', 'colgroup1', 'COLGROUP'], + doc, '<colgroup id="colgroup1" width="100%"></colgroup>', 'colgroup1', 'COLGROUP'], ['Clearing stack back to a table context. Test <tbody>', doc, '<tbody id="tbody1"></tbody>', 'tbody1', 'TBODY', 1], diff --git a/tests/wpt/web-platform-tests/https-upgrades/resources/pass.html b/tests/wpt/web-platform-tests/https-upgrades/resources/pass.html new file mode 100644 index 00000000000..5c7ca343e9b --- /dev/null +++ b/tests/wpt/web-platform-tests/https-upgrades/resources/pass.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html> + <body> + <script> + window.onload = (event) => { + window.opener.postMessage('pass', '*'); + }; + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/https-upgrades/tentative/fallback.sub.html b/tests/wpt/web-platform-tests/https-upgrades/tentative/fallback.sub.html new file mode 100644 index 00000000000..8fdf0dc8360 --- /dev/null +++ b/tests/wpt/web-platform-tests/https-upgrades/tentative/fallback.sub.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> + <head> + <title>HTTPS Upgrades: Fallback.</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/common/get-host-info.sub.js"></script> + + </head> + <body> + <script> + setup({ single_test: true }); + // If HTTPS upgrades are enabled, this will fail to load since this test is http only, + // and should load properly once a fallback is triggered. + var url = new URL("http://{{host}}:{{ports[http][0]}}/https-upgrades/resources/pass.html") + window.onmessage = function(event) { + if (event.data === "pass") { + done(); + } + } + win = window.open(url) + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/https-upgrades/tentative/upgrade.https.sub.html b/tests/wpt/web-platform-tests/https-upgrades/tentative/upgrade.https.sub.html new file mode 100644 index 00000000000..71a1fe1dde6 --- /dev/null +++ b/tests/wpt/web-platform-tests/https-upgrades/tentative/upgrade.https.sub.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> + <head> + <title>HTTPS Upgrades: Upgrade.</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/common/get-host-info.sub.js"></script> + + </head> + <body> + <script> + setup({ single_test: true }); + // HTTPS upgrades don't change custom ports, so this will load correctly if an HTTPS upgrade is performed, + // and will fail to load otherwise (since the port will be wrong for http). + var url = new URL("http://{{host}}:{{ports[https][0]}}/https-upgrades/resources/pass.html") + window.onmessage = function(event) { + if (event.data === "pass") { + done(); + } + } + win = window.open(url) + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html b/tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html index fdc691819bd..aaf2ce8a746 100644 --- a/tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/video-poster.html @@ -22,4 +22,4 @@ async_test(function (t) { observer.observe({type: 'largest-contentful-paint', buffered: true}); }, "Able to observe a video's poster image."); </script> -<video id='the_poster' src='/media/test.mp4' poster='/images/blue.png'/> +<video id='the_poster' src='/media/test.mp4' poster='/images/blue.png'></video> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html index bf5e9400a03..a9a6930aafc 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html @@ -2,8 +2,8 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <body> -<canvas id='canvas0' width=10 height=10/> -<canvas id='canvas1' width=10 height=10/> +<canvas id='canvas0' width=10 height=10></canvas> +<canvas id='canvas1' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html index d80ab67321f..38fabdcdfac 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html @@ -2,7 +2,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <body> -<canvas id='canvas' width=10 height=10/> +<canvas id='canvas' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html index 55272d14995..391dbb58f0a 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html @@ -2,7 +2,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <body> -<canvas id='canvas' width=10 height=10/> +<canvas id='canvas' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html index a4ecbe61181..91c308622cb 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html @@ -2,7 +2,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <body> -<canvas id='canvas' width=10 height=10/> +<canvas id='canvas' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html b/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html index e27950fc5ed..9ccc51f7b1f 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html @@ -6,7 +6,7 @@ async_test(t => { let iframe = document.createElement('iframe'); - let html = "<canvas id='canvas' width=10 height=10 />"; + let html = "<canvas id='canvas' width=10 height=10></canvas>"; iframe.srcdoc = html; iframe.onload = t.step_func_done(() => { // This detaches the frame while retaining a reference to an diff --git a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html index 94962a03f4d..8b6ab891ff8 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html @@ -3,7 +3,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> <body> -<canvas id='canvas' width=10 height=10/> +<canvas id='canvas' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html index 45403735594..04a7a5395fc 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html @@ -3,7 +3,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> <body> -<canvas id='canvas' width=10 height=10/> +<canvas id='canvas' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html index 4deee97d7bc..fff36e1a3b8 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-reject.html @@ -3,7 +3,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> <body> -<canvas id='canvas' width=10 height=10/> +<canvas id='canvas' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html index 58708612456..2946e782d0b 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html @@ -3,7 +3,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> <body> -<canvas id='canvas' width=10 height=10/> +<canvas id='canvas' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html index 6b27f085a8a..44586406c47 100644 --- a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html +++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html @@ -3,7 +3,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> <body> -<canvas id='canvas' width=10 height=10/> +<canvas id='canvas' width=10 height=10></canvas> </body> <script> diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html index 86c9d4f4a26..9d74ab59388 100644 --- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html @@ -15,7 +15,7 @@ </head> <body> - <video id="remote" autoplay width="240" /> + <video id="remote" autoplay width="240"></video> <script> promise_setup(async () => { diff --git a/tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html b/tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html index ceeae2eade8..6a8ebf50dd5 100644 --- a/tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html @@ -14,7 +14,7 @@ </head> <body> - <video id="remote" autoplay width="240" /> + <video id="remote" autoplay width="240"></video> <script> [{kind: "video", audio: false, codecPreference: "VP8", codecRegex: /.*vp8.*/}, diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html index 1c09b15f1f9..194e933f91a 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_touch-action-rotated-divs_touch-manual.html @@ -87,6 +87,6 @@ </ol> <div id="target"></div> <input type="button" id="btnDone" value="Done" /> - <div id="log" /> + <div id="log"></div> </body> </html> diff --git a/tests/wpt/web-platform-tests/private-aggregation/resources/private-aggregation-helper-module.js b/tests/wpt/web-platform-tests/private-aggregation/resources/private-aggregation-helper-module.js new file mode 100644 index 00000000000..f5a8533d0f3 --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/resources/private-aggregation-helper-module.js @@ -0,0 +1,23 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +class ContributeToHistogramOperation { + async run(urls, data) { + if (data.enableDebugMode) { + privateAggregation.enableDebugMode(data.enableDebugModeArgs); + + if (data.enableDebugModeExtraTime) { + privateAggregation.enableDebugMode(data.enableDebugModeArgs); + } + } + for (const contribution of data.contributions) { + privateAggregation.contributeToHistogram(contribution); + } + + // If an error occurs, the default URL will be picked instead. + return 1; + } +} + +register('contribute-to-histogram', ContributeToHistogramOperation); diff --git a/tests/wpt/web-platform-tests/private-aggregation/resources/reports.py b/tests/wpt/web-platform-tests/private-aggregation/resources/reports.py new file mode 100644 index 00000000000..fc6260c784d --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/resources/reports.py @@ -0,0 +1,77 @@ +"""Methods for the report-shared-storage and report-protected-audience endpoints (including debug endpoints)""" +import json +from typing import List, Optional, Tuple, TypedDict +import urllib.parse + +from wptserve.request import Request +from wptserve.stash import Stash +from wptserve.utils import isomorphic_decode, isomorphic_encode + +# Arbitrary key used to access the reports in the stash. +REPORTS_KEY = "9d285691-4386-45ad-9a79-d2ec29557bfe" + +Header = Tuple[str, str] +Status = Tuple[int, str] +Response = Tuple[Status, List[Header], str] + +def get_request_origin(request: Request) -> str: + return "%s://%s" % (request.url_parts.scheme, + request.url_parts.netloc) + +def handle_post_request(request: Request) -> Response: + """Handles POST request for reports. + + Retrieves the report from the request body and stores the report in the + stash. If clear_stash is specified in the query params, clears the stash. + """ + store_report(request.server.stash, get_request_origin(request), + request.body.decode("utf-8")) + return 200, [], "" + + +def handle_get_request(request: Request) -> Response: + """Handles GET request for reports. + + Retrieves and returns all reports from the stash. + """ + headers = [("Content-Type", "application/json")] + reports = take_reports(request.server.stash, get_request_origin(request)) + headers.append(("Access-Control-Allow-Origin", "*")) + return 200, headers, json.dumps(reports) + + +def store_report(stash: Stash, origin: str, report: str) -> None: + """Stores the report in the stash. Report here is a JSON.""" + with stash.lock: + reports_dict = stash.take(REPORTS_KEY) + if not reports_dict: + reports_dict = {} + reports = reports_dict.get(origin, []) + reports.append(report) + reports_dict[origin] = reports + stash.put(REPORTS_KEY, reports_dict) + return None + +def take_reports(stash: Stash, origin: str) -> List[str]: + """Takes all the reports from the stash and returns them.""" + with stash.lock: + reports_dict = stash.take(REPORTS_KEY) + if not reports_dict: + reports_dict = {} + + reports = reports_dict.pop(origin, []) + stash.put(REPORTS_KEY, reports_dict) + return reports + + +def handle_request(request: Request) -> Response: + """Handles request to get or store reports.""" + if request.method == "POST": + return handle_post_request(request) + if request.method == "GET": + return handle_get_request(request) + + return (405, "Method Not Allowed"), [("Content-Type", "application/json")], json.dumps({ + "code": 405, + "message": "Only GET or POST methods are supported." + }) diff --git a/tests/wpt/web-platform-tests/private-aggregation/resources/util.js b/tests/wpt/web-platform-tests/private-aggregation/resources/util.js new file mode 100644 index 00000000000..7b3a2c54f88 --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/resources/util.js @@ -0,0 +1,24 @@ +// Execute Private Aggregation functions in shared storage worklet given +// `paa_data`, and expect that success/failure result is `expected_error`. +async function VerifyContributeToHistogram(paa_data, expected_error) { + const ancestor_key = token(); + let url0 = generateURL("/shared-storage/resources/frame0.html", + [ancestor_key]); + let url1 = generateURL("/shared-storage/resources/frame1.html", + [ancestor_key]); + + await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + + let select_url_result = await sharedStorage.selectURL( + "contribute-to-histogram", [{url: url0}, {url: url1}], + {data: paa_data, keepAlive: true}); + + attachFencedFrame(select_url_result, 'opaque-ads'); + const result = await nextValueFromServer(ancestor_key); + + if (expected_error) { + assert_equals(result, "frame0_loaded"); + } else { + assert_equals(result, "frame1_loaded"); + } +} diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html new file mode 100644 index 00000000000..3593ed71ea6 --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html @@ -0,0 +1,23 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with disabled "private-aggregation" permissions policy'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html.headers b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html.headers new file mode 100644 index 00000000000..87819101516 --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-permissions-policy-none.https.html.headers @@ -0,0 +1 @@ +Permissions-Policy: private-aggregation=() diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure-2.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure-2.https.html new file mode 100644 index 00000000000..b39ecd8d74b --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure-2.https.html @@ -0,0 +1,26 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +// Note: This file should contain at most 6 shared storage subtests due to the +// budget on selectURL(). + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: -2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with a negative value'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure.https.html new file mode 100644 index 00000000000..9dc62b1bb71 --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-failure.https.html @@ -0,0 +1,74 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +// Note: This file should contain at most 6 shared storage subtests due to the +// budget on selectURL(). + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 340282366920938463463374607431768211456n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with a bucket too large'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: -1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with negative bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with non-BigInt bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + enableDebugModeArgs: 1234n, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'Invalid enableDebugMode argument'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + enableDebugModeArgs: {debugKey: 1234}, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with a non-BigInt debugKey'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + enableDebugModeExtraTime: true, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'enableDebugMode called twice'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success-2.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success-2.https.html new file mode 100644 index 00000000000..8203fd11eaa --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success-2.https.html @@ -0,0 +1,27 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +// Note: This file should contain at most 6 shared storage subtests due to the +// budget on selectURL(). + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + enableDebugModeArgs: {debugKey: 1234n}, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a valid debugKey'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success.https.html b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success.https.html new file mode 100644 index 00000000000..7012180c713 --- /dev/null +++ b/tests/wpt/web-platform-tests/private-aggregation/shared-storage-surface-success.https.html @@ -0,0 +1,71 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +// Note: This file should contain at most 6 shared storage subtests due to the +// budget on selectURL(). + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'basic contributeToHistogram() test'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 0n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a zero bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: 0}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a zero value'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 18446744073709551616n, value: 5}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a large bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 340282366920938463463374607431768211455n, value: 5}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a max bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: 2.3}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a non-integer value'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js index ab2c6faa0ee..c5eb1bd14b8 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js +++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js @@ -985,8 +985,6 @@ class MockRuntime { environmentProviderRequest.handle); } - setInputSourceButtonListener(listener) { listener.$.close(); } - // XREnvironmentIntegrationProvider implementation: subscribeToHitTest(nativeOriginInformation, entityTypes, ray) { if (!this.supportedModes_.includes(xrSessionMojom.XRSessionMode.kImmersiveAr)) { @@ -1212,7 +1210,6 @@ class MockRuntime { clientReceiver: clientReceiver, enabledFeatures: enabled_features, deviceConfig: { - usesInputEventing: false, defaultFramebufferScale: this.defaultFramebufferScale_, supportsViewportScaling: true, depthConfiguration: diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html index cfb7cf2c1e4..01982859137 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-duration-auto.tentative.html @@ -50,7 +50,9 @@ <div id="target"></div> <script> test_valid_value('animation-duration', 'auto'); - test_computed_value('animation-duration', 'auto'); + test_computed_value('animation-duration', 'auto', '0s'); test_valid_value('animation', 'auto cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim'); - test_computed_value('animation', 'auto cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim'); + test_computed_value('animation', + 'auto cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim', + '0s cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim'); </script> diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html index a17dd431264..b7d5947a212 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html @@ -38,9 +38,9 @@ test_shorthand_value('animation', 'animation-fill-mode': 'forwards, forwards, forwards', 'animation-play-state': 'paused, paused, paused', 'animation-name': 'anim1, anim2, anim3', - 'animation-timeline': 'auto, auto, auto', - 'animation-range-start': 'normal, normal, normal', - 'animation-range-end': 'normal, normal, normal', + 'animation-timeline': 'auto', + 'animation-range-start': 'normal', + 'animation-range-end': 'normal', }); test((t) => { @@ -53,6 +53,9 @@ test((t) => { assert_equals(target.style.animation, ''); assert_equals(target.style.animationName, 'anim'); assert_equals(target.style.animationDuration, '1s'); + + target.style.animationTimeline = 'auto, auto'; + assert_equals(target.style.animation, ''); }, 'Animation shorthand can not represent non-initial timelines (specified)'); test((t) => { @@ -65,6 +68,9 @@ test((t) => { assert_equals(getComputedStyle(target).animation, ''); assert_equals(getComputedStyle(target).animationName, 'anim'); assert_equals(getComputedStyle(target).animationDuration, '1s'); + + target.style.animationTimeline = 'auto, auto'; + assert_equals(getComputedStyle(target).animation, ''); }, 'Animation shorthand can not represent non-initial timelines (computed)'); test((t) => { @@ -77,6 +83,9 @@ test((t) => { assert_equals(target.style.animation, ''); assert_equals(target.style.animationName, 'anim'); assert_equals(target.style.animationDuration, '1s'); + + target.style.animationDelayEnd = '0s, 0s'; + assert_equals(target.style.animation, ''); }, 'Animation shorthand can not represent non-initial animation-delay-end (specified)'); test((t) => { @@ -89,6 +98,9 @@ test((t) => { assert_equals(getComputedStyle(target).animation, ''); assert_equals(getComputedStyle(target).animationName, 'anim'); assert_equals(getComputedStyle(target).animationDuration, '1s'); + + target.style.animationDelayEnd = '0s, 0s'; + assert_equals(getComputedStyle(target).animation, ''); }, 'Animation shorthand can not represent non-initial animation-delay-end (computed)'); test((t) => { @@ -101,6 +113,9 @@ test((t) => { assert_equals(target.style.animation, ''); assert_equals(target.style.animationName, 'anim'); assert_equals(target.style.animationDuration, '1s'); + + target.style.animationRangeStart = 'normal, normal'; + assert_equals(target.style.animation, ''); }, 'Animation shorthand can not represent non-initial animation-range-start (specified)'); test((t) => { @@ -113,6 +128,9 @@ test((t) => { assert_equals(getComputedStyle(target).animation, ''); assert_equals(getComputedStyle(target).animationName, 'anim'); assert_equals(getComputedStyle(target).animationDuration, '1s'); + + target.style.animationRangeStart = 'normal, normal'; + assert_equals(getComputedStyle(target).animation, ''); }, 'Animation shorthand can not represent non-initial animation-range-start (computed)'); test((t) => { @@ -125,6 +143,9 @@ test((t) => { assert_equals(target.style.animation, ''); assert_equals(target.style.animationName, 'anim'); assert_equals(target.style.animationDuration, '1s'); + + target.style.animationRangeEnd = 'normal, normal'; + assert_equals(target.style.animation, ''); }, 'Animation shorthand can not represent non-initial animation-range-end (specified)'); test((t) => { @@ -137,6 +158,9 @@ test((t) => { assert_equals(getComputedStyle(target).animation, ''); assert_equals(getComputedStyle(target).animationName, 'anim'); assert_equals(getComputedStyle(target).animationDuration, '1s'); + + target.style.animationRangeEnd = 'normal, normal'; + assert_equals(getComputedStyle(target).animation, ''); }, 'Animation shorthand can not represent non-initial animation-range-end (computed)'); </script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html b/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html index 849bffa5a7f..bcf53403add 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html +++ b/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-with-disabled-shadow.tentative.html @@ -16,7 +16,7 @@ customElements.define('shadow-disabled',ShadowDisabledElement); </script> <shadow-disabled> - <template shadowrootmode="open"><span id=inside/></template> + <template shadowrootmode="open"><span id=inside></span></template> </shadow-disabled> <script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html b/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html index 2eec3acc88a..5d7f332b854 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html +++ b/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/focus-reverse-unassignable-slot.html @@ -13,7 +13,7 @@ <div> <template shadowrootmode=open> - <slot /> + <slot></slot> </template> <slot> <input id=input1> diff --git a/tests/wpt/web-platform-tests/svg/scripted/script-invalid-script-type.html b/tests/wpt/web-platform-tests/svg/scripted/script-invalid-script-type.html new file mode 100644 index 00000000000..9602dd525bd --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/scripted/script-invalid-script-type.html @@ -0,0 +1,16 @@ +<!doctype html> +<link rel="author" href="mailto:avandolder@mozilla.com" title="Adam Vandolder"> +<link rel="author" href="https://mozilla.org" title="Mozilla"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1827512"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="host"></div> +<svg><script type="text/plain">window.scriptRan = true;</script></svg> +<script> + let svgScript = document.querySelector("svg > script"); + svgScript.type = "text/javascript"; + svgScript.appendChild(document.createTextNode("")); + test(function() { + assert_true(window.scriptRan); + }, "svg:script runs after valid script type is set"); +</script> diff --git a/tests/wpt/web-platform-tests/tools/pytest.ini b/tests/wpt/web-platform-tests/tools/pytest.ini index bf58dc409aa..3347ec6dbdb 100644 --- a/tests/wpt/web-platform-tests/tools/pytest.ini +++ b/tests/wpt/web-platform-tests/tools/pytest.ini @@ -10,6 +10,8 @@ filterwarnings = # ignore importlib changes which six is unlikely to ever adopt ignore:_SixMetaPathImporter.exec_module\(\) not found; falling back to load_module\(\):ImportWarning ignore:_SixMetaPathImporter.find_spec\(\) not found; falling back to find_module\(\):ImportWarning + # ignore urllib3's warning when not using OpenSSL + ignore:.*currently the 'ssl' module is compiled with.*::urllib3 # ignore mozinfo deprecation warnings ignore:distutils Version classes are deprecated\. Use packaging\.version instead\.:DeprecationWarning:mozinfo # ingore mozinfo's dependency on distro diff --git a/tests/wpt/web-platform-tests/tools/requirements_pytest.txt b/tests/wpt/web-platform-tests/tools/requirements_pytest.txt index 6dc497515bc..2ca04f876e4 100644 --- a/tests/wpt/web-platform-tests/tools/requirements_pytest.txt +++ b/tests/wpt/web-platform-tests/tools/requirements_pytest.txt @@ -1,3 +1,3 @@ -pytest==7.3.1 +pytest==7.3.2 pytest-cov==4.1.0 -hypothesis==6.75.2 +hypothesis==6.78.2 diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py index e5aa5f0d896..1725399faca 100644 --- a/tests/wpt/web-platform-tests/tools/serve/serve.py +++ b/tests/wpt/web-platform-tests/tools/serve/serve.py @@ -574,6 +574,7 @@ class RoutesBuilder: ("*", "/.well-known/attribution-reporting/report-aggregate-attribution", handlers.PythonScriptHandler), ("*", "/.well-known/attribution-reporting/debug/report-aggregate-attribution", handlers.PythonScriptHandler), ("*", "/.well-known/attribution-reporting/debug/verbose", handlers.PythonScriptHandler), + ("*", "/.well-known/private-aggregation/*", handlers.PythonScriptHandler), ("*", "/.well-known/web-identity", handlers.PythonScriptHandler), ("*", "*.py", handlers.PythonScriptHandler), ("GET", "*", handlers.FileHandler) diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py index d994c6388d8..99b26927403 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/script.py @@ -7,8 +7,40 @@ from ._module import BidiModule, command class ScriptEvaluateResultException(Exception): def __init__(self, result: Mapping[str, Any]): + super().__init__() + self.result = result - super().__init__("Script execution failed.") + + details = result.get("exceptionDetails", {}) + self.column_number = details.get("columnNumber") + self.exception = details.get("exception") + self.line_number = details.get("lineNumber") + self.stacktrace = self.process_stacktrace(details.get("stackTrace", {})) + self.text = details.get("text") + + def process_stacktrace(self, stacktrace: Mapping[str, Any]) -> str: + stack = "" + for frame in stacktrace.get("callFrames", []): + data = frame.get("functionName") or "eval code" + if "url" in frame: + data += f"@{frame['url']}" + data += f":{frame.get('lineNumber', 0)}:{frame.get('columnNumber', 0)}" + stack += data + "\n" + + return stack + + def __repr__(self) -> str: + """Return the object representation in string format.""" + return f"<{self.__class__.__name__}(), {self.text})>" + + def __str__(self) -> str: + """Return the string representation of the object.""" + message: str = self.text + + if self.stacktrace: + message += f"\n\nStacktrace:\n\n{self.stacktrace}" + + return message class OwnershipModel(Enum): diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py index 7c1fef30ae1..cdcef11b94f 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/session.py @@ -6,11 +6,13 @@ from ._module import BidiModule, command class Session(BidiModule): @command def new(self, capabilities: Mapping[str, Any]) -> Mapping[str, Mapping[str, Any]]: - return {"capabilities": capabilities} + params: MutableMapping[str, Any] = {} + params["capabilities"] = capabilities + return params @new.result def _new(self, result: Mapping[str, Any]) -> Any: - return result.get("session_id"), result.get("capabilities", {}) + return result.get("sessionId"), result.get("capabilities", {}) @command def subscribe(self, diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index 58e0004f9be..15be2af2d3d 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -506,6 +506,11 @@ class AndroidWebview(ChromeAndroidBase): name = "android_webview" browser_cls = browser.AndroidWebview + def setup_kwargs(self, kwargs): + if kwargs["mojojs_path"]: + kwargs["enable_mojojs"] = True + logger.info("--mojojs-path is provided, enabling MojoJS") + class Opera(BrowserSetup): name = "opera" diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html index 3ce18d4dd82..fbe09bab989 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/print_pdf_runner.html @@ -11,19 +11,19 @@ async function _render(pdfData) { let loadingTask = pdfjsLib.getDocument({data: atob(pdfData)}); let pdf = await loadingTask.promise; let rendered = []; - for (let pageNumber=1; pageNumber<=pdf.numPages; pageNumber++) { + for (let pageNumber = 1; pageNumber <= pdf.numPages; pageNumber++) { let page = await pdf.getPage(pageNumber); - var viewport = page.getViewport({scale: 96./72.}); + const viewport = page.getViewport({ scale: 96. / 72. }); // Prepare canvas using PDF page dimensions - var canvas = document.getElementsByTagName('canvas')[0]; - var context = canvas.getContext('2d'); + const canvas = document.getElementsByTagName('canvas')[0]; + const context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; // Render PDF page into canvas context - var renderContext = { + const renderContext = { canvasContext: context, - viewport: viewport + viewport }; await page.render(renderContext).promise; rendered.push(canvas.toDataURL()); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py index 950273c3894..8cd24f2f5ae 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py @@ -55,6 +55,7 @@ class TestGroupsFile: def __getitem__(self, key): return self._data[key] + def read_include_from_file(file): new_include = [] with open(file) as f: @@ -66,11 +67,11 @@ def read_include_from_file(file): new_include.append(line) return new_include + def update_include_for_groups(test_groups, include): if include is None: # We're just running everything return - new_include = [] for item in include: if item in test_groups: @@ -400,9 +401,29 @@ class TestSource: if self.logger is None: self.logger = structured.structuredlog.StructuredLogger("TestSource") + @classmethod + def make_queue(cls, tests_by_type, **kwargs): + mp = mpcontext.get_context() + test_queue = mp.Queue() + groups = cls.make_groups(tests_by_type, **kwargs) + processes = cls.process_count(kwargs["processes"], len(groups)) + if processes > 1: + groups.sort(key=lambda group: ( + # Place groups of the same test type together to minimize + # browser restarts. + group.test_type, + # Next, run larger groups first to avoid straggler runners. Use + # timeout to give slow tests greater relative weight. + -sum(test.timeout for test in group.group), + )) + for item in groups: + test_queue.put(item) + cls.add_sentinal(test_queue, processes) + return test_queue, processes + @abstractmethod #@classmethod (doesn't compose with @abstractmethod in < 3.3) - def make_queue(cls, tests_by_type, **kwargs): # noqa: N805 + def make_groups(cls, tests_by_type, **kwargs): # noqa: N805 pass @abstractmethod @@ -442,29 +463,17 @@ class GroupedSource(TestSource): raise NotImplementedError @classmethod - def make_queue(cls, tests_by_type, **kwargs): - mp = mpcontext.get_context() - test_queue = mp.Queue() - groups = [] - - state = {} - + def make_groups(cls, tests_by_type, **kwargs): + groups, state = [], {} for test_type, tests in tests_by_type.items(): for test in tests: if cls.new_group(state, test_type, test, **kwargs): group_metadata = cls.group_metadata(state) groups.append(TestGroup(deque(), test_type, group_metadata)) - group, _, metadata = groups[-1] group.append(test) test.update_metadata(metadata) - - for item in groups: - test_queue.put(item) - - processes = cls.process_count(kwargs["processes"], len(groups)) - cls.add_sentinal(test_queue, processes) - return test_queue, processes + return groups @classmethod def tests_by_group(cls, tests_by_type, **kwargs): @@ -481,10 +490,8 @@ class GroupedSource(TestSource): class SingleTestSource(TestSource): @classmethod - def make_queue(cls, tests_by_type, **kwargs): - mp = mpcontext.get_context() - test_queue = mp.Queue() - num_test_groups = 0 + def make_groups(cls, tests_by_type, **kwargs): + groups = [] for test_type, tests in tests_by_type.items(): processes = kwargs["processes"] queues = [deque([]) for _ in range(processes)] @@ -498,12 +505,8 @@ class SingleTestSource(TestSource): for item in zip(queues, itertools.repeat(test_type), metadatas): if len(item[0]) > 0: - test_queue.put(TestGroup(*item)) - num_test_groups += 1 - - processes = cls.process_count(kwargs["processes"], num_test_groups) - cls.add_sentinal(test_queue, processes) - return test_queue, processes + groups.append(TestGroup(*item)) + return groups @classmethod def tests_by_group(cls, tests_by_type, **kwargs): @@ -531,32 +534,21 @@ class PathGroupedSource(GroupedSource): class GroupFileTestSource(TestSource): @classmethod - def make_queue(cls, tests_by_type, **kwargs): - mp = mpcontext.get_context() - test_queue = mp.Queue() - num_test_groups = 0 - + def make_groups(cls, tests_by_type, **kwargs): + groups = [] for test_type, tests in tests_by_type.items(): tests_by_group = cls.tests_by_group({test_type: tests}, **kwargs) - ids_to_tests = {test.id: test for test in tests} - for group_name, test_ids in tests_by_group.items(): group_metadata = {"scope": group_name} group = deque() - for test_id in test_ids: test = ids_to_tests[test_id] group.append(test) test.update_metadata(group_metadata) - - test_queue.put(TestGroup(group, test_type, group_metadata)) - num_test_groups += 1 - - processes = cls.process_count(kwargs["processes"], num_test_groups) - cls.add_sentinal(test_queue, processes) - return test_queue, processes + groups.append(TestGroup(group, test_type, group_metadata)) + return groups @classmethod def tests_by_group(cls, tests_by_type, **kwargs): diff --git a/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html b/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html index 34561ee5fd0..7afbabcee0b 100644 --- a/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html +++ b/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html @@ -2,7 +2,7 @@ <html> <title>Test that video.rVFC callbacks started during an XRSession work.</title> <body> - <canvas/> + <canvas></canvas> </body> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html b/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html index 6a1bdae19ef..22c90f84605 100644 --- a/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html +++ b/tests/wpt/web-platform-tests/video-rvfc/request-video-frame-callback-webrtc.https.html @@ -9,8 +9,7 @@ <div id="log"></div> <div> <video id="local-view" muted autoplay="autoplay"></video> - <video id="remote-view" muted autoplay="autoplay"/> - </video> + <video id="remote-view" muted autoplay="autoplay"></video> </div> <!-- These files are in place when executing on W3C. --> diff --git a/tests/wpt/web-platform-tests/wai-aria/role/basic.html b/tests/wpt/web-platform-tests/wai-aria/role/basic.html index 5cb83864701..5fbe1fe2aa5 100644 --- a/tests/wpt/web-platform-tests/wai-aria/role/basic.html +++ b/tests/wpt/web-platform-tests/wai-aria/role/basic.html @@ -5,6 +5,16 @@ <script src="/resources/testdriver-vendor.js"></script> <script src="/resources/testdriver-actions.js"></script> +<!-- + +These tests should remain solid and passing in any implementation that supports get_computed_role. + +It uses a standard promise_test (rather than aria-util.js) to reduce other dependencies. + +If you're adding something you expect to fail in one or more implementations, you probably want a different file. + +--> + <div id='d' style='height: 100px; width: 100px' role="group" aria-label="test label"></div> <h1 id="h">test heading</h1> <script> diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html index 192317dda26..ea93cab96a6 100644 --- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html +++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-close.html @@ -69,7 +69,7 @@ function loadFile(url, callback) { // createBuffer, createPeriodicWave and decodeAudioData should work on a context // that has `state` == "closed" -async function tryLegalOpeerationsOnClosedContext(ctx) { +async function tryLegalOperationsOnClosedContext(ctx) { assert_equals(ctx.state, "closed", "The context is in closed state"); [ @@ -313,7 +313,7 @@ async function testAudioContext() { stateTracker.previous = ac.state; tryToCreateNodeOnClosedContext(ac); - await tryLegalOpeerationsOnClosedContext(ac); + await tryLegalOperationsOnClosedContext(ac); } async function testOfflineAudioContext() { @@ -360,7 +360,7 @@ async function testOfflineAudioContext() { o.onstatechange = afterRenderingFinished; tryToCreateNodeOnClosedContext(o); - await tryLegalOpeerationsOnClosedContext(o); + await tryLegalOperationsOnClosedContext(o); } async function testSuspendResumeEventLoop() { diff --git a/tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html b/tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html index 62f2bd934f1..81906d33b79 100644 --- a/tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html +++ b/tests/wpt/web-platform-tests/webcodecs/videoFrame-construction.crossOriginSource.sub.html @@ -7,10 +7,30 @@ <script src="/common/get-host-info.sub.js"></script> </head> <body> +<svg id="svg" width="200" height="200" xmlns="http://www.w3.org/2000/svg"> +</svg> <script> const SAMEORIGIN_BASE = get_host_info().HTTP_ORIGIN; const CROSSORIGIN_BASE = get_host_info().HTTP_NOTSAMESITE_ORIGIN; +async function getVideoFilename() +{ + const videoConfiguration = { + type: 'file', + video: { + contentType: 'video/mp4; codecs=avc1', + width: 640, + height: 480, + bitrate: 800, + framerate: 30 + } + }; + const result = await navigator.mediaCapabilities.decodingInfo(videoConfiguration); + if (result.supported) + return '/webcodecs/h264.mp4'; + return '/webcodecs/av1.mp4'; +} + const TESTS = [ // HTMLImageElement { @@ -68,6 +88,7 @@ const TESTS = [ factory: () => { return new Promise((resolve, reject) => { const image = document.createElementNS('http://www.w3.org/2000/svg','image'); + svg.appendChild(image); image.onload = () => resolve(image); image.onerror = reject; image.setAttribute('href', SAMEORIGIN_BASE + '/webcodecs/four-colors.jpg'); @@ -80,6 +101,7 @@ const TESTS = [ factory: () => { return new Promise((resolve, reject) => { const image = document.createElementNS('http://www.w3.org/2000/svg','image'); + svg.appendChild(image); image.onload = () => resolve(image); image.onerror = reject; image.setAttribute('href', CROSSORIGIN_BASE + '/webcodecs/four-colors.jpg'); @@ -92,6 +114,7 @@ const TESTS = [ factory: () => { return new Promise((resolve, reject) => { const image = document.createElementNS('http://www.w3.org/2000/svg','image'); + svg.appendChild(image); image.onload = () => resolve(image); image.onerror = reject; image.setAttribute('href', CROSSORIGIN_BASE + '/webcodecs/four-colors.jpg?pipe=header(Access-Control-Allow-Origin,*)'); @@ -104,6 +127,7 @@ const TESTS = [ factory: () => { return new Promise((resolve, reject) => { const image = document.createElementNS('http://www.w3.org/2000/svg','image'); + svg.appendChild(image); image.onload = () => resolve(image); image.onerror = reject; image.crossOrigin = 'anonymous'; @@ -120,11 +144,11 @@ const TESTS = [ { title: 'Test creating a VideoFrame with a same-origin HTMLVideoElement', factory: () => { - return new Promise((resolve, reject) => { + return new Promise(async (resolve, reject) => { const video = document.createElement('video'); on_frame_available(video, () => resolve(video)); video.onerror = reject; - video.src = SAMEORIGIN_BASE + '/webcodecs/av1.mp4'; + video.src = SAMEORIGIN_BASE + await getVideoFilename(); }); }, should_throw: false, @@ -132,11 +156,11 @@ const TESTS = [ { title: 'Test creating a VideoFrame with a cross-origin HTMLVideoElement', factory: () => { - return new Promise((resolve, reject) => { + return new Promise(async (resolve, reject) => { const video = document.createElement('video'); on_frame_available(video, () => resolve(video)); video.onerror = reject; - video.src = CROSSORIGIN_BASE + '/webcodecs/av1.mp4'; + video.src = CROSSORIGIN_BASE + await getVideoFilename(); }); }, should_throw: true, @@ -144,11 +168,11 @@ const TESTS = [ { title: 'Test creating a VideoFrame with a CORS enabled cross-origin HTMLVideoElement without setting crossorigin', factory: () => { - return new Promise((resolve, reject) => { + return new Promise(async (resolve, reject) => { const video = document.createElement('video'); on_frame_available(video, () => resolve(video)); video.onerror = reject; - video.src = CROSSORIGIN_BASE + '/webcodecs/av1.mp4?pipe=header(Access-Control-Allow-Origin,*)'; + video.src = CROSSORIGIN_BASE + await getVideoFilename() + '?pipe=header(Access-Control-Allow-Origin,*)'; }); }, should_throw: true, @@ -156,12 +180,12 @@ const TESTS = [ { title: 'Test creating a VideoFrame with a CORS enabled cross-origin HTMLVideoElement with crossorigin="anonymous"', factory: () => { - return new Promise((resolve, reject) => { + return new Promise(async (resolve, reject) => { const video = document.createElement('video'); on_frame_available(video, () => resolve(video)); video.onerror = reject; video.crossOrigin = 'anonymous'; - video.src = CROSSORIGIN_BASE + '/webcodecs/av1.mp4?pipe=header(Access-Control-Allow-Origin,*)'; + video.src = CROSSORIGIN_BASE + await getVideoFilename() +'?pipe=header(Access-Control-Allow-Origin,*)'; }); }, should_throw: false, diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py index 625cd3a6304..4e039d2a69c 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/__init__.py @@ -66,6 +66,7 @@ def int_interval(start: int, end: int) -> Callable[[Any], None]: return _ + def positive_int(actual: Any) -> None: assert isinstance(actual, int) and actual > 0 diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py index a887aeb8a45..e076885859e 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/__init__.py @@ -5,6 +5,7 @@ from .. import ( recursive_compare, ) + def assert_browsing_context( info, context, children=None, is_root=True, parent=None, url=None ): diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py index 066c34f3f28..924f0521dd7 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/__init__.py @@ -1,5 +1,6 @@ from webdriver.bidi.modules.script import ContextTarget + async def viewport_dimensions(bidi_session, context): """Get the dimensions of the context's viewport. diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py index f6e4c34d8d1..79cc5025ab9 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py @@ -6,7 +6,7 @@ from . import viewport_dimensions @pytest.mark.asyncio -async def test_capture(bidi_session, url, top_context, inline, compare_png_bidi): +async def test_capture(bidi_session, top_context, inline, compare_png_bidi): expected_size = await viewport_dimensions(bidi_session, top_context) await bidi_session.browsing_context.navigate( diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py index 9a0c74cbb85..080ef581b33 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/context_created/context_created.py @@ -1,5 +1,3 @@ -import asyncio - import pytest from webdriver.error import TimeoutException from webdriver.bidi.modules.script import ContextTarget @@ -19,7 +17,7 @@ async def test_not_unsubscribed(bidi_session): # Track all received browsingContext.contextCreated events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener(CONTEXT_CREATED_EVENT, on_event) @@ -38,7 +36,7 @@ async def test_new_context(bidi_session, wait_for_event, subscribe_events, type_ await subscribe_events([CONTEXT_CREATED_EVENT]) on_entry = wait_for_event(CONTEXT_CREATED_EVENT) - top_level_context = await bidi_session.browsing_context.create(type_hint="tab") + top_level_context = await bidi_session.browsing_context.create(type_hint=type_hint) context_info = await on_entry assert_browsing_context( @@ -96,7 +94,7 @@ async def test_evaluate_window_open_with_url(bidi_session, subscribe_events, wai async def test_navigate_creates_iframes(bidi_session, subscribe_events, top_context, test_page_multiple_frames): events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener(CONTEXT_CREATED_EVENT, on_event) @@ -144,7 +142,7 @@ async def test_navigate_creates_iframes(bidi_session, subscribe_events, top_cont async def test_navigate_creates_nested_iframes(bidi_session, subscribe_events, top_context, test_page_nested_frames): events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener(CONTEXT_CREATED_EVENT, on_event) @@ -202,7 +200,7 @@ async def test_subscribe_to_one_context( # Track all received browsingContext.contextCreated events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener(CONTEXT_CREATED_EVENT, on_event) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py index b527aef3827..1b854742eac 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/background.py @@ -1,13 +1,11 @@ import base64 import pytest +from tests.support.asserts import assert_pdf from tests.support.image import px_to_cm -from tests.support.pdf import assert_pdf - pytestmark = pytest.mark.asyncio - INLINE_BACKGROUND_RENDERING_TEST_CONTENT = """ <style> :root { @@ -20,14 +18,11 @@ BLACK_DOT_PNG = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2NgYGD WHITE_DOT_PNG = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P4DwQACfsD/Z8fLAAAAAAASUVORK5CYII=" -@pytest.mark.parametrize( - "print_with_background, expected_image", - [ - (None, WHITE_DOT_PNG), - (True, BLACK_DOT_PNG), - (False, WHITE_DOT_PNG), - ], -) +@pytest.mark.parametrize("print_with_background, expected_image", [ + (None, WHITE_DOT_PNG), + (True, BLACK_DOT_PNG), + (False, WHITE_DOT_PNG), +], ids=["default", "true", "false"]) async def test_background( bidi_session, top_context, @@ -39,14 +34,21 @@ async def test_background( ): page = inline(INLINE_BACKGROUND_RENDERING_TEST_CONTENT) await bidi_session.browsing_context.navigate( - context=top_context["context"], url=page, wait="complete" - ) + context=top_context["context"], url=page, wait="complete") print_value = await bidi_session.browsing_context.print( context=top_context["context"], background=print_with_background, - margin={"top": 0, "bottom": 0, "right": 0, "left": 0}, - page={"width": px_to_cm(1), "height": px_to_cm(1)}, + margin={ + "top": 0, + "bottom": 0, + "right": 0, + "left": 0 + }, + page={ + "width": px_to_cm(1), + "height": px_to_cm(1) + }, ) assert_pdf(print_value) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py index 114aeb62dcc..7193ecd0172 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py @@ -153,6 +153,7 @@ async def test_params_page_ranges_invalid_type(bidi_session, top_context, page_r context=top_context["context"], page_ranges=page_ranges ) + @pytest.mark.parametrize( "page_ranges", [ diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py index 4dee803bc8b..2e410d74302 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/orientation.py @@ -1,7 +1,7 @@ import pytest +from tests.support.asserts import assert_pdf from tests.support.image import png_dimensions -from tests.support.pdf import assert_pdf pytestmark = pytest.mark.asyncio diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py index b66fb9881e5..ef1c07d142f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page.py @@ -7,13 +7,13 @@ pytestmark = pytest.mark.asyncio "page, orientation, expected_dimensions", [ (None, "portrait", {"width": 21.59, "height": 27.94}), - ({}, "portrait",{"width": 21.59, "height": 27.94}), + ({}, "portrait", {"width": 21.59, "height": 27.94}), ({"width": 4.5}, "portrait", {"width": 4.5, "height": 27.94}), ({"height": 23}, "portrait", {"width": 21.59, "height": 23}), ({"width": 4.5, "height": 12}, "portrait", {"width": 4.5, "height": 12}), ({"height": 12}, "portrait", {"width": 21.59, "height": 12}), (None, "landscape", {"width": 27.94, "height": 21.59}), - ({}, "landscape",{"width": 27.94, "height": 21.59}), + ({}, "landscape", {"width": 27.94, "height": 21.59}), ({"width": 4.5}, "landscape", {"width": 27.94, "height": 4.5}), ({"height": 23}, "landscape", {"width": 23, "height": 21.59}), ({"width": 4.5, "height": 12}, "landscape", {"width": 12, "height": 4.5}), diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/__init__.py diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py index 0d6e9ea0e15..b54f26b8c96 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/errors/errors.py @@ -11,6 +11,6 @@ from webdriver.bidi.error import UnknownCommandException 'invalid module', 'invalid command name', ]) -async def test_unknown_command(bidi_session, send_blocking_command, module_name, command_name): +async def test_unknown_command(send_blocking_command, module_name, command_name): with pytest.raises(UnknownCommandException): await send_blocking_command(f"{module_name}.{command_name}", {}) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py index 99a95df1049..a5f038865c7 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/event_buffer.py @@ -1,5 +1,3 @@ -import asyncio - import pytest from . import assert_base_entry, create_log @@ -20,7 +18,7 @@ async def test_console_log_cached_messages( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -74,7 +72,7 @@ async def test_console_log_cached_message_after_refresh( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py index fe8a9b6b58a..f687f76c0e2 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/log/entry_added/javascript.py @@ -1,6 +1,3 @@ -import math -import time - import pytest from . import assert_javascript_entry, create_log @@ -9,7 +6,7 @@ from ... import int_interval @pytest.mark.asyncio async def test_types_and_values( - bidi_session, current_time, inline, top_context, wait_for_event + bidi_session, current_time, top_context, wait_for_event ): await bidi_session.session.subscribe(events=["log.entryAdded"]) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py index 39e5b5a3cfd..d1a9269729f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py @@ -126,7 +126,6 @@ async def test_request_headers( ): text_url = url(PAGE_EMPTY_TEXT) - network_events = await setup_network_test(events=["network.beforeRequestSent"]) events = network_events["network.beforeRequestSent"] @@ -153,7 +152,6 @@ async def test_request_cookies( ): text_url = url(PAGE_EMPTY_TEXT) - network_events = await setup_network_test(events=["network.beforeRequestSent"]) events = network_events["network.beforeRequestSent"] @@ -213,7 +211,6 @@ async def test_redirect(bidi_session, wait_for_event, url, fetch, setup_network_ f"/webdriver/tests/support/http_handlers/redirect.py?location={text_url}" ) - network_events = await setup_network_test(events=["network.beforeRequestSent"]) events = network_events["network.beforeRequestSent"] @@ -248,7 +245,6 @@ async def test_redirect_http_equiv( http_equiv_url = url(PAGE_REDIRECT_HTTP_EQUIV) redirected_url = url(PAGE_REDIRECTED_HTML) - network_events = await setup_network_test(events=["network.beforeRequestSent"]) events = network_events["network.beforeRequestSent"] diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py index 7f8f134af0d..f4af23bfd2f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/combined/network_events.py @@ -12,9 +12,7 @@ PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt" @pytest.mark.asyncio -async def test_same_request_id( - bidi_session, top_context, wait_for_event, url, setup_network_test, fetch -): +async def test_same_request_id(wait_for_event, url, setup_network_test, fetch): network_events = await setup_network_test( events=[ "network.beforeRequestSent", diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py index 1df23cda594..1043f52cb72 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed.py @@ -1,13 +1,10 @@ import asyncio -import json +from urllib.parse import quote import pytest -from webdriver.bidi.modules.script import ContextTarget - from tests.support.sync import AsyncPoll -from ... import any_int from .. import assert_response_event, HTTP_STATUS_AND_STATUS_TEXT PAGE_EMPTY_HTML = "/webdriver/tests/bidi/network/support/empty.html" @@ -26,7 +23,7 @@ async def test_subscribe_status(bidi_session, top_context, wait_for_event, url, # Track all received network.responseCompleted events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener( @@ -92,7 +89,7 @@ async def test_subscribe_status(bidi_session, top_context, wait_for_event, url, @pytest.mark.asyncio async def test_load_page_twice( - bidi_session, top_context, wait_for_event, url, fetch, setup_network_test + bidi_session, top_context, wait_for_event, url, setup_network_test ): html_url = url(PAGE_EMPTY_HTML) @@ -131,7 +128,7 @@ async def test_load_page_twice( ) @pytest.mark.asyncio async def test_response_status( - bidi_session, wait_for_event, url, fetch, setup_network_test, status, status_text + wait_for_event, url, fetch, setup_network_test, status, status_text ): status_url = url( f"/webdriver/tests/support/http_handlers/status.py?status={status}&nocache={RESPONSE_COMPLETED_EVENT}" @@ -163,7 +160,7 @@ async def test_response_status( @pytest.mark.asyncio async def test_response_headers( - bidi_session, wait_for_event, url, fetch, setup_network_test + wait_for_event, url, fetch, setup_network_test ): headers_url = url( "/webdriver/tests/support/http_handlers/headers.py?header=foo:bar&header=baz:biz" @@ -210,7 +207,7 @@ async def test_response_headers( ) @pytest.mark.asyncio async def test_response_mime_type_file( - bidi_session, url, wait_for_event, fetch, setup_network_test, page_url, mime_type + url, wait_for_event, fetch, setup_network_test, page_url, mime_type ): network_events = await setup_network_test(events=[RESPONSE_COMPLETED_EVENT]) events = network_events[RESPONSE_COMPLETED_EVENT] @@ -232,7 +229,7 @@ async def test_response_mime_type_file( @pytest.mark.asyncio -async def test_redirect(bidi_session, wait_for_event, url, fetch, setup_network_test): +async def test_redirect(bidi_session, url, fetch, setup_network_test): text_url = url(PAGE_EMPTY_TEXT) redirect_url = url( f"/webdriver/tests/support/http_handlers/redirect.py?location={text_url}" @@ -262,3 +259,68 @@ async def test_redirect(bidi_session, wait_for_event, url, fetch, setup_network_ # Check that both requests share the same requestId assert events[0]["request"]["request"] == events[1]["request"]["request"] + + +@pytest.mark.parametrize( + "protocol,parameters", + [ + ("http", ""), + ("https", ""), + ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"}), + ], + ids=["http", "https", "https coop"], +) +@pytest.mark.asyncio +async def test_redirect_document( + bidi_session, new_tab, url, setup_network_test, inline, protocol, parameters +): + network_events = await setup_network_test(events=[RESPONSE_COMPLETED_EVENT]) + events = network_events[RESPONSE_COMPLETED_EVENT] + + # The test starts on a url on the alternate domain, potentially with https + # and coop headers. + initial_url = inline( + "<div>bar</div>", + domain="alt", + protocol=protocol, + parameters=parameters, + ) + await bidi_session.browsing_context.navigate( + context=new_tab["context"], + url=initial_url, + wait="complete", + ) + + # Then navigate to a cross domain page, which will redirect back to the + # initial url. + redirect_url = url( + f"/webdriver/tests/support/http_handlers/redirect.py?location={quote(initial_url)}" + ) + await bidi_session.browsing_context.navigate( + context=new_tab["context"], + url=redirect_url, + wait="complete", + ) + + # Wait until we receive three events: + # - one for the initial request + # - two for the second navigation and its redirect + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 3) + assert len(events) == 3 + + expected_request = {"method": "GET", "url": initial_url} + assert_response_event( + events[0], expected_request=expected_request, redirect_count=0 + ) + expected_request = {"method": "GET", "url": redirect_url} + assert_response_event( + events[1], expected_request=expected_request, redirect_count=0 + ) + expected_request = {"method": "GET", "url": initial_url} + assert_response_event( + events[2], expected_request=expected_request, redirect_count=1 + ) + + # Check that the last 2 requests share the same request id + assert events[1]["request"]["request"] == events[2]["request"]["request"] diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py index eb344885087..ea1366cb967 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py @@ -10,8 +10,6 @@ PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt" @pytest.mark.asyncio async def test_cached( - bidi_session, - top_context, wait_for_event, url, fetch, @@ -69,8 +67,6 @@ async def test_cached( @pytest.mark.asyncio async def test_cached_redirect( bidi_session, - top_context, - wait_for_event, url, fetch, setup_network_test, @@ -144,7 +140,7 @@ async def test_cached_redirect( @pytest.mark.asyncio async def test_cached_revalidate( - bidi_session, top_context, wait_for_event, url, fetch, setup_network_test + bidi_session, wait_for_event, url, fetch, setup_network_test ): network_events = await setup_network_test( events=[ diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py index e3fd7a4d35c..2d6c1c83543 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started.py @@ -1,5 +1,4 @@ import asyncio -import json import pytest @@ -7,7 +6,6 @@ from webdriver.bidi.modules.script import ContextTarget from tests.support.sync import AsyncPoll -from ... import any_int from .. import assert_response_event, HTTP_STATUS_AND_STATUS_TEXT PAGE_EMPTY_HTML = "/webdriver/tests/bidi/network/support/empty.html" @@ -32,7 +30,7 @@ async def test_subscribe_status(bidi_session, top_context, wait_for_event, url, # Track all received network.responseStarted events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener( @@ -73,7 +71,7 @@ async def test_subscribe_status(bidi_session, top_context, wait_for_event, url, @pytest.mark.asyncio async def test_load_page_twice( - bidi_session, top_context, wait_for_event, url, fetch, setup_network_test + bidi_session, top_context, wait_for_event, url, setup_network_test ): html_url = url(PAGE_EMPTY_HTML) @@ -112,7 +110,7 @@ async def test_load_page_twice( ) @pytest.mark.asyncio async def test_response_status( - bidi_session, wait_for_event, url, fetch, setup_network_test, status, status_text + wait_for_event, url, fetch, setup_network_test, status, status_text ): status_url = url(f"/webdriver/tests/support/http_handlers/status.py?status={status}&nocache={RESPONSE_STARTED_EVENT}") @@ -142,7 +140,7 @@ async def test_response_status( @pytest.mark.asyncio async def test_response_headers( - bidi_session, wait_for_event, url, fetch, setup_network_test + wait_for_event, url, fetch, setup_network_test ): headers_url = url( "/webdriver/tests/support/http_handlers/headers.py?header=foo:bar&header=baz:biz" @@ -189,7 +187,7 @@ async def test_response_headers( ) @pytest.mark.asyncio async def test_response_mime_type_file( - bidi_session, url, wait_for_event, fetch, setup_network_test, page_url, mime_type + url, wait_for_event, fetch, setup_network_test, page_url, mime_type ): network_events = await setup_network_test(events=[RESPONSE_STARTED_EVENT]) events = network_events[RESPONSE_STARTED_EVENT] @@ -211,7 +209,7 @@ async def test_response_mime_type_file( @pytest.mark.asyncio -async def test_redirect(bidi_session, wait_for_event, url, fetch, setup_network_test): +async def test_redirect(bidi_session, url, fetch, setup_network_test): text_url = url(PAGE_EMPTY_TEXT) redirect_url = url(f"/webdriver/tests/support/http_handlers/redirect.py?location={text_url}") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py index 15373b7107b..6e0a7431c6b 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/network/response_started/response_started_cached.py @@ -10,8 +10,6 @@ PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt" @pytest.mark.asyncio async def test_cached( - bidi_session, - top_context, wait_for_event, url, fetch, @@ -69,8 +67,6 @@ async def test_cached( @pytest.mark.asyncio async def test_cached_redirect( bidi_session, - top_context, - wait_for_event, url, fetch, setup_network_test, @@ -152,7 +148,7 @@ async def test_cached_redirect( ) @pytest.mark.asyncio async def test_cached_revalidate( - bidi_session, top_context, wait_for_event, url, fetch, setup_network_test, method + wait_for_event, url, fetch, setup_network_test, method ): network_events = await setup_network_test( events=[ diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py index 378f6bed927..a2359b164eb 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py @@ -464,17 +464,6 @@ async def test_doctype_node( "sharedId": any_string, "value": { "childNodeCount": 1, - "children": [{ - "type": "node", - "sharedId": any_string, - "value": { - "attributes": {"id": "in-shadow-dom"}, - "childNodeCount": 1, - "localName": "div", - "namespaceURI": "http://www.w3.org/1999/xhtml", - "nodeType": 1 - } - }], "nodeType": 11 } } diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py index ae07b940d05..89ce95ed21d 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py @@ -452,17 +452,6 @@ async def test_doctype_node(bidi_session, get_test_page, top_context, expression "sharedId": any_string, "value": { "childNodeCount": 1, - "children": [{ - "type": "node", - "sharedId": any_string, - "value": { - "attributes": {"id": "in-shadow-dom"}, - "childNodeCount": 1, - "localName": "div", - "namespaceURI": "http://www.w3.org/1999/xhtml", - "nodeType": 1 - } - }], "nodeType": 11 } } diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py index 7118f77ea0f..d5872cd3ba5 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/new/connect.py @@ -3,6 +3,7 @@ import websockets import webdriver + # classic session to enable bidi capability manually # Intended to be the first test in this file @pytest.mark.asyncio @@ -12,11 +13,13 @@ async def test_websocket_url_connect(session): async with websockets.connect(websocket_url) as websocket: await websocket.send("Hello world!") + # test bidi_session send @pytest.mark.asyncio async def test_bidi_session_send(bidi_session, send_blocking_command): await send_blocking_command("session.status", {}) + # bidi session following a bidi session with a different capabilities # to test session recreation @pytest.mark.asyncio @@ -25,6 +28,7 @@ async def test_bidi_session_with_different_capability(bidi_session, send_blocking_command): await send_blocking_command("session.status", {}) + # classic session following a bidi session to test session # recreation # Intended to be the last test in this file to make sure diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py index eee102fee71..13d131bfec5 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/status/status.py @@ -4,8 +4,7 @@ import pytest # Check that session.status can be used. The actual values for the "ready" and # "message" properties are implementation specific. @pytest.mark.asyncio -async def test_bidi_session_status(bidi_session, send_blocking_command): +async def test_bidi_session_status(send_blocking_command): response = await send_blocking_command("session.status", {}) assert isinstance(response["ready"], bool) assert isinstance(response["message"], str) - diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py index 785542fee5b..111e7ef1031 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/contexts.py @@ -1,5 +1,3 @@ -import asyncio - import pytest from ... import create_console_api_message, recursive_compare @@ -19,7 +17,7 @@ async def test_subscribe_to_one_context( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -56,7 +54,7 @@ async def test_subscribe_to_one_context_twice( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -89,7 +87,7 @@ async def test_subscribe_to_one_context_and_then_to_all( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -166,7 +164,7 @@ async def test_subscribe_to_all_context_and_then_to_one_again( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -206,7 +204,7 @@ async def test_subscribe_to_top_context_with_iframes( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -254,7 +252,7 @@ async def test_subscribe_to_child_context( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py index ee00e35a646..2953aafe03f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/events.py @@ -1,8 +1,5 @@ -import asyncio - import pytest - # The basic use case of subscribing globally for a single event # is covered by tests for each event in the dedicated folders. @@ -15,7 +12,7 @@ async def test_subscribe_to_module(bidi_session, subscribe_events, wait_for_even # Track all received browsing context events in the events array events = [] - async def on_event(method, data): + async def on_event(method, _): events.append(method) remove_listener_contextCreated = bidi_session.add_event_listener( diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py index 005574b03ca..056f6827281 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/subscribe/invalid.py @@ -8,16 +8,16 @@ from ... import create_console_api_message @pytest.mark.asyncio -async def test_params_empty(bidi_session, send_blocking_command): +async def test_params_empty(send_blocking_command): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command("session.subscribe", {}) + await send_blocking_command("session.subscribe", {}) @pytest.mark.asyncio @pytest.mark.parametrize("value", [None, True, "foo", 42, {}]) -async def test_params_events_invalid_type(bidi_session, send_blocking_command, value): +async def test_params_events_invalid_type(send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command("session.subscribe", {"events": value}) + await send_blocking_command("session.subscribe", {"events": value}) @pytest.mark.asyncio @@ -30,14 +30,14 @@ async def test_params_events_empty(bidi_session): @pytest.mark.parametrize("value", [None, True, 42, [], {}]) async def test_params_events_value_invalid_type(send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command("session.subscribe", {"events": [value]}) + await send_blocking_command("session.subscribe", {"events": [value]}) @pytest.mark.asyncio @pytest.mark.parametrize("value", ["", "foo", "foo.bar", "log.invalidEvent"]) async def test_params_events_value_invalid_event_name(send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command("session.subscribe", {"events": [value]}) + await send_blocking_command("session.subscribe", {"events": [value]}) @pytest.mark.asyncio @@ -70,9 +70,9 @@ async def test_params_events_value_valid_and_invalid_event_names( @pytest.mark.asyncio @pytest.mark.parametrize("value", [True, "foo", 42, {}]) -async def test_params_contexts_invalid_type(bidi_session, send_blocking_command, value): +async def test_params_contexts_invalid_type(send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.subscribe", { "events": [], @@ -91,7 +91,7 @@ async def test_params_contexts_empty(bidi_session): @pytest.mark.parametrize("value", [None, True, 42, [], {}]) async def test_params_contexts_value_invalid_type(send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.subscribe", { "events": [], @@ -103,7 +103,7 @@ async def test_params_contexts_value_invalid_type(send_blocking_command, value): @pytest.mark.asyncio async def test_params_contexts_value_invalid_value(send_blocking_command): with pytest.raises(NoSuchFrameException): - response = await send_blocking_command( + await send_blocking_command( "session.subscribe", { "events": [], diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py index 98b119d82d1..ec38df3bede 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/contexts.py @@ -1,5 +1,3 @@ -import asyncio - import pytest from ... import create_console_api_message, recursive_compare @@ -25,7 +23,7 @@ async def test_unsubscribe_from_one_context( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -79,7 +77,7 @@ async def test_unsubscribe_from_top_context_with_iframes( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -119,7 +117,7 @@ async def test_unsubscribe_from_child_context( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) @@ -154,7 +152,7 @@ async def test_unsubscribe_from_one_context_after_navigation( # Track all received log.entryAdded events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py index 52a293fe1e4..72851876883 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/events.py @@ -1,5 +1,3 @@ -import asyncio - import pytest from webdriver.error import TimeoutException @@ -18,7 +16,7 @@ async def test_unsubscribe_from_module(bidi_session): # Track all received browsing context events in the events array events = [] - async def on_event(method, data): + async def on_event(_, data): events.append(data) remove_listener_contextCreated = bidi_session.add_event_listener( @@ -54,7 +52,7 @@ async def test_subscribe_to_module_unsubscribe_from_one_event( # Track all received browsing context events in the events array events = [] - async def on_event(method, data): + async def on_event(method, _): events.append(method) remove_listener_contextCreated = bidi_session.add_event_listener( diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py index 7fd25546e3f..e6f3050da31 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/session/unsubscribe/invalid.py @@ -8,14 +8,14 @@ from ... import create_console_api_message @pytest.mark.asyncio async def test_params_empty(bidi_session, send_blocking_command): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command("session.unsubscribe", {}) + await send_blocking_command("session.unsubscribe", {}) @pytest.mark.asyncio @pytest.mark.parametrize("value", [None, True, "foo", 42, {}]) async def test_params_events_invalid_type(bidi_session, send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command("session.unsubscribe", {"events": value}) + await send_blocking_command("session.unsubscribe", {"events": value}) @pytest.mark.asyncio @@ -28,14 +28,14 @@ async def test_params_events_empty(bidi_session): @pytest.mark.parametrize("value", [None, True, 42, [], {}]) async def test_params_events_value_invalid_type(send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command("session.unsubscribe", {"events": [value]}) + await send_blocking_command("session.unsubscribe", {"events": [value]}) @pytest.mark.asyncio @pytest.mark.parametrize("value", ["", "foo", "foo.bar"]) async def test_params_events_value_invalid_event_name(send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command("session.unsubscribe", {"events": [value]}) + await send_blocking_command("session.unsubscribe", {"events": [value]}) @pytest.mark.asyncio @@ -47,7 +47,7 @@ async def test_params_events_value_valid_and_invalid_event_name( # Try to unsubscribe from the valid and an invalid event with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", {"events": ["log.entryAdded", "some.invalidEvent"]} ) @@ -82,7 +82,7 @@ async def test_unsubscribe_from_one_event_and_then_from_module( # Try to unsubscribe from all events with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", {"events": ["browsingContext"]} ) @@ -95,7 +95,7 @@ async def test_unsubscribe_from_one_event_and_then_from_module( @pytest.mark.parametrize("value", [True, "foo", 42, {}]) async def test_params_contexts_invalid_type(bidi_session, send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", { "events": [], @@ -114,7 +114,7 @@ async def test_params_contexts_empty(bidi_session): @pytest.mark.parametrize("value", [None, True, 42, [], {}]) async def test_params_contexts_value_invalid_type(send_blocking_command, value): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", { "events": [], @@ -126,7 +126,7 @@ async def test_params_contexts_value_invalid_type(send_blocking_command, value): @pytest.mark.asyncio async def test_params_contexts_value_invalid_value(send_blocking_command): with pytest.raises(NoSuchFrameException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", { "events": [], @@ -144,7 +144,7 @@ async def test_params_contexts_value_valid_and_invalid_value( # Try to unsubscribe from the valid and an invalid context with pytest.raises(NoSuchFrameException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", {"events": ["log.entryAdded"], "contexts": [top_context["context"], "foo"]}, ) @@ -181,7 +181,7 @@ async def test_unsubscribe_from_closed_tab( # Try to unsubscribe from the closed context with pytest.raises(NoSuchFrameException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", {"events": ["log.entryAdded"], "contexts": [new_tab["context"]]}, ) @@ -190,7 +190,7 @@ async def test_unsubscribe_from_closed_tab( @pytest.mark.asyncio async def test_params_unsubscribe_globally_without_subscription(send_blocking_command): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", {"events": ["log.entryAdded"]} ) @@ -204,7 +204,7 @@ async def test_params_unsubscribe_globally_with_individual_subscription( # Try to unsubscribe globally with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", {"events": ["log.entryAdded"]} ) @@ -214,7 +214,7 @@ async def test_params_unsubscribe_from_one_context_without_subscription( send_blocking_command, top_context ): with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", {"events": ["log.entryAdded"], "contexts": [top_context["context"]]}, ) @@ -229,7 +229,7 @@ async def test_params_unsubscribe_from_one_context_with_global_subscription( # Try to unsubscribe from one context with pytest.raises(InvalidArgumentException): - response = await send_blocking_command( + await send_blocking_command( "session.unsubscribe", {"events": ["log.entryAdded"], "contexts": [top_context["context"]]}, ) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py index 62434323e0a..bc97a9ed615 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/back/back.py @@ -33,21 +33,35 @@ def test_no_browsing_history(session): assert_success(response) -def test_basic(session, inline): - url = inline("<div id=foo>") +# Capability needed as long as no valid certificate is available: +# https://github.com/web-platform-tests/wpt/issues/28847 +@pytest.mark.capabilities({"acceptInsecureCerts": True}) +@pytest.mark.parametrize("protocol,parameters", [ + ("http", ""), + ("https", ""), + ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"}) +], ids=["http", "https", "https coop"]) +def test_seen_nodes(session, get_test_page, protocol, parameters): + first_page = get_test_page(parameters=parameters, protocol=protocol) + second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt") + + session.url = first_page + session.url = second_page - session.url = url - session.url = inline("<div id=bar>") - element = session.find.css("#bar", all=False) + element = session.find.css("#custom-element", all=False) + shadow_root = element.shadow_root response = back(session) assert_success(response) + assert session.url == first_page + with pytest.raises(error.StaleElementReferenceException): - element.property("id") + element.name + with pytest.raises(error.DetachedShadowRootException): + shadow_root.find_element("css selector", "in-shadow-dom") - assert session.url == url - assert session.find.css("#foo", all=False) + session.find.css("#custom-element", all=False) def test_data_urls(session, inline): @@ -143,27 +157,3 @@ def test_removed_iframe(session, url, inline): assert_success(response) assert session.url == page - - -# Capability needed as long as no valid certificate is available: -# https://github.com/web-platform-tests/wpt/issues/28847 -@pytest.mark.capabilities({"acceptInsecureCerts": True}) -def test_cross_origin(session, url): - base_path = ("/webdriver/tests/support/html/subframe.html" + - "?pipe=header(Cross-Origin-Opener-Policy,same-origin") - first_page = url(base_path, protocol="https") - second_page = url(base_path, protocol="https", domain="alt") - - session.url = first_page - session.url = second_page - - elem = session.find.css("#delete", all=False) - - response = back(session) - assert_success(response) - - assert session.url == first_page - - with pytest.raises(error.NoSuchElementException): - elem.click() - elem = session.find.css("#delete", all=False) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py index 4d1c48235ca..96883ad3b64 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/navigate.py @@ -170,7 +170,7 @@ def test_link_from_nested_context_with_target(session, inline, iframe, target): @pytest.mark.capabilities({"acceptInsecureCerts": True}) def test_link_cross_origin(session, inline, url): base_path = ("/webdriver/tests/support/html/subframe.html" + - "?pipe=header(Cross-Origin-Opener-Policy,same-origin") + "?pipe=header(Cross-Origin-Opener-Policy,same-origin)") target_page = url(base_path, protocol="https", domain="alt") session.url = inline("<a href='{}'>click me</a>".format(target_page), protocol="https") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html b/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html index a9451ec82be..7c6eb6e6e2e 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/element_click/support/test_click_wdspec.html @@ -4,7 +4,7 @@ <head> <title>Test Element Click</title> <style> - div { padding:0px; margin: 0px; } + div { padding: 0; margin: 0; } #trackPointer { position: fixed; } #resultContainer { width: 600px; height: 60px; } .area { width: 100px; height: 50px; background-color: #ccc; } diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py index 5dfbf205947..2b57120a4cc 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_async_script/collections.py @@ -16,13 +16,17 @@ def test_arguments(session): def test_array(session): - response = execute_async_script(session, """ - let resolve = arguments[0]; - resolve([1, 2]); - """) + response = execute_async_script( + session, "arguments[0]([1, 2])") assert_success(response, [1, 2]) +def test_array_in_array(session): + response = execute_async_script( + session, "const arr = [1]; arguments[0]([arr, arr])") + assert_success(response, [[1], [1]]) + + def test_dom_token_list(session, inline): session.url = inline("""<div class="no cheese">foo</div>""") element = session.find.css("div", all=False) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py index ec5d5ee1e32..939eb8916fb 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/execute_script/collections.py @@ -19,6 +19,11 @@ def test_array(session): assert_success(response, [1, 2]) +def test_array_in_array(session): + response = execute_script(session, "const arr = [1]; return [arr, arr]") + assert_success(response, [[1], [1]]) + + def test_dom_token_list(session, inline): session.url = inline("""<div class="no cheese">foo</div>""") element = session.find.css("div", all=False) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py index f27be403f9e..7945f188309 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/forward/forward.py @@ -61,6 +61,38 @@ def test_no_browsing_history(session, inline): assert element.property("id") == "foo" +# Capability needed as long as no valid certificate is available: +# https://github.com/web-platform-tests/wpt/issues/28847 +@pytest.mark.capabilities({"acceptInsecureCerts": True}) +@pytest.mark.parametrize("protocol,parameters", [ + ("http", ""), + ("https", ""), + ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"}) +], ids=["http", "https", "https coop"]) +def test_seen_nodes(session, get_test_page, protocol, parameters): + first_page = get_test_page(parameters=parameters, protocol=protocol) + second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt") + + session.url = first_page + session.url = second_page + session.back() + + element = session.find.css("#custom-element", all=False) + shadow_root = element.shadow_root + + response = forward(session) + assert_success(response) + + assert session.url == second_page + + with pytest.raises(error.StaleElementReferenceException): + element.name + with pytest.raises(error.DetachedShadowRootException): + shadow_root.find_element("css selector", "in-shadow-dom") + + session.find.css("#custom-element", all=False) + + def test_data_urls(session, inline): test_pages = [ inline("<p id=1>"), @@ -168,28 +200,3 @@ def test_removed_iframe(session, url, inline): assert_success(response) assert session.url == page - - -# Capability needed as long as no valid certificate is available: -# https://github.com/web-platform-tests/wpt/issues/28847 -@pytest.mark.capabilities({"acceptInsecureCerts": True}) -def test_cross_origin(session, url): - base_path = ("/webdriver/tests/support/html/subframe.html" + - "?pipe=header(Cross-Origin-Opener-Policy,same-origin") - first_page = url(base_path, protocol="https") - second_page = url(base_path, protocol="https", domain="alt") - - session.url = first_page - session.url = second_page - session.back() - - elem = session.find.css("#delete", all=False) - - response = forward(session) - assert_success(response) - - assert session.url == second_page - - with pytest.raises(error.NoSuchElementException): - elem.click() - elem = session.find.css("#delete", all=False) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py index 68441da5ef8..50ff0d306b5 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/get_window_handle/get.py @@ -28,7 +28,7 @@ def test_basic(session): @pytest.mark.capabilities({"acceptInsecureCerts": True}) def test_navigation_with_coop_headers(session, url): base_path = ("/webdriver/tests/support/html/subframe.html" + - "?pipe=header(Cross-Origin-Opener-Policy,same-origin") + "?pipe=header(Cross-Origin-Opener-Policy,same-origin)") session.url = url(base_path, protocol="https") response = get_window_handle(session) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py index d61377af275..a9ff3f6a058 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/navigate_to/navigate.py @@ -39,45 +39,38 @@ def test_no_browsing_context(session, closed_frame, inline): assert session.url == doc -def test_basic(session, inline): - url = inline("<div id=foo>") - - session.url = inline("<div id=bar>") - element = session.find.css("#bar", all=False) - - response = navigate_to(session, url) - assert_success(response) - - with pytest.raises(error.StaleElementReferenceException): - element.property("id") - - assert session.url == url - assert session.find.css("#foo", all=False) - - -# Capability needed as long as no valid certificate is available: -# https://github.com/web-platform-tests/wpt/issues/28847 -@pytest.mark.capabilities({"acceptInsecureCerts": True}) -def test_cross_origin(session, inline, url): - base_path = ("/webdriver/tests/support/html/subframe.html" + - "?pipe=header(Cross-Origin-Opener-Policy,same-origin") - first_page = url(base_path, protocol="https") - second_page = url(base_path, protocol="https", domain="alt") +@pytest.mark.parametrize("protocol,parameters", [ + ("http", ""), + ("https", ""), + ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"}) +], ids=[ + "http", + "https", + "https coop" +]) +def test_seen_nodes(session, get_test_page, protocol, parameters): + first_page = get_test_page(parameters=parameters, protocol=protocol) + second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt") response = navigate_to(session, first_page) assert_success(response) assert session.url == first_page - elem = session.find.css("#delete", all=False) + + element = session.find.css("#custom-element", all=False) + shadow_root = element.shadow_root response = navigate_to(session, second_page) assert_success(response) assert session.url == second_page - with pytest.raises(error.NoSuchElementException): - elem.click() - session.find.css("#delete", all=False) + with pytest.raises(error.StaleElementReferenceException): + element.name + with pytest.raises(error.DetachedShadowRootException): + shadow_root.find_element("css selector", "in-shadow-dom") + + session.find.css("#custom-element", all=False) @pytest.mark.capabilities({"pageLoadStrategy": "eager"}) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py index 22b392db2e3..4f2f85980ba 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/background.py @@ -2,9 +2,8 @@ import base64 import pytest -from tests.support.asserts import assert_success +from tests.support.asserts import assert_pdf, assert_success from tests.support.image import px_to_cm -from tests.support.pdf import assert_pdf from . import do_print diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py index c2afacf94fb..107cf380df6 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/orientation.py @@ -1,8 +1,7 @@ import pytest -from tests.support.asserts import assert_success +from tests.support.asserts import assert_pdf, assert_success from tests.support.image import png_dimensions -from tests.support.pdf import assert_pdf from . import do_print diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py index f3fe50bd92d..aec7769c3e8 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/printcmd.py @@ -3,8 +3,7 @@ from base64 import decodebytes import pytest -from tests.support.asserts import assert_error, assert_success -from tests.support.pdf import assert_pdf +from tests.support.asserts import assert_error, assert_pdf, assert_success from . import do_print diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py index fb13ec2d65a..ade1c38a5c4 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/print/user_prompts.py @@ -1,8 +1,7 @@ # META: timeout=long import pytest -from tests.support.asserts import assert_dialog_handled, assert_error, assert_success -from tests.support.pdf import assert_pdf +from tests.support.asserts import assert_dialog_handled, assert_error, assert_pdf, assert_success from . import do_print diff --git a/tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py b/tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py index b3647130c77..93a71bbf8b1 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/classic/refresh/refresh.py @@ -39,20 +39,31 @@ def test_no_browsing_context(session, closed_frame, inline): assert session.find.css("#foo", all=False) -def test_basic(session, inline): - url = inline("<div id=foo>") - - session.url = url - element = session.find.css("#foo", all=False) +# Capability needed as long as no valid certificate is available: +# https://github.com/web-platform-tests/wpt/issues/28847 +@pytest.mark.capabilities({"acceptInsecureCerts": True}) +@pytest.mark.parametrize("protocol,parameters", [ + ("http", ""), + ("https", ""), + ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"}) +], ids=["http", "https", "https coop"]) +def test_seen_nodes(session, get_test_page, protocol, parameters): + page = get_test_page(parameters=parameters, protocol=protocol) + + session.url = page + + element = session.find.css("#custom-element", all=False) + shadow_root = element.shadow_root response = refresh(session) assert_success(response) with pytest.raises(error.StaleElementReferenceException): - element.property("id") + element.name + with pytest.raises(error.DetachedShadowRootException): + shadow_root.find_element("css selector", "in-shadow-dom") - assert session.url == url - assert session.find.css("#foo", all=False) + session.find.css("#custom-element", all=False) def test_dismissed_beforeunload(session, inline): diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py index a7b33cc15f4..0535edd2142 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/__init__.py @@ -1,7 +1,5 @@ import sys -from .merge_dictionaries import merge_dictionaries - platform_name = { # From Python version 3.3: On Linux, sys.platform doesn't contain the major version anymore. # It is always 'linux'. See diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py index f5812bc8932..04bd1993316 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py @@ -211,6 +211,13 @@ def assert_move_to_coordinates(point, target, events): assert e["target"] == target +def assert_pdf(value): + data = decodebytes(value.encode()) + + assert data.startswith(b"%PDF-"), "Decoded data starts with the PDF signature" + assert data.endswith(b"%%EOF\n"), "Decoded data ends with the EOF flag" + + def assert_png(screenshot): """Test that screenshot is a Base64 encoded PNG file, or a bytestring representing a PNG. diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py index eca9fda4bef..ba166ae8da8 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures.py @@ -280,7 +280,8 @@ def get_test_page(iframe, inline): frame_doc=None, shadow_doc=None, nested_shadow_dom=False, - shadow_root_mode="open" + shadow_root_mode="open", + **kwargs ): if frame_doc is None: frame_doc = """<div id="in-frame"><input type="checkbox"/></div>""" @@ -355,9 +356,10 @@ def get_test_page(iframe, inline): </script>""" if as_frame: - return inline(iframe(page_data)) + iframe_data = iframe(page_data, **kwargs) + return inline(iframe_data, **kwargs) else: - return inline(page_data) + return inline(page_data, **kwargs) return get_test_page diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py index 39ed3a5bbfd..6e53bf7c243 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py @@ -1,7 +1,7 @@ import base64 +from tests.support.asserts import assert_pdf from tests.support.image import cm_to_px, png_dimensions, ImageDifference -from tests.support.pdf import assert_pdf from typing import Any, Mapping import pytest @@ -207,8 +207,8 @@ def assert_pdf_dimensions(render_pdf_to_png_bidi): png = await render_pdf_to_png_bidi(pdf) width, height = png_dimensions(png) - assert cm_to_px(expected_dimensions["height"]) == height - assert cm_to_px(expected_dimensions["width"]) == width + assert (height - 1) <= cm_to_px(expected_dimensions["height"]) <= (height + 1) + assert (width - 1) <= cm_to_px(expected_dimensions["width"]) <= (width + 1) return assert_pdf_dimensions diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py index 03be83a20e1..1533dca2bd9 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py @@ -8,18 +8,18 @@ from tests.support.sync import Poll @pytest.fixture -def add_event_listeners(session): +def add_event_listeners(): """Register listeners for tracked events on element.""" def add_event_listeners(element, tracked_events): element.session.execute_script(""" - let element = arguments[0]; - let trackedEvents = arguments[1]; + const element = arguments[0]; + const trackedEvents = arguments[1]; if (!("events" in window)) { window.events = []; } - for (var i = 0; i < trackedEvents.length; i++) { + for (let i = 0; i < trackedEvents.length; i++) { element.addEventListener(trackedEvents[i], function (event) { window.events.push(event.type); }); diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py index 45f4f4d2392..c0d0cb11dc4 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py @@ -122,8 +122,9 @@ def deep_update(source, overrides): def document_dimensions(session): return tuple(session.execute_script(""" - let rect = document.documentElement.getBoundingClientRect(); - return [rect.width, rect.height]; + const {devicePixelRatio} = window; + const {width, height} = document.documentElement.getBoundingClientRect(); + return [width * devicePixelRatio, height * devicePixelRatio]; """)) @@ -206,14 +207,6 @@ def is_fullscreen(session): """) -def document_dimensions(session): - return tuple(session.execute_script(""" - let {devicePixelRatio} = window; - let {width, height} = document.documentElement.getBoundingClientRect(); - return [width * devicePixelRatio, height * devicePixelRatio]; - """)) - - def screen_size(session): """Returns the available width/height size of the screen.""" return tuple(session.execute_script(""" @@ -236,6 +229,7 @@ def available_screen_size(session): ]; """)) + def filter_dict(source, d): """Filter `source` dict to only contain same keys as `d` dict. @@ -268,4 +262,3 @@ def wait_for_new_handle(session, handles_before): message="No new window has been opened") return wait.until(find_new_handle) - diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html b/tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html index d0408480daf..6f1fadb64be 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/html/render.html @@ -27,7 +27,7 @@ function compareImgData(img1, img2) { let idx = 0; while (idx < img1Data.length) { let maxDifference = 0; - for (let channel=0; channel<4; channel++) { + for (let channel = 0; channel < 4; channel++) { const difference = Math.abs(img1Data[idx + channel] - img2Data[idx + channel]); if (difference > maxDifference) { maxDifference = difference diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html index 0253add9607..40e4b5aa37c 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions.html @@ -4,7 +4,7 @@ <head> <title>Test Actions</title> <style> - div { padding:0px; margin: 0px; } + div { padding: 0; margin: 0; } #trackPointer { position: fixed; } #resultContainer { width: 600px; height: 60px; } .area { width: 100px; height: 50px; background-color: #ccc; } diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html index f1fd9b2da3f..dd169f0c5bc 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_pointer.html @@ -4,7 +4,7 @@ <head> <title>Test Actions</title> <style> - div { padding:0px; margin: 0px; } + div { padding: 0; margin: 0; } #trackPointer { position: fixed; } #resultContainer { width: 600px; height: 60px; } .area { width: 100px; height: 50px; background-color: #ccc; } diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html index b6e281e5818..cc9278954a0 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/html/test_actions_scroll.html @@ -4,7 +4,7 @@ <head> <title>Test Actions</title> <style> - div { padding:0px; margin: 0px; } + div { padding: 0; margin: 0; } .area { width: 100px; height: 50px; background-color: #ccc; } #scrollable { width: 100px; height: 100px; overflow: scroll; } #scrollContent { width: 600px; height: 1000px; background-color: blue; } diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py index 62067dd1667..db247af610a 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/authentication.py @@ -1,7 +1,7 @@ from urllib.parse import urlencode -def basic_authentication(url, username=None, password=None, protocol="http"): +def basic_authentication(url, protocol="http"): query = {} return url("/webdriver/tests/support/http_handlers/authentication.py", diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py index ddae62dc6af..71c4901c445 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/http_handlers/headers.py @@ -11,8 +11,8 @@ def main(request, response): try: headers = request.GET.get_list(b"header") for header in headers: - header_parts = header.split(b":") - response.headers.set(header_parts[0], header_parts[1]) + header_parts = header.split(b":") + response.headers.set(header_parts[0], header_parts[1]) except ValueError: pass diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py b/tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py index 242dc9c9188..a936d7f1f04 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/http_request.py @@ -5,21 +5,21 @@ from http.client import HTTPConnection class HTTPRequest(object): - def __init__(self, host, port): + def __init__(self, host: str, port: int): self.host = host self.port = port - def head(self, path): + def head(self, path: str): return self._request("HEAD", path) - def get(self, path): + def get(self, path: str): return self._request("GET", path) - def post(self, path, body): + def post(self, path: str, body): return self._request("POST", path, body) @contextlib.contextmanager - def _request(self, method, path, body=None): + def _request(self, method: str, path: str, body=None): payload = None if body is not None: diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/image.py b/tests/wpt/web-platform-tests/webdriver/tests/support/image.py index 055ebe71fbc..9597b05a22f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/image.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/image.py @@ -1,4 +1,5 @@ import struct +from typing import NamedTuple, Tuple from tests.support.asserts import assert_png @@ -7,31 +8,28 @@ PPI = 96 inch_in_cm = 2.54 -def cm_to_px(cm): +def cm_to_px(cm: float) -> float: return round(cm * PPI / inch_in_cm) -def px_to_cm(px): +def px_to_cm(px: float) -> float: return px * inch_in_cm / PPI -def png_dimensions(screenshot): +def png_dimensions(screenshot) -> Tuple[int, int]: image = assert_png(screenshot) width, height = struct.unpack(">LL", image[16:24]) return int(width), int(height) -class ImageDifference: - """Summary of the pixel-level differences between two images. +class ImageDifference(NamedTuple): + """Summary of the pixel-level differences between two images.""" - :param total_pixels: The total number of pixel differences between the images - :param max_difference: The maximum difference between any corresponding color channels across - all pixels of the image. - """ + """The total number of pixel differences between the images""" + total_pixels: int - def __init__(self, total_pixels, max_difference): - self.total_pixels = total_pixels - self.max_difference = max_difference + """The maximum difference between any corresponding color channels across all pixels of the image""" + max_difference: int - def equal(self): + def equal(self) -> bool: return self.total_pixels == 0 diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py b/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py index 494ca74f926..a0a8d3881ef 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py @@ -1,5 +1,6 @@ """Helpers for inlining extracts of documents in tests.""" +from typing import Literal, Optional from urllib.parse import urlencode @@ -25,14 +26,22 @@ MIME_TYPES = { } -def build_inline(build_url, src, doctype="html", mime=None, charset=None, **kwargs): +def build_inline(build_url, src, + doctype: Literal["html", "xhtml", "xml"] = "html", + mime: Optional[str] = None, charset: Optional[str] = None, + parameters = None, **kwargs): if mime is None: mime = MIME_TYPES[doctype] if charset is None: charset = "UTF-8" + if parameters is None: + parameters = {} + doc = BOILERPLATES[doctype].format(charset=charset, src=src) query = {"doc": doc, "mime": mime, "charset": charset} + query.update(parameters) + return build_url( "/webdriver/tests/support/inline.py", query=urlencode(query), diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/keys.py b/tests/wpt/web-platform-tests/webdriver/tests/support/keys.py index e835a6a596f..c353644dddf 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/keys.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/keys.py @@ -17,11 +17,10 @@ """The Keys implementation.""" -import sys - from collections import OrderedDict from inspect import getmembers + class Keys(object): """ Set of special keys codes. diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/merge_dictionaries.py b/tests/wpt/web-platform-tests/webdriver/tests/support/merge_dictionaries.py deleted file mode 100644 index 72f1cab352d..00000000000 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/merge_dictionaries.py +++ /dev/null @@ -1,42 +0,0 @@ -def merge_dictionaries(first, second): - """Given two dictionaries, create a third that defines all specified - key/value pairs. This merge_dictionaries is performed "deeply" on any nested - dictionaries. If a value is defined for the same key by both dictionaries, - an exception will be raised.""" - result = dict(first) - - for key, value in second.items(): - if key in result and result[key] != value: - if isinstance(result[key], dict) and isinstance(value, dict): - result[key] = merge_dictionaries(result[key], value) - elif result[key] != value: - raise TypeError("merge_dictionaries: refusing to overwrite " + - "attribute: `%s`" % key) - else: - result[key] = value - - return result - -if __name__ == "__main__": - assert merge_dictionaries({}, {}) == {} - assert merge_dictionaries({}, {"a": 23}) == {"a": 23} - assert merge_dictionaries({"a": 23}, {"b": 45}) == {"a": 23, "b": 45} - - e = None - try: - merge_dictionaries({"a": 23}, {"a": 45}) - except Exception as _e: - e = _e - assert isinstance(e, TypeError) - - assert merge_dictionaries({"a": 23}, {"a": 23}) == {"a": 23} - - assert merge_dictionaries({"a": {"b": 23}}, {"a": {"c": 45}}) == {"a": {"b": 23, "c": 45}} - assert merge_dictionaries({"a": {"b": 23}}, {"a": {"b": 23}}) == {"a": {"b": 23}} - - e = None - try: - merge_dictionaries({"a": {"b": 23}}, {"a": {"b": 45}}) - except Exception as _e: - e = _e - assert isinstance(e, TypeError) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/pdf.py b/tests/wpt/web-platform-tests/webdriver/tests/support/pdf.py deleted file mode 100644 index 573ec1af4b2..00000000000 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/pdf.py +++ /dev/null @@ -1,8 +0,0 @@ -from base64 import decodebytes - - -def assert_pdf(value): - data = decodebytes(value.encode()) - - assert data.startswith(b"%PDF-"), "Decoded data starts with the PDF signature" - assert data.endswith(b"%%EOF\n"), "Decoded data ends with the EOF flag" diff --git a/tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html b/tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html index f2e20846234..b47cd30eaf4 100644 --- a/tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html +++ b/tests/wpt/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html @@ -9,8 +9,7 @@ <div id="log"></div> <div> <video id="local-view" muted autoplay="autoplay"></video> - <video id="remote-view" muted autoplay="autoplay"/> - </video> + <video id="remote-view" muted autoplay="autoplay"></video> </div> <!-- These files are in place when executing on W3C. --> diff --git a/tests/wpt/web-platform-tests/webrtc/simplecall.https.html b/tests/wpt/web-platform-tests/webrtc/simplecall.https.html index dbf6b9a5083..28c0c5c38bb 100644 --- a/tests/wpt/web-platform-tests/webrtc/simplecall.https.html +++ b/tests/wpt/web-platform-tests/webrtc/simplecall.https.html @@ -9,8 +9,7 @@ <div id="log"></div> <div> <video id="local-view" muted autoplay="autoplay"></video> - <video id="remote-view" muted autoplay="autoplay"/> - </video> + <video id="remote-view" muted autoplay="autoplay"></video> </div> <!-- These files are in place when executing on W3C. --> diff --git a/tests/wpt/web-platform-tests/websockets/handlers/receive-many-with-backpressure_wsh.py b/tests/wpt/web-platform-tests/websockets/handlers/receive-many-with-backpressure_wsh.py new file mode 100644 index 00000000000..8e35beebdf5 --- /dev/null +++ b/tests/wpt/web-platform-tests/websockets/handlers/receive-many-with-backpressure_wsh.py @@ -0,0 +1,23 @@ +# Sleep to build backpressure, receive messages, and send back their length. +# Used by send-many-64K-messages-with-backpressure.any.js. + + +import time + + +def web_socket_do_extra_handshake(request): + # Compression will interfere with backpressure, so disable the + # permessage-delate extension. + request.ws_extension_processors = [] + + +def web_socket_transfer_data(request): + while True: + # Don't read the message immediately, so backpressure can build. + time.sleep(0.1) + line = request.ws_stream.receive_message() + if line is None: + return + # Send back the size of the message as acknowledgement that it was + # received. + request.ws_stream.send_message(str(len(line)), binary=False) diff --git a/tests/wpt/web-platform-tests/websockets/send-many-64K-messages-with-backpressure.any.js b/tests/wpt/web-platform-tests/websockets/send-many-64K-messages-with-backpressure.any.js new file mode 100644 index 00000000000..e93231f2df9 --- /dev/null +++ b/tests/wpt/web-platform-tests/websockets/send-many-64K-messages-with-backpressure.any.js @@ -0,0 +1,49 @@ +// META: global=window,worker +// META: script=constants.sub.js +// META: timeout=long +// META: variant= +// META: variant=?wss +// META: variant=?wpt_flags=h2 + +// This is a repro for Chromium bug https://crbug.com/1286909. It will timeout +// if the bug is present. + +// With 0.1 second server-side delay per message, sending 50 messages will take +// around 5 seconds. +const MESSAGES_TO_SEND = 50; + +// 65536 is the magic number that triggers the bug, as it precisely fills the +// mojo pipe. +const MESSAGE_SIZE = 65536; + +promise_test(async t => { + const message = new Uint8Array(MESSAGE_SIZE); + const ws = + new WebSocket(SCHEME_DOMAIN_PORT + '/receive-many-with-backpressure'); + let opened = false; + ws.onopen = t.step_func(() => { + opened = true; + for (let i = 0; i < MESSAGES_TO_SEND; i++) { + ws.send(message); + } + }); + let responsesReceived = 0; + ws.onmessage = t.step_func(({data}) => { + assert_equals(data, String(MESSAGE_SIZE), 'size must match'); + if (++responsesReceived == MESSAGES_TO_SEND) { + ws.close(); + } + }); + let resolvePromise; + const promise = new Promise(resolve => { + resolvePromise = resolve; + }); + ws.onclose = t.step_func(({wasClean}) => { + assert_true(opened, 'connection should have been opened'); + assert_true(wasClean, 'close should be clean'); + resolvePromise(); + }); + return promise; +}, + `sending ${MESSAGES_TO_SEND} messages of size ${MESSAGE_SIZE} with ` + + 'backpressure applied should not hang'); diff --git a/tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html b/tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html index 9146dd88f05..e47677c8e2c 100644 --- a/tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html +++ b/tests/wpt/web-platform-tests/webxr/webxr_permissions_policy.https.html @@ -3,7 +3,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="resources/webxr_util.js"></script> <script src="resources/webxr_test_constants.js"></script> -<canvas /> +<canvas></canvas> <script> xr_promise_test( diff --git a/tests/wpt/web-platform-tests/window-placement/META.yml b/tests/wpt/web-platform-tests/window-management/META.yml index 2c6d60f4e71..74f926f230f 100644 --- a/tests/wpt/web-platform-tests/window-placement/META.yml +++ b/tests/wpt/web-platform-tests/window-management/META.yml @@ -1,4 +1,4 @@ -spec: https://w3c.github.io/window-placement/ +spec: https://w3c.github.io/window-management/ suggested_reviewers: - michaelwasserman - bradtriebwasser diff --git a/tests/wpt/web-platform-tests/window-management/README.md b/tests/wpt/web-platform-tests/window-management/README.md new file mode 100644 index 00000000000..e96a8a00b8b --- /dev/null +++ b/tests/wpt/web-platform-tests/window-management/README.md @@ -0,0 +1,7 @@ +# Window Management Testing + +[Window Management Specification](https://w3c.github.io/window-management/) + +The tests in this directory require at least 2 displays on the host machine to +yield meaningful results. An example configuration is 2 displays with 1920x1080 +resolution arranged horizontally (primary on the left, secondary on the right). diff --git a/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-companion.tentative.https.html b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-companion.tentative.https.html new file mode 100644 index 00000000000..a4b09f3d5a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-companion.tentative.https.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<meta name="timeout" content="long"> +<!-- user agents are not required to support open features other than `noopener` + and on some platforms position and size features don't make sense --> +<meta name="flags" content="may"> +<title>Window Management test: Fullscreen Companion Window</title> +<link rel="help" href="https://w3c.github.io/window-management/"> +Tests use of multi-screen details to enter fullscreen and open a 'companion' +popup window in the same user activation.<br> +The host device must have 2+ screens to yield meaningful results.<br><br> +<button id="closeButton" onclick="closePopups">Close popups</button><br> +<input id="autoClose" type="checkbox" checked=true>Auto-close popups</input> +<ul id="list"></ul> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/helpers.js"></script> +<script> +'use strict'; + +let popups = []; +function closePopups() { + popups.forEach(p => p.close()); + popups = []; +} + +promise_test(async setUpTest => { + await setUpWindowManagement(setUpTest); + const screens = window.screenDetails.screens; + const originalScreen = window.screenDetails.currentScreen; + for (const [i, screenA] of screens.entries()) { + const screenB = screens[(i + 1) % screens.length]; + let name = `Fullscreen on '${screenA.label}'; popup on '${screenB.label}'`; + promise_test(async test => { + await buttonClick(test, name); + await document.documentElement.requestFullscreen({ screen: screenA }); + await assertWindowOnScreen(window, screenA); + // Expect the popup to open if multiple screens are available. + const assertPlacement = screens.length > 1; + const popup = await openPopupOnScreen(screenB, assertPlacement); + if (!!popup) + popups.push(popup); + // Exit fullscreen; `window` should move back to `originalScreen`. + await buttonClick(test, `Exit fullscreen`); + await document.exitFullscreen(); + await assertWindowOnScreen(window, originalScreen); + assert_false(!!document.fullscreenElement); + if (autoClose.checked) + closePopups(); + }, name); + } +}, 'Enter fullscreen and open a popup from one transient activation.'); +</script> diff --git a/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-enter.tentative.https.html b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-enter.tentative.https.html new file mode 100644 index 00000000000..b67907807b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-enter.tentative.https.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta name="timeout" content="long"> +<title>Window Management test: target-screen element.requestFullscreen()</title> +<link rel="help" href="https://w3c.github.io/window-management/"> +Tests use of multi-screen details to enter fullscreen on specific screens.<br> +The host device must have 2+ screens to yield meaningful results.<br><br> +<ul id="list"></ul> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/helpers.js"></script> +<script> +'use strict'; + +promise_test(async setUpTest => { + await setUpWindowManagement(setUpTest); + const originalScreen = window.screenDetails.currentScreen; + for (const s of window.screenDetails.screens) { + const name = `Request fullscreen on '${s.label}`; + await promise_test(async test => { + // Request fullscreen on screen `s`; `window` should move there. + await buttonClick(test, name); + await document.documentElement.requestFullscreen({ screen: s }); + await assertWindowOnScreen(window, s); + assert_true(!!document.fullscreenElement); + + // Exit fullscreen; `window` should move back to `originalScreen`. + await buttonClick(test, `Exit fullscreen`); + await document.exitFullscreen(); + await assertWindowOnScreen(window, originalScreen); + assert_false(!!document.fullscreenElement); + }, name); + } +}, 'Use multi-screen details to enter fullscreen on specific screens'); +</script> diff --git a/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-move.tentative.https.html b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-move.tentative.https.html new file mode 100644 index 00000000000..b91ee4cdc4b --- /dev/null +++ b/tests/wpt/web-platform-tests/window-management/multi-screen-fullscreen-move.tentative.https.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<meta name="timeout" content="long"> +<title>Window Management test: target-screen element.requestFullscreen()</title> +<link rel="help" href="https://w3c.github.io/window-management/"> +Tests use of multi-screen details to move fullscreen between screens.<br> +The host device must have 2+ screens to yield meaningful results.<br><br> +<ul id="list"></ul> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/helpers.js"></script> +<script> +'use strict'; + +promise_test(async test => { + await setUpWindowManagement(test); + const originalScreen = window.screenDetails.currentScreen; + // Request fullscreen on the current screen; the window should stay there. + await buttonClick(test, `Request fullscreen on '${originalScreen.label}'`); + await document.documentElement.requestFullscreen({ screen: originalScreen }); + await assertWindowOnScreen(window, originalScreen); + assert_true(!!document.fullscreenElement); + + for (const s of window.screenDetails.screens) { + // Request fullscreen on screen `s`; `window` should move there. + await buttonClick(test, `Request fullscreen on '${s.label}'`); + await document.documentElement.requestFullscreen({ screen: s }); + await assertWindowOnScreen(window, s); + assert_true(!!document.fullscreenElement); + } + + // Exit fullscreen; `window` should move back to `originalScreen`. + await buttonClick(test, `Exit fullscreen`); + await document.exitFullscreen(); + await assertWindowOnScreen(window, originalScreen); + assert_false(!!document.fullscreenElement); +}, 'Use multi-screen details to move fullscreen between screens'); +</script> diff --git a/tests/wpt/web-platform-tests/window-management/multi-screen-window-open.tentative.https.html b/tests/wpt/web-platform-tests/window-management/multi-screen-window-open.tentative.https.html new file mode 100644 index 00000000000..708e571c27f --- /dev/null +++ b/tests/wpt/web-platform-tests/window-management/multi-screen-window-open.tentative.https.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<meta name="timeout" content="long"> +<!-- user agents are not required to support open features other than `noopener` + and on some platforms position and size features don't make sense --> +<meta name="flags" content="may"> +<title>Window Management test: target-screen window.open()</title> +<link rel="help" href="https://w3c.github.io/window-management/"> +Tests use of multi-screen details to open a popup window on each screen.<br> +The host device must have 2+ screens to yield meaningful results.<br><br> +<button id="closeButton" onclick="closePopups">Close popups</button><br> +<input id="autoClose" type="checkbox" checked=true>Auto-close popups</input> +<ul id="list"></ul> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/helpers.js"></script> +<script> +'use strict'; + +let popups = []; +function closePopups() { + popups.forEach(p => p.close()); + popups = []; +} + +promise_test(async setUpTest => { + await setUpWindowManagement(setUpTest); + for (const s of window.screenDetails.screens) { + const name = `Open a popup on '${s.label}'`; + await promise_test(async test => { + await buttonClick(test, name); + popups.push(await openPopupOnScreen(s)); + if (autoClose.checked) + closePopups(); + }, name); + } +}, 'Use multi-screen details to open a popup window on each screen'); +</script> diff --git a/tests/wpt/web-platform-tests/window-management/resources/helpers.js b/tests/wpt/web-platform-tests/window-management/resources/helpers.js new file mode 100644 index 00000000000..3c869f168e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/window-management/resources/helpers.js @@ -0,0 +1,123 @@ +// Appends a list item with `innerHTML` to the document's 'list' element. +function log(innerHTML) { + const li = document.createElement('li'); + li.innerHTML = innerHTML; + document.getElementById('list').appendChild(li); +} + +// Returns a string with the label and bounds of screen `s` for logging. +function screenLog(s) { + return `'${s.label}': (${s.left},${s.top} ${s.width}x${s.height})`; +} + +// Returns a string with the bounds of window `w` for logging. +function windowLog(w) { + return `(${w.screenLeft},${w.screenTop} ${w.outerWidth}x${w.outerHeight})`; +} + +// Appends a button with `innerHTML` to the document's `list` element. +// Waits for a test driver or manual click, and disables the button afterwards. +async function buttonClick(test, innerHTML) { + const button = document.createElement('button'); + button.innerHTML = innerHTML; + const li = document.createElement('li'); + li.appendChild(button) + document.getElementById('list').appendChild(li); + const click = new EventWatcher(test, button, ['click']).wait_for('click'); + try { // Support manual testing where test_driver is not running. + await test_driver.click(button); + } catch { + } + await click; + button.disabled = true; +} + +// Grants `window-management` permission and caches `window.screenDetails`. +async function setUpWindowManagement(test) { + assert_true( + 'getScreenDetails' in self && 'isExtended' in screen, + `API not supported; use Chrome or Chromium (not content_shell)`); + if (!screen.isExtended) + log(`WARNING: Use multiple screens for full test coverage`); + if (window.location.href.startsWith('file')) + log(`WARNING: Run via 'wpt serve'; file URLs lack permission support`); + + try { // Support manual testing where test_driver is not running. + await test_driver.set_permission({ name: 'window-management' }, 'granted'); + } catch { + } + await buttonClick(test, 'Request screen details'); + window.screenDetails = await window.getScreenDetails(); + assert_true(!!window.screenDetails, 'Error getting screen details'); +} + +// Polls until `condition` is true, with the given `interval` and `duration`. +// Returns a promise that will be resolved on success or timeout. +async function poll(condition, interval = 100, duration = 3000) { + const timeout = Date.now() + duration; + const loop = async (resolve) => { + if (condition() || Date.now() > timeout) + resolve(); + else + step_timeout(loop, interval, resolve); + } + return new Promise(loop); +} + +// Open and return a popup on `screen`, optionally asserting placement. +async function openPopupOnScreen(screen, assertPlacement = true) { + const left = screen.availLeft + Math.floor(screen.availWidth / 2) - 150; + const top = screen.availTop + Math.floor(screen.availHeight / 2) - 50; + const features = `left=${left},top=${top},width=300,height=100`; + log(`Opening a popup with features '${features}' on ${screenLog(screen)}`); + // Window.open() synchronously returns a Window with estimated screenLeft|Top, + // which may be clamped to the opener's screen or incompletely initialized. + let popup = window.open('/resources/blank.html', '', features); + + if (assertPlacement) { + // Assert the popup is eventually placed at the expected location. + // This may occur after window load, document ready and visible, etc. + const initialBounds = windowLog(popup); + log(`<div style='margin-left: 40px'>Initial: ${initialBounds}</div>`); + await poll(() => { return popup.screenLeft == left && + popup.screenTop == top }); + popup.document.write(`Requested: (${left},${top} 300x100) <br> \ + Initial: ${initialBounds} <br> \ + Resolved: ${windowLog(popup)}`); + log(`<div style='margin-left: 40px'>Resolved: ${windowLog(popup)}</div>`); + const context = `popup: ${windowLog(popup)}, ${screenLog(screen)}`; + assert_equals(popup.screenLeft, left, context); + assert_equals(popup.screenTop, top, context); + } + + return popup; +} + +// Returns true if window `w` bounds are on screen `s` with threshold `t`. +function isWindowOnScreen(w, s, t = 100) { + return (w.screenLeft >= s.left - t) && (w.screenTop >= s.top - t) && + (w.screenLeft + w.outerWidth <= s.left + s.width + t) && + (w.screenTop + w.outerHeight <= s.top + s.height + t); +} + +// Asserts window `w` currentScreen matches screen `s`. Awaits pending changes, +// e.g. fullscreen promises may resolve before screen change: crbug.com/1330724. +async function assertWindowHasCurrentScreen(w, s) { + log(`assertWindowHasCurrentScreen w: ${windowLog(w)} s: ${screenLog(s)}`); + await poll(() => { return s === w.screenDetails.currentScreen; }); + assert_equals(screenLog(s), screenLog(w.screenDetails.currentScreen)); +} + +// Asserts window `w` bounds roughly match screen `s`. Awaits pending changes, +// e.g. fullscreen promises may resolve before bounds change: crbug.com/1330724. +async function assertWindowBoundsOnScreen(w, s) { + log(`assertWindowBoundsOnScreen w: ${windowLog(w)} s: ${screenLog(s)}`); + await poll(() => { return isWindowOnScreen(w, s); }); + assert_true(isWindowOnScreen(w, s), `${windowLog(w)} on ${screenLog(s)}`); +} + +// Asserts window `w` bounds and currentScreen match screen `s`. +async function assertWindowOnScreen(w, s) { + await assertWindowHasCurrentScreen(w, s); + await assertWindowBoundsOnScreen(w, s); +} diff --git a/tests/wpt/web-platform-tests/window-placement/README.md b/tests/wpt/web-platform-tests/window-placement/README.md deleted file mode 100644 index d9e324c9118..00000000000 --- a/tests/wpt/web-platform-tests/window-placement/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Window Management Testing - -[Window Management Specification](https://w3c.github.io/window-placement/) - -The tests in this directory require at least 2 displays on the host machine to yield meaningful results. A well-supported configuration is 2 displays at 1920x1080 resolution arranged horizonally (primary on the left, secondary on the right). diff --git a/tests/wpt/web-platform-tests/window-placement/fullscreen-companion-window-manual.tentative.https.html b/tests/wpt/web-platform-tests/window-placement/fullscreen-companion-window-manual.tentative.https.html deleted file mode 100644 index 10f30a19060..00000000000 --- a/tests/wpt/web-platform-tests/window-placement/fullscreen-companion-window-manual.tentative.https.html +++ /dev/null @@ -1,76 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<meta name="timeout" content="long"> -<!-- user agents are not required to support open features other than `noopener` - and on some platforms position and size features don't make sense --> -<meta name="flags" content="may"> -<title>Multi-Screen Window Management test: Fullscreen Companion Window</title> -<link rel="help" href="https://w3c.github.io/window-placement/"> -This test uses multi-screen details to request fullscreen and open a pop-up<br> -(companion window) in the same user activation.<br> -It runs manually with `wpt serve` and a compatible browser.<br><br> -<button id="setUpButton">Request screen details</button> -<ul id="popupButtons"></ul> -<button id="cleanUpButton">Close any open popups</button><br> -<input id="autoCleanUp" type="checkbox" checked=true>Auto-close popups</input> -<ul id="logger"></ul> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/testdriver.js"></script> -<script src="/resources/testdriver-vendor.js"></script> -<script src="resources/helpers.js"></script> - -<script> -'use strict'; -let popups = []; - -cleanUpButton.addEventListener('click', async () => { - popups.forEach(p => p.close()); -}); - -// expectPopup should be true if the test should expect the pop-up to be -// created, or false if the popup is not expected to be created (blocked). -async function testPopupOnScreen(popupTest, screen, expectPopup) { - // Show a popup child window on the associated screen. - const left = screen.availLeft + Math.floor(screen.availWidth / 2) - 150; - const top = screen.availTop + Math.floor(screen.availHeight / 2) - 50; - log(`Opening a popup on '${screen.label}' at (${left}, ${top})`); - let popup = window.open( - '/resources/blank.html', '', - `left=${left},top=${top},width=300,height=100`); - assert_equals(!!popup, expectPopup, 'Popup reference'); - if (popup === null) - return; - assert_equals(!popup.closed, expectPopup, 'Popup open'); - popups.push(popup); - if (autoCleanUp.checked) { - // TODO(crbug.com/1338645): Remove this workaround (delay) after browser code is - // fixed. - popupTest.add_cleanup(()=>{ - setTimeout(popup.close, 1000); - }); - } -} - -promise_test(async setUpTest => { - await setUpWindowManagement(setUpTest, setUpButton); - const screenDetails = await getScreenDetails(); - assert_true(!!screenDetails, 'Error getting screen details'); - for (const [i, fullscreenScreen] of screenDetails.screens.entries()) { - const popupScreen = - screenDetails.screens[(i + 1) % screenDetails.screens.length]; - let testName = - `Fullscreen on '${fullscreenScreen.label}' and open popup on '${popupScreen.label}'`; - promise_test(async popupTest => { - await addTestTriggerButtonAndAwaitClick(popupButtons, - testName, - popupTest); - await document.documentElement.requestFullscreen( - { screen: fullscreenScreen } - ); - await testPopupOnScreen(popupTest, popupScreen, - /*expectPopup=*/screenDetails.screens.length > 1); - }, testName); - } -}, 'Use multi-screen details to request fullscreen and open a pop-up in the same user activation.'); -</script> diff --git a/tests/wpt/web-platform-tests/window-placement/multi-screen-fullscreen-manual.tentative.https.html b/tests/wpt/web-platform-tests/window-placement/multi-screen-fullscreen-manual.tentative.https.html deleted file mode 100644 index 620cd6e507d..00000000000 --- a/tests/wpt/web-platform-tests/window-placement/multi-screen-fullscreen-manual.tentative.https.html +++ /dev/null @@ -1,116 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<meta name="timeout" content="long"> -<title>Multi-Screen Window Placement test: element.requestFullscreen()</title> -<link rel="help" href="https://w3c.github.io/window-placement/"> -This test uses multi-screen details to request fullscreen on different -displays and swap between them.<br> -It runs manually with `wpt serve` and a compatible browser.<br><br> -<button id="setUpButton">Request screen details</button> -<ul id="testButtons"></ul> -<ul id="logger"></ul> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/testdriver.js"></script> -<script src="/resources/testdriver-vendor.js"></script> -<script src="resources/helpers.js"></script> - -<script> -'use strict'; - -// Waits until `window` is located on `screen` or until 3 seconds elapses. -async function ensureWindowOnScreen(window, screen) { - // Returns true if window `w` in on screen `s`. - const isWindowOnScreen = async (w, s) => { - const center = { - x: w.screenLeft + w.outerWidth / 2, - y: w.screenTop + w.outerHeight / 2 - }; - return center.x >= s.left && (center.x < s.left + s.width) && - center.y >= s.top && (center.y < s.top + s.height) && - (await w.getScreenDetails()).currentScreen == s; - } - // Checks every 100ms if window `w` is on screen `s` up to 3s maximum. - const waitForWindowOnScreen = async (w, s, resolve, timestamp = Date.now()) => { - if (!w || w.closed || Date.now() - timestamp > 3000) - resolve(false); - else if (await isWindowOnScreen(w, s)) - resolve(true); - else - setTimeout(waitForWindowOnScreen.bind(this, w, s, resolve, timestamp), 100); - } - return new Promise(resolve => { waitForWindowOnScreen(window, screen, resolve); }); -} - -// Asserts that the browser window is correctly positioned on `screen`. -// `expectFullscreen` specifies whether to expect the window to be -// fullscreen or not. -async function testWindowOnScreen(test, screen, expectFullscreen) { - - // In chrome, the requestFullscreen promise may resolve before the - // transition completes and the bounds may be incorect in the meantime. - // Wait until the window is on the expected screen. - // TODO(crbug.com/1330724) Remove this. - await ensureWindowOnScreen(window, screen); - - assert_equals(!!document.fullscreenElement, expectFullscreen); - assert_equals((await window.getScreenDetails()).currentScreen, screen); - - if (expectFullscreen) { - // Window bounds should equal the bounds of the screen when in fullscreen. - assert_equals(window.screenX, screen.left); - assert_equals(window.screenY, screen.top); - assert_equals(window.innerWidth, screen.width); - assert_equals(window.innerHeight, screen.height); - } else { - // Verify the window is somewhere within the specified screen - assert_true(window.screenX >= screen.left); - assert_true(window.screenY >= screen.top); - assert_true(window.screenX + window.outerWidth <= screen.left + screen.width); - assert_true(window.screenY + window.outerHeight <= screen.top + screen.height); - } -} - -promise_test(async setUpTest => { - await setUpWindowPlacement(setUpTest, setUpButton); - const screenDetails = await getScreenDetails(); - assert_true(!!screenDetails, 'Error getting screen details'); - for (const [i, fullscreenScreen] of screenDetails.screens.entries()) { - const originalScreen = screenDetails.currentScreen; - const swapFullscreen = - screenDetails.screens[(i + 1) % screenDetails.screens.length]; - let testName = - `Fullscreen on '${fullscreenScreen.label}' and swap to ${swapFullscreen.label}`; - promise_test(async fullscreenTest => { - // Step 1: Enter Fullscreen. - await addTestTriggerButtonAndAwaitClick(testButtons, - `Step 1: ${testName} (Enter Fullscreen)`, - fullscreenTest); - log(`Requesting fullscreen on screen: ${fullscreenScreen.label}`); - await document.documentElement.requestFullscreen( - { screen: fullscreenScreen } - ); - await testWindowOnScreen(fullscreenTest, fullscreenScreen, - /*expectFullscreen*/true); - // Step 2: Swap to another screen. - await addTestTriggerButtonAndAwaitClick(testButtons, - `Step 2: ${testName} (Swap screens)`, - fullscreenTest); - log(`Swapping fullscreen to screen: ${swapFullscreen.label}`); - await document.documentElement.requestFullscreen( - { screen: swapFullscreen } - ); - await testWindowOnScreen(fullscreenTest, swapFullscreen, - /*expectFullscreen*/true); - // Step 3: Exit fullscreen. Should restore window to `originalScreen`. - await addTestTriggerButtonAndAwaitClick(testButtons, - `Step 3: ${testName} (Exit Fullscreen)`, - fullscreenTest); - log(`Exiting fullscreen. Window should restore to ${originalScreen.label}.`); - await document.exitFullscreen(); - await testWindowOnScreen(fullscreenTest, originalScreen, - /*expectFullscreen*/false); - }, testName); - } -}, 'Use multi-screen details to request fullscreen on target displays and swap between them'); -</script> diff --git a/tests/wpt/web-platform-tests/window-placement/multi-screen-window-open.tentative.https.html b/tests/wpt/web-platform-tests/window-placement/multi-screen-window-open.tentative.https.html deleted file mode 100644 index c453107d568..00000000000 --- a/tests/wpt/web-platform-tests/window-placement/multi-screen-window-open.tentative.https.html +++ /dev/null @@ -1,99 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<meta name="timeout" content="long"> -<!-- user agents are not required to support open features other than `noopener` - and on some platforms position and size features don't make sense --> -<meta name="flags" content="may"> -<title>Multi-Screen Window Management test: window.open()</title> -<link rel="help" href="https://w3c.github.io/window-placement/"> -This test uses multi-screen details to open a popup window on each screen.<br> -It runs automated or manually with `wpt serve` and a compatible browser.<br><br> -<button id="setUpButton">Request screen details</button> -<ul id="popupButtons"></ul> -<button id="cleanUpButton">Close any open popups</button><br> -<input id="autoCleanUp" type="checkbox" checked=true>Auto-close popups</input> -<ul id="logger"></ul> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/testdriver.js"></script> -<script src="/resources/testdriver-vendor.js"></script> -<script src="resources/helpers.js"></script> - -<script> -'use strict'; -let popups = []; - -cleanUpButton.addEventListener('click', async () => { - popups.forEach(p => p.close()); -}); - -function checkPopupPlacement(popup, x, y, allowSameScreenClamping) { - // Window.screenX|Y may be zero, if the user agent wishes to hide information - // about the screen of the output device. They also may incorrectly reflect - // the origin of content viewport; in that case, estimate window coordinates - // by subtracing estimated frame insets (top-heavy, horizontally centered). - // Synchronous estimated placements may be clamped to the current screen. - const error = 10; - const dX = popup.screenX - x - (popup.outerWidth - popup.innerWidth) / 2; - const dY = popup.screenY - y - (popup.outerHeight - popup.innerHeight); - - assert_true(!popup.screenX || popup.screenX == x || Math.abs(dX) <= error || - (allowSameScreenClamping && popup.screenX >= screen.availLeft && - popup.screenX < screen.availLeft + screen.availWidth)); - assert_true(!popup.screenY || popup.screenY == y || Math.abs(dY) <= error || - (allowSameScreenClamping && popup.screenY >= screen.availTop && - popup.screenY < screen.availTop + screen.availHeight)); -} - -async function testPopupOnScreen(popupTest, screen) { - // Show a popup child window on the associated screen. - const left = screen.availLeft + Math.floor(screen.availWidth / 2) - 150; - const top = screen.availTop + Math.floor(screen.availHeight / 2) - 50; - log(`Opening a popup on '${screen.label}' at (${left}, ${top})`); - let popup = window.open( - '/resources/blank.html', '', - `left=${left},top=${top},width=300,height=100`); - popups.push(popup); - if (autoCleanUp.checked) - popupTest.add_cleanup(popup.close); - - // Window.open() synchronously returns a Window with estimated screenX|Y. - // Initial `screenX` and `screenY` values should match `left` and `top`. - log(`<div style='margin-left: 40px'>Initial bounds: - (${popup.screenX}, ${popup.screenY}) - </div>`); - // Allow synchronous estimated placements to be clamped to the current screen. - checkPopupPlacement(popup, left, top, true); - popup.initialScreenX = popup.screenX; - popup.initialScreenY = popup.screenY; - - // Await document.visibilitychange to check resolved Window.screenX|Y values - // after asynchronous window creation and clamped placement has occurred. - const visibilitychangeWatcher = - new EventWatcher(popupTest, popup.document, ['visibilitychange']); - await visibilitychangeWatcher.wait_for('visibilitychange'); - popup.document.write(`Expected: (${left}, ${top}) <br> \ - Initial: (${popup.initialScreenX}, ${popup.initialScreenY}) <br> \ - Resolved: (${popup.screenX}, ${popup.screenY}) `); - log(`<div style='margin-left: 40px'>Resolved bounds: - (${popup.screenX}, ${popup.screenY}) - </div>`); - // Do not allow resolved placements to be clamped to the current screen. - checkPopupPlacement(popup, left, top, false); -} - -promise_test(async setUpTest => { - await setUpWindowManagement(setUpTest, setUpButton); - const screenDetails = await getScreenDetails(); - assert_true(!!screenDetails, 'Error getting screen details'); - assert_greater_than(screenDetails.screens.length, 0, 'Connect a screen'); - for (const s of screenDetails.screens) { - promise_test(async popupTest => { - await addTestTriggerButtonAndAwaitClick(popupButtons, - `Open a popup on '${s.label}'`, - popupTest); - await testPopupOnScreen(popupTest, s); - }, `Open a popup on '${s.label}'`); - } -}, 'Use multi-screen details to open a popup window on each screen'); -</script> diff --git a/tests/wpt/web-platform-tests/window-placement/resources/helpers.js b/tests/wpt/web-platform-tests/window-placement/resources/helpers.js deleted file mode 100644 index 92442f91332..00000000000 --- a/tests/wpt/web-platform-tests/window-placement/resources/helpers.js +++ /dev/null @@ -1,68 +0,0 @@ - -// Logs (appends) an HTML string to a logger element in a list format. -// An element in the document with id "logger" will be used as the log -// container. -function log(str) { - const entry = document.createElement('li'); - entry.innerHTML = str; - const loggerElement = document.getElementById('logger'); - loggerElement.appendChild(entry); - return entry; -} - -// Common setup for window management tests. Performs some basic assertions, and -// then waits for a click on the `setUpButton` element (for manual tests). -// Example usage: -// promise_test(async setUpTest => { -// await setUpWindowManagement(setUpTest, setUpButton); -// ... -// }); -async function setUpWindowManagement(setUpTest, setUpButton) { - assert_true( - 'getScreenDetails' in self && 'isExtended' in screen, - `API not supported; use Chromium (not content_shell) and enable - chrome://flags/#enable-experimental-web-platform-features`); - if (!screen.isExtended) - log(`WARNING: Use multiple screens for full test coverage`); - if (window.location.href.startsWith('file')) - log(`WARNING: Run via 'wpt serve'; file URLs lack permission support`); - - try { // Support manual testing where test_driver is not running. - await test_driver.set_permission({ name: 'window-management' }, 'granted'); - } catch { - } - const setUpWatcher = new EventWatcher(setUpTest, setUpButton, ['click']); - const setUpClick = setUpWatcher.wait_for('click'); - try { // Support manual testing where test_driver is not running. - await test_driver.click(setUpButton); - } catch { - } - await setUpClick; - setUpButton.disabled = true; -} - - -// Adds a button to the given `buttonContainer` element with the contents of -// `name`. Attaches an event watcher to the given test and waits for a signal -// from the test driver to click the button. If no test driver is available -// (manual testing) then awaits an actual click from the user instead. If -// `disableOnClick` is true, the button will also be disabled after it is -// clicked. -async function addTestTriggerButtonAndAwaitClick(buttonContainer, name, test) { - const button = document.createElement('button'); - button.innerHTML = name; - const entry = document.createElement('li'); - entry.appendChild(button); - buttonContainer.appendChild(entry); - const testWatcher = new EventWatcher(test, button, ['click']); - const buttonClick = testWatcher.wait_for('click'); - // Disable the button when it is clicked. - button.onclick = function() { - button.disabled = true; - }; - try { // Support manual testing where test_driver is not running. - await test_driver.click(button); - } catch { - } - await buttonClick; -} diff --git a/tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm b/tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm index 8417adbefda..a3e49df79ad 100644 --- a/tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm +++ b/tests/wpt/web-platform-tests/workers/Worker_cross_origin_security_err.htm @@ -6,26 +6,16 @@ <div id=log></div> <script> async_test(function(t) { - try { var w = new Worker("ftp://example.org/support/WorkerBasic.js"); w.onerror = t.step_func_done(function(e) { assert_true(e instanceof Event); }); - } catch (e) { - assert_throws_dom("SecurityError", () => {throw e}, "DOMExceptions thrown on cross-origin Worker construction must be SecurityErrors"); - t.done(); - } -}, "Cross-origin classic workers should fail to fetch"); + }, "Cross-origin classic workers should fail to fetch"); async_test(function(t) { - try { var w = new Worker("ftp://example.org/support/WorkerBasic.js", {type: "module"}); w.onerror = t.step_func_done(function(e) { assert_true(e instanceof Event); }); - } catch (e) { - assert_throws_dom("SecurityError", () => {throw e}, "DOMExceptions thrown on cross-origin module Worker construction must be SecurityErrors"); - t.done(); - } }, "Cross-origin module workers should fail to fetch"); </script> diff --git a/tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html b/tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html index 0bfc503d06f..ad464ad50d1 100644 --- a/tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html +++ b/tests/wpt/web-platform-tests/workers/constructors/SharedWorker/same-origin.html @@ -10,15 +10,10 @@ setup({allow_uncaught_exception: true}); testSharedWorkerHelper = (t, script) => { - try { - const worker = new SharedWorker(script, ''); - worker.onerror = t.step_func_done(e => { - assert_true(e instanceof Event); - }); - } catch (e) { - assert_throws_dom("SecurityError", () => {throw e}, "DOMExceptions thrown on cross-origin SharedWorker construction must be SecurityErrors"); - t.done(); - } + const worker = new SharedWorker(script, ''); + worker.onerror = t.step_func_done(e => { + assert_true(e instanceof Event); + }); } test(() => { diff --git a/tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html b/tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html index cdc36c17183..7c86319c14d 100644 --- a/tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html +++ b/tests/wpt/web-platform-tests/workers/constructors/Worker/same-origin.html @@ -12,15 +12,10 @@ setup({allow_uncaught_exception: true}); function testWorkerHelper(t, script) { - try { - var worker = new Worker(script); - worker.onerror = t.step_func_done(function(e) { - assert_true(e instanceof Event); - }); - } catch (e) { - assert_throws_dom("SecurityError", () => {throw e}, "DOMExceptions thrown on cross-origin Worker construction must be SecurityErrors"); - t.done(); - } + var worker = new Worker(script); + worker.onerror = t.step_func_done(function(e) { + assert_true(e instanceof Event); + }); } test(function() { diff --git a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html index 4c705e73251..d4e104760e0 100644 --- a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html +++ b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-failure.html @@ -46,9 +46,12 @@ test(() => { assert_throws_dom('SyntaxError', () => new Worker(scriptURL, { type: 'module' })); }, 'Worker construction for an invalid URL should throw an exception.'); -test(() => { +async_test((t) => { const scriptURL = 'file:///static-import-worker.js'; - assert_throws_dom('SecurityError', () => new Worker(scriptURL, { type: 'module' })); -}, 'Worker construction for a file URL should throw an exception.'); + const worker = new Worker(scriptURL, { type: 'module' }); + worker.onerror = t.step_func_done(function(e) { + assert_true(e instanceof Event); + }); +}, 'Worker construction for a file URL should fail'); </script> |