<!doctype html>
<title>TextTrackCue addcue</title>
<div></div>
<script src=../../../resources/testharness.js></script>
<script src=../../../resources/testharnessreport.js></script>
<script src=../../media-file.js></script>
<script>
if (window.internals)
    internals.settings.setGenericCueAPIEnabled(true);

function createValidCueFragment(text)
{
    let cueNode = document.createElement('span');
    cueNode.setAttribute('cue', '');
    cueNode.innerText = text;

    let backgroundNode = document.createElement('div');
    backgroundNode.setAttribute('cuebackground', '');
    backgroundNode.appendChild(cueNode);

    fragment = document.createDocumentFragment();
    fragment.appendChild(backgroundNode);

    return fragment;
}

test(test => {
    window.video = document.createElement('video');
    video.controls = true;

    window.track = video.addTextTrack('subtitles');
    track.default = true;
    track.mode = 'showing';

    document.body.appendChild(video);
}, 'setup');

test(test => {
    let cue1 = new TextTrackCue(0, 1, createValidCueFragment('First cue'));
    cue1.id = "one";
    track.addCue(cue1);
    assert_equals(track.cues.length, 1, 'only one cue');

    let cue2 = new TextTrackCue(1, 2, createValidCueFragment('Second cue'));
    cue2.id = "two";
    track.addCue(cue2);
    assert_equals(track.cues.length, 2, "track.cues.length includes second cue");
    assert_equals(track.cues[0].id, 'one', 'cue 1 should be first');
    assert_equals(track.cues[1].id, 'two', 'cue 2 should be second');    
}, 'track.addCue() adds to track.cues');

test(test => {
    track.mode = 'showing';
    track.cues[1].startTime = 0;
    assert_equals(track.cues[0].id, 'two', 'cue 2 should be first');
    assert_equals(track.cues[1].id, 'one', 'cue 1 should be second');

    track.cues[0].startTime = 0.5;
    assert_equals(track.cues[0].id, 'one', 'cue 1 should be first');
    assert_equals(track.cues[1].id, 'two', 'cue 2 should be second');
}, 'cue order should change when start time is changed');
</script>
