| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>AnimationEffectTiming.endDelay</title> |
| <link rel="help" href="https://drafts.csswg.org/web-animations/#dom-animationeffecttiming-enddelay"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="../../testcommon.js"></script> |
| <body> |
| <div id="log"></div> |
| <script> |
| 'use strict'; |
| |
| test(t => { |
| const anim = createDiv(t).animate(null); |
| assert_equals(anim.effect.timing.endDelay, 0); |
| }, 'Has the default value 0'); |
| |
| test(t => { |
| const div = createDiv(t); |
| const anim = div.animate({ opacity: [ 0, 1 ] }, 2000); |
| anim.effect.timing.endDelay = 123.45; |
| assert_times_equal(anim.effect.timing.endDelay, 123.45, |
| 'set endDelay 123.45'); |
| assert_times_equal(anim.effect.getComputedTiming().endDelay, 123.45, |
| 'getComputedTiming() after set endDelay 123.45'); |
| }, 'Can be set to a positive number'); |
| |
| test(t => { |
| const div = createDiv(t); |
| const anim = div.animate({ opacity: [ 0, 1 ] }, 2000); |
| anim.effect.timing.endDelay = -1000; |
| assert_equals(anim.effect.timing.endDelay, -1000, 'set endDelay -1000'); |
| assert_equals(anim.effect.getComputedTiming().endDelay, -1000, |
| 'getComputedTiming() after set endDelay -1000'); |
| }, 'Can be set to a negative number'); |
| |
| test(t => { |
| const div = createDiv(t); |
| const anim = div.animate({ opacity: [ 0, 1 ] }, 2000); |
| assert_throws({ name: 'TypeError' }, () => { |
| anim.effect.timing.endDelay = Infinity; |
| }, 'we can not assign Infinity to timing.endDelay'); |
| }, 'Throws when setting infinity'); |
| |
| test(t => { |
| const div = createDiv(t); |
| const anim = div.animate({ opacity: [ 0, 1 ] }, 2000); |
| assert_throws({ name: 'TypeError' }, () => { |
| anim.effect.timing.endDelay = -Infinity; |
| }, 'we can not assign negative Infinity to timing.endDelay'); |
| }, 'Throws when setting negative infinity'); |
| |
| async_test(t => { |
| const div = createDiv(t); |
| const anim = div.animate({ opacity: [ 0, 1 ] }, |
| { duration: 100000, endDelay: 50000 }); |
| anim.onfinish = t.step_func(event => { |
| assert_unreached('finish event should not be fired'); |
| }); |
| |
| anim.ready.then(() => { |
| anim.currentTime = 100000; |
| return waitForAnimationFrames(2); |
| }).then(t.step_func(() => { |
| t.done(); |
| })); |
| }, 'finish event is not fired at the end of the active interval when the' |
| + ' endDelay has not expired'); |
| |
| async_test(t => { |
| const div = createDiv(t); |
| const anim = div.animate({ opacity: [ 0, 1 ] }, |
| { duration: 100000, endDelay: 30000 }); |
| anim.ready.then(() => { |
| anim.currentTime = 110000; // during endDelay |
| anim.onfinish = t.step_func(event => { |
| assert_unreached('onfinish event should not be fired during endDelay'); |
| }); |
| return waitForAnimationFrames(2); |
| }).then(t.step_func(() => { |
| anim.onfinish = t.step_func(event => { |
| t.done(); |
| }); |
| anim.currentTime = 130000; // after endTime |
| })); |
| }, 'finish event is fired after the endDelay has expired'); |
| |
| </script> |
| </body> |