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

Side by Side Diff: chrome/test/data/webui/media_router/media_router_container_search_tests.js

Issue 1805813002: [Media Router] Wiring for searching route providers for new sinks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments and tests Created 4 years, 8 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /** @fileoverview Suite of tests for media-router-container that focus on
6 * the MRPM search feature.
7 */
8 cr.define('media_router_container_search', function() {
9 function registerTests() {
10 suite('MediaRouterContainerSearch', function() {
11
12 /**
13 * Checks whether |view| matches the current view of |container|.
14 *
15 * @param {!media_router.MediaRouterView} view Expected view type.
16 */
17 var checkCurrentView;
18
19 /**
20 * Checks whether an element is visible. An element is visible if it
21 * exists, does not have its |hidden| property set, and its |display|
22 * property is not 'none'.
23 *
24 * @param {Element} element The element to test.
25 * @param {boolean} visible Whether the element should be visible.
26 */
27 var checkElementVisible = function(element, visible) {
28 assertEquals(
29 visible,
30 !!element && !element.hidden && element.style.display != 'none');
31 };
32
33 /**
34 * Checks that |targetSink| is in the search result list and it is the
35 * only sink with a spinner.
36 *
37 * @param {media_router.Sink} targetSink
38 */
39 var checkSpinningSinkInFilter = function(targetSink) {
40 var searchResults =
41 container.$$('#search-results').querySelectorAll('paper-item');
42 var targets = 0;
43 searchResults.forEach(function(sink) {
44 var item =
45 container.$$('#searchResults').itemForElement(sink).sinkItem;
46 var spinner = sink.querySelector('paper-spinner');
47 var isTargetSink = item.id == targetSink.id;
48 checkElementVisible(spinner, isTargetSink);
49 if (isTargetSink) {
50 ++targets;
51 }
52 });
53 assertEquals(1, targets);
54 };
55
56 /**
57 * Checks that |targetSink| is in the sink list and it is the only sink
58 * with a spinner. Also checks that the sink list has length |length|.
59 *
60 * @param {media_router.Sink} targetSink
61 * @param {number} length
62 */
63 var checkSpinningSinkInSinkList = function(targetSink, length) {
64 var sinkList = container.$['sink-list'].querySelectorAll('paper-item');
65 assertEquals(length, sinkList.length);
66 var targets = 0;
67 sinkList.forEach(function(sink) {
68 var item = container.$$('#sinkList').itemForElement(sink);
69 var spinner = sink.querySelector('paper-spinner');
70 var isTargetSink = item.id == targetSink.id;
71 checkElementVisible(spinner, isTargetSink);
72 if (isTargetSink) {
73 ++targets;
74 }
75 });
76 assertEquals(1, targets);
77 };
78
79 /**
80 * Media Router Container created before each test.
81 * @type {?MediaRouterContainer}
82 */
83 var container;
84
85 /**
86 * The list of available sinks.
87 * @type {!Array<!media_router.Sink>}
88 */
89 var fakeSinkList = [];
90
91 /**
92 * The list of available sinks plus the pseudo sink.
93 * @type {!Array<!media_router.Sink>}
94 */
95 var fakeSinkListWithPseudoSink = [];
96
97 /**
98 * Sink returned by search.
99 * @type {media_router.Sink}
100 */
101 var foundSink = null;
102
103 /**
104 * Example pseudo sink.
105 * @type {media_router.Sink}
106 */
107 var pseudoSink = null;
108
109 // Import media_router_container.html before running suite.
110 suiteSetup(function() {
111 return PolymerTest.importHtml(
112 'chrome://media-router/elements/media_router_container/' +
113 'media_router_container.html');
114 });
115
116 setup(function(done) {
117 PolymerTest.clearBody();
118 // Initialize a media-router-container before each test.
119 container = document.createElement('media-router-container');
120 document.body.appendChild(container);
121
122 // Get common functions and variables.
123 var test_base = media_router_container_test_base.init(container);
124
125 checkCurrentView = test_base.checkCurrentView;
126 fakeSinkList = test_base.fakeSinkList;
127
128 pseudoSink = new media_router.Sink(
129 'pseudo:test', '', null, 'domain.com',
130 media_router.SinkIconType.CAST, undefined,
131 test_base.castModeBitset);
132 pseudoSink.isPseudoSink = true;
133 foundSink = new media_router.Sink(
134 'found sink id', 'no existing sink', null, pseudoSink.domain,
135 pseudoSink.iconType, undefined, pseudoSink.castModes);
136 fakeSinkListWithPseudoSink = fakeSinkList.concat([pseudoSink]);
137
138 setTimeout(done);
139 });
140
141 test('pseudo sink hidden without filter input', function(done) {
142 container.allSinks = fakeSinkListWithPseudoSink;
143
144 setTimeout(function() {
145 var sinkList =
146 container.$['sink-list'].querySelectorAll('paper-item');
147 assertEquals(fakeSinkList.length, sinkList.length);
148 MockInteractions.tap(container.$['sink-search-icon']);
149 setTimeout(function() {
150 var searchResults =
151 container.$$('#search-results').querySelectorAll('paper-item');
152 assertEquals(fakeSinkList.length, searchResults.length);
153 done();
154 });
155 });
156 });
157
158 test('filter input adds pseudo sink', function(done) {
159 container.allSinks = fakeSinkListWithPseudoSink;
160
161 var searchInput = container.$['sink-search-input'];
162 searchInput.value = 'no existing sink';
163 setTimeout(function() {
164 var searchResults =
165 container.$$('#search-results').querySelectorAll('paper-item');
166 assertEquals(1, searchResults.length);
167 var item =
168 container.$$('#searchResults').itemForElement(searchResults[0]);
169 assertEquals(pseudoSink.id, item.sinkItem.id);
170 done();
171 });
172 });
173
174 test('filter exact match real sink hides pseudo sink', function(done) {
175 container.allSinks = fakeSinkListWithPseudoSink;
176
177 var searchInput = container.$['sink-search-input'];
178 searchInput.value = fakeSinkList[0].name;
179 setTimeout(function() {
180 var searchResults =
181 container.$$('#search-results').querySelectorAll('paper-item');
182 assertEquals(1, searchResults.length);
183 var item =
184 container.$$('#searchResults').itemForElement(searchResults[0]);
185 assertEquals(fakeSinkList[0].id, item.sinkItem.id);
186 done();
187 });
188 });
189
190 test('clicking pseudo sink starts search', function(done) {
191 container.allSinks = fakeSinkListWithPseudoSink;
192
193 var searchInput = container.$['sink-search-input'];
194 searchInput.value = 'no existing sink';
195 setTimeout(function() {
196 var searchResults =
197 container.$$('#search-results').querySelectorAll('paper-item');
198 container.addEventListener(
199 'search-sinks-and-create-route', function(data) {
200 assertEquals(pseudoSink.id, data.detail.id);
201 assertEquals(pseudoSink.name, data.detail.name);
202 assertEquals(pseudoSink.domain, data.detail.domain);
203 done();
204 });
205 MockInteractions.tap(searchResults[0]);
206 });
207 });
208
209 test('spinner starts on pseudo sink', function(done) {
210 container.allSinks = fakeSinkListWithPseudoSink;
211
212 var searchInput = container.$['sink-search-input'];
213 searchInput.value = foundSink.name;
214 setTimeout(function() {
215 var searchResults =
216 container.$$('#search-results').querySelectorAll('paper-item');
217 MockInteractions.tap(searchResults[0]);
218 setTimeout(function() {
219 searchResults =
220 container.$$('#search-results').querySelectorAll('paper-item');
221 assertEquals(1, searchResults.length);
222 checkSpinningSinkInFilter(pseudoSink);
223
224 searchInput.value = foundSink.name[0];
225 setTimeout(function() {
226 checkSpinningSinkInFilter(pseudoSink);
227
228 searchInput.value = '';
229 setTimeout(function() {
230 checkSpinningSinkInFilter(pseudoSink);
231 done();
232 });
233 });
234 });
235 });
236 });
237
238 test('pseudo sink shown in sink list before real sink', function(done) {
239 container.allSinks = fakeSinkListWithPseudoSink;
240
241 var searchInput = container.$['sink-search-input'];
242 searchInput.value = foundSink.name;
243 setTimeout(function() {
244 var searchResults =
245 container.$$('#search-results').querySelectorAll('paper-item');
246 MockInteractions.tap(searchResults[0]);
247 MockInteractions.tap(
248 container.$['container-header'].$['back-button']);
249 setTimeout(function() {
250 checkCurrentView(media_router.MediaRouterView.SINK_LIST);
251 checkSpinningSinkInSinkList(
252 pseudoSink, fakeSinkListWithPseudoSink.length);
253 done();
254 });
255 });
256 });
257
258 test('onReceiveSearchResult updates spinner', function(done) {
259 container.allSinks = fakeSinkListWithPseudoSink;
260
261 var searchInput = container.$['sink-search-input'];
262 searchInput.value = foundSink.name;
263 setTimeout(function() {
264 var searchResults =
265 container.$$('#search-results').querySelectorAll('paper-item');
266 MockInteractions.tap(searchResults[0]);
267 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
268 container.onReceiveSearchResult(foundSink.id);
269 setTimeout(function() {
270 searchResults =
271 container.$$('#search-results').querySelectorAll('paper-item');
272 assertEquals(1, searchResults.length);
273 checkSpinningSinkInFilter(foundSink);
274 done();
275 });
276 });
277 });
278
279 test('sink list updates spinner', function(done) {
280 container.allSinks = fakeSinkListWithPseudoSink;
281
282 var searchInput = container.$['sink-search-input'];
283 searchInput.value = foundSink.name;
284 setTimeout(function() {
285 var searchResults =
286 container.$$('#search-results').querySelectorAll('paper-item');
287 MockInteractions.tap(searchResults[0]);
288 setTimeout(function() {
289 container.onReceiveSearchResult(foundSink.id);
290 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
291 setTimeout(function() {
292 searchResults = container.$$('#search-results')
293 .querySelectorAll('paper-item');
294 assertEquals(1, searchResults.length);
295 checkSpinningSinkInFilter(foundSink);
296 done();
297 });
298 });
299 });
300 });
301
302 test('route received clears spinner and search state', function(done) {
303 var route = new media_router.Route(
304 'id 1', foundSink.id, 'Title 1', 0, true, false);
305 container.allSinks = fakeSinkListWithPseudoSink;
306
307 var searchInput = container.$['sink-search-input'];
308 searchInput.value = foundSink.name;
309 setTimeout(function() {
310 var searchResults =
311 container.$$('#search-results').querySelectorAll('paper-item');
312 MockInteractions.tap(searchResults[0]);
313 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
314 container.onReceiveSearchResult(foundSink.id);
315 container.onCreateRouteResponseReceived(pseudoSink.id, route, true);
316 assertEquals(null, container.pseudoSinkSearchState_);
317 setTimeout(function() {
318 checkCurrentView(media_router.MediaRouterView.ROUTE_DETAILS);
319 MockInteractions.tap(
320 container.$['container-header'].$['back-button']);
321 setTimeout(function() {
322 checkCurrentView(media_router.MediaRouterView.SINK_LIST);
323 sinkList =
324 container.$['sink-list'].querySelectorAll('paper-item');
325 sinkList.forEach(function(sink) {
326 var spinner = sink.querySelector('paper-spinner');
327 checkElementVisible(spinner, false);
328 });
329 done();
330 });
331 });
332 });
333 });
334
335 test('cannot create another route during search', function(done) {
336 var checkCreateRoute = function() {
337 done();
338 };
339 var checkNoCreateRoute = function() {
340 assertTrue(false);
341 };
342 var route = new media_router.Route(
343 'id 1', foundSink.id, 'Title 1', 0, true, false);
344 container.allSinks = fakeSinkListWithPseudoSink;
345 container.addEventListener('create-route', checkNoCreateRoute);
346
347 var searchInput = container.$['sink-search-input'];
348 searchInput.value = foundSink.name;
349 setTimeout(function() {
350 var searchResults =
351 container.$$('#search-results').querySelectorAll('paper-item');
352 MockInteractions.tap(searchResults[0]);
353 MockInteractions.tap(
354 container.$['container-header'].$['back-button']);
355 setTimeout(function() {
356 var sinkList =
357 container.$['sink-list'].querySelectorAll('paper-item');
358 sinkList = [...sinkList];
359 var sink = sinkList.find(function(sink) {
360 var item = container.$$('#sinkList').itemForElement(sink);
361 return fakeSinkList[0].id == item.id;
362 });
363 MockInteractions.tap(sink);
364 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
365 setTimeout(function() {
366 container.onReceiveSearchResult(foundSink.id);
367 MockInteractions.tap(sink);
368 container.onCreateRouteResponseReceived(
369 pseudoSink.id, route, true);
370 setTimeout(function() {
371 checkCurrentView(media_router.MediaRouterView.ROUTE_DETAILS);
372 MockInteractions.tap(
373 container.$['container-header'].$['back-button']);
374 container.removeEventListener(
375 'create-route', checkNoCreateRoute);
376 container.addEventListener('create-route', checkCreateRoute);
377 setTimeout(function() {
378 checkCurrentView(media_router.MediaRouterView.SINK_LIST);
379 MockInteractions.tap(sink);
380 });
381 });
382 });
383 });
384 });
385 });
386
387 test('route creation failure clears spinner and search', function(done) {
388 container.allSinks = fakeSinkListWithPseudoSink;
389
390 var searchInput = container.$['sink-search-input'];
391 searchInput.value = foundSink.name;
392 setTimeout(function() {
393 var searchResults =
394 container.$$('#search-results').querySelectorAll('paper-item');
395 MockInteractions.tap(searchResults[0]);
396 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
397 container.onReceiveSearchResult(foundSink.id);
398 container.onCreateRouteResponseReceived(pseudoSink.id, null, true);
399 assertEquals(null, container.pseudoSinkSearchState_);
400 setTimeout(function() {
401 checkCurrentView(media_router.MediaRouterView.FILTER);
402 searchResults =
403 container.$$('#search-results').querySelectorAll('paper-item');
404 searchResults.forEach(function(sink) {
405 var spinner = sink.querySelector('paper-spinner');
406 checkElementVisible(spinner, false);
407 });
408 done();
409 });
410 });
411 });
412
413 test('pseudo sink search state launching sink id', function() {
414 var searchState = new PseudoSinkSearchState(pseudoSink);
415
416 assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
417 searchState.checkForRealSink(fakeSinkList);
418 assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
419 searchState.checkForRealSink(fakeSinkList.concat([foundSink]));
420 assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
421
422 searchState.receiveSinkResponse(foundSink.id);
423 assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
424 searchState.checkForRealSink(fakeSinkList.concat([foundSink]));
425 assertEquals(foundSink.id, searchState.getCurrentLaunchingSinkId());
426 searchState.checkForRealSink(fakeSinkList);
427 assertEquals(foundSink.id, searchState.getCurrentLaunchingSinkId());
428 });
429
430 test('pseudo sink search state map sink id', function() {
431 var searchState = new PseudoSinkSearchState(pseudoSink);
432 var someId = 'some sink id';
433
434 assertEquals(someId, searchState.mapRouteSinkId(someId));
435 assertEquals('', searchState.mapRouteSinkId(pseudoSink.id));
436 searchState.receiveSinkResponse(foundSink.id);
437 assertEquals(someId, searchState.mapRouteSinkId(someId));
438 assertEquals(foundSink.id, searchState.mapRouteSinkId(pseudoSink.id));
439 });
440 });
441 }
442
443 return {
444 registerTests: registerTests,
445 };
446 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698