aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini3
-rw-r--r--tests/wpt/metadata/MANIFEST.json516
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini11
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini)2
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini34
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini28
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini34
-rw-r--r--tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini3
-rw-r--r--tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini3
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini6
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/bidi-line-break-001.html56
-rw-r--r--tests/wpt/web-platform-tests/mathml/support/box-comparison.js4
-rw-r--r--tests/wpt/web-platform-tests/resources/SVGAnimationTestCase-testharness.js3
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgenum-animation-3.html62
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgenum-animation-4.html182
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgenum-animation-5.html77
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgenum-animation-6.html89
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgenum-animation-7.html94
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgenum-animation-8.html114
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgenum-animation-9.html83
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svginteger-animation-1.html77
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svginteger-animation-2.html82
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-1.html70
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-2.html70
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-3.html76
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-4.html76
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-6.html76
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-7.html76
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-8.html76
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-1.html70
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-2.html77
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-3.html77
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-4.html77
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeHeight.html69
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeOther.html68
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeWidth.html69
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-1.html59
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-2.html59
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-3.html59
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-number-to-number.html64
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-cm.html64
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-ems.html65
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-in.html64
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-number.html64
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-pc.html64
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-pt.html64
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-px.html64
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-unitType.html65
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglength-animation-values.html75
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-1.html89
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-2.html89
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-3.html78
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-4.html89
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-5.html90
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-1.html62
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-2.html62
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-3.html54
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-4.html82
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumberlist-animation-1.html90
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumberlist-animation-2.html90
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-1.html93
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-2.html93
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-3.html93
77 files changed, 4531 insertions, 274 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
index 3a3d15b8406..6a3af4e2ece 100644
--- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
@@ -37,6 +37,3 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
- [Revoke blob URL after calling fetch, fetch should succeed]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 8daaa8c3c8c..f5ac825eb8d 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -325363,6 +325363,12 @@
{}
]
],
+ "css/css-writing-modes/bidi-line-break-001.html": [
+ [
+ "css/css-writing-modes/bidi-line-break-001.html",
+ {}
+ ]
+ ],
"css/css-writing-modes/inheritance.html": [
[
"css/css-writing-modes/inheritance.html",
@@ -398891,6 +398897,308 @@
{}
]
],
+ "svg/animations/svgenum-animation-3.html": [
+ [
+ "svg/animations/svgenum-animation-3.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgenum-animation-4.html": [
+ [
+ "svg/animations/svgenum-animation-4.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgenum-animation-5.html": [
+ [
+ "svg/animations/svgenum-animation-5.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgenum-animation-6.html": [
+ [
+ "svg/animations/svgenum-animation-6.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgenum-animation-7.html": [
+ [
+ "svg/animations/svgenum-animation-7.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgenum-animation-8.html": [
+ [
+ "svg/animations/svgenum-animation-8.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgenum-animation-9.html": [
+ [
+ "svg/animations/svgenum-animation-9.html",
+ {}
+ ]
+ ],
+ "svg/animations/svginteger-animation-1.html": [
+ [
+ "svg/animations/svginteger-animation-1.html",
+ {}
+ ]
+ ],
+ "svg/animations/svginteger-animation-2.html": [
+ [
+ "svg/animations/svginteger-animation-2.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-by-1.html": [
+ [
+ "svg/animations/svglength-additive-by-1.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-by-2.html": [
+ [
+ "svg/animations/svglength-additive-by-2.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-by-3.html": [
+ [
+ "svg/animations/svglength-additive-by-3.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-by-4.html": [
+ [
+ "svg/animations/svglength-additive-by-4.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-by-6.html": [
+ [
+ "svg/animations/svglength-additive-by-6.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-by-7.html": [
+ [
+ "svg/animations/svglength-additive-by-7.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-by-8.html": [
+ [
+ "svg/animations/svglength-additive-by-8.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-from-by-1.html": [
+ [
+ "svg/animations/svglength-additive-from-by-1.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-from-by-2.html": [
+ [
+ "svg/animations/svglength-additive-from-by-2.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-from-by-3.html": [
+ [
+ "svg/animations/svglength-additive-from-by-3.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-additive-from-by-4.html": [
+ [
+ "svg/animations/svglength-additive-from-by-4.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-LengthModeHeight.html": [
+ [
+ "svg/animations/svglength-animation-LengthModeHeight.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-LengthModeOther.html": [
+ [
+ "svg/animations/svglength-animation-LengthModeOther.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-LengthModeWidth.html": [
+ [
+ "svg/animations/svglength-animation-LengthModeWidth.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-invalid-value-1.html": [
+ [
+ "svg/animations/svglength-animation-invalid-value-1.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-invalid-value-2.html": [
+ [
+ "svg/animations/svglength-animation-invalid-value-2.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-invalid-value-3.html": [
+ [
+ "svg/animations/svglength-animation-invalid-value-3.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-number-to-number.html": [
+ [
+ "svg/animations/svglength-animation-number-to-number.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-px-to-cm.html": [
+ [
+ "svg/animations/svglength-animation-px-to-cm.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-px-to-ems.html": [
+ [
+ "svg/animations/svglength-animation-px-to-ems.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-px-to-in.html": [
+ [
+ "svg/animations/svglength-animation-px-to-in.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-px-to-number.html": [
+ [
+ "svg/animations/svglength-animation-px-to-number.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-px-to-pc.html": [
+ [
+ "svg/animations/svglength-animation-px-to-pc.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-px-to-pt.html": [
+ [
+ "svg/animations/svglength-animation-px-to-pt.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-px-to-px.html": [
+ [
+ "svg/animations/svglength-animation-px-to-px.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-unitType.html": [
+ [
+ "svg/animations/svglength-animation-unitType.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglength-animation-values.html": [
+ [
+ "svg/animations/svglength-animation-values.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglengthlist-animation-1.html": [
+ [
+ "svg/animations/svglengthlist-animation-1.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglengthlist-animation-2.html": [
+ [
+ "svg/animations/svglengthlist-animation-2.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglengthlist-animation-3.html": [
+ [
+ "svg/animations/svglengthlist-animation-3.html",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "svg/animations/svglengthlist-animation-4.html": [
+ [
+ "svg/animations/svglengthlist-animation-4.html",
+ {}
+ ]
+ ],
+ "svg/animations/svglengthlist-animation-5.html": [
+ [
+ "svg/animations/svglengthlist-animation-5.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumber-animation-1.html": [
+ [
+ "svg/animations/svgnumber-animation-1.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumber-animation-2.html": [
+ [
+ "svg/animations/svgnumber-animation-2.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumber-animation-3.html": [
+ [
+ "svg/animations/svgnumber-animation-3.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumber-animation-4.html": [
+ [
+ "svg/animations/svgnumber-animation-4.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumberlist-animation-1.html": [
+ [
+ "svg/animations/svgnumberlist-animation-1.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumberlist-animation-2.html": [
+ [
+ "svg/animations/svgnumberlist-animation-2.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumberoptionalnumber-animation-1.html": [
+ [
+ "svg/animations/svgnumberoptionalnumber-animation-1.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumberoptionalnumber-animation-2.html": [
+ [
+ "svg/animations/svgnumberoptionalnumber-animation-2.html",
+ {}
+ ]
+ ],
+ "svg/animations/svgnumberoptionalnumber-animation-3.html": [
+ [
+ "svg/animations/svgnumberoptionalnumber-animation-3.html",
+ {}
+ ]
+ ],
"svg/animations/svgnumberoptionalnumber-animation-4.html": [
[
"svg/animations/svgnumberoptionalnumber-animation-4.html",
@@ -590580,6 +590888,10 @@
"2e93f34363748585836a28ac86581dbcd8863d7e",
"reftest"
],
+ "css/css-writing-modes/bidi-line-break-001.html": [
+ "f46b56b76cc011126055bd7327edb4ec4963f9ad",
+ "testharness"
+ ],
"css/css-writing-modes/bidi-normal-001.html": [
"59479c538ce2114bfdec8bf3a6b91af8be2b8735",
"reftest"
@@ -642853,7 +643165,7 @@
"support"
],
"mathml/support/box-comparison.js": [
- "77d145b36324d1ac4f06b97a49f8609d6202c9bc",
+ "c46808f7fee6f72ec9e7ffd4946239d9dcaad25b",
"support"
],
"mathml/support/feature-detection.js": [
@@ -665429,7 +665741,7 @@
"support"
],
"resources/SVGAnimationTestCase-testharness.js": [
- "8fabc9a8c110ac6210a298ed08cbb33d8ecd9266",
+ "59febda86d63f3109e74901620d1c1562554c754",
"support"
],
"resources/check-layout-th.js": [
@@ -671584,6 +671896,206 @@
"86a0a40fa2de116c5b2076641180b24688d56f9b",
"testharness"
],
+ "svg/animations/svgenum-animation-3.html": [
+ "5ed9f5aa8819510f8a7701e5edb7d00fb716aa70",
+ "testharness"
+ ],
+ "svg/animations/svgenum-animation-4.html": [
+ "652e49655e1027ce7a6a8c3d6ad29d76eb6fc85b",
+ "testharness"
+ ],
+ "svg/animations/svgenum-animation-5.html": [
+ "1487918bde23a642fd5a49de844b5e880d662f27",
+ "testharness"
+ ],
+ "svg/animations/svgenum-animation-6.html": [
+ "e60c93bbbf67cbfbe0bfe7a7f655ac3cb2feb44e",
+ "testharness"
+ ],
+ "svg/animations/svgenum-animation-7.html": [
+ "4e2d27e581c687106d3056f825ad11b2efaefdd4",
+ "testharness"
+ ],
+ "svg/animations/svgenum-animation-8.html": [
+ "cd00e46d56d7133b565adebad45aa4efe341313f",
+ "testharness"
+ ],
+ "svg/animations/svgenum-animation-9.html": [
+ "8aa9d6a761803b726c4de7f8a6eee1df31c2a55c",
+ "testharness"
+ ],
+ "svg/animations/svginteger-animation-1.html": [
+ "7803541691858ddf64f63c7486ad369254572220",
+ "testharness"
+ ],
+ "svg/animations/svginteger-animation-2.html": [
+ "25ef7ff08effb49c9953981756d482846b590aaf",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-by-1.html": [
+ "67549890cff56769c3df9973266b76e128f90c6d",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-by-2.html": [
+ "e08c99cb63eebf462bcd037ad0219145b291aa9f",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-by-3.html": [
+ "b5ac7a033ec2524e9bd8119227dcc88f63924254",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-by-4.html": [
+ "10e8bd7b491a9083141dd4d260db951046096fe2",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-by-6.html": [
+ "43beafe220e4c02d312da9fe4a653054d40d3d0d",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-by-7.html": [
+ "7c1dde4a7c6262d64130ef84e4fa0b05b360b154",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-by-8.html": [
+ "c61cb65ebd923f82d3c44ae00328e4712d214019",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-from-by-1.html": [
+ "ce458e0266c68665a68adab94aa706ed4ccb4a84",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-from-by-2.html": [
+ "1ac7eed4e1b3d03b5b44dde6fad6209f21ab0aa4",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-from-by-3.html": [
+ "1c22f351da43b6723a360706c23ed6f351844e70",
+ "testharness"
+ ],
+ "svg/animations/svglength-additive-from-by-4.html": [
+ "998c37458f98538333395d74e1f89a21ac7f0548",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-LengthModeHeight.html": [
+ "2bb409e8e10ea7ba72fdf882e8c7a300e822c1ce",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-LengthModeOther.html": [
+ "1fd9e0a3b9b0f2093f35769dc91a1badea5b4a86",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-LengthModeWidth.html": [
+ "9481d434b9a11f8f2753497924a762a5c1e95662",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-invalid-value-1.html": [
+ "9b45c5a8ca0dd1fec4aad07c02e6bbc7caad0a3a",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-invalid-value-2.html": [
+ "64d5884df44bc1334da2750b0c23ce52e0ad5028",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-invalid-value-3.html": [
+ "0fb1794eaa2c738e17ba42a63c478d877e52de29",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-number-to-number.html": [
+ "0b4fca52ec0f878023ce6ba62fcde0e7426bbc8d",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-px-to-cm.html": [
+ "f51beed02b3df9382df78d5ba211c9555bfd5d87",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-px-to-ems.html": [
+ "e65125303e10d3572cc53abef54d8cad4a781df2",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-px-to-in.html": [
+ "a55b357187aa01dc9eaace04a89eb17cd2ad6557",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-px-to-number.html": [
+ "8eab444caa3eda56eda3f5600f5f031d68b8d60e",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-px-to-pc.html": [
+ "62d9d9964f1dc9a1952cf45417572fc6a13a99cc",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-px-to-pt.html": [
+ "d86e09075788d37c05f418252686fe3d8c56b87a",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-px-to-px.html": [
+ "fdeb773375a290d6f925d42be90dd0401222947f",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-unitType.html": [
+ "4cd6d2d3af5e94e259195cc1d5599132dd8a69b6",
+ "testharness"
+ ],
+ "svg/animations/svglength-animation-values.html": [
+ "a3e485320b0e76b9e6cc5c176c4e114d939f56bb",
+ "testharness"
+ ],
+ "svg/animations/svglengthlist-animation-1.html": [
+ "198fc8a6fef879ea9397f6668b38a10a9b4d755a",
+ "testharness"
+ ],
+ "svg/animations/svglengthlist-animation-2.html": [
+ "c1c91b83f0f652d3d04e277c3a13d116af291147",
+ "testharness"
+ ],
+ "svg/animations/svglengthlist-animation-3.html": [
+ "d26e67a8a05a049378bda86cc15ff2e5dbedc2fa",
+ "testharness"
+ ],
+ "svg/animations/svglengthlist-animation-4.html": [
+ "0e890ab5f5a16e53ce10a3f7c68e99a25e764989",
+ "testharness"
+ ],
+ "svg/animations/svglengthlist-animation-5.html": [
+ "5d0bc2b4836fcc934b4676eb1d79e23e15b5e148",
+ "testharness"
+ ],
+ "svg/animations/svgnumber-animation-1.html": [
+ "72c2d736771868b615d723958324307a6f96be66",
+ "testharness"
+ ],
+ "svg/animations/svgnumber-animation-2.html": [
+ "1654480ffced7d79bf28595664bc6dc8d524ba07",
+ "testharness"
+ ],
+ "svg/animations/svgnumber-animation-3.html": [
+ "255eeb0a94c66f6337af8079f6eef8e6416586e4",
+ "testharness"
+ ],
+ "svg/animations/svgnumber-animation-4.html": [
+ "758138d6678a2afa778c766b9072e47307e5341d",
+ "testharness"
+ ],
+ "svg/animations/svgnumberlist-animation-1.html": [
+ "aabb7d7daa159409706ad2ff59e54220218f25a2",
+ "testharness"
+ ],
+ "svg/animations/svgnumberlist-animation-2.html": [
+ "e62bbf68602dbe439b2659aac3727f8f6c40e2d0",
+ "testharness"
+ ],
+ "svg/animations/svgnumberoptionalnumber-animation-1.html": [
+ "b20855140ffcd398778d3375aa9ac395aa221776",
+ "testharness"
+ ],
+ "svg/animations/svgnumberoptionalnumber-animation-2.html": [
+ "db2576533ce22a0a4aa68d8113ae858bf1cf17aa",
+ "testharness"
+ ],
+ "svg/animations/svgnumberoptionalnumber-animation-3.html": [
+ "974c1d7034a86e585c84cf9576fb231db7601fc3",
+ "testharness"
+ ],
"svg/animations/svgnumberoptionalnumber-animation-4.html": [
"4c734b5373762e9844511f5ac7b550743a50f0b2",
"testharness"
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index 01614c846e7..5f4df6b4ebe 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -312,12 +312,6 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
- expected: FAIL
-
- [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
- expected: FAIL
-
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
@@ -336,6 +330,9 @@
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
+ expected: FAIL
+
+ [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index 5406e8fa8fb..b2ffc8abf78 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -53,9 +53,6 @@
[combined text/javascript ]
expected: FAIL
- [separate text/javascript;charset=windows-1252 text/javascript]
- expected: FAIL
-
[separate text/javascript x/x]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index 87c807a49ff..d4ba399b762 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,3 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
+ [X-Content-Type-Options%3A%20'NosniFF']
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
deleted file mode 100644
index 87b07c3e670..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_1.html]
- [Multiple history traversals from the same task]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
index 51f8272a6de..dc2e45516de 100644
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_3.html]
+[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
deleted file mode 100644
index 16fa2c5cfc1..00000000000
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[creating_browsing_context_test_01.html]
- [first argument: absolute url]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini
index e02f179ec25..bf50d59df41 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html.ini
@@ -1,24 +1,5 @@
[open-features-negative-innerwidth-innerheight.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
expected: FAIL
- [features "innerheight=-404.5" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "innerwidth=-404.5" should NOT set "width=404"]
- expected: TIMEOUT
-
- [features "innerwidth=-404" should NOT set "width=404"]
- expected: TIMEOUT
-
- [features "innerheight=-404e1" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "innerheight=-404" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "innerwidth=-404e1" should NOT set "width=404"]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini
index 23eefb8eaf9..e150c9d848f 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html.ini
@@ -1,24 +1,5 @@
[open-features-negative-screenx-screeny.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
expected: FAIL
- [features "screenx=-204" should NOT set "left=204"]
- expected: TIMEOUT
-
- [features "screeny=-204" should NOT set "top=204"]
- expected: TIMEOUT
-
- [features "screeny=-204.5" should NOT set "top=204"]
- expected: TIMEOUT
-
- [features "screeny=-0" should NOT set "top=204"]
- expected: TIMEOUT
-
- [features "screenx=-0" should NOT set "left=204"]
- expected: TIMEOUT
-
- [features "screenx=-204.5" should NOT set "left=204"]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
index 940516ddd33..ad8840fbb68 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
@@ -1,24 +1,5 @@
[open-features-negative-top-left.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: negative values for `top`, `left`]
expected: FAIL
- [features "top=-204" should NOT set "top=204"]
- expected: TIMEOUT
-
- [features "top=-204.5" should NOT set "top=204"]
- expected: TIMEOUT
-
- [features "left=-204" should NOT set "left=204"]
- expected: TIMEOUT
-
- [features "top=-0" should NOT set "top=204"]
- expected: TIMEOUT
-
- [features "left=-204.5" should NOT set "left=204"]
- expected: TIMEOUT
-
- [features "left=-0" should NOT set "left=204"]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini
index 9027336b453..d1ed9088b2b 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html.ini
@@ -1,24 +1,5 @@
[open-features-negative-width-height.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: negative values for `width`, `height`]
expected: FAIL
- [features "height=-404" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "height=-404e1" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "height=-404.5" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "width=-404" should NOT set "width=404"]
- expected: TIMEOUT
-
- [features "width=-404e1" should NOT set "width=404"]
- expected: TIMEOUT
-
- [features "width=-404.5" should NOT set "width=404"]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini
index 4e44584b123..a70e9dbad4d 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html.ini
@@ -1,48 +1,32 @@
[open-features-non-integer-height.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `height`]
expected: FAIL
[features "height=405*3" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "height=405.32" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "height=405e1" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "height=405/5" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "height=405^4" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "height=405.5" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "height=405e-1" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "height=405 " should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "height=405LLl" should set "height=405"]
- expected: TIMEOUT
-
- [features "height=/404" should NOT set "height=404"]
- expected: TIMEOUT
-
- [top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
- expected: TIMEOUT
-
- [top=0,left=0: absence of feature "height" should be treated same as "height=0"]
- expected: TIMEOUT
-
- [features "height=_404" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "height=L404" should NOT set "height=404"]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini
index fcaeae5336d..779531b4a98 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html.ini
@@ -1,42 +1,32 @@
[open-features-non-integer-innerheight.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
expected: FAIL
[features "innerheight=405e-1" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerheight=405LLl" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerheight=405^4" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerheight=405e1" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerheight=405 " should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerheight=405/5" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerheight=405.32" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerheight=405.5" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerheight=405*3" should set "height=405"]
- expected: TIMEOUT
-
- [features "innerheight=_404" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "innerheight=L404" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "innerheight=/404" should NOT set "height=404"]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini
index 42327fedd27..7a1b258d52e 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html.ini
@@ -1,42 +1,32 @@
[open-features-non-integer-innerwidth.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
expected: FAIL
[features "innerwidth=405e-1" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerwidth=405*3" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerwidth=405.5" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerwidth=405e1" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerwidth=405.32" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerwidth=405 " should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerwidth=405LLl" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerwidth=405/5" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "innerwidth=405^4" should set "width=405"]
- expected: TIMEOUT
-
- [features "innerwidth=/404" should NOT set "width=404"]
- expected: TIMEOUT
-
- [features "innerwidth=_404" should NOT set "width=404"]
- expected: TIMEOUT
-
- [features "innerwidth=L404" should NOT set "width=404"]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini
index a8e4fe06618..caba4124f0b 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html.ini
@@ -1,42 +1,32 @@
[open-features-non-integer-left.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `left`]
expected: FAIL
[features "left=105e1" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "left=105 " should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "left=105/5" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "left=105e-1" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "left=105^4" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "left=105LLl" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "left=105.32" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "left=105*3" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "left=105.5" should set "left=105"]
- expected: TIMEOUT
-
- [features "left=L104" should NOT set "left=104"]
- expected: TIMEOUT
-
- [features "left=/104" should NOT set "left=104"]
- expected: TIMEOUT
-
- [features "left=_104" should NOT set "left=104"]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini
index 64a08faf0e6..9ace8a4cbdb 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html.ini
@@ -1,42 +1,32 @@
[open-features-non-integer-screenx.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
expected: FAIL
[features "screenx=105.5" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "screenx=105e1" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "screenx=105 " should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "screenx=105*3" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "screenx=105e-1" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "screenx=105^4" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "screenx=105LLl" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "screenx=105/5" should set "left=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "screenx=105.32" should set "left=105"]
- expected: TIMEOUT
-
- [features "screenx=_104" should NOT set "left=104"]
- expected: TIMEOUT
-
- [features "screenx=L104" should NOT set "left=104"]
- expected: TIMEOUT
-
- [features "screenx=/104" should NOT set "left=104"]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini
index 4f22ef4ef29..a82bd0f981a 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html.ini
@@ -1,42 +1,32 @@
[open-features-non-integer-screeny.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
expected: FAIL
[features "screeny=405^4" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "screeny=405e-1" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "screeny=405LLl" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "screeny=405e1" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "screeny=405 " should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "screeny=405/5" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "screeny=405*3" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "screeny=405.32" should set "height=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "screeny=405.5" should set "height=405"]
- expected: TIMEOUT
-
- [features "screeny=_404" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "screeny=L404" should NOT set "height=404"]
- expected: TIMEOUT
-
- [features "screeny=/404" should NOT set "height=404"]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini
index 8540f53d8d6..10f617db69e 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html.ini
@@ -1,42 +1,32 @@
[open-features-non-integer-top.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `top`]
expected: FAIL
[features "top=105/5" should set "top=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "top=105*3" should set "top=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "top=105LLl" should set "top=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "top=105e-1" should set "top=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "top=105.32" should set "top=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "top=105e1" should set "top=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "top=105 " should set "top=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "top=105^4" should set "top=105"]
- expected: TIMEOUT
+ expected: FAIL
[features "top=105.5" should set "top=105"]
- expected: TIMEOUT
-
- [features "top=/104" should NOT set "top=104"]
- expected: TIMEOUT
-
- [features "top=_104" should NOT set "top=104"]
- expected: TIMEOUT
-
- [features "top=L104" should NOT set "top=104"]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini
index 9d841e61bc0..28f93ee71b5 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html.ini
@@ -1,48 +1,32 @@
[open-features-non-integer-width.html]
type: testharness
- expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `width`]
expected: FAIL
[features "width=405^4" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "width=405.5" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "width=405e1" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "width=405 " should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "width=405.32" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "width=405LLl" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "width=405*3" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "width=405e-1" should set "width=405"]
- expected: TIMEOUT
+ expected: FAIL
[features "width=405/5" should set "width=405"]
- expected: TIMEOUT
-
- [top=0,left=0: absence of feature "width" should be treated same as "width=0"]
- expected: TIMEOUT
-
- [features "width=_404" should NOT set "width=404"]
- expected: TIMEOUT
-
- [top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
- expected: TIMEOUT
-
- [features "width=/404" should NOT set "width=404"]
- expected: TIMEOUT
-
- [features "width=L404" should NOT set "width=404"]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini b/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini
index 5c59982f790..5a549d938b6 100644
--- a/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini
+++ b/tests/wpt/metadata/resource-timing/resource_TAO_origin.htm.ini
@@ -11,6 +11,3 @@
[The iframe should have one resource timing entry.]
expected: FAIL
- [responseEnd should not be 0 in timing-allow cross-origin request.]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini
index aa36a14c6a6..494f0d4a752 100644
--- a/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini
+++ b/tests/wpt/metadata/resource-timing/resource_TAO_zero.htm.ini
@@ -20,6 +20,3 @@
[domainLookupStart should be 0 in cross-origin request.]
expected: FAIL
- [responseEnd should be greater than 0 in cross-origin request.]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index a56bad443a2..66bd350083b 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
- expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
index a7b4ab4cc85..5babc864bfd 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
@@ -164,3 +164,9 @@
[X SNR (-664.7665372056329 dB) is not greater than or equal to 65.737. Got -664.7665372056329.]
expected: FAIL
+ [X SNR (-138.18041778733868 dB) is not greater than or equal to 65.737. Got -138.18041778733868.]
+ expected: FAIL
+
+ [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 8.8099737698276448e+8 at index of 39267.\n\t[39267\]\t8.8099737600000000e+8\t-9.8276454210281372e-1\t8.8099737698276448e+8\t8.9644806994939113e+8\t3.8985999999999999e-3\n\tMax RelError of 1.7257971997243075e+9 at index of 20238.\n\t[20238\]\t8.2104729600000000e+8\t-4.7574958205223083e-1\t8.2104729647574961e+8\t1.7257971997243075e+9\t3.8985999999999999e-3\n]
+ expected: FAIL
+
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/bidi-line-break-001.html b/tests/wpt/web-platform-tests/css/css-writing-modes/bidi-line-break-001.html
new file mode 100644
index 00000000000..f46b56b76cc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/bidi-line-break-001.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<title>Test implicit bidi controls do not affect line breaking</title>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#unicode-bidi">
+<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
+<style>
+html {
+ font-size: 10px;
+ line-height: 1;
+}
+.isolate {
+ unicode-bidi: isolate;
+}
+.embed {
+ unicode-bidi: embed;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<div id=log></div>
+<div id="container">
+ <div style="width: 4ch" data-expected-height="20">
+ <span class="isolate" dir="ltr">00</span> <span class="isolate" dir="ltr">00</span>
+ </div>
+ <div style="width: 4ch" data-expected-height="20">
+ <span class="embed" dir="ltr">00</span> <span class="embed" dir="ltr">00</span>
+ </div>
+
+ <div style="width: 4ch" data-expected-height="20">
+ <span dir="ltr">00</span> <span dir="ltr">00</span>
+ </div>
+ <div style="width: 4ch" data-expected-height="20">
+ <bdi dir="ltr">00</bdi> <bdi dir="ltr">00</bdi>
+ </div>
+ <div style="width: 4ch" data-expected-height="20">
+ <bdo dir="ltr">00</bdo> <bdo dir="ltr">00</bdo>
+ </div>
+
+ <div style="width: 4ch" data-expected-height="20">
+ <span class="isolate" dir="ltr">00 </span><span class="isolate" dir="ltr">00</span>
+ </div>
+ <div style="width: 4ch" data-expected-height="20">
+ <span class="embed" dir="ltr">00 </span><span class="embed" dir="ltr">00</span>
+ </div>
+</div>
+<script>
+run();
+function run() {
+ for (let node of document.getElementById('container').children) {
+ test(() => {
+ assert_approx_equals(node.offsetHeight, 20, 1);
+ }, node.innerHTML);
+ }
+}
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/mathml/support/box-comparison.js b/tests/wpt/web-platform-tests/mathml/support/box-comparison.js
index 77d145b3632..c46808f7fee 100644
--- a/tests/wpt/web-platform-tests/mathml/support/box-comparison.js
+++ b/tests/wpt/web-platform-tests/mathml/support/box-comparison.js
@@ -22,7 +22,7 @@ function compareSpaceWithAndWithoutStyle(tag, style, parentStyle, direction) {
if (!direction)
direction = "ltr";
- document.body.insertAdjacentHTML("beforeend", `<div>\
+ document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
<math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math>\
<math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math>\
</div>`);
@@ -64,7 +64,7 @@ function compareSizeWithAndWithoutStyle(tag, style) {
if (!FragmentHelper.isValidChildOfMrow(tag))
throw `Invalid argument: ${tag}`;
- document.body.insertAdjacentHTML("beforeend", `<div>\
+ document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
<math>${MathMLFragments[tag]}</math>\
<math>${MathMLFragments[tag]}</math>\
</div>`);
diff --git a/tests/wpt/web-platform-tests/resources/SVGAnimationTestCase-testharness.js b/tests/wpt/web-platform-tests/resources/SVGAnimationTestCase-testharness.js
index 8fabc9a8c11..59febda86d6 100644
--- a/tests/wpt/web-platform-tests/resources/SVGAnimationTestCase-testharness.js
+++ b/tests/wpt/web-platform-tests/resources/SVGAnimationTestCase-testharness.js
@@ -1,5 +1,5 @@
// NOTE(edvardt):
-// This file is a slimmed down wrapper for the Chromium SVGAnimationTestCase.js,
+// This file is a slimmed down wrapper for the old SVGAnimationTestCase.js,
// it has some convenience functions and should not be used for new tests.
// New tests should not build on this API as it's just meant to keep things
// working.
@@ -32,6 +32,7 @@ function createSVGElement(type) {
return document.createElementNS("http://www.w3.org/2000/svg", type);
}
+// Inspired by Layoutests/animations/animation-test-helpers.js
function moveAnimationTimelineAndSample(index) {
var animationId = expectedResults[index][0];
var time = expectedResults[index][1];
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-3.html b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-3.html
new file mode 100644
index 00000000000..5ed9f5aa881
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-3.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLengthAdjustType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Initiate the test by clicking at (1, 50) - the 'S'.
+window.clickX = 1;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.setAttribute("y", "50");
+text.setAttribute("textLength", "200");
+text.textContent = "Stretched text";
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "lengthAdjust");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "spacing");
+animate.setAttribute("to", "spacingAndGlyphs");
+animate.setAttribute("fill", "freeze");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(text.lengthAdjust.animVal, SVGTextContentElement.LENGTHADJUST_SPACING);
+ assert_equals(text.lengthAdjust.baseVal, SVGTextContentElement.LENGTHADJUST_SPACING);
+}
+
+function sample2() {
+ assert_equals(text.lengthAdjust.animVal, SVGTextContentElement.LENGTHADJUST_SPACINGANDGLYPHS);
+ assert_equals(text.lengthAdjust.baseVal, SVGTextContentElement.LENGTHADJUST_SPACING);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 1.999, sample1],
+ ["animation", 2.001, sample2],
+ ["animation", 3.999, sample2],
+ ["animation", 4.001, sample2]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-4.html b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-4.html
new file mode 100644
index 00000000000..652e49655e1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-4.html
@@ -0,0 +1,182 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test CompositeOperationType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defsElement = createSVGElement("defs");
+rootSVGElement.appendChild(defsElement);
+
+var off1 = createSVGElement("feOffset");
+off1.setAttribute("dx", "35");
+off1.setAttribute("dy", "25");
+off1.setAttribute("result", "off1");
+
+var flood1 = createSVGElement("feFlood");
+flood1.setAttribute("flood-color", "#408067");
+flood1.setAttribute("flood-opacity", ".8");
+flood1.setAttribute("result", "F1");
+
+var overComposite1 = createSVGElement("feComposite");
+overComposite1.setAttribute("in", "F1");
+overComposite1.setAttribute("in2", "off1");
+overComposite1.setAttribute("operator", "over");
+overComposite1.setAttribute("k1", ".5");
+overComposite1.setAttribute("k2", ".1");
+overComposite1.setAttribute("k3", ".5");
+overComposite1.setAttribute("k4", ".3");
+
+overComposite1.setAttribute("result", "C1");
+
+var off2 = createSVGElement("feOffset");
+off2.setAttribute("in", "SourceGraphic");
+off2.setAttribute("dx", "60");
+off2.setAttribute("dy", "50");
+off2.setAttribute("result", "off2");
+
+var flood2 = createSVGElement("feFlood");
+flood2.setAttribute("flood-color", "#408067");
+flood2.setAttribute("flood-opacity", ".6");
+flood2.setAttribute("result", "F2");
+
+var overComposite2 = createSVGElement("feComposite");
+overComposite2.setAttribute("in", "F2");
+overComposite2.setAttribute("in2", "off2");
+overComposite2.setAttribute("operator", "in");
+overComposite2.setAttribute("result", "C2");
+
+var off3 = createSVGElement("feOffset");
+off3.setAttribute("in", "SourceGraphic");
+off3.setAttribute("dx", "85");
+off3.setAttribute("dy", "75");
+off3.setAttribute("result", "off3");
+
+var flood3 = createSVGElement("feFlood");
+flood3.setAttribute("flood-color", "#408067");
+flood3.setAttribute("flood-opacity", ".4");
+flood3.setAttribute("result", "F3");
+
+var overComposite3 = createSVGElement("feComposite");
+overComposite3.setAttribute("in2", "off3");
+overComposite3.setAttribute("operator", "in");
+overComposite3.setAttribute("result", "C3");
+
+var merge = createSVGElement("feMerge");
+
+var mergeNode1 = createSVGElement("feMergeNode");
+mergeNode1.setAttribute("in", "C1");
+
+var mergeNode2 = createSVGElement("feMergeNode");
+mergeNode2.setAttribute("in", "C2");
+
+var mergeNode3 = createSVGElement("feMergeNode");
+mergeNode3.setAttribute("in", "C3");
+
+var mergeNode4 = createSVGElement("feMergeNode");
+mergeNode4.setAttribute("in", "SourceGraphic");
+
+merge.appendChild(mergeNode3);
+merge.appendChild(mergeNode2);
+merge.appendChild(mergeNode1);
+merge.appendChild(mergeNode4);
+
+var overFilter = createSVGElement("filter");
+overFilter.setAttribute("id", "overFilter");
+overFilter.setAttribute("filterUnits", "objectBoundingBox");
+overFilter.setAttribute("x", "0");
+overFilter.setAttribute("y", "0");
+overFilter.setAttribute("width", "3.5");
+overFilter.setAttribute("height", "4");
+overFilter.appendChild(off1);
+overFilter.appendChild(flood1);
+overFilter.appendChild(overComposite1);
+overFilter.appendChild(off2);
+overFilter.appendChild(flood2);
+overFilter.appendChild(overComposite2);
+overFilter.appendChild(off3);
+overFilter.appendChild(flood3);
+overFilter.appendChild(overComposite3);
+overFilter.appendChild(merge);
+
+defsElement.appendChild(overFilter);
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "#408067");
+rect.setAttribute("filter", "url(#overFilter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "operator");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "5s");
+animate.setAttribute("values", "in;out;atop;xor;arithmetic");
+overComposite1.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
+ assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
+}
+
+function sample2() {
+ assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_IN);
+ assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
+}
+
+function sample3() {
+ assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OUT);
+ assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
+}
+
+function sample4() {
+ assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ATOP);
+ assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
+}
+
+function sample5() {
+ assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_XOR);
+ assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
+}
+
+function sample6() {
+ assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC);
+ assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 0.001, sample2],
+ ["animation", 0.999, sample2],
+ ["animation", 1.001, sample3],
+ ["animation", 1.999, sample3],
+ ["animation", 2.001, sample4],
+ ["animation", 2.999, sample4],
+ ["animation", 3.001, sample5],
+ ["animation", 3.999, sample5],
+ ["animation", 4.001, sample6],
+ ["animation", 4.999, sample6],
+ ["animation", 5.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-5.html b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-5.html
new file mode 100644
index 00000000000..1487918bde2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-5.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test MorphologyOperatorType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var morphology = createSVGElement("feMorphology");
+morphology.setAttribute("in", "SourceAlpha");
+morphology.setAttribute("operator", "dilate");
+morphology.setAttribute("radius", "4");
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("filterUnits", "userSpaceOnUse");
+filter.setAttribute("x", "0");
+filter.setAttribute("y", "0");
+filter.setAttribute("width", "700");
+filter.setAttribute("height", "200");
+filter.appendChild(morphology);
+defs.appendChild(filter);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "#408067");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "operator");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "dilate");
+animate.setAttribute("to", "erode");
+morphology.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(morphology.operator.animVal, SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE);
+ assert_equals(morphology.operator.baseVal, SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE);
+}
+
+function sample2() {
+ assert_equals(morphology.operator.animVal, SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_ERODE);
+ assert_equals(morphology.operator.baseVal, SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 1.999, sample1],
+ ["animation", 2.001, sample2],
+ ["animation", 3.999, sample2],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-6.html b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-6.html
new file mode 100644
index 00000000000..e60c93bbbf6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-6.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test ColorMatrixType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var colorMatrix = createSVGElement("feColorMatrix");
+colorMatrix.setAttribute("in", "SourceGraphic");
+colorMatrix.setAttribute("type", "matrix");
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("filterUnits", "userSpaceOnUse");
+filter.setAttribute("x", "0");
+filter.setAttribute("y", "0");
+filter.setAttribute("width", "700");
+filter.setAttribute("height", "200");
+filter.appendChild(colorMatrix);
+defs.appendChild(filter);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "#408067");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "type");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("values", "matrix;saturate;hueRotate;luminanceToAlpha");
+colorMatrix.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(colorMatrix.type.animVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+ assert_equals(colorMatrix.type.baseVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+}
+
+function sample2() {
+ assert_equals(colorMatrix.type.animVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE);
+ assert_equals(colorMatrix.type.baseVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+}
+
+function sample3() {
+ assert_equals(colorMatrix.type.animVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE);
+ assert_equals(colorMatrix.type.baseVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+}
+
+function sample4() {
+ assert_equals(colorMatrix.type.animVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA);
+ assert_equals(colorMatrix.type.baseVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 0.999, sample1],
+ ["animation", 1.001, sample2],
+ ["animation", 1.999, sample2],
+ ["animation", 2.001, sample3],
+ ["animation", 2.999, sample3],
+ ["animation", 3.001, sample4],
+ ["animation", 3.999, sample4],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-7.html b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-7.html
new file mode 100644
index 00000000000..4e2d27e581c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-7.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGStitchOptions/TurbulenceType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("filterUnits", "userSpaceOnUse");
+filter.setAttribute("x", "0");
+filter.setAttribute("y", "0");
+filter.setAttribute("width", "700");
+filter.setAttribute("height", "200");
+defs.appendChild(filter);
+
+var turbulence = createSVGElement("feTurbulence");
+turbulence.setAttribute("in", "foo");
+turbulence.setAttribute("baseFrequency", "0.05");
+turbulence.setAttribute("numOctaves", "3");
+turbulence.setAttribute("seed", "5");
+turbulence.setAttribute("stitchTiles", "stitch");
+turbulence.setAttribute("type", "fractalNoise");
+filter.appendChild(turbulence);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "#408067");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate1 = createSVGElement("animate");
+animate1.setAttribute("id", "animation");
+animate1.setAttribute("attributeName", "type");
+animate1.setAttribute("begin", "0s");
+animate1.setAttribute("dur", "4s");
+animate1.setAttribute("from", "fractalNoise");
+animate1.setAttribute("to", "turbulence");
+turbulence.appendChild(animate1);
+
+var animate2 = createSVGElement("animate");
+animate2.setAttribute("attributeName", "stitchTiles");
+animate2.setAttribute("begin", "0s");
+animate2.setAttribute("dur", "4s");
+animate2.setAttribute("from", "stitch");
+animate2.setAttribute("to", "noStitch");
+turbulence.appendChild(animate2);
+
+// Setup animation test
+function sample1() {
+ assert_equals(turbulence.type.animVal, SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE);
+ assert_equals(turbulence.type.baseVal, SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE);
+
+ assert_equals(turbulence.stitchTiles.animVal, SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH);
+ assert_equals(turbulence.stitchTiles.baseVal, SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH);
+}
+
+function sample2() {
+ assert_equals(turbulence.type.animVal, SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_TURBULENCE);
+ assert_equals(turbulence.type.baseVal, SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE);
+
+ assert_equals(turbulence.stitchTiles.animVal, SVGFETurbulenceElement.SVG_STITCHTYPE_NOSTITCH);
+ assert_equals(turbulence.stitchTiles.baseVal, SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 1.999, sample1],
+ ["animation", 2.001, sample2],
+ ["animation", 3.999, sample2],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-8.html b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-8.html
new file mode 100644
index 00000000000..cd00e46d56d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-8.html
@@ -0,0 +1,114 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test ComponentTransferType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var feRFunc = createSVGElement("feFuncR");
+feRFunc.setAttribute("type", "identity");
+feRFunc.setAttribute("amplitude", "10");
+
+var feGFunc = createSVGElement("feFuncG");
+feGFunc.setAttribute("type", "identity");
+feGFunc.setAttribute("amplitude", "10");
+
+var feBFunc = createSVGElement("feFuncB");
+feBFunc.setAttribute("type", "identity");
+feBFunc.setAttribute("amplitude", "110");
+
+var feAFunc = createSVGElement("feFuncA");
+feAFunc.setAttribute("type", "identity");
+feAFunc.setAttribute("amplitude", "110");
+
+var feComponentTransfer = createSVGElement("feComponentTransfer");
+feComponentTransfer.appendChild(feRFunc);
+feComponentTransfer.appendChild(feGFunc);
+feComponentTransfer.appendChild(feBFunc);
+feComponentTransfer.appendChild(feAFunc);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("filterUnits", "objectBoundingBox");
+filter.setAttribute("x", "0%");
+filter.setAttribute("y", "0%");
+filter.setAttribute("width", "100%");
+filter.setAttribute("height", "100%");
+filter.appendChild(feComponentTransfer);
+
+var defs = createSVGElement("defs");
+defs.appendChild(filter);
+rootSVGElement.appendChild(defs);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "#408067");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "type");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "5s");
+animate.setAttribute("values", "identity;table;discrete;linear;gamma");
+feRFunc.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+ assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+function sample2() {
+ assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_TABLE);
+ assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+function sample3() {
+ assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE);
+ assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+function sample4() {
+ assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_LINEAR);
+ assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+function sample5() {
+ assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA);
+ assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 0.999, sample1],
+ ["animation", 1.001, sample2],
+ ["animation", 1.999, sample2],
+ ["animation", 2.001, sample3],
+ ["animation", 2.999, sample3],
+ ["animation", 3.001, sample4],
+ ["animation", 3.999, sample4],
+ ["animation", 4.001, sample5],
+ ["animation", 4.999, sample5],
+ ["animation", 5.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-9.html b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-9.html
new file mode 100644
index 00000000000..8aa9d6a7618
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgenum-animation-9.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGTextPathSpacingType/SVGTextPathMethodType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var path = createSVGElement("path");
+path.setAttribute("id", "path");
+path.setAttribute("d", "M 50 50 L 200 50");
+rootSVGElement.appendChild(path);
+
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var textPath = createSVGElement("textPath");
+textPath.setAttributeNS(xlinkNS, "xlink:href", "#path");
+textPath.setAttribute("spacing", "auto");
+textPath.setAttribute("method", "align");
+textPath.textContent = "test";
+text.appendChild(textPath);
+
+var animate1 = createSVGElement("animate");
+animate1.setAttribute("id", "animation");
+animate1.setAttribute("attributeName", "spacing");
+animate1.setAttribute("begin", "0s");
+animate1.setAttribute("dur", "4s");
+animate1.setAttribute("from", "auto");
+animate1.setAttribute("to", "exact");
+animate1.setAttribute("fill", "freeze");
+textPath.appendChild(animate1);
+
+var animate2 = createSVGElement("animate");
+animate2.setAttribute("attributeName", "method");
+animate2.setAttribute("begin", "0s");
+animate2.setAttribute("dur", "4s");
+animate2.setAttribute("from", "align");
+animate2.setAttribute("to", "stretch");
+animate2.setAttribute("fill", "freeze");
+textPath.appendChild(animate2);
+
+// Setup animation test
+function sample1() {
+ assert_equals(textPath.method.animVal, SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN);
+ assert_equals(textPath.method.baseVal, SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN);
+
+ assert_equals(textPath.spacing.animVal, SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO);
+ assert_equals(textPath.spacing.baseVal, SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO);
+}
+
+function sample2() {
+ assert_equals(textPath.method.animVal, SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH);
+ assert_equals(textPath.method.baseVal, SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN);
+
+ assert_equals(textPath.spacing.animVal, SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT);
+ assert_equals(textPath.spacing.baseVal, SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 1.999, sample1],
+ ["animation", 2.001, sample2],
+ ["animation", 3.999, sample2],
+ ["animation", 4.001, sample2]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svginteger-animation-1.html b/tests/wpt/web-platform-tests/svg/animations/svginteger-animation-1.html
new file mode 100644
index 00000000000..78035416918
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svginteger-animation-1.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test animation of SVGInteger.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+defs.appendChild(filter);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var feConvolveMatrix = createSVGElement("feConvolveMatrix");
+feConvolveMatrix.setAttribute("id", "feConvlveMatrix");
+feConvolveMatrix.setAttribute("order", "3");
+feConvolveMatrix.setAttribute("kernelMatrix", "0 0 0 0 1 0 0 0 0");
+feConvolveMatrix.setAttribute("targetX", "0");
+filter.appendChild(feConvolveMatrix);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "targetX");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0");
+animate.setAttribute("to", "2");
+feConvlveMatrix.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(feConvolveMatrix.targetX.animVal, 0, epsilon);
+ assert_equals(feConvolveMatrix.targetX.baseVal, 0);
+}
+
+function sample2() {
+ assert_approx_equals(feConvolveMatrix.targetX.animVal, 1, epsilon);
+ assert_equals(feConvolveMatrix.targetX.baseVal, 0);
+}
+
+function sample3() {
+ assert_approx_equals(feConvolveMatrix.targetX.animVal, 2, epsilon);
+ assert_equals(feConvolveMatrix.targetX.baseVal, 0);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svginteger-animation-2.html b/tests/wpt/web-platform-tests/svg/animations/svginteger-animation-2.html
new file mode 100644
index 00000000000..25ef7ff08ef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svginteger-animation-2.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test animation of SVGInteger.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+defs.appendChild(filter);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var feConvolveMatrix = createSVGElement("feConvolveMatrix");
+feConvolveMatrix.setAttribute("id", "feConvlveMatrix");
+feConvolveMatrix.setAttribute("order", "3 1");
+feConvolveMatrix.setAttribute("kernelMatrix", "0 0 1");
+filter.appendChild(feConvolveMatrix);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "order");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "3 1");
+animate.setAttribute("to", "1 3");
+feConvlveMatrix.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(feConvolveMatrix.orderX.animVal, 3, epsilon);
+ assert_approx_equals(feConvolveMatrix.orderY.animVal, 1, epsilon);
+ assert_equals(feConvolveMatrix.orderX.baseVal, 3);
+ assert_equals(feConvolveMatrix.orderY.baseVal, 1);
+}
+
+function sample2() {
+ assert_approx_equals(feConvolveMatrix.orderX.animVal, 2, epsilon);
+ assert_approx_equals(feConvolveMatrix.orderY.animVal, 2, epsilon);
+ assert_equals(feConvolveMatrix.orderX.baseVal, 3);
+ assert_equals(feConvolveMatrix.orderY.baseVal, 1);
+}
+
+function sample3() {
+ assert_approx_equals(feConvolveMatrix.orderX.animVal, 1, epsilon);
+ assert_approx_equals(feConvolveMatrix.orderY.animVal, 3, epsilon);
+ assert_equals(feConvolveMatrix.orderX.baseVal, 3);
+ assert_equals(feConvolveMatrix.orderY.baseVal, 1);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-1.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-1.html
new file mode 100644
index 00000000000..67549890cff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-1.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" by="50" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 4.0, sample3],
+ ["an1", 7.0, sample4],
+ ["an1", 9.0, sample5],
+ ["an1", 60.0, sample5]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-2.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-2.html
new file mode 100644
index 00000000000..e08c99cb63e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-2.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="50" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 4.0, sample3],
+ ["an1", 7.0, sample4],
+ ["an1", 9.0, sample5],
+ ["an1", 60.0, sample5]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-3.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-3.html
new file mode 100644
index 00000000000..b5ac7a033ec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-3.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s, then reset to 10. -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" by="90" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 3.999, sample3],
+ ["an1", 4.001, sample4],
+ ["an1", 7.0, sample5],
+ ["an1", 9.0, sample6],
+ ["an1", 60.0, sample6]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-4.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-4.html
new file mode 100644
index 00000000000..10e8bd7b491
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-4.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s, then reset to 10. -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="90" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 3.999, sample3],
+ ["an1", 4.001, sample4],
+ ["an1", 7.0, sample5],
+ ["an1", 9.0, sample6],
+ ["an1", 60.0, sample6]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-6.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-6.html
new file mode 100644
index 00000000000..43beafe220e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-6.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="90" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 3.999, sample3],
+ ["an1", 4.001, sample4],
+ ["an1", 7.0, sample5],
+ ["an1", 9.0, sample6],
+ ["an1", 60.0, sample6]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-7.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-7.html
new file mode 100644
index 00000000000..7c1dde4a7c6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-7.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="calc(5%)" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="calc(11.25%)" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 3.999, sample3],
+ ["an1", 4.001, sample4],
+ ["an1", 7.0, sample5],
+ ["an1", 9.0, sample6],
+ ["an1", 60.0, sample6]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-8.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-8.html
new file mode 100644
index 00000000000..c61cb65ebd9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-by-8.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="calc(4% + 8)" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="calc(10% + 10)" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 3.999, sample3],
+ ["an1", 4.001, sample4],
+ ["an1", 7.0, sample5],
+ ["an1", 9.0, sample6],
+ ["an1", 60.0, sample6]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-1.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-1.html
new file mode 100644
index 00000000000..ce458e0266c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-1.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests from-by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" from="0" by="50" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 4.0, sample3],
+ ["an1", 7.0, sample4],
+ ["an1", 9.0, sample5],
+ ["an1", 60.0, sample5]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-2.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-2.html
new file mode 100644
index 00000000000..1ac7eed4e1b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-2.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests from-by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 0 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" from="0" by="100" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 0, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 4.0, sample3],
+ ["an1", 4.999, sample3],
+ ["an1", 5.001, sample4],
+ ["an1", 7.0, sample5],
+ ["an1", 9.0, sample6],
+ ["an1", 60.0, sample6]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-3.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-3.html
new file mode 100644
index 00000000000..1c22f351da4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-3.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests from-by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 75 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" from="25" by="25" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 87.5, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 4.0, sample3],
+ ["an1", 4.999, sample3],
+ ["an1", 5.001, sample4],
+ ["an1", 7.0, sample5],
+ ["an1", 9.0, sample6],
+ ["an1", 60.0, sample6]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-4.html b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-4.html
new file mode 100644
index 00000000000..998c37458f9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-additive-from-by-4.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests from-by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 75 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+ <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
+ <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" from="75" by="25" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 87.5, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["an1", 0.0, sample1],
+ ["an1", 2.0, sample2],
+ ["an1", 4.0, sample3],
+ ["an1", 4.999, sample3],
+ ["an1", 5.001, sample4],
+ ["an1", 7.0, sample5],
+ ["an1", 9.0, sample6],
+ ["an1", 60.0, sample6]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeHeight.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeHeight.html
new file mode 100644
index 00000000000..2bb409e8e10
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeHeight.html
@@ -0,0 +1,69 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation on LengthModeHeight.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+rootSVGElement.setAttribute("width", "600");
+rootSVGElement.setAttribute("height", "400");
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("font-size", "10px");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "height");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100");
+animate.setAttribute("to", "50%");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.height.animVal.value, 100, epsilon);
+ assert_equals(rect.height.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.height.animVal.value, 150, epsilon);
+ assert_equals(rect.height.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.height.animVal.value, 200, epsilon);
+ assert_equals(rect.height.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeOther.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeOther.html
new file mode 100644
index 00000000000..1fd9e0a3b9b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeOther.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation on LengthModeOther.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+rootSVGElement.setAttribute("width", "600");
+rootSVGElement.setAttribute("height", "400");
+
+// Setup test document
+var circle = createSVGElement("circle");
+circle.setAttribute("id", "circle");
+circle.setAttribute("cx", "50");
+circle.setAttribute("cy", "50");
+circle.setAttribute("r", "10");
+circle.setAttribute("fill", "green");
+circle.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "r");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "10");
+animate.setAttribute("to", "50%");
+circle.appendChild(animate);
+rootSVGElement.appendChild(circle);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(circle.r.animVal.value, 10, epsilon);
+ assert_equals(circle.r.baseVal.value, 10);
+}
+
+function sample2() {
+ assert_approx_equals(circle.r.animVal.value, 132.5, epsilon);
+ assert_equals(circle.r.baseVal.value, 10);
+}
+
+function sample3() {
+ assert_approx_equals(circle.r.animVal.value, 254.9, epsilon);
+ assert_equals(circle.r.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeWidth.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeWidth.html
new file mode 100644
index 00000000000..9481d434b9a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-LengthModeWidth.html
@@ -0,0 +1,69 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation on LengthModeWidth.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+rootSVGElement.setAttribute("width", "600");
+rootSVGElement.setAttribute("height", "400");
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("font-size", "10px");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100");
+animate.setAttribute("to", "50%");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 300, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-1.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-1.html
new file mode 100644
index 00000000000..9b45c5a8ca0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-1.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation with invalid value: No spaces between number and unit.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100 px");
+animate.setAttribute("to", "200 px");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 0, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample2],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-2.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-2.html
new file mode 100644
index 00000000000..64d5884df44
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-2.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation with invalid value: No spaces before value.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", " 100pxERROR");
+animate.setAttribute("to", " 200pxERROR");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 0, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample2],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-3.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-3.html
new file mode 100644
index 00000000000..0fb1794eaa2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-invalid-value-3.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation with invalid value: No spaces after number and unit.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px ERROR");
+animate.setAttribute("to", "200px ERROR");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 0, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample2],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-number-to-number.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-number-to-number.html
new file mode 100644
index 00000000000..0b4fca52ec0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-number-to-number.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to cm.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100");
+animate.setAttribute("to", "200");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 150, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-cm.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-cm.html
new file mode 100644
index 00000000000..f51beed02b3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-cm.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to cm.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "5cm");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 144.5, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 189, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-ems.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-ems.html
new file mode 100644
index 00000000000..e65125303e1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-ems.html
@@ -0,0 +1,65 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to ems.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("font-size", "10px");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "20em");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 150, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-in.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-in.html
new file mode 100644
index 00000000000..a55b357187a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-in.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to inch.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "2.5in");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 170, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 240, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-number.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-number.html
new file mode 100644
index 00000000000..8eab444caa3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-number.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "200");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 150, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-pc.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-pc.html
new file mode 100644
index 00000000000..62d9d9964f1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-pc.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to pc.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "15pc");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 170, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 240, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-pt.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-pt.html
new file mode 100644
index 00000000000..d86e0907578
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-pt.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to cm.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100pt");
+animate.setAttribute("to", "5cm");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 161.2, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 189, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-px.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-px.html
new file mode 100644
index 00000000000..fdeb773375a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-px-to-px.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to cm.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "200px");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 150, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-unitType.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-unitType.html
new file mode 100644
index 00000000000..4cd6d2d3af5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-unitType.html
@@ -0,0 +1,65 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test change of unit type for SVGLength animation.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100");
+animate.setAttribute("to", "200px");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_equals(rect.width.animVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+ assert_equals(rect.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+}
+
+function sample2() {
+ assert_equals(rect.width.animVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+ assert_equals(rect.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+}
+
+function sample3() {
+ assert_equals(rect.width.animVal.unitType, SVGLength.SVG_LENGTHTYPE_PX);
+ assert_equals(rect.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 1.5, sample2],
+ ["animation", 2.5, sample3],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglength-animation-values.html b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-values.html
new file mode 100644
index 00000000000..a3e485320b0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglength-animation-values.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation set with 'values', different units and different count of spaces.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("values", "100px; 130 ;4cm ;6in; 200pt");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+ assert_approx_equals(rect.width.animVal.value, 130, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+ assert_approx_equals(rect.width.animVal.value, 151.2, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample4() {
+ assert_approx_equals(rect.width.animVal.value, 576, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample5() {
+ assert_approx_equals(rect.width.animVal.value, 267, epsilon);
+ assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 1.0, sample2],
+ ["animation", 2.0, sample3],
+ ["animation", 3.0, sample4],
+ ["animation", 3.999, sample5],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-1.html b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-1.html
new file mode 100644
index 00000000000..198fc8a6fef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-1.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGLengthList with LengthType number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50 70 90 110");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "50 70 90 110");
+animate.setAttribute("to", "60 90 120 150");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 70);
+ assert_equals(text.x.baseVal.getItem(2).value, 90);
+ assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+function sample2() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 55, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 105, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 130, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 70);
+ assert_equals(text.x.baseVal.getItem(2).value, 90);
+ assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+function sample3() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 60, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 90, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 120, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 150, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 70);
+ assert_equals(text.x.baseVal.getItem(2).value, 90);
+ assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-2.html b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-2.html
new file mode 100644
index 00000000000..c1c91b83f0f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-2.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGLengthList with different LengthTypes.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50 70 90 110");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "50 70px 5cm 8pt");
+animate.setAttribute("to", "3cm 80 100px 4in");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 70);
+ assert_equals(text.x.baseVal.getItem(2).value, 90);
+ assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+function sample2() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 81.7, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 75, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 144.5, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 197.3, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 70);
+ assert_equals(text.x.baseVal.getItem(2).value, 90);
+ assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+function sample3() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 113.4, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 100, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 384, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 70);
+ assert_equals(text.x.baseVal.getItem(2).value, 90);
+ assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-3.html b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-3.html
new file mode 100644
index 00000000000..d26e67a8a05
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-3.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<meta name="timeout" content="long">
+<title>Test 'to' animation of SVGLengthList with different count of items.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "50");
+animate.setAttribute("to", "70 80 90 110");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(text.x.animVal.numberOfItems, 1);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 1);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+}
+
+function sample2() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 1);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+}
+
+function sample3() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 1);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script>
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-4.html b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-4.html
new file mode 100644
index 00000000000..0e890ab5f5a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-4.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'by' animation of SVGLengthList.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50 60 70 80");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "50 60 70 80");
+animate.setAttribute("by", "20 20 20 20");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 60, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 80, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 60);
+ assert_equals(text.x.baseVal.getItem(2).value, 70);
+ assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+function sample2() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 60, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 80, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 90, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 60);
+ assert_equals(text.x.baseVal.getItem(2).value, 70);
+ assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+function sample3() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 100, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 60);
+ assert_equals(text.x.baseVal.getItem(2).value, 70);
+ assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-5.html b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-5.html
new file mode 100644
index 00000000000..5d0bc2b4836
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svglengthlist-animation-5.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test additive='sum' animation of SVGLengthList.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50 60 70 80");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("additive", "sum");
+animate.setAttribute("from", "0 0 0 0");
+animate.setAttribute("to", "20 20 20 20");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 60, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 80, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 60);
+ assert_equals(text.x.baseVal.getItem(2).value, 70);
+ assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+function sample2() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 60, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 80, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 90, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 60);
+ assert_equals(text.x.baseVal.getItem(2).value, 70);
+ assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+function sample3() {
+ assert_equals(text.x.animVal.numberOfItems, 4);
+ assert_approx_equals(text.x.animVal.getItem(0).value, 70, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+ assert_approx_equals(text.x.animVal.getItem(3).value, 100, epsilon);
+
+ assert_equals(text.x.baseVal.numberOfItems, 4);
+ assert_equals(text.x.baseVal.getItem(0).value, 50);
+ assert_equals(text.x.baseVal.getItem(1).value, 60);
+ assert_equals(text.x.baseVal.getItem(2).value, 70);
+ assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-1.html b/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-1.html
new file mode 100644
index 00000000000..72c2d736771
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-1.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test for SVGNumber animation.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("opacity", "0");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "opacity");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0");
+animate.setAttribute("to", "1");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0, epsilon);
+}
+
+function sample2() {
+ assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0.5, epsilon);
+}
+
+function sample3() {
+ assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 1, epsilon);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-2.html b/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-2.html
new file mode 100644
index 00000000000..1654480ffce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-2.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test for SVGNumber animation with different exponents.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("opacity", "0");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "opacity");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0e10");
+animate.setAttribute("to", ".1e1");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ // Check initial/end conditions
+ assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0, epsilon);
+}
+
+function sample2() {
+ assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0.5, epsilon);
+}
+
+function sample3() {
+ assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 1, epsilon);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-3.html b/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-3.html
new file mode 100644
index 00000000000..255eeb0a94c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-3.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test for SVGNumber animation with invalid units.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("opacity", "0");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "opacity");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0px");
+animate.setAttribute("to", "1px");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample() {
+ // Check initial/end conditions
+ assert_equals(getComputedStyle(rect).opacity, '0');
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample],
+ ["animation", 2.0, sample],
+ ["animation", 3.999, sample],
+ ["animation", 4.001, sample]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-4.html b/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-4.html
new file mode 100644
index 00000000000..758138d6678
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumber-animation-4.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test for SVGNumber animation on SVG DOM properties.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var gradient = createSVGElement("linearGradient");
+gradient.setAttribute("id", "gradient");
+
+var stop1 = createSVGElement("stop");
+stop1.setAttribute("offset", "0");
+stop1.setAttribute("stop-color", "green");
+gradient.appendChild(stop1);
+
+var stop2 = createSVGElement("stop");
+stop2.setAttribute("offset", "1");
+stop2.setAttribute("stop-color", "red");
+gradient.appendChild(stop2);
+
+var defsElement = createSVGElement("defs");
+defsElement.appendChild(gradient);
+rootSVGElement.appendChild(defsElement);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "url(#gradient)");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeType", "XML");
+animate.setAttribute("attributeName", "offset");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0");
+animate.setAttribute("to", "1");
+animate.setAttribute("fill", "freeze");
+stop1.appendChild(animate);
+
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(stop1.offset.animVal, 0, epsilon);
+ assert_equals(stop1.offset.baseVal, 0);
+}
+
+function sample2() {
+ assert_approx_equals(stop1.offset.animVal, 0.5, epsilon);
+ assert_equals(stop1.offset.baseVal, 0);
+}
+
+function sample3() {
+ assert_approx_equals(stop1.offset.animVal, 1, epsilon);
+ assert_equals(stop1.offset.baseVal, 0);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 4.0, sample3]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumberlist-animation-1.html b/tests/wpt/web-platform-tests/svg/animations/svgnumberlist-animation-1.html
new file mode 100644
index 00000000000..aabb7d7daa1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumberlist-animation-1.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGNumberList animation on 'rotate' attribute of text.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.textContent = "ABCD";
+text.setAttribute("x", "40 60 80 100");
+text.setAttribute("y", "60");
+text.setAttribute("rotate", "15");
+text.setAttribute("fill", "green");
+text.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "rotate");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0 0 0 0");
+animate.setAttribute("to", "45 90 135 180");
+text.appendChild(animate);
+rootSVGElement.appendChild(text);
+
+// Setup animation test
+function sample1() {
+ assert_equals(text.rotate.animVal.numberOfItems, 1);
+ assert_approx_equals(text.rotate.animVal.getItem(0).value, 15, epsilon);
+
+ assert_equals(text.rotate.baseVal.numberOfItems, 1);
+ assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample2() {
+ assert_equals(text.rotate.animVal.numberOfItems, 4);
+ assert_approx_equals(text.rotate.animVal.getItem(0).value, 0, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(1).value, 0, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(2).value, 0, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(3).value, 0, epsilon);
+
+ assert_equals(text.rotate.baseVal.numberOfItems, 1);
+ assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample3() {
+ assert_equals(text.rotate.animVal.numberOfItems, 4);
+ assert_approx_equals(text.rotate.animVal.getItem(0).value, 22.5, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(1).value, 45, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(2).value, 67.5, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(3).value, 90, epsilon);
+
+ assert_equals(text.rotate.baseVal.numberOfItems, 1);
+ assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample4() {
+ assert_equals(text.rotate.animVal.numberOfItems, 4);
+ assert_approx_equals(text.rotate.animVal.getItem(0).value, 45, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(1).value, 90, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(2).value, 135, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(3).value, 180, epsilon);
+
+ assert_equals(text.rotate.baseVal.numberOfItems, 1);
+ assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 0.001, sample2],
+ ["animation", 2.0, sample3],
+ ["animation", 3.999, sample4],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumberlist-animation-2.html b/tests/wpt/web-platform-tests/svg/animations/svgnumberlist-animation-2.html
new file mode 100644
index 00000000000..e62bbf68602
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumberlist-animation-2.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'by' animation of SVGNumberList on 'rotate' attribute of text.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.textContent = "ABCD";
+text.setAttribute("x", "40 60 80 100");
+text.setAttribute("y", "60");
+text.setAttribute("rotate", "15");
+text.setAttribute("fill", "green");
+text.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "rotate");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0 45 90 135");
+animate.setAttribute("by", "45 45 45 45");
+text.appendChild(animate);
+rootSVGElement.appendChild(text);
+
+// Setup animation test
+function sample1() {
+ assert_equals(text.rotate.animVal.numberOfItems, 1);
+ assert_approx_equals(text.rotate.animVal.getItem(0).value, 15, epsilon);
+
+ assert_equals(text.rotate.baseVal.numberOfItems, 1);
+ assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample2() {
+ assert_equals(text.rotate.animVal.numberOfItems, 4);
+ assert_approx_equals(text.rotate.animVal.getItem(0).value, 0, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(1).value, 45, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(2).value, 90, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(3).value, 135, epsilon);
+
+ assert_equals(text.rotate.baseVal.numberOfItems, 1);
+ assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample3() {
+ assert_equals(text.rotate.animVal.numberOfItems, 4);
+ assert_approx_equals(text.rotate.animVal.getItem(0).value, 22.5, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(1).value, 67.5, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(2).value, 112.5, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(3).value, 157.5, epsilon);
+
+ assert_equals(text.rotate.baseVal.numberOfItems, 1);
+ assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample4() {
+ assert_equals(text.rotate.animVal.numberOfItems, 4);
+ assert_approx_equals(text.rotate.animVal.getItem(0).value, 45, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(1).value, 90, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(2).value, 135, epsilon);
+ assert_approx_equals(text.rotate.animVal.getItem(3).value, 180, epsilon);
+
+ assert_equals(text.rotate.baseVal.numberOfItems, 1);
+ assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 0.001, sample2],
+ ["animation", 2.0, sample3],
+ ["animation", 3.999, sample4],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-1.html b/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-1.html
new file mode 100644
index 00000000000..b20855140ff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-1.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGNumberOptionalNumber with optional number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("x", "-30%");
+filter.setAttribute("y", "-30%");
+filter.setAttribute("width", "160%");
+filter.setAttribute("height", "160%");
+defs.appendChild(filter);
+
+var feGaussianBlur = createSVGElement("feGaussianBlur");
+feGaussianBlur.setAttribute("id", "blur");
+feGaussianBlur.setAttribute("stdDeviation", "5");
+filter.appendChild(feGaussianBlur);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "50");
+rect.setAttribute("y", "50");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "stdDeviation");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "5 5");
+animate.setAttribute("to", "40 10");
+feGaussianBlur.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 5, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 5, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+function sample2() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 22.5, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 7.5, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+function sample3() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 40, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 10, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.clickX = 100;
+window.clickY = 100;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-2.html b/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-2.html
new file mode 100644
index 00000000000..db2576533ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-2.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGNumberOptionalNumber without optional number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("x", "-30%");
+filter.setAttribute("y", "-30%");
+filter.setAttribute("width", "160%");
+filter.setAttribute("height", "160%");
+defs.appendChild(filter);
+
+var feGaussianBlur = createSVGElement("feGaussianBlur");
+feGaussianBlur.setAttribute("id", "blur");
+feGaussianBlur.setAttribute("stdDeviation", "5");
+filter.appendChild(feGaussianBlur);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "50");
+rect.setAttribute("y", "50");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "stdDeviation");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "5");
+animate.setAttribute("to", "40 10");
+feGaussianBlur.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 5, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 5, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+function sample2() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 22.5, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 7.5, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+function sample3() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 40, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 10, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.clickX = 60;
+window.clickY = 60;
+
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-3.html b/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-3.html
new file mode 100644
index 00000000000..974c1d7034a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/animations/svgnumberoptionalnumber-animation-3.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGNumberOptionalNumber without optional number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("x", "-30%");
+filter.setAttribute("y", "-30%");
+filter.setAttribute("width", "160%");
+filter.setAttribute("height", "160%");
+defs.appendChild(filter);
+
+var feGaussianBlur = createSVGElement("feGaussianBlur");
+feGaussianBlur.setAttribute("id", "blur");
+feGaussianBlur.setAttribute("stdDeviation", "40 10");
+filter.appendChild(feGaussianBlur);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "50");
+rect.setAttribute("y", "50");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "stdDeviation");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "40 10");
+animate.setAttribute("to", "5");
+feGaussianBlur.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 40, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 10, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 40);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 10);
+}
+
+function sample2() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 22.5, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 7.5, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 40);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 10);
+}
+
+function sample3() {
+ assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 5, epsilon);
+ assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 5, epsilon);
+
+ assert_equals(feGaussianBlur.stdDeviationX.baseVal, 40);
+ assert_equals(feGaussianBlur.stdDeviationY.baseVal, 10);
+}
+
+smil_async_test((t) => {
+ const expectedValues = [
+ // [animationId, time, sampleCallback]
+ ["animation", 0.0, sample1],
+ ["animation", 2.0, sample2],
+ ["animation", 3.999, sample3],
+ ["animation", 4.001, sample1]
+ ];
+
+ runAnimationTest(t, expectedValues);
+});
+
+window.clickX = 60;
+window.clickY = 60;
+
+</script> \ No newline at end of file