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

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: 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 = [
fs 2016/07/05 13:33:04 Optionally, this could be written using forEach:
Srirama 2016/07/05 14:55:28 You mean to avoid the for loop above? Problem is t
fs 2016/07/05 15:03:35 It's possible that "this" could be used since we'r
10 { func : moveToEnd, errorCount : 0, moved : null, iteration : 1},
11 { func : moveToEnd, errorCount : 0, moved : null, iteration : 2},
12 { func : moveToEnd, errorCount : 0, moved : null, iteration : 3},
13 { func : moveEarlier, errorCount : 0, moved : null, iteration : 1 },
14 { func : moveEarlier, errorCount : 0, moved : null, iteration : 2 },
15 { func : moveEarlier, errorCount : 0, moved : null, iteration : 3 },
16 { func : moveEarlier, errorCount : 0, moved : null, iteration : 4 }
fs 2016/07/05 13:33:04 I wonder if this test would be slighty easier to c
Srirama 2016/07/05 14:55:28 Done. Looks much better now, thanks.
17 ];
10 18
11 var testInfo = 19 var test = testInfo[i];
12 { 20 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 21
26 function findCurrentSourceElement() 22 // Add a bunch of source elements with bogus urls because we want to rea rrange
27 { 23 // elements after the media engine begins processing sources, and we can 't predict
28 var sources = video.getElementsByTagName('source'); 24 // the delay between when the media element fires an "error" event and o ur handler
29 var currentSrc = video.currentSrc; 25 // is called, but we need to guarantee that there are <source> elements that
30 var ndx; 26 // haven't been processed when we run the test.
31 for (ndx = 0; ndx < sources.length; ++ndx) { 27 for (var index = 1; index <= 10; index++)
32 if (sources[ndx].src == currentSrc) 28 addSource(index);
29
30 function addSource(index) {
31 var source = document.createElement("source");
32 source.src = findMediaFile("video", index + "-" + Date.now());
33 source.type = mimeTypeForExtension(source.src.split(".").pop());
34 video.appendChild(source);
35
36 source.onerror = t.step_func(function(event) {
37 test.func(event);
38 });
39 }
40
41 function findCurrentSourceElement() {
42 var sources = video.childNodes;
43 var currentSrc = video.currentSrc;
44 var index;
45 for (index = 0; index < sources.length; ++index) {
46 if (sources[index].src == currentSrc)
47 break;
48 }
49
50 assert_less_than(index, sources.length, currentSrc + " not found in <source> list");
51 return sources[index];
52 }
53
54 function moveEarlier(event) {
55 switch (++test.errorCount) {
56 case 1:
57 // Do nothing on the first error event
58 break;
59
60 case 2:
61 var current = findCurrentSourceElement();
62 switch (test.iteration)
63 {
64 case 1:
65 // Moving current "source" element to beginning of list, it should not be processed again.
66 test.moved = video.removeChild(current);
67 break;
68 case 2:
69 // Moving next "source" element to beginning of list, it should never processed.
70 test.moved = video.removeChild(current.nextSibling);
71 break;
72 case 3:
73 // span inserted after current "source" element before i t is removed, processing should proceed normally.
74 var span = document.createElement("span")
75 span.appendChild(document.createTextNode("Your browser d oesn't support HTML5 video!"));
76 video.insertBefore(span, current.nextSibling);
77 test.moved = video.removeChild(current);
78 break;
79 case 4:
80 // span inserted after next "source" element before it i s removed, processing should proceed normally.
81 var span = document.createElement("span")
82 span.appendChild(document.createTextNode("Your browser d oesn't support HTML5 video!"));
83 video.insertBefore(span, current.nextSibling.nextSibling );
84 test.moved = video.removeChild(current.nextSibling);
85 break;
86 default:
87 assert_unreached("Malformed test data!");
33 break; 88 break;
34 } 89 }
35 if (ndx >= sources.length) { 90
36 failTest(currentSrc + " not found in &lt;source&gt; list"); 91 assert_not_equals(test.moved, null);
37 return null; 92 video.insertBefore(test.moved, video.firstChild);
38 } 93 break;
39 return sources[ndx]; 94
95 default:
96 // We should never get an error for the element we moved.
97 assert_not_equals(event.target, test.moved);
98 if (event.target.nextSibling == null)
99 t.done();
100 break;
40 } 101 }
102 }
41 103
42 function moveEarlier(test, event) 104 function moveToEnd(event) {
43 { 105 switch (++test.errorCount) {
44 if (test.done) 106 case 1:
45 return; 107 // Do nothing on the first error event
108 break;
46 109
47 switch (++test.errorCount) 110 case 2:
111 var current = findCurrentSourceElement();
112 switch (test.iteration)
48 { 113 {
49 case 1: 114 case 1:
50 // Do nothing on the first error event 115 // Moving previous "source" element to end of list, it s hould be processed again.
116 test.moved = video.removeChild(current.previousSibling);
51 break; 117 break;
52
53 case 2: 118 case 2:
54 var current = findCurrentSourceElement(); 119 // Moving current "source" element, it should be process ed again.
55 switch (test.iteration) 120 test.moved = video.removeChild(current);
56 {
57 case 1:
58 consoleWrite("Moving <b>current<" + "/b> &lt;sou rce&gt; element to beginning of list, it should not be processed again.");
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
84 testExpected(test.moved, null, '!=');
85 video.insertBefore(test.moved, video.firstChild);
86 break; 121 break;
87 122 case 3:
123 // Moving next "source" element, it should be processed again.
124 test.moved = video.removeChild(current.nextSibling);
125 break;
88 default: 126 default:
89 // We should never get an error for the element we moved . 127 assert_unreached("Malformed test data!");
90 if (event.target == test.moved) {
91 failTest("Error fired for &lt;source&gt; moved to be ginning of list.");
92 test.done = true;
93 return;
94 } else if (!event.target.nextSibling) {
95 logResult(true, "&lt;source&gt; moved was not proces sed");
96 setTimeout(configureNextTest, 100);
97 }
98 break; 128 break;
99 } 129 }
130
131 assert_not_equals(test.moved, null);
132 video.appendChild(test.moved);
133 break;
134
135 default:
136 assert_true(event.target == test.moved || event.target.nextSibli ng != null);
137 if (event.target == test.moved)
138 t.done();
139 break;
100 } 140 }
101 141 }
102 function moveToEnd(test, event) 142 });
103 { 143 }
104 switch (++test.errorCount) 144 </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