de66d5cb0eb69e20e5a31f5edd3ceba586046d74
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / html / semantics / embedded-content / media-elements / interfaces / TextTrack / activeCues.html
1 <!doctype html>
2 <title>TextTrack.activeCues</title>
3 <script src=/resources/testharness.js></script>
4 <script src=/resources/testharnessreport.js></script>
5 <script src=/common/media.js></script>
6 <div id=log></div>
7 <script>
8 setup(function(){
9     window.video = document.createElement('video');
10     window.t1 = video.addTextTrack('subtitles');
11     window.track = document.createElement('track');
12     track['default'] = true;
13     video.appendChild(track);
14     window.t2 = track.track;
15     t2.mode = 'showing';
16     window.t1_cues = t1.activeCues;
17     window.t2_cues = t2.activeCues;
18     document.body.appendChild(video);
19     if (!t1)
20         throw new Error('t1 was undefined')
21 }, {timeout:25000});
22 function smoke_test() {
23   assert_true('HTMLTrackElement' in window, 'track not supported');
24 }
25
26 test(function(){
27     smoke_test();
28     assert_equals(t1.activeCues, t1_cues, 't1.activeCues should return same object');
29     assert_equals(t2.activeCues, t2_cues, 't2.activeCues should return same object');
30     assert_not_equals(t1.activeCues, t2.activeCues, 't1.activeCues and t2.activeCues should be different objects');
31     assert_not_equals(t1.activeCues, null, 't1.activeCues should not be null');
32     assert_not_equals(t2.activeCues, null, 't2.activeCues should not be null');
33     assert_equals(t1.activeCues.length, 0, 't1.activeCues should have length 0');
34     assert_equals(t2.activeCues.length, 0, 't2.activeCues should have length 0');
35 }, document.title+', empty list');
36 test(function(){
37     smoke_test();
38     var c = new VTTCue(0, 1, "text");
39     t1.addCue(c);
40     assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return same object");
41     assert_equals(t1.activeCues.length, 0, "t1.activeCues.length");
42     var c2 = new VTTCue(1, 2, "text2");
43     t1.addCue(c2);
44     assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after adding a second cue");
45     assert_equals(t1.activeCues.length, 0, "t1.activeCues.length after adding a second cue");
46 }, document.title+', after addCue()');
47 test(function(){
48     smoke_test();
49     t1.mode = 'showing';
50     assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after setting mode to showing");
51     t1.mode = 'hidden';
52     assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after setting mode to hidden");
53     t1.mode = 'disabled';
54     assert_equals(t1.activeCues, null, "t1.activeCues should be null when mode is disabled");
55     assert_equals(t1_cues.length, 0, "t1_cues should still be intact after setting mode to disabled");
56 }, document.title+', different modes');
57
58 // ok now let's load in a video
59 var test1 = async_test(document.title+', video loading', {timeout:20000});
60 var test2 = async_test(document.title+', video playing', {timeout:20000});
61 var test3 = async_test(document.title+', adding cue during playback', {timeout:20000});
62 test1.step(smoke_test);
63 test2.step(smoke_test);
64 test3.step(smoke_test);
65 test1.step(function(){
66     t1.mode = 'showing';
67     video.onloadeddata = test1.step_func(function(e) {
68         video.onplaying = test2.step_func(function(e) {
69             try {
70                 assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after playing a video");
71                 assert_equals(t1.activeCues.length, 1, "t1.activeCues.length after the video has started playing");
72             } catch(ex) {
73                 test2.step(function() { throw ex; });
74                 test3.step(function() { assert_unreached(); });
75                 return;
76             }
77             test3.step(function(){
78                 var c3 = new VTTCue(0, 2, "text3");
79                 t1.addCue(c3);
80                 assert_equals(t1.activeCues.length, 1, "t1.activeCues.length after adding a cue in the same script");
81                 test3.step_timeout(function(){
82                     assert_equals(t1.activeCues.length, 2, "t1.activeCues.length after the event loop has spun");
83                     test3.done();
84                 }, 0);
85             });
86             test2.done();
87         });
88         try {
89             assert_equals(t1.activeCues, t1_cues, "t1.activeCues should return the same object after loading a video");
90             assert_equals(t2.activeCues, t2_cues, "t2.activeCues should return the same object after loading a video");
91             assert_equals(t1.activeCues.length, 0, "t1.activeCues.length before the video has started playing");
92             assert_equals(t2.activeCues.length, 0, "t1.activeCues.length before the video has started playing");
93         } catch(ex) {
94             test1.step(function() { throw ex; });
95             test2.step(function() { assert_unreached(); });
96             test3.step(function() { assert_unreached(); });
97             return;
98         }
99         video.play();
100         test1.done();
101     });
102     video.src = getVideoURI("/media/movie_5");
103 });
104 </script>