| <!doctype html><!-- webkit-test-runner [ enableCSSAnimationsAndCSSTransitionsBackedByWebAnimations=true ] --> |
| <meta charset=utf-8> |
| <script src="../../../resources/testharness.js"></script> |
| <script src="../../../resources/testharnessreport.js"></script> |
| <script src="../resources/testcommon.js"></script> |
| <style> |
| |
| .animated-div { |
| margin-left: 100px; |
| } |
| |
| </style> |
| <body> |
| <div id="log"></div> |
| <script> |
| |
| 'use strict'; |
| |
| // -------------------- |
| // delay |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().delay, 0, |
| 'Initial value of delay'); |
| }, 'delay of a new tranisition'); |
| |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().delay, 10000, |
| 'Initial value of delay'); |
| }, 'Positive delay of a new transition'); |
| |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s -5s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().delay, -5000, |
| 'Initial value of delay'); |
| }, 'Negative delay of a new transition'); |
| |
| |
| // -------------------- |
| // endDelay |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().endDelay, 0, |
| 'Initial value of endDelay'); |
| }, 'endDelay of a new transition'); |
| |
| |
| // -------------------- |
| // fill |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().fill, 'backwards', |
| 'Fill backwards'); |
| }, 'fill of a new transition'); |
| |
| |
| // -------------------- |
| // iterationStart |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().iterationStart, 0, |
| 'Initial value of iterationStart'); |
| }, 'iterationStart of a new transition'); |
| |
| |
| // -------------------- |
| // iterations |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().iterations, 1, |
| 'Initial value of iterations'); |
| }, 'iterations of a new transition'); |
| |
| |
| // -------------------- |
| // duration |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().duration, 10000, |
| 'Initial value of duration'); |
| }, 'duration of a new transition'); |
| |
| |
| // -------------------- |
| // direction |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().direction, 'normal', |
| 'Initial value of direction'); |
| }, 'direction of a new transition'); |
| |
| |
| // -------------------- |
| // easing |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().easing, 'linear', |
| 'Initial value of easing'); |
| }, 'easing of a new transition'); |
| |
| |
| // ------------------------------ |
| // endTime |
| // = max(start delay + active duration + end delay, 0) |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 100s -5s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| var answer = 100000 - 5000; // ms |
| assert_equals(effect.getComputedTiming().endTime, answer, |
| 'Initial value of endTime'); |
| }, 'endTime of a new transition'); |
| |
| |
| // -------------------- |
| // activeDuration |
| // = iteration duration * iteration count(==1) |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 100s -5s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().activeDuration, 100000, |
| 'Initial value of activeDuration'); |
| }, 'activeDuration of a new transition'); |
| |
| |
| // -------------------- |
| // localTime |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 100s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().localTime, 0, |
| 'Initial value of localTime'); |
| }, 'localTime of a new transition'); |
| |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 100s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var anim = div.getAnimations()[0]; |
| anim.currentTime = 5000; |
| assert_equals(anim.effect.getComputedTiming().localTime, anim.currentTime, |
| 'current localTime after setting currentTime'); |
| }, 'localTime is always equal to currentTime'); |
| |
| async_test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 100s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var anim = div.getAnimations()[0]; |
| anim.playbackRate = 2; // 2 times faster |
| |
| anim.ready.then(t.step_func(function() { |
| assert_equals(anim.effect.getComputedTiming().localTime, anim.currentTime, |
| 'localTime is equal to currentTime'); |
| return waitForFrame(); |
| })).then(t.step_func_done(function() { |
| assert_equals(anim.effect.getComputedTiming().localTime, anim.currentTime, |
| 'localTime is equal to currentTime'); |
| })); |
| }, 'localTime reflects playbackRate immediately'); |
| |
| |
| // -------------------- |
| // progress |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10.5s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().progress, 0.0, |
| 'Initial value of progress'); |
| }, 'progress of a new transition'); |
| |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10.5s 2s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().progress, 0.0, |
| 'Initial value of progress'); |
| }, 'progress of a new transition with positive delay in before phase'); |
| |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10.5s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var anim = div.getAnimations()[0]; |
| anim.finish() |
| assert_equals(anim.effect.getComputedTiming().progress, null, |
| 'finished progress'); |
| }, 'progress of a finished transition'); |
| |
| |
| // -------------------- |
| // currentIteration |
| // -------------------- |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().currentIteration, 0, |
| 'Initial value of currentIteration'); |
| }, 'currentIteration of a new transition'); |
| |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s 2s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var effect = div.getAnimations()[0].effect; |
| assert_equals(effect.getComputedTiming().currentIteration, 0, |
| 'Initial value of currentIteration'); |
| }, 'currentIteration of a new transition with positive delay in before phase'); |
| |
| test(function(t) { |
| var div = addDiv(t, {'class': 'animated-div'}); |
| div.style.transition = 'margin-left 10s'; |
| flushComputedStyle(div); |
| div.style.marginLeft = '10px'; |
| |
| var anim = div.getAnimations()[0]; |
| anim.finish(); |
| assert_equals(anim.effect.getComputedTiming().currentIteration, null, |
| 'finished currentIteration'); |
| }, 'currentIteration of a finished transition'); |
| |
| </script> |
| </body> |