| <!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'; |
| |
| test(function(t) { |
| assert_equals(document.getAnimations().length, 0, |
| 'getAnimations returns an empty sequence for a document' |
| + ' with no animations'); |
| }, 'getAnimations for non-animated content'); |
| |
| test(function(t) { |
| var div = addDiv(t); |
| |
| // Add a couple of transitions |
| div.style.left = '0px'; |
| div.style.top = '0px'; |
| getComputedStyle(div).transitionProperty; |
| |
| div.style.transition = 'all 100s'; |
| div.style.left = '100px'; |
| div.style.top = '100px'; |
| assert_equals(document.getAnimations().length, 2, |
| 'getAnimations returns two running CSS Transitions'); |
| |
| // Remove both |
| div.style.transitionProperty = 'none'; |
| assert_equals(document.getAnimations().length, 0, |
| 'getAnimations returns no running CSS Transitions'); |
| }, 'getAnimations for CSS Transitions'); |
| |
| test(function(t) { |
| addStyle(t, { '.init::after': 'content: ""; width: 0px; ' + |
| 'transition: all 100s;', |
| '.init::before': 'content: ""; height: 0px; ' + |
| 'transition: all 10s;', |
| '.change::after': 'width: 100px;', |
| '.change::before': 'height: 100px;' }); |
| // create two divs with these arrangement: |
| // parent |
| // ::before, |
| // ::after |
| // | |
| // child |
| var parent = addDiv(t); |
| var child = addDiv(t); |
| parent.appendChild(child); |
| |
| parent.style.left = '0px'; |
| parent.style.transition = 'left 10s'; |
| parent.classList.add('init'); |
| child.style.left = '0px'; |
| child.style.transition = 'left 10s'; |
| flushComputedStyle(parent); |
| |
| parent.style.left = '100px'; |
| parent.classList.add('change'); |
| child.style.left = '100px'; |
| |
| var anims = document.getAnimations(); |
| assert_equals(anims.length, 4, |
| 'CSS transition on both pseudo-elements and elements ' + |
| 'are returned'); |
| assert_equals(anims[0].effect.target, parent, |
| 'The animation targeting the parent element comes first'); |
| assert_equals(anims[1].transitionProperty, 'height', |
| 'The animation targeting the ::before element comes second'); |
| assert_equals(anims[2].transitionProperty, 'width', |
| 'The animation targeting the ::after element comes third'); |
| assert_equals(anims[3].effect.target, child, |
| 'The animation targeting the child element comes last'); |
| }, 'CSS Transitions targetting (pseudo-)elements should have correct order ' + |
| 'after sorting'); |
| |
| async_test(function(t) { |
| var div = addDiv(t, { style: 'left: 0px; transition: all 50ms' }); |
| flushComputedStyle(div); |
| |
| div.style.left = '100px'; |
| var animations = div.getAnimations(); |
| assert_equals(animations.length, 1, 'Got transition'); |
| animations[0].finished.then(t.step_func(function() { |
| assert_equals(document.getAnimations().length, 0, |
| 'No animations returned'); |
| t.done(); |
| })); |
| }, 'Transitions are not returned after they have finished'); |
| |
| </script> |
| </body> |