• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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 
17 package com.android.settings.wifi;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static org.mockito.ArgumentMatchers.any;
22 import static org.mockito.ArgumentMatchers.anyInt;
23 import static org.mockito.Mockito.doNothing;
24 import static org.mockito.Mockito.doReturn;
25 import static org.mockito.Mockito.spy;
26 import static org.mockito.Mockito.times;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
29 
30 import android.content.BroadcastReceiver;
31 import android.content.Context;
32 import android.content.Intent;
33 import android.content.IntentFilter;
34 import android.net.ConnectivityManager;
35 import android.net.NetworkRequest;
36 import android.net.NetworkScoreManager;
37 import android.net.wifi.WifiManager;
38 import android.os.Handler;
39 
40 import androidx.preference.Preference.OnPreferenceChangeListener;
41 import androidx.preference.PreferenceScreen;
42 
43 import com.android.settings.testutils.FakeFeatureFactory;
44 import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
45 import com.android.settingslib.PrimarySwitchPreference;
46 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
47 
48 import org.junit.Before;
49 import org.junit.Test;
50 import org.junit.runner.RunWith;
51 import org.mockito.Mock;
52 import org.mockito.MockitoAnnotations;
53 import org.robolectric.RobolectricTestRunner;
54 import org.robolectric.RuntimeEnvironment;
55 import org.robolectric.annotation.Config;
56 
57 @RunWith(RobolectricTestRunner.class)
58 @Config(shadows = ShadowRestrictedLockUtilsInternal.class)
59 public class WifiPrimarySwitchPreferenceControllerTest {
60 
61     @Mock
62     private Intent mIntentReceiver;
63     @Mock
64     private WifiManager mWifiManager;
65     @Mock
66     private PreferenceScreen mScreen;
67     @Mock
68     private PrimarySwitchPreference mPreference;
69     @Mock
70     private ConnectivityManager mConnectivityManager;
71     @Mock
72     private NetworkScoreManager mNetworkScoreManager;
73 
74     private Context mContext;
75     private WifiPrimarySwitchPreferenceController mController;
76     private MetricsFeatureProvider mMetricsFeatureProvider;
77 
78     @Before
setUp()79     public void setUp() {
80         MockitoAnnotations.initMocks(this);
81         mMetricsFeatureProvider = FakeFeatureFactory.setupForTest().getMetricsFeatureProvider();
82         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
83         doReturn(mIntentReceiver).when(mContext)
84                 .registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class), anyInt());
85         doNothing().when(mContext).unregisterReceiver(any(BroadcastReceiver.class));
86         when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
87         when(mContext.getSystemService(NetworkScoreManager.class)).thenReturn(mNetworkScoreManager);
88         mController = new WifiPrimarySwitchPreferenceController(mContext, mMetricsFeatureProvider);
89         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
90         when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
91         when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
92     }
93 
94     @Test
testWifiPrimarySwitch_byDefault_shouldBeShown()95     public void testWifiPrimarySwitch_byDefault_shouldBeShown() {
96         assertThat(mController.isAvailable()).isTrue();
97     }
98 
99     @Test
100     @Config(qualifiers = "mcc999")
testWifiPrimarySwitch_ifDisabled_shouldNotBeShown()101     public void testWifiPrimarySwitch_ifDisabled_shouldNotBeShown() {
102         assertThat(mController.isAvailable()).isFalse();
103     }
104 
105     @Test
onResume_shouldRegisterCallback()106     public void onResume_shouldRegisterCallback() {
107         mController.onResume();
108 
109         verify(mContext).registerReceiver(
110                 any(BroadcastReceiver.class), any(IntentFilter.class), anyInt());
111         verify(mConnectivityManager).registerNetworkCallback(
112                 any(NetworkRequest.class),
113                 any(ConnectivityManager.NetworkCallback.class),
114                 any(Handler.class));
115     }
116 
117     @Test
onPause_shouldUnregisterCallback()118     public void onPause_shouldUnregisterCallback() {
119         mController.onResume();
120         mController.onPause();
121 
122         verify(mContext).unregisterReceiver(any(BroadcastReceiver.class));
123         verify(mConnectivityManager, times(2)).unregisterNetworkCallback(
124                 any(ConnectivityManager.NetworkCallback.class));
125     }
126 
127     @Test
onStart_shouldRegisterPreferenceChangeListener()128     public void onStart_shouldRegisterPreferenceChangeListener() {
129         mController.displayPreference(mScreen);
130         mController.onStart();
131 
132         verify(mPreference).setOnPreferenceChangeListener(any(OnPreferenceChangeListener.class));
133     }
134 
135     @Test
onStop_shouldRegisterPreferenceChangeListener()136     public void onStop_shouldRegisterPreferenceChangeListener() {
137         mController.displayPreference(mScreen);
138         mController.onStart();
139 
140         mController.onStop();
141 
142         verify(mPreference).setOnPreferenceChangeListener(null);
143     }
144 
145     @Test
onSummaryChanged_shouldUpdatePreferenceSummary()146     public void onSummaryChanged_shouldUpdatePreferenceSummary() {
147         mController.displayPreference(mScreen);
148 
149         mController.onSummaryChanged("test summary");
150 
151         verify(mPreference).setSummary("test summary");
152     }
153 }
154