diff --git a/.gitmodules b/.gitmodules
index bf2d7fe..3d9dfc5 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,4 @@
[submodule "test/web-platform-tests"]
- path = test/web-platform-tests
- url = https://github.com/w3c/web-platform-tests.git
+ path = test/web-platform-tests
+ url = https://github.com/alancutter/web-platform-tests.git
+ branch = nativeShippingAPI
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ee6d735..6055bfa 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -15,6 +15,8 @@ You can run the tests in an interactive mode with `grunt debug`. This starts the
Karma server once for each polyfill target for each test framework.
Navigate to `http://localhost:9876/debug.html` to open the test runner in your
browser of choice, all test results appear in the Javascript console.
+Test failures can be accessed via `window.failures` and `window.formattedFailures`
+once the tests have completed.
The polyfill target and tests can be specified as arguments to the `debug` task.
Example: `grunt debug:web-animations-next:test/web-platform-tests/web-animations/animation/pause.html`
diff --git a/Gruntfile.js b/Gruntfile.js
index f43ceb6..097828f 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -227,11 +227,7 @@ module.exports = function(grunt) {
});
}
function runWebPlatformTests() {
- if (!config.runWebPlatformTests) {
- return Promise.resolve(true);
- }
-
- var testFiles = filterTests(grunt.file.expand('test/web-platform-tests/web-animations/**/*.html'));
+ var testFiles = filterTests(grunt.file.expand(config.webPlatformTests));
if (testFiles.length == 0) {
return Promise.resolve(true);
}
@@ -241,6 +237,7 @@ module.exports = function(grunt) {
configCallback(karmaConfig);
karmaConfig.client.testharnessTests = require('./test/web-platform-tests-expectations.js');
karmaConfig.client.testharnessTests.testURLList = testFiles;
+ karmaConfig.proxies['/polyfill.js'] = '/base/' + task.target + '.min.js';
karmaConfig.files.push('test/karma-testharness-adapter.js');
var servedFiles = [
'test/web-platform-tests/resources/**',
diff --git a/package.json b/package.json
index 09942d8..f2d5853 100644
--- a/package.json
+++ b/package.json
@@ -41,6 +41,6 @@
"source-map": "~0.1.40"
},
"scripts": {
- "test": "grunt test gjslint git-status checkrepo"
+ "test": "grunt web-animations web-animations-next test gjslint git-status checkrepo"
}
}
diff --git a/target-config.js b/target-config.js
index c9e47e1..05caf2a 100644
--- a/target-config.js
+++ b/target-config.js
@@ -110,6 +110,26 @@
'test/js/timeline.js',
'test/js/web-animations-next-animation.js');
+ var webAnimations1WebPlatformTests = [
+ 'test/web-platform-tests/web-animations/animation-model/animation-types/discrete-animation.html',
+ 'test/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context.html',
+ 'test/web-platform-tests/web-animations/animation-model/keyframe-effects/the-effect-value-of-a-keyframe-effect.html',
+ 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-basic.html',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/cancel.html',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/id.html',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/pause.html',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/play.html',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/playState.html',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/startTime.html',
+ 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing.html',
+ 'test/web-platform-tests/web-animations/timing-model/animation-effects/active-time.html',
+ 'test/web-platform-tests/web-animations/timing-model/animation-effects/simple-iteration-progress.html',
+ ];
+
+ var webAnimationsNextWebPlatformTests = [
+ 'test/web-platform-tests/web-animations/**/*.html',
+ ];
+
// This object specifies the source and test files for different Web Animation build targets.
var targetConfig = {
'web-animations': {
@@ -120,7 +140,7 @@
webAnimationsNextSrc: [],
src: scopeSrc.concat(sharedSrc).concat(webAnimations1Src).concat(webAnimations1BonusSrc),
polyfillTests: webAnimations1PolyfillTests,
- runWebPlatformTests: false,
+ webPlatformTests: webAnimations1WebPlatformTests,
},
'web-animations-next': {
scopeSrc: scopeSrc,
@@ -130,7 +150,7 @@
webAnimationsNextSrc: webAnimationsNextSrc,
src: scopeSrc.concat(sharedSrc).concat(webAnimations1Src).concat(webAnimations1BonusSrc).concat(webAnimationsNextSrc),
polyfillTests: webAnimationsNextPolyfillTests,
- runWebPlatformTests: true,
+ webPlatformTests: webAnimationsNextWebPlatformTests,
},
'web-animations-next-lite': {
scopeSrc: scopeSrc,
@@ -140,7 +160,7 @@
webAnimationsNextSrc: webAnimationsNextSrc,
src: scopeSrc.concat(sharedSrc).concat(liteWebAnimations1Src).concat(webAnimations1BonusSrc).concat(webAnimationsNextSrc),
polyfillTests: [],
- runWebPlatformTests: false,
+ webPlatformTests: [],
},
};
diff --git a/test/karma-config.js b/test/karma-config.js
index e334c87..23c376e 100644
--- a/test/karma-config.js
+++ b/test/karma-config.js
@@ -21,7 +21,6 @@ module.exports = function(config) {
'/resources/WebIDLParser.js': '/base/test/web-platform-tests/resources/webidl2/lib/webidl2.js',
'/test/': '/base/test/',
- '/polyfill/': '/base/',
},
});
};
diff --git a/test/karma-testharness-adapter.js b/test/karma-testharness-adapter.js
index fb80660..780d693 100644
--- a/test/karma-testharness-adapter.js
+++ b/test/karma-testharness-adapter.js
@@ -19,7 +19,7 @@
return '\'' + string.replace(/\\/g, '\\\\').replace(/\n/g, '\\n').replace(/'/g, '\\\'') + '\'';
}
- function checkExpectations(testURL, passes, failures, expectedFailures, flakyTestIndicator) {
+ function checkExpectations(testURL, passes, failures, expectedFailures) {
expectedFailures = expectedFailures || {};
var failedDifferently = false;
@@ -37,7 +37,7 @@
for (var name in failures) {
var message = failures[name];
if (name in expectedFailures) {
- if (expectedFailures[name] != flakyTestIndicator && message != expectedFailures[name]) {
+ if (message != expectedFailures[name]) {
failedDifferently = true;
differentFailures[name] = message;
}
@@ -47,7 +47,7 @@
}
}
for (var name in expectedFailures) {
- if (name in passes && expectedFailures[name] != flakyTestIndicator) {
+ if (name in passes) {
passedUnexpectedly = true;
unexpectedPasses.push(name);
} else if (!(name in failures)) {
@@ -122,9 +122,29 @@
return true;
}
- function runRemainingTests(remainingTestURLs, config, testNameDiv, iframe) {
+ // Serialises the failures suitable for pasting into expectedFailures: {} in web-platform-tests-expectations.js
+ function formatFailures(failures) {
+ var testURLs = Object.keys(failures);
+ testURLs.sort();
+ return testURLs.map(function(testURL) {
+ var tests = Object.keys(failures[testURL]);
+ tests.sort();
+ return (
+ ' ' + stringify(testURL) + ': {\n' +
+ tests.map(function(test) {
+ return (
+ ' ' + stringify(test) + ':\n' +
+ ' ' + stringify(failures[testURL][test]) + ',\n');
+ }).join('\n') +
+ ' },\n');
+ }).join('\n');
+ }
+
+ function runRemainingTests(remainingTestURLs, config, testNameDiv, iframe, outputFailures) {
if (remainingTestURLs.length == 0) {
karma.complete();
+ window.failures = outputFailures;
+ window.formattedFailures = formatFailures(outputFailures);
return;
}
@@ -136,7 +156,7 @@
description: '',
skipped: true,
});
- runRemainingTests(remainingTestURLs.slice(1), config, testNameDiv, iframe);
+ runRemainingTests(remainingTestURLs.slice(1), config, testNameDiv, iframe, outputFailures);
return;
}
@@ -144,9 +164,14 @@
// parent window and call it once testharness.js has loaded.
window.onTestharnessLoaded = function(innerWindow) {
innerWindow.add_completion_callback(function(results) {
+ var expectations = config.expectedFailures[testURL];
var failures = {};
var passes = {};
results.forEach(function(result) {
+ if (expectations && expectations[result.name] == config.flakyTestIndicator) {
+ failures[result.name] = config.flakyTestIndicator;
+ return;
+ }
if (result.status == 0) {
passes[result.name] = true;
} else {
@@ -156,16 +181,18 @@
failures[result.name] = result.message;
}
});
+ if (Object.keys(failures).length > 0) {
+ outputFailures[testURL] = failures;
+ }
- karma.result(checkExpectations(testURL, passes, failures, config.expectedFailures[testURL], config.flakyTestIndicator));
- runRemainingTests(remainingTestURLs.slice(1), config, testNameDiv, iframe);
+ karma.result(checkExpectations(testURL, passes, failures, expectations));
+ runRemainingTests(remainingTestURLs.slice(1), config, testNameDiv, iframe, outputFailures);
});
};
testNameDiv.textContent = testURL;
iframe.src = testURL;
}
-
karma.start = function() {
// Karma's config.client object appears as karma.config here.
var config = karma.config.testharnessTests;
@@ -182,6 +209,6 @@
iframe.style.height = 'calc(100vh - 60px)';
document.body.appendChild(iframe);
- runRemainingTests(config.testURLList, config, testNameDiv, iframe);
+ runRemainingTests(config.testURLList, config, testNameDiv, iframe, {});
};
})();
diff --git a/test/resources/testharnessreport.js b/test/resources/testharnessreport.js
index 6592518..66fe608 100644
--- a/test/resources/testharnessreport.js
+++ b/test/resources/testharnessreport.js
@@ -406,9 +406,8 @@ function dump_test_results(tests, status) {
}
/* BEGIN WEB ANIMATIONS POLYFILL EXTRAS */
-// TODO(alancutter): Use a generic script injection method to allow grunt to choose what
-// version of the polyfill to load for testing.
-document.write('');
+// The path /polyfill.js is expected to be a proxy for the appropriate polyfill script configured in Karma.
+document.write('');
if (window.parent && parent.window.onTestharnessLoaded) {
parent.window.onTestharnessLoaded(window);
} else {
diff --git a/test/web-platform-tests b/test/web-platform-tests
index d3167e5..d773d88 160000
--- a/test/web-platform-tests
+++ b/test/web-platform-tests
@@ -1 +1 @@
-Subproject commit d3167e5d979192509c69f03e99d65ef62c751273
+Subproject commit d773d88789f2e4eb0c4cd46062f93f5ba4e0521d
diff --git a/test/web-platform-tests-expectations.js b/test/web-platform-tests-expectations.js
index abf45c1..e6402a9 100644
--- a/test/web-platform-tests-expectations.js
+++ b/test/web-platform-tests-expectations.js
@@ -1,236 +1,337 @@
// Expectations to be used by karma-testharness-adapter.js.
module.exports = {
skip: {
- 'test/web-platform-tests/web-animations/animation/constructor.html':
+ 'test/web-platform-tests/web-animations/interfaces/Animation/constructor.html':
'KeyframeEffectReadOnly is not defined causing the test to timeout.',
- 'test/web-platform-tests/web-animations/keyframe-effect/effect-easing.html':
+ 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing.html':
+ 'It seems to enter an infinite loop and halt the browser.',
+
+ 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/effect-easing-steps.html':
'It seems to enter an infinite loop and halt the browser.',
},
flakyTestIndicator: 'FLAKY_TEST_RESULT',
expectedFailures: {
- 'test/web-platform-tests/web-animations/animatable/animate.html': {
- // Serialization of objects cannot be feasibly overwritten by the polyfill.
+ 'test/web-platform-tests/web-animations/animation-model/keyframe-effects/the-effect-value-of-a-keyframe-effect.html': {
+ 'Overlapping keyframes at 0 and 1 use the appropriate value when the progress is outside the range [0, 1]':
+ 'assert_equals: When progress is negative, the first keyframe with a 0 offset should be used expected "0" but got "0.151"',
+ },
+
+ 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-basic.html': {
'Element.animate() creates an Animation object':
'assert_equals: Returned object is an Animation expected "[object Animation]" but got "[object Object]"',
- // Serialization of objects cannot be feasibly overwritten by the polyfill.
- 'Element.animate() creates an Animation object with a KeyframeEffect':
- 'assert_equals: Returned Animation has a KeyframeEffect expected "[object KeyframeEffect]" but got "[object Object]"',
+ 'Element.animate() does not accept keyframes not loosely sorted by offset':
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.input, 2000);\n }" threw object "[object Object]" ("InvalidModificationError") expected object "[object Object]" ("TypeError")',
- 'Element.animate() accepts a one property two value property-indexed keyframes specification':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'Element.animate() does not accept keyframes with an invalid composite value':
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.input, 2000);\n }" threw object "[object Object]" ("NotSupportedError") expected object "[object Object]" ("TypeError")',
- 'Element.animate() accepts a one shorthand property two value property-indexed keyframes specification':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,margin,offset" but got "marginBottom,marginLeft,marginRight,marginTop,offset"',
+ 'Element.animate() does not accept keyframes with an out-of-bounded negative offset':
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.input, 2000);\n }" did not throw',
- 'Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification':
- 'assert_equals: number of frames expected 2 but got 4',
+ 'Element.animate() does not accept keyframes with an out-of-bounded positive offset':
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.input, 2000);\n }" did not throw',
- 'Element.animate() accepts a two property two value property-indexed keyframes specification':
- 'assert_equals: number of frames expected 2 but got 4',
+ 'Element.animate() does not accept property-indexed keyframes with an invalid easing value':
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.input, 2000);\n }" did not throw',
+ },
- 'Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values':
- 'assert_equals: number of frames expected 3 but got 5',
+ 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-effect.html': {
+ 'Element.animate() accepts a double as an options argument':
+ 'assert_equals: expected "auto" but got "none"',
- 'Element.animate() accepts a property-indexed keyframes specification with an invalid value':
- 'assert_equals: number of frames expected 5 but got 10',
+ 'Element.animate() accepts a keyframe sequence where greater shorthand precedes lesser shorthand':
+ 'anim.effect.getKeyframes is not a function',
- 'Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,offset,opacity" but got "offset,opacity"',
+ 'Element.animate() accepts a keyframe sequence where lesser shorthand precedes greater shorthand':
+ 'anim.effect.getKeyframes is not a function',
- 'Element.animate() accepts a one property one value property-indexed keyframes specification':
+ 'Element.animate() accepts a keyframe sequence where longhand precedes shorthand':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a keyframe sequence where shorthand precedes longhand':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a keyframe sequence with a CSS variable reference':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a keyframe sequence with a CSS variable reference in a shorthand property':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset':
+ 'add compositing is not supported',
+
+ 'Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a keyframe sequence with repeated values at offset 1 with different easings':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a one property keyframe sequence with all omitted offsets':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a one property keyframe sequence with some omitted offsets':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a one property one keyframe sequence':
'Partial keyframes are not supported',
'Element.animate() accepts a one property one non-array value property-indexed keyframes specification':
'Partial keyframes are not supported',
+ 'Element.animate() accepts a one property one value property-indexed keyframes specification':
+ 'Partial keyframes are not supported',
+
+ 'Element.animate() accepts a one property two keyframe sequence':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a one property two keyframe sequence that needs to stringify its values':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a one property two value property-indexed keyframes specification':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values':
+ 'anim.effect.getKeyframes is not a function',
+
'Element.animate() accepts a one property two value property-indexed keyframes specification where the first value is invalid':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'anim.effect.getKeyframes is not a function',
'Element.animate() accepts a one property two value property-indexed keyframes specification where the second value is invalid':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'anim.effect.getKeyframes is not a function',
- 'Element.animate() accepts a two property property-indexed keyframes specification where one property is missing from the first keyframe':
- 'Partial keyframes are not supported',
+ 'Element.animate() accepts a one shorthand property two keyframe sequence':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a one shorthand property two value property-indexed keyframes specification':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference':
+ 'anim.effect.getKeyframes is not a function',
- 'Element.animate() accepts a two property property-indexed keyframes specification where one property is missing from the last keyframe':
+ 'Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference in a shorthand property':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a property-indexed keyframes specification with an invalid value':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a single keyframe sequence with omitted offsets':
'Partial keyframes are not supported',
- 'Element.animate() accepts a property-indexed keyframes specification with repeated values at offset 0 with different easings':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "easing,left,offset"',
+ 'Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence':
+ 'anim.effect.getKeyframes is not a function',
- 'Element.animate() accepts a one property one keyframe sequence':
+ 'Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a two property four keyframe sequence':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a two property keyframe sequence where one property is missing from the first keyframe':
'Partial keyframes are not supported',
- 'Element.animate() accepts a one property two keyframe sequence':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'Element.animate() accepts a two property keyframe sequence where one property is missing from the last keyframe':
+ 'Partial keyframes are not supported',
+
+ 'Element.animate() accepts a two property keyframe sequence with some omitted offsets':
+ 'anim.effect.getKeyframes is not a function',
+
+ 'Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values':
+ 'anim.effect.getKeyframes is not a function',
'Element.animate() accepts a two property two keyframe sequence':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset,top" but got "left,offset,top"',
+ 'anim.effect.getKeyframes is not a function',
- 'Element.animate() accepts a one shorthand property two keyframe sequence':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,margin,offset" but got "marginBottom,marginLeft,marginRight,marginTop,offset"',
+ 'Element.animate() accepts a two property two value property-indexed keyframes specification':
+ 'anim.effect.getKeyframes is not a function',
- 'Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,margin,marginTop,offset" but got "marginBottom,marginLeft,marginRight,marginTop,offset"',
+ 'Element.animate() accepts an absent options argument':
+ 'assert_equals: expected (string) "auto" but got (number) 0',
- 'Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'Element.animate() creates an Animation object with a KeyframeEffect':
+ 'assert_equals: Returned Animation has a KeyframeEffect expected "[object KeyframeEffect]" but got "[object Object]"',
+ },
- 'Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-pseudo-element.html': {
+ 'CSSPseudoElement.animate() creates an Animation object':
+ 'document.getAnimations is not a function',
- 'Element.animate() accepts a two property four keyframe sequence':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object':
+ 'document.getAnimations is not a function',
+ },
- 'Element.animate() accepts a single keyframe sequence with omitted offsets':
- 'Partial keyframes are not supported',
+ 'test/web-platform-tests/web-animations/interfaces/Animatable/animate-timeline.html': {
+ 'Element.animate() correctly sets the Animation\'s timeline when triggered on an element in a different document':
+ 'div.animate is not a function',
+ },
- 'Element.animate() accepts a one property keyframe sequence with some omitted offsets':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/cancel.html': {
+ 'After cancelling an animation, it can still be seeked':
+ 'assert_equals: margin-left style is updated when cancelled animation is seeked expected "50px" but got "0px"',
- 'Element.animate() accepts a two property keyframe sequence with some omitted offsets':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset,top" but got "left,offset,top"',
+ 'Animated style is cleared after calling Animation.cancel()':
+ 'assert_not_equals: transform style is animated before cancelling got disallowed value "none"',
+ },
- 'Element.animate() accepts a one property keyframe sequence with all omitted offsets':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "left,offset"',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/finish.html': {
+ 'Test exceptions when finishing infinite animation':
+ 'assert_throws: function "function () {\n"use strict";\n\n animation.finish();\n }" did not throw',
- 'Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,left,offset" but got "easing,left,offset"',
+ 'Test exceptions when finishing non-running animation':
+ 'assert_throws: function "function () {\n"use strict";\n\n animation.finish();\n }" did not throw',
- 'Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset':
- 'add compositing is not supported',
+ 'Test finish() resolves finished promise synchronously with an animation without a target':
+ 'KeyframeEffectReadOnly is not defined',
- 'Element.animate() accepts a one property two keyframe sequence that needs to stringify its values':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,offset,opacity" but got "offset,opacity"',
+ 'Test finish() while pause-pending with negative playbackRate':
+ 'assert_equals: The start time of a pause-pending animation should be set after calling finish() expected (undefined) undefined but got (number) 100000',
- 'Element.animate() accepts a keyframe sequence where shorthand precedes longhand':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,margin,marginRight,offset" but got "marginBottom,marginLeft,marginRight,marginTop,offset"',
+ 'Test finish() while pause-pending with positive playbackRate':
+ 'assert_approx_equals: The start time of a pause-pending animation should be set after calling finish() expected NaN +/- 0.0005 but got 0',
- 'Element.animate() accepts a keyframe sequence where longhand precedes shorthand':
- 'assert_equals: properties on ComputedKeyframe #0 expected "computedOffset,easing,margin,marginRight,offset" but got "marginBottom,marginLeft,marginRight,marginTop,offset"',
+ 'Test finish() while paused':
+ 'assert_equals: The play state of a paused animation should become "finished" after finish() is called expected "finished" but got "paused"',
- 'Element.animate() accepts a keyframe sequence where lesser shorthand precedes greater shorthand':
- 'assert_equals: properties on ComputedKeyframe #0 expected "border,borderLeft,computedOffset,easing,offset" but got "borderBottomColor,borderBottomStyle,borderBottomWidth,borderLeftColor,borderLeftStyle,borderLeftWidth,borderRightColor,borderRightStyle,borderRightWidth,borderTopColor,borderTopStyle,borderTopWidth,offset"',
+ 'Test finish() while play-pending':
+ 'assert_approx_equals: The start time of a play-pending animation should be set after calling finish() expected NaN +/- 0.0005 but got 0',
- 'Element.animate() accepts a keyframe sequence where greater shorthand precedes lesser shorthand':
- 'assert_equals: properties on ComputedKeyframe #0 expected "border,borderLeft,computedOffset,easing,offset" but got "borderBottomColor,borderBottomStyle,borderBottomWidth,borderLeftColor,borderLeftStyle,borderLeftWidth,borderRightColor,borderRightStyle,borderRightWidth,borderTopColor,borderTopStyle,borderTopWidth,offset"',
+ 'Test finishing of animation with a current time past the effect end':
+ 'animation.effect.getComputedTiming is not a function',
- 'Element.animate() does not accept keyframes with an out-of-bounded positive offset':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.in..." did not throw',
+ 'Test normally finished animation resolves finished promise synchronously with an animation without a target':
+ 'KeyframeEffectReadOnly is not defined',
+ },
- 'Element.animate() does not accept keyframes with an out-of-bounded negative offset':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.in..." did not throw',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/finished.html': {
+ 'Test finished promise changes for animation duration changes':
+ 'assert_equals: currentTime should be unchanged when duration shortened expected 50000 but got 25000',
- 'Element.animate() does not accept keyframes not loosely sorted by offset':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.in..." threw object "[object Object]" ("InvalidModificationError") expected object "[object Object]" ("TypeError")',
+ 'Test finished promise is not resolved once the animation falls out finished state even though the current finished promise is generated soon after animation state became finished':
+ 'assert_unreached: Animation.finished should not be resolved Reached unreachable code',
- 'Element.animate() does not accept property-indexed keyframes with an invalid easing value':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.in..." did not throw',
+ 'Test finished promise is not resolved when the animation falls out finished state immediately':
+ 'assert_unreached: Animation.finished should not be resolved Reached unreachable code',
- 'Element.animate() does not accept a keyframe sequence with an invalid easing value':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.in..." did not throw',
+ 'cancelling an already-finished animation replaces the finished promise':
+ 'assert_not_equals: A new finished promise should be created when cancelling a finished animation got disallowed value object "[object Promise]"',
- 'Element.animate() does not accept keyframes with an invalid composite value':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate(subtest.in..." threw object "[object Object]" ("NotSupportedError") expected object "[object Object]" ("TypeError")',
+ 'cancelling an idle animation still replaces the finished promise':
+ 'assert_not_equals: A redundant call to cancel() should still generate a new finished promise got disallowed value object "[object Promise]"',
+ },
- 'Element.animate() accepts a double as an options argument':
- 'assert_equals: expected "auto" but got "none"',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/oncancel.html': {
+ 'oncancel event is fired when animation.cancel() is called.':
+ 'FLAKY_TEST_RESULT',
+ },
- 'Element.animate() accepts an absent options argument':
- 'assert_equals: expected (string) "auto" but got (number) 0',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/onfinish.html': {
+ 'onfinish event is fired when animation.finish() is called':
+ 'FLAKY_TEST_RESULT',
+ },
- 'Element.animate() correctly sets the Animation\'s timeline when triggered on an element in a different document':
- 'div.animate is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/pause.html': {
+ 'pause() from idle':
+ 'assert_equals: currentTime is set to 0 expected (number) 0 but got (object) null',
- 'CSSPseudoElement.animate() creates an Animation object':
- 'document.getAnimations is not a function',
+ 'pause() from idle with a negative playbackRate':
+ 'assert_equals: currentTime is set to the effect end expected (number) 1000000 but got (object) null',
- 'CSSPseudoElement.animate() creates an Animation object targeting to the correct CSSPseudoElement object':
- 'document.getAnimations is not a function',
+ 'pause() from idle with a negative playbackRate and endless effect':
+ 'assert_throws: Expect InvalidStateError exception on calling pause() from idle with a negative playbackRate and infinite-duration animation function "function () {\n"use strict";\n animation.pause(); }" did not throw',
},
- 'test/web-platform-tests/web-animations/animation-effect-timing/delay.html': {
- 'set delay 100':
- 'anim.effect.getComputedTiming is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/play.html': {
+ 'play() throws when seeking an infinite-duration animation played in reverse':
+ 'assert_throws: Expected InvalidStateError exception on calling play() with a negative playbackRate and infinite-duration animation function "function () {\n"use strict";\n animation.play(); }" did not throw',
+ },
- 'set delay -100':
- 'anim.effect.getComputedTiming is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/playState.html': {
+ 'Animation.playState is \'paused\' after cancelling an animation, seeking it makes it paused':
+ 'assert_equals: After seeking an idle animation, it is effectively paused expected "paused" but got "idle"',
+ },
- 'Test adding a positive delay to an animation without a backwards fill makes it no longer active':
- 'anim.effect.getComputedTiming is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/playbackRate.html': {
+ 'Test the effect of setting playbackRate while playing animation':
+ 'FLAKY_TEST_RESULT',
+ },
- 'Test seeking an animation by setting a negative delay':
- 'anim.effect.getComputedTiming is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/Animation/reverse.html': {
+ 'reverse() when playbackRate < 0 and currentTime < 0':
+ 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 expected 0 but got -200000',
- 'Test finishing an animation using a large negative delay':
- 'anim.effect.getComputedTiming is not a function',
+ 'reverse() when playbackRate < 0 and currentTime < 0 and the target effect end is positive infinity':
+ 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 and the target effect is positive infinity expected 0 but got -200000',
+
+ 'reverse() when playbackRate < 0 and currentTime > effect end':
+ 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime > effect end expected 0 but got 200000',
+
+ 'reverse() when playbackRate > 0 and currentTime < 0':
+ 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime < 0 expected 100000 but got -200000',
+
+ 'reverse() when playbackRate > 0 and currentTime < 0 and the target effect end is positive infinity':
+ 'assert_throws: reverse() should throw InvalidStateError if the playbackRate > 0 and the currentTime < 0 and the target effect is positive infinity function "function () {\n"use strict";\n animation.reverse(); }" did not throw',
+
+ 'reverse() when playbackRate > 0 and currentTime > effect end':
+ 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime > effect end expected 100000 but got 200000',
},
- 'test/web-platform-tests/web-animations/animation-effect-timing/duration.html': {
- 'set duration 123.45':
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/delay.html': {
+ 'Test adding a positive delay to an animation without a backwards fill makes it no longer active':
'anim.effect.getComputedTiming is not a function',
- 'set duration auto':
+ 'Test finishing an animation using a large negative delay':
'anim.effect.getComputedTiming is not a function',
- 'set auto duration in animate as object':
- 'assert_equals: set duration \'auto\' expected (string) "auto" but got (number) 0',
+ 'Test seeking an animation by setting a negative delay':
+ 'anim.effect.getComputedTiming is not a function',
- 'set duration Infinity':
+ 'set delay -100':
'anim.effect.getComputedTiming is not a function',
- 'set negative duration in animate using a duration parameter':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [..." did not throw',
+ 'set delay 100':
+ 'anim.effect.getComputedTiming is not a function',
+ },
- 'set negative Infinity duration in animate using a duration parameter':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [..." did not throw',
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html': {
+ 'set 100 string duration in animate using an options object':
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [ 0, 1 ] }, { duration: \'100\' });\n }" did not throw',
'set NaN duration in animate using a duration parameter':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [..." did not throw',
-
- 'set negative duration in animate using an options object':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [..." did not throw',
-
- 'set negative Infinity duration in animate using an options object':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [..." did not throw',
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [ 0, 1 ] }, NaN);\n }" did not throw',
'set NaN duration in animate using an options object':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [..." did not throw',
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [ 0, 1 ] }, { duration: NaN });\n }" did not throw',
'set abc string duration in animate using an options object':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [..." did not throw',
-
- 'set 100 string duration in animate using an options object':
- 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [..." did not throw',
+ 'assert_throws: function "function () {\n"use strict";\n\n div.animate({ opacity: [ 0, 1 ] }, { duration: \'abc\' });\n }" did not throw',
- 'set negative duration':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.durat..." did not throw',
+ 'set auto duration in animate as object':
+ 'assert_equals: set duration \'auto\' expected (string) "auto" but got (number) 0',
- 'set negative Infinity duration':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.durat..." did not throw',
+ 'set duration 123.45':
+ 'anim.effect.getComputedTiming is not a function',
- 'set NaN duration':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.durat..." did not throw',
+ 'set duration Infinity':
+ 'anim.effect.getComputedTiming is not a function',
- 'set duration abc':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.durat..." did not throw',
+ 'set duration auto':
+ 'anim.effect.getComputedTiming is not a function',
'set duration string 100':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.durat..." did not throw',
+ 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.duration = \'100\';\n }" did not throw',
},
- 'test/web-platform-tests/web-animations/animation-effect-timing/easing.html': {
- 'steps(start) function':
- 'animation.effect.getComputedTiming is not a function',
-
- 'steps(end) function':
- 'animation.effect.getComputedTiming is not a function',
-
- 'linear function':
- 'animation.effect.getComputedTiming is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/easing.html': {
+ 'Change the easing while the animation is running':
+ 'anim.effect.getComputedTiming is not a function',
'ease function':
'animation.effect.getComputedTiming is not a function',
@@ -247,45 +348,54 @@ module.exports = {
'easing function which produces values greater than 1':
'animation.effect.getComputedTiming is not a function',
- 'Test invalid easing value':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effec..." did not throw',
+ 'linear function':
+ 'animation.effect.getComputedTiming is not a function',
- 'Change the easing while the animation is running':
- 'anim.effect.getComputedTiming is not a function',
+ 'steps(end) function':
+ 'animation.effect.getComputedTiming is not a function',
+
+ 'steps(start) function':
+ 'animation.effect.getComputedTiming is not a function',
},
- 'test/web-platform-tests/web-animations/animation-effect-timing/endDelay.html': {
- 'set endDelay 123.45':
- 'anim.effect.getComputedTiming is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/endDelay.html': {
+ 'onfinish event is fired currentTime is after endTime':
+ 'FLAKY_TEST_RESULT',
'set endDelay -1000':
'anim.effect.getComputedTiming is not a function',
+ 'set endDelay 123.45':
+ 'anim.effect.getComputedTiming is not a function',
+
'set endDelay Infinity':
- 'assert_throws: we can not assign Infinity to timing.endDelay function "function () {\n"use strict";\n\n anim.effect.timing.endDe..." did not throw',
+ 'assert_throws: we can not assign Infinity to timing.endDelay function "function () {\n"use strict";\n\n anim.effect.timing.endDelay = Infinity;\n }" did not throw',
'set endDelay negative Infinity':
- 'assert_throws: we can not assign negative Infinity to timing.endDelay function "function () {\n"use strict";\n\n anim.effect.timing.endDe..." did not throw',
-
- 'onfinish event is fired currentTime is after endTime':
- 'FLAKY_TEST_RESULT',
+ 'assert_throws: we can not assign negative Infinity to timing.endDelay function "function () {\n"use strict";\n\n anim.effect.timing.endDelay = -Infinity;\n }" did not throw',
},
- 'test/web-platform-tests/web-animations/animation-effect-timing/fill.html': {
- 'set fill none':
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/fill.html': {
+ 'set fill backwards':
'anim.effect.getComputedTiming is not a function',
- 'set fill forwards':
+ 'set fill both':
'anim.effect.getComputedTiming is not a function',
- 'set fill backwards':
+ 'set fill forwards':
'anim.effect.getComputedTiming is not a function',
- 'set fill both':
+ 'set fill none':
'anim.effect.getComputedTiming is not a function',
},
- 'test/web-platform-tests/web-animations/animation-effect-timing/getAnimations.html': {
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getAnimations.html': {
+ 'when currentTime changed in duration:1000, delay: -500, endDelay: -500':
+ 'assert_equals: when currentTime 0 expected 0 but got 1',
+
+ 'when currentTime changed in duration:1000, delay: 500, endDelay: -500':
+ 'assert_equals: set currentTime 1000 expected 0 but got 1',
+
'when duration is changed':
'assert_equals: set duration 102000 expected (object) object "[object Object]" but got (undefined) undefined',
@@ -294,110 +404,73 @@ module.exports = {
'when iterations is changed':
'assert_equals: set iterations 10 expected (object) object "[object Object]" but got (undefined) undefined',
+ },
- 'when currentTime changed in duration:1000, delay: 500, endDelay: -500':
- 'assert_equals: set currentTime 1000 expected 0 but got 1',
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/getComputedStyle.html': {
+ 'change currentTime when fill forwards and endDelay is negative':
+ 'assert_equals: set currentTime same as endTime expected "0" but got "0.5"',
- 'when currentTime changed in duration:1000, delay: -500, endDelay: -500':
- 'assert_equals: when currentTime 0 expected 0 but got 1',
- },
+ 'change currentTime when fill forwards and endDelay is positive':
+ 'assert_equals: set currentTime just a little before duration expected "0.0001" but got "0"',
- 'test/web-platform-tests/web-animations/animation-effect-timing/getComputedStyle.html': {
'changed duration immediately updates its computed styles':
'FLAKY_TEST_RESULT',
'changed iterations immediately updates its computed styles':
'FLAKY_TEST_RESULT',
-
- 'change currentTime when fill forwards and endDelay is positive':
- 'assert_equals: set currentTime just a little before duration expected "0.0001" but got "0"',
-
- 'change currentTime when fill forwards and endDelay is negative':
- 'assert_equals: set currentTime same as endTime expected "0" but got "0.5"',
},
- 'test/web-platform-tests/web-animations/animation-effect-timing/iterationStart.html': {
- 'Test that changing the iterationStart affects computed timing when backwards-filling':
- 'anim.effect.getComputedTiming is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterationStart.html': {
+ 'Test invalid iterationStart value':
+ 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.iterationStart = -1;\n }" threw object "ReferenceError: timing is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
'Test that changing the iterationStart affects computed timing during the active phase':
'anim.effect.getComputedTiming is not a function',
- 'Test that changing the iterationStart affects computed timing when forwards-filling':
+ 'Test that changing the iterationStart affects computed timing when backwards-filling':
'anim.effect.getComputedTiming is not a function',
- 'Test invalid iterationStart value':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effec..." did not throw',
+ 'Test that changing the iterationStart affects computed timing when forwards-filling':
+ 'anim.effect.getComputedTiming is not a function',
},
- 'test/web-platform-tests/web-animations/animation-effect-timing/iterations.html': {
+ 'test/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/iterations.html': {
'set iterations 2':
'anim.effect.getComputedTiming is not a function',
'set iterations Infinity':
'anim.effect.getComputedTiming is not a function',
-
- 'set negative iterations':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.itera..." did not throw',
-
- 'set negative infinity iterations ':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.itera..." did not throw',
-
- 'set NaN iterations':
- 'assert_throws: function "function () {\n"use strict";\n\n anim.effect.timing.itera..." did not throw',
},
- 'test/web-platform-tests/web-animations/animation-model/animation-types/discrete-animation.html': {
- 'Test animating discrete values':
- 'anim.effect.getComputedTiming is not a function',
-
- 'Test discrete animation is used when interpolation fails':
- 'anim.effect.getComputedTiming is not a function',
- },
-
- 'test/web-platform-tests/web-animations/animation-model/animation-types/not-animatable.html': {
- '\'display\' property cannot be animated using property-indexed notation':
- 'assert_equals: Animation specified using property-indexed notation but consisting of only non-animatable properties should not contain any keyframes expected 0 but got 2',
-
- '\'display\' property cannot be animated using a keyframe sequence':
- 'assert_false: Initial keyframe should not have the \'display\' property expected false got true',
-
- 'CSS animations and CSS transitions properties cannot be animated using property-indexed notation':
- 'assert_equals: Animation specified using property-indexed notation but consisting of only non-animatable properties should not contain any keyframes expected 0 but got 26',
-
- 'CSS animations and CSS transitions properties cannot be animated using a sequence of keyframes':
- 'assert_array_equals: Initial keyframe should not contain any properties other than the default keyframe properties lengths differ, expected 3 got 14',
- },
+ 'test/web-platform-tests/web-animations/interfaces/AnimationTimeline/document-timeline.html': {
+ 'document.timeline.currentTime liveness tests':
+ 'assert_true: document.timeline.currentTime increases between script blocks expected true got false',
- 'test/web-platform-tests/web-animations/animation-timeline/document-timeline.html': {
'document.timeline.currentTime value tests':
'assert_true: document.timeline.currentTime is positive expected true got false',
-
- 'document.timeline.currentTime liveness tests':
- 'assert_true: document.timeline.currentTime increases between script blocks expected true got false',
},
- 'test/web-platform-tests/web-animations/animation-timeline/idlharness.html': {
- 'AnimationTimeline interface: existence and properties of interface object':
- 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing',
-
+ 'test/web-platform-tests/web-animations/interfaces/AnimationTimeline/idlharness.html': {
'AnimationTimeline interface object length':
'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing',
'AnimationTimeline interface object name':
'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing',
- 'AnimationTimeline interface: existence and properties of interface prototype object':
+ 'AnimationTimeline interface: attribute currentTime':
'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing',
- 'AnimationTimeline interface: existence and properties of interface prototype object\'s "constructor" property':
+ 'AnimationTimeline interface: document.timeline must inherit property "currentTime" with the proper type (0)':
+ 'assert_inherits: property "currentTime" found on object expected in prototype chain',
+
+ 'AnimationTimeline interface: existence and properties of interface object':
'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing',
- 'AnimationTimeline interface: attribute currentTime':
+ 'AnimationTimeline interface: existence and properties of interface prototype object':
'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing',
- 'DocumentTimeline interface: existence and properties of interface object':
- 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing',
+ 'AnimationTimeline interface: existence and properties of interface prototype object\'s "constructor" property':
+ 'assert_own_property: self does not have own property "AnimationTimeline" expected property "AnimationTimeline" missing',
'DocumentTimeline interface object length':
'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing',
@@ -405,6 +478,9 @@ module.exports = {
'DocumentTimeline interface object name':
'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing',
+ 'DocumentTimeline interface: existence and properties of interface object':
+ 'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing',
+
'DocumentTimeline interface: existence and properties of interface prototype object':
'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing',
@@ -414,774 +490,729 @@ module.exports = {
'DocumentTimeline must be primary interface of document.timeline':
'assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing',
- // Serialization of objects cannot be feasibly overwritten by the polyfill.
'Stringification of document.timeline':
'assert_equals: class string of document.timeline expected "[object DocumentTimeline]" but got "[object Object]"',
-
- 'AnimationTimeline interface: document.timeline must inherit property "currentTime" with the proper type (0)':
- 'assert_inherits: property "currentTime" found on object expected in prototype chain',
},
- 'test/web-platform-tests/web-animations/animation/cancel.html': {
- 'Animated style is cleared after calling Animation.cancel()':
- 'assert_not_equals: transform style is animated before cancelling got disallowed value "none"',
-
- 'After cancelling an animation, it can still be seeked':
- 'assert_equals: margin-left style is updated when cancelled animation is seeked expected "50px" but got "0px"',
- },
-
- 'test/web-platform-tests/web-animations/animation/finish.html': {
- 'Test exceptions when finishing non-running animation':
- 'assert_throws: function "function () {\n"use strict";\n\n animation.finish();\n }" did not throw',
+ 'test/web-platform-tests/web-animations/interfaces/Document/getAnimations.html': {
+ 'Test document.getAnimations for non-animated content':
+ 'document.getAnimations is not a function',
- 'Test exceptions when finishing infinite animation':
- 'assert_throws: function "function () {\n"use strict";\n\n animation.finish();\n }" did not throw',
+ 'Test document.getAnimations for script-generated animations':
+ 'document.getAnimations is not a function',
- 'Test finishing of animation with a current time past the effect end':
- 'animation.effect.getComputedTiming is not a function',
+ 'Test document.getAnimations with null target':
+ 'KeyframeEffectReadOnly is not defined',
- 'Test finish() while paused':
- 'assert_equals: The play state of a paused animation should become "finished" after finish() is called expected "finished" but got "paused"',
+ 'Test the order of document.getAnimations with script generated animations':
+ 'document.getAnimations is not a function',
+ },
- 'Test finish() while pause-pending with positive playbackRate':
- 'assert_approx_equals: The start time of a pause-pending animation should be set after calling finish() expected NaN +/- 0.0005 but got 0',
+ 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor.html': {
+ 'Invalid KeyframeEffectReadOnly option by -Infinity':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test finish() while pause-pending with negative playbackRate':
- 'assert_equals: The start time of a pause-pending animation should be set after calling finish() expected (undefined) undefined but got (number) 100000',
+ 'Invalid KeyframeEffectReadOnly option by NaN':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test finish() while play-pending':
- 'assert_approx_equals: The start time of a play-pending animation should be set after calling finish() expected NaN +/- 0.0005 but got 0',
+ 'Invalid KeyframeEffectReadOnly option by a NaN duration':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test finish() resolves finished promise synchronously with an animation without a target':
- 'KeyframeEffectReadOnly is not defined',
+ 'Invalid KeyframeEffectReadOnly option by a NaN iterations':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test normally finished animation resolves finished promise synchronously with an animation without a target':
- 'KeyframeEffectReadOnly is not defined',
- },
+ 'Invalid KeyframeEffectReadOnly option by a blank easing':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'test/web-platform-tests/web-animations/animation/finished.html': {
- 'cancelling an already-finished animation replaces the finished promise':
- 'assert_not_equals: A new finished promise should be created when cancelling a finished animation got disallowed value object "[object Promise]"',
+ 'Invalid KeyframeEffectReadOnly option by a multi-value easing':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'cancelling an idle animation still replaces the finished promise':
- 'assert_not_equals: A redundant call to cancel() should still generate a new finished promise got disallowed value object "[object Promise]"',
+ 'Invalid KeyframeEffectReadOnly option by a negative Infinity duration':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test finished promise changes for animation duration changes':
- 'assert_equals: currentTime should be unchanged when duration shortened expected 50000 but got 25000',
+ 'Invalid KeyframeEffectReadOnly option by a negative Infinity iterations':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test finished promise is not resolved when the animation falls out finished state immediately':
- 'assert_unreached: Animation.finished should not be resolved Reached unreachable code',
+ 'Invalid KeyframeEffectReadOnly option by a negative duration':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test finished promise is not resolved once the animation falls out finished state even though the current finished promise is generated soon after animation state became finished':
- 'assert_unreached: Animation.finished should not be resolved Reached unreachable code',
- },
+ 'Invalid KeyframeEffectReadOnly option by a negative iterations':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'test/web-platform-tests/web-animations/animation/oncancel.html': {
- 'oncancel event is fired when animation.cancel() is called.':
- 'FLAKY_TEST_RESULT',
- },
+ 'Invalid KeyframeEffectReadOnly option by a negative value':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'test/web-platform-tests/web-animations/animation/onfinish.html': {
- 'onfinish event is fired when animation.finish() is called':
- 'FLAKY_TEST_RESULT',
- },
+ 'Invalid KeyframeEffectReadOnly option by a string duration':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'test/web-platform-tests/web-animations/animation/pause.html': {
- 'pause() from idle':
- 'assert_equals: currentTime is set to 0 expected (number) 0 but got (object) null',
+ 'Invalid KeyframeEffectReadOnly option by a variable easing':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'pause() from idle with a negative playbackRate':
- 'assert_equals: currentTime is set to the effect end expected (number) 1000000 but got (object) null',
+ 'Invalid KeyframeEffectReadOnly option by an \'inherit\' easing':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'pause() from idle with a negative playbackRate and endless effect':
- 'assert_throws: Expect InvalidStateError exception on calling pause() from idle with a negative playbackRate and infinite-duration animation function "function () {\n"use strict";\n animation.pause(); }" did not throw',
- },
+ 'Invalid KeyframeEffectReadOnly option by an \'initial\' easing':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'test/web-platform-tests/web-animations/animation/play.html': {
- 'play() throws when seeking an infinite-duration animation played in reverse':
- 'assert_throws: Expected InvalidStateError exception on calling play() with a negative playbackRate and infinite-duration animation function "function () {\n"use strict";\n animation.play(); }" did not throw',
- },
+ 'Invalid KeyframeEffectReadOnly option by an unrecognized easing':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target,\n { left: ["10px", "20px"] },\n stest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'test/web-platform-tests/web-animations/animation/playState.html': {
- 'Animation.playState is \'paused\' after cancelling an animation, seeking it makes it paused':
- 'assert_equals: After seeking an idle animation, it is effectively paused expected "paused" but got "idle"',
- },
+ 'Invalid easing [a blank easing] in keyframe sequence should be thrown':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
- 'test/web-platform-tests/web-animations/animation/playbackRate.html': {
- 'Test the effect of setting playbackRate while playing animation':
- 'FLAKY_TEST_RESULT',
- },
+ 'Invalid easing [a multi-value easing] in keyframe sequence should be thrown':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
- 'test/web-platform-tests/web-animations/animation/reverse.html': {
- 'reverse() when playbackRate > 0 and currentTime > effect end':
- 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime > effect end expected 100000 but got 200000',
+ 'Invalid easing [a variable easing] in keyframe sequence should be thrown':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
- 'reverse() when playbackRate > 0 and currentTime < 0':
- 'assert_equals: reverse() should start playing from the animation effect end if the playbackRate > 0 and the currentTime < 0 expected 100000 but got -200000',
+ 'Invalid easing [an \'inherit\' easing] in keyframe sequence should be thrown':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
- 'reverse() when playbackRate < 0 and currentTime < 0':
- 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 expected 0 but got -200000',
+ 'Invalid easing [an \'initial\' easing] in keyframe sequence should be thrown':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
- 'reverse() when playbackRate < 0 and currentTime > effect end':
- 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime > effect end expected 0 but got 200000',
+ 'Invalid easing [an unrecognized easing] in keyframe sequence should be thrown':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
- 'reverse() when playbackRate > 0 and currentTime < 0 and the target effect end is positive infinity':
- 'assert_throws: reverse() should throw InvalidStateError if the playbackRate > 0 and the currentTime < 0 and the target effect is positive infinity function "function () {\n"use strict";\n animation.reverse(); }" did not throw',
+ 'KeyframeEffect constructor creates an AnimationEffectTiming timing object':
+ 'assert_equals: expected "[object KeyframeEffect]" but got "[object Object]"',
- 'reverse() when playbackRate < 0 and currentTime < 0 and the target effect end is positive infinity':
- 'assert_equals: reverse() should start playing from the start of animation time if the playbackRate < 0 and the currentTime < 0 and the target effect is positive infinity expected 0 but got -200000',
- },
+ 'KeyframeEffectReadOnly constructor throws with a keyframe sequence with an invalid easing value':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'test/web-platform-tests/web-animations/document/getAnimations.html': {
- 'Test document.getAnimations for non-animated content':
- 'document.getAnimations is not a function',
+ 'KeyframeEffectReadOnly constructor throws with keyframes not loosely sorted by offset':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test document.getAnimations for script-generated animations':
- 'document.getAnimations is not a function',
+ 'KeyframeEffectReadOnly constructor throws with keyframes with an invalid composite value':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test the order of document.getAnimations with script generated animations':
- 'document.getAnimations is not a function',
+ 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded negative offset':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'Test document.getAnimations with null target':
- 'KeyframeEffectReadOnly is not defined',
- },
+ 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded positive offset':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'test/web-platform-tests/web-animations/keyframe-effect/constructor.html': {
- 'a KeyframeEffectReadOnly can be constructed with no frames':
- 'KeyframeEffectReadOnly is not defined',
+ 'KeyframeEffectReadOnly constructor throws with property-indexed keyframes with an invalid easing value':
+ 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectReadOnly(target, subtest.input);\n }" threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
- 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in a property-indexed keyframe':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where greater shorthand precedes lesser shorthand':
'KeyframeEffectReadOnly is not defined',
- 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where lesser shorthand precedes greater shorthand':
'KeyframeEffectReadOnly is not defined',
- 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where longhand precedes shorthand':
'KeyframeEffectReadOnly is not defined',
- 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in property-indexed keyframes':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where shorthand precedes longhand':
'KeyframeEffectReadOnly is not defined',
- 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference':
'KeyframeEffectReadOnly is not defined',
- 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference in a shorthand property':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different composite values, but the same composite value for a given offset':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different easing values, but the same easing value for a given offset':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two value property-indexed keyframes specification':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for a given interior offset':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one shorthand property two value property-indexed keyframes specification roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for offsets 0 and 1':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification':
+ 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with repeated values at offset 1 with different easings':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with all omitted offsets':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property two value property-indexed keyframes specification':
+ 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with some omitted offsets':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property two value property-indexed keyframes specification roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a one property one keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property property-indexed keyframes specification with different numbers of values':
+ 'a KeyframeEffectReadOnly can be constructed with a one property one non-array value property-indexed keyframes specification':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification with different numbers of values roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a one property one value property-indexed keyframes specification':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with an invalid value':
+ 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with an invalid value roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence that needs to stringify its values':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification that needs to stringify its values':
+ 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification that needs to stringify its values roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification that needs to stringify its values':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property one value property-indexed keyframes specification':
+ 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the first value is invalid':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property one value property-indexed keyframes specification roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the second value is invalid':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property one non-array value property-indexed keyframes specification':
+ 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property one non-array value property-indexed keyframes specification roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two value property-indexed keyframes specification':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the first value is invalid':
+ 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the first value is invalid roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the second value is invalid':
+ 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with an invalid value':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the second value is invalid roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a single keyframe sequence with omitted offsets':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property property-indexed keyframes specification where one property is missing from the first keyframe':
+ 'a KeyframeEffectReadOnly can be constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification where one property is missing from the first keyframe roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property property-indexed keyframes specification where one property is missing from the last keyframe':
+ 'a KeyframeEffectReadOnly can be constructed with a two property four keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification where one property is missing from the last keyframe roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the first keyframe':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with repeated values at offset 0 with different easings':
+ 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the last keyframe':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with repeated values at offset 0 with different easings roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence with some omitted offsets':
'KeyframeEffectReadOnly is not defined',
- 'the KeyframeEffectReadOnly constructor reads keyframe properties in the expected order':
+ 'a KeyframeEffectReadOnly can be constructed with a two property property-indexed keyframes specification with different numbers of values':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property one keyframe sequence':
+ 'a KeyframeEffectReadOnly can be constructed with a two property two keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property one keyframe sequence roundtrips':
+ 'a KeyframeEffectReadOnly can be constructed with a two property two value property-indexed keyframes specification':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence':
+ 'a KeyframeEffectReadOnly can be constructed with no frames':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence roundtrips':
+ 'a KeyframeEffectReadOnly constructed by +Infinity':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property two keyframe sequence':
+ 'a KeyframeEffectReadOnly constructed by a double value':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property two keyframe sequence roundtrips':
+ 'a KeyframeEffectReadOnly constructed by a forwards fill':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one shorthand property two keyframe sequence':
+ 'a KeyframeEffectReadOnly constructed by a normal KeyframeEffectOptions object':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one shorthand property two keyframe sequence roundtrips':
+ 'a KeyframeEffectReadOnly constructed by an Infinity duration':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence':
+ 'a KeyframeEffectReadOnly constructed by an Infinity iterations':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence roundtrips':
+ 'a KeyframeEffectReadOnly constructed by an auto duration':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for a given interior offset':
+ 'a KeyframeEffectReadOnly constructed by an auto fill':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for a given interior offset roundtrips':
+ 'a KeyframeEffectReadOnly constructed by an empty KeyframeEffectOptions object':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for offsets 0 and 1':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence where greater shorthand precedes lesser shorthand roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for offsets 0 and 1 roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence where lesser shorthand precedes greater shorthand roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property four keyframe sequence':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence where longhand precedes shorthand roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property four keyframe sequence roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence where shorthand precedes longhand roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a single keyframe sequence with omitted offsets':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference in a shorthand property roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a single keyframe sequence with omitted offsets roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with some omitted offsets':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different composite values, but the same composite value for a given offset roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with some omitted offsets roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different easing values, but the same easing value for a given offset roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a two property keyframe sequence with some omitted offsets':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for a given interior offset roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence with some omitted offsets roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for offsets 0 and 1 roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with all omitted offsets':
+ 'a KeyframeEffectReadOnly constructed with a keyframe sequence with repeated values at offset 1 with different easings roundtrips':
'KeyframeEffectReadOnly is not defined',
'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with all omitted offsets roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different easing values, but the same easing value for a given offset':
+ 'a KeyframeEffectReadOnly constructed with a one property keyframe sequence with some omitted offsets roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different easing values, but the same easing value for a given offset roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a one property one keyframe sequence roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence with different composite values, but the same composite value for a given offset':
+ 'a KeyframeEffectReadOnly constructed with a one property one non-array value property-indexed keyframes specification roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a keyframe sequence with different composite values, but the same composite value for a given offset roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a one property one value property-indexed keyframes specification roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence that needs to stringify its values':
+ 'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence roundtrips':
'KeyframeEffectReadOnly is not defined',
'a KeyframeEffectReadOnly constructed with a one property two keyframe sequence that needs to stringify its values roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where shorthand precedes longhand':
+ 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a keyframe sequence where shorthand precedes longhand roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification that needs to stringify its values roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where longhand precedes shorthand':
+ 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the first value is invalid roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a keyframe sequence where longhand precedes shorthand roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the second value is invalid roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where lesser shorthand precedes greater shorthand':
+ 'a KeyframeEffectReadOnly constructed with a one shorthand property two keyframe sequence roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a keyframe sequence where lesser shorthand precedes greater shorthand roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a one shorthand property two value property-indexed keyframes specification roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly can be constructed with a keyframe sequence where greater shorthand precedes lesser shorthand':
+ 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with a keyframe sequence where greater shorthand precedes lesser shorthand roundtrips':
+ 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference roundtrips':
'KeyframeEffectReadOnly is not defined',
- 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded positive offset':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with an invalid value roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'KeyframeEffectReadOnly constructor throws with keyframes with an out-of-bounded negative offset':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a single keyframe sequence with omitted offsets roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'KeyframeEffectReadOnly constructor throws with keyframes not loosely sorted by offset':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'KeyframeEffectReadOnly constructor throws with property-indexed keyframes with an invalid easing value':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'KeyframeEffectReadOnly constructor throws with a keyframe sequence with an invalid easing value':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property four keyframe sequence roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'KeyframeEffectReadOnly constructor throws with keyframes with an invalid composite value':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the first keyframe roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid easing [a blank easing] in keyframe sequence should be thrown':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the last keyframe roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid easing [an unrecognized easing] in keyframe sequence should be thrown':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property keyframe sequence with some omitted offsets roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid easing [an \'initial\' easing] in keyframe sequence should be thrown':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification with different numbers of values roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid easing [an \'inherit\' easing] in keyframe sequence should be thrown':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property two keyframe sequence roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid easing [a variable easing] in keyframe sequence should be thrown':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with a two property two value property-indexed keyframes specification roundtrips':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid easing [a multi-value easing] in keyframe sequence should be thrown':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "TypeError" ("TypeError")',
+ 'a KeyframeEffectReadOnly constructed with null target':
+ 'KeyframeEffectReadOnly is not defined',
'a KeyframeEffectReadOnly constructed without any KeyframeEffectOptions object':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed by an empty KeyframeEffectOptions object':
+ 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed by a normal KeyframeEffectOptions object':
+ 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in property-indexed keyframes':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed by a double value':
+ 'composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed by +Infinity':
+ 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeTimingOptions':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed by an Infinity duration':
+ 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in a property-indexed keyframe':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed by an auto duration':
+ 'easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed by an Infinity iterations':
+ 'the KeyframeEffectReadOnly constructor reads keyframe properties in the expected order':
'KeyframeEffectReadOnly is not defined',
+ },
- 'a KeyframeEffectReadOnly constructed by an auto fill':
+ 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/getComputedTiming.html': {
+ 'getComputedTiming().activeDuration for a non-zero duration and default iteration count':
'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed by a forwards fill':
+ 'getComputedTiming().activeDuration for a non-zero duration and fractional iteration count':
'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by -Infinity':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
-
- 'Invalid KeyframeEffectReadOnly option by NaN':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for a non-zero duration and integral iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a negative value':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for a zero duration and default iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a negative Infinity duration':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for a zero duration and fractional iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a NaN duration':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for a zero duration and infinite iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a negative duration':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for a zero duration and zero iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a string duration':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for an empty KeyframeEffectOptions object':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a negative Infinity iterations':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for an infinite duration and default iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a NaN iterations':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for an infinite duration and fractional iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a negative iterations':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for an infinite duration and infinite iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a blank easing':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for an infinite duration and zero iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by an unrecognized easing':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for an non-zero duration and infinite iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by an \'initial\' easing':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().activeDuration for an non-zero duration and zero iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by an \'inherit\' easing':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().endTime for a non-zero duration and default iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a variable easing':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().endTime for a non-zero duration and non-default iteration count':
+ 'KeyframeEffectReadOnly is not defined',
- 'Invalid KeyframeEffectReadOnly option by a multi-value easing':
- 'assert_throws: function "function () {\n"use strict";\n\n new KeyframeEffectRead..." threw object "ReferenceError: KeyframeEffectReadOnly is not defined" ("ReferenceError") expected object "[object Object]" ("TypeError")',
+ 'getComputedTiming().endTime for a non-zero duration and non-zero delay':
+ 'KeyframeEffectReadOnly is not defined',
- 'a KeyframeEffectReadOnly constructed with null target':
+ 'getComputedTiming().endTime for a non-zero duration, non-zero delay and non-default iteration':
'KeyframeEffectReadOnly is not defined',
- // Serialization of objects cannot be feasibly overwritten by the polyfill.
- 'KeyframeEffect constructor creates an AnimationEffectTiming timing object':
- 'assert_equals: expected "[object KeyframeEffect]" but got "[object Object]"',
- },
+ 'getComputedTiming().endTime for a zero duration and negative delay':
+ 'KeyframeEffectReadOnly is not defined',
- 'test/web-platform-tests/web-animations/keyframe-effect/getComputedTiming.html': {
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed without any KeyframeEffectOptions object':
+ 'getComputedTiming().endTime for an empty KeyframeEffectOptions object':
'KeyframeEffectReadOnly is not defined',
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an empty KeyframeEffectOptions object':
+ 'getComputedTiming().endTime for an infinite duration':
'KeyframeEffectReadOnly is not defined',
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a normal KeyframeEffectOptions object':
+ 'getComputedTiming().endTime for an infinite duration and delay':
'KeyframeEffectReadOnly is not defined',
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a double value':
+ 'getComputedTiming().endTime for an infinite duration and negative delay':
'KeyframeEffectReadOnly is not defined',
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by +Infinity':
+ 'getComputedTiming().endTime for an infinite iteration count':
'KeyframeEffectReadOnly is not defined',
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity duration':
+ 'getComputedTiming().endTime for an non-zero duration and negative delay':
'KeyframeEffectReadOnly is not defined',
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto duration':
+ 'getComputedTiming().endTime for an non-zero duration and negative delay greater than active duration':
'KeyframeEffectReadOnly is not defined',
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity iterations':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by +Infinity':
'KeyframeEffectReadOnly is not defined',
- 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto fill':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a double value':
'KeyframeEffectReadOnly is not defined',
'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a forwards fill':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for an empty KeyframeEffectOptions object':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by a normal KeyframeEffectOptions object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for a non-zero duration and default iteration count':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity duration':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for a non-zero duration and integral iteration count':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an Infinity iterations':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for a non-zero duration and fractional iteration count':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto duration':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for an non-zero duration and infinite iteration count':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an auto fill':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for an non-zero duration and zero iteration count':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed by an empty KeyframeEffectOptions object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for a zero duration and default iteration count':
+ 'values of getComputedTiming() when a KeyframeEffectReadOnly is constructed without any KeyframeEffectOptions object':
'KeyframeEffectReadOnly is not defined',
+ },
- 'getComputedTiming().activeDuration for a zero duration and fractional iteration count':
+ 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html': {
+ 'non-animatable property \'animation\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for a zero duration and infinite iteration count':
+ 'non-animatable property \'animation\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for a zero duration and zero iteration count':
+ 'non-animatable property \'animationDelay\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for an infinite duration and default iteration count':
+ 'non-animatable property \'animationDelay\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for an infinite duration and zero iteration count':
+ 'non-animatable property \'animationDirection\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for an infinite duration and fractional iteration count':
+ 'non-animatable property \'animationDirection\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().activeDuration for an infinite duration and infinite iteration count':
+ 'non-animatable property \'animationDuration\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for an empty KeyframeEffectOptions object':
+ 'non-animatable property \'animationDuration\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for a non-zero duration and default iteration count':
+ 'non-animatable property \'animationFillMode\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for a non-zero duration and non-default iteration count':
+ 'non-animatable property \'animationFillMode\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for a non-zero duration and non-zero delay':
+ 'non-animatable property \'animationIterationCount\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for a non-zero duration, non-zero delay and non-default iteration':
+ 'non-animatable property \'animationIterationCount\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for an infinite iteration count':
+ 'non-animatable property \'animationName\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for an infinite duration':
+ 'non-animatable property \'animationName\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for an infinite duration and delay':
+ 'non-animatable property \'animationPlayState\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for an infinite duration and negative delay':
+ 'non-animatable property \'animationPlayState\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for an non-zero duration and negative delay':
+ 'non-animatable property \'animationTimingFunction\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for an non-zero duration and negative delay greater than active duration':
+ 'non-animatable property \'animationTimingFunction\' is not accessed when using a property-indexed keyframe object':
'KeyframeEffectReadOnly is not defined',
- 'getComputedTiming().endTime for a zero duration and negative delay':
+ 'non-animatable property \'display\' is not accessed when using a keyframe sequence':
'KeyframeEffectReadOnly is not defined',
- },
- 'test/web-platform-tests/web-animations/keyframe-effect/keyframe-handling.html': {
- 'Overlapping keyframes at 0 and 1 use the appropriate value when the progress is outside the range [0, 1]':
- 'assert_equals: When progress is negative, the first keyframe with a 0 offset should be used expected "0" but got "0.151"',
- },
+ 'non-animatable property \'display\' is not accessed when using a property-indexed keyframe object':
+ 'KeyframeEffectReadOnly is not defined',
- 'test/web-platform-tests/web-animations/keyframe-effect/setFrames.html': {
- 'Keyframes can be replaced with an empty keyframe':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transition\' is not accessed when using a keyframe sequence':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a one property two value property-indexed keyframes specification':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transition\' is not accessed when using a property-indexed keyframe object':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a one shorthand property two value property-indexed keyframes specification':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transitionDelay\' is not accessed when using a keyframe sequence':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transitionDelay\' is not accessed when using a property-indexed keyframe object':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a two property two value property-indexed keyframes specification':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transitionDuration\' is not accessed when using a keyframe sequence':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a two property property-indexed keyframes specification with different numbers of values':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transitionDuration\' is not accessed when using a property-indexed keyframe object':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a property-indexed keyframes specification with an invalid value':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transitionProperty\' is not accessed when using a keyframe sequence':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a one property two value property-indexed keyframes specification that needs to stringify its values':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transitionProperty\' is not accessed when using a property-indexed keyframe object':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a one property one value property-indexed keyframes specification':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transitionTimingFunction\' is not accessed when using a keyframe sequence':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a one property one non-array value property-indexed keyframes specification':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'transitionTimingFunction\' is not accessed when using a property-indexed keyframe object':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the first value is invalid':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'unsupportedProperty\' is not accessed when using a keyframe sequence':
+ 'KeyframeEffectReadOnly is not defined',
- 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the second value is invalid':
- 'effect.setFrames is not a function',
+ 'non-animatable property \'unsupportedProperty\' is not accessed when using a property-indexed keyframe object':
+ 'KeyframeEffectReadOnly is not defined',
+ },
- 'Keyframes can be replaced with a two property property-indexed keyframes specification where one property is missing from the first keyframe':
- 'effect.setFrames is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes.html': {
+ 'Keyframes can be replaced with a keyframe sequence where greater shorthand precedes lesser shorthand':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a two property property-indexed keyframes specification where one property is missing from the last keyframe':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a keyframe sequence where lesser shorthand precedes greater shorthand':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a property-indexed keyframes specification with repeated values at offset 0 with different easings':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a keyframe sequence where longhand precedes shorthand':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a one property one keyframe sequence':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a keyframe sequence where shorthand precedes longhand':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a one property two keyframe sequence':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a keyframe sequence with a CSS variable reference':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a two property two keyframe sequence':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a keyframe sequence with a CSS variable reference in a shorthand property':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a one shorthand property two keyframe sequence':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a keyframe sequence with different composite values, but the same composite value for a given offset':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a two property (a shorthand and one of its component longhands) two keyframe sequence':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a keyframe sequence with different easing values, but the same easing value for a given offset':
+ 'effect.setKeyframes is not a function',
'Keyframes can be replaced with a keyframe sequence with duplicate values for a given interior offset':
- 'effect.setFrames is not a function',
+ 'effect.setKeyframes is not a function',
'Keyframes can be replaced with a keyframe sequence with duplicate values for offsets 0 and 1':
- 'effect.setFrames is not a function',
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a two property four keyframe sequence':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a keyframe sequence with repeated values at offset 1 with different easings':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a single keyframe sequence with omitted offsets':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a one property keyframe sequence with all omitted offsets':
+ 'effect.setKeyframes is not a function',
'Keyframes can be replaced with a one property keyframe sequence with some omitted offsets':
- 'effect.setFrames is not a function',
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a two property keyframe sequence with some omitted offsets':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a one property one keyframe sequence':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a one property keyframe sequence with all omitted offsets':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a one property one non-array value property-indexed keyframes specification':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a keyframe sequence with different easing values, but the same easing value for a given offset':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a one property one value property-indexed keyframes specification':
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a keyframe sequence with different composite values, but the same composite value for a given offset':
- 'effect.setFrames is not a function',
+ 'Keyframes can be replaced with a one property two keyframe sequence':
+ 'effect.setKeyframes is not a function',
'Keyframes can be replaced with a one property two keyframe sequence that needs to stringify its values':
- 'effect.setFrames is not a function',
-
- 'Keyframes can be replaced with a keyframe sequence where shorthand precedes longhand':
- 'effect.setFrames is not a function',
-
- 'Keyframes can be replaced with a keyframe sequence where longhand precedes shorthand':
- 'effect.setFrames is not a function',
-
- 'Keyframes can be replaced with a keyframe sequence where lesser shorthand precedes greater shorthand':
- 'effect.setFrames is not a function',
+ 'effect.setKeyframes is not a function',
- 'Keyframes can be replaced with a keyframe sequence where greater shorthand precedes lesser shorthand':
- 'effect.setFrames is not a function',
- },
+ 'Keyframes can be replaced with a one property two value property-indexed keyframes specification':
+ 'effect.setKeyframes is not a function',
- 'test/web-platform-tests/web-animations/keyframe-effect/setTarget.html': {
- 'Test setting target from null to a valid target':
- 'assert_equals: Value at 50% progress after setting new target expected "50px" but got "10px"',
+ 'Keyframes can be replaced with a one property two value property-indexed keyframes specification that needs to stringify its values':
+ 'effect.setKeyframes is not a function',
- 'Test setting target from a valid target to null':
- 'assert_equals: Value after clearing the target expected "10px" but got "50px"',
+ 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the first value is invalid':
+ 'effect.setKeyframes is not a function',
- 'Test setting target from a valid target to another target':
- 'assert_equals: Value of 1st element (currently not targeted) after changing the effect target expected "10px" but got "50px"',
- },
+ 'Keyframes can be replaced with a one property two value property-indexed keyframes specification where the second value is invalid':
+ 'effect.setKeyframes is not a function',
- 'test/web-platform-tests/web-animations/timing-model/animation-effects/active-time.html': {
- 'Test progress during before and after phase when fill is none':
- 'anim.effect.getComputedTiming is not a function',
- },
+ 'Keyframes can be replaced with a one shorthand property two keyframe sequence':
+ 'effect.setKeyframes is not a function',
- 'test/web-platform-tests/web-animations/timing-model/animation-effects/current-iteration.html': {
- 'Test currentIteration during before and after phase when fill is none':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a one shorthand property two value property-indexed keyframes specification':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:0 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a property-indexed keyframes specification with a CSS variable reference':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:0 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a property-indexed keyframes specification with a CSS variable reference in a shorthand property':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:0 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a property-indexed keyframes specification with an invalid value':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:2.5 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a single keyframe sequence with omitted offsets':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:2.5 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property (a shorthand and one of its component longhands) two keyframe sequence':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:2.5 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:3 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property four keyframe sequence':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:3 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property keyframe sequence where one property is missing from the first keyframe':
+ 'effect.setKeyframes is not a function',
- 'Test zero iterations: iterations:0 iterationStart:3 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property keyframe sequence where one property is missing from the last keyframe':
+ 'effect.setKeyframes is not a function',
- 'Test integer iterations: iterations:3 iterationStart:0 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property keyframe sequence with some omitted offsets':
+ 'effect.setKeyframes is not a function',
- 'Test integer iterations: iterations:3 iterationStart:0 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property property-indexed keyframes specification with different numbers of values':
+ 'effect.setKeyframes is not a function',
- 'Test integer iterations: iterations:3 iterationStart:0 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property two keyframe sequence':
+ 'effect.setKeyframes is not a function',
- 'Test integer iterations: iterations:3 iterationStart:2.5 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with a two property two value property-indexed keyframes specification':
+ 'effect.setKeyframes is not a function',
- 'Test integer iterations: iterations:3 iterationStart:2.5 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Keyframes can be replaced with an empty keyframe':
+ 'effect.setKeyframes is not a function',
+ },
- 'Test integer iterations: iterations:3 iterationStart:2.5 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'test/web-platform-tests/web-animations/interfaces/KeyframeEffect/setTarget.html': {
+ 'Test setting target from a valid target to another target':
+ 'assert_equals: Value of 1st element (currently not targeted) after changing the effect target expected "10px" but got "50px"',
- 'Test integer iterations: iterations:3 iterationStart:3 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Test setting target from a valid target to null':
+ 'assert_equals: Value after clearing the target expected "10px" but got "50px"',
- 'Test integer iterations: iterations:3 iterationStart:3 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'Test setting target from null to a valid target':
+ 'assert_equals: Value at 50% progress after setting new target expected "50px" but got "10px"',
+ },
- 'Test integer iterations: iterations:3 iterationStart:3 duration:Infinity delay:1 fill:both':
+ 'test/web-platform-tests/web-animations/timing-model/animation-effects/current-iteration.html': {
+ 'Test currentIteration during before and after phase when fill is none':
'anim.effect.getComputedTiming is not a function',
'Test fractional iterations: iterations:3.5 iterationStart:0 duration:0 delay:1 fill:both':
@@ -1237,130 +1268,151 @@ module.exports = {
'Test infinity iterations: iterations:Infinity iterationStart:3 duration:Infinity delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- },
- 'test/web-platform-tests/web-animations/timing-model/animation-effects/simple-iteration-progress.html': {
- 'Test zero iterations: iterations:0 iterationStart:0 duration:0 delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:0 duration:0 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test zero iterations: iterations:0 iterationStart:0 duration:100 delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:0 duration:100 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test zero iterations: iterations:0 iterationStart:0 duration:Infinity delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:0 duration:Infinity delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test zero iterations: iterations:0 iterationStart:2.5 duration:0 delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:2.5 duration:0 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test zero iterations: iterations:0 iterationStart:2.5 duration:100 delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:2.5 duration:100 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test zero iterations: iterations:0 iterationStart:2.5 duration:Infinity delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:2.5 duration:Infinity delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test zero iterations: iterations:0 iterationStart:3 duration:0 delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:3 duration:0 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test zero iterations: iterations:0 iterationStart:3 duration:100 delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:3 duration:100 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test zero iterations: iterations:0 iterationStart:3 duration:Infinity delay:1 fill:both':
+ 'Test integer iterations: iterations:3 iterationStart:3 duration:Infinity delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:0 duration:0 delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:0 duration:0 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:0 duration:100 delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:0 duration:100 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:0 duration:Infinity delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:0 duration:Infinity delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:2.5 duration:0 delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:2.5 duration:0 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:2.5 duration:100 delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:2.5 duration:100 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:2.5 duration:Infinity delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:2.5 duration:Infinity delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:3 duration:0 delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:3 duration:0 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:3 duration:100 delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:3 duration:100 delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
- 'Test integer iterations: iterations:3 iterationStart:3 duration:Infinity delay:1 fill:both':
+ 'Test zero iterations: iterations:0 iterationStart:3 duration:Infinity delay:1 fill:both':
'anim.effect.getComputedTiming is not a function',
+ },
+ 'test/web-platform-tests/web-animations/timing-model/animation-effects/simple-iteration-progress.html': {
'Test fractional iterations: iterations:3.5 iterationStart:0 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
-
- 'Test fractional iterations: iterations:3.5 iterationStart:0 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0.5 but got 1',
'Test fractional iterations: iterations:3.5 iterationStart:0 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0 but got 1',
'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
-
- 'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0.5 but got 0',
'Test fractional iterations: iterations:3.5 iterationStart:2.5 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0.5 but got 1',
'Test fractional iterations: iterations:3.5 iterationStart:3 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
-
- 'Test fractional iterations: iterations:3.5 iterationStart:3 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0.5 but got 1',
'Test fractional iterations: iterations:3.5 iterationStart:3 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0 but got 1',
'Test infinity iterations: iterations:Infinity iterationStart:0 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
-
- 'Test infinity iterations: iterations:Infinity iterationStart:0 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0 but got 1',
'Test infinity iterations: iterations:Infinity iterationStart:0 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0 but got 1',
'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
-
- 'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0.5 but got 1',
'Test infinity iterations: iterations:Infinity iterationStart:2.5 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0.5 but got 1',
'Test infinity iterations: iterations:Infinity iterationStart:3 duration:0 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
-
- 'Test infinity iterations: iterations:Infinity iterationStart:3 duration:100 delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0 but got 1',
'Test infinity iterations: iterations:Infinity iterationStart:3 duration:Infinity delay:1 fill:both':
- 'anim.effect.getComputedTiming is not a function',
+ 'assert_equals: expected 0 but got 1',
+
+ 'Test integer iterations: iterations:3 iterationStart:0 duration:Infinity delay:1 fill:both':
+ 'assert_equals: expected 0 but got 1',
+
+ 'Test integer iterations: iterations:3 iterationStart:2.5 duration:0 delay:1 fill:both':
+ 'assert_equals: expected 0.5 but got 0',
+
+ 'Test integer iterations: iterations:3 iterationStart:2.5 duration:Infinity delay:1 fill:both':
+ 'assert_equals: expected 0.5 but got 1',
+
+ 'Test integer iterations: iterations:3 iterationStart:3 duration:Infinity delay:1 fill:both':
+ 'assert_equals: expected 0 but got 1',
+
+ 'Test zero iterations: iterations:0 iterationStart:0 duration:0 delay:1 fill:both':
+ 'assert_equals: expected 0 but got 1',
+
+ 'Test zero iterations: iterations:0 iterationStart:0 duration:100 delay:1 fill:both':
+ 'assert_equals: expected 0 but got 1',
+
+ 'Test zero iterations: iterations:0 iterationStart:0 duration:Infinity delay:1 fill:both':
+ 'assert_equals: expected 0 but got 1',
+
+ 'Test zero iterations: iterations:0 iterationStart:2.5 duration:0 delay:1 fill:both':
+ 'assert_equals: expected 0.5 but got 0',
+
+ 'Test zero iterations: iterations:0 iterationStart:2.5 duration:100 delay:1 fill:both':
+ 'assert_equals: expected 0.5 but got 0',
+
+ 'Test zero iterations: iterations:0 iterationStart:2.5 duration:Infinity delay:1 fill:both':
+ 'assert_equals: expected 0.5 but got 1',
+
+ 'Test zero iterations: iterations:0 iterationStart:3 duration:0 delay:1 fill:both':
+ 'assert_equals: expected 0 but got 1',
+
+ 'Test zero iterations: iterations:0 iterationStart:3 duration:100 delay:1 fill:both':
+ 'assert_equals: expected 0 but got 1',
+
+ 'Test zero iterations: iterations:0 iterationStart:3 duration:Infinity delay:1 fill:both':
+ 'assert_equals: expected 0 but got 1',
},
'test/web-platform-tests/web-animations/timing-model/animations/set-the-animation-start-time.html': {
- 'Setting the start time of an animation without an active timeline':
- 'Animation with null timeline is not supported',
-
'Setting an unresolved start time an animation without an active timeline does not clear the current time':
'Animation with null timeline is not supported',
+ 'Setting an unresolved start time sets the hold time':
+ 'assert_equals: expected "running" but got "idle"',
+
'Setting the start time clears the hold time':
'assert_equals: The current time is calculated from the hold time expected (number) 1000 but got (object) null',
- 'Setting an unresolved start time sets the hold time':
- 'assert_equals: expected "running" but got "idle"',
+ 'Setting the start time of an animation without an active timeline':
+ 'Animation with null timeline is not supported',
'Setting the start time resolves a pending pause task':
'assert_equals: Animation is in pause-pending state expected "pending" but got "idle"',