[Web Animations] Update WPT tests and move them to imported/w3c/web-platform-tests
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / web-animations / timing-model / animations / canceling-an-animation.html
@@ -2,16 +2,16 @@
 <meta charset=utf-8>
 <title>Canceling an animation</title>
 <link rel="help"
-    href="https://w3c.github.io/web-animations/#canceling-an-animation-section">
+    href="https://drafts.csswg.org/web-animations/#canceling-an-animation-section">
 <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";
+'use strict';
 
-promise_test(function(t) {
+promise_test(t => {
   const animation = createDiv(t).animate(null, 100 * MS_PER_SEC);
   const retPromise = animation.ready.then(() => {
     assert_unreached('ready promise was fulfilled');
@@ -26,12 +26,12 @@ promise_test(function(t) {
 }, 'A play-pending ready promise should be rejected when the animation is'
    + ' canceled');
 
-promise_test(function(t) {
+promise_test(t => {
   const animation = createDiv(t).animate(null, 100 * MS_PER_SEC);
   return animation.ready.then(() => {
     animation.pause();
     // Set up listeners on pause-pending ready promise
-    var retPromise = animation.ready.then(function() {
+    const retPromise = animation.ready.then(() => {
       assert_unreached('ready promise was fulfilled');
     }).catch(err => {
       assert_equals(err.name, 'AbortError',
@@ -43,20 +43,58 @@ promise_test(function(t) {
 }, 'A pause-pending ready promise should be rejected when the animation is'
    + ' canceled');
 
-promise_test(function(t) {
+promise_test(t => {
   const animation = createDiv(t).animate(null);
   animation.cancel();
-  return animation.ready.then(function(p) {
+  return animation.ready.then(p => {
     assert_equals(p, animation);
   });
 }, 'When an animation is canceled, it should create a resolved Promise');
 
-test(function(t) {
+test(t => {
   const animation = createDiv(t).animate(null);
   const promise = animation.ready;
   animation.cancel();
   assert_not_equals(animation.ready, promise);
 }, 'The ready promise should be replaced when the animation is canceled');
 
+promise_test(t => {
+  const animation = new Animation(
+    new KeyframeEffect(null, null, { duration: 1000 }),
+    null
+  );
+  assert_equals(animation.playState, 'idle',
+                'The animation should be initially idle');
+
+  animation.finished.then(t.step_func(() => {
+    assert_unreached('Finished promise should not resolve');
+  }), t.step_func(() => {
+    assert_unreached('Finished promise should not reject');
+  }));
+
+  animation.cancel();
+
+  return waitForAnimationFrames(3);
+}, 'The finished promise should NOT be rejected if the animation is already'
+   + ' idle');
+
+promise_test(t => {
+  const animation = new Animation(
+    new KeyframeEffect(null, null, { duration: 1000 }),
+    null
+  );
+  assert_equals(animation.playState, 'idle',
+                'The animation should be initially idle');
+
+  animation.oncancel = t.step_func(() => {
+    assert_unreached('Cancel event should not be fired');
+  });
+
+  animation.cancel();
+
+  return waitForAnimationFrames(3);
+}, 'The cancel event should NOT be fired if the animation is already'
+   + ' idle');
+
 </script>
 </body>