• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static android.media.MediaRouter.ROUTE_TYPE_LIVE_AUDIO;
4 import static android.media.MediaRouter.ROUTE_TYPE_LIVE_VIDEO;
5 import static android.os.Build.VERSION_CODES.N;
6 import static android.os.Build.VERSION_CODES.O;
7 import static com.google.common.truth.Truth.assertThat;
8 import static org.robolectric.Shadows.shadowOf;
9 
10 import android.app.Activity;
11 import android.content.Context;
12 import android.media.MediaRouter;
13 import android.media.MediaRouter.RouteInfo;
14 import androidx.test.core.app.ApplicationProvider;
15 import androidx.test.ext.junit.runners.AndroidJUnit4;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.junit.runner.RunWith;
19 import org.robolectric.Robolectric;
20 import org.robolectric.android.controller.ActivityController;
21 import org.robolectric.annotation.Config;
22 
23 /** Tests for {@link ShadowMediaRouter}. */
24 @RunWith(AndroidJUnit4.class)
25 public final class ShadowMediaRouterTest {
26   private MediaRouter mediaRouter;
27 
28   @Before
setUp()29   public void setUp() {
30     mediaRouter =
31         (MediaRouter)
32             ApplicationProvider.getApplicationContext()
33                 .getSystemService(Context.MEDIA_ROUTER_SERVICE);
34   }
35 
36   @Test
testAddBluetoothRoute_additionalRouteAvailable()37   public void testAddBluetoothRoute_additionalRouteAvailable() {
38     shadowOf(mediaRouter).addBluetoothRoute();
39     assertThat(mediaRouter.getRouteCount()).isEqualTo(2);
40   }
41 
42   @Test
testAddBluetoothRoute_bluetoothRouteSelected()43   public void testAddBluetoothRoute_bluetoothRouteSelected() {
44     shadowOf(mediaRouter).addBluetoothRoute();
45     RouteInfo bluetoothRoute = mediaRouter.getRouteAt(1);
46     assertThat(mediaRouter.getSelectedRoute(ROUTE_TYPE_LIVE_AUDIO)).isEqualTo(bluetoothRoute);
47   }
48 
49   @Test
testAddBluetoothRoute_checkBluetoothRouteProperties()50   public void testAddBluetoothRoute_checkBluetoothRouteProperties() {
51     shadowOf(mediaRouter).addBluetoothRoute();
52     RouteInfo bluetoothRoute = mediaRouter.getRouteAt(1);
53     assertThat(bluetoothRoute.getName().toString())
54         .isEqualTo(ShadowMediaRouter.BLUETOOTH_DEVICE_NAME);
55     assertThat(bluetoothRoute.getDescription().toString()).isEqualTo("Bluetooth audio");
56   }
57 
58   @Test
59   @Config(minSdk = N)
testAddBluetoothRoute_checkBluetoothRouteProperties_apiN()60   public void testAddBluetoothRoute_checkBluetoothRouteProperties_apiN() {
61     shadowOf(mediaRouter).addBluetoothRoute();
62     RouteInfo bluetoothRoute = mediaRouter.getRouteAt(1);
63     assertThat(bluetoothRoute.getDeviceType()).isEqualTo(RouteInfo.DEVICE_TYPE_BLUETOOTH);
64   }
65 
66   @Test
testSelectBluetoothRoute_getsSetAsSelectedRoute()67   public void testSelectBluetoothRoute_getsSetAsSelectedRoute() {
68     // Although this isn't something faked out by the shadow we should ensure that the Bluetooth
69     // route can be selected after it's been added.
70     shadowOf(mediaRouter).addBluetoothRoute();
71     RouteInfo bluetoothRoute = mediaRouter.getRouteAt(1);
72 
73     mediaRouter.selectRoute(ROUTE_TYPE_LIVE_AUDIO, bluetoothRoute);
74 
75     assertThat(mediaRouter.getSelectedRoute(ROUTE_TYPE_LIVE_AUDIO)).isEqualTo(bluetoothRoute);
76   }
77 
78   @Test
testRemoveBluetoothRoute_whenBluetoothSelected_defaultRouteAvailableAndSelected()79   public void testRemoveBluetoothRoute_whenBluetoothSelected_defaultRouteAvailableAndSelected() {
80     shadowOf(mediaRouter).addBluetoothRoute();
81 
82     shadowOf(mediaRouter).removeBluetoothRoute();
83 
84     assertThat(mediaRouter.getRouteCount()).isEqualTo(1);
85     assertThat(mediaRouter.getSelectedRoute(ROUTE_TYPE_LIVE_AUDIO))
86         .isEqualTo(mediaRouter.getDefaultRoute());
87   }
88 
89   @Test
testRemoveBluetoothRoute_whenDefaultSelected_defaultRouteAvailableAndSelected()90   public void testRemoveBluetoothRoute_whenDefaultSelected_defaultRouteAvailableAndSelected() {
91     shadowOf(mediaRouter).addBluetoothRoute();
92     RouteInfo bluetoothRoute = mediaRouter.getRouteAt(1);
93     mediaRouter.selectRoute(ROUTE_TYPE_LIVE_AUDIO, bluetoothRoute);
94 
95     shadowOf(mediaRouter).removeBluetoothRoute();
96 
97     assertThat(mediaRouter.getRouteCount()).isEqualTo(1);
98     assertThat(mediaRouter.getSelectedRoute(ROUTE_TYPE_LIVE_AUDIO))
99         .isEqualTo(mediaRouter.getDefaultRoute());
100   }
101 
102   @Test
testIsBluetoothRouteSelected_bluetoothRouteNotAdded_returnsFalse()103   public void testIsBluetoothRouteSelected_bluetoothRouteNotAdded_returnsFalse() {
104     assertThat(shadowOf(mediaRouter).isBluetoothRouteSelected(ROUTE_TYPE_LIVE_AUDIO)).isFalse();
105   }
106 
107   @Test
testIsBluetoothRouteSelected_bluetoothRouteAddedButNotSelected_returnsFalse()108   public void testIsBluetoothRouteSelected_bluetoothRouteAddedButNotSelected_returnsFalse() {
109     shadowOf(mediaRouter).addBluetoothRoute();
110     mediaRouter.selectRoute(ROUTE_TYPE_LIVE_AUDIO, mediaRouter.getDefaultRoute());
111     assertThat(shadowOf(mediaRouter).isBluetoothRouteSelected(ROUTE_TYPE_LIVE_AUDIO)).isFalse();
112   }
113 
114   @Test
testIsBluetoothRouteSelected_bluetoothRouteSelectedForDifferentType_returnsFalse()115   public void testIsBluetoothRouteSelected_bluetoothRouteSelectedForDifferentType_returnsFalse() {
116     shadowOf(mediaRouter).addBluetoothRoute();
117     RouteInfo bluetoothRoute = mediaRouter.getRouteAt(1);
118 
119     // Select the Bluetooth route for AUDIO and the default route for AUDIO.
120     mediaRouter.selectRoute(ROUTE_TYPE_LIVE_AUDIO, bluetoothRoute);
121     mediaRouter.selectRoute(ROUTE_TYPE_LIVE_VIDEO, mediaRouter.getDefaultRoute());
122 
123     assertThat(shadowOf(mediaRouter).isBluetoothRouteSelected(ROUTE_TYPE_LIVE_VIDEO)).isFalse();
124   }
125 
126   @Test
testIsBluetoothRouteSelected_bluetoothRouteSelected_returnsTrue()127   public void testIsBluetoothRouteSelected_bluetoothRouteSelected_returnsTrue() {
128     shadowOf(mediaRouter).addBluetoothRoute();
129     RouteInfo bluetoothRoute = mediaRouter.getRouteAt(1);
130     mediaRouter.selectRoute(ROUTE_TYPE_LIVE_AUDIO, bluetoothRoute);
131     assertThat(shadowOf(mediaRouter).isBluetoothRouteSelected(ROUTE_TYPE_LIVE_AUDIO)).isTrue();
132   }
133 
134   @Test
135   @Config(minSdk = O)
mediaRouter_activityContextEnabled_differentInstancesRetrieveDefaultRoute()136   public void mediaRouter_activityContextEnabled_differentInstancesRetrieveDefaultRoute() {
137     String originalProperty = System.getProperty("robolectric.createActivityContexts", "");
138     System.setProperty("robolectric.createActivityContexts", "true");
139     try (ActivityController<Activity> controller =
140         Robolectric.buildActivity(Activity.class).setup()) {
141       MediaRouter applicationMediaRouter =
142           (MediaRouter)
143               ApplicationProvider.getApplicationContext()
144                   .getSystemService(Context.MEDIA_ROUTER_SERVICE);
145 
146       Activity activity = controller.get();
147       MediaRouter activityMediaRouter =
148           (MediaRouter) activity.getSystemService(Context.MEDIA_ROUTER_SERVICE);
149 
150       assertThat(applicationMediaRouter).isNotSameInstanceAs(activityMediaRouter);
151 
152       MediaRouter.RouteInfo applicationDefaultRoute = applicationMediaRouter.getDefaultRoute();
153       MediaRouter.RouteInfo activityDefaultRoute = activityMediaRouter.getDefaultRoute();
154 
155       assertThat(activityDefaultRoute).isEqualTo(applicationDefaultRoute);
156     } finally {
157       System.setProperty("robolectric.createActivityContexts", originalProperty);
158     }
159   }
160 }
161