<!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.3, 30, 60],
                            precision : 2,
                        },
                        {
                            property : "line",
                            values : [0, 0, 80.08, 5, -3],
                            precision : 2,
                        },
                        {
                            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>