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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/webui/media_router/media_router_container_search_tests.js
diff --git a/chrome/test/data/webui/media_router/media_router_container_search_tests.js b/chrome/test/data/webui/media_router/media_router_container_search_tests.js
new file mode 100644
index 0000000000000000000000000000000000000000..92dab09355e77918034e7070baf118ecfe432144
--- /dev/null
+++ b/chrome/test/data/webui/media_router/media_router_container_search_tests.js
@@ -0,0 +1,303 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/** @fileoverview Suite of tests for media-router-container that focus on
+ * the MRPM search feature.
+ */
+cr.define('media_router_container_search', function() {
+ function registerTests() {
+ suite('MediaRouterContainerSearch', function() {
+
+ /**
+ * Checks whether |view| matches the current view of |container|.
+ *
+ * @param {!media_router.MediaRouterView} view Expected view type.
+ */
+ var checkCurrentView;
+
+ /**
+ * Checks whether an element is visible. An element is visible if it
+ * exists, does not have its |hidden| property set, and its |display|
+ * property is not 'none'.
+ *
+ * @param {Element} element The element to test.
+ * @param {boolean} visible Whether the element should be visible.
+ */
+ var checkElementVisible = function(element, visible) {
+ assertEquals(visible,
+ !!element && !element.hidden && element.style.display != 'none');
+ };
+
+ /**
+ * Media Router Container created before each test.
+ * @type {?MediaRouterContainer}
+ */
+ var container;
+
+ /**
+ * The list of available sinks.
+ * @type {!Array<!media_router.Sink>}
+ */
+ var fakeSinkList = [];
+
+ /**
+ * The list of available sinks plus the pseudo sink.
+ * @type {!Array<!media_router.Sink>}
+ */
+ var fakeSinkListWithPseudoSink = [];
+
+ /**
+ * Sink returned by search.
+ * @type {media_router.Sink}
+ */
+ var foundSink = null;
+
+ /**
+ * Example pseudo sink.
+ * @type {media_router.Sink}
+ */
+ var pseudoSink = null;
+
+ // Import media_router_container.html before running suite.
+ suiteSetup(function() {
+ return PolymerTest.importHtml(
+ 'chrome://media-router/elements/media_router_container/' +
+ 'media_router_container.html');
+ });
+
+ setup(function(done) {
+ PolymerTest.clearBody();
+ // Initialize a media-router-container before each test.
+ container = document.createElement('media-router-container');
+ document.body.appendChild(container);
+
+ // Get common functions and variables.
+ var test_base = media_router_container_test_base.init(container);
+
+ checkCurrentView = test_base.checkCurrentView;
+ fakeSinkList = test_base.fakeSinkList;
+
+ pseudoSink = new media_router.Sink(
+ 'pseudo:test', '', null, 'domain.com',
+ media_router.SinkIconType.CAST, undefined,
+ test_base.castModeBitset);
+ pseudoSink.isPseudoSink = true;
+ foundSink = new media_router.Sink(
+ 'found sink id', 'no existing sink', null, pseudoSink.domain,
+ pseudoSink.iconType, undefined, pseudoSink.castModes);
+ fakeSinkListWithPseudoSink = fakeSinkList.concat([pseudoSink]);
+
+ setTimeout(done);
+ });
+
+ test('pseudo sink hidden without filter input', function(done) {
+ container.allSinks = fakeSinkListWithPseudoSink;
+
+ setTimeout(function() {
+ var sinkList =
+ container.$['sink-list'].querySelectorAll('paper-item');
+ assertEquals(fakeSinkList.length, sinkList.length);
+ MockInteractions.tap(container.$['sink-search-icon']);
+ setTimeout(function() {
+ var searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ assertEquals(fakeSinkList.length, searchResults.length);
+ done();
+ });
+ });
+ });
+
+ test('filter input adds pseudo sink', function(done) {
+ container.allSinks = fakeSinkListWithPseudoSink;
+
+ var searchInput = container.$['sink-search-input'];
+ searchInput.value = 'no existing sink';
+ setTimeout(function() {
+ var searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ assertEquals(1, searchResults.length);
+ var item =
+ container.$$('#searchResults').itemForElement(searchResults[0]);
+ assertEquals(pseudoSink.id, item.sinkItem.id);
+ done();
+ });
+ });
+
+ test('filter exact match real sink hides pseudo sink', function(done) {
+ container.allSinks = fakeSinkListWithPseudoSink;
+
+ var searchInput = container.$['sink-search-input'];
+ searchInput.value = fakeSinkList[0].name;
+ setTimeout(function() {
+ var searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ assertEquals(1, searchResults.length);
+ var item =
+ container.$$('#searchResults').itemForElement(searchResults[0]);
+ assertEquals(fakeSinkList[0].id, item.sinkItem.id);
+ done();
+ });
+ });
+
+ test('clicking pseudo sink starts search', function(done) {
+ container.allSinks = fakeSinkListWithPseudoSink;
+
+ var searchInput = container.$['sink-search-input'];
+ searchInput.value = 'no existing sink';
+ setTimeout(function() {
+ var searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ container.addEventListener(
+ 'search-sinks-and-create-route', function(data) {
+ assertEquals(pseudoSink.id, data.detail.id);
+ assertEquals(pseudoSink.name, data.detail.name);
+ assertEquals(pseudoSink.domain, data.detail.domain);
+ done();
+ });
+ MockInteractions.tap(searchResults[0]);
+ });
+ });
+
+ test('spinner starts on pseudo sink', function(done) {
+ container.allSinks = fakeSinkListWithPseudoSink;
+
+ var searchInput = container.$['sink-search-input'];
+ searchInput.value = foundSink.name;
+ setTimeout(function() {
+ var searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ MockInteractions.tap(searchResults[0]);
+ setTimeout(function() {
+ searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ assertEquals(1, searchResults.length);
+ var item =
+ container.$$('#searchResults').itemForElement(searchResults[0]);
+ assertEquals(pseudoSink.id, item.sinkItem.id);
+ var spinner = searchResults[0].querySelector('paper-spinner');
+ checkElementVisible(spinner, true);
+ done();
+ });
+ });
+ });
+
+ test('onReceiveSearchResult updates spinner', function(done) {
+ container.allSinks = fakeSinkListWithPseudoSink;
+
+ var searchInput = container.$['sink-search-input'];
+ searchInput.value = foundSink.name;
+ setTimeout(function() {
+ var searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ MockInteractions.tap(searchResults[0]);
+ container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
+ container.onReceiveSearchResult(foundSink.id);
+ setTimeout(function() {
+ searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ assertEquals(1, searchResults.length);
+ var item =
+ container.$$('#searchResults').itemForElement(searchResults[0]);
+ assertEquals(foundSink.id, item.sinkItem.id);
+ var spinner = searchResults[0].querySelector('paper-spinner');
+ checkElementVisible(spinner, true);
+ done();
+ });
+ });
+ });
+
+ test('sink list updates spinner', function(done) {
+ container.allSinks = fakeSinkListWithPseudoSink;
+
+ var searchInput = container.$['sink-search-input'];
+ searchInput.value = foundSink.name;
+ setTimeout(function() {
+ var searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ MockInteractions.tap(searchResults[0]);
+ setTimeout(function() {
+ container.onReceiveSearchResult(foundSink.id);
+ container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
+ setTimeout(function() {
+ searchResults = container.$$('#search-results')
+ .querySelectorAll('paper-item');
+ assertEquals(1, searchResults.length);
+ var item = container.$$('#searchResults')
+ .itemForElement(searchResults[0]);
+ assertEquals(foundSink.id, item.sinkItem.id);
+ var spinner = searchResults[0].querySelector('paper-spinner');
+ checkElementVisible(spinner, true);
+ done();
+ });
+ });
+ });
+ });
+
+ test('route received clears spinner and search state', function(done) {
+ route = new media_router.Route(
+ 'id 1', foundSink.id, 'Title 1', 0, true, false);
+ container.allSinks = fakeSinkListWithPseudoSink;
+
+ var searchInput = container.$['sink-search-input'];
+ searchInput.value = foundSink.name;
+ setTimeout(function() {
+ var searchResults =
+ container.$$('#search-results').querySelectorAll('paper-item');
+ MockInteractions.tap(searchResults[0]);
+ container.allSinks = fakeSinkListWithPseudoSink.concat([foundSink]);
+ container.onReceiveSearchResult(foundSink.id);
+ container.onCreateRouteResponseReceived(pseudoSink.id, route, true);
+ assertEquals(null, container.pseudoSinkSearchState_);
+ setTimeout(function() {
+ checkCurrentView(media_router.MediaRouterView.ROUTE_DETAILS);
+ MockInteractions.tap(
+ container.$['container-header'].$['back-button']);
+ setTimeout(function() {
+ checkCurrentView(media_router.MediaRouterView.SINK_LIST);
+ sinkList =
+ container.$['sink-list'].querySelectorAll('paper-item');
+ sinkList.forEach(function(sink) {
+ var spinner = sink.querySelector('paper-spinner');
+ checkElementVisible(spinner, false);
+ });
+ done();
+ });
+ });
+ });
+ });
+
+ test('pseudo sink search state launching sink id', function() {
+ var searchState = new PseudoSinkSearchState(pseudoSink);
+
+ assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
+ searchState.checkForRealSink(fakeSinkList);
+ assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
+ searchState.checkForRealSink(fakeSinkList.concat([foundSink]));
+ assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
+
+ searchState.receiveSinkResponse(foundSink.id);
+ assertEquals(pseudoSink.id, searchState.getCurrentLaunchingSinkId());
+ searchState.checkForRealSink(fakeSinkList.concat([foundSink]));
+ assertEquals(foundSink.id, searchState.getCurrentLaunchingSinkId());
+ searchState.checkForRealSink(fakeSinkList);
+ assertEquals(foundSink.id, searchState.getCurrentLaunchingSinkId());
+ });
+
+ test('pseudo sink search state map sink id', function() {
+ var searchState = new PseudoSinkSearchState(pseudoSink);
+ var someId = 'some sink id';
+
+ assertEquals(someId, searchState.mapRouteSinkId(someId));
+ assertEquals('', searchState.mapRouteSinkId(pseudoSink.id));
+ searchState.receiveSinkResponse(foundSink.id);
+ assertEquals(someId, searchState.mapRouteSinkId(someId));
+ assertEquals(foundSink.id, searchState.mapRouteSinkId(pseudoSink.id));
+ });
+ });
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
+ }
+
+ return {
+ registerTests: registerTests,
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698