<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <script src=../media-controls.js></script>
        <script src=../trackmenu-test.js></script>
        <script src=../video-test.js></script>
        <script>

            function testVisibleCue()
            {
                consoleWrite("");
                consoleWrite("EVENT(seeked)");
                consoleWrite("EVENT(cuechange)");
                testExpected("video.textTracks[3].activeCues.length", 1);
                testExpected("textTrackDisplayElement(video, 'cue')", null, "!=");
                consoleWrite("");

                endTest();
            }
            
            function testTracks()
            {
                consoleWrite("<br><i>** Forced tracks should be in .textTracks, but not in the menu<" + "/i>");
                testExpected("video.textTracks.length", 9);

                // Click the CC button to show the menu because it isn't created until it becomes visible.
                clickCCButton();

                trackMenuItems = trackMenuList();
                if (!trackMenuItems) {
                    failTest("Failed to find track menu!");
                    return;
                }
                testExpected("trackMenuItems.length", 6);

                consoleWrite("<br><i>** Only the 'fr' forced track should be showing<" + "/i>");
                testExpected("video.textTracks[0].language", "en");
                testExpected("video.textTracks[0].kind", "subtitles");
                testExpected("video.textTracks[0].mode", "disabled");
                consoleWrite("");

                testExpected("video.textTracks[1].language", "en");
                testExpected("video.textTracks[1].kind", "forced");
                testExpected("video.textTracks[1].mode", "disabled");
                consoleWrite("");

                testExpected("video.textTracks[2].language", "fr");
                testExpected("video.textTracks[2].kind", "subtitles");
                testExpected("video.textTracks[2].mode", "disabled");
                consoleWrite("");

                testExpected("video.textTracks[3].language", "fr");
                testExpected("video.textTracks[3].kind", "forced");
                testExpected("video.textTracks[3].mode", "showing");
                consoleWrite("");

                testExpected("video.textTracks[4].language", "es");
                testExpected("video.textTracks[4].kind", "subtitles");
                testExpected("video.textTracks[4].mode", "disabled");
                consoleWrite("");

                testExpected("video.textTracks[5].language", "es");
                testExpected("video.textTracks[5].kind", "forced");
                testExpected("video.textTracks[5].mode", "disabled");
                consoleWrite("");

                testExpected("video.textTracks[6].language", "de");
                testExpected("video.textTracks[6].kind", "subtitles");
                testExpected("video.textTracks[6].mode", "disabled");
                consoleWrite("");

                testExpected("video.textTracks[7].language", "de");
                testExpected("video.textTracks[7].kind", "forced");
                testExpected("video.textTracks[7].mode", "disabled");
                consoleWrite("");

                testExpected("video.textTracks[8].language", "en");
                testExpected("video.textTracks[8].kind", "captions");
                testExpected("video.textTracks[8].mode", "disabled");
                consoleWrite("");

                waitForEventsAndCall([[video, 'seeked'], [video.textTracks[3], 'cuechange']], testVisibleCue);

                run("video.currentTime = 9.5");
            }

            function setup()
            {
                findMediaElement();
                run("internals.settings.setShouldDisplayTrackKind('Captions', false)");
                run("internals.settings.setShouldDisplayTrackKind('Subtitles', true)");
                run("internals.setUserPreferredLanguages(['en'])");
                run("internals.setPrimaryAudioTrackLanguageOverride('fr')");
                run("internals.setCaptionDisplayMode('ForcedOnly')");
                video.src = '../content/CC+Subtitles.mov';

                waitForEvent('canplaythrough', testTracks);
            }

        </script>
    </head>
    <body onload="setup()">
        <p>Tests that forced subtitles are enable automatically.</p>
        <video width="640" height="360" controls>
        </video>
    </body>
</html>
