| <!doctype html> |
| <meta charset=utf-8> |
| <script src="../../../resources/testharness.js"></script> |
| <script src="../../../resources/testharnessreport.js"></script> |
| <script src="../resources/testcommon.js"></script> |
| <body> |
| <div id="log"></div> |
| <script> |
| 'use strict'; |
| |
| async_test(function(t) { |
| var div = addDiv(t); |
| div.style.transform = 'translate(0px)'; |
| getComputedStyle(div).transform; |
| div.style.transition = 'transform 100s'; |
| div.style.transform = 'translate(10px)'; |
| getComputedStyle(div).transform; |
| |
| var animation = div.getAnimations()[0]; |
| var originalReadyPromise = animation.ready; |
| |
| animation.ready.then(t.step_func(function() { |
| assert_equals(animation.ready, originalReadyPromise, |
| 'Ready promise is the same object when playing completes'); |
| animation.pause(); |
| assert_not_equals(animation.ready, originalReadyPromise, |
| 'Ready promise object identity differs when pausing'); |
| t.done(); |
| })); |
| }, 'A new ready promise is created each time play() is called' |
| + ' the animation property'); |
| |
| async_test(function(t) { |
| var div = addDiv(t); |
| |
| // Set up pending transition |
| div.style.transform = 'translate(0px)'; |
| getComputedStyle(div).transform; |
| div.style.transition = 'transform 100s'; |
| div.style.transform = 'translate(10px)'; |
| getComputedStyle(div).transform; |
| |
| var animation = div.getAnimations()[0]; |
| assert_true(animation.pending, 'Animation is initially pending'); |
| |
| // Set up listeners on ready promise |
| animation.ready.then(t.step_func(function() { |
| assert_unreached('ready promise was fulfilled'); |
| })).catch(t.step_func(function(err) { |
| assert_equals(err.name, 'AbortError', |
| 'ready promise is rejected with AbortError'); |
| assert_equals(animation.playState, 'idle', |
| 'Animation is idle after transition was cancelled'); |
| })).then(t.step_func(function() { |
| t.done(); |
| })); |
| |
| // Now remove transform from transition-property and flush styles |
| div.style.transitionProperty = 'none'; |
| getComputedStyle(div).transitionProperty; |
| |
| }, 'ready promise is rejected when a transition is cancelled by updating' |
| + ' transition-property'); |
| |
| async_test(function(t) { |
| var div = addDiv(t); |
| |
| // Set up pending transition |
| div.style.marginLeft = '0px'; |
| getComputedStyle(div).marginLeft; |
| div.style.transition = 'margin-left 100s'; |
| div.style.marginLeft = '100px'; |
| getComputedStyle(div).marginLeft; |
| |
| var animation = div.getAnimations()[0]; |
| assert_true(animation.pending, 'Animation is initially pending'); |
| |
| // Set up listeners on ready promise |
| animation.ready.then(t.step_func(function() { |
| assert_unreached('ready promise was fulfilled'); |
| })).catch(t.step_func(function(err) { |
| assert_equals(err.name, 'AbortError', |
| 'ready promise is rejected with AbortError'); |
| assert_equals(animation.playState, 'idle', |
| 'Animation is idle after transition was cancelled'); |
| })).then(t.step_func(function() { |
| t.done(); |
| })); |
| |
| // Now update the transition to animate to something not-interpolable |
| div.style.marginLeft = 'auto'; |
| getComputedStyle(div).marginLeft; |
| |
| }, 'ready promise is rejected when a transition is cancelled by changing' |
| + ' the transition property to something not interpolable'); |
| |
| </script> |
| </body> |