<!DOCTYPE html> <meta charset=utf-8> <title>Animation.ready</title> <link rel="help" href="https://drafts.csswg.org/web-animations/#dom-animation-ready"> <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'; promise_test(t => { const div = createDiv(t); const animation = div.animate(null, 100 * MS_PER_SEC); const originalReadyPromise = animation.ready; let pauseReadyPromise; return animation.ready.then(() => { assert_equals(animation.ready, originalReadyPromise, 'Ready promise is the same object when playing completes'); animation.pause(); assert_not_equals(animation.ready, originalReadyPromise, 'A new ready promise is created when pausing'); pauseReadyPromise = animation.ready; // Wait for the promise to fulfill since if we abort the pause the ready // promise object is reused. return animation.ready; }).then(() => { animation.play(); assert_not_equals(animation.ready, pauseReadyPromise, 'A new ready promise is created when playing'); }); }, 'A new ready promise is created when play()/pause() is called'); promise_test(t => { const div = createDiv(t); const animation = div.animate(null, 100 * MS_PER_SEC); return animation.ready.then(() => { const promiseBeforeCallingPlay = animation.ready; animation.play(); assert_equals(animation.ready, promiseBeforeCallingPlay, 'Ready promise has same object identity after redundant call' + ' to play()'); }); }, 'Redundant calls to play() do not generate new ready promise objects'); promise_test(t => { const div = createDiv(t); const animation = div.animate(null, 100 * MS_PER_SEC); return animation.ready.then(resolvedAnimation => { assert_equals(resolvedAnimation, animation, 'Object identity of Animation passed to Promise callback' + ' matches the Animation object owning the Promise'); }); }, 'The ready promise is fulfilled with its Animation'); promise_test(async t => { const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); // Ensure the ready promise is created const ready = animation.ready; window.addEventListener( 'unhandledrejection', t.unreached_func('Should not get an unhandled rejection') ); animation.cancel(); // Wait a moment to allow a chance for the event to be dispatched. await waitForAnimationFrames(2); }, 'The ready promise does not report an unhandledrejection when rejected'); </script> </body>