| <!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] --> |
| <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; |
| shouldBe("declaration.length", "1"); |
| 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"); |
| shouldBeEqualToString("declaration.getPropertyValue('" + property + "')", ""); |
| |
| 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> |