Harness status: OK Found 153 tests 139 Pass 14 Fail Pass Element.animate() creates an Animation object Pass Element.animate() creates an Animation object in the relevant realm of the target element Pass Element.animate() creates an Animation object with a KeyframeEffect Pass Element.animate() creates an Animation object with a KeyframeEffect that is created in the relevant realm of the target element Pass Element.animate() accepts empty keyframe lists (input: []) Pass Element.animate() accepts empty keyframe lists (input: null) Pass Element.animate() accepts empty keyframe lists (input: undefined) Pass Element.animate() accepts a one property two value property-indexed keyframes specification Pass Element.animate() accepts a one shorthand property two value property-indexed keyframes specification Pass Element.animate() accepts a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification Pass Element.animate() accepts a two property (one shorthand and one of its shorthand components) two value property-indexed keyframes specification Pass Element.animate() accepts a two property two value property-indexed keyframes specification Pass Element.animate() accepts a two property property-indexed keyframes specification with different numbers of values Pass Element.animate() accepts a property-indexed keyframes specification with an invalid value Pass Element.animate() accepts a one property two value property-indexed keyframes specification that needs to stringify its values Pass Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference Pass Element.animate() accepts a property-indexed keyframes specification with a CSS variable reference in a shorthand property Pass Element.animate() accepts a one property one value property-indexed keyframes specification Pass Element.animate() accepts a one property one non-array value property-indexed keyframes specification Pass Element.animate() accepts a one property two value property-indexed keyframes specification where the first value is invalid Pass Element.animate() accepts a one property two value property-indexed keyframes specification where the second value is invalid Fail Element.animate() accepts a property-indexed keyframes specification with a CSS variable as the property Fail Element.animate() accepts a property-indexed keyframe with a single offset Pass Element.animate() accepts a property-indexed keyframe with an array of offsets Pass Element.animate() accepts a property-indexed keyframe with an array of offsets that is too short Pass Element.animate() accepts a property-indexed keyframe with an array of offsets that is too long Pass Element.animate() accepts a property-indexed keyframe with an empty array of offsets Fail Element.animate() accepts a property-indexed keyframe with an array of offsets with an embedded null value Fail Element.animate() accepts a property-indexed keyframe with an array of offsets with a trailing null value Fail Element.animate() accepts a property-indexed keyframe with an array of offsets with leading and trailing null values Fail Element.animate() accepts a property-indexed keyframe with an array of offsets with adjacent null values Fail Element.animate() accepts a property-indexed keyframe with an array of offsets with all null values (and too many at that) Pass Element.animate() accepts a property-indexed keyframe with a single null offset Pass Element.animate() accepts a property-indexed keyframe with an array of offsets that is not strictly ascending in the unused part of the array Pass Element.animate() accepts a property-indexed keyframe without any specified easing Pass Element.animate() accepts a property-indexed keyframe with a single easing Pass Element.animate() accepts a property-indexed keyframe with an array of easings Pass Element.animate() accepts a property-indexed keyframe with an array of easings that is too short Pass Element.animate() accepts a property-indexed keyframe with a single-element array of easings Pass Element.animate() accepts a property-indexed keyframe with an empty array of easings Pass Element.animate() accepts a property-indexed keyframe with an array of easings that is too long Pass Element.animate() accepts a property-indexed keyframe with a single composite operation Pass Element.animate() accepts a property-indexed keyframe with a composite array Pass Element.animate() accepts a property-indexed keyframe with a composite array that is too short Pass Element.animate() accepts a property-indexed keyframe with a composite array that is too long Pass Element.animate() accepts a property-indexed keyframe with a single-element composite array Pass Element.animate() accepts a one property one keyframe sequence Pass Element.animate() accepts a one property two keyframe sequence Pass Element.animate() accepts a two property two keyframe sequence Pass Element.animate() accepts a one shorthand property two keyframe sequence Pass Element.animate() accepts a two property (a shorthand and one of its component longhands) two keyframe sequence Pass Element.animate() accepts a two property keyframe sequence where one property is missing from the first keyframe Pass Element.animate() accepts a two property keyframe sequence where one property is missing from the last keyframe Pass Element.animate() accepts a one property two keyframe sequence that needs to stringify its values Pass Element.animate() accepts a keyframe sequence with a CSS variable reference Pass Element.animate() accepts a keyframe sequence with a CSS variable reference in a shorthand property Fail Element.animate() accepts a keyframe sequence with a CSS variable as its property Pass Element.animate() accepts a keyframe sequence with duplicate values for a given interior offset Pass Element.animate() accepts a keyframe sequence with duplicate values for offsets 0 and 1 Pass Element.animate() accepts a two property four keyframe sequence Pass Element.animate() accepts a single keyframe sequence with omitted offset Fail Element.animate() accepts a single keyframe sequence with null offset Pass Element.animate() accepts a single keyframe sequence with string offset Fail Element.animate() accepts a single keyframe sequence with a single calc() offset Fail Element.animate() accepts a one property keyframe sequence with some omitted offsets Fail Element.animate() accepts a one property keyframe sequence with some null offsets Fail Element.animate() accepts a two property keyframe sequence with some omitted offsets Pass Element.animate() accepts a one property keyframe sequence with all omitted offsets Pass Element.animate() accepts a keyframe sequence with different easing values, but the same easing value for a given offset Pass Element.animate() accepts a keyframe sequence with different composite values, but the same composite value for a given offset Pass Element.animate() does not accept keyframes with an out-of-bounded positive offset Pass Element.animate() does not accept keyframes with an out-of-bounded negative offset Pass Element.animate() does not accept property-indexed keyframes not loosely sorted by offset Pass Element.animate() does not accept property-indexed keyframes not loosely sorted by offset even though not all offsets are specified Pass Element.animate() does not accept property-indexed keyframes with offsets out of range Pass Element.animate() does not accept keyframes not loosely sorted by offset Pass Element.animate() does not accept property-indexed keyframes with an invalid easing value Pass Element.animate() does not accept property-indexed keyframes with an invalid easing value as one of the array values Pass Element.animate() does not accept property-indexed keyframe with an invalid easing in the unused part of the array of easings Pass Element.animate() does not accept empty property-indexed keyframe with an invalid easing Pass Element.animate() does not accept empty property-indexed keyframe with an invalid easings array Pass Element.animate() does not accept a keyframe sequence with an invalid easing value Pass Element.animate() does not accept property-indexed keyframes with an invalid composite value Pass Element.animate() does not accept property-indexed keyframes with an invalid composite value as one of the array values Pass Element.animate() does not accept keyframes with an invalid composite value Pass Element.animate() accepts a double as an options argument Pass Element.animate() accepts a KeyframeAnimationOptions argument Pass Element.animate() accepts an absent options argument Pass Element.animate() does not accept invalid delay value: NaN Pass Element.animate() does not accept invalid delay value: Infinity Pass Element.animate() does not accept invalid delay value: -Infinity Pass Element.animate() accepts a duration of 'auto' using a dictionary object Pass Element.animate() does not accept invalid duration value: -1 Pass Element.animate() does not accept invalid duration value: NaN Pass Element.animate() does not accept invalid duration value: -Infinity Pass Element.animate() does not accept invalid duration value: "abc" Pass Element.animate() does not accept invalid duration value: -1 using a dictionary object Pass Element.animate() does not accept invalid duration value: NaN using a dictionary object Pass Element.animate() does not accept invalid duration value: -Infinity using a dictionary object Pass Element.animate() does not accept invalid duration value: "abc" using a dictionary object Pass Element.animate() does not accept invalid duration value: "100" using a dictionary object Pass Element.animate() does not accept invalid easing: '' Pass Element.animate() does not accept invalid easing: '7' Pass Element.animate() does not accept invalid easing: 'test' Pass Element.animate() does not accept invalid easing: 'initial' Pass Element.animate() does not accept invalid easing: 'inherit' Pass Element.animate() does not accept invalid easing: 'unset' Pass Element.animate() does not accept invalid easing: 'unrecognized' Pass Element.animate() does not accept invalid easing: 'var(--x)' Pass Element.animate() does not accept invalid easing: 'ease-in-out, ease-out' Pass Element.animate() does not accept invalid easing: 'cubic-bezier(1.1, 0, 1, 1)' Pass Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, 1.1, 1)' Pass Element.animate() does not accept invalid easing: 'cubic-bezier(-0.1, 0, 1, 1)' Pass Element.animate() does not accept invalid easing: 'cubic-bezier(0, 0, -0.1, 1)' Pass Element.animate() does not accept invalid easing: 'cubic-bezier(0.1, 0, 4, 0.4)' Pass Element.animate() does not accept invalid easing: 'steps(-1, start)' Pass Element.animate() does not accept invalid easing: 'steps(0.1, start)' Pass Element.animate() does not accept invalid easing: 'steps(3, nowhere)' Pass Element.animate() does not accept invalid easing: 'steps(-3, end)' Pass Element.animate() does not accept invalid easing: 'function (a){return a}' Pass Element.animate() does not accept invalid easing: 'function (x){return x}' Pass Element.animate() does not accept invalid easing: 'function(x, y){return 0.3}' Pass Element.animate() does not accept invalid iterationStart value: -1 Pass Element.animate() does not accept invalid iterationStart value: NaN Pass Element.animate() does not accept invalid iterationStart value: Infinity Pass Element.animate() does not accept invalid iterationStart value: -Infinity Pass Element.animate() does not accept invalid iterations value: -1 Pass Element.animate() does not accept invalid iterations value: -Infinity Pass Element.animate() does not accept invalid iterations value: NaN Pass Element.animate() correctly sets the id attribute when no id is specified Pass Element.animate() correctly sets the id attribute Pass Element.animate() correctly sets the Animation's timeline Pass Element.animate() correctly sets the Animation's timeline when triggered on an element in a different document Pass Element.animate() correctly sets the Animation's timeline with no timeline parameter in KeyframeAnimationOptions. Pass Element.animate() correctly sets the Animation's timeline with undefined timeline in KeyframeAnimationOptions. Pass Element.animate() correctly sets the Animation's timeline with null timeline in KeyframeAnimationOptions. Pass Element.animate() correctly sets the Animation's timeline with DocumentTimeline in KeyframeAnimationOptions. Pass Element.animate() calls play on the Animation Pass Element.animate() does NOT trigger a style change event Pass animate() with pseudoElement parameter creates an Animation object Pass animate() with pseudoElement parameter without content creates an Animation object Pass animate() with pseudoElement parameter creates an Animation object for ::marker Pass animate() with pseudoElement parameter creates an Animation object for ::first-line Pass animate() with pseudoElement an Animation object targeting the correct pseudo-element Pass animate() with pseudoElement without content creates an Animation object targeting the correct pseudo-element Pass animate() with pseudoElement an Animation object targeting the correct pseudo-element for ::marker Pass animate() with pseudoElement an Animation object targeting the correct pseudo-element for ::first-line Pass animate() with a non-null invalid pseudoElement '' throws a SyntaxError Pass animate() with a non-null invalid pseudoElement 'before' throws a SyntaxError Pass animate() with a non-null invalid pseudoElement ':abc' throws a SyntaxError Pass animate() with a non-null invalid pseudoElement '::abc' throws a SyntaxError Pass animate() with pseudoElement ::placeholder does not throw Fail Finished fill animation doesn't replace animation on a different pseudoElement