Tests that a track appended after the initial track configuration does not change other tracks.



EVENT(load) -- <body>
EXPECTED (track1.readyState == '0') OK
EXPECTED (track1.track.mode == 'disabled') OK

EVENT(canplaythrough) -- <video>
**check initial metadata track state
EXPECTED (track1.readyState == '0') OK
EXPECTED (track1.track.mode == 'disabled') OK
EXPECTED (track1.track.cues == 'null') OK
RUN(track1.track.mode = 'hidden')

EVENT(load) -- <track kind='metadata' >
**check metadata track state
EXPECTED (track1.readyState == '2') OK
EXPECTED (track1.track.mode == 'hidden') OK
EXPECTED (track1.track.cues.length == '12') OK
EXPECTED (track1.track.cues[11].startTime == '22') OK

**add a caption track, configured to load automatically
RUN(track2 = document.createElement('track'))
RUN(track2.setAttribute('kind', 'captions'))
RUN(track2.setAttribute('default', 'default'))
RUN(track2.setAttribute('onload', 'captionsTrackLoaded()'))
RUN(track2.setAttribute('src', 'captions-webvtt/tc004-webvtt-file.vtt'))
RUN(video.appendChild(track2))

EVENT(load) -- <track kind='captions' >
**check that metadata track state has not changed
EXPECTED (track1.readyState == '2') OK
EXPECTED (track1.track.mode == 'hidden') OK
**and that the caption track state is correct
EXPECTED (track2.readyState == '2') OK
EXPECTED (track2.track.mode == 'showing') OK

**add a subtitle track with video.addTextTrack()
RUN(track3 = video.addTextTrack('subtitles', 'Subtitle Track', 'en'))
RUN(track3.mode = 'showing')

EVENT(addtrack)
**check that metadata track state has not changed
EXPECTED (track1.readyState == '2') OK
EXPECTED (track1.track.mode == 'hidden') OK
**and that the caption track state has not changed
EXPECTED (track2.readyState == '2') OK
EXPECTED (track2.track.mode == 'showing') OK
**and that the subtitle track state is correct
EXPECTED (event.target == '[object TextTrackList]') OK
EXPECTED (event instanceof window.TrackEvent == 'true') OK
EXPECTED (event.track == '[object TextTrack]') OK
EXPECTED (track3.mode == 'showing') OK

END OF TEST

