| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** @fileoverview Suite of tests for media-router-container that focus on | 5 /** @fileoverview Suite of tests for media-router-container that focus on |
| 6 * the MRPM search feature. | 6 * the MRPM search feature. |
| 7 */ | 7 */ |
| 8 cr.define('media_router_container_search', function() { | 8 cr.define('media_router_container_search', function() { |
| 9 function registerTests() { | 9 function registerTests() { |
| 10 suite('MediaRouterContainerSearch', function() { | 10 suite('MediaRouterContainerSearch', function() { |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 pseudoSink = new media_router.Sink( | 147 pseudoSink = new media_router.Sink( |
| 148 'pseudo:test', '', null, 'domain.com', | 148 'pseudo:test', '', null, 'domain.com', |
| 149 media_router.SinkIconType.CAST, undefined, | 149 media_router.SinkIconType.CAST, undefined, |
| 150 test_base.castModeBitset); | 150 test_base.castModeBitset); |
| 151 pseudoSink.isPseudoSink = true; | 151 pseudoSink.isPseudoSink = true; |
| 152 foundSink = new media_router.Sink( | 152 foundSink = new media_router.Sink( |
| 153 'found sink id', 'no existing sink', null, pseudoSink.domain, | 153 'found sink id', 'no existing sink', null, pseudoSink.domain, |
| 154 pseudoSink.iconType, undefined, pseudoSink.castModes); | 154 pseudoSink.iconType, undefined, pseudoSink.castModes); |
| 155 fakeSinkListWithPseudoSink = fakeSinkList.concat([pseudoSink]); | 155 fakeSinkListWithPseudoSink = fakeSinkList.concat([pseudoSink]); |
| 156 | 156 |
| 157 container.allSinks = fakeSinkListWithPseudoSink; |
| 158 |
| 157 // Allow for the media router container to be created, attached, and | 159 // Allow for the media router container to be created, attached, and |
| 158 // listeners registered in an afterNextRender() call. | 160 // listeners registered in an afterNextRender() call. |
| 159 Polymer.RenderStatus.afterNextRender(this, done); | 161 Polymer.RenderStatus.afterNextRender(this, done); |
| 160 }); | 162 }); |
| 161 | 163 |
| 162 test('pseudo sink hidden without filter input', function(done) { | 164 test('pseudo sink hidden without filter input', function(done) { |
| 163 container.allSinks = fakeSinkListWithPseudoSink; | |
| 164 | |
| 165 setTimeout(function() { | 165 setTimeout(function() { |
| 166 var sinkList = | 166 var sinkList = |
| 167 container.$$('#sink-list').querySelectorAll('paper-item'); | 167 container.$$('#sink-list').querySelectorAll('paper-item'); |
| 168 assertEquals(fakeSinkList.length, sinkList.length); | 168 assertEquals(fakeSinkList.length, sinkList.length); |
| 169 MockInteractions.tap(container.$['sink-search-icon']); | 169 MockInteractions.tap(container.$$('#sink-search-icon')); |
| 170 chainOnAnimationPromise(function() { | 170 chainOnAnimationPromise(function() { |
| 171 var searchResults = | 171 var searchResults = |
| 172 container.$$('#search-results').querySelectorAll('paper-item'); | 172 container.$$('#search-results').querySelectorAll('paper-item'); |
| 173 assertEquals(fakeSinkList.length, searchResults.length); | 173 assertEquals(fakeSinkList.length, searchResults.length); |
| 174 done(); | 174 done(); |
| 175 }); | 175 }); |
| 176 }); | 176 }); |
| 177 }); | 177 }); |
| 178 | 178 |
| 179 test('filter input adds pseudo sink', function(done) { | 179 test('filter input adds pseudo sink', function(done) { |
| 180 container.allSinks = fakeSinkListWithPseudoSink; | 180 var searchInput = container.$$('#sink-search-input'); |
| 181 | |
| 182 var searchInput = container.$['sink-search-input']; | |
| 183 searchInput.value = 'no existing sink'; | 181 searchInput.value = 'no existing sink'; |
| 184 chainOnAnimationPromise(function() { | 182 chainOnAnimationPromise(function() { |
| 185 var searchResults = | 183 var searchResults = |
| 186 container.$$('#search-results').querySelectorAll('paper-item'); | 184 container.$$('#search-results').querySelectorAll('paper-item'); |
| 187 assertEquals(1, searchResults.length); | 185 assertEquals(1, searchResults.length); |
| 188 var item = | 186 var item = |
| 189 container.$$('#searchResults').itemForElement(searchResults[0]); | 187 container.$$('#searchResults').itemForElement(searchResults[0]); |
| 190 assertEquals(pseudoSink.id, item.sinkItem.id); | 188 assertEquals(pseudoSink.id, item.sinkItem.id); |
| 191 done(); | 189 done(); |
| 192 }); | 190 }); |
| 193 }); | 191 }); |
| 194 | 192 |
| 195 test('filter exact match real sink hides pseudo sink', function(done) { | 193 test('filter exact match real sink hides pseudo sink', function(done) { |
| 196 container.allSinks = fakeSinkListWithPseudoSink; | 194 var searchInput = container.$$('#sink-search-input'); |
| 197 | |
| 198 var searchInput = container.$['sink-search-input']; | |
| 199 searchInput.value = fakeSinkList[0].name; | 195 searchInput.value = fakeSinkList[0].name; |
| 200 chainOnAnimationPromise(function() { | 196 chainOnAnimationPromise(function() { |
| 201 var searchResults = | 197 var searchResults = |
| 202 container.$$('#search-results').querySelectorAll('paper-item'); | 198 container.$$('#search-results').querySelectorAll('paper-item'); |
| 203 assertEquals(1, searchResults.length); | 199 assertEquals(1, searchResults.length); |
| 204 var item = | 200 var item = |
| 205 container.$$('#searchResults').itemForElement(searchResults[0]); | 201 container.$$('#searchResults').itemForElement(searchResults[0]); |
| 206 assertEquals(fakeSinkList[0].id, item.sinkItem.id); | 202 assertEquals(fakeSinkList[0].id, item.sinkItem.id); |
| 207 done(); | 203 done(); |
| 208 }); | 204 }); |
| 209 }); | 205 }); |
| 210 | 206 |
| 211 test('clicking pseudo sink starts search', function(done) { | 207 test('clicking pseudo sink starts search', function(done) { |
| 212 container.allSinks = fakeSinkListWithPseudoSink; | 208 var searchInput = container.$$('#sink-search-input'); |
| 213 | |
| 214 var searchInput = container.$['sink-search-input']; | |
| 215 searchInput.value = 'no existing sink'; | 209 searchInput.value = 'no existing sink'; |
| 216 chainOnAnimationPromise(function() { | 210 chainOnAnimationPromise(function() { |
| 217 var searchResults = | 211 var searchResults = |
| 218 container.$$('#search-results').querySelectorAll('paper-item'); | 212 container.$$('#search-results').querySelectorAll('paper-item'); |
| 219 container.addEventListener( | 213 container.addEventListener( |
| 220 'search-sinks-and-create-route', function(data) { | 214 'search-sinks-and-create-route', function(data) { |
| 221 assertEquals(pseudoSink.id, data.detail.id); | 215 assertEquals(pseudoSink.id, data.detail.id); |
| 222 assertEquals(pseudoSink.name, data.detail.name); | 216 assertEquals(pseudoSink.name, data.detail.name); |
| 223 assertEquals(pseudoSink.domain, data.detail.domain); | 217 assertEquals(pseudoSink.domain, data.detail.domain); |
| 224 done(); | 218 done(); |
| 225 }); | 219 }); |
| 226 MockInteractions.tap(searchResults[0]); | 220 MockInteractions.tap(searchResults[0]); |
| 227 }); | 221 }); |
| 228 }); | 222 }); |
| 229 | 223 |
| 230 test('spinner starts on pseudo sink', function(done) { | 224 test('spinner starts on pseudo sink', function(done) { |
| 231 container.allSinks = fakeSinkListWithPseudoSink; | 225 var searchInput = container.$$('#sink-search-input'); |
| 232 | |
| 233 var searchInput = container.$['sink-search-input']; | |
| 234 searchInput.value = foundSink.name; | 226 searchInput.value = foundSink.name; |
| 235 chainOnAnimationPromise(function() { | 227 chainOnAnimationPromise(function() { |
| 236 var searchResults = | 228 var searchResults = |
| 237 container.$$('#search-results').querySelectorAll('paper-item'); | 229 container.$$('#search-results').querySelectorAll('paper-item'); |
| 238 MockInteractions.tap(searchResults[0]); | 230 MockInteractions.tap(searchResults[0]); |
| 239 setTimeout(function() { | 231 setTimeout(function() { |
| 240 searchResults = | 232 searchResults = |
| 241 container.$$('#search-results').querySelectorAll('paper-item'); | 233 container.$$('#search-results').querySelectorAll('paper-item'); |
| 242 assertEquals(1, searchResults.length); | 234 assertEquals(1, searchResults.length); |
| 243 checkSpinningSinkInFilter(pseudoSink); | 235 checkSpinningSinkInFilter(pseudoSink); |
| 244 | 236 |
| 245 searchInput.value = foundSink.name[0]; | 237 searchInput.value = foundSink.name[0]; |
| 246 setTimeout(function() { | 238 setTimeout(function() { |
| 247 checkSpinningSinkInFilter(pseudoSink); | 239 checkSpinningSinkInFilter(pseudoSink); |
| 248 | 240 |
| 249 searchInput.value = ''; | 241 searchInput.value = ''; |
| 250 setTimeout(function() { | 242 setTimeout(function() { |
| 251 checkSpinningSinkInFilter(pseudoSink); | 243 checkSpinningSinkInFilter(pseudoSink); |
| 252 done(); | 244 done(); |
| 253 }); | 245 }); |
| 254 }); | 246 }); |
| 255 }); | 247 }); |
| 256 }); | 248 }); |
| 257 }); | 249 }); |
| 258 | 250 |
| 259 test('pseudo sink shown in sink list before real sink', function(done) { | 251 test('pseudo sink shown in sink list before real sink', function(done) { |
| 260 container.allSinks = fakeSinkListWithPseudoSink; | 252 var searchInput = container.$$('#sink-search-input'); |
| 261 | |
| 262 var searchInput = container.$['sink-search-input']; | |
| 263 searchInput.value = foundSink.name; | 253 searchInput.value = foundSink.name; |
| 264 chainOnAnimationPromise(function() { | 254 chainOnAnimationPromise(function() { |
| 265 var searchResults = | 255 var searchResults = |
| 266 container.$$('#search-results').querySelectorAll('paper-item'); | 256 container.$$('#search-results').querySelectorAll('paper-item'); |
| 267 MockInteractions.tap(searchResults[0]); | 257 MockInteractions.tap(searchResults[0]); |
| 268 MockInteractions.tap( | 258 MockInteractions.tap( |
| 269 container.$['container-header'].$$('#back-button')); | 259 container.$['container-header'].$$('#back-button')); |
| 270 chainOnAnimationPromise(function() { | 260 chainOnAnimationPromise(function() { |
| 271 checkCurrentView(media_router.MediaRouterView.SINK_LIST); | 261 checkCurrentView(media_router.MediaRouterView.SINK_LIST); |
| 272 checkSpinningSinkInSinkList( | 262 checkSpinningSinkInSinkList( |
| 273 pseudoSink, fakeSinkListWithPseudoSink.length); | 263 pseudoSink, fakeSinkListWithPseudoSink.length); |
| 274 done(); | 264 done(); |
| 275 }); | 265 }); |
| 276 }); | 266 }); |
| 277 }); | 267 }); |
| 278 | 268 |
| 279 test('onReceiveSearchResult updates spinner', function(done) { | 269 test('onReceiveSearchResult updates spinner', function(done) { |
| 280 container.allSinks = fakeSinkListWithPseudoSink; | 270 var searchInput = container.$$('#sink-search-input'); |
| 281 | |
| 282 var searchInput = container.$['sink-search-input']; | |
| 283 searchInput.value = foundSink.name; | 271 searchInput.value = foundSink.name; |
| 284 chainOnAnimationPromise(function() { | 272 chainOnAnimationPromise(function() { |
| 285 var searchResults = | 273 var searchResults = |
| 286 container.$$('#search-results').querySelectorAll('paper-item'); | 274 container.$$('#search-results').querySelectorAll('paper-item'); |
| 287 MockInteractions.tap(searchResults[0]); | 275 MockInteractions.tap(searchResults[0]); |
| 288 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]); | 276 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]); |
| 289 container.onReceiveSearchResult(foundSink.id); | 277 container.onReceiveSearchResult(foundSink.id); |
| 290 setTimeout(function() { | 278 setTimeout(function() { |
| 291 searchResults = | 279 searchResults = |
| 292 container.$$('#search-results').querySelectorAll('paper-item'); | 280 container.$$('#search-results').querySelectorAll('paper-item'); |
| 293 assertEquals(1, searchResults.length); | 281 assertEquals(1, searchResults.length); |
| 294 checkSpinningSinkInFilter(foundSink); | 282 checkSpinningSinkInFilter(foundSink); |
| 295 done(); | 283 done(); |
| 296 }); | 284 }); |
| 297 }); | 285 }); |
| 298 }); | 286 }); |
| 299 | 287 |
| 300 test('sink list updates spinner', function(done) { | 288 test('sink list updates spinner', function(done) { |
| 301 container.allSinks = fakeSinkListWithPseudoSink; | 289 var searchInput = container.$$('#sink-search-input'); |
| 302 | |
| 303 var searchInput = container.$['sink-search-input']; | |
| 304 searchInput.value = foundSink.name; | 290 searchInput.value = foundSink.name; |
| 305 chainOnAnimationPromise(function() { | 291 chainOnAnimationPromise(function() { |
| 306 var searchResults = | 292 var searchResults = |
| 307 container.$$('#search-results').querySelectorAll('paper-item'); | 293 container.$$('#search-results').querySelectorAll('paper-item'); |
| 308 MockInteractions.tap(searchResults[0]); | 294 MockInteractions.tap(searchResults[0]); |
| 309 setTimeout(function() { | 295 setTimeout(function() { |
| 310 container.onReceiveSearchResult(foundSink.id); | 296 container.onReceiveSearchResult(foundSink.id); |
| 311 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]); | 297 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]); |
| 312 setTimeout(function() { | 298 setTimeout(function() { |
| 313 searchResults = container.$$('#search-results') | 299 searchResults = container.$$('#search-results') |
| 314 .querySelectorAll('paper-item'); | 300 .querySelectorAll('paper-item'); |
| 315 assertEquals(1, searchResults.length); | 301 assertEquals(1, searchResults.length); |
| 316 checkSpinningSinkInFilter(foundSink); | 302 checkSpinningSinkInFilter(foundSink); |
| 317 done(); | 303 done(); |
| 318 }); | 304 }); |
| 319 }); | 305 }); |
| 320 }); | 306 }); |
| 321 }); | 307 }); |
| 322 | 308 |
| 323 test('route received clears spinner and search state', function(done) { | 309 test('route received clears spinner and search state', function(done) { |
| 324 var route = new media_router.Route( | 310 var route = new media_router.Route( |
| 325 'id 1', foundSink.id, 'Title 1', 0, true, false); | 311 'id 1', foundSink.id, 'Title 1', 0, true, false); |
| 326 container.allSinks = fakeSinkListWithPseudoSink; | |
| 327 | 312 |
| 328 var searchInput = container.$['sink-search-input']; | 313 var searchInput = container.$$('#sink-search-input'); |
| 329 searchInput.value = foundSink.name; | 314 searchInput.value = foundSink.name; |
| 330 chainOnAnimationPromise(function() { | 315 chainOnAnimationPromise(function() { |
| 331 var searchResults = | 316 var searchResults = |
| 332 container.$$('#search-results').querySelectorAll('paper-item'); | 317 container.$$('#search-results').querySelectorAll('paper-item'); |
| 333 MockInteractions.tap(searchResults[0]); | 318 MockInteractions.tap(searchResults[0]); |
| 334 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]); | 319 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]); |
| 335 container.onReceiveSearchResult(foundSink.id); | 320 container.onReceiveSearchResult(foundSink.id); |
| 336 container.onCreateRouteResponseReceived(foundSink.id, route, true); | 321 container.onCreateRouteResponseReceived(foundSink.id, route, true); |
| 337 assertEquals(null, container.pseudoSinkSearchState_); | 322 assertEquals(null, container.pseudoSinkSearchState_); |
| 338 setTimeout(function() { | 323 setTimeout(function() { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 355 | 340 |
| 356 test('cannot create another route during search', function(done) { | 341 test('cannot create another route during search', function(done) { |
| 357 var checkCreateRoute = function() { | 342 var checkCreateRoute = function() { |
| 358 done(); | 343 done(); |
| 359 }; | 344 }; |
| 360 var checkNoCreateRoute = function() { | 345 var checkNoCreateRoute = function() { |
| 361 assertTrue(false); | 346 assertTrue(false); |
| 362 }; | 347 }; |
| 363 var route = new media_router.Route( | 348 var route = new media_router.Route( |
| 364 'id 1', foundSink.id, 'Title 1', 0, true, false); | 349 'id 1', foundSink.id, 'Title 1', 0, true, false); |
| 365 container.allSinks = fakeSinkListWithPseudoSink; | |
| 366 container.addEventListener('create-route', checkNoCreateRoute); | 350 container.addEventListener('create-route', checkNoCreateRoute); |
| 367 | 351 |
| 368 var searchInput = container.$['sink-search-input']; | 352 var searchInput = container.$$('#sink-search-input'); |
| 369 searchInput.value = foundSink.name; | 353 searchInput.value = foundSink.name; |
| 370 chainOnAnimationPromise(function() { | 354 chainOnAnimationPromise(function() { |
| 371 var searchResults = | 355 var searchResults = |
| 372 container.$$('#search-results').querySelectorAll('paper-item'); | 356 container.$$('#search-results').querySelectorAll('paper-item'); |
| 373 MockInteractions.tap(searchResults[0]); | 357 MockInteractions.tap(searchResults[0]); |
| 374 MockInteractions.tap( | 358 MockInteractions.tap( |
| 375 container.$['container-header'].$$('#back-button')); | 359 container.$['container-header'].$$('#back-button')); |
| 376 chainOnAnimationPromise(function() { | 360 chainOnAnimationPromise(function() { |
| 377 var sinkList = | 361 var sinkList = |
| 378 container.$$('#sink-list').querySelectorAll('paper-item'); | 362 container.$$('#sink-list').querySelectorAll('paper-item'); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 399 checkCurrentView(media_router.MediaRouterView.SINK_LIST); | 383 checkCurrentView(media_router.MediaRouterView.SINK_LIST); |
| 400 MockInteractions.tap(sink); | 384 MockInteractions.tap(sink); |
| 401 }); | 385 }); |
| 402 }); | 386 }); |
| 403 }); | 387 }); |
| 404 }); | 388 }); |
| 405 }); | 389 }); |
| 406 }); | 390 }); |
| 407 | 391 |
| 408 test('route creation failure clears spinner and search', function(done) { | 392 test('route creation failure clears spinner and search', function(done) { |
| 409 container.allSinks = fakeSinkListWithPseudoSink; | 393 var searchInput = container.$$('#sink-search-input'); |
| 410 | |
| 411 var searchInput = container.$['sink-search-input']; | |
| 412 searchInput.value = foundSink.name; | 394 searchInput.value = foundSink.name; |
| 413 chainOnAnimationPromise(function() { | 395 chainOnAnimationPromise(function() { |
| 414 var searchResults = | 396 var searchResults = |
| 415 container.$$('#search-results').querySelectorAll('paper-item'); | 397 container.$$('#search-results').querySelectorAll('paper-item'); |
| 416 MockInteractions.tap(searchResults[0]); | 398 MockInteractions.tap(searchResults[0]); |
| 417 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]); | 399 container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]); |
| 418 container.onReceiveSearchResult(foundSink.id); | 400 container.onReceiveSearchResult(foundSink.id); |
| 419 container.onCreateRouteResponseReceived(pseudoSink.id, null, true); | 401 container.onCreateRouteResponseReceived(pseudoSink.id, null, true); |
| 420 assertEquals(null, container.pseudoSinkSearchState_); | 402 assertEquals(null, container.pseudoSinkSearchState_); |
| 421 setTimeout(function() { | 403 setTimeout(function() { |
| 422 checkCurrentView(media_router.MediaRouterView.FILTER); | 404 checkCurrentView(media_router.MediaRouterView.FILTER); |
| 423 searchResults = | 405 searchResults = |
| 424 container.$$('#search-results').querySelectorAll('paper-item'); | 406 container.$$('#search-results').querySelectorAll('paper-item'); |
| 425 searchResults.forEach(function(sink) { | 407 searchResults.forEach(function(sink) { |
| 426 var spinner = sink.querySelector('paper-spinner'); | 408 var spinner = sink.querySelector('paper-spinner'); |
| 427 checkElementVisible(spinner, false); | 409 checkElementVisible(spinner, false); |
| 428 }); | 410 }); |
| 429 done(); | 411 done(); |
| 430 }); | 412 }); |
| 431 }); | 413 }); |
| 432 }); | 414 }); |
| 433 | 415 |
| 434 test('pseudo sink with empty domain is not shown', function(done) { | 416 test('pseudo sink with empty domain is not shown', function(done) { |
| 435 pseudoSink.domain = ''; | 417 pseudoSink.domain = ''; |
| 418 // Trigger |allSinks| observer to be called again with new pseudo sink |
| 419 // domain. |
| 420 container.allSinks = []; |
| 436 container.allSinks = fakeSinkListWithPseudoSink; | 421 container.allSinks = fakeSinkListWithPseudoSink; |
| 437 | 422 |
| 438 var searchInput = container.$['sink-search-input']; | 423 var searchInput = container.$$('#sink-search-input'); |
| 439 searchInput.value = foundSink.name; | 424 searchInput.value = foundSink.name; |
| 440 chainOnAnimationPromise(function() { | 425 chainOnAnimationPromise(function() { |
| 441 var noMatches = container.$$('#no-search-matches'); | 426 var noMatches = container.$$('#no-search-matches'); |
| 442 var searchResults = container.$$('#search-results'); | 427 var searchResults = container.$$('#search-results'); |
| 443 checkElementVisible(noMatches, true); | 428 checkElementVisible(noMatches, true); |
| 444 checkElementVisible(searchResults, false); | 429 checkElementVisible(searchResults, false); |
| 445 done(); | 430 done(); |
| 446 }); | 431 }); |
| 447 }); | 432 }); |
| 448 | 433 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 462 searchState.checkForRealSink(fakeSinkList.concat([foundSink]))); | 447 searchState.checkForRealSink(fakeSinkList.concat([foundSink]))); |
| 463 assertEquals(foundSink.id, searchState.checkForRealSink(fakeSinkList)); | 448 assertEquals(foundSink.id, searchState.checkForRealSink(fakeSinkList)); |
| 464 }); | 449 }); |
| 465 }); | 450 }); |
| 466 } | 451 } |
| 467 | 452 |
| 468 return { | 453 return { |
| 469 registerTests: registerTests, | 454 registerTests: registerTests, |
| 470 }; | 455 }; |
| 471 }); | 456 }); |
| OLD | NEW |