blob: 67f6dd90384112910652e5b438fd5908a2ae4944 [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;
hughchen61c1c9f2019-01-17 14:34:51 +080028
29import org.junit.Before;
30import org.junit.Test;
31import org.junit.runner.RunWith;
32import org.mockito.Mock;
33import org.mockito.MockitoAnnotations;
34import org.robolectric.RobolectricTestRunner;
35import org.robolectric.RuntimeEnvironment;
36
hughchene6a4f482019-10-18 17:34:15 +080037import java.util.ArrayList;
38import java.util.List;
39
hughchen61c1c9f2019-01-17 14:34:51 +080040@RunWith(RobolectricTestRunner.class)
41public class InfoMediaManagerTest {
42
43 private static final String TEST_PACKAGE_NAME = "com.test.packagename";
44 private static final String TEST_ID = "test_id";
45
46 @Mock
hughchene6a4f482019-10-18 17:34:15 +080047 private MediaRouter2Manager mRouterManager;
hughchen61c1c9f2019-01-17 14:34:51 +080048
49 private InfoMediaManager mInfoMediaManager;
50 private Context mContext;
51
52 @Before
53 public void setUp() {
54 MockitoAnnotations.initMocks(this);
55 mContext = RuntimeEnvironment.application;
56
57 mInfoMediaManager = new InfoMediaManager(mContext, TEST_PACKAGE_NAME, null);
hughchene6a4f482019-10-18 17:34:15 +080058 mInfoMediaManager.mRouterManager = mRouterManager;
hughchen61c1c9f2019-01-17 14:34:51 +080059 }
60
61 @Test
62 public void stopScan_shouldRemoveCallback() {
63 mInfoMediaManager.stopScan();
64
hughchene6a4f482019-10-18 17:34:15 +080065 verify(mRouterManager).unregisterCallback(mInfoMediaManager.mMediaRouterCallback);
hughchen61c1c9f2019-01-17 14:34:51 +080066 }
67
68 @Test
69 public void startScan_shouldAddCallback() {
70 mInfoMediaManager.startScan();
71
hughchene6a4f482019-10-18 17:34:15 +080072 verify(mRouterManager).registerCallback(mInfoMediaManager.mExecutor,
73 mInfoMediaManager.mMediaRouterCallback);
hughchen61c1c9f2019-01-17 14:34:51 +080074 }
75
76 @Test
hughchene6a4f482019-10-18 17:34:15 +080077 public void onRouteAdded_shouldAddMediaDevice() {
78 final MediaRoute2Info info = mock(MediaRoute2Info.class);
hughchen61c1c9f2019-01-17 14:34:51 +080079 when(info.getId()).thenReturn(TEST_ID);
hughchene6a4f482019-10-18 17:34:15 +080080 when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
81
82 final List<MediaRoute2Info> routes = new ArrayList<>();
83 routes.add(info);
84 when(mRouterManager.getAvailableRoutes(TEST_PACKAGE_NAME)).thenReturn(routes);
hughchen61c1c9f2019-01-17 14:34:51 +080085
86 final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
87 assertThat(mediaDevice).isNull();
88
hughchene6a4f482019-10-18 17:34:15 +080089 mInfoMediaManager.mMediaRouterCallback.onRoutesAdded(routes);
hughchen61c1c9f2019-01-17 14:34:51 +080090
91 final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
92 assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
hughchene6a4f482019-10-18 17:34:15 +080093 assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice);
94 assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
hughchen61c1c9f2019-01-17 14:34:51 +080095 }
96
97 @Test
hughchene6a4f482019-10-18 17:34:15 +080098 public void onControlCategoriesChanged_samePackageName_shouldAddMediaDevice() {
99 final MediaRoute2Info info = mock(MediaRoute2Info.class);
hughchen61c1c9f2019-01-17 14:34:51 +0800100 when(info.getId()).thenReturn(TEST_ID);
hughchene6a4f482019-10-18 17:34:15 +0800101 when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
102
103 final List<MediaRoute2Info> routes = new ArrayList<>();
104 routes.add(info);
105 when(mRouterManager.getAvailableRoutes(TEST_PACKAGE_NAME)).thenReturn(routes);
hughchen61c1c9f2019-01-17 14:34:51 +0800106
107 final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
hughchen61c1c9f2019-01-17 14:34:51 +0800108 assertThat(mediaDevice).isNull();
109
hughchene6a4f482019-10-18 17:34:15 +0800110 mInfoMediaManager.mMediaRouterCallback.onControlCategoriesChanged(TEST_PACKAGE_NAME, null);
hughchen61c1c9f2019-01-17 14:34:51 +0800111
hughchene6a4f482019-10-18 17:34:15 +0800112 final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
113 assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
114 assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(infoDevice);
115 assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
116 }
117
118 @Test
119 public void onControlCategoriesChanged_differentPackageName_doNothing() {
120 mInfoMediaManager.mMediaRouterCallback.onControlCategoriesChanged("com.fake.play", null);
121
122 assertThat(mInfoMediaManager.mMediaDevices).hasSize(0);
hughchen61c1c9f2019-01-17 14:34:51 +0800123 }
124}