| <!doctype html> |
| <title>TextTrack.activeCues</title> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script src=/common/media.js></script> |
| <div id=log></div> |
| <script> |
| setup(function(){ |
| window.video = document.createElement('video'); |
| window.t1 = video.addTextTrack('subtitles'); |
| window.track = document.createElement('track'); |
| track['default'] = true; |
| video.appendChild(track); |
| window.t2 = track.track; |
| t2.mode = 'showing'; |
| window.t1_cues = t1.activeCues; |
| window.t2_cues = t2.activeCues; |
| document.body.appendChild(video); |
| if (!t1) |
| throw new Error('t1 was undefined') |
| }, {timeout:25000}); |
| function smoke_test() { |
| assert_true('HTMLTrackElement' in window, 'track not supported'); |
| } |
| |
| test(function(){ |
| smoke_test(); |
| assert_equals(t1.activeCues, t1_cues, 't1.activeCues should return same object'); |
| assert_equals(t2.activeCues, t2_cues, 't2.activeCues should return same object'); |
| assert_not_equals(t1.activeCues, t2.activeCues, 't1.activeCues and t2.activeCues should be different objects'); |
| assert_not_equals(t1.activeCues, null, 't1.activeCues should not be null'); |
| assert_not_equals(t2.activeCues, null, 't2.activeCues should not be null'); |
| assert_equals(t1.activeCues.length, 0, 't1.activeCues should have length 0'); |
| assert_equals(t2.activeCues.length, 0, 't2.activeCues should have length 0'); |
| }, document.title+', empty list'); |
| test(function(){ |
| smoke_test(); |
| var c = new VTTCue(0, 1, "text"); |
| t1.addCue(c); |
| assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return same object"); |
| assert_equals(t1.activeCues.length, 0, "t1.activeCues.length"); |
| var c2 = new VTTCue(1, 2, "text2"); |
| t1.addCue(c2); |
| assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after adding a second cue"); |
| assert_equals(t1.activeCues.length, 0, "t1.activeCues.length after adding a second cue"); |
| }, document.title+', after addCue()'); |
| test(function(){ |
| smoke_test(); |
| t1.mode = 'showing'; |
| assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after setting mode to showing"); |
| t1.mode = 'hidden'; |
| assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after setting mode to hidden"); |
| t1.mode = 'disabled'; |
| assert_equals(t1.activeCues, null, "t1.activeCues should be null when mode is disabled"); |
| assert_equals(t1_cues.length, 0, "t1_cues should still be intact after setting mode to disabled"); |
| }, document.title+', different modes'); |
| |
| // ok now let's load in a video |
| var test1 = async_test(document.title+', video loading', {timeout:20000}); |
| var test2 = async_test(document.title+', video playing', {timeout:20000}); |
| var test3 = async_test(document.title+', adding cue during playback', {timeout:20000}); |
| test1.step(smoke_test); |
| test2.step(smoke_test); |
| test3.step(smoke_test); |
| test1.step(function(){ |
| t1.mode = 'showing'; |
| video.onloadeddata = test1.step_func(function(e) { |
| video.onplaying = test2.step_func(function(e) { |
| try { |
| assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after playing a video"); |
| assert_equals(t1.activeCues.length, 1, "t1.activeCues.length after the video has started playing"); |
| } catch(ex) { |
| test2.step(function() { throw ex; }); |
| test3.step(function() { assert_unreached(); }); |
| return; |
| } |
| test3.step(function(){ |
| var c3 = new VTTCue(0, 2, "text3"); |
| t1.addCue(c3); |
| assert_equals(t1.activeCues.length, 1, "t1.activeCues.length after adding a cue in the same script"); |
| setTimeout(test3.step_func(function(){ |
| assert_equals(t1.activeCues.length, 2, "t1.activeCues.length after the event loop has spun"); |
| test3.done(); |
| }, 0)); |
| }); |
| test2.done(); |
| }); |
| try { |
| assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after loading a video"); |
| assert_equals(t2.activeCues, t2_cues, "t2.activeCues should return the same object after loading a video"); |
| assert_equals(t1.activeCues.length, 0, "t1.activeCues.length before the video has started playing"); |
| assert_equals(t2.activeCues.length, 0, "t1.activeCues.length before the video has started playing"); |
| } catch(ex) { |
| test1.step(function() { throw ex; }); |
| test2.step(function() { assert_unreached(); }); |
| test3.step(function() { assert_unreached(); }); |
| return; |
| } |
| video.play(); |
| test1.done(); |
| }); |
| video.src = getVideoURI("/media/movie_5"); |
| }); |
| </script> |