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

            function doSetup()
            {
                findMediaElement();
                waitForEvent('canplaythrough', canPlayThrough);
                video.src = findMediaFile('video', 'content/test');
            }
            window.addEventListener('load', doSetup, false);

            function canPlayThrough()
            {
                testExpected("video.paused", true);
                testExpected("video.ended", false);
                video.addEventListener('timeupdate', timeUpdate);
                run("video.play()");
            }
  
            function timeUpdate()
            {
                ++timeupdateEventCount;

                // Wait 2 timeupdate events so we are sure the media engine is
                // playing the media.
                if (timeupdateEventCount == 2) {
                    consoleWrite("");
                    video.removeEventListener('timeupdate', timeUpdate);
                    // Make sure time is advancing.
                    testExpected("video.paused", false);
                    testExpected("mediaElement.currentTime", 0, '>');
                    video.addEventListener('pause', paused);
                    video.pause();
                }
            }

            function paused() {
                consoleWrite("");
                testExpected("video.paused", true);
                video.addEventListener('seeked', seeked);
                // Seek past end.
                video.currentTime = 500;
            };

            function seeked()
            {
                consoleWrite("");

                testExpected("video.paused", true);
                // Don't use "testExpected()" so we won't log the actual duration to the
                // results file, as the floating point result may differ with different engines.
                reportExpected(mediaElement.currentTime == mediaElement.duration, "mediaElement.currentTime", "==", "mediaElement.duration", mediaElement.currentTime);

                testExpected("video.ended", true);
                consoleWrite("");
                timeupdateEventCount = 0;
                endTest();
            }
        </script>
    </head>
    <body>
        <video controls></video>
        <p>Test that seeking a paused video past its end sets currentTime to duration and leaves the video paused.</p>
    </body>
</html>
