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

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: Clarifying pseudo sink comments 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 =
65 container.$$('#sink-list').querySelectorAll('paper-item');
66 assertEquals(length, sinkList.length);
67 var targets = 0;
68 sinkList.forEach(function(sink) {
69 var item = container.$$('#sinkList').itemForElement(sink);
70 var spinner = sink.querySelector('paper-spinner');
71 var isTargetSink = item.id == targetSink.id;
72 checkElementVisible(spinner, isTargetSink);
73 if (isTargetSink) {
74 ++targets;
75 }
76 });
77 assertEquals(1, targets);
78 };
79
80 /**
81 * Media Router Container created before each test.
82 * @type {?MediaRouterContainer}
83 */
84 var container;
85
86 /**
87 * The list of available sinks.
88 * @type {!Array<!media_router.Sink>}
89 */
90 var fakeSinkList = [];
91
92 /**
93 * The list of available sinks plus the pseudo sink.
94 * @type {!Array<!media_router.Sink>}
95 */
96 var fakeSinkListWithPseudoSink = [];
97
98 /**
99 * Sink returned by search.
100 * @type {media_router.Sink}
101 */
102 var foundSink = null;
103
104 /**
105 * Example pseudo sink.
106 * @type {media_router.Sink}
107 */
108 var pseudoSink = null;
109
110 // Import media_router_container.html before running suite.
111 suiteSetup(function() {
112 return PolymerTest.importHtml(
113 'chrome://media-router/elements/media_router_container/' +
114 'media_router_container.html');
115 });
116
117 setup(function(done) {
118 PolymerTest.clearBody();
119 // Initialize a media-router-container before each test.
120 container = document.createElement('media-router-container');
121 document.body.appendChild(container);
122
123 // Get common functions and variables.
124 var test_base = media_router_container_test_base.init(container);
125
126 checkCurrentView = test_base.checkCurrentView;
127 fakeSinkList = test_base.fakeSinkList;
128
129 pseudoSink = new media_router.Sink(
130 'pseudo:test', '', null, 'domain.com',
131 media_router.SinkIconType.CAST, undefined,
132 test_base.castModeBitset);
133 pseudoSink.isPseudoSink = true;
134 foundSink = new media_router.Sink(
135 'found sink id', 'no existing sink', null, pseudoSink.domain,
136 pseudoSink.iconType, undefined, pseudoSink.castModes);
137 fakeSinkListWithPseudoSink = fakeSinkList.concat([pseudoSink]);
138
139 setTimeout(done);
140 });
141
142 test('pseudo sink hidden without filter input', function(done) {
143 container.allSinks = fakeSinkListWithPseudoSink;
144
145 setTimeout(function() {
146 var sinkList =
147 container.$$('#sink-list').querySelectorAll('paper-item');
148 assertEquals(fakeSinkList.length, sinkList.length);
149 MockInteractions.tap(container.$['sink-search-icon']);
150 setTimeout(function() {
151 var searchResults =
152 container.$$('#search-results').querySelectorAll('paper-item');
153 assertEquals(fakeSinkList.length, searchResults.length);
154 done();
155 });
156 });
157 });
158
159 test('filter input adds pseudo sink', function(done) {
160 container.allSinks = fakeSinkListWithPseudoSink;
161
162 var searchInput = container.$['sink-search-input'];
163 searchInput.value = 'no existing sink';
164 setTimeout(function() {
165 var searchResults =
166 container.$$('#search-results').querySelectorAll('paper-item');
167 assertEquals(1, searchResults.length);
168 var item =
169 container.$$('#searchResults').itemForElement(searchResults[0]);
170 assertEquals(pseudoSink.id, item.sinkItem.id);
171 done();
172 });
173 });
174
175 test('filter exact match real sink hides pseudo sink', function(done) {
176 container.allSinks = fakeSinkListWithPseudoSink;
177
178 var searchInput = container.$['sink-search-input'];
179 searchInput.value = fakeSinkList[0].name;
180 setTimeout(function() {
181 var searchResults =
182 container.$$('#search-results').querySelectorAll('paper-item');
183 assertEquals(1, searchResults.length);
184 var item =
185 container.$$('#searchResults').itemForElement(searchResults[0]);
186 assertEquals(fakeSinkList[0].id, item.sinkItem.id);
187 done();
188 });
189 });
190
191 test('clicking pseudo sink starts search', function(done) {
192 container.allSinks = fakeSinkListWithPseudoSink;
193
194 var searchInput = container.$['sink-search-input'];
195 searchInput.value = 'no existing sink';
196 setTimeout(function() {
197 var searchResults =
198 container.$$('#search-results').querySelectorAll('paper-item');
199 container.addEventListener(
200 'search-sinks-and-create-route', function(data) {
201 assertEquals(pseudoSink.id, data.detail.id);
202 assertEquals(pseudoSink.name, data.detail.name);
203 assertEquals(pseudoSink.domain, data.detail.domain);
204 done();
205 });
206 MockInteractions.tap(searchResults[0]);
207 });
208 });
209
210 test('spinner starts on pseudo sink', function(done) {
211 container.allSinks = fakeSinkListWithPseudoSink;
212
213 var searchInput = container.$['sink-search-input'];
214 searchInput.value = foundSink.name;
215 setTimeout(function() {
216 var searchResults =
217 container.$$('#search-results').querySelectorAll('paper-item');
218 MockInteractions.tap(searchResults[0]);
219 setTimeout(function() {
220 searchResults =
221 container.$$('#search-results').querySelectorAll('paper-item');
222 assertEquals(1, searchResults.length);
223 checkSpinningSinkInFilter(pseudoSink);
224
225 searchInput.value = foundSink.name[0];
226 setTimeout(function() {
227 checkSpinningSinkInFilter(pseudoSink);
228
229 searchInput.value = '';
230 setTimeout(function() {
231 checkSpinningSinkInFilter(pseudoSink);
232 done();
233 });
234 });
235 });
236 });
237 });
238
239 test('pseudo sink shown in sink list before real sink', function(done) {
240 container.allSinks = fakeSinkListWithPseudoSink;
241
242 var searchInput = container.$['sink-search-input'];
243 searchInput.value = foundSink.name;
244 setTimeout(function() {
245 var searchResults =
246 container.$$('#search-results').querySelectorAll('paper-item');
247 MockInteractions.tap(searchResults[0]);
248 MockInteractions.tap(
249 container.$['container-header'].$$('#back-button'));
250 setTimeout(function() {
251 checkCurrentView(media_router.MediaRouterView.SINK_LIST);
252 checkSpinningSinkInSinkList(
253 pseudoSink, fakeSinkListWithPseudoSink.length);
254 done();
255 });
256 });
257 });
258
259 test('onReceiveSearchResult updates spinner', function(done) {
260 container.allSinks = fakeSinkListWithPseudoSink;
261
262 var searchInput = container.$['sink-search-input'];
263 searchInput.value = foundSink.name;
264 setTimeout(function() {
265 var searchResults =
266 container.$$('#search-results').querySelectorAll('paper-item');
267 MockInteractions.tap(searchResults[0]);
268 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
269 container.onReceiveSearchResult(foundSink.id);
270 setTimeout(function() {
271 searchResults =
272 container.$$('#search-results').querySelectorAll('paper-item');
273 assertEquals(1, searchResults.length);
274 checkSpinningSinkInFilter(foundSink);
275 done();
276 });
277 });
278 });
279
280 test('sink list updates spinner', function(done) {
281 container.allSinks = fakeSinkListWithPseudoSink;
282
283 var searchInput = container.$['sink-search-input'];
284 searchInput.value = foundSink.name;
285 setTimeout(function() {
286 var searchResults =
287 container.$$('#search-results').querySelectorAll('paper-item');
288 MockInteractions.tap(searchResults[0]);
289 setTimeout(function() {
290 container.onReceiveSearchResult(foundSink.id);
291 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
292 setTimeout(function() {
293 searchResults = container.$$('#search-results')
294 .querySelectorAll('paper-item');
295 assertEquals(1, searchResults.length);
296 checkSpinningSinkInFilter(foundSink);
297 done();
298 });
299 });
300 });
301 });
302
303 test('route received clears spinner and search state', function(done) {
304 var route = new media_router.Route(
305 'id 1', foundSink.id, 'Title 1', 0, true, false);
306 container.allSinks = fakeSinkListWithPseudoSink;
307
308 var searchInput = container.$['sink-search-input'];
309 searchInput.value = foundSink.name;
310 setTimeout(function() {
311 var searchResults =
312 container.$$('#search-results').querySelectorAll('paper-item');
313 MockInteractions.tap(searchResults[0]);
314 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
315 container.onReceiveSearchResult(foundSink.id);
316 container.onCreateRouteResponseReceived(pseudoSink.id, route, true);
317 assertEquals(null, container.pseudoSinkSearchState_);
318 setTimeout(function() {
319 checkCurrentView(media_router.MediaRouterView.ROUTE_DETAILS);
320 MockInteractions.tap(
321 container.$['container-header'].$$('#back-button'));
322 setTimeout(function() {
323 checkCurrentView(media_router.MediaRouterView.SINK_LIST);
324 sinkList =
325 container.$$('#sink-list').querySelectorAll('paper-item');
326 sinkList.forEach(function(sink) {
327 var spinner = sink.querySelector('paper-spinner');
328 checkElementVisible(spinner, false);
329 });
330 done();
331 });
332 });
333 });
334 });
335
336 test('cannot create another route during search', function(done) {
337 var checkCreateRoute = function() {
338 done();
339 };
340 var checkNoCreateRoute = function() {
341 assertTrue(false);
342 };
343 var route = new media_router.Route(
344 'id 1', foundSink.id, 'Title 1', 0, true, false);
345 container.allSinks = fakeSinkListWithPseudoSink;
346 container.addEventListener('create-route', checkNoCreateRoute);
347
348 var searchInput = container.$['sink-search-input'];
349 searchInput.value = foundSink.name;
350 setTimeout(function() {
351 var searchResults =
352 container.$$('#search-results').querySelectorAll('paper-item');
353 MockInteractions.tap(searchResults[0]);
354 MockInteractions.tap(
355 container.$['container-header'].$$('#back-button'));
356 setTimeout(function() {
357 var sinkList =
358 container.$$('#sink-list').querySelectorAll('paper-item');
359 sinkList = [...sinkList];
360 var sink = sinkList.find(function(sink) {
361 var item = container.$$('#sinkList').itemForElement(sink);
362 return fakeSinkList[0].id == item.id;
363 });
364 MockInteractions.tap(sink);
365 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
366 setTimeout(function() {
367 container.onReceiveSearchResult(foundSink.id);
368 MockInteractions.tap(sink);
369 container.onCreateRouteResponseReceived(
370 pseudoSink.id, route, true);
371 setTimeout(function() {
372 checkCurrentView(media_router.MediaRouterView.ROUTE_DETAILS);
373 MockInteractions.tap(
374 container.$['container-header'].$$('#back-button'));
375 container.removeEventListener(
376 'create-route', checkNoCreateRoute);
377 container.addEventListener('create-route', checkCreateRoute);
378 setTimeout(function() {
379 checkCurrentView(media_router.MediaRouterView.SINK_LIST);
380 MockInteractions.tap(sink);
381 });
382 });
383 });
384 });
385 });
386 });
387
388 test('route creation failure clears spinner and search', function(done) {
389 container.allSinks = fakeSinkListWithPseudoSink;
390
391 var searchInput = container.$['sink-search-input'];
392 searchInput.value = foundSink.name;
393 setTimeout(function() {
394 var searchResults =
395 container.$$('#search-results').querySelectorAll('paper-item');
396 MockInteractions.tap(searchResults[0]);
397 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
398 container.onReceiveSearchResult(foundSink.id);
399 container.onCreateRouteResponseReceived(pseudoSink.id, null, true);
400 assertEquals(null, container.pseudoSinkSearchState_);
401 setTimeout(function() {
402 checkCurrentView(media_router.MediaRouterView.FILTER);
403 searchResults =
404 container.$$('#search-results').querySelectorAll('paper-item');
405 searchResults.forEach(function(sink) {
406 var spinner = sink.querySelector('paper-spinner');
407 checkElementVisible(spinner, false);
408 });
409 done();
410 });
411 });
412 });
413
414 test('pseudo sink search state launching sink id', function() {
415 var searchState = new PseudoSinkSearchState(pseudoSink);
416
417 assertEquals(pseudoSink.id, searchState.checkForRealSink(fakeSinkList));
418 assertEquals(
419 pseudoSink.id,
420 searchState.checkForRealSink(fakeSinkList.concat([foundSink])));
421 assertEquals(pseudoSink.id, searchState.checkForRealSink(fakeSinkList));
422
423 searchState.receiveSinkResponse(foundSink.id);
424 assertEquals(pseudoSink.id, searchState.checkForRealSink(fakeSinkList));
425 assertEquals(
426 foundSink.id,
427 searchState.checkForRealSink(fakeSinkList.concat([foundSink])));
428 assertEquals(foundSink.id, searchState.checkForRealSink(fakeSinkList));
429 });
430
431 test('pseudo sink search state map sink id', function() {
432 var searchState = new PseudoSinkSearchState(pseudoSink);
433 var someId = 'some sink id';
434
435 assertEquals(someId, searchState.mapRouteSinkId(someId));
436 assertEquals('', searchState.mapRouteSinkId(pseudoSink.id));
437 searchState.receiveSinkResponse(foundSink.id);
438 assertEquals(someId, searchState.mapRouteSinkId(someId));
439 assertEquals(foundSink.id, searchState.mapRouteSinkId(pseudoSink.id));
440 });
441 });
442 }
443
444 return {
445 registerTests: registerTests,
446 };
447 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698