From 2a63861a52ddfe1e6ac9a9a72030007f391e0d00 Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Tue, 23 Jan 2018 12:01:19 -0800 Subject: [PATCH 1/2] Clean up SystemUpdatePreferences tests. SystemUpdatePrefenceControllerTest had some logic that seemed irrelevant to its testing class, which seems to have moved to AdditionalSystemUpdatePreferenceController. Removed the irrelevant test cases and added additional test coverage on AdditionalSystemUpdatePreferenceController. Bug: None Test: RunSettingsRoboTests Change-Id: I5224900bc3449a9f329a1d02ee3cb597b4748d91 --- tests/robotests/res/values-mcc999/config.xml | 1 + ...lSystemUpdatePreferenceControllerTest.java | 59 +++++++++++++++++++ .../SystemUpdatePreferenceControllerTest.java | 31 +++++----- 3 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceControllerTest.java diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index f437f966b32..f160c8b6498 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -20,6 +20,7 @@ false false false + true false false false diff --git a/tests/robotests/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceControllerTest.java new file mode 100644 index 00000000000..e5708ba607f --- /dev/null +++ b/tests/robotests/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceControllerTest.java @@ -0,0 +1,59 @@ +/* + * 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.deviceinfo; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; + +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class AdditionalSystemUpdatePreferenceControllerTest { + + private Context mContext; + private AdditionalSystemUpdatePreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = RuntimeEnvironment.application; + mController = new AdditionalSystemUpdatePreferenceController(mContext); + } + + @Test + public void displayPrefs_ifNotAvailable_shouldNotDisplay() { + assertThat(mController.isAvailable()).isFalse(); + } + + @Test + @Config(qualifiers = "mcc999") + public void displayPrefs_ifAvailable_shouldDisplay() { + assertThat(mController.isAvailable()).isTrue(); + } +} diff --git a/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java index 1fd543042c1..81d07719a3e 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java @@ -66,12 +66,9 @@ public class SystemUpdatePreferenceControllerTest { } @Test - public void updateNonIndexable_bothAvailable_shouldNotUpdate() { + public void updateNonIndexable_ifAvailable_shouldNotUpdate() { final List keys = new ArrayList<>(); when(mUserManager.isAdminUser()).thenReturn(true); - when(mContext.getResources().getBoolean( - R.bool.config_additional_system_update_setting_enable)) - .thenReturn(true); mController.updateNonIndexableKeys(keys); @@ -79,7 +76,8 @@ public class SystemUpdatePreferenceControllerTest { } @Test - public void updateNonIndexable_nothingAvailable_shouldUpdateWith2Prefs() { + public void updateNonIndexable_ifNotAvailable_shouldUpdate() { + // mUserManager.isAdminUser() returns false here final List keys = new ArrayList<>(); mController.updateNonIndexableKeys(keys); @@ -88,12 +86,22 @@ public class SystemUpdatePreferenceControllerTest { } @Test - public void displayPrefs_nothingAvailable_shouldNotDisplay() { + public void displayPrefs_ifNotAvailable_shouldNotDisplay() { + // mUserManager.isAdminUser() returns false here mController.displayPreference(mScreen); assertThat(mPreference.isVisible()).isFalse(); } + @Test + public void displayPrefs_ifAvailable_shouldDisplay() { + when(mUserManager.isAdminUser()).thenReturn(true); + + mController.displayPreference(mScreen); + + assertThat(mPreference.isVisible()).isTrue(); + } + @Test public void updateState_shouldSetToAndroidVersion() { mController = new SystemUpdatePreferenceController(RuntimeEnvironment.application); @@ -104,15 +112,4 @@ public class SystemUpdatePreferenceControllerTest { .isEqualTo(RuntimeEnvironment.application.getString(R.string.about_summary, Build.VERSION.RELEASE)); } - - @Test - public void displayPrefs_oneAvailable_shouldDisplayOne() { - when(mContext.getResources().getBoolean( - R.bool.config_additional_system_update_setting_enable)) - .thenReturn(true); - - mController.displayPreference(mScreen); - - assertThat(mPreference.isVisible()).isFalse(); - } } From 6fb9c9f4b0acdfc920b2273122c78d1f89770e1b Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Tue, 23 Jan 2018 11:32:46 -0800 Subject: [PATCH 2/2] Add ability to show/hide System Update. This adds one flag: config_show_system_update_settings Which when set to false will hide "System update" from System page. This is useful for devices that controls its system update elsewhere. Bug: 69813881 Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.deviceinfo Change-Id: Ibd1291ffd8948419e8aa06d0721842246a069378 --- res/values/bools.xml | 3 ++ .../SystemUpdatePreferenceController.java | 3 +- tests/robotests/res/values-mcc999/config.xml | 1 + .../SystemUpdatePreferenceControllerTest.java | 41 ++++++++++++------- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/res/values/bools.xml b/res/values/bools.xml index e4a57ab1730..ab8a6fd1475 100644 --- a/res/values/bools.xml +++ b/res/values/bools.xml @@ -155,4 +155,7 @@ true + + + true diff --git a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java index a061f82e6e0..28062756104 100644 --- a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java +++ b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java @@ -47,7 +47,8 @@ public class SystemUpdatePreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { - return mUm.isAdminUser() + return mContext.getResources().getBoolean(R.bool.config_show_system_update_settings) + && mUm.isAdminUser() ? AVAILABLE : DISABLED_UNSUPPORTED; } diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index f160c8b6498..e755f27472e 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -55,5 +55,6 @@ false false false + false false diff --git a/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java index 81d07719a3e..b5b84da78a3 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java @@ -16,7 +16,9 @@ package com.android.settings.deviceinfo; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Answers.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; @@ -28,6 +30,7 @@ import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.testutils.shadow.ShadowUserManager; import org.junit.Before; import org.junit.Test; @@ -36,29 +39,32 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowApplication; import java.util.ArrayList; import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config( + manifest = TestConfig.MANIFEST_PATH, + sdk = TestConfig.SDK_VERSION, + shadows = { + ShadowUserManager.class + }) public class SystemUpdatePreferenceControllerTest { - @Mock(answer = RETURNS_DEEP_STUBS) - private Context mContext; - @Mock - private UserManager mUserManager; @Mock private PreferenceScreen mScreen; + private Context mContext; private SystemUpdatePreferenceController mController; private Preference mPreference; @Before public void setUp() { MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; - when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); mController = new SystemUpdatePreferenceController(mContext); mPreference = new Preference(RuntimeEnvironment.application); mPreference.setKey(mController.getPreferenceKey()); @@ -68,7 +74,7 @@ public class SystemUpdatePreferenceControllerTest { @Test public void updateNonIndexable_ifAvailable_shouldNotUpdate() { final List keys = new ArrayList<>(); - when(mUserManager.isAdminUser()).thenReturn(true); + ShadowUserManager.getShadow().setIsAdminUser(true); mController.updateNonIndexableKeys(keys); @@ -77,7 +83,7 @@ public class SystemUpdatePreferenceControllerTest { @Test public void updateNonIndexable_ifNotAvailable_shouldUpdate() { - // mUserManager.isAdminUser() returns false here + ShadowUserManager.getShadow().setIsAdminUser(false); final List keys = new ArrayList<>(); mController.updateNonIndexableKeys(keys); @@ -86,8 +92,17 @@ public class SystemUpdatePreferenceControllerTest { } @Test - public void displayPrefs_ifNotAvailable_shouldNotDisplay() { - // mUserManager.isAdminUser() returns false here + public void displayPrefs_ifVisible_butNotAdminUser_shouldNotDisplay() { + ShadowUserManager.getShadow().setIsAdminUser(false); + mController.displayPreference(mScreen); + + assertThat(mPreference.isVisible()).isFalse(); + } + + @Test + @Config(qualifiers = "mcc999") + public void displayPrefs_ifAdminUser_butNotVisible_shouldNotDisplay() { + ShadowUserManager.getShadow().setIsAdminUser(true); mController.displayPreference(mScreen); assertThat(mPreference.isVisible()).isFalse(); @@ -95,7 +110,7 @@ public class SystemUpdatePreferenceControllerTest { @Test public void displayPrefs_ifAvailable_shouldDisplay() { - when(mUserManager.isAdminUser()).thenReturn(true); + ShadowUserManager.getShadow().setIsAdminUser(true); mController.displayPreference(mScreen); @@ -104,12 +119,10 @@ public class SystemUpdatePreferenceControllerTest { @Test public void updateState_shouldSetToAndroidVersion() { - mController = new SystemUpdatePreferenceController(RuntimeEnvironment.application); - mController.updateState(mPreference); assertThat(mPreference.getSummary()) .isEqualTo(RuntimeEnvironment.application.getString(R.string.about_summary, Build.VERSION.RELEASE)); } -} +} \ No newline at end of file