<!doctype html>
<title>VTTCue.line</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
test(function(){
    var video = document.createElement('video');
    document.body.appendChild(video);
    var c1 = new VTTCue(0, 1, 'text1');
    assert_equals(c1.line, -1);
    var track = document.createElement('track');
    var t = track.track;
    t.addCue(c1);
    assert_equals(c1.line, -1);
    video.appendChild(track);
    assert_equals(c1.line, -1);
    t.mode = 'showing';
    assert_equals(c1.line, -1);
    var c2 = new VTTCue(0, 1, 'text2');
    var track2 = document.createElement('track');
    var t2 = track2.track;
    t2.addCue(c2);
    assert_equals(c2.line, -1);
    video.appendChild(track2);
    t2.mode = 'showing';
    assert_equals(c2.line, -2);
    assert_equals(c1.line, -1);
    c1.line = -5;
    assert_equals(c1.line, -5);
    assert_equals(c2.line, -2);
    c1.line = 0;
    c1.snapToLines = false;
    assert_equals(c1.line, 0);
    assert_equals(c2.line, -2);
}, document.title+', script-created cue');

var t_parsed = async_test(document.title+', parsed cue');
t_parsed.step(function(){
    var video = document.createElement('video');
    document.body.appendChild(video);
    var t = document.createElement('track');
    t.onload = this.step_func(function(){
        var c1 = t.track.cues[0];
        var c2 = t.track.cues[1];
        var c3 = t.track.cues[2];
        assert_equals(c1.line, -1);
        assert_equals(c2.line, 0);
        assert_equals(c3.line, 0);

        this.done();
    });
    t.onerror = this.step_func(function() {
      assert_unreached('got error event');
    });
    t.src = 'data:text/vtt,'+encodeURIComponent('WEBVTT\n\n00:00:00.000 --> 00:00:00.001\ntest\n\n'+
                                                '00:00:00.000 --> 00:00:00.001 line:0\ntest\n\n'+
                                                '00:00:00.000 --> 00:00:00.001 line:0%\ntest');
    t.track.mode = 'showing';
    video.appendChild(t);
});
</script>
