gecko-dev/dom/media/test/test_seek-1.html
Bobby Holley 7d849fa87c Bug 1135170 - Fix up racey test_seek-1.html. rpending=mattwoodrow
The use of play() and pause() in the test is hugely problematic for short video
files and slow/laggy platforms. In particular, if playback has ended by
the time that we fire the 'seeked' event listener, then the ensuing play() will
put us back into seeking mode (seeking to 0), making the test fail.
2015-03-06 19:17:10 -08:00

85 lines
2.2 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>Media test: seek tests</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<script type="text/javascript" src="manifest.js"></script>
<script type="text/javascript" src="seek_support.js"></script>
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">
// The data being used in these tests is specified in manifest.js.
// The functions to build the test array and to run a specific test are in
// seek_support.js.
const SEEK_TEST_NUMBER = 1;
function test_seek1(v, seekTime, is, ok, finish) {
var startPassed = false;
var endPassed = false;
var seekFlagStart = false;
var seekFlagEnd = false;
var readonly = true;
var completed = false;
function startTest() {
ok(!completed, "Should not be completed yet");
ok(!v.seeking, "seeking should default to false");
try {
v.seeking = true;
readonly = v.seeking === false;
}
catch(e) {
readonly = "threw exception: " + e;
}
is(readonly, true, "seeking should be readonly");
v.currentTime = seekTime;
seekFlagStart = v.seeking;
}
function seekStarted() {
ok(!completed, "should not be completed yet");
ok(Math.abs(v.currentTime - seekTime) < 0.1,
"Video currentTime should be around " + seekTime + ": " + v.currentTime + " (seeking)");
startPassed = true;
}
function seekEnded() {
ok(!completed, "shuld not be completed yet");
ok(Math.abs(v.currentTime - seekTime) < 0.1,
"Video currentTime should be around " + seekTime + ": " + v.currentTime + " (seeked)");
endPassed = true;
seekFlagEnd = v.seeking;
v.play();
}
function playbackEnded() {
ok(!completed, "should not be completed yet");
completed = true;
ok(startPassed, "seeking event");
ok(endPassed, "seeked event");
ok(seekFlagStart, "seeking flag on start should be true");
ok(!seekFlagEnd, "seeking flag on end should be false");
finish();
}
once(v, "ended", playbackEnded);
once(v, "loadedmetadata", startTest);
once(v, "seeking", seekStarted);
once(v, "seeked", seekEnded);
}
manager.runTests(createTestArray(), startTest);
</script>
</pre>
</body>
</html>