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

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: Android stub 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(visible,
29 !!element && !element.hidden && element.style.display != 'none');
30 };
31
32 /**
33 * Media Router Container created before each test.
34 * @type {?MediaRouterContainer}
35 */
36 var container;
37
38 /**
39 * The list of available sinks.
40 * @type {!Array<!media_router.Sink>}
41 */
42 var fakeSinkList = [];
43
44 /**
45 * The list of available sinks plus the pseudo sink.
46 * @type {!Array<!media_router.Sink>}
47 */
48 var fakeSinkListWithPseudoSink = [];
49
50 /**
51 * Sink returned by search.
52 * @type {media_router.Sink}
53 */
54 var foundSink = null;
55
56 /**
57 * Example pseudo sink.
58 * @type {media_router.Sink}
59 */
60 var pseudoSink = null;
61
62 // Import media_router_container.html before running suite.
63 suiteSetup(function() {
64 return PolymerTest.importHtml(
65 'chrome://media-router/elements/media_router_container/' +
66 'media_router_container.html');
67 });
68
69 setup(function(done) {
70 PolymerTest.clearBody();
71 // Initialize a media-router-container before each test.
72 container = document.createElement('media-router-container');
73 document.body.appendChild(container);
74
75 // Get common functions and variables.
76 var test_base = media_router_container_test_base.init(container);
77
78 checkCurrentView = test_base.checkCurrentView;
79 fakeSinkList = test_base.fakeSinkList;
80
81 pseudoSink = new media_router.Sink(
82 'pseudo:test', '', null, 'domain.com',
83 media_router.SinkIconType.CAST, undefined,
84 test_base.castModeBitset);
85 pseudoSink.isPseudoSink = true;
86 foundSink = new media_router.Sink(
87 'found sink id', 'no existing sink', null, pseudoSink.domain,
88 pseudoSink.iconType, undefined, pseudoSink.castModes);
89 fakeSinkListWithPseudoSink = fakeSinkList.concat([pseudoSink]);
90
91 setTimeout(done);
92 });
93
94 test('pseudo sink hidden without filter input', function(done) {
95 container.allSinks = fakeSinkListWithPseudoSink;
96
97 setTimeout(function() {
98 var sinkList =
99 container.$['sink-list'].querySelectorAll('paper-item');
100 assertEquals(fakeSinkList.length, sinkList.length);
101 MockInteractions.tap(container.$['sink-search-icon']);
102 setTimeout(function() {
103 var searchResults =
104 container.$$('#search-results').querySelectorAll('paper-item');
105 assertEquals(fakeSinkList.length, searchResults.length);
106 done();
107 });
108 });
109 });
110
111 test('filter input adds pseudo sink', function(done) {
112 container.allSinks = fakeSinkListWithPseudoSink;
113
114 var searchInput = container.$['sink-search-input'];
115 searchInput.value = 'no existing sink';
116 setTimeout(function() {
117 var searchResults =
118 container.$$('#search-results').querySelectorAll('paper-item');
119 assertEquals(1, searchResults.length);
120 var item =
121 container.$$('#searchResults').itemForElement(searchResults[0]);
122 assertEquals(pseudoSink.id, item.sinkItem.id);
123 done();
124 });
125 });
126
127 test('filter exact match real sink hides pseudo sink', function(done) {
128 container.allSinks = fakeSinkListWithPseudoSink;
129
130 var searchInput = container.$['sink-search-input'];
131 searchInput.value = fakeSinkList[0].name;
132 setTimeout(function() {
133 var searchResults =
134 container.$$('#search-results').querySelectorAll('paper-item');
135 assertEquals(1, searchResults.length);
136 var item =
137 container.$$('#searchResults').itemForElement(searchResults[0]);
138 assertEquals(fakeSinkList[0].id, item.sinkItem.id);
139 done();
140 });
141 });
142
143 test('clicking pseudo sink starts search', function(done) {
144 container.allSinks = fakeSinkListWithPseudoSink;
145
146 var searchInput = container.$['sink-search-input'];
147 searchInput.value = 'no existing sink';
148 setTimeout(function() {
149 var searchResults =
150 container.$$('#search-results').querySelectorAll('paper-item');
151 container.addEventListener(
152 'search-sinks-and-create-route', function(data) {
153 assertEquals(pseudoSink.id, data.detail.id);
154 assertEquals(pseudoSink.name, data.detail.name);
155 assertEquals(pseudoSink.domain, data.detail.domain);
156 done();
157 });
158 MockInteractions.tap(searchResults[0]);
159 });
160 });
161
162 test('spinner starts on pseudo sink', function(done) {
163 container.allSinks = fakeSinkListWithPseudoSink;
164
165 var searchInput = container.$['sink-search-input'];
166 searchInput.value = foundSink.name;
167 setTimeout(function() {
168 var searchResults =
169 container.$$('#search-results').querySelectorAll('paper-item');
170 MockInteractions.tap(searchResults[0]);
171 setTimeout(function() {
172 searchResults =
173 container.$$('#search-results').querySelectorAll('paper-item');
174 assertEquals(1, searchResults.length);
175 var item =
176 container.$$('#searchResults').itemForElement(searchResults[0]);
177 assertEquals(pseudoSink.id, item.sinkItem.id);
178 var spinner = searchResults[0].querySelector('paper-spinner');
179 checkElementVisible(spinner, true);
180 done();
181 });
182 });
183 });
184
185 test('onReceiveSearchResult updates spinner', function(done) {
186 container.allSinks = fakeSinkListWithPseudoSink;
187
188 var searchInput = container.$['sink-search-input'];
189 searchInput.value = foundSink.name;
190 setTimeout(function() {
191 var searchResults =
192 container.$$('#search-results').querySelectorAll('paper-item');
193 MockInteractions.tap(searchResults[0]);
194 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
195 container.onReceiveSearchResult(foundSink.id);
196 setTimeout(function() {
197 searchResults =
198 container.$$('#search-results').querySelectorAll('paper-item');
199 assertEquals(1, searchResults.length);
200 var item =
201 container.$$('#searchResults').itemForElement(searchResults[0]);
202 assertEquals(foundSink.id, item.sinkItem.id);
203 var spinner = searchResults[0].querySelector('paper-spinner');
204 checkElementVisible(spinner, true);
205 done();
206 });
207 });
208 });
209
210 test('sink list updates spinner', 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 container.onReceiveSearchResult(foundSink.id);
221 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
222 setTimeout(function() {
223 searchResults = container.$$('#search-results')
224 .querySelectorAll('paper-item');
225 assertEquals(1, searchResults.length);
226 var item = container.$$('#searchResults')
227 .itemForElement(searchResults[0]);
228 assertEquals(foundSink.id, item.sinkItem.id);
229 var spinner = searchResults[0].querySelector('paper-spinner');
230 checkElementVisible(spinner, true);
231 done();
232 });
233 });
234 });
235 });
236
237 test('route received clears spinner and search state', function(done) {
238 route = new media_router.Route(
239 'id 1', foundSink.id, 'Title 1', 0, true, false);
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 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
249 container.onReceiveSearchResult(foundSink.id);
250 container.onCreateRouteResponseReceived(pseudoSink.id, route, true);
251 assertEquals(null, container.pseudoSinkSearchState_);
252 setTimeout(function() {
253 checkCurrentView(media_router.MediaRouterView.ROUTE_DETAILS);
254 MockInteractions.tap(
255 container.$['container-header'].$['back-button']);
256 setTimeout(function() {
257 checkCurrentView(media_router.MediaRouterView.SINK_LIST);
258 sinkList =
259 container.$['sink-list'].querySelectorAll('paper-item');
260 sinkList.forEach(function(sink) {
261 var spinner = sink.querySelector('paper-spinner');
262 checkElementVisible(spinner, false);
263 });
264 done();
265 });
266 });
267 });
268 });
269
270 test('pseudo sink search state launching sink id', function() {
271 var searchState = new PseudoSinkSearchState(pseudoSink);
272
273 assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
274 searchState.checkForRealSink(fakeSinkList);
275 assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
276 searchState.checkForRealSink(fakeSinkList.concat([foundSink]));
277 assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
278
279 searchState.receiveSinkResponse(foundSink.id);
280 assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
281 searchState.checkForRealSink(fakeSinkList.concat([foundSink]));
282 assertEquals(foundSink.id, searchState.getCurrentLaunchingSinkId());
283 searchState.checkForRealSink(fakeSinkList);
284 assertEquals(foundSink.id, searchState.getCurrentLaunchingSinkId());
285 });
286
287 test('pseudo sink search state map sink id', function() {
288 var searchState = new PseudoSinkSearchState(pseudoSink);
289 var someId = 'some sink id';
290
291 assertEquals(someId, searchState.mapRouteSinkId(someId));
292 assertEquals('', searchState.mapRouteSinkId(pseudoSink.id));
293 searchState.receiveSinkResponse(foundSink.id);
294 assertEquals(someId, searchState.mapRouteSinkId(someId));
295 assertEquals(foundSink.id, searchState.mapRouteSinkId(pseudoSink.id));
296 });
297 });
amp 2016/04/08 17:12:46 Do we need any tests for the error scenario's wher
btolsch 2016/04/08 21:55:04 I added a test in the filter tests to make sure is
298 }
299
300 return {
301 registerTests: registerTests,
302 };
303 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698