blob: 902dbc767f2a10c51c9c61d53fcc74a2e7b92c42 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="w3c/resources/keyframes-test.js"></script>
<script>
// FIXME: Remove the need for and use of this function.
// Currently our animation timeline is not stable during page load script execution.
// By deferring the tests to requestAnimationFrame() we can get a stable timeline and
// avoid flaky test results.
function testInRAF(testFunction, description, properties) {
async_test(function(testHandle) {
requestAnimationFrame(function() {
testHandle.step(testFunction);
testHandle.done();
})
}, description, properties);
}
testInRAF(function() {
assertAnimationStyles([
{opacity: '0', left: '0px', easing: 'steps(2, start)'},
{opacity: '0.25', left: '25px'},
{opacity: '0.75', left: '75px'},
], {
0: {opacity: '0.125', left: '12.5px'},
0.125: {opacity: '0.125', left: '12.5px'},
0.25: {opacity: '0.25', left: '25px'},
0.375: {opacity: '0.25', left: '25px'},
0.5: {opacity: '0.25', left: '25px'},
0.625: {opacity: '0.375', left: '37.5px'},
0.75: {opacity: '0.5', left: '50px'},
0.875: {opacity: '0.625', left: '62.5px'},
1: {opacity: '0.75', left: '75px'},
}, 'with easing on first keyframe');
assertAnimationStyles([
{opacity: '0', left: '0px'},
{opacity: '0.5', left: '50px', easing: 'steps(2, start)'},
{opacity: '0.75', left: '75px'},
], {
0: {opacity: '0', left: '0px'},
0.125: {opacity: '0.125', left: '12.5px'},
0.25: {opacity: '0.25', left: '25px'},
0.375: {opacity: '0.375', left: '37.5px'},
0.5: {opacity: '0.625', left: '62.5px'},
0.625: {opacity: '0.625', left: '62.5px'},
0.75: {opacity: '0.75', left: '75px'},
0.875: {opacity: '0.75', left: '75px'},
1: {opacity: '0.75', left: '75px'},
}, 'with easing on second keyframe');
},
'element.animate() with eased keyframe',
{
help: 'http://dev.w3.org/fxtf/web-animations/#the-keyframe-dictionary',
assert: [
'element.animate() should start an animation when keyframes are specified with timing functions',
'for their easing property. The animation should use the given timing function between consecutive',
'keyframe offsets.',
],
author: 'Alan Cutter',
});
testInRAF(function() {
assertAnimationStyles([
{opacity: '0', offset: 0, easing: 'steps(2, start)'},
{left: '0px', offset: 0},
{opacity: '0.5', left: '50px'},
], {
0: {opacity: '0.25', left: '0px'},
0.25: {opacity: '0.25', left: '12.5px'},
0.5: {opacity: '0.5', left: '25px'},
0.75: {opacity: '0.5', left: '37.5px'},
1: {opacity: '0.5', left: '50px'},
});
},
'element.animate() with eased keyframe on single property',
{
help: 'http://dev.w3.org/fxtf/web-animations/#the-keyframe-dictionary',
assert: [
'element.animate() should start an animation when keyframes are specified with timing functions',
'for their easing property. The animation should use the given timing function only on the properties',
'specified in the same keyframe.',
],
author: 'Alan Cutter',
});
testInRAF(function() {
assertAnimationStyles([
{opacity: '0', left: '0px'},
{opacity: '0.5', left: '50px', easing: 'steps(2, start)'},
], {
0: {opacity: '0', left: '0px'},
0.25: {opacity: '0.125', left: '12.5px'},
0.5: {opacity: '0.25', left: '25px'},
0.75: {opacity: '0.375', left: '37.5px'},
1: {opacity: '0.5', left: '50px'},
});
},
'element.animate() with easing on last keyframe',
{
help: 'http://dev.w3.org/fxtf/web-animations/#the-keyframe-dictionary',
assert: [
'element.animate() should start an animation when keyframes are specified with timing functions',
'for their easing property. Easing on the last keyframes should have no effect on the animation.',
],
author: 'Alan Cutter',
});
</script>