summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/browser/browser_animation_playPauseSeveral.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/server/tests/browser/browser_animation_playPauseSeveral.js')
-rw-r--r--devtools/server/tests/browser/browser_animation_playPauseSeveral.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/devtools/server/tests/browser/browser_animation_playPauseSeveral.js b/devtools/server/tests/browser/browser_animation_playPauseSeveral.js
new file mode 100644
index 000000000..9c52b5f57
--- /dev/null
+++ b/devtools/server/tests/browser/browser_animation_playPauseSeveral.js
@@ -0,0 +1,92 @@
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Check that the AnimationsActor can pause/play all animations at once, and
+// check that it can also pause/play a given list of animations at once.
+
+// List of selectors that match "all" animated nodes in the test page.
+// This list misses a bunch of animated nodes on purpose. Only the ones that
+// have infinite animations are listed. This is done to avoid intermittents
+// caused when finite animations are already done playing by the time the test
+// runs.
+const ALL_ANIMATED_NODES = [".simple-animation", ".multiple-animations",
+ ".delayed-animation"];
+
+add_task(function* () {
+ let {client, walker, animations} =
+ yield initAnimationsFrontForUrl(MAIN_DOMAIN + "animation.html");
+
+ info("Pause all animations in the test document");
+ yield animations.pauseAll();
+ yield checkStates(walker, animations, ALL_ANIMATED_NODES, "paused");
+
+ info("Play all animations in the test document");
+ yield animations.playAll();
+ yield checkStates(walker, animations, ALL_ANIMATED_NODES, "running");
+
+ info("Pause all animations in the test document using toggleAll");
+ yield animations.toggleAll();
+ yield checkStates(walker, animations, ALL_ANIMATED_NODES, "paused");
+
+ info("Play all animations in the test document using toggleAll");
+ yield animations.toggleAll();
+ yield checkStates(walker, animations, ALL_ANIMATED_NODES, "running");
+
+ info("Play all animations from multiple animated node using toggleSeveral");
+ let players = yield getPlayersFor(walker, animations,
+ [".multiple-animations"]);
+ is(players.length, 2, "Node has 2 animation players");
+ yield animations.toggleSeveral(players, false);
+ let state1 = yield players[0].getCurrentState();
+ is(state1.playState, "running",
+ "The playState of the first player is running");
+ let state2 = yield players[1].getCurrentState();
+ is(state2.playState, "running",
+ "The playState of the second player is running");
+
+ info("Pause one animation from a multiple animated node using toggleSeveral");
+ yield animations.toggleSeveral([players[0]], true);
+ state1 = yield players[0].getCurrentState();
+ is(state1.playState, "paused", "The playState of the first player is paused");
+ state2 = yield players[1].getCurrentState();
+ is(state2.playState, "running",
+ "The playState of the second player is running");
+
+ info("Play the same animation");
+ yield animations.toggleSeveral([players[0]], false);
+ state1 = yield players[0].getCurrentState();
+ is(state1.playState, "running",
+ "The playState of the first player is running");
+ state2 = yield players[1].getCurrentState();
+ is(state2.playState, "running",
+ "The playState of the second player is running");
+
+ yield client.close();
+ gBrowser.removeCurrentTab();
+});
+
+function* checkStates(walker, animations, selectors, playState) {
+ info("Checking the playState of all the nodes that have infinite running " +
+ "animations");
+
+ for (let selector of selectors) {
+ info("Getting the AnimationPlayerFront for node " + selector);
+ let [player] = yield getPlayersFor(walker, animations, selector);
+ yield player.ready();
+ yield checkPlayState(player, selector, playState);
+ }
+}
+
+function* getPlayersFor(walker, animations, selector) {
+ let node = yield walker.querySelector(walker.rootNode, selector);
+ return animations.getAnimationPlayersForNode(node);
+}
+
+function* checkPlayState(player, selector, expectedState) {
+ let state = yield player.getCurrentState();
+ is(state.playState, expectedState,
+ "The playState of node " + selector + " is " + expectedState);
+}