Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(790)

Unified Diff: pkg/polymer/lib/elements/web-animations-js/test/testcases/test-events.html

Issue 175443005: [polymer] import all elements (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: updated from bower Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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>

Powered by Google App Engine
This is Rietveld 408576698