summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webvtt/webvtt-file-format-parsing/webvtt-file-parsing/001.html
blob: 2cba0a1ad8a6a497bf5516325f07c4ec9257b664 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<!doctype html>
<title>WebVTT parser tests</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
setup({explicit_done: true});
var files = [];
var path = 'support/';
var cueDefaults = {
"id":"",
"startTime":0,
"endTime":1,
"pauseOnExit":false,
//"vertical":"", (not supported)
"snapToLines":true,
"line":"auto",
"position":"auto",
"size":100,
"align":"center"
}
var cueCounts;
(function(){
    var xhr = new XMLHttpRequest();
    xhr.open('GET', path+'cue-counts.json', true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            cueCounts = JSON.parse(xhr.responseText);
            for (var file in cueCounts) {
                files.push(file);
            }
            startTests();
        }
    }
    xhr.send();
})();

function checkProps(cue, exp, i) {
    for (var prop in cueDefaults) {
        if (!(prop in exp))
            exp[prop] = cueDefaults[prop];
        assert_equals(cue[prop], exp[prop], prop + ' (cue '+(i+1)+')');
    }
}

function startTests() {
    files.forEach(function(file) {
        var t = async_test(document.title+', '+file);
        t.step(function(){
            var video = document.createElement('video');
            var track = document.createElement('track');
            assert_true('src' in track, 'track element not supported');
            track.src = path + file;
            track['default'] = true;
            track.kind = 'subtitles';
            track.onload = this.step_func(trackLoaded);
            track.onerror = this.step_func(trackError);
            video.appendChild(track);
            document.body.appendChild(video);
        });
    });
    done();
}

function trackLoaded(e) {
    var track = e.target;
    var video = track.parentNode;
    setTimeout(removeElm, 0, video);
    var cues = video.textTracks[0].cues;
    var file = track.src.substr(track.src.lastIndexOf('/') + 1);
    assert_equals(cues.length, cueCounts[file], 'number of cues');
    var expected;
    var cue;
    for (var i = 0; i < cues.length; ++i) {
        cue = cues[i];
        expected = JSON.parse(cue.text);
        assert_not_equals(expected, 'FAIL', 'cue '+(i+1)+' should have been dropped');
        checkProps(cue, expected, i);
    }
    this.done();
}

function trackError(e) {
    var track = e.target;
    var video = track.parentNode;
    setTimeout(removeElm, 0, video);
    var file = track.src.substr(track.src.lastIndexOf('/') + 1);
    assert_equals('error', cueCounts[file], 'got unexpected error event');
    this.done();
}

function removeElm(elm) {
    document.body.removeChild(elm);
}

</script>