From e35f24bc558a367b2eceeb77023a1ad2852948ba Mon Sep 17 00:00:00 2001 From: Lifu Tang Date: Thu, 27 Dec 2018 11:43:50 -0800 Subject: [PATCH] Add the missing unit test Bug: 120910747 Test: build and run the unit test Change-Id: Id1feb51a1577e9d0c90bff812d78e581e5dc5168 --- .../TopLevelLocationPreferenceController.java | 12 ++- ...LevelLocationPreferenceControllerTest.java | 86 +++++++++++++++++++ 2 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java diff --git a/src/com/android/settings/location/TopLevelLocationPreferenceController.java b/src/com/android/settings/location/TopLevelLocationPreferenceController.java index d0bd9a92843..455af2103b6 100644 --- a/src/com/android/settings/location/TopLevelLocationPreferenceController.java +++ b/src/com/android/settings/location/TopLevelLocationPreferenceController.java @@ -1,6 +1,5 @@ package com.android.settings.location; -import static android.Manifest.permission.ACCESS_BACKGROUND_LOCATION; import static android.Manifest.permission.ACCESS_COARSE_LOCATION; import static android.Manifest.permission.ACCESS_FINE_LOCATION; @@ -11,6 +10,7 @@ import android.content.IntentFilter; import android.location.LocationManager; import android.permission.RuntimePermissionPresenter; +import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import com.android.settings.R; @@ -20,7 +20,6 @@ import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; import java.util.Arrays; -import java.util.Collections; public class TopLevelLocationPreferenceController extends BasePreferenceController implements LifecycleObserver, OnStart, OnStop { @@ -56,6 +55,12 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll } } + @VisibleForTesting + void setLocationAppCount(int numApps) { + mNumTotal = numApps; + refreshSummary(mPreference); + } + @Override public void updateState(Preference preference) { super.updateState(preference); @@ -68,8 +73,7 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll RuntimePermissionPresenter.getInstance(mContext).countPermissionApps( Arrays.asList(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION), false, false, (numApps) -> { - mNumTotal = numApps; - refreshSummary(preference); + setLocationAppCount(numApps); }, null); } diff --git a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java new file mode 100644 index 00000000000..68e7f88ddf5 --- /dev/null +++ b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.location; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; +import android.location.LocationManager; + +import com.android.settings.R; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class TopLevelLocationPreferenceControllerTest { + private static final String PREFERENCE_KEY = "top_level_location"; + private Context mContext; + private TopLevelLocationPreferenceController mController; + private LocationManager mLocationManager; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mController = new TopLevelLocationPreferenceController(mContext, PREFERENCE_KEY); + mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); + } + + @Test + public void isAvailable_byDefault_shouldReturnTrue() { + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + public void getSummary_whenLocationIsOff_shouldReturnStringForOff() { + mLocationManager.setLocationEnabledForUser(false, android.os.Process.myUserHandle()); + assertThat(mController.getSummary()).isEqualTo( + mContext.getString(R.string.location_settings_summary_location_off)); + } + + @Test + public void getSummary_whenLocationIsOn_shouldShowLoadingString() { + mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); + assertThat(mController.getSummary()).isEqualTo( + mContext.getString(R.string.location_settings_loading_app_permission_stats)); + } + + @Test + public void getSummary_whenLocationAppCountIsOne_shouldShowSingularString() { + final int LOCATION_APP_COUNT = 1; + mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); + mController.setLocationAppCount(LOCATION_APP_COUNT); + assertThat(mController.getSummary()).isEqualTo( + mContext.getResources().getQuantityString( + R.plurals.location_settings_summary_location_on, + LOCATION_APP_COUNT, LOCATION_APP_COUNT)); + } + + @Test + public void getSummary_whenLocationAppCountIsGreaterThanOne_shouldShowPluralString() { + final int LOCATION_APP_COUNT = 5; + mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); + mController.setLocationAppCount(LOCATION_APP_COUNT); + assertThat(mController.getSummary()).isEqualTo( + mContext.getResources().getQuantityString( + R.plurals.location_settings_summary_location_on, + LOCATION_APP_COUNT, LOCATION_APP_COUNT)); + } +} \ No newline at end of file