blob: 041e806de44ca1265f82f60850243302336add9a [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test simple animation with fill modes</title>
<style type="text/css" media="screen">
.box {
position: relative;
left: 100px;
top: 10px;
height: 30px;
width: 200px;
-webkit-animation-delay: 0.1s;
-webkit-animation-duration: 0.1s;
-webkit-animation-timing-function: linear;
}
.two-keyframes {
-webkit-animation-name: anim1;
}
.three-keyframes {
-webkit-animation-name: anim2;
}
@-webkit-keyframes anim1 {
from { left: 200px; }
to { left: 300px; }
}
@-webkit-keyframes anim2 {
from { left: 200px; }
50% { left: 250px; }
to { left: 300px; }
}
#a, #f {
background-color: blue;
-webkit-animation-fill-mode: none;
}
#b, #g {
background-color: red;
-webkit-animation-fill-mode: backwards;
}
#c, #h {
background-color: green;
-webkit-animation-fill-mode: forwards;
}
#d, #i {
background-color: yellow;
-webkit-animation-fill-mode: both;
}
#e, #j {
background-color: #999;
-webkit-animation-fill-mode: both;
-webkit-animation-iteration-count: 2;
-webkit-animation-direction: alternate;
}
</style>
<script type="text/javascript" charset="utf-8">
const numAnims = 10;
var animsFinished = 0;
const allowance = 5;
const expectedValues = [
{id: "a", start: 100, end: 100},
{id: "b", start: 200, end: 100},
{id: "c", start: 100, end: 300},
{id: "d", start: 200, end: 300},
{id: "e", start: 200, end: 200},
{id: "f", start: 100, end: 100},
{id: "g", start: 200, end: 100},
{id: "h", start: 100, end: 300},
{id: "i", start: 200, end: 300},
{id: "j", start: 200, end: 200}
];
var result = "";
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function animationEnded(event) {
if (++animsFinished == numAnims) {
setTimeout(endTest, 0); // this set timeout should be ok in the test environment
// since we're just giving style a chance to resolve
}
};
function endTest() {
for (var i=0; i < expectedValues.length; i++) {
var el = document.getElementById(expectedValues[i].id);
var expectedValue = expectedValues[i].end;
var realValue = window.getComputedStyle(el).getPropertyCSSValue("left").getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
if (Math.abs(expectedValue - realValue) < allowance) {
result += "PASS";
} else {
result += "FAIL";
}
result += " - end of animation - id: " + expectedValues[i].id + " expected: " + expectedValue + " actual: " + realValue + "<br>";
}
document.getElementById('result').innerHTML = result;
if (window.testRunner)
testRunner.notifyDone();
}
window.onload = function () {
for (var i=0; i < expectedValues.length; i++) {
var el = document.getElementById(expectedValues[i].id);
var expectedValue = expectedValues[i].start;
var realValue = window.getComputedStyle(el).getPropertyCSSValue("left").getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
if (Math.abs(expectedValue - realValue) < allowance) {
result += "PASS";
} else {
result += "FAIL";
}
result += " - start of animation - id: " + expectedValues[i].id + " expected: " + expectedValue + " actual: " + realValue + "<br>";
}
document.addEventListener("webkitAnimationEnd", animationEnded, false);
};
</script>
</head>
<body>
This test performs an animation of the left property with four different
fill modes on two sets of objects. The first set has animations with
only from and to keyframes. The second set has animations with from, to and
a third keyframe at 50%. It animates over 0.1 second with a 0.1 second delay.
It takes snapshots at document load and the end of the animation.
<div id="a" class="box two-keyframes">
None - 2 keyframes
</div>
<div id="b" class="box two-keyframes">
Backwards - 2 keyframes
</div>
<div id="c" class="box two-keyframes">
Forwards - 2 keyframes
</div>
<div id="d" class="box two-keyframes">
Both - 2 keyframes
</div>
<div id="e" class="box two-keyframes">
Both iterating - 2 keyframes
</div>
<div id="f" class="box three-keyframes">
None - 3 keyframes
</div>
<div id="g" class="box three-keyframes">
Backwards - 3 keyframes
</div>
<div id="h" class="box three-keyframes">
Forwards - 3 keyframes
</div>
<div id="i" class="box three-keyframes">
Both - 3 keyframes
</div>
<div id="j" class="box three-keyframes">
Both iterating - 3 keyframes
</div>
<div id="result">
</div>
</body>
</html>