<html>
    <head>
        <title>Test of 'played' attribute</title>
        <script src=media-file.js></script>
        <script src=video-test.js></script>
        <script src=video-played.js></script>
        <script>
    
            var testFunctions = 
            [ 
                PlayWithNoRanges,
                ResetToAVideoSource,
                JumpAndPlayFwd,
                ResetToAnEmptyVideoSource
            ];
    
            // NOTE: Result details are not printed for this test because time values are different from machine
            // to machine and run to run. Commenting out the following line turns on detailed logging back on, which
            // can be useful for debugging test failure.
            disableFullTestDetailsPrinting(); 

            function PlayWithNoRanges()
            {
                consoleWrite("<br><b><em>Test playing when there are no ranges</em></b>");

                timeRangeCount = currentTimeRange = 0;
                willPauseInExistingRange = false;
                willExtendAnExistingRange = false;

                startPlayingInNewRange();
            }
        
            function ResetToAVideoSource()
            {
                consoleWrite("<br><b><em>Test to reset to non empty video source</em></b>");
    
                timeRangeCount = currentTimeRange = 0;
                expectedStartTimes = new Array();
                expectedEndTimes = new Array();

                willPauseInExistingRange = false;
                willExtendAnExistingRange = false;

                var mediaFile = findMediaFile("video", "content/test");
                runSilently("video.src = \"" + mediaFile + "\"");
                run("video.load()"); // Triggers canplay()
            }

            function JumpAndPlayFwd()
            {
                consoleWrite("<br><b><em>Test jumping forward into a new range and play</em></b>");

                var newTime = video.duration - 0.5;
                runSilently("video.currentTime = " + (newTime.toFixed(2)));

                willPauseInExistingRange = false;
                willExtendAnExistingRange = false;
                currentTimeRange = 1;

                startPlayingInNewRange();
            }

            function ResetToAnEmptyVideoSource()
            {
                consoleWrite("<br><b><em>Test to reset to an empty video source</em></b>");
    
                willPauseInExistingRange = false;
                willExtendAnExistingRange = false;
                timeRangeCount = currentTimeRange = 0;

                expectedStartTimes = new Array();
                expectedEndTimes = new Array();

                run("video.src = \"\"");
                waitForEvent("loadstart", function () { testRanges(); nextTest(); });
                run("video.load()"); // Triggers loadstart()
            }
        </script>
     </head>

<body onload="videoPlayedMain()">

    <video controls></video>
    <p>Test of the media element 'played' attribute</p>

</body>
</html>
