Bug 1178662 part 1 - Add tests for setting the timeline of an animation r=mantaroh
authorBrian Birtles <birtles@gmail.com>
Wed, 25 May 2016 13:34:41 +0900
changeset 338235 85f5fe4d8e3058ece7d8d17a9dda9abc1b77a101
parent 338234 72ea7eafc5e5887724e201ce4f0e71611026a1fa
child 338236 8e3f2c7b9039cf04193f0d3682b2c64eac0bb046
push id6249
push userjlund@mozilla.com
push dateMon, 01 Aug 2016 13:59:36 +0000
treeherdermozilla-beta@bad9d4f5bf7e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmantaroh
bugs1178662
milestone49.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1178662 part 1 - Add tests for setting the timeline of an animation r=mantaroh MozReview-Commit-ID: 1xdKJONyFJV
testing/web-platform/meta/MANIFEST.json
testing/web-platform/meta/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html.ini
testing/web-platform/tests/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -36030,16 +36030,22 @@
             "url": "/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback.html"
           }
         ],
         "web-animations/timing-model/animations/current-time.html": [
           {
             "path": "web-animations/timing-model/animations/current-time.html",
             "url": "/web-animations/timing-model/animations/current-time.html"
           }
+        ],
+        "web-animations/timing-model/animations/set-the-timeline-of-an-animation.html": [
+          {
+            "path": "web-animations/timing-model/animations/set-the-timeline-of-an-animation.html",
+            "url": "/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html"
+          }
         ]
       }
     },
     "reftest_nodes": {}
   },
   "reftest_nodes": {
     "2dcontext/building-paths/canvas_complexshapes_arcto_001.htm": [
       {
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html.ini
@@ -0,0 +1,73 @@
+[set-the-timeline-of-an-animation.html]
+  type: testharness
+  [After setting timeline on paused animation it is still paused]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After setting timeline on animation paused outside active interval it is still paused]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After setting timeline on an idle animation without a start time it is still idle]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After setting timeline on an idle animation with a start time it is running]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After setting timeline on an idle animation with a sufficiently ancient start time it is finished]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After setting timeline on a play-pending animation it is still pending]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After setting timeline on a play-pending animation it begins playing after pending]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After setting timeline on a pause-pending animation it is still pending]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After setting timeline on a pause-pending animation it becomes paused after pending]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing timeline on paused animation it is still paused]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing timeline on finished animation it is idle]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing timeline on running animation it is idle]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing timeline on idle animation it is still idle]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing timeline on play-pending animation it is still pending]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing and re-setting timeline on play-pending animation it begins to play]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing timeline on a pause-pending animation it is still pending]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing and re-setting timeline on a pause-pending animation it becomes paused]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
+
+  [After clearing and re-setting timeline on an animation in the middle of an aborted pause, it continues playing using the same start time]
+    expected: FAIL
+    bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1178662
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html
@@ -0,0 +1,276 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Setting the timeline tests</title>
+<link rel="help" href="https://w3c.github.io/web-animations/#setting-the-timeline">
+<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';
+
+// ---------------------------------------------------------------------
+//
+// Tests from no timeline to timeline
+//
+// ---------------------------------------------------------------------
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  animation.currentTime = 50 * MS_PER_SEC;
+  assert_equals(animation.playState, 'paused');
+
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'paused');
+  assert_times_equal(animation.currentTime, 50 * MS_PER_SEC);
+}, 'After setting timeline on paused animation it is still paused');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  animation.currentTime = 200 * MS_PER_SEC;
+  assert_equals(animation.playState, 'paused');
+
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'paused');
+  assert_times_equal(animation.currentTime, 200 * MS_PER_SEC);
+}, 'After setting timeline on animation paused outside active interval'
+   + ' it is still paused');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  assert_equals(animation.playState, 'idle');
+
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'idle');
+}, 'After setting timeline on an idle animation without a start time'
+   + ' it is still idle');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  animation.startTime = document.timeline.currentTime;
+  assert_equals(animation.playState, 'idle');
+
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'running');
+}, 'After setting timeline on an idle animation with a start time'
+   + ' it is running');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  animation.startTime = document.timeline.currentTime - 200 * MS_PER_SEC;
+  assert_equals(animation.playState, 'idle');
+
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'finished');
+}, 'After setting timeline on an idle animation with a sufficiently ancient'
+   + ' start time it is finished');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  animation.play();
+  assert_equals(animation.playState, 'pending');
+
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'pending');
+}, 'After setting timeline on a play-pending animation it is still pending');
+
+promise_test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  animation.play();
+  assert_equals(animation.playState, 'pending');
+
+  animation.timeline = document.timeline;
+
+  return animation.ready.then(function() {
+    assert_equals(animation.playState, 'running');
+  });
+}, 'After setting timeline on a play-pending animation it begins playing'
+   + ' after pending');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  animation.startTime = document.timeline.currentTime;
+  animation.pause();
+  animation.timeline = null;
+  assert_equals(animation.playState, 'pending');
+
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'pending');
+}, 'After setting timeline on a pause-pending animation it is still pending');
+
+promise_test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  null);
+  animation.startTime = document.timeline.currentTime;
+  animation.pause();
+  animation.timeline = null;
+  assert_equals(animation.playState, 'pending');
+
+  animation.timeline = document.timeline;
+
+  return animation.ready.then(function() {
+    assert_equals(animation.playState, 'paused');
+  });
+}, 'After setting timeline on a pause-pending animation it becomes paused'
+   + ' after pending');
+
+// ---------------------------------------------------------------------
+//
+// Tests from timeline to no timeline
+//
+// ---------------------------------------------------------------------
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  document.timeline);
+  animation.currentTime = 50 * MS_PER_SEC;
+  assert_equals(animation.playState, 'paused');
+
+  animation.timeline = null;
+
+  assert_equals(animation.playState, 'paused');
+  assert_times_equal(animation.currentTime, 50 * MS_PER_SEC);
+}, 'After clearing timeline on paused animation it is still paused');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  document.timeline);
+  var initialStartTime = document.timeline.currentTime - 200 * MS_PER_SEC;
+  animation.startTime = initialStartTime;
+  assert_equals(animation.playState, 'finished');
+
+  animation.timeline = null;
+
+  assert_equals(animation.playState, 'idle');
+  assert_times_equal(animation.startTime, initialStartTime);
+}, 'After clearing timeline on finished animation it is idle');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  document.timeline);
+  var initialStartTime = document.timeline.currentTime - 50 * MS_PER_SEC;
+  animation.startTime = initialStartTime;
+  assert_equals(animation.playState, 'running');
+
+  animation.timeline = null;
+
+  assert_equals(animation.playState, 'idle');
+  assert_times_equal(animation.startTime, initialStartTime);
+}, 'After clearing timeline on running animation it is idle');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  document.timeline);
+  assert_equals(animation.playState, 'idle');
+
+  animation.timeline = null;
+
+  assert_equals(animation.playState, 'idle');
+  assert_equals(animation.startTime, null);
+}, 'After clearing timeline on idle animation it is still idle');
+
+test(function(t) {
+  var animation = createDiv(t).animate(null, 100 * MS_PER_SEC);
+  assert_equals(animation.playState, 'pending');
+
+  animation.timeline = null;
+
+  assert_equals(animation.playState, 'pending');
+}, 'After clearing timeline on play-pending animation it is still pending');
+
+promise_test(function(t) {
+  var animation = createDiv(t).animate(null, 100 * MS_PER_SEC);
+  assert_equals(animation.playState, 'pending');
+
+  animation.timeline = null;
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'pending');
+  return animation.ready.then(function() {
+    assert_equals(animation.playState, 'running');
+  });
+}, 'After clearing and re-setting timeline on play-pending animation it'
+   + ' begins to play');
+
+test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  document.timeline);
+  animation.startTime = document.timeline.currentTime;
+  animation.pause();
+  assert_equals(animation.playState, 'pending');
+
+  animation.timeline = null;
+
+  assert_equals(animation.playState, 'pending');
+}, 'After clearing timeline on a pause-pending animation it is still pending');
+
+promise_test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  document.timeline);
+  animation.startTime = document.timeline.currentTime;
+  animation.pause();
+  assert_equals(animation.playState, 'pending');
+
+  animation.timeline = null;
+  animation.timeline = document.timeline;
+
+  assert_equals(animation.playState, 'pending');
+  return animation.ready.then(function() {
+    assert_equals(animation.playState, 'paused');
+  });
+}, 'After clearing and re-setting timeline on a pause-pending animation it'
+   + ' becomes paused');
+
+promise_test(function(t) {
+  var animation =
+    new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC),
+                  document.timeline);
+  var initialStartTime = document.timeline.currentTime - 50 * MS_PER_SEC;
+  animation.startTime = initialStartTime;
+  animation.pause();
+  animation.play();
+
+  animation.timeline = null;
+  animation.timeline = document.timeline;
+  assert_equals(animation.playState, 'pending');
+
+  return animation.ready.then(function() {
+    assert_equals(animation.playState, 'running');
+    assert_times_equal(animation.startTime, initialStartTime);
+  });
+}, 'After clearing and re-setting timeline on an animation in the middle of'
+   + ' an aborted pause, it continues playing using the same start time');
+
+</script>
+</body>