upload tizen1.0 source
[framework/web/webkit-efl.git] / LayoutTests / media / video-played.js
1
2 var expectedStartTimes = new Array();
3 var expectedEndTimes = new Array();
4 var timeRangeCount = 0;
5 var currentTimeRange = 0;
6 var currentTest = 0;
7 var willPauseInExistingRange = false;
8 var willExtendAnExistingRange = false;
9
10 var testStartTime = 0;
11 var logTestTiming = false;
12
13 //@@@@@ Uncomment the following line to log the time each "video-played" sub-test takes in test output
14 //@@@@@ logTestTiming = true;
15
16 function logRanges()
17 {
18     consoleWrite("");
19     for (i = 0; i < timeRangeCount; i++) {
20         consoleWrite("****  range " + i + " ( " + video.played.start(i).toFixed(2) + ".." + video.played.end(i).toFixed(2) + ")");
21     }
22 }
23
24 function testRanges()
25 {
26     if (testStartTime) {
27         logRanges();
28
29         var duration = (new Date().getTime() - testStartTime) / 1000;
30         consoleWrite("**** Test " + currentTest + " took " + duration.toFixed(2) + " seconds");
31     }
32
33     testExpected("video.played.length", timeRangeCount);
34     
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]);
38     }
39 }
40
41 function nextTest()
42 {
43     if (logTestTiming)
44         testStartTime = new Date().getTime();
45
46     if (currentTest >= testFunctions.length)
47         endTest();
48     else
49         (testFunctions[currentTest])();
50     currentTest++;
51 }
52
53 function pause(evt)
54 {
55     currentTime = video.currentTime.toFixed(2);
56     
57     if (!willExtendAnExistingRange)
58         expectedEndTimes.splice(currentTimeRange, 0, currentTime)
59         else if(expectedEndTimes[currentTimeRange] < currentTime || expectedEndTimes[currentTimeRange] == undefined)
60             expectedEndTimes[currentTimeRange] = currentTime;
61     
62     testRanges();
63     nextTest();
64 }
65
66 function canplay(event) 
67 {
68     testRanges();
69     nextTest();
70 }
71
72 function willCreateNewRange()
73 {
74     expectedStartTimes.splice(currentTimeRange, 0, video.currentTime.toFixed(2))
75     ++timeRangeCount;
76 }
77
78 function startPlayingInNewRange()
79 {
80     willCreateNewRange();
81     startPlaying();
82 }
83
84 function startPlaying()
85 {
86     playForMillisecs(100); // Triggers pause()
87 }
88
89 function secToMilli(seconds)
90 {
91     return seconds * 1000.;
92 }
93
94 function milliToSecs(milliseconds)
95 {
96     return milliseconds / 1000;
97 }
98
99 function nowInSecs()
100 {
101     return milliToSecs((new Date()).getTime());
102 }
103
104 function playForMillisecs(milliseconds)
105 {
106     if (milliToSecs(milliseconds) > video.duration) {
107         failTest("WARNING: playForMillisecs() does not support range ("+milliToSecs(milliseconds)+") bigger than video duration ("+video.duration+") (yet)");
108         return;
109     }
110
111     run("video.play()");
112
113     var startTime = nowInSecs();
114     var playedFromTime = video.currentTime;
115     var playDuration = milliToSecs(milliseconds);
116     var callPauseIfTimeIsReached = function ()
117     {
118         var playedTime = video.currentTime - playedFromTime;
119         
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;
124         }
125
126         var elapsed = nowInSecs() - startTime;
127         if (elapsed > 2) {
128             // Just in case something goes wrong.
129             failTest("ERROR: test stalled, waited " + elapsed + " seconds for movie to play " + playedTime + " seconds");
130             return;
131         }
132         
133         if (playedTime >= playDuration || video.currentTime == video.duration)
134             run("video.pause()");
135         else {
136             var delta = milliseconds - playedTime  * 1000;
137             setTimeout(callPauseIfTimeIsReached, delta);
138         }
139     }
140
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);
144 }
145
146 function videoPlayedMain()
147 {
148     findMediaElement();
149     
150     video.src = findMediaFile("video", "content/test");
151     
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);
158     
159     video.load();
160 }