<!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>           

            var cues;
            
            function logSpecURL(url, description)
            {
                consoleWrite("<br><i>" + description + "</i>");
                consoleWrite("<a href=" + url + ">" + url + "<" + "/a>");
            }

            function trackLoaded()
            {
                track = document.getElementById('captions');
                cues = track.track.cues;

                consoleWrite("** Test initial values.");
                run("textCue = cues.getCueById('1')");

                testExpected("textCue.startTime", 0);
                testExpected("textCue.endTime", 1.0);
                testExpected("textCue.pauseOnExit", false);
                testExpected("textCue.vertical", "");
                testExpected("textCue.snapToLines", true);
                testExpected("textCue.line", -1);
                testExpected("textCue.position", 50);
                testExpected("textCue.size", 100);
                testExpected("textCue.align", "middle");

                consoleWrite("<br>** Modify cue values.");

                run("textCue.startTime = 1.1");
                testExpected("textCue.startTime", 1.1);

                consoleWrite("");
                run("textCue.endTime = 3.9");
                testExpected("textCue.endTime", 3.9);

                consoleWrite("");
                run("textCue.pauseOnExit = true");
                testExpected("textCue.pauseOnExit", true);

                logSpecURL("http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-vertical", 
                           "On setting, the text track cue writing direction must be set to the value ... is a case-sensitive match for the new value, if any. If none of the values match, then the user agent must instead throw a SyntaxError exception.");
                testDOMException("textCue.vertical = 'RL'", "DOMException.SYNTAX_ERR");
                testExpected("textCue.vertical", "");
                run("textCue.vertical = 'rl'");
                testExpected("textCue.vertical", "rl");

                consoleWrite("");
                run("textCue.snapToLines = false");
                testExpected("textCue.snapToLines", false);

                logSpecURL("http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-line",
                            "On setting, if the text track cue snap-to-lines flag is not set, and the new value is negative or greater than 100, then throw an IndexSizeError exception.");
                testDOMException("textCue.line = -2", "DOMException.INDEX_SIZE_ERR");
                testDOMException("textCue.line = 102", "DOMException.INDEX_SIZE_ERR");
                testExpected("textCue.line", -1);
                run("textCue.line = 42");
                testExpected("textCue.line", 42);
                run("textCue.snapToLines = true");
                run("textCue.line = -2");
                testExpected("textCue.line", -2);
                run("textCue.line = 102");
                testExpected("textCue.line", 102);

                logSpecURL("http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-line", 
                           "On setting, if the new value is negative or greater than 100, then throw an IndexSizeError exception. Otherwise, set the text track cue text position to the new value.");
                testDOMException("textCue.position = -200", "DOMException.INDEX_SIZE_ERR");
                testDOMException("textCue.position = 110", "DOMException.INDEX_SIZE_ERR");
                run("textCue.position = 11");
                testExpected("textCue.position", 11);

                logSpecURL("http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-size",
                           "On setting, if the new value is negative or greater than 100, then throw an IndexSizeError exception. Otherwise, set the text track cue size to the new value.");
                testDOMException("textCue.size = -200", "DOMException.INDEX_SIZE_ERR");
                testDOMException("textCue.size = 110", "DOMException.INDEX_SIZE_ERR");
                run("textCue.size = 57");
                testExpected("textCue.size", 57);

                logSpecURL("http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-align",
                           "On setting, the text track cue alignment must be set to the value ... is a case-sensitive match for the new value, if any. If none of the values match, then the user agent must instead throw a SyntaxError exception.");
                testDOMException("textCue.align = 'End'", "DOMException.SYNTAX_ERR");
                testExpected("textCue.align", "middle");
                run("textCue.align = 'end'");
                testExpected("textCue.align", "end");

                consoleWrite("");
                endTest();
            }

            setCaptionDisplayMode('Automatic');
        </script>
    </head>
    <body>
        <p>Tests modifying attributes of a TextTrackCue</p>
        <video controls>
            <track id="captions" src="captions-webvtt/captions.vtt" kind="captions" onload="trackLoaded()" default>
        </video>
    </body>
</html>
