<!doctype html>
<title>TextTrackCue.vertical</title>
<script src=../../../../../resources/testharness.js></script>
<script src=../../../../../resources/testharnessreport.js></script>
<div id=log></div>
<script>
setup(function(){
    window.video = document.createElement('video');
    window.t1 = video.addTextTrack('subtitles');
    document.body.appendChild(video);
});
test(function(){
    var video = document.createElement('video');
    document.body.appendChild(video);
    var c1 = new VTTCue(0, 1, 'text1');
    assert_equals(c1.vertical, '');
    var track = document.createElement('track');
    var t = track.track;
    t.addCue(c1);
    assert_equals(c1.vertical, '');
    video.appendChild(track);
    assert_equals(c1.vertical, '');
    t.mode = 'showing';
    assert_equals(c1.vertical, '');
    c1.vertical = 'rl';
    assert_equals(c1.vertical, 'rl');
    c1.vertical = 'lr';
    assert_equals(c1.vertical, 'lr');
    assert_throws('SYNTAX_ERR', function() {
        c1.vertical = 'rl\u0000';
    });
}, document.title+', script-created cue');

var t_parsed = async_test(document.title+', parsed cue');
t_parsed.step(function(){
    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.vertical, '');
        assert_equals(c2.vertical, 'rl');
        assert_equals(c3.vertical, 'lr');
        this.done();
    });
    t.src = 'data:text/vtt,'+encodeURIComponent('WEBVTT\n\n00:00:00.000 --> 00:00:00.001\ntest'+
                                                '00:00:00.000 --> 00:00:00.001 vertical:rl\ntest\n\n'+
                                                '00:00:00.000 --> 00:00:00.001 vertical:lr\ntest');
    t.track.mode = 'showing';
    video.appendChild(t);
});
</script>
