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.anyString;
23 import static org.mockito.Mockito.spy;
24 import static org.mockito.Mockito.verify;
25 
26 import android.content.BroadcastReceiver;
27 import android.content.Context;
28 import android.content.Intent;
29 import android.content.IntentFilter;
30 import android.net.wifi.WifiManager;
31 
32 import com.android.settings.R;
33 import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
34 import com.android.settingslib.wifi.WifiStatusTracker;
35 
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 import org.mockito.Mock;
40 import org.mockito.MockitoAnnotations;
41 import org.robolectric.RobolectricTestRunner;
42 import org.robolectric.RuntimeEnvironment;
43 
44 @RunWith(RobolectricTestRunner.class)
45 public class WifiSummaryUpdaterTest {
46     @Mock private WifiStatusTracker mWifiTracker;
47     @Mock private SummaryListener mListener;
48 
49     private Context mContext;
50     private WifiSummaryUpdater mSummaryUpdater;
51 
52     @Before
setUp()53     public void setUp() {
54         MockitoAnnotations.initMocks(this);
55         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
56         mSummaryUpdater = new WifiSummaryUpdater(mContext, mListener, mWifiTracker);
57     }
58 
59     @Test
register_true_shouldRegisterListenerAndTracker()60     public void register_true_shouldRegisterListenerAndTracker() {
61         mSummaryUpdater.register(true);
62 
63         verify(mContext).registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
64         verify(mWifiTracker).setListening(true);
65     }
66 
67     @Test
register_false_shouldUnregisterListenerAndTracker()68     public void register_false_shouldUnregisterListenerAndTracker() {
69         mSummaryUpdater.register(true);
70         mSummaryUpdater.register(false);
71 
72         verify(mContext).unregisterReceiver(any(BroadcastReceiver.class));
73         verify(mWifiTracker).setListening(false);
74     }
75 
76     @Test
onReceive_networkStateChanged_shouldSendSummaryChange()77     public void onReceive_networkStateChanged_shouldSendSummaryChange() {
78         mSummaryUpdater.register(true);
79         mContext.sendBroadcast(new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION));
80 
81         verify(mListener).onSummaryChanged(anyString());
82     }
83 
84     @Test
onReceive_rssiChanged_shouldSendSummaryChange()85     public void onReceive_rssiChanged_shouldSendSummaryChange() {
86         mSummaryUpdater.register(true);
87         mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
88 
89         verify(mListener).onSummaryChanged(anyString());
90     }
91 
92     @Test
getSummary_wifiDisabled_shouldReturnDisabled()93     public void getSummary_wifiDisabled_shouldReturnDisabled() {
94         mWifiTracker.enabled = false;
95 
96         assertThat(mSummaryUpdater.getSummary())
97             .isEqualTo(mContext.getString(R.string.switch_off_text));
98     }
99 
100     @Test
getSummary_wifiDisconnected_shouldReturnDisconnected()101     public void getSummary_wifiDisconnected_shouldReturnDisconnected() {
102         mWifiTracker.enabled = true;
103         mWifiTracker.connected = false;
104 
105         assertThat(mSummaryUpdater.getSummary())
106             .isEqualTo(mContext.getString(R.string.disconnected));
107     }
108 
109     @Test
getSummary_wifiConnected_shouldReturnSsid()110     public void getSummary_wifiConnected_shouldReturnSsid() {
111         mWifiTracker.enabled = true;
112         mWifiTracker.connected = true;
113         mWifiTracker.ssid = "Test Ssid";
114 
115         assertThat(mSummaryUpdater.getSummary()).isEqualTo("Test Ssid");
116     }
117 
118     @Test
getSummary_wifiConnected_withSpeedLabel_shouldReturnSsid_withSpeedLabel()119     public void getSummary_wifiConnected_withSpeedLabel_shouldReturnSsid_withSpeedLabel() {
120         mWifiTracker.enabled = true;
121         mWifiTracker.connected = true;
122         mWifiTracker.ssid = "Test Ssid";
123         mWifiTracker.statusLabel = "Very Fast";
124 
125         assertThat(mSummaryUpdater.getSummary()).isEqualTo("Test Ssid / Very Fast");
126     }
127 
128     private class SummaryListener implements OnSummaryChangeListener {
129         private String summary;
130 
131         @Override
onSummaryChanged(String summary)132         public void onSummaryChanged(String summary) {
133             this.summary = summary;
134         }
135     }
136 }
137