summaryrefslogtreecommitdiff
path: root/Settings/tests/robotests
diff options
context:
space:
mode:
Diffstat (limited to 'Settings/tests/robotests')
-rw-r--r--Settings/tests/robotests/Android.bp14
-rw-r--r--Settings/tests/robotests/config/robolectric.properties2
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/autofill/AutofillPickerFragmentTest.java4
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddPageBasedOnNetworkStateTest.java140
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java67
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/ConnectFailedFragmentTest.java7
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/device/DevicePrefFragmentTest.java4
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java2
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java2
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java8
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/inputmethod/KeyboardFragmentTest.java4
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/system/locale/CountryPickerFragmentTest.kt53
-rw-r--r--Settings/tests/robotests/src/com/android/tv/settings/testutils/SettingsShadowActivityManager.kt30
13 files changed, 155 insertions, 182 deletions
diff --git a/Settings/tests/robotests/Android.bp b/Settings/tests/robotests/Android.bp
index 9fc8f9612..72ce36b90 100644
--- a/Settings/tests/robotests/Android.bp
+++ b/Settings/tests/robotests/Android.bp
@@ -14,9 +14,19 @@ package {
android_robolectric_test {
name: "TvSettingsRoboTests",
- srcs: ["src/**/*.java"],
+ srcs: [
+ "src/**/*.java",
+ "src/**/*.kt",
+ ],
libs: ["services.core"],
+
+ static_libs: [
+ "Robolectric_shadows_androidx_fragment_upstream",
+ "Settings_robolectric_meta_service_file",
+ "SettingsLib-robo-testutils",
+ "Settings-robo-testutils",
+ ],
java_resource_dirs: ["config"],
@@ -25,4 +35,6 @@ android_robolectric_test {
test_options: {
timeout: 36000,
},
+
+ upstream: true,
}
diff --git a/Settings/tests/robotests/config/robolectric.properties b/Settings/tests/robotests/config/robolectric.properties
index 9a6053d0a..034345989 100644
--- a/Settings/tests/robotests/config/robolectric.properties
+++ b/Settings/tests/robotests/config/robolectric.properties
@@ -14,3 +14,5 @@
# limitations under the License.
#
sdk=NEWEST_SDK
+instrumentedPackages=androidx
+
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/autofill/AutofillPickerFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/autofill/AutofillPickerFragmentTest.java
index 14d217fab..ed182bc2c 100644
--- a/Settings/tests/robotests/src/com/android/tv/settings/autofill/AutofillPickerFragmentTest.java
+++ b/Settings/tests/robotests/src/com/android/tv/settings/autofill/AutofillPickerFragmentTest.java
@@ -29,6 +29,7 @@ import android.provider.Settings;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
+import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.tv.settings.RadioPreference;
import com.android.tv.settings.testutils.ShadowInputMethodManager;
import com.android.tv.settings.testutils.Utils;
@@ -43,10 +44,9 @@ import org.mockito.Spy;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowUserManager;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowInputMethodManager.class})
+@Config(shadows = {ShadowInputMethodManager.class, ShadowUserManager.class})
public class AutofillPickerFragmentTest {
@Spy
private AutofillPickerFragment mFragment;
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddPageBasedOnNetworkStateTest.java b/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddPageBasedOnNetworkStateTest.java
deleted file mode 100644
index 1d11a61e3..000000000
--- a/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddPageBasedOnNetworkStateTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2017 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.tv.settings.connectivity.setup;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.robolectric.shadow.api.Shadow.extract;
-
-import android.content.Intent;
-import android.net.wifi.ScanResult;
-import android.net.wifi.WifiConfiguration;
-import android.os.Bundle;
-
-import androidx.lifecycle.ViewModelProviders;
-
-import com.android.tv.settings.R;
-import com.android.tv.settings.connectivity.WifiConfigHelper;
-import com.android.tv.settings.connectivity.util.State;
-import com.android.tv.settings.connectivity.util.StateMachine;
-import com.android.tv.settings.testutils.ShadowStateMachine;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.Robolectric;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowStateMachine.class)
-public class AddPageBasedOnNetworkStateTest {
- private WifiSetupActivity mActivity;
- private AddPageBasedOnNetworkState mAddPageBasedOnNetworkState;
- private UserChoiceInfo mUserChoiceInfo;
- @Mock
- private State.StateCompleteListener mStateCompleteListener;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mActivity = Mockito.spy(Robolectric.buildActivity(
- WifiSetupActivity.class, new Intent().putExtras(new Bundle())).get());
- StateMachine stateMachine = ViewModelProviders.of(mActivity).get(StateMachine.class);
- mUserChoiceInfo = ViewModelProviders.of(mActivity).get(UserChoiceInfo.class);
- ShadowStateMachine shadowStateMachine = extract(stateMachine);
- shadowStateMachine.setListener(mStateCompleteListener);
- mAddPageBasedOnNetworkState = new AddPageBasedOnNetworkState(mActivity);
- }
-
- @Test
- public void testForward_otherNetwork() {
- mUserChoiceInfo.init();
- mUserChoiceInfo.put(UserChoiceInfo.SELECT_WIFI, getString(R.string.other_network));
- mAddPageBasedOnNetworkState.processForward();
- verify(mStateCompleteListener).onComplete(StateMachine.OTHER_NETWORK);
- }
-
- @Test
- public void testForward_clearPassword_ssidNotMatch() {
- mUserChoiceInfo.init();
- ScanResult scanResult = mock(ScanResult.class);
- scanResult.SSID = "atv01";
- scanResult.capabilities = "";
- mUserChoiceInfo.setChosenNetwork(scanResult);
- mUserChoiceInfo.put(UserChoiceInfo.PASSWORD, "123");
- WifiConfiguration wifiConfiguration = new WifiConfiguration();
- wifiConfiguration.SSID = "atv02";
- mUserChoiceInfo.setWifiConfiguration(wifiConfiguration);
- WifiConfigHelper.saveConfiguration(mActivity, wifiConfiguration);
- assertNotNull(mUserChoiceInfo.getChosenNetwork());
- mAddPageBasedOnNetworkState.processForward();
- assertNull(mUserChoiceInfo.getPageSummary(UserChoiceInfo.PASSWORD));
- }
-
- @Test
- public void testForward_clearPassword_ssidIsNull() {
- mUserChoiceInfo.init();
- ScanResult scanResult = mock(ScanResult.class);
- scanResult.SSID = "atv";
- scanResult.capabilities = "";
- mUserChoiceInfo.setChosenNetwork(scanResult);
- mUserChoiceInfo.put(UserChoiceInfo.PASSWORD, "123");
- mUserChoiceInfo.setWifiConfiguration(null);
- mAddPageBasedOnNetworkState.processForward();
- assertNull(mUserChoiceInfo.getPageSummary(UserChoiceInfo.PASSWORD));
- }
-
- @Test
- public void testForward_networkSaved() {
- mUserChoiceInfo.init();
- ScanResult scanResult = mock(ScanResult.class);
- scanResult.SSID = "atv";
- scanResult.capabilities = "";
- mUserChoiceInfo.setChosenNetwork(scanResult);
- WifiConfiguration config = new WifiConfiguration();
- config.SSID = "\"atv\"";
- WifiConfigHelper.saveConfiguration(mActivity, config);
- mAddPageBasedOnNetworkState.processForward();
- verify(mStateCompleteListener).onComplete(StateMachine.KNOWN_NETWORK);
- }
-
- @Test
- public void testForward_networkNotSaved() {
- mUserChoiceInfo.init();
- ScanResult scanResult = mock(ScanResult.class);
- scanResult.SSID = "atv";
- scanResult.capabilities = "";
- mUserChoiceInfo.setChosenNetwork(scanResult);
- mUserChoiceInfo.put(UserChoiceInfo.PASSWORD, "123");
- WifiConfiguration config = new WifiConfiguration();
- config.networkId = -1;
- WifiConfigHelper.saveConfiguration(mActivity, config);
- mAddPageBasedOnNetworkState.processForward();
- verify(mStateCompleteListener).onComplete(StateMachine.ADD_START);
- }
-
- private String getString(int id) {
- return RuntimeEnvironment.application.getString(id);
- }
-}
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java b/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java
index e31cfaf56..59aca204a 100644
--- a/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java
+++ b/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/AddStartStateTest.java
@@ -19,14 +19,20 @@ package com.android.tv.settings.connectivity.setup;
import static org.mockito.Mockito.verify;
import static org.robolectric.shadow.api.Shadow.extract;
+import android.content.Context;
import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProviders;
-import com.android.settingslib.wifi.AccessPoint;
+import com.android.tv.settings.library.network.AccessPoint;
import com.android.tv.settings.connectivity.util.State;
import com.android.tv.settings.connectivity.util.StateMachine;
+import com.android.tv.settings.library.util.ThreadUtils;
import com.android.tv.settings.testutils.ShadowStateMachine;
+import com.android.wifitrackerlib.WifiEntry;
+import com.android.wifitrackerlib.WifiTrackerInjector;
import org.junit.Before;
import org.junit.Test;
@@ -40,16 +46,18 @@ import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowStateMachine.class)
public class AddStartStateTest {
- private WifiSetupActivity mActivity;
+ private FragmentActivity mActivity;
private AddStartState mAddStartState;
private UserChoiceInfo mUserChoiceInfo;
@Mock
private State.StateCompleteListener mStateCompleteListener;
+ @Mock private WifiManager mMockWifiManager;
+ @Mock private WifiTrackerInjector mWifiTrackerInjector;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mActivity = Robolectric.buildActivity(WifiSetupActivity.class).get();
+ mActivity = Robolectric.buildActivity(FragmentActivity.class).get();
StateMachine stateMachine = ViewModelProviders.of(mActivity).get(StateMachine.class);
mUserChoiceInfo = ViewModelProviders.of(mActivity).get(UserChoiceInfo.class);
ShadowStateMachine shadowStateMachine = extract(stateMachine);
@@ -58,48 +66,47 @@ public class AddStartStateTest {
}
@Test
- public void testForward_WEP_NeedPassword() {
+ public void testForward_needsWifiConfiguration_NeedPassword() {
mUserChoiceInfo.init();
- mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_WEP);
- mUserChoiceInfo.setWifiConfiguration(new WifiConfiguration());
+ mUserChoiceInfo.setWifiEntry(makeWifiEntry(
+ /* needsWifiConfiguration= */ true,
+ /* shouldEditBeforeConnect= */ false));
mAddStartState.processForward();
verify(mStateCompleteListener).onComplete(StateMachine.PASSWORD);
}
@Test
- public void testForward_WPA_NeedPassword() {
+ public void testForward_shouldEditBeforeConnect_NeedPassword() {
mUserChoiceInfo.init();
- mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_PSK);
- mUserChoiceInfo.setWifiConfiguration(new WifiConfiguration());
+ mUserChoiceInfo.setWifiEntry(makeWifiEntry(
+ /* needsWifiConfiguration= */ false,
+ /* shouldEditBeforeConnect= */ true));
mAddStartState.processForward();
verify(mStateCompleteListener).onComplete(StateMachine.PASSWORD);
}
@Test
- public void testForward_EAP_NeedPassword() {
- mUserChoiceInfo.init();
- mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_EAP);
- mUserChoiceInfo.setWifiConfiguration(new WifiConfiguration());
- mAddStartState.processForward();
- verify(mStateCompleteListener).onComplete(StateMachine.PASSWORD);
- }
-
- @Test
- public void testForward_AlreadyHasPassword() {
- mUserChoiceInfo.init();
- mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_PSK);
- WifiConfiguration config = new WifiConfiguration();
- config.preSharedKey = "PasswordTest";
- mUserChoiceInfo.setWifiConfiguration(config);
+ public void testForward_DoNotNeedPassword_Connect() {
+ mUserChoiceInfo.setWifiEntry(makeWifiEntry(
+ /* needsWifiConfiguration= */ false,
+ /* shouldEditBeforeConnect= */ false));
mAddStartState.processForward();
verify(mStateCompleteListener).onComplete(StateMachine.CONNECT);
}
- @Test
- public void testForward_DoNotNeedPassword() {
- mUserChoiceInfo.init();
- mUserChoiceInfo.setWifiSecurity(AccessPoint.SECURITY_NONE);
- mAddStartState.processForward();
- verify(mStateCompleteListener).onComplete(StateMachine.CONNECT);
+ private WifiEntry makeWifiEntry(boolean needsWifiConfiguration,
+ boolean shouldEditBeforeConnect) {
+ return new WifiEntry(mWifiTrackerInjector,
+ ThreadUtils.getUiThreadHandler(), mMockWifiManager, false) {
+ @Override
+ public boolean needsWifiConfiguration() {
+ return needsWifiConfiguration;
+ }
+
+ @Override
+ public boolean shouldEditBeforeConnect() {
+ return shouldEditBeforeConnect;
+ }
+ };
}
}
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/ConnectFailedFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/ConnectFailedFragmentTest.java
index c41f8c505..990cae28e 100644
--- a/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/ConnectFailedFragmentTest.java
+++ b/Settings/tests/robotests/src/com/android/tv/settings/connectivity/setup/ConnectFailedFragmentTest.java
@@ -21,9 +21,11 @@ import static org.mockito.Mockito.doReturn;
import android.net.wifi.WifiConfiguration;
+import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProviders;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
@@ -32,18 +34,19 @@ import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
+@Ignore // TODO(b/293309151) Find out how to mock WifiManager
public class ConnectFailedFragmentTest {
WifiConfiguration mWifiConfig;
@Spy
private ConnectFailedState.ConnectFailedFragment mConnectFailedFragment;
- private WifiSetupActivity mActivity;
+ private FragmentActivity mActivity;
private UserChoiceInfo mUserChoiceInfo;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mActivity = Robolectric.buildActivity(WifiSetupActivity.class).create().get();
+ mActivity = Robolectric.buildActivity(FragmentActivity.class).create().get();
doReturn(mActivity).when(mConnectFailedFragment).getContext();
mUserChoiceInfo = ViewModelProviders.of(mActivity).get(UserChoiceInfo.class);
mUserChoiceInfo.init();
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/DevicePrefFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/DevicePrefFragmentTest.java
index b70d1762d..87e608582 100644
--- a/Settings/tests/robotests/src/com/android/tv/settings/device/DevicePrefFragmentTest.java
+++ b/Settings/tests/robotests/src/com/android/tv/settings/device/DevicePrefFragmentTest.java
@@ -36,6 +36,7 @@ import android.provider.Settings;
import androidx.preference.Preference;
+import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.tv.settings.R;
import com.android.tv.settings.testutils.Utils;
@@ -47,10 +48,11 @@ import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowPackageManager;
-import org.robolectric.shadows.ShadowUserManager;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowUserManager.class})
public class DevicePrefFragmentTest {
@Spy
private DevicePrefFragment mDevicePrefFragment;
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java
index 9b8c9af3c..495797c00 100644
--- a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java
+++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java
@@ -43,6 +43,7 @@ import com.android.tv.settings.R;
import com.android.tv.settings.RadioPreference;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -85,6 +86,7 @@ public class HdrFormatSelectionFragmentTest {
verify(mDisplayManager).setAreUserDisabledHdrTypesAllowed(false);
}
+ @Ignore // TODO(b/293314245) Find how to mock missing method in tests
@Test
public void testOnPreferenceTreeClick_withFormatDisabled_disablesHdrTypeInDisplayManager() {
int[] deviceHdrTypes = { HDR_TYPE_DOLBY_VISION,
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java
index 769a643a4..0c45aa760 100644
--- a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java
+++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java
@@ -35,6 +35,7 @@ import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.LooperMode;
import org.robolectric.shadows.androidx.fragment.FragmentController;
@RunWith(RobolectricTestRunner.class)
@@ -152,6 +153,7 @@ public class MatchContentFrameRateFragmentTest {
}
@Test
+ @LooperMode(LooperMode.Mode.LEGACY)
public void testDefaultPreference() {
FragmentController.of(mMatchContentFrameRateFragment)
.create();
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java
index 40969edb1..5b2042b6d 100644
--- a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java
+++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java
@@ -139,11 +139,11 @@ public class ResolutionSelectionFragmentTest {
ResolutionSelectionUtils.getRefreshRateString(59.944f)));
assertThat(getChildrenSummaries(modePreference)).containsExactly(
- "2160 x 2160",
- "2160 x 2160",
+ "2,160 x 2,160",
+ "2,160 x 2,160",
"576 x 576",
- "800 x 1200",
- "800 x 1200",
+ "800 x 1,200",
+ "800 x 1,200",
"600 x 800",
"600 x 800");
}
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/inputmethod/KeyboardFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/inputmethod/KeyboardFragmentTest.java
index 4f968399b..a3d33bbd5 100644
--- a/Settings/tests/robotests/src/com/android/tv/settings/inputmethod/KeyboardFragmentTest.java
+++ b/Settings/tests/robotests/src/com/android/tv/settings/inputmethod/KeyboardFragmentTest.java
@@ -30,6 +30,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
+import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.tv.settings.R;
import com.android.tv.settings.testutils.ShadowInputMethodManager;
import com.android.tv.settings.testutils.Utils;
@@ -43,10 +44,9 @@ import org.mockito.Spy;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowUserManager;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowInputMethodManager.class})
+@Config(shadows = {ShadowInputMethodManager.class, ShadowUserManager.class})
public class KeyboardFragmentTest {
@Spy
private KeyboardFragment mKeyboardFragment;
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/system/locale/CountryPickerFragmentTest.kt b/Settings/tests/robotests/src/com/android/tv/settings/system/locale/CountryPickerFragmentTest.kt
new file mode 100644
index 000000000..177c02539
--- /dev/null
+++ b/Settings/tests/robotests/src/com/android/tv/settings/system/locale/CountryPickerFragmentTest.kt
@@ -0,0 +1,53 @@
+package com.android.tv.settings.system.locale
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.android.internal.app.LocaleStore
+import com.android.tv.settings.testutils.SettingsShadowActivityManager
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+import org.robolectric.shadows.androidx.fragment.FragmentController
+import java.util.Locale
+
+@RunWith(RobolectricTestRunner::class)
+@Config(shadows = [SettingsShadowActivityManager::class])
+class CountryPickerFragmentTest {
+ companion object {
+ val EXTRA_PARENT_LOCALE = "PARENT_LOCALE"
+ val parentLocale = LocaleStore.fromLocale(Locale.ENGLISH)
+ }
+
+ @Test
+ fun testCountrySorting() {
+ val fragment = createCountryPickerFragment()
+ val preferenceScreen = fragment.preferenceScreen
+ assertThat(preferenceScreen.preferenceCount).isEqualTo(3)
+ assertThat(preferenceScreen.getPreference(0).title)
+ .isEqualTo(LocaleStore.fromLocale(Locale.CANADA).fullCountryNameNative)
+ assertThat(preferenceScreen.getPreference(1).title)
+ .isEqualTo(LocaleStore.fromLocale(Locale.UK).fullCountryNameNative)
+ assertThat(preferenceScreen.getPreference(2).title)
+ .isEqualTo(LocaleStore.fromLocale(Locale.US).fullCountryNameNative)
+ }
+
+ private fun createCountryPickerFragment(): CountryPickerFragment {
+ val fragment = TestCountryPickerFragment()
+ fragment.arguments = Bundle().apply {
+ putSerializable(EXTRA_PARENT_LOCALE, parentLocale)
+ }
+
+ return FragmentController.of(fragment).create().start().get()
+ }
+
+ class TestCountryPickerFragment : CountryPickerFragment() {
+ override fun onCreatePreferences(savedInstanceState: Bundle?, s: String?) {
+ val viewModel = ViewModelProvider(requireActivity())[LocaleDataViewModel::class.java]
+ viewModel.mLocaleMap[parentLocale] = listOf(LocaleStore.fromLocale(Locale.UK),
+ LocaleStore.fromLocale(Locale.CANADA), LocaleStore.fromLocale(Locale.US))
+ super.onCreatePreferences(savedInstanceState, s)
+ }
+ }
+} \ No newline at end of file
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/testutils/SettingsShadowActivityManager.kt b/Settings/tests/robotests/src/com/android/tv/settings/testutils/SettingsShadowActivityManager.kt
new file mode 100644
index 000000000..96a9dcece
--- /dev/null
+++ b/Settings/tests/robotests/src/com/android/tv/settings/testutils/SettingsShadowActivityManager.kt
@@ -0,0 +1,30 @@
+package com.android.tv.settings.testutils
+
+import android.app.ActivityManager
+import android.app.IActivityManager
+import android.content.res.Configuration
+import android.os.LocaleList
+import org.robolectric.annotation.Implements
+import org.robolectric.shadows.ShadowActivityManager
+import java.lang.reflect.Proxy
+import java.util.Locale
+
+
+@Implements(ActivityManager::class)
+@Suppress("ACCIDENTAL_OVERRIDE") // override doesn't work with JvmStatic
+open class SettingsShadowActivityManager : ShadowActivityManager() {
+ companion object {
+ val configuration: Configuration = Configuration().apply {
+ setLocales(LocaleList(Locale.US))
+ }
+
+ @JvmStatic
+ protected fun getService(): IActivityManager {
+ val clazz = IActivityManager::class.java
+ return Proxy.newProxyInstance(clazz.classLoader, arrayOf<Class<*>>(clazz)) {
+ _, method, _ ->
+ if (method.name == "getConfiguration") configuration else null
+ } as IActivityManager
+ }
+ }
+}