Index: chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallbackTest.java |
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallbackTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallbackTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dd469534d3c71048c403d666ececc2b4fa680c76 |
--- /dev/null |
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallbackTest.java |
@@ -0,0 +1,197 @@ |
+// 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. |
+ |
+package org.chromium.chrome.browser.media.router.cast; |
+ |
+import static org.chromium.chrome.browser.media.router.cast.TestUtils.createMockRouteInfo; |
+import static org.junit.Assert.assertNotNull; |
+import static org.mockito.Matchers.eq; |
+import static org.mockito.Mockito.mock; |
+import static org.mockito.Mockito.never; |
+import static org.mockito.Mockito.times; |
+import static org.mockito.Mockito.verify; |
+ |
+import org.chromium.base.test.util.Feature; |
+import org.chromium.chrome.browser.media.router.ChromeMediaRouterTestBase; |
+import org.chromium.chrome.browser.media.router.DiscoveryDelegate; |
+import org.chromium.testing.local.LocalRobolectricTestRunner; |
+import org.junit.Before; |
+import org.junit.Test; |
+import org.junit.runner.RunWith; |
+import org.robolectric.annotation.Config; |
+ |
+import java.util.ArrayList; |
+import java.util.List; |
+ |
+/** |
+ * Robolectric tests for DiscoveryCallback. |
+ */ |
+@RunWith(LocalRobolectricTestRunner.class) |
+@Config(manifest = Config.NONE, |
+ shadows = { ChromeMediaRouterTestBase.FakeActivityManager.class }) |
+public class DiscoveryCallbackTest extends ChromeMediaRouterTestBase { |
+ protected DiscoveryDelegate mDiscoveryDelegate; |
+ |
+ @Before |
+ public void setUp() { |
+ super.setUp(); |
+ mDiscoveryDelegate = mock(DiscoveryDelegate.class); |
+ assertNotNull(mDiscoveryDelegate); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testInitCallbackWithEmptyKnownSinks() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ verify(mDiscoveryDelegate).onSinksReceived(eq(SOURCE_ID1), eq(knownSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testInitCallbackWithNonemptyKnownSinks() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ MediaSink sink = new MediaSink(SINK_ID1, SINK_NAME1, null); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ verify(mDiscoveryDelegate).onSinksReceived(eq(SOURCE_ID1), eq(knownSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackAddOneSink() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ expectedSinks.add(new MediaSink(SINK_ID1, SINK_NAME1, null)); |
+ verify(mDiscoveryDelegate).onSinksReceived(eq(SOURCE_ID1), eq(expectedSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackAddTwoSinks() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID2, SINK_NAME2)); |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ expectedSinks.add(new MediaSink(SINK_ID1, SINK_NAME1, null)); |
+ expectedSinks.add(new MediaSink(SINK_ID2, SINK_NAME2, null)); |
+ verify(mDiscoveryDelegate).onSinksReceived(eq(SOURCE_ID1), eq(expectedSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackAddDuplicateSink() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ expectedSinks.add(new MediaSink(SINK_ID1, SINK_NAME1, null)); |
+ // Only expect one time. The duplicate add will not be notified. |
+ verify(mDiscoveryDelegate).onSinksReceived(eq(SOURCE_ID1), eq(expectedSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackRemoveSink() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ callback.onRouteRemoved(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ // One time for init, one time for remove. |
+ verify(mDiscoveryDelegate, times(2)).onSinksReceived(eq(SOURCE_ID1), eq(expectedSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackRemoveNonexistingSink() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ callback.onRouteRemoved(null, createMockRouteInfo(SINK_ID2, SINK_NAME2)); |
+ |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ // Only one time for init. |
+ verify(mDiscoveryDelegate, times(1)).onSinksReceived(eq(SOURCE_ID1), eq(expectedSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackAddSourceUrn() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ callback.addSourceUrn(SOURCE_ID2); |
+ |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ expectedSinks.add(new MediaSink(SINK_ID1, SINK_NAME1, null)); |
+ verify(mDiscoveryDelegate).onSinksReceived(eq(SOURCE_ID2), eq(expectedSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackAddDuplicateSourceUrn() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ callback.addSourceUrn(SOURCE_ID1); |
+ |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ expectedSinks.add(new MediaSink(SINK_ID1, SINK_NAME1, null)); |
+ // Only the one time after onRouteAdded(). |
+ verify(mDiscoveryDelegate).onSinksReceived(eq(SOURCE_ID1), eq(expectedSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackRemoveSourceUrn() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ callback.removeSourceUrn(SOURCE_ID1); |
+ |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ // Only the one time for init. |
+ verify(mDiscoveryDelegate).onSinksReceived(eq(SOURCE_ID1), eq(expectedSinks)); |
+ } |
+ |
+ @Test |
+ @Feature({"MediaRouter"}) |
+ public void testCallbackRemoveNonexistingSourceUrn() { |
+ List<MediaSink> knownSinks = new ArrayList<MediaSink>(); |
+ DiscoveryCallback callback = new DiscoveryCallback( |
+ SOURCE_ID1, knownSinks, mDiscoveryDelegate); |
+ |
+ callback.onRouteAdded(null, createMockRouteInfo(SINK_ID1, SINK_NAME1)); |
+ callback.removeSourceUrn(SOURCE_ID2); |
+ |
+ List<MediaSink> expectedSinks = new ArrayList<MediaSink>(); |
+ // Only the one time for init. |
+ verify(mDiscoveryDelegate, never()).onSinksReceived(eq(SOURCE_ID2), eq(expectedSinks)); |
+ } |
+} |