// Copyright 2011 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. goog.provide('goog.fx.AnimationQueueTest'); goog.setTestOnly('goog.fx.AnimationQueueTest'); goog.require('goog.events'); goog.require('goog.fx.Animation'); goog.require('goog.fx.AnimationParallelQueue'); goog.require('goog.fx.AnimationSerialQueue'); goog.require('goog.fx.Transition'); goog.require('goog.fx.anim'); goog.require('goog.testing.MockClock'); goog.require('goog.testing.jsunit'); var clock; function setUpPage() { clock = new goog.testing.MockClock(true); goog.fx.anim.setAnimationWindow(null); } function tearDownPage() { clock.dispose(); } function testParallelEvents() { var anim = new goog.fx.AnimationParallelQueue(); anim.add(new goog.fx.Animation([0], [100], 200)); anim.add(new goog.fx.Animation([0], [100], 400)); anim.add(new goog.fx.Animation([0], [100], 600)); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isStopped()); var playEvents = 0, beginEvents = 0, resumeEvents = 0, pauseEvents = 0; var endEvents = 0, stopEvents = 0, finishEvents = 0; goog.events.listen( anim, goog.fx.Transition.EventType.PLAY, function() { ++playEvents; }); goog.events.listen( anim, goog.fx.Transition.EventType.BEGIN, function() { ++beginEvents; }); goog.events.listen(anim, goog.fx.Transition.EventType.RESUME, function() { ++resumeEvents; }); goog.events.listen( anim, goog.fx.Transition.EventType.PAUSE, function() { ++pauseEvents; }); goog.events.listen( anim, goog.fx.Transition.EventType.END, function() { ++endEvents; }); goog.events.listen( anim, goog.fx.Transition.EventType.STOP, function() { ++stopEvents; }); goog.events.listen(anim, goog.fx.Transition.EventType.FINISH, function() { ++finishEvents; }); // PLAY, BEGIN anim.play(); // No queue events. clock.tick(100); // PAUSE anim.pause(); // No queue events clock.tick(200); // PLAY, RESUME anim.play(); // No queue events. clock.tick(400); // END, STOP anim.stop(); // PLAY, BEGIN anim.play(); // No queue events. clock.tick(400); // END, FINISH clock.tick(200); // Make sure the event counts are right. assertEquals(3, playEvents); assertEquals(2, beginEvents); assertEquals(1, resumeEvents); assertEquals(1, pauseEvents); assertEquals(2, endEvents); assertEquals(1, stopEvents); assertEquals(1, finishEvents); } function testSerialEvents() { var anim = new goog.fx.AnimationSerialQueue(); anim.add(new goog.fx.Animation([0], [100], 100)); anim.add(new goog.fx.Animation([0], [100], 200)); anim.add(new goog.fx.Animation([0], [100], 300)); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isStopped()); var playEvents = 0, beginEvents = 0, resumeEvents = 0, pauseEvents = 0; var endEvents = 0, stopEvents = 0, finishEvents = 0; goog.events.listen( anim, goog.fx.Transition.EventType.PLAY, function() { ++playEvents; }); goog.events.listen( anim, goog.fx.Transition.EventType.BEGIN, function() { ++beginEvents; }); goog.events.listen(anim, goog.fx.Transition.EventType.RESUME, function() { ++resumeEvents; }); goog.events.listen( anim, goog.fx.Transition.EventType.PAUSE, function() { ++pauseEvents; }); goog.events.listen( anim, goog.fx.Transition.EventType.END, function() { ++endEvents; }); goog.events.listen( anim, goog.fx.Transition.EventType.STOP, function() { ++stopEvents; }); goog.events.listen(anim, goog.fx.Transition.EventType.FINISH, function() { ++finishEvents; }); // PLAY, BEGIN anim.play(); // No queue events. clock.tick(100); // PAUSE anim.pause(); // No queue events clock.tick(200); // PLAY, RESUME anim.play(); // No queue events. clock.tick(400); // END, STOP anim.stop(); // PLAY, BEGIN anim.play(true); // No queue events. clock.tick(400); // END, FINISH clock.tick(200); // Make sure the event counts are right. assertEquals(3, playEvents); assertEquals(2, beginEvents); assertEquals(1, resumeEvents); assertEquals(1, pauseEvents); assertEquals(2, endEvents); assertEquals(1, stopEvents); assertEquals(1, finishEvents); } function testParallelPause() { var anim = new goog.fx.AnimationParallelQueue(); anim.add(new goog.fx.Animation([0], [100], 100)); anim.add(new goog.fx.Animation([0], [100], 200)); anim.add(new goog.fx.Animation([0], [100], 300)); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isStopped()); anim.play(); assertTrue(anim.queue[0].isPlaying()); assertTrue(anim.queue[1].isPlaying()); assertTrue(anim.queue[2].isPlaying()); assertTrue(anim.isPlaying()); clock.tick(100); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isPlaying()); assertTrue(anim.queue[2].isPlaying()); assertTrue(anim.isPlaying()); anim.pause(); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isPaused()); assertTrue(anim.queue[2].isPaused()); assertTrue(anim.isPaused()); clock.tick(200); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isPaused()); assertTrue(anim.queue[2].isPaused()); assertTrue(anim.isPaused()); anim.play(); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isPlaying()); assertTrue(anim.queue[2].isPlaying()); assertTrue(anim.isPlaying()); clock.tick(100); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isPlaying()); assertTrue(anim.isPlaying()); anim.pause(); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isPaused()); assertTrue(anim.isPaused()); clock.tick(200); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isPaused()); assertTrue(anim.isPaused()); anim.play(); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isPlaying()); assertTrue(anim.isPlaying()); clock.tick(100); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isStopped()); } function testSerialPause() { var anim = new goog.fx.AnimationSerialQueue(); anim.add(new goog.fx.Animation([0], [100], 100)); anim.add(new goog.fx.Animation([0], [100], 200)); anim.add(new goog.fx.Animation([0], [100], 300)); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isStopped()); anim.play(); assertTrue(anim.queue[0].isPlaying()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isPlaying()); clock.tick(100); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isPlaying()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isPlaying()); anim.pause(); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isPaused()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isPaused()); clock.tick(400); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isPaused()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isPaused()); anim.play(); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isPlaying()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isPlaying()); clock.tick(200); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isPlaying()); assertTrue(anim.isPlaying()); anim.pause(); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isPaused()); assertTrue(anim.isPaused()); clock.tick(300); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isPaused()); assertTrue(anim.isPaused()); anim.play(); clock.tick(300); assertTrue(anim.queue[0].isStopped()); assertTrue(anim.queue[1].isStopped()); assertTrue(anim.queue[2].isStopped()); assertTrue(anim.isStopped()); }