| Index: pkg/polymer/lib/elements/web-animations-js/test/testcases/test-events.html
|
| diff --git a/pkg/polymer/lib/elements/web-animations-js/test/testcases/test-events.html b/pkg/polymer/lib/elements/web-animations-js/test/testcases/test-events.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..197b0154ef6c908c2b1b2201c132c002ac6248c7
|
| --- /dev/null
|
| +++ b/pkg/polymer/lib/elements/web-animations-js/test/testcases/test-events.html
|
| @@ -0,0 +1,201 @@
|
| +<!--
|
| +Copyright 2013 Google Inc. 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.
|
| +-->
|
| +
|
| +<!DOCTYPE html><meta charset="UTF-8">
|
| +<style>
|
| +div.anim {
|
| + position: relative;
|
| + left: 0px;
|
| + width: 100px;
|
| + height: 100px;
|
| + background-color: green;
|
| +}
|
| +</style>
|
| +<div class='anim'></div>
|
| +<script src="../bootstrap.js"></script>
|
| +<script>
|
| +"use strict";
|
| +var target = document.querySelector('.anim');
|
| +
|
| +function testTiming(animation, expectedEvents, testName) {
|
| + var eventList = [];
|
| +
|
| + function registerAnimationEvents(a) {
|
| + a.onstart = function(e) { eventList.push(e); }
|
| + a.oniteration = function(e) { eventList.push(e); }
|
| + a.onend = function(e) { eventList.push(e); }
|
| + if (a.children) {
|
| + [].forEach.call(a.children, registerAnimationEvents);
|
| + }
|
| + }
|
| +
|
| + registerAnimationEvents(animation);
|
| + var player = document.timeline.play(animation);
|
| +
|
| + timing_test(function() {
|
| + at(15, function() { assertEventsMatch(animation, eventList, expectedEvents); }, testName);
|
| + }, testName);
|
| +}
|
| +
|
| +for (var i = 0; i < 13; i += 3) {
|
| + at(i, function() { });
|
| +}
|
| +
|
| +function assertEventsMatch(anim, events, expectations) {
|
| + if (!expectations) {
|
| + return;
|
| + }
|
| + for (var i = 0; i < expectations.length; i++) {
|
| + expectations[i].target = expectations[i].target(anim);
|
| + for (var key in expectations[i]) {
|
| + if (typeof expectations[i][key] == "number") {
|
| + assert_approx_equals(events[i][key], expectations[i][key], 1e-6, i + ': ' + key);
|
| + } else {
|
| + assert_equals(events[i][key], expectations[i][key], i + ': ' + key);
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +function EventExpectation(type, local, global, iteration, targetFun) {
|
| + this.type = type;
|
| + this.localTime = local;
|
| + this.timelineTime = global;
|
| + this.iterationIndex = iteration;
|
| + this.target = targetFun;
|
| +};
|
| +
|
| +function me(anim) { return anim; };
|
| +function child() {
|
| + var args = arguments;
|
| + return function(anim) {
|
| + for (var i = 0; i < args.length; i++) {
|
| + anim = anim.children[args[i]];
|
| + }
|
| + return anim;
|
| + };
|
| +};
|
| +
|
| +function event(type, local, global, iteration, targetFun) {
|
| + targetFun = targetFun || me;
|
| + return new EventExpectation(type, local, global, iteration, targetFun);
|
| +}
|
| +
|
| +function iterList(localStart, globalStart, iterStart, delta, count, targetFun) {
|
| + var expectations = [];
|
| + targetFun = targetFun || me;
|
| + for (var i = 0; i < count; i++) {
|
| + expectations.push(new EventExpectation('iteration', localStart,
|
| + globalStart, iterStart, targetFun));
|
| + localStart += delta;
|
| + globalStart += delta;
|
| + iterStart ++;
|
| + }
|
| + return expectations;
|
| +}
|
| +
|
| +function simple(timing) {
|
| + return new Animation(target, {left: '100px'}, timing);
|
| +}
|
| +
|
| +testTiming(simple(10),
|
| + [event('start', 0, 0, 0), event('end', 10, 10, 0)],
|
| + "simple animation");
|
| +testTiming(simple({duration: 2, iterations: 5}),
|
| + [event('start', 0, 0, 0)].concat(iterList(2, 2, 1, 2, 4))
|
| + .concat([event('end', 10, 10, 4)]),
|
| + "simple iterations");
|
| +testTiming(simple({duration: 4, iterationStart: 0.5,
|
| + iterations: 2.5}),
|
| + [event('start', 0, 0, 0)].concat(iterList(2, 2, 1, 4, 2))
|
| + .concat([event('end', 10, 10, 2)]),
|
| + "offset iterations (coincident ends)");
|
| +testTiming(simple({duration: 4, iterationStart: 0.3,
|
| + iterations: 2.5}),
|
| + [event('start', 0, 0, 0)].concat(iterList(2.8, 2.8, 1, 4, 2))
|
| + .concat([event('end', 10, 10, 2)]),
|
| + "offset iterations (one complete iteration)");
|
| +testTiming(simple({duration: 4, iterationStart: 0.75,
|
| + iterations: 2.5}),
|
| + [event('start', 0, 0, 0)].concat(iterList(1, 1, 1, 4, 3))
|
| + .concat([event('end', 10, 10, 3)]),
|
| + "offset iterations (two complete iterations)");
|
| +testTiming(simple({duration: 5, delay: 5}),
|
| + [event('start', 5, 5, 0), event('end', 10, 10, 0)],
|
| + "delayed start");
|
| +
|
| +testTiming(new ParGroup([simple(10)]),
|
| + [event('start', 0, 0, 0), event('start', 0, 0, 0, child(0)),
|
| + event('end', 10, 10, 0, child(0)), event('end', 10, 10, 0)],
|
| + "simple par group");
|
| +
|
| +testTiming(new ParGroup([simple(10), simple(10)]),
|
| + [event('start', 0, 0, 0), event('start', 0, 0, 0, child(0)),
|
| + event('start', 0, 0, 0, child(1)), event('end', 10, 10, 0, child(0)),
|
| + event('end', 10, 10, 0, child(1)), event('end', 10, 10, 0)],
|
| + "par group with multiple children");
|
| +testTiming(new SeqGroup([simple(5), simple(5)]),
|
| + [event('start', 0, 0, 0), event('start', 0, 0, 0, child(0)),
|
| + event('end', 5, 5, 0, child(0)), event('start', 0, 5, 0, child(1)),
|
| + event('end', 5, 10, 0, child(1)), event('end', 10, 10, 0)],
|
| + "seq group with multiple children");
|
| +
|
| +testTiming(new ParGroup([simple(5)], {duration: 5,
|
| + iterations: 2}),
|
| + [event('start', 0, 0, 0), event('start', 0, 0, 0, child(0)),
|
| + event('end', 5, 5, 0, child(0)), event('iteration', 5, 5, 1),
|
| + event('start', 0, 5, 0, child(0)), event('end', 5, 10, 0, child(0)),
|
| + event('end', 10, 10, 1)],
|
| + "par group with multiple iterations");
|
| +
|
| +// child at (0.5, 2.5, 4.5)
|
| +// parent at ((-3), 2, 7)
|
| +// result: child iterations at 1.5 | 2.5 4.5 6.5 | 7.5 9.5
|
| +testTiming(new ParGroup([simple({duration: 2, iterationStart: 0.75,
|
| + iterations: 2.5})],
|
| + {iterationStart: 0.6, iterations: 2}),
|
| + [event('start', 0, 0, 0), event('iteration', 4.5, 1.5, 3, child(0)),
|
| + event('end', 5, 2, 3, child(0)), event('iteration', 2, 2, 1),
|
| + event('start', 0, 2, 0, child(0))].
|
| + concat(iterList(0.5, 2.5, 1, 2, 3, child(0))).
|
| + concat([event('end', 5, 7, 3, child(0)), event('iteration', 7, 7, 2),
|
| + event('start', 0, 7, 0, child(0))]).
|
| + concat(iterList(0.5, 7.5, 1, 2, 2, child(0))).
|
| + concat([event('end', 10, 10, 2)]),
|
| + "nested offset iterations");
|
| +
|
| +testTiming(simple({duration: 10, playbackRate: 2}),
|
| + [event('start', 0, 0, 0), event('end', 5, 5, 0)],
|
| + "simple animation with non-unit playbackRate");
|
| +
|
| +testTiming(new ParGroup([simple({duration: 10, playbackRate: 4})],
|
| + {playbackRate: 0.5}),
|
| + [event('start', 0, 0, 0), event('start', 0, 0, 0, child(0)),
|
| + event('end', 2.5, 5, 0, child(0)), event('end', 5, 5, 0)],
|
| + "nested non-unit playbackRates");
|
| +
|
| +testTiming(new ParGroup([simple({iterations: 2, duration: 2.5,
|
| + playbackRate: 4})],
|
| + {playbackRate: 0.5, iterations: 2}),
|
| + [event('start', 0, 0, 0), event('start', 0, 0, 0, child(0)),
|
| + event('iteration', 0.625, 1.25, 1, child(0)),
|
| + event('end', 1.25, 2.5, 1, child(0)), event('iteration', 2.5, 2.5, 1),
|
| + event('start', 0, 2.5, 0, child(0)),
|
| + event('iteration', 0.625, 3.75, 1, child(0)),
|
| + event('end', 1.25, 5, 1, child(0)), event('end', 5, 5, 1)],
|
| + "nested non-unit playbackRates with iterations");
|
| +
|
| +</script>
|
|
|