123 lines
4.9 KiB
HTML
123 lines
4.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src=media-file.js></script>
|
|
<script src=video-test.js></script>
|
|
|
|
<script>
|
|
var seekCount = 0;
|
|
var playCount = 0;
|
|
|
|
function play()
|
|
{
|
|
if (video.readyState < HTMLMediaElement.HAVE_METADATA) {
|
|
setTimeout(play, 100);
|
|
return;
|
|
}
|
|
|
|
if (++playCount > 1)
|
|
return;
|
|
|
|
consoleWrite("<br><em>++ seek to near the end, wait for 'seeked' event to announce loop.</em>");
|
|
testExpected("video.paused", false);
|
|
|
|
// Pause playback so the movie can't possibly loop before the seeked event fires
|
|
run("video.pause()");
|
|
waitForEvent("seeked", seeked);
|
|
run("video.currentTime = video.duration - 0.4");
|
|
consoleWrite("");
|
|
}
|
|
|
|
function seeked()
|
|
{
|
|
switch (++seekCount)
|
|
{
|
|
case 1:
|
|
consoleWrite("<br><em>++ first seek completed, beginning playback.</em>");
|
|
testExpected("video.paused", true);
|
|
testExpected("video.ended", false);
|
|
run("video.play()");
|
|
consoleWrite("");
|
|
break;
|
|
case 2:
|
|
consoleWrite("<br><em>++ second seek completed because video looped, toggle 'loop' and seek to near end again.</em>");
|
|
testExpected("video.paused", false);
|
|
testExpected("video.ended", false);
|
|
run("video.pause()");
|
|
|
|
testExpected("mediaElement.currentTime", 0, '>=');
|
|
|
|
// don't use "testExpected()" so we won't log the actual duration as the floating point result may differ with different engines
|
|
reportExpected(mediaElement.currentTime < mediaElement.duration, "mediaElement.currentTime", "<", "mediaElement.duration", mediaElement.currentTime);
|
|
run("video.loop = false");
|
|
run("video.currentTime = video.duration - 0.4");
|
|
consoleWrite("");
|
|
break;
|
|
case 3:
|
|
consoleWrite("<br><em>++ third seek completed, beginning playback for the last time.</em>");
|
|
testExpected("video.paused", true);
|
|
testExpected("video.ended", false);
|
|
run("video.play()");
|
|
consoleWrite("");
|
|
break;
|
|
default:
|
|
failTest("Video should have only seeked three times.");
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
function ended()
|
|
{
|
|
consoleWrite("<br><em>++ played to end and stopped.</em>");
|
|
testExpected("video.ended", true);
|
|
|
|
// don't use "testExpected()" so we won't log the actual duration as the floating point result may differ with different engines
|
|
reportExpected(mediaElement.currentTime == mediaElement.duration, "mediaElement.currentTime", "==", "mediaElement.duration", mediaElement.currentTime);
|
|
|
|
consoleWrite("");
|
|
endTest();
|
|
}
|
|
|
|
function start()
|
|
{
|
|
findMediaElement();
|
|
|
|
consoleWrite("<em>++ Test setting/removing the attribute.</em>");
|
|
testExpected("video.getAttribute('loop')", null);
|
|
testExpected("video.loop", false);
|
|
|
|
run("video.loop = true");
|
|
testExpected("video.loop", true);
|
|
testExpected("video.getAttribute('loop')", null, "!=");
|
|
|
|
run("video.removeAttribute('loop')");
|
|
testExpected("video.loop", false);
|
|
|
|
waitForEvent('pause');
|
|
waitForEvent('play', play);
|
|
waitForEvent("ended", ended);
|
|
|
|
consoleWrite("<br><em>++ Set 'loop' to true and begin playing.</em>");
|
|
var mediaFile = findMediaFile("video", "content/test");
|
|
run("video.loop = true");
|
|
video.src = mediaFile;
|
|
consoleWrite("");
|
|
}
|
|
</script>
|
|
|
|
</head>
|
|
<body>
|
|
<video controls autoplay ></video>
|
|
<p><b>Test looping by:</b>
|
|
<ol>
|
|
<li>Play to end with 'loop' set to true.</li>
|
|
<li>When 'seeked' event fires, verify that time has jumped back and movie is playing.</li>
|
|
<li>Set 'loop' to false and play again.</li>
|
|
<li>Verify that 'ended' event fires.</li>
|
|
</ol>
|
|
</p>
|
|
<script>start()</script>
|
|
</body>
|
|
</html>
|