<!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>
            function loaded()
            {
                expectedData = new Uint8Array([4, 5, 2, 1, 9]);
                cue = new DataCue(3, 10, expectedData.buffer);

                consoleWrite("<br>*** Test DataCue's TextTrackCue interface.");
                testExpected("cue", TextTrackCue, "instanceof");
                testExpected("cue.track", null);
                testExpected("cue.id", "");
                testExpected("cue.startTime", 3);
                testExpected("cue.endTime", 10);
                testExpected("cue.pauseOnExit", false);

                consoleWrite("<br>*** Test DataCue interface.");
                testExpected("cue", DataCue, "instanceof");
                testArraysEqual("new Uint8Array(cue.data)", expectedData);

                // https://www.w3.org/Bugs/Public/show_bug.cgi?id=24687
                consoleWrite("<br>*** Changing the original buffer data should not effect DataCue.data.");

                // Passing data to constructor then changing the original buffer
                run("expectedData[0] = 7");
                testExpected("new Uint8Array(cue.data)[0]", 4);

                // Setting .data then changing the original buffer
                run("cue.data = expectedData.buffer");
                testExpected("new Uint8Array(cue.data)[0]", 7);
                run("expectedData[0] = 11");
                testExpected("new Uint8Array(cue.data)[0]", 7);

                // Getting .data then changing the original buffer
                run("new Uint8Array(cue.data)[0] = 8");
                testExpected("(new Uint8Array(cue.data))[0]", 7);

                consoleWrite("<br>*** Throw exception if data is not an ArrayBuffer.");
                var error = "'TypeError: The DataCue.data attribute must be an instance of ArrayBuffer'";
                testException("cue.data = null", error);
                testException("cue.data = 'test'", error);
                testException("cue.data = [5]", error);

                consoleWrite("<br>*** Constructor with value argument.");
                testExpected("new DataCue(1, 2, null).value", null, "===");
                testExpected("new DataCue(1, 2, 'test').value", 'test', "===");
                testArraysEqual("new DataCue(1, 2, [5]).value", [5]);

                consoleWrite("<br>*** Test adding DataCue to track with kind = 'metadata'.");
                var video = document.createElement("video");
                metadataTrack = video.addTextTrack("metadata");
                metadataTrack.addCue(cue);

                testExpected("cue.track", metadataTrack);
                testExpected("metadataTrack.cues[0]", cue);

                consoleWrite("<br>*** Test adding DataCue to track with kind != 'metadata'.");
                ["subtitles", "captions", "descriptions", "chapters"].forEach(function(kind) {
                    track = video.addTextTrack(kind);

                    testDOMException("track.addCue(cue)", "DOMException.INVALID_NODE_TYPE_ERR");
                    testExpected("track.cues.length", 0);
                });

                endTest();
            }
        </script>
    </head>
    <body onload="loaded()">
        <p>Tests DataCue interface</p>
    </body>
</html>
