<!DOCTYPE html>
<html>
<head>
    <script src=media-file.js></script>
    <script src=video-test.js></script>
    <script>

        // The test.mp4 file has sync samples at the following presentation time stamps:
        // 0.0000, 0.7968, 1.5936, 2.3904, 3.1872, 3.9840, 4.7808, 5.5776

        function runTest()
        {
            findMediaElement();
            waitForEvent('canplaythrough', canplaythrough);

            // Other media files may have sync samples at completely different points, so
            // explicitly use the .mp4 here.
            video.src = "content/test.mp4";
        }

        function canplaythrough()
        {
            waitForEventOnce('timeupdate', seek1);
            consoleWrite('Seek past the 4th sync sample:');
            run('video.currentTime = 2.5');
        }

        function seek1()
        {
            testExpected('video.currentTime.toFixed(1)', 2.5);
            consoleWrite('Test that fastSeek() past the currentTime will not result in a seek before the currentTime or past the seek time:');
            waitForEventOnce('timeupdate', seek2);
            run('video.fastSeek(2.6)');
        }

        function seek2()
        {
            testExpected('video.currentTime', 2.6, '<=');
            testExpected('video.currentTime', 2.5, '>=');
            consoleWrite('Seek before the 4th sync sample:');
            waitForEventOnce('timeupdate', seek3);
            run('video.currentTime = 2.3');
        }

        function seek3()
        {
            testExpected('video.currentTime.toFixed(1)', 2.3);
            consoleWrite('Test that fastSeek() before the currentTime will not result in a seek past the seek time:');
            waitForEventOnce('timeupdate', seek4);
            run('video.fastSeek(2.2)');
        }

        function seek4()
        {
            testExpected('video.currentTime', 2.2, '<=');
            endTest();
        }

    </script>
</head>
<body onload="runTest()">
    <video controls></video>
    <p>Test that fastSeek() commands work correctly.</p>
</body>
</html>
