<!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 numberOfTrackTests = 2;
            
            function trackLoaded()
            {
                numberOfTracksLoaded++;
                if (numberOfTracksLoaded == numberOfTrackTests) {
                    testTrack(0);
                    testTrackError(1);
                }
            }

            
            function testTrack(i)
            {
                findMediaElement();
                var expected = 
                {
                    length : 5,
                    tests:
                    [
                        {
                            property : "align",
                            values : ["start", "start", "middle", "end", "middle"],
                        },
                        {
                            property : "position",
                            values : [10, 50, 80, 30, 60],
                        },
                        {
                            property : "line",
                            values : [0, 0, 80, 5, -3],
                        },
                        {
                            property : "snapToLines",
                            values : [false, true, false, true, true],
                        },
                    ],
                };
                testCues(i, expected);
                
                allTestsEnded();
            }

            function testTrackError(i)
            {
                findMediaElement();
                var expected = 
                {
                    length : 3,
                    tests:
                    [
                        {
                            property : "align",
                            values : ["middle", "end", "middle"],
                        },
                        {
                            property : "position",
                            values : [50, 0, 60],
                        },
                        {
                            property : "line",
                            values : [-1, -1, -3],
                        },
                        {
                            property : "snapToLines",
                            values : [true, true, true],
                        },
                    ],
                };
                testCues(i, expected);
  
                allTestsEnded();
            }
        </script>
    </head>
    <body onload="enableAllTextTracks()">
        <p>Tests cue alignment, line and text position from settings.</p>
        <video>
            <track src="captions-webvtt/tc018-align-text-line-position.vtt" onload="trackLoaded()">
            <track src="captions-webvtt/tc018-align-text-line-position-bad.vtt" onload="trackLoaded()">
        </video>
    </body>
</html>