<html>
    <head>
        <title>Test pause() pauses the clock immediately</title>
        <script src=media-file.js></script>
        <script src=video-test.js></script>
        <script>
            var timeAfterPause;

            function test()
            {
                findMediaElement();
                video.src = findMediaFile("video", "content/test");
                waitForEvent("canplay", canplay);
                waitForEvent("playing", playing);
                waitForEvent("pause", pause);
            }

            function canplay()
            {
                video.play();
            }

            function playing()
            {
                video.addEventListener("timeupdate", timeupdate);
            }

            function timeupdate()
            {
                if (video.currentTime > 0) {
                    video.removeEventListener("timeupdate", timeupdate);
                    video.pause();
                    timeAfterPause = video.currentTime;
                }
            }

            function pause()
            {
                testExpected("(video.currentTime - timeAfterPause)", 0);
                testExpected("(video.played.end(0) - timeAfterPause)", 0);
                endTest();
            }
        </script>
     </head>
    <body onload="test()">
        <p>Test that pausing the media element has an immediate effect on the clock.</p>
        <video controls></video>
    </body>
</html>

