blob: ea8d4b2f8f60d8c84ef073ebc79264e5e719d9a0 [file] [log] [blame]
Fabian Kozynski4235b2a2018-10-04 17:46:59 -04001/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.systemui.qs.tiles;
16
17import static junit.framework.TestCase.assertEquals;
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040018
Jason Monkfa452ef2018-12-26 17:26:10 -050019import static org.mockito.Mockito.any;
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040020import static org.mockito.Mockito.mock;
21import static org.mockito.Mockito.verify;
22import static org.mockito.Mockito.when;
23
24import android.service.quicksettings.Tile;
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040025import android.testing.AndroidTestingRunner;
26import android.testing.TestableLooper;
27
Jason Monkfa452ef2018-12-26 17:26:10 -050028import androidx.lifecycle.LifecycleOwner;
Brett Chabot84151d92019-02-27 15:37:59 -080029import androidx.test.filters.SmallTest;
Jason Monkfa452ef2018-12-26 17:26:10 -050030
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040031import com.android.systemui.Dependency;
32import com.android.systemui.SysuiTestCase;
33import com.android.systemui.plugins.ActivityStarter;
34import com.android.systemui.qs.QSTileHost;
35import com.android.systemui.statusbar.policy.CastController;
36import com.android.systemui.statusbar.policy.KeyguardMonitor;
37import com.android.systemui.statusbar.policy.NetworkController;
38
39import org.junit.Before;
40import org.junit.Test;
41import org.junit.runner.RunWith;
42import org.mockito.ArgumentCaptor;
43import org.mockito.Mock;
44import org.mockito.MockitoAnnotations;
45
46import java.util.HashSet;
47import java.util.Set;
48
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040049@RunWith(AndroidTestingRunner.class)
50@TestableLooper.RunWithLooper
51@SmallTest
52public class CastTileTest extends SysuiTestCase {
53
54 @Mock
55 private CastController mController;
56 @Mock
57 private ActivityStarter mActivityStarter;
58 @Mock
59 private KeyguardMonitor mKeyguard;
60 @Mock
61 private NetworkController mNetworkController;
62 @Mock
63 private QSTileHost mHost;
64 @Mock
65 NetworkController.SignalCallback mCallback;
66
67 private TestableLooper mTestableLooper;
68 private CastTile mCastTile;
69
70 @Before
71 public void setUp() throws Exception {
72 MockitoAnnotations.initMocks(this);
73 mTestableLooper = TestableLooper.get(this);
74
75 mDependency.injectTestDependency(Dependency.BG_LOOPER, mTestableLooper.getLooper());
76 mController = mDependency.injectMockDependency(CastController.class);
77 mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class);
78 mKeyguard = mDependency.injectMockDependency(KeyguardMonitor.class);
79 mNetworkController = mDependency.injectMockDependency(NetworkController.class);
80
81 when(mHost.getContext()).thenReturn(mContext);
82
Jason Monkc0e0e2b2018-12-26 16:47:41 -050083 mCastTile = new CastTile(mHost, mController, mKeyguard, mNetworkController,
84 mActivityStarter);
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040085
86 // We are not setting the mocks to listening, so we trigger a first refresh state to
87 // set the initial state
88 mCastTile.refreshState();
89
90 mCastTile.handleSetListening(true);
91 ArgumentCaptor<NetworkController.SignalCallback> signalCallbackArgumentCaptor =
92 ArgumentCaptor.forClass(NetworkController.SignalCallback.class);
Jason Monkfa452ef2018-12-26 17:26:10 -050093 verify(mNetworkController).observe(any(LifecycleOwner.class),
94 signalCallbackArgumentCaptor.capture());
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040095 mCallback = signalCallbackArgumentCaptor.getValue();
96
97 }
98
99 @Test
100 public void testStateUnavailable_wifiDisabled() {
101 NetworkController.IconState qsIcon =
102 new NetworkController.IconState(false, 0, "");
103 mCallback.setWifiIndicators(false, mock(NetworkController.IconState.class),
104 qsIcon, false,false, "",
105 false, "");
106 mTestableLooper.processAllMessages();
107
108 assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state);
109 }
110
111 @Test
112 public void testStateUnavailable_wifiNotConnected() {
113 NetworkController.IconState qsIcon =
114 new NetworkController.IconState(false, 0, "");
115 mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class),
116 qsIcon, false,false, "",
117 false, "");
118 mTestableLooper.processAllMessages();
119
120 assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state);
121 }
122
123 @Test
124 public void testStateActive_wifiEnabledAndCasting() {
125 CastController.CastDevice device = mock(CastController.CastDevice.class);
126 device.state = CastController.CastDevice.STATE_CONNECTED;
127 Set<CastController.CastDevice> devices = new HashSet<>();
128 devices.add(device);
129 when(mController.getCastDevices()).thenReturn(devices);
130
131 NetworkController.IconState qsIcon =
132 new NetworkController.IconState(true, 0, "");
133 mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class),
134 qsIcon, false,false, "",
135 false, "");
136 mTestableLooper.processAllMessages();
137
138 assertEquals(Tile.STATE_ACTIVE, mCastTile.getState().state);
139 }
140
141 @Test
142 public void testStateInactive_wifiEnabledNotCasting() {
143 NetworkController.IconState qsIcon =
144 new NetworkController.IconState(true, 0, "");
145 mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class),
146 qsIcon, false,false, "",
147 false, "");
148 mTestableLooper.processAllMessages();
149
150 assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state);
151 }
152}