| <!doctype html> |
| <meta charset=utf-8> |
| <script src="../../../resources/testharness.js"></script> |
| <script src="../../../resources/testharnessreport.js"></script> |
| <script src="../resources/testcommon.js"></script> |
| <style> |
| @keyframes anim { |
| from { |
| margin-left: 0px; |
| } |
| to { |
| margin-left: 100px; |
| } |
| } |
| </style> |
| <body> |
| <div id="log"></div> |
| <script> |
| 'use strict'; |
| |
| promise_test(function(t) { |
| var div = addDiv(t); |
| div.style.animation = 'anim 100s'; |
| |
| var watcher = new EventWatcher(t, div, [ 'animationend', |
| 'animationcancel' ]); |
| var animation = div.getAnimations()[0]; |
| return animation.ready.then(function() { |
| animation.currentTime = 50 * MS_PER_SEC; |
| animation.effect = null; |
| assert_equals(animation.playState, 'finished'); |
| assert_equals(getComputedStyle(div).marginLeft, '0px'); |
| return watcher.wait_for('animationend'); |
| }); |
| }, 'Setting a null effect on a running animation fires an animationend event'); |
| |
| promise_test(function(t) { |
| var div = addDiv(t); |
| div.style.animation = 'anim 100s'; |
| |
| var animation = div.getAnimations()[0]; |
| return animation.ready.then(function() { |
| animation.currentTime = 50 * MS_PER_SEC; |
| animation.effect = new KeyframeEffect(div, |
| { left: [ '0px' , '100px'] }, |
| 100 * MS_PER_SEC); |
| assert_equals(animation.playState, 'running'); |
| assert_equals(getComputedStyle(div).marginLeft, '0px'); |
| assert_equals(getComputedStyle(div).left, '50px'); |
| }); |
| }, 'Replacing an animation\'s effect with an effect that targets a different ' + |
| 'property should update both properties'); |
| |
| promise_test(function(t) { |
| var div = addDiv(t); |
| div.style.animation = 'anim 100s'; |
| |
| var animation = div.getAnimations()[0]; |
| return animation.ready.then(function() { |
| animation.currentTime = 50 * MS_PER_SEC; |
| animation.effect = new KeyframeEffect(div, |
| { left: [ '0px' , '100px'] }, |
| 20 * MS_PER_SEC); |
| assert_equals(animation.playState, 'finished'); |
| }); |
| }, 'Replacing an animation\'s effect with a shorter one that should have ' + |
| 'already finished, the animation finishes immediately'); |
| |
| promise_test(function(t) { |
| var div = addDiv(t); |
| div.style.animation = 'anim 100s'; |
| |
| var animation = div.getAnimations()[0]; |
| assert_true(animation.pending); |
| |
| animation.effect = new KeyframeEffect(div, |
| { left: [ '0px' , '100px'] }, |
| 100 * MS_PER_SEC); |
| assert_true(animation.pending); |
| |
| return animation.ready.then(function() { |
| assert_false(animation.pending); |
| }); |
| }, 'A play-pending animation\'s effect whose effect is replaced still exits ' + |
| 'the pending state'); |
| |
| promise_test(function(t) { |
| var div1 = addDiv(t); |
| var div2 = addDiv(t); |
| |
| var watcher1 = new EventWatcher(t, div1, 'animationstart'); |
| // Watch |div2| as well to ensure it does *not* get events. |
| var watcher2 = new EventWatcher(t, div2, 'animationstart'); |
| |
| div1.style.animation = 'anim 100s'; |
| |
| var animation = div1.getAnimations()[0]; |
| animation.effect = new KeyframeEffect(div2, |
| { left: [ '0px', '100px' ] }, |
| 100 * MS_PER_SEC); |
| |
| return watcher1.wait_for('animationstart').then(function() { |
| assert_equals(animation.effect.target, div2); |
| |
| // Then wait a couple of frames and check that no event was dispatched. |
| return waitForAnimationFrames(2); |
| }); |
| }, 'The event is dispatched at the original element even after setting an ' + |
| 'effect with a different target element'); |
| |
| promise_test(function(t) { |
| var div = addDiv(t); |
| var watcher = new EventWatcher(t, div, [ 'animationstart', |
| 'animationend', |
| 'animationcancel' ]); |
| div.style.animation = 'anim 100s'; |
| var animation = div.getAnimations()[0]; |
| animation.finish(); |
| |
| return watcher.wait_for([ 'animationstart', |
| 'animationend' ]).then(function(evt) { |
| // Set a longer effect |
| animation.effect = new KeyframeEffect(div, |
| { left: [ '0px', '100px' ] }, |
| 200 * MS_PER_SEC); |
| return watcher.wait_for('animationstart'); |
| }); |
| }, 'After replacing a finished animation\'s effect with a longer one ' + |
| 'it fires an animationstart event'); |
| |
| </script> |
| </body> |