Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(373)

Side by Side Diff: third_party/WebKit/LayoutTests/media/video-source-moved.html

Issue 2116293004: Convert video-source-[load|moved|removed].html tests to testharness.js (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!doctype HTML> 1 <!DOCTYPE html>
2 <html> 2 <title>Test to make sure a "source" moved after the media element begins process ing is handled correctly.</title>
3 <head> 3 <script src="../resources/testharness.js"></script>
4 <title>moving &lt;source&gt; element test</title> 4 <script src="../resources/testharnessreport.js"></script>
5 <!-- TODO(foolip): Convert test to testharness.js. crbug.com/588956 5 <script src="media-file.js"></script>
6 (Please avoid writing new tests using video-test.js) --> 6 <script>
7 <script src=video-test.js></script> 7 for(var i = 0; i < 7; i++) {
8 <script src=media-file.js></script> 8 async_test(function(t) {
9 <script> 9 var testInfo = [
10 { func : moveToEnd, errorCount : 0, moved : null, elementToMove: fun ction(video, current) {
11 // Moving previous "source" element to end of list, it should be processed again.
12 return video.removeChild(current.previousSibling);
13 } },
14 { func : moveToEnd, errorCount : 0, moved : null, elementToMove: fun ction(video, current) {
15 // Moving current "source" element, it should be processed again .
16 return video.removeChild(current);
17 } },
18 { func : moveToEnd, errorCount : 0, moved : null, elementToMove: fun ction(video, current) {
19 // Moving next "source" element, it should be processed again.
20 return video.removeChild(current.nextSibling);
21 } },
22 { func : moveEarlier, errorCount : 0, moved : null, elementToMove: f unction(video, current) {
23 // Moving current "source" element to beginning of list, it shou ld not be processed again.
24 return video.removeChild(current);
25 } },
26 { func : moveEarlier, errorCount : 0, moved : null, elementToMove: f unction(video, current) {
27 // Moving next "source" element to beginning of list, it should never processed.
28 return video.removeChild(current.nextSibling);
29 } },
30 { func : moveEarlier, errorCount : 0, moved : null, elementToMove: f unction(video, current) {
31 // span inserted after current "source" element before it is rem oved, processing should proceed normally.
32 var span = document.createElement("span")
33 span.appendChild(document.createTextNode("Your browser doesn't s upport HTML5 video!"));
34 video.insertBefore(span, current.nextSibling);
35 return video.removeChild(current);
36 } },
37 { func : moveEarlier, errorCount : 0, moved : null, elementToMove: f unction(video, current) {
38 // span inserted after next "source" element before it is remove d, processing should proceed normally.
39 var span = document.createElement("span")
40 span.appendChild(document.createTextNode("Your browser doesn't s upport HTML5 video!"));
41 video.insertBefore(span, current.nextSibling.nextSibling);
42 return video.removeChild(current.nextSibling);
43 } }
44 ];
10 45
11 var testInfo = 46 var test = testInfo[i];
12 { 47 var video = document.createElement("video");
13 current : -1,
14 tests :
15 [
16 { fcn : moveToEnd, errorCount : 0, moved : null, done : fals e, iteration : 1},
17 { fcn : moveToEnd, errorCount : 0, moved : null, done : fals e, iteration : 2},
18 { fcn : moveToEnd, errorCount : 0, moved : null, done : fals e, iteration : 3},
19 { fcn : moveEarlier, errorCount : 0, moved : null, iteration : 1 },
20 { fcn : moveEarlier, errorCount : 0, moved : null, iteration : 2 },
21 { fcn : moveEarlier, errorCount : 0, moved : null, iteration : 3 },
22 { fcn : moveEarlier, errorCount : 0, moved : null, iteration : 4 }
23 ]
24 };
25 48
26 function findCurrentSourceElement() 49 // Add a bunch of source elements with bogus urls because we want to rea rrange
27 { 50 // elements after the media engine begins processing sources, and we can 't predict
28 var sources = video.getElementsByTagName('source'); 51 // the delay between when the media element fires an "error" event and o ur handler
29 var currentSrc = video.currentSrc; 52 // is called, but we need to guarantee that there are <source> elements that
30 var ndx; 53 // haven't been processed when we run the test.
31 for (ndx = 0; ndx < sources.length; ++ndx) { 54 for (var index = 1; index <= 10; index++)
32 if (sources[ndx].src == currentSrc) 55 addSource(index);
33 break; 56
34 } 57 function addSource(index) {
35 if (ndx >= sources.length) { 58 var source = document.createElement("source");
36 failTest(currentSrc + " not found in &lt;source&gt; list"); 59 source.src = findMediaFile("video", index + "-" + Date.now());
37 return null; 60 source.type = mimeTypeForExtension(source.src.split(".").pop());
38 } 61 video.appendChild(source);
39 return sources[ndx]; 62
63 source.onerror = t.step_func(function(event) {
64 test.func(event);
65 });
66 }
67
68 function findCurrentSourceElement() {
69 var sources = video.childNodes;
70 var currentSrc = video.currentSrc;
71 var index;
72 for (index = 0; index < sources.length; ++index) {
73 if (sources[index].src == currentSrc)
74 break;
40 } 75 }
41 76
42 function moveEarlier(test, event) 77 assert_less_than(index, sources.length, currentSrc + " not found in <source> list");
43 { 78 return sources[index];
44 if (test.done) 79 }
45 return;
46 80
47 switch (++test.errorCount) 81 function moveEarlier(event) {
48 { 82 switch (++test.errorCount) {
49 case 1: 83 case 1:
50 // Do nothing on the first error event 84 // Do nothing on the first error event
51 break; 85 break;
52 86
53 case 2: 87 case 2:
54 var current = findCurrentSourceElement(); 88 var current = findCurrentSourceElement();
55 switch (test.iteration) 89 test.moved = test.elementToMove(video, current);
56 { 90 assert_not_equals(test.moved, null);
57 case 1: 91 video.insertBefore(test.moved, video.firstChild);
58 consoleWrite("Moving <b>current<" + "/b> &lt;sou rce&gt; element to beginning of list, it should not be processed again."); 92 break;
59 test.moved = video.removeChild(current);
60 break;
61 case 2:
62 consoleWrite("Moving <b>next<" + "/b> &lt;source &gt; element to beginning of list, it should never processed.");
63 test.moved = video.removeChild(current.nextSibli ng);
64 break;
65 case 3:
66 consoleWrite("&lt;span&gt; inserted after <b>cur rent<" + "/b> &lt;source&gt; element before it is removed, processing should pro ceed normally.");
67 var span = document.createElement("span")
68 span.appendChild(document.createTextNode("Your b rowser doesn't support HTML5 video!"));
69 video.insertBefore(span, current.nextSibling);
70 test.moved = video.removeChild(current);
71 break;
72 case 4:
73 consoleWrite("&lt;span&gt; inserted after <b>nex t<" + "/b> &lt;source&gt; element before it is removed, processing should procee d normally.");
74 var span = document.createElement("span")
75 span.appendChild(document.createTextNode("Your b rowser doesn't support HTML5 video!"));
76 video.insertBefore(span, current.nextSibling.nex tSibling);
77 test.moved = video.removeChild(current.nextSibli ng);
78 break;
79 default:
80 failTest("Malformed test data!");
81 break;
82 }
83 93
84 testExpected(test.moved, null, '!='); 94 default:
85 video.insertBefore(test.moved, video.firstChild); 95 // We should never get an error for the element we moved.
86 break; 96 assert_not_equals(event.target, test.moved);
97 if (event.target.nextSibling == null)
98 t.done();
99 break;
100 }
101 }
87 102
88 default: 103 function moveToEnd(event) {
89 // We should never get an error for the element we moved . 104 switch (++test.errorCount) {
90 if (event.target == test.moved) { 105 case 1:
91 failTest("Error fired for &lt;source&gt; moved to be ginning of list."); 106 // Do nothing on the first error event
92 test.done = true; 107 break;
93 return; 108
94 } else if (!event.target.nextSibling) { 109 case 2:
95 logResult(true, "&lt;source&gt; moved was not proces sed"); 110 var current = findCurrentSourceElement();
96 setTimeout(configureNextTest, 100); 111 test.moved = test.elementToMove(video, current);
97 } 112 assert_not_equals(test.moved, null);
98 break; 113 video.appendChild(test.moved);
99 } 114 break;
115
116 default:
117 assert_true(event.target == test.moved || event.target.nextSibli ng != null);
118 if (event.target == test.moved)
119 t.done();
120 break;
100 } 121 }
101 122 }
102 function moveToEnd(test, event) 123 });
103 { 124 }
104 switch (++test.errorCount) 125 </script>
105 {
106 case 1:
107 // Do nothing on the first error event
108 break;
109
110 case 2:
111 var current = findCurrentSourceElement();
112 switch (test.iteration)
113 {
114 case 1:
115 consoleWrite("Moving <b>previous<" + "/b> &lt;so urce&gt; element to end of list, it should be processed again.");
116 test.moved = video.removeChild(current.previousS ibling);
117 break;
118 case 2:
119 consoleWrite("Moving <b>current<" + "/b> &lt;sou rce&gt; element, it should be processed again.");
120 test.moved = video.removeChild(current);
121 break;
122 case 3:
123 consoleWrite("Moving <b>next<" + "/b> &lt;source &gt; element, it should be processed again.");
124 test.moved = video.removeChild(current.nextSibli ng);
125 break;
126 default:
127 failTest("Malformed test data!");
128 break;
129 }
130
131 testExpected(test.moved, null, '!=');
132 video.appendChild(test.moved);
133 break;
134
135 default:
136 if (event.target == test.moved) {
137 logResult(true, "&lt;source&gt; moved was processed a second time.");
138 setTimeout(configureNextTest, 100);
139 } else if (!event.target.nextSibling) {
140 // We should never reach the end of the source list since the tests stops
141 // when the error fires for the moved element.
142 failTest("Error never fired for &lt;source&gt; moved !");
143 }
144 break;
145 }
146 }
147
148 function runOneTest(evt)
149 {
150 var test = testInfo.tests[testInfo.current];
151 test.fcn(test, evt);
152 }
153
154 function addSource(index)
155 {
156 var source = document.createElement('source');
157 source.src = findMediaFile("video", index + "-" + Date.now());
158 source.type = mimeTypeForExtension(source.src.split('.').pop());
159 video.appendChild(source);
160 }
161
162 function runNextTest()
163 {
164 consoleWrite("");
165 if (++testInfo.current >= testInfo.tests.length) {
166 consoleWrite("PASS<br>");
167 endTest();
168 return;
169 }
170
171 testInfo.errorCount = 0;
172 video = mediaElement = document.createElement('video');
173 document.body.appendChild(video);
174
175 // Add a bunch of source elements with bogus urls because we wan t to rearrange elements
176 // after the media engine begins processing sources, and we can' t predict the delay
177 // between when the media element fires an 'error' event and our handler is called,
178 // but we need to guarantee that there are <source> elements tha t haven't been processed
179 // when we run the test.
180 for (var ndx = 1; ndx <= 10; ndx++)
181 addSource(ndx);
182 }
183
184 function configureNextTest()
185 {
186 var videos = document.querySelectorAll('video');
187 for (var ndx = 0; ndx < videos.length; ++ndx)
188 videos[ndx].parentNode.removeChild(videos[ndx]);
189 video = mediaElement = null;
190 setTimeout(runNextTest, 100);
191 }
192
193 function setup()
194 {
195 document.addEventListener("error", runOneTest, true);
196 configureNextTest();
197 }
198
199 </script>
200 </head>
201
202 <body>
203 <div>Test to make sure a &lt;source&gt; moved after the media element be gins processing
204 is handled correctly.</div>
205 <script>setup()</script>
206 </body>
207 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698