2 var expectedStartTimes = new Array();
3 var expectedEndTimes = new Array();
4 var timeRangeCount = 0;
5 var currentTimeRange = 0;
7 var willPauseInExistingRange = false;
8 var willExtendAnExistingRange = false;
10 var testStartTime = 0;
11 var logTestTiming = false;
13 //@@@@@ Uncomment the following line to log the time each "video-played" sub-test takes in test output
14 //@@@@@ logTestTiming = true;
19 for (i = 0; i < timeRangeCount; i++) {
20 consoleWrite("**** range " + i + " ( " + video.played.start(i).toFixed(2) + ".." + video.played.end(i).toFixed(2) + ")");
29 var duration = (new Date().getTime() - testStartTime) / 1000;
30 consoleWrite("**** Test " + currentTest + " took " + duration.toFixed(2) + " seconds");
33 testExpected("video.played.length", timeRangeCount);
35 for (i = 0; i < timeRangeCount; i++) {
36 testExpected("video.played.start(" + (i) + ").toFixed(2)", expectedStartTimes[i]);
37 testExpected("video.played.end(" + (i) + ").toFixed(2)", expectedEndTimes[i]);
44 testStartTime = new Date().getTime();
46 if (currentTest >= testFunctions.length)
49 (testFunctions[currentTest])();
55 currentTime = video.currentTime.toFixed(2);
57 if (!willExtendAnExistingRange)
58 expectedEndTimes.splice(currentTimeRange, 0, currentTime)
59 else if(expectedEndTimes[currentTimeRange] < currentTime || expectedEndTimes[currentTimeRange] == undefined)
60 expectedEndTimes[currentTimeRange] = currentTime;
66 function canplay(event)
72 function willCreateNewRange()
74 expectedStartTimes.splice(currentTimeRange, 0, video.currentTime.toFixed(2))
78 function startPlayingInNewRange()
84 function startPlaying()
86 playForMillisecs(100); // Triggers pause()
89 function secToMilli(seconds)
91 return seconds * 1000.;
94 function milliToSecs(milliseconds)
96 return milliseconds / 1000;
101 return milliToSecs((new Date()).getTime());
104 function playForMillisecs(milliseconds)
106 if (milliToSecs(milliseconds) > video.duration) {
107 failTest("WARNING: playForMillisecs() does not support range ("+milliToSecs(milliseconds)+") bigger than video duration ("+video.duration+") (yet)");
113 var startTime = nowInSecs();
114 var playedFromTime = video.currentTime;
115 var playDuration = milliToSecs(milliseconds);
116 var callPauseIfTimeIsReached = function ()
118 var playedTime = video.currentTime - playedFromTime;
120 if (playedTime < 0) {
121 // Deal with 'loop' attribue. This work only once, hence the warning
122 // At the begining of playForMillisecs()
123 playedTime = video.duration - playedFromTime + video.currentTime;
126 var elapsed = nowInSecs() - startTime;
128 // Just in case something goes wrong.
129 failTest("ERROR: test stalled, waited " + elapsed + " seconds for movie to play " + playedTime + " seconds");
133 if (playedTime >= playDuration || video.currentTime == video.duration)
134 run("video.pause()");
136 var delta = milliseconds - playedTime * 1000;
137 setTimeout(callPauseIfTimeIsReached, delta);
141 // Add a small amount to the timer because it will take a non-zero amount of time for the
142 // video to start playing.
143 setTimeout(callPauseIfTimeIsReached, milliseconds + 100);
146 function videoPlayedMain()
150 video.src = findMediaFile("video", "content/test");
152 waitForEvent("error");
153 waitForEvent("loadstart");
154 waitForEvent("ratechange");
155 waitForEvent("loadedmetadata");
156 waitForEvent("canplay", canplay); // Will trigger nextTest() which launches the tests.
157 waitForEvent("pause", pause);