<!doctype html>
<!-- DO NOT EDIT! This file and support/header-garbage.vtt are generated. -->
<!-- See /webvtt/parsing/file-parsing/README.md -->
<meta charset=utf-8>
<title>WebVTT parser test: header, garbage</title>
<link rel="help" href="https://w3c.github.io/webvtt/#collect-a-webvtt-block">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
var t = async_test('header, garbage');
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/header-garbage.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, 1);

assert_equals(cues[0].text, 'text');
assert_equals(cues[0].startTime, 0);
assert_equals(cues[0].endTime, 1);

    }
    this.done();
}

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