blob: 05f5fa0afc9e0c1c46b63e7c84ff07a386a38021 [file] [log] [blame]
hughchen61c1c9f2019-01-17 14:34:51 +08001/*
2 * Copyright 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settingslib.media;
18
19import static com.google.common.truth.Truth.assertThat;
20
21import static org.mockito.Mockito.mock;
22import static org.mockito.Mockito.verify;
23import static org.mockito.Mockito.when;
24
25import android.content.Context;
hughchene6a4f482019-10-18 17:34:15 +080026import android.media.MediaRoute2Info;
27import android.media.MediaRouter2Manager;
hughchendf7b8382020-02-03 17:48:49 +080028import android.media.RoutingSessionInfo;
hughchen61c1c9f2019-01-17 14:34:51 +080029
hughchen491b9fc2020-02-05 18:31:36 +080030import com.android.settingslib.bluetooth.LocalBluetoothManager;
31
hughchen61c1c9f2019-01-17 14:34:51 +080032import org.junit.Before;
33import org.junit.Test;
34import org.junit.runner.RunWith;
35import org.mockito.Mock;
36import org.mockito.MockitoAnnotations;
37import org.robolectric.RobolectricTestRunner;
38import org.robolectric.RuntimeEnvironment;
39
hughchene6a4f482019-10-18 17:34:15 +080040import java.util.ArrayList;
41import java.util.List;
42
hughchen61c1c9f2019-01-17 14:34:51 +080043@RunWith(RobolectricTestRunner.class)
44public class InfoMediaManagerTest {
45
46 private static final String TEST_PACKAGE_NAME = "com.test.packagename";
47 private static final String TEST_ID = "test_id";
48
49 @Mock
hughchene6a4f482019-10-18 17:34:15 +080050 private MediaRouter2Manager mRouterManager;
hughchen491b9fc2020-02-05 18:31:36 +080051 @Mock
52 private LocalBluetoothManager mLocalBluetoothManager;
hughchen61c1c9f2019-01-17 14:34:51 +080053
54 private InfoMediaManager mInfoMediaManager;
55 private Context mContext;
56
57 @Before
58 public void setUp() {
59 MockitoAnnotations.initMocks(this);
60 mContext = RuntimeEnvironment.application;
61
hughchen491b9fc2020-02-05 18:31:36 +080062 mInfoMediaManager =
63 new InfoMediaManager(mContext, TEST_PACKAGE_NAME, null, mLocalBluetoothManager);
hughchene6a4f482019-10-18 17:34:15 +080064 mInfoMediaManager.mRouterManager = mRouterManager;
hughchen61c1c9f2019-01-17 14:34:51 +080065 }
66
67 @Test
68 public void stopScan_shouldRemoveCallback() {
69 mInfoMediaManager.stopScan();
70
hughchene6a4f482019-10-18 17:34:15 +080071 verify(mRouterManager).unregisterCallback(mInfoMediaManager.mMediaRouterCallback);
hughchen61c1c9f2019-01-17 14:34:51 +080072 }
73
74 @Test
75 public void startScan_shouldAddCallback() {
76 mInfoMediaManager.startScan();
77
hughchene6a4f482019-10-18 17:34:15 +080078 verify(mRouterManager).registerCallback(mInfoMediaManager.mExecutor,
79 mInfoMediaManager.mMediaRouterCallback);
hughchen61c1c9f2019-01-17 14:34:51 +080080 }
81
82 @Test
hughchen0d202042020-01-17 18:30:03 +080083 public void onRouteAdded_getAvailableRoutes_shouldAddMediaDevice() {
hughchene6a4f482019-10-18 17:34:15 +080084 final MediaRoute2Info info = mock(MediaRoute2Info.class);
hughchen61c1c9f2019-01-17 14:34:51 +080085 when(info.getId()).thenReturn(TEST_ID);
hughchene6a4f482019-10-18 17:34:15 +080086 when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
87
88 final List<MediaRoute2Info> routes = new ArrayList<>();
89 routes.add(info);
90 when(mRouterManager.getAvailableRoutes(TEST_PACKAGE_NAME)).thenReturn(routes);
hughchen61c1c9f2019-01-17 14:34:51 +080091
92 final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
93 assertThat(mediaDevice).isNull();
94
hughchene6a4f482019-10-18 17:34:15 +080095 mInfoMediaManager.mMediaRouterCallback.onRoutesAdded(routes);
hughchen61c1c9f2019-01-17 14:34:51 +080096
97 final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
98 assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
hughchene6a4f482019-10-18 17:34:15 +080099 assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice);
100 assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
hughchen61c1c9f2019-01-17 14:34:51 +0800101 }
102
103 @Test
hughchen0d202042020-01-17 18:30:03 +0800104 public void onRouteAdded_buildAllRoutes_shouldAddMediaDevice() {
105 final MediaRoute2Info info = mock(MediaRoute2Info.class);
106 when(info.getId()).thenReturn(TEST_ID);
107 when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
108
109 final List<MediaRoute2Info> routes = new ArrayList<>();
110 routes.add(info);
111 when(mRouterManager.getAllRoutes()).thenReturn(routes);
112
113 final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
114 assertThat(mediaDevice).isNull();
115
116 mInfoMediaManager.mPackageName = "";
117 mInfoMediaManager.mMediaRouterCallback.onRoutesAdded(routes);
118
119 final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
120 assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
121 assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
122 }
123
124 @Test
hughchene6a4f482019-10-18 17:34:15 +0800125 public void onControlCategoriesChanged_samePackageName_shouldAddMediaDevice() {
126 final MediaRoute2Info info = mock(MediaRoute2Info.class);
hughchen61c1c9f2019-01-17 14:34:51 +0800127 when(info.getId()).thenReturn(TEST_ID);
hughchene6a4f482019-10-18 17:34:15 +0800128 when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
129
130 final List<MediaRoute2Info> routes = new ArrayList<>();
131 routes.add(info);
132 when(mRouterManager.getAvailableRoutes(TEST_PACKAGE_NAME)).thenReturn(routes);
hughchen61c1c9f2019-01-17 14:34:51 +0800133
134 final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
hughchen61c1c9f2019-01-17 14:34:51 +0800135 assertThat(mediaDevice).isNull();
136
hughchene6a4f482019-10-18 17:34:15 +0800137 mInfoMediaManager.mMediaRouterCallback.onControlCategoriesChanged(TEST_PACKAGE_NAME, null);
hughchen61c1c9f2019-01-17 14:34:51 +0800138
hughchene6a4f482019-10-18 17:34:15 +0800139 final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
140 assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
141 assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice);
142 assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
143 }
144
145 @Test
146 public void onControlCategoriesChanged_differentPackageName_doNothing() {
147 mInfoMediaManager.mMediaRouterCallback.onControlCategoriesChanged("com.fake.play", null);
148
149 assertThat(mInfoMediaManager.mMediaDevices).hasSize(0);
hughchen61c1c9f2019-01-17 14:34:51 +0800150 }
hughchendf7b8382020-02-03 17:48:49 +0800151
152 @Test
153 public void onRoutesChanged_getAvailableRoutes_shouldAddMediaDevice() {
154 final MediaRoute2Info info = mock(MediaRoute2Info.class);
155 when(info.getId()).thenReturn(TEST_ID);
156 when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
157
158 final List<MediaRoute2Info> routes = new ArrayList<>();
159 routes.add(info);
160 when(mRouterManager.getAvailableRoutes(TEST_PACKAGE_NAME)).thenReturn(routes);
161
162 final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
163 assertThat(mediaDevice).isNull();
164
165 mInfoMediaManager.mMediaRouterCallback.onRoutesChanged(routes);
166
167 final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
168 assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
169 assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice);
170 assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
171 }
172
173 @Test
174 public void onRoutesChanged_buildAllRoutes_shouldAddMediaDevice() {
175 final MediaRoute2Info info = mock(MediaRoute2Info.class);
176 when(info.getId()).thenReturn(TEST_ID);
177 when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
178
179 final List<MediaRoute2Info> routes = new ArrayList<>();
180 routes.add(info);
181 when(mRouterManager.getAllRoutes()).thenReturn(routes);
182
183 final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
184 assertThat(mediaDevice).isNull();
185
186 mInfoMediaManager.mPackageName = "";
187 mInfoMediaManager.mMediaRouterCallback.onRoutesChanged(routes);
188
189 final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
190 assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
191 assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
192 }
193
194 @Test
195 public void connectDeviceWithoutPackageName_noSession_returnFalse() {
196 final MediaRoute2Info info = mock(MediaRoute2Info.class);
197 final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, info,
198 TEST_PACKAGE_NAME);
199
200 final List<RoutingSessionInfo> infos = new ArrayList<>();
201
202 when(mRouterManager.getActiveSessions()).thenReturn(infos);
203
204 assertThat(mInfoMediaManager.connectDeviceWithoutPackageName(device)).isFalse();
205 }
hughchen61c1c9f2019-01-17 14:34:51 +0800206}