blob: efcbb769cbf06cdd153692e8c9e9301b05b5075d [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;
25import android.support.test.filters.SmallTest;
26import android.testing.AndroidTestingRunner;
27import android.testing.TestableLooper;
28
Jason Monkfa452ef2018-12-26 17:26:10 -050029import androidx.lifecycle.LifecycleOwner;
30
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
49
50@RunWith(AndroidTestingRunner.class)
51@TestableLooper.RunWithLooper
52@SmallTest
53public class CastTileTest extends SysuiTestCase {
54
55 @Mock
56 private CastController mController;
57 @Mock
58 private ActivityStarter mActivityStarter;
59 @Mock
60 private KeyguardMonitor mKeyguard;
61 @Mock
62 private NetworkController mNetworkController;
63 @Mock
64 private QSTileHost mHost;
65 @Mock
66 NetworkController.SignalCallback mCallback;
67
68 private TestableLooper mTestableLooper;
69 private CastTile mCastTile;
70
71 @Before
72 public void setUp() throws Exception {
73 MockitoAnnotations.initMocks(this);
74 mTestableLooper = TestableLooper.get(this);
75
76 mDependency.injectTestDependency(Dependency.BG_LOOPER, mTestableLooper.getLooper());
77 mController = mDependency.injectMockDependency(CastController.class);
78 mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class);
79 mKeyguard = mDependency.injectMockDependency(KeyguardMonitor.class);
80 mNetworkController = mDependency.injectMockDependency(NetworkController.class);
81
82 when(mHost.getContext()).thenReturn(mContext);
83
Jason Monkc0e0e2b2018-12-26 16:47:41 -050084 mCastTile = new CastTile(mHost, mController, mKeyguard, mNetworkController,
85 mActivityStarter);
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040086
87 // We are not setting the mocks to listening, so we trigger a first refresh state to
88 // set the initial state
89 mCastTile.refreshState();
90
91 mCastTile.handleSetListening(true);
92 ArgumentCaptor<NetworkController.SignalCallback> signalCallbackArgumentCaptor =
93 ArgumentCaptor.forClass(NetworkController.SignalCallback.class);
Jason Monkfa452ef2018-12-26 17:26:10 -050094 verify(mNetworkController).observe(any(LifecycleOwner.class),
95 signalCallbackArgumentCaptor.capture());
Fabian Kozynski4235b2a2018-10-04 17:46:59 -040096 mCallback = signalCallbackArgumentCaptor.getValue();
97
98 }
99
100 @Test
101 public void testStateUnavailable_wifiDisabled() {
102 NetworkController.IconState qsIcon =
103 new NetworkController.IconState(false, 0, "");
104 mCallback.setWifiIndicators(false, mock(NetworkController.IconState.class),
105 qsIcon, false,false, "",
106 false, "");
107 mTestableLooper.processAllMessages();
108
109 assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state);
110 }
111
112 @Test
113 public void testStateUnavailable_wifiNotConnected() {
114 NetworkController.IconState qsIcon =
115 new NetworkController.IconState(false, 0, "");
116 mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class),
117 qsIcon, false,false, "",
118 false, "");
119 mTestableLooper.processAllMessages();
120
121 assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state);
122 }
123
124 @Test
125 public void testStateActive_wifiEnabledAndCasting() {
126 CastController.CastDevice device = mock(CastController.CastDevice.class);
127 device.state = CastController.CastDevice.STATE_CONNECTED;
128 Set<CastController.CastDevice> devices = new HashSet<>();
129 devices.add(device);
130 when(mController.getCastDevices()).thenReturn(devices);
131
132 NetworkController.IconState qsIcon =
133 new NetworkController.IconState(true, 0, "");
134 mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class),
135 qsIcon, false,false, "",
136 false, "");
137 mTestableLooper.processAllMessages();
138
139 assertEquals(Tile.STATE_ACTIVE, mCastTile.getState().state);
140 }
141
142 @Test
143 public void testStateInactive_wifiEnabledNotCasting() {
144 NetworkController.IconState qsIcon =
145 new NetworkController.IconState(true, 0, "");
146 mCallback.setWifiIndicators(true, mock(NetworkController.IconState.class),
147 qsIcon, false,false, "",
148 false, "");
149 mTestableLooper.processAllMessages();
150
151 assertEquals(Tile.STATE_INACTIVE, mCastTile.getState().state);
152 }
153}