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.Mockito.doReturn; 22 23 import android.content.Intent; 24 import android.net.wifi.WifiConfiguration; 25 26 import androidx.lifecycle.Lifecycle.State; 27 import androidx.test.core.app.ActivityScenario; 28 29 import com.android.settings.R; 30 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; 31 import com.android.settings.testutils.shadow.ShadowConnectivityManager; 32 import com.android.settings.testutils.shadow.ShadowNetworkDetailsTracker; 33 import com.android.settings.testutils.shadow.ShadowWifiManager; 34 35 import com.google.android.setupcompat.util.WizardManagerHelper; 36 37 import org.junit.After; 38 import org.junit.Before; 39 import org.junit.Ignore; 40 import org.junit.Test; 41 import org.junit.runner.RunWith; 42 import org.mockito.Mock; 43 import org.mockito.MockitoAnnotations; 44 import org.robolectric.Robolectric; 45 import org.robolectric.RobolectricTestRunner; 46 import org.robolectric.annotation.Config; 47 import org.robolectric.util.ReflectionHelpers; 48 49 @RunWith(RobolectricTestRunner.class) 50 @Config(shadows = { 51 ShadowAlertDialogCompat.class, 52 ShadowConnectivityManager.class, 53 ShadowNetworkDetailsTracker.class, 54 ShadowWifiManager.class 55 }) 56 public class WifiDialogActivityTest { 57 58 private static final String AP1_SSID = "\"ap1\""; 59 @Mock 60 private WifiConfigController mController; 61 @Mock 62 private WifiConfigController2 mController2; 63 64 private ActivityScenario<WifiDialogActivity> mWifiDialogActivity; 65 66 @Before setUp()67 public void setUp() { 68 MockitoAnnotations.initMocks(this); 69 70 WifiConfiguration wifiConfig = new WifiConfiguration(); 71 wifiConfig.SSID = AP1_SSID; 72 doReturn(wifiConfig).when(mController).getConfig(); 73 doReturn(wifiConfig).when(mController2).getConfig(); 74 } 75 76 @After cleanUp()77 public void cleanUp() { 78 if (mWifiDialogActivity != null) { 79 mWifiDialogActivity.close(); 80 } 81 } 82 createTargetActivity(Intent activityIntent)83 private ActivityScenario<WifiDialogActivity> createTargetActivity(Intent activityIntent) { 84 return ActivityScenario.launch(activityIntent); 85 } 86 87 @Test onSubmit_shouldConnectToNetwork()88 public void onSubmit_shouldConnectToNetwork() { 89 WifiDialogActivity activity = Robolectric.setupActivity(WifiDialogActivity.class); 90 WifiDialog dialog = (WifiDialog) ShadowAlertDialogCompat.getLatestAlertDialog(); 91 assertThat(dialog).isNotNull(); 92 93 ReflectionHelpers.setField(dialog, "mController", mController); 94 95 activity.onSubmit(dialog); 96 97 assertThat(ShadowWifiManager.get().savedWifiConfig.SSID).isEqualTo(AP1_SSID); 98 } 99 100 @Test 101 @Ignore onSubmit2_whenConnectForCallerIsTrue_shouldConnectToNetwork()102 public void onSubmit2_whenConnectForCallerIsTrue_shouldConnectToNetwork() { 103 final Intent intent = new Intent("com.android.settings.WIFI_DIALOG"); 104 intent.putExtra(WifiDialogActivity.KEY_CHOSEN_WIFIENTRY_KEY, "FAKE_KEY"); 105 intent.putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, true); 106 mWifiDialogActivity = createTargetActivity(intent); 107 108 mWifiDialogActivity.moveToState(State.CREATED); 109 mWifiDialogActivity.moveToState(State.STARTED); 110 111 WifiDialog2 dialog = (WifiDialog2) ShadowAlertDialogCompat.getLatestAlertDialog(); 112 assertThat(dialog).isNotNull(); 113 114 ReflectionHelpers.setField(dialog, "mController", mController2); 115 116 mWifiDialogActivity.onActivity(activity -> { 117 activity.onSubmit(dialog); 118 assertThat(ShadowWifiManager.get().savedWifiConfig.SSID).isEqualTo(AP1_SSID); 119 }); 120 } 121 122 @Test onSubmit_whenConnectForCallerIsFalse_shouldNotConnectToNetwork()123 public void onSubmit_whenConnectForCallerIsFalse_shouldNotConnectToNetwork() { 124 WifiDialogActivity activity = 125 Robolectric.buildActivity( 126 WifiDialogActivity.class, 127 new Intent().putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, false)) 128 .setup().get(); 129 WifiDialog dialog = (WifiDialog) ShadowAlertDialogCompat.getLatestAlertDialog(); 130 131 assertThat(dialog).isNotNull(); 132 133 ReflectionHelpers.setField(dialog, "mController", mController); 134 135 activity.onSubmit(dialog); 136 137 assertThat(ShadowWifiManager.get().savedWifiConfig).isNull(); 138 } 139 140 @Test 141 @Ignore onSubmit2_whenConnectForCallerIsFalse_shouldNotConnectToNetwork()142 public void onSubmit2_whenConnectForCallerIsFalse_shouldNotConnectToNetwork() { 143 final Intent intent = new Intent("com.android.settings.WIFI_DIALOG"); 144 intent.putExtra(WifiDialogActivity.KEY_CHOSEN_WIFIENTRY_KEY, "FAKE_KEY"); 145 intent.putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, false); 146 mWifiDialogActivity = createTargetActivity(intent); 147 148 mWifiDialogActivity.moveToState(State.CREATED); 149 mWifiDialogActivity.moveToState(State.STARTED); 150 151 WifiDialog2 dialog = (WifiDialog2) ShadowAlertDialogCompat.getLatestAlertDialog(); 152 assertThat(dialog).isNotNull(); 153 154 ReflectionHelpers.setField(dialog, "mController", mController2); 155 156 mWifiDialogActivity.onActivity(activity -> { 157 activity.onSubmit(dialog); 158 assertThat(ShadowWifiManager.get().savedWifiConfig).isEqualTo(null); 159 }); 160 } 161 162 @Test onSubmit_whenLaunchInSetupFlow_shouldBeLightThemeForWifiDialog()163 public void onSubmit_whenLaunchInSetupFlow_shouldBeLightThemeForWifiDialog() { 164 WifiDialogActivity activity = 165 Robolectric.buildActivity( 166 WifiDialogActivity.class, 167 new Intent() 168 .putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, false) 169 .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true) 170 .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)) 171 .setup().get(); 172 WifiDialog dialog = (WifiDialog) ShadowAlertDialogCompat.getLatestAlertDialog(); 173 174 assertThat(dialog).isNotNull(); 175 176 activity.onSubmit(dialog); 177 178 assertThat(dialog.getContext().getThemeResId()) 179 .isEqualTo(R.style.SuwAlertDialogThemeCompat_Light); 180 } 181 } 182