haikuwebkit/LayoutTests/animations/unprefixed-properties.html

254 lines
9.6 KiB
HTML
Raw Permalink Normal View History

Support unprefixed animation property names https://bugs.webkit.org/show_bug.cgi?id=138678 <rdar://problem/18943059> Reviewed by Simon Fraser. Source/WebCore: Step 1 of 3 in unprefixing CSS animations: handling the property names and values. Unlike other unprefixing, where we use an alias that effectively removes the prefixed values from the code, for animations we need to keep the old values around so that existing content will not break (e.g. computed style). During testing I noticed that we didn't handle the (relatively) new animation-direction values of "reverse" and "alternate-reverse" when querying computed style. Tests: animations/unprefixed-properties.html animations/unprefixed-shorthand.html * css/CSSComputedStyleDeclaration.cpp: (WebCore::ComputedStyleExtractor::propertyValue): Handle the unprefixed values, but also get animation direction to produce the correct results when "reverse" and "alternate-reverse" is specified. * css/CSSParser.cpp: Handle the new values. If necessary, pass a flag around indicating whether it is prefixed or unprefixed. (WebCore::CSSParser::parseValue): (WebCore::CSSParser::parseAnimationShorthand): Use the flag to decide which of the forms we're going to check. (WebCore::CSSParser::parseAnimationProperty): * css/CSSParser.h: * css/CSSProperty.h: (WebCore::prefixingVariantForPropertyId): Add prefixing/unprefixing variants for all the animation values, and clean up the code a bit. * css/CSSPropertyNames.in: Add new properties. * css/DeprecatedStyleBuilder.cpp: (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): We need handlers for the unprefixed forms. This should move to the new StyleBuilder soon. * css/StyleProperties.cpp: Handle new values. (WebCore::StyleProperties::getPropertyValue): (WebCore::StyleProperties::asText): * css/StylePropertyShorthand.cpp: (WebCore::animationShorthand): (WebCore::animationShorthandForParsing): Decide which list of properties to use. (WebCore::shorthandForProperty): (WebCore::matchingShorthandsForLonghand): (WebCore::webkitAnimationShorthandForParsing): Deleted. * css/StylePropertyShorthand.h: * css/StyleResolver.cpp: Since the new properties come before "background" in alphabetical order, they are earlier in the CSSPropertyNames.in file, and thus we need to update the call sites that think CSSPropertyBackground is the first property. (WebCore::StyleResolver::styleForKeyframe): Replace CSSPropertyBackground with CSSPropertyAnimation. (WebCore::StyleResolver::styleForPage): (WebCore::StyleResolver::applyMatchedProperties): (WebCore::StyleResolver::applyProperty): LayoutTests: Tests for unprefixed parsing and calculation of animation properties. Fun fact, this is the first test we have for the computed style of all animation-direction values. * animations/unprefixed-properties-expected.txt: Added. * animations/unprefixed-properties.html: Added. * animations/unprefixed-shorthand-expected.txt: Added. * animations/unprefixed-shorthand.html: Added. Canonical link: https://commits.webkit.org/156530@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@176050 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-11-13 01:23:15 +00:00
<!DOCTYPE html>
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test the unprefixed animation properties.");
// These have to be global for the test helpers to see them.
var stylesheet, cssRule, declaration, animationRule, subRule, animationStyle;
var styleElement = document.createElement("style");
document.head.appendChild(styleElement);
stylesheet = styleElement.sheet;
function testAnimationRule(description, property, value, expectedTexts)
{
debug("");
debug("Parsing - " + description + " : " + value);
stylesheet.insertRule("section { " + property + ": " + value + "; }", 0);
cssRule = stylesheet.cssRules.item(0);
shouldBe("cssRule.type", "1");
declaration = cssRule.style;
Reapply fixes for webkit.org/b/159450 and webkit.org/b/157569 https://bugs.webkit.org/show_bug.cgi?id=160474 <rdar://problem/27668170> Reviewed by Simon Fraser. The fixes are behaviour we want. They just caused a regression on medium.com (reverted in http://trac.webkit.org/r203380). Now that we've branched, revert the reversion (which itself was a reversion), so we can fix the actual bug: https://bugs.webkit.org/show_bug.cgi?id=160478 Source/WebCore: * css/CSSParser.cpp: (WebCore::CSSParser::parseValue): (WebCore::CSSParser::parseAnimationShorthand): (WebCore::CSSParser::addPropertyWithPrefixingVariant): (WebCore::CSSParser::parseTransitionShorthand): * css/CSSPropertyNames.in: * css/PropertySetCSSStyleDeclaration.cpp: (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValue): (WebCore::PropertySetCSSStyleDeclaration::getPropertyValue): (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValueInternal): (WebCore::PropertySetCSSStyleDeclaration::getPropertyValueInternal): * css/StyleProperties.cpp: (WebCore::MutableStyleProperties::removeShorthandProperty): (WebCore::StyleProperties::asText): (WebCore::MutableStyleProperties::removeProperty): Deleted. (WebCore::MutableStyleProperties::removePrefixedOrUnprefixedProperty): Deleted. (WebCore::MutableStyleProperties::setProperty): Deleted. (WebCore::getIndexInShorthandVectorForPrefixingVariant): Deleted. (WebCore::MutableStyleProperties::appendPrefixingVariantProperty): Deleted. (WebCore::MutableStyleProperties::setPrefixingVariantProperty): Deleted. * css/StyleProperties.h: LayoutTests: * animations/fill-mode-forwards-zero-duration.html: * animations/play-state-start-paused.html: * animations/script-tests/spring-parsing.js: (testSpring): * animations/spring-parsing-expected.txt: * animations/unprefixed-properties-expected.txt: * animations/unprefixed-properties.html: * fast/css/prefixed-unprefixed-variant-style-declaration-expected.txt: * fast/css/shorthand-omitted-initial-value-overrides-shorthand-expected.txt: Canonical link: https://commits.webkit.org/178614@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@204052 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-08-02 23:43:30 +00:00
shouldBe("declaration.length", "1");
Support unprefixed animation property names https://bugs.webkit.org/show_bug.cgi?id=138678 <rdar://problem/18943059> Reviewed by Simon Fraser. Source/WebCore: Step 1 of 3 in unprefixing CSS animations: handling the property names and values. Unlike other unprefixing, where we use an alias that effectively removes the prefixed values from the code, for animations we need to keep the old values around so that existing content will not break (e.g. computed style). During testing I noticed that we didn't handle the (relatively) new animation-direction values of "reverse" and "alternate-reverse" when querying computed style. Tests: animations/unprefixed-properties.html animations/unprefixed-shorthand.html * css/CSSComputedStyleDeclaration.cpp: (WebCore::ComputedStyleExtractor::propertyValue): Handle the unprefixed values, but also get animation direction to produce the correct results when "reverse" and "alternate-reverse" is specified. * css/CSSParser.cpp: Handle the new values. If necessary, pass a flag around indicating whether it is prefixed or unprefixed. (WebCore::CSSParser::parseValue): (WebCore::CSSParser::parseAnimationShorthand): Use the flag to decide which of the forms we're going to check. (WebCore::CSSParser::parseAnimationProperty): * css/CSSParser.h: * css/CSSProperty.h: (WebCore::prefixingVariantForPropertyId): Add prefixing/unprefixing variants for all the animation values, and clean up the code a bit. * css/CSSPropertyNames.in: Add new properties. * css/DeprecatedStyleBuilder.cpp: (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): We need handlers for the unprefixed forms. This should move to the new StyleBuilder soon. * css/StyleProperties.cpp: Handle new values. (WebCore::StyleProperties::getPropertyValue): (WebCore::StyleProperties::asText): * css/StylePropertyShorthand.cpp: (WebCore::animationShorthand): (WebCore::animationShorthandForParsing): Decide which list of properties to use. (WebCore::shorthandForProperty): (WebCore::matchingShorthandsForLonghand): (WebCore::webkitAnimationShorthandForParsing): Deleted. * css/StylePropertyShorthand.h: * css/StyleResolver.cpp: Since the new properties come before "background" in alphabetical order, they are earlier in the CSSPropertyNames.in file, and thus we need to update the call sites that think CSSPropertyBackground is the first property. (WebCore::StyleResolver::styleForKeyframe): Replace CSSPropertyBackground with CSSPropertyAnimation. (WebCore::StyleResolver::styleForPage): (WebCore::StyleResolver::applyMatchedProperties): (WebCore::StyleResolver::applyProperty): LayoutTests: Tests for unprefixed parsing and calculation of animation properties. Fun fact, this is the first test we have for the computed style of all animation-direction values. * animations/unprefixed-properties-expected.txt: Added. * animations/unprefixed-properties.html: Added. * animations/unprefixed-shorthand-expected.txt: Added. * animations/unprefixed-shorthand.html: Added. Canonical link: https://commits.webkit.org/156530@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@176050 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-11-13 01:23:15 +00:00
shouldBe("declaration.getPropertyValue('" + property + "')", "'" + value + "'");
shouldBe("declaration.getPropertyValue('-webkit-" + property + "')", "'" + value + "'");
animationRule = declaration.getPropertyCSSValue(property);
if (animationRule && animationRule.length > 1 && expectedTexts && expectedTexts.length > 1) {
for (var i = 0; i < expectedTexts.length; i++) {
subRule = animationRule[i];
shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
}
}
stylesheet.deleteRule(0);
}
function testInvalidAnimationRule(description, property, value)
{
debug("");
debug("Invalid - " + description + " : " + value);
stylesheet.insertRule("section { " + property + ": " + value + "; }", 0);
cssRule = stylesheet.cssRules.item(0);
shouldBe("cssRule.type", "1");
declaration = cssRule.style;
shouldBe("declaration.length", "0");
Returns inconsistent types for el.style.property and el.style.getPropertyValue('color') https://bugs.webkit.org/show_bug.cgi?id=147549 Patch by Benjamin Poulain <bpoulain@apple.com> on 2015-08-03 Reviewed by Andreas Kling. Source/WebCore: Kudos to Greg Whitworth for finding this bug. Test: fast/css/getPropertyValue-returns-empty-on-missing-property.html * css/CSSStyleDeclaration.idl: Our definition was wrong. Current spec: http://www.w3.org/TR/cssom/#dom-cssstyledeclaration-getpropertyvalue Current draft: https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-getpropertyvalue Gecko and EdgeHTML follow the spec. LayoutTests: The bug is very old, there were a lot of tests to update. The tests in css3/shapes are incorrect W3C tests. I only updated the expected results. The test fast/css/getPropertyValue-returns-empty-on-missing-property.html is the new one covering the bug fix. * animations/script-tests/trigger-parsing.js: (testTriggerRule): * animations/trigger-parsing-expected.txt: * animations/unprefixed-properties-expected.txt: * animations/unprefixed-properties.html: * css3/blending/blend-mode-property-parsing-invalid-expected.txt: * css3/blending/script-tests/blend-mode-property-parsing-invalid.js: (testInvalidFilterRule): * css3/filters/backdrop/backdropfilter-property-parsing-invalid-expected.txt: * css3/filters/backdrop/script-tests/backdropfilter-property-parsing-invalid.js: (testInvalidFilterRule): * css3/filters/filter-property-parsing-invalid-expected.txt: * css3/filters/script-tests/filter-property-parsing-invalid.js: (testInvalidFilterRule): * css3/shapes/shape-outside/values/shape-image-threshold-002-expected.txt: * css3/shapes/shape-outside/values/shape-image-threshold-003-expected.txt: * css3/shapes/shape-outside/values/shape-margin-004-expected.txt: * css3/shapes/shape-outside/values/shape-margin-005-expected.txt: * css3/shapes/shape-outside/values/shape-outside-circle-003-expected.txt: * css3/shapes/shape-outside/values/shape-outside-circle-006-expected.txt: * css3/shapes/shape-outside/values/shape-outside-circle-007-expected.txt: * css3/shapes/shape-outside/values/shape-outside-circle-008-expected.txt: * css3/shapes/shape-outside/values/shape-outside-ellipse-003-expected.txt: * css3/shapes/shape-outside/values/shape-outside-ellipse-006-expected.txt: * css3/shapes/shape-outside/values/shape-outside-ellipse-007-expected.txt: * css3/shapes/shape-outside/values/shape-outside-ellipse-008-expected.txt: * css3/shapes/shape-outside/values/shape-outside-inset-005-expected.txt: * css3/shapes/shape-outside/values/shape-outside-inset-006-expected.txt: * css3/shapes/shape-outside/values/shape-outside-inset-007-expected.txt: * css3/shapes/shape-outside/values/shape-outside-polygon-003-expected.txt: * fast/backgrounds/repeat/parsing-background-repeat-expected.txt: * fast/backgrounds/repeat/script-tests/parsing-background-repeat.js: * fast/backgrounds/size/parsing-background-size-values-expected.txt: * fast/backgrounds/size/resources/parsing-background-size-values.js: * fast/box-decoration-break/box-decoration-break-parsing-expected.txt: * fast/box-decoration-break/box-decoration-break-parsing.html: * fast/box-shadow/box-shadow-parsing-invalid-expected.txt: * fast/box-shadow/script-tests/box-shadow-parsing-invalid.js: (testInvalidFilterRule): * fast/css/background-clip-text-expected.txt: * fast/css/border-spacing-without-vertical-value.html: * fast/css/getPropertyValue-border-expected.txt: * fast/css/getPropertyValue-border.html: * fast/css/getPropertyValue-column-rule-expected.txt: * fast/css/getPropertyValue-column-rule.html: * fast/css/getPropertyValue-columns-expected.txt: * fast/css/getPropertyValue-columns.html: * fast/css/getPropertyValue-returns-empty-on-missing-property-expected.txt: Added. * fast/css/getPropertyValue-returns-empty-on-missing-property.html: Added. * fast/css/getPropertyValue-webkit-margin-collapse-expected.txt: * fast/css/getPropertyValue-webkit-margin-collapse.html: * fast/css/getPropertyValue-webkit-marquee-expected.txt: * fast/css/getPropertyValue-webkit-marquee.html: * fast/css/getPropertyValue-webkit-text-stroke-expected.txt: * fast/css/getPropertyValue-webkit-text-stroke.html: * fast/css/line-height-text-autosizing.html: * fast/css/outline-offset-parsing-expected.txt: * fast/css/parsing-color-correction-expected.txt: * fast/css/parsing-object-fit-expected.txt: * fast/css/parsing-object-fit.html: * fast/css/parsing-text-rendering-expected.txt: * fast/css/parsing-webkit-font-smoothing-expected.txt: * fast/css/resources/parsing-color-correction.js: * fast/css/resources/parsing-text-rendering.js: * fast/css/resources/parsing-webkit-font-smoothing.js: * fast/css/script-tests/background-clip-text.js: * fast/css/script-tests/outline-offset-parsing.js: * fast/css/script-tests/transform-origin-parsing.js: * fast/css/sticky/parsing-position-sticky-expected.txt: * fast/css/sticky/resources/parsing-position-sticky.js: * fast/css/transform-origin-parsing-expected.txt: * fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-roundtrip-expected.txt: * fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-roundtrip.html: * fast/css3-text/font-synthesis-parse-expected.txt: * fast/css3-text/font-synthesis-parse.html: * fast/filter-image/parse-filter-image-expected.txt: * fast/filter-image/parse-filter-image.html: * fast/masking/parsing-clip-path-shape-expected.txt: * fast/masking/parsing-clip-path-shape.html: * fast/masking/parsing-mask-expected.txt: * fast/masking/parsing-mask.html: * fast/shapes/css-shapes-disabled-expected.txt: * fast/shapes/css-shapes-disabled.html: * fast/shapes/parsing/parsing-shape-lengths-expected.txt: * fast/shapes/parsing/parsing-shape-lengths.html: * platform/mac/fast/css/dashboard-region-parser-expected.txt: * platform/mac/fast/css/dashboard-region-parser.html: * platform/mac/fast/text/trailing-word-parse-expected.txt: * platform/mac/fast/text/trailing-word-parse.html: * svg/paint-order/parsing-paint-order-expected.txt: * svg/paint-order/parsing-paint-order.html: Canonical link: https://commits.webkit.org/165676@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@187813 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-08-04 05:14:43 +00:00
shouldBeEqualToString("declaration.getPropertyValue('" + property + "')", "");
Support unprefixed animation property names https://bugs.webkit.org/show_bug.cgi?id=138678 <rdar://problem/18943059> Reviewed by Simon Fraser. Source/WebCore: Step 1 of 3 in unprefixing CSS animations: handling the property names and values. Unlike other unprefixing, where we use an alias that effectively removes the prefixed values from the code, for animations we need to keep the old values around so that existing content will not break (e.g. computed style). During testing I noticed that we didn't handle the (relatively) new animation-direction values of "reverse" and "alternate-reverse" when querying computed style. Tests: animations/unprefixed-properties.html animations/unprefixed-shorthand.html * css/CSSComputedStyleDeclaration.cpp: (WebCore::ComputedStyleExtractor::propertyValue): Handle the unprefixed values, but also get animation direction to produce the correct results when "reverse" and "alternate-reverse" is specified. * css/CSSParser.cpp: Handle the new values. If necessary, pass a flag around indicating whether it is prefixed or unprefixed. (WebCore::CSSParser::parseValue): (WebCore::CSSParser::parseAnimationShorthand): Use the flag to decide which of the forms we're going to check. (WebCore::CSSParser::parseAnimationProperty): * css/CSSParser.h: * css/CSSProperty.h: (WebCore::prefixingVariantForPropertyId): Add prefixing/unprefixing variants for all the animation values, and clean up the code a bit. * css/CSSPropertyNames.in: Add new properties. * css/DeprecatedStyleBuilder.cpp: (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): We need handlers for the unprefixed forms. This should move to the new StyleBuilder soon. * css/StyleProperties.cpp: Handle new values. (WebCore::StyleProperties::getPropertyValue): (WebCore::StyleProperties::asText): * css/StylePropertyShorthand.cpp: (WebCore::animationShorthand): (WebCore::animationShorthandForParsing): Decide which list of properties to use. (WebCore::shorthandForProperty): (WebCore::matchingShorthandsForLonghand): (WebCore::webkitAnimationShorthandForParsing): Deleted. * css/StylePropertyShorthand.h: * css/StyleResolver.cpp: Since the new properties come before "background" in alphabetical order, they are earlier in the CSSPropertyNames.in file, and thus we need to update the call sites that think CSSPropertyBackground is the first property. (WebCore::StyleResolver::styleForKeyframe): Replace CSSPropertyBackground with CSSPropertyAnimation. (WebCore::StyleResolver::styleForPage): (WebCore::StyleResolver::applyMatchedProperties): (WebCore::StyleResolver::applyProperty): LayoutTests: Tests for unprefixed parsing and calculation of animation properties. Fun fact, this is the first test we have for the computed style of all animation-direction values. * animations/unprefixed-properties-expected.txt: Added. * animations/unprefixed-properties.html: Added. * animations/unprefixed-shorthand-expected.txt: Added. * animations/unprefixed-shorthand.html: Added. Canonical link: https://commits.webkit.org/156530@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@176050 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-11-13 01:23:15 +00:00
stylesheet.deleteRule(0);
}
function testComputedAnimationRule(description, property, value, expectedTexts)
{
debug("");
debug("Computed Style - " + description + " : " + value);
stylesheet.insertRule("body { " + property + ": " + value + "; }", 0);
animationStyle = window.getComputedStyle(document.body).getPropertyCSSValue(property);
if (animationStyle && animationStyle.length > 1 && expectedTexts && expectedTexts.length > 1) {
for (var i = 0; i < expectedTexts.length; i++) {
subRule = animationStyle[i];
shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
}
} else
shouldBe("animationStyle.cssText", "'" + value + "'");
stylesheet.deleteRule(0);
}
testAnimationRule("Basic animation-name",
"animation-name", "waldo");
testAnimationRule("Multiple animation-names",
"animation-name", "waldo, wally",
["waldo", "wally"]);
testAnimationRule("Basic animation-duration",
"animation-duration", "5s");
testAnimationRule("Multiple animation-durations",
"animation-duration", "10s, 20ms",
["10s", "20ms"]);
testAnimationRule("Basic animation-delay",
"animation-delay", "5s");
testAnimationRule("Multiple animation-delays",
"animation-delay", "10s, 20ms",
["10s", "20ms"]);
testAnimationRule("Basic animation-timing-function",
"animation-timing-function", "ease-in-out");
testAnimationRule("animation-timing-function with bezier",
"animation-timing-function", "cubic-bezier(0.2, 0.3, 0.4, 0.5)");
testAnimationRule("Multiple animation-timing-functions",
"animation-timing-function", "ease-in, ease-out",
["ease-in", "ease-out"]);
testAnimationRule("Basic animation-iteration-count",
"animation-iteration-count", "4");
testAnimationRule("animation-iteration-count with keyword",
"animation-iteration-count", "infinite");
testAnimationRule("Multiple animation-iteration-counts",
"animation-iteration-count", "2, infinite, 4",
["2", "infinite", "4"]);
testAnimationRule("Normal animation-direction",
"animation-direction", "normal");
testAnimationRule("Alternate animation-direction",
"animation-direction", "alternate");
testAnimationRule("Reverse animation-direction",
"animation-direction", "reverse");
testAnimationRule("Alternate Reverse animation-direction",
"animation-direction", "alternate-reverse");
testAnimationRule("Multiple animation-directions",
"animation-direction", "alternate, alternate, normal",
["alternate", "alternate", "normal"]);
testAnimationRule("None animation-fill-mode",
"animation-fill-mode", "none");
testAnimationRule("Forwards animation-fill-mode",
"animation-fill-mode", "forwards");
testAnimationRule("Backwards animation-fill-mode",
"animation-fill-mode", "backwards");
testAnimationRule("Both animation-fill-mode",
"animation-fill-mode", "both");
testAnimationRule("Multiple animation-fill-modes",
"animation-fill-mode", "none, forwards, backwards, both",
["none", "forwards", "backwards", "both"]);
testInvalidAnimationRule("duration - Bad value", "animation-duration", "10cm");
testInvalidAnimationRule("duration - List with bad value", "animation-duration", "10ms, 10cm, 10s");
testInvalidAnimationRule("delay - Bad value", "animation-delay", "10cm");
testInvalidAnimationRule("delay - List with bad value", "animation-delay", "10ms, 10cm, 10s");
testInvalidAnimationRule("timing-function - Wrong keyword parameter", "animation-timing-function", "egg");
testInvalidAnimationRule("timing-function - List with wrong keyword parameter", "animation-timing-function", "ease-in, egg, ease-out");
testInvalidAnimationRule("iteration-count - Wrong keyword parameter", "animation-iteration-count", "banana");
testInvalidAnimationRule("iteration-count - List with wrong keyword parameter", "animation-iteration-count", "infinite, 10, banana");
testInvalidAnimationRule("direction - Wrong keyword parameter", "animation-direction", "all");
testInvalidAnimationRule("direction - List with wrong keyword parameter", "animation-direction", "normal, alternate, none");
testInvalidAnimationRule("fill-mode - Wrong keyword parameter", "animation-fill-mode", "all");
testInvalidAnimationRule("fill-mode - List with wrong keyword parameter", "animation-fill-mode", "none, backwards, left, alternate, forwards");
testComputedAnimationRule("Basic animation-name",
"animation-name", "waldo");
testComputedAnimationRule("Multiple animation-names",
"animation-name", "waldo, wally",
["waldo", "wally"]);
testComputedAnimationRule("Basic animation-duration",
"animation-duration", "5s");
testComputedAnimationRule("Multiple animation-durations",
"animation-duration", "10s, 20ms",
["10s", "0.02s"]);
testComputedAnimationRule("Basic animation-delay",
"animation-delay", "5s");
testComputedAnimationRule("Multiple animation-delays",
"animation-delay", "10s, 20ms",
["10s", "0.02s"]);
testComputedAnimationRule("Basic animation-timing-function",
"animation-timing-function", "ease-in-out");
testComputedAnimationRule("animation-timing-function with bezier",
"animation-timing-function", "cubic-bezier(0.2, 0.3, 0.4, 0.5)");
testComputedAnimationRule("Multiple animation-timing-functions",
"animation-timing-function", "ease-in, ease-out",
["ease-in", "ease-out"]);
testComputedAnimationRule("Basic animation-iteration-count",
"animation-iteration-count", "4");
testComputedAnimationRule("animation-iteration-count with keyword",
"animation-iteration-count", "infinite");
testComputedAnimationRule("Multiple animation-iteration-counts",
"animation-iteration-count", "2, infinite, 4",
["2", "infinite", "4"]);
testComputedAnimationRule("Normal animation-direction",
"animation-direction", "normal");
testComputedAnimationRule("Alternate animation-direction",
"animation-direction", "alternate");
testComputedAnimationRule("Reverse animation-direction",
"animation-direction", "reverse");
testComputedAnimationRule("Alternate Reverse animation-direction",
"animation-direction", "alternate-reverse");
testComputedAnimationRule("Multiple animation-directions",
"animation-direction", "alternate, alternate, normal",
["alternate", "alternate", "normal"]);
testComputedAnimationRule("None animation-fill-mode",
"animation-fill-mode", "none");
testComputedAnimationRule("Forwards animation-fill-mode",
"animation-fill-mode", "forwards");
testComputedAnimationRule("Backwards animation-fill-mode",
"animation-fill-mode", "backwards");
testComputedAnimationRule("Both animation-fill-mode",
"animation-fill-mode", "both");
testComputedAnimationRule("Multiple animation-fill-modes",
"animation-fill-mode", "none, forwards, backwards, both",
["none", "forwards", "backwards", "both"]);
successfullyParsed = true;
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>