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

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

        <script>

        var testTrack;
        var testCue;
        var fragment;

        function createExpectedFragment(rootNode)
        {
            fragment = rootNode;
            fragment.appendChild(document.createTextNode("Lorem "));

            var bold = document.createElement("b");
            bold.appendChild(document.createTextNode("ipsum"));
            fragment.appendChild(bold);

            fragment.appendChild(document.createTextNode(" "));

            var underline = document.createElement("u");
            underline.appendChild(document.createTextNode("dolor"));
            fragment.appendChild(underline);

            fragment.appendChild(document.createTextNode(" "));

            var italics = document.createElement("i");
            italics.className = "sit";
            italics.appendChild(document.createTextNode("sit"));
            fragment.appendChild(italics);

            fragment.appendChild(document.createTextNode(" amet,"));
        }

        function testMutability()
        {
            run("testCue = testTrack.track.cues[0]");

            consoleWrite("<br>** Test initial cue contents");
            testExpected("testCue.text", "Lorem <b>ipsum</b> <u>dolor</u> <i.sit>sit</i> amet,");

            consoleWrite("<br>** Cue getCueAsHTML() should return a correct fragment");
            createExpectedFragment(document.createDocumentFragment());
            testExpected("fragment.isEqualNode(testCue.getCueAsHTML())", true);

            consoleWrite("<br>** Appending getCuesAsHTML() twice to the DOM should be succesful");
            run("document.getElementsByTagName('div')[0].appendChild(testCue.getCueAsHTML())");
            run("document.getElementsByTagName('div')[1].appendChild(testCue.getCueAsHTML())");

            createExpectedFragment(document.createElement('div'));
            testExpected("fragment.isEqualNode(document.getElementsByTagName('div')[0])", true);
            testExpected("fragment.isEqualNode(document.getElementsByTagName('div')[1])", true);

            consoleWrite("<br>** The fragment returned by getCuesAsHTML() should be independently mutable");
            run("document.getElementsByTagName('div')[0].firstChild.textContent = 'Different text '");
            testExpected("fragment.isEqualNode(document.getElementsByTagName('div')[0])", false);
            testExpected("fragment.isEqualNode(document.getElementsByTagName('div')[1])", true);

            consoleWrite("<br>** Calling twice getCueAsHTML() should not return the same fragment");
            testExpected("testCue.getCueAsHTML() == testCue.getCueAsHTML()", false);

            consoleWrite("");
            endTest();
        }

        function loaded()
        {
            findMediaElement();
            testTrack = document.querySelector('track');

            waitForEventsAndCall([[video, 'canplaythrough'], [testTrack, 'load']], testMutability);

            video.src = findMediaFile('video', '../content/counting');
        }

        setCaptionDisplayMode('Automatic');
        </script>
    </head>
    <body onload="loaded()">
        <video controls >
            <track src="captions-webvtt/captions-html.vtt" kind="captions" default >
        </video>
        <p>Test that cue text is mutable.</p>

        <p>Fragment 1</p>
        <div></div>

        <p>Fragment 2</p>
        <div></div>
    </body>
</html>
