1 /* 2 * Copyright (C) 2018 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 package com.android.settings.wifi; 17 18 import static com.google.common.truth.Truth.assertThat; 19 20 import static org.mockito.ArgumentMatchers.anyInt; 21 import static org.mockito.ArgumentMatchers.eq; 22 import static org.mockito.ArgumentMatchers.isNull; 23 import static org.mockito.ArgumentMatchers.nullable; 24 import static org.mockito.Mockito.doReturn; 25 import static org.mockito.Mockito.mock; 26 import static org.mockito.Mockito.never; 27 import static org.mockito.Mockito.spy; 28 import static org.mockito.Mockito.times; 29 import static org.mockito.Mockito.verify; 30 31 import android.app.AlertDialog; 32 import android.app.Fragment; 33 import android.content.ContentResolver; 34 import android.content.Context; 35 import android.content.DialogInterface; 36 import android.provider.Settings; 37 38 import com.android.settings.R; 39 import com.android.settings.testutils.SettingsRobolectricTestRunner; 40 import com.android.settings.testutils.shadow.SettingsShadowResources; 41 42 import org.junit.After; 43 import org.junit.Before; 44 import org.junit.Test; 45 import org.junit.runner.RunWith; 46 import org.mockito.Mock; 47 import org.mockito.MockitoAnnotations; 48 import org.robolectric.RuntimeEnvironment; 49 50 @RunWith(SettingsRobolectricTestRunner.class) 51 public class WifiScanningRequiredFragmentTest { 52 53 private WifiScanningRequiredFragment mFragment; 54 private Context mContext; 55 private ContentResolver mResolver; 56 @Mock 57 Fragment mCallbackFragment; 58 @Mock 59 AlertDialog.Builder mBuilder; 60 61 @Before setUp()62 public void setUp() { 63 MockitoAnnotations.initMocks(this); 64 mFragment = spy(WifiScanningRequiredFragment.newInstance()); 65 mContext = RuntimeEnvironment.application; 66 mResolver = mContext.getContentResolver(); 67 68 doReturn(mContext).when(mFragment).getContext(); 69 mFragment.setTargetFragment(mCallbackFragment, 1000); 70 Settings.Global.putInt(mResolver, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0); 71 } 72 73 @After tearDown()74 public void tearDown() { 75 SettingsShadowResources.reset(); 76 } 77 78 @Test onClick_positiveButtonSetsWifiScanningOn()79 public void onClick_positiveButtonSetsWifiScanningOn() 80 throws Settings.SettingNotFoundException { 81 mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE); 82 83 assertThat(Settings.Global.getInt(mResolver, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE)) 84 .isEqualTo(1); 85 } 86 87 @Test onClick_positiveButtonCallsBackToActivity()88 public void onClick_positiveButtonCallsBackToActivity() { 89 mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE); 90 91 verify(mCallbackFragment).onActivityResult(anyInt(), anyInt(), isNull()); 92 } 93 94 @Test learnMore_launchesHelpWhenIntentFound()95 public void learnMore_launchesHelpWhenIntentFound() { 96 Context context = mock(Context.class); 97 doReturn(context).when(mFragment).getContext(); 98 doReturn("").when(context).getString(eq(R.string.help_uri_wifi_scanning_required)); 99 mFragment.addButtonIfNeeded(mBuilder); 100 verify(mBuilder, never()) 101 .setNeutralButton(anyInt(), nullable(DialogInterface.OnClickListener.class)); 102 103 doReturn("help").when(context).getString(eq(R.string.help_uri_wifi_scanning_required)); 104 mFragment.addButtonIfNeeded(mBuilder); 105 verify(mBuilder, times(1)) 106 .setNeutralButton(anyInt(), nullable(DialogInterface.OnClickListener.class)); 107 } 108 } 109