blob: 8baa66549c28ab2f7227cfc4edabc7852521ff47 [file] [log] [blame]
<!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":-1,
"position":50,
"size":100,
"align":"middle"
}
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>