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 17package com.android.tv.settings.connectivity.setup; 18 19import static org.junit.Assert.assertNotNull; 20import static org.junit.Assert.assertNull; 21import static org.junit.Assert.assertTrue; 22import static org.mockito.Mockito.verify; 23import static org.robolectric.shadow.api.Shadow.extract; 24 25import android.arch.lifecycle.ViewModelProviders; 26import android.content.Intent; 27import android.net.wifi.ScanResult; 28import android.net.wifi.WifiConfiguration; 29import android.os.Bundle; 30 31import com.android.tv.settings.R; 32import com.android.tv.settings.TvSettingsRobolectricTestRunner; 33import com.android.tv.settings.connectivity.WifiConfigHelper; 34import com.android.tv.settings.connectivity.util.State; 35import com.android.tv.settings.connectivity.util.StateMachine; 36import com.android.tv.settings.testutils.ShadowStateMachine; 37 38import org.junit.Before; 39import org.junit.Test; 40import org.junit.runner.RunWith; 41import org.mockito.Mock; 42import org.mockito.Mockito; 43import org.mockito.MockitoAnnotations; 44import org.robolectric.Robolectric; 45import org.robolectric.RuntimeEnvironment; 46import org.robolectric.annotation.Config; 47 48@RunWith(TvSettingsRobolectricTestRunner.class) 49@Config(shadows = ShadowStateMachine.class) 50public class AddPageBasedOnNetworkStateTest { 51 private WifiSetupActivity mActivity; 52 private AddPageBasedOnNetworkState mAddPageBasedOnNetworkState; 53 private UserChoiceInfo mUserChoiceInfo; 54 @Mock 55 private State.StateCompleteListener mStateCompleteListener; 56 57 @Before 58 public void setUp() { 59 MockitoAnnotations.initMocks(this); 60 mActivity = Mockito.spy(Robolectric.buildActivity( 61 WifiSetupActivity.class, new Intent().putExtras(new Bundle())).get()); 62 StateMachine stateMachine = ViewModelProviders.of(mActivity).get(StateMachine.class); 63 mUserChoiceInfo = ViewModelProviders.of(mActivity).get(UserChoiceInfo.class); 64 ShadowStateMachine shadowStateMachine = extract(stateMachine); 65 shadowStateMachine.setListener(mStateCompleteListener); 66 mAddPageBasedOnNetworkState = new AddPageBasedOnNetworkState(mActivity); 67 } 68 69 @Test 70 public void testForward_otherNetwork() { 71 mUserChoiceInfo.init(); 72 mUserChoiceInfo.put(UserChoiceInfo.SELECT_WIFI, getString(R.string.other_network)); 73 mAddPageBasedOnNetworkState.processForward(); 74 assertTrue(mUserChoiceInfo.getWifiConfiguration().hiddenSSID); 75 verify(mStateCompleteListener).onComplete(StateMachine.OTHER_NETWORK); 76 } 77 78 @Test 79 public void testForward_clearPassword_ssidNotMatch() { 80 mUserChoiceInfo.init(); 81 ScanResult scanResult = new ScanResult(); 82 scanResult.SSID = "atv01"; 83 scanResult.capabilities = ""; 84 mUserChoiceInfo.setChosenNetwork(scanResult); 85 mUserChoiceInfo.put(UserChoiceInfo.PASSWORD, "123"); 86 WifiConfiguration wifiConfiguration = new WifiConfiguration(); 87 wifiConfiguration.SSID = "atv02"; 88 mUserChoiceInfo.setWifiConfiguration(wifiConfiguration); 89 WifiConfigHelper.saveConfiguration(mActivity, wifiConfiguration); 90 assertNotNull(mUserChoiceInfo.getChosenNetwork()); 91 mAddPageBasedOnNetworkState.processForward(); 92 assertNull(mUserChoiceInfo.getPageSummary(UserChoiceInfo.PASSWORD)); 93 } 94 95 @Test 96 public void testForward_clearPassword_ssidIsNull() { 97 mUserChoiceInfo.init(); 98 ScanResult scanResult = new ScanResult(); 99 scanResult.SSID = "atv"; 100 scanResult.capabilities = ""; 101 mUserChoiceInfo.setChosenNetwork(scanResult); 102 mUserChoiceInfo.put(UserChoiceInfo.PASSWORD, "123"); 103 mUserChoiceInfo.setWifiConfiguration(null); 104 mAddPageBasedOnNetworkState.processForward(); 105 assertNull(mUserChoiceInfo.getPageSummary(UserChoiceInfo.PASSWORD)); 106 } 107 108 @Test 109 public void testForward_networkSaved() { 110 mUserChoiceInfo.init(); 111 ScanResult scanResult = new ScanResult(); 112 scanResult.SSID = "atv"; 113 scanResult.capabilities = ""; 114 mUserChoiceInfo.setChosenNetwork(scanResult); 115 WifiConfiguration config = new WifiConfiguration(); 116 config.SSID = "\"atv\""; 117 WifiConfigHelper.saveConfiguration(mActivity, config); 118 mAddPageBasedOnNetworkState.processForward(); 119 verify(mStateCompleteListener).onComplete(StateMachine.KNOWN_NETWORK); 120 } 121 122 @Test 123 public void testForward_networkNotSaved() { 124 mUserChoiceInfo.init(); 125 ScanResult scanResult = new ScanResult(); 126 scanResult.SSID = "atv"; 127 scanResult.capabilities = ""; 128 mUserChoiceInfo.setChosenNetwork(scanResult); 129 mUserChoiceInfo.put(UserChoiceInfo.PASSWORD, "123"); 130 WifiConfiguration config = new WifiConfiguration(); 131 config.networkId = -1; 132 WifiConfigHelper.saveConfiguration(mActivity, config); 133 mAddPageBasedOnNetworkState.processForward(); 134 verify(mStateCompleteListener).onComplete(StateMachine.ADD_START); 135 } 136 137 private String getString(int id) { 138 return RuntimeEnvironment.application.getString(id); 139 } 140} 141