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

Unified Diff: pkg/polymer/lib/elements/web-animations-js/test/testcases/disabled-media.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/disabled-media.html
diff --git a/pkg/polymer/lib/elements/web-animations-js/test/testcases/disabled-media.html b/pkg/polymer/lib/elements/web-animations-js/test/testcases/disabled-media.html
new file mode 100644
index 0000000000000000000000000000000000000000..f48f379458718e6311718ce80e2a3301c4f97b05
--- /dev/null
+++ b/pkg/polymer/lib/elements/web-animations-js/test/testcases/disabled-media.html
@@ -0,0 +1,439 @@
+<!--
+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.
+-->
+
+<!--
+Requires the test harness to allow tests to be added after page load. See
+https://github.com/web-animations/web-animations-js/issues/321
+-->
+
+<!DOCTYPE html><meta charset="UTF-8">
+<style type="text/css">
+video {
+ width: 100px;
+}
+</style>
+
+<!--
+Videos are taken from
+http://techslides.com/sample-webm-ogg-and-mp4-video-files-for-html5
+
+We serve them from a remote host to make sure they are served with a 206
+response code, to work around Chrome bug
+https://code.google.com/p/chromium/issues/detail?id=121765.
+-->
+<div id="videos">
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+ <video preload="auto">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.webm" type="video/webm">
+ <source src="http://web-animations.github.io/web-animations-js/test/testcases/small.mp4" type="video/mp4">
+ </video>
+</div>
+
+<script src="../bootstrap.js" nochecks></script>
+<script>
+"use strict";
+
+var dt = document.timeline;
+
+// Most of these tests require the video to have loaded before they run.
+// However, the test harness does not allow timing_test()s to be started after
+// the page has finished loading. This means that we can't add the video
+// dynamically then wait for it to load before testing.
+//
+// As a best-effort work-around, we include all videos in static HTML with
+// preload="auto" to hint to the browser that they should be loaded
+// immediately. However, this does not guarantee that they will be loaded when
+// the page's load event fires, so the tests are flaky.
+//
+// TODO: Fix the test runner to allow the use of async_test() with
+// timing_test(), which will allow the video elements to be created dynamically.
+// See https://github.com/web-animations/web-animations-js/issues/321
+var videos = document.getElementById("videos").getElementsByTagName('video');
+// Cache this length, as videos is a live NodeList.
+var numStaticVideos = videos.length;
+var nextIndex = 0;
+function getNextVideo() {
+ if (nextIndex >= numStaticVideos) {
+ throw new Error('No more videos!');
+ }
+ return videos[nextIndex++];
+}
+
+function createVideo() {
+ // Videos taken from
+ // http://techslides.com/sample-webm-ogg-and-mp4-video-files-for-html5
+ var video = document.createElement("video");
+ var webmSource = document.createElement("source");
+ webmSource.setAttribute("src", "small.webm");
+ webmSource.setAttribute("type", "video/webm");
+ video.appendChild(webmSource);
+ var mp4Source = document.createElement("source");
+ mp4Source.setAttribute("src", "small.mp4");
+ mp4Source.setAttribute("type", "video/mp4");
+ video.appendChild(mp4Source);
+ document.getElementById("videos").appendChild(video);
+ return video;
+}
+
+function testOnceVideosLoaded(callback, message) {
+ timing_test(function() {
+ at(0.0, callback);
+ }, message);
+}
+
+function createTestMediaReference(mediaElement, timing, parent) {
+ return new MediaReference(mediaElement, timing, parent, 0.0);
+}
+
+var expectedVideoLength = 5.568;
+
+
+// Test that MediaReference disables looping.
+test(function() {
+ var video = getNextVideo();
+ video.loop = true;
+ createTestMediaReference(video);
+ assert_false(video.loop);
+}, "MediaReference should disable looping");
+
+// Test intrinsic iteration duration before media loads.
+test(function() {
+ assert_equals(createTestMediaReference(createVideo()).duration,
+ Infinity);
+}, "Intrinsic duration should be Infinity before media loads");
+
+// Test intrinisc iteration duration.
+testOnceVideosLoaded(function() {
+ assert_approx_equals(
+ createTestMediaReference(getNextVideo()).duration,
+ expectedVideoLength, 0.001);
+}, "Intrinsic iteration duration should be media duration");
+
+// Test that iteration duration can be overridden.
+testOnceVideosLoaded(function() {
+ assert_equals(createTestMediaReference(getNextVideo(), 1.0).duration,
+ 1.0);
+}, "Iteration duration should be overridable");
+
+// Test basic use.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video));
+ assert_equals(video.playbackRate, 1.0);
+ assert_false(video.paused);
+ });
+}, "Basic use");
+
+// Test clipping where duration limits. Video should be frozen at end
+// of duration.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video, 3.0));
+ });
+ at(3.0, function() {
+ assert_equals(video.currentTime, 3.0);
+ assert_true(video.paused);
+ });
+ at(4.0, function() {
+ assert_equals(video.currentTime, 3.0);
+ assert_true(video.paused);
+ });
+}, "Video should be frozen at duration");
+
+// Test clipping where video length limits. Video should be frozen at end for
+// remainder of duration.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video, video.duration + 2));
+ });
+ // We can't use video.duration here because the video isn't yet loaded.
+ at(expectedVideoLength + 1, function() {
+ assert_equals(video.currentTime, video.duration);
+ assert_true(video.paused);
+ });
+ // We can't use video.duration here because the video isn't yet loaded.
+ at(expectedVideoLength + 2, function() {
+ assert_equals(video.currentTime, video.duration);
+ assert_true(video.paused);
+ });
+}, "Video should be frozen at end");
+
+// Test fill with duration limiting. Video should be frozen at end of
+// duration.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video, 1.0));
+ });
+ at(2.0, function() {
+ assert_equals(video.currentTime, 1.0);
+ assert_equals(video.paused, true);
+ });
+}, "Should freeze video at duration for fill");
+
+// Test fill with video length limiting. Video should be at end.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video), video.duration + 1.0);
+ });
+ // We can't use video.duration here because the video isn't yet loaded.
+ at(expectedVideoLength + 2, function() {
+ assert_equals(video.currentTime, video.duration);
+ });
+}, "Should freeze video at end for fill");
+
+// Test no fill. Video should be frozen at start.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video, {fill: "none"}));
+ });
+ // We can't use video.duration here because the video isn't yet loaded.
+ at(expectedVideoLength + 1, function() {
+ assert_equals(video.currentTime, 0);
+ assert_equals(video.paused, true);
+ });
+}, "Should freeze video at start for no fill");
+
+// Test iterations.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video,
+ {iterations: 2.0, duration: 1.0}));
+ });
+ at(1.5, function() {
+ assert_equals(video.currentTime, 0.5);
+ });
+}, "Video should respect iterations");
+
+// Test iterationStart.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video,
+ {iterationStart: 0.5, duration: 2.0}));
+ });
+ at(0.5, function() {
+ assert_equals(video.currentTime, 1.5);
+ });
+}, "Video should respect iterationStart");
+
+// Test playback rate.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video, {playbackRate: 2.0}));
+ });
+ at(1.0, function() {
+ assert_equals(video.currentTime, 2.0);
+ assert_equals(video.playbackRate, 2.0);
+ });
+}, "Video should respect playbackRate");
+
+// Test heirachy of playback rates.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(new ParGroup([createTestMediaReference(video, {playbackRate: 1.5})],
+ {playbackRate: 2.5}));
+ });
+ at(1.0, function() {
+ assert_equals(video.currentTime, 3.75);
+ assert_equals(video.playbackRate, 3.75);
+ });
+}, "Video should respect playbackRate heirachy");
+
+// Test interaction with MediaElement.defaultPlaybackRate.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ video.defaultPlaybackRate = 2.5;
+ dt.play(createTestMediaReference(video, {playbackRate: 1.5}));
+ });
+ at(1.0, function() {
+ assert_equals(video.currentTime, 3.75);
+ assert_equals(video.playbackRate, 3.75);
+ });
+}, "Video should respect playbackRate after setting defaultPlaybackRate");
+
+// Test reversing.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video, {direction: "reverse"}));
+ });
+ at(1.0, function() {
+ assert_approx_equals(video.currentTime, video.duration - 1.0, 0.0001);
+ assert_equals(video.playbackRate, -1.0);
+ });
+}, "Video should respect reversing");
+
+// Test negative playback rate.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video, {playbackRate: -0.5}));
+ });
+ at(1.0, function() {
+ assert_approx_equals(video.currentTime, video.duration - 0.5, 0.0001);
+ assert_equals(video.playbackRate, -0.5);
+ });
+}, "Video should respect negative playbackRate");
+
+// Test interaction of reversing and playback rate.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(new ParGroup(
+ [createTestMediaReference(video, {playbackRate: -0.5})],
+ {playbackRate: 3.0, direction: "reverse"}));
+ });
+ at(1.0, function() {
+ assert_equals(video.currentTime, 1.5);
+ assert_equals(video.playbackRate, 1.5);
+ });
+}, "Video should respect reversing and playbackRate");
+
+// Test zero duration.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ dt.play(createTestMediaReference(video, 0.0));
+ assert_equals(video.currentTime, 0.0);
+ });
+ at(1.0, function() {
+ assert_equals(video.currentTime, 0.0);
+ });
+}, "Video should start at time zero when duration is zero");
+
+// Test zero intrinsic duration.
+// TODO: Need to find a zero length video.
+
+// Test that media elements are removed from their MediaController.
+timing_test(function() {
+ var video = getNextVideo();
+ at(0.0, function() {
+ video.controller = new MediaController();
+ dt.play(createTestMediaReference(video));
+ assert_equals(video.controller, null);
+ });
+ // Seeking the video will throw if the controller has not been detached.
+ at(1.0, function() {
+ assert_equals(video.currentTime, 1.0);
+ });
+}, "Video should be detached from controller when used in MediaReference");
+
+// Test limited seek ranges.
+// TODO: Need to find a video with limited seek ranges.
+
+// Test that video is paused when its MediaReference is detached from its
+// Player.
+timing_test(function() {
+ var video = getNextVideo();
+ var player;
+ at(0.0, function() {
+ player = dt.play(createTestMediaReference(video));
+ });
+ at(1.0, function() {
+ assert_false(video.paused);
+ player.source = null;
+ });
+ at(2.0, function() {
+ assert_true(video.paused);
+ });
+}, "Video should be paused when MediaReference is detached from its Player");
+
+</script>

Powered by Google App Engine
This is Rietveld 408576698