<!doctype html>
<!-- DO NOT EDIT! This file and support/arrows.vtt are generated. -->
<!-- See /webvtt/parsing/file-parsing/README.md -->
<meta charset=utf-8>
<title>WebVTT parser test: arrows</title>
<link rel="help" href="https://w3c.github.io/webvtt/#cue-timings-and-settings-parsing">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
var t = async_test('arrows');
t.step(function(){
    var video = document.createElement('video');
    var track = document.createElement('track');
    assert_true('src' in track, 'track element not supported');
    track.src = 'support/arrows.vtt';
    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);
});

function trackLoaded(event) {
    var track = event.target;
    var video = track.parentNode;
    var cues = video.textTracks[0].cues;
    {
assert_equals(cues.length, 6);

for (var i = 0; i < cues.length; i++) {
    assert_equals(cues[i].id, '', 'Failed with cue ' + i);
    assert_equals(cues[i].text, 'text' + i, 'Failed with cue ' + i);
}

    }
    this.done();
}

function trackError(e) {
    assert_unreached('got unexpected error event');
}
</script>
