[Web Animations] Turn Web Animations with CSS integration on for test runners
[WebKit-https.git] / LayoutTests / imported / mozilla / css-transitions / test_animation-ready.html
1 <!doctype html>
2 <meta charset=utf-8>
3 <script src="../../../resources/testharness.js"></script>
4 <script src="../../../resources/testharnessreport.js"></script>
5 <script src="../resources/testcommon.js"></script>
6 <body>
7 <div id="log"></div>
8 <script>
9 'use strict';
10
11 async_test(function(t) {
12   var div = addDiv(t);
13   div.style.transform = 'translate(0px)';
14   getComputedStyle(div).transform;
15   div.style.transition = 'transform 100s';
16   div.style.transform = 'translate(10px)';
17   getComputedStyle(div).transform;
18
19   var animation = div.getAnimations()[0];
20   var originalReadyPromise = animation.ready;
21
22   animation.ready.then(t.step_func(function() {
23     assert_equals(animation.ready, originalReadyPromise,
24                   'Ready promise is the same object when playing completes');
25     animation.pause();
26     assert_not_equals(animation.ready, originalReadyPromise,
27                       'Ready promise object identity differs when pausing');
28     t.done();
29   }));
30 }, 'A new ready promise is created each time play() is called'
31    + ' the animation property');
32
33 async_test(function(t) {
34   var div = addDiv(t);
35
36   // Set up pending transition
37   div.style.transform = 'translate(0px)';
38   getComputedStyle(div).transform;
39   div.style.transition = 'transform 100s';
40   div.style.transform = 'translate(10px)';
41   getComputedStyle(div).transform;
42
43   var animation = div.getAnimations()[0];
44   assert_true(animation.pending, 'Animation is initially pending');
45
46   // Set up listeners on ready promise
47   animation.ready.then(t.step_func(function() {
48     assert_unreached('ready promise was fulfilled');
49   })).catch(t.step_func(function(err) {
50     assert_equals(err.name, 'AbortError',
51                   'ready promise is rejected with AbortError');
52     assert_equals(animation.playState, 'idle',
53                   'Animation is idle after transition was cancelled');
54   })).then(t.step_func(function() {
55     t.done();
56   }));
57
58   // Now remove transform from transition-property and flush styles
59   div.style.transitionProperty = 'none';
60   getComputedStyle(div).transitionProperty;
61
62 }, 'ready promise is rejected when a transition is cancelled by updating'
63    + ' transition-property');
64
65 async_test(function(t) {
66   var div = addDiv(t);
67
68   // Set up pending transition
69   div.style.marginLeft = '0px';
70   getComputedStyle(div).marginLeft;
71   div.style.transition = 'margin-left 100s';
72   div.style.marginLeft = '100px';
73   getComputedStyle(div).marginLeft;
74
75   var animation = div.getAnimations()[0];
76   assert_true(animation.pending, 'Animation is initially pending');
77
78   // Set up listeners on ready promise
79   animation.ready.then(t.step_func(function() {
80     assert_unreached('ready promise was fulfilled');
81   })).catch(t.step_func(function(err) {
82     assert_equals(err.name, 'AbortError',
83                   'ready promise is rejected with AbortError');
84     assert_equals(animation.playState, 'idle',
85                   'Animation is idle after transition was cancelled');
86   })).then(t.step_func(function() {
87     t.done();
88   }));
89
90   // Now update the transition to animate to something not-interpolable
91   div.style.marginLeft = 'auto';
92   getComputedStyle(div).marginLeft;
93
94 }, 'ready promise is rejected when a transition is cancelled by changing'
95    + ' the transition property to something not interpolable');
96
97 </script>
98 </body>