diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt index d12c90c64a..f5bb51d70c 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt @@ -48,6 +48,7 @@ object TestHelper { fun scrollToElementByText(text: String): UiScrollable { val appView = UiScrollable(UiSelector().scrollable(true)) + appView.waitForExists(waitingTime) appView.scrollTextIntoView(text) return appView } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt index 6b210b0817..366c964003 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -48,6 +48,9 @@ import org.mozilla.fenix.ui.robots.notificationShade import org.mozilla.fenix.ui.robots.openEditURLView import org.mozilla.fenix.ui.robots.searchScreen import org.mozilla.fenix.ui.robots.tabDrawer +import org.mozilla.fenix.ui.util.FRENCH_LANGUAGE_HEADER +import org.mozilla.fenix.ui.util.FRENCH_SYSTEM_LOCALE_OPTION +import org.mozilla.fenix.ui.util.ROMANIAN_LANGUAGE_HEADER import org.mozilla.fenix.ui.util.STRING_ONBOARDING_TRACKING_PROTECTION_HEADER /** @@ -66,6 +69,7 @@ class SmokeTest { private val downloadFileName = "Globe.svg" private val collectionName = "First Collection" private var bookmarksListIdlingResource: RecyclerViewIdlingResource? = null + private var localeListIdlingResource: RecyclerViewIdlingResource? = null private val customMenuItem = "TestMenuItem" // This finds the dialog fragment child of the homeFragment, otherwise the awesomeBar would return null @@ -133,6 +137,10 @@ class SmokeTest { if (readerViewNotification != null) { IdlingRegistry.getInstance().unregister(readerViewNotification) } + + if (localeListIdlingResource != null) { + IdlingRegistry.getInstance().unregister(localeListIdlingResource) + } } // Verifies the first run onboarding screen @@ -1375,4 +1383,26 @@ class SmokeTest { verifyPastedToolbarText("Page content: 1") } } + + @Test + fun switchLanguageTest() { + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openLanguageSubMenu { + localeListIdlingResource = + RecyclerViewIdlingResource( + activityTestRule.activity.findViewById(R.id.locale_list), + 2 + ) + IdlingRegistry.getInstance().register(localeListIdlingResource) + selectLanguage("Romanian") + verifyLanguageHeaderIsTranslated(ROMANIAN_LANGUAGE_HEADER) + selectLanguage("Français") + verifyLanguageHeaderIsTranslated(FRENCH_LANGUAGE_HEADER) + selectLanguage(FRENCH_SYSTEM_LOCALE_OPTION) + verifyLanguageHeaderIsTranslated("Language") + IdlingRegistry.getInstance().unregister(localeListIdlingResource) + } + } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLanguageRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLanguageRobot.kt index 1dd28b2a70..ed7a98dcfd 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLanguageRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLanguageRobot.kt @@ -9,9 +9,24 @@ import androidx.test.espresso.action.ViewActions import androidx.test.espresso.matcher.ViewMatchers import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.UiScrollable +import androidx.test.uiautomator.UiSelector +import junit.framework.TestCase.assertTrue import org.hamcrest.CoreMatchers +import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime +import org.mozilla.fenix.helpers.TestHelper.packageName class SettingsSubMenuLanguageRobot { + fun selectLanguage(language: String) { + languagesList.waitForExists(waitingTime) + languagesList + .getChildByText(UiSelector().text(language), language) + .click() + } + + fun verifyLanguageHeaderIsTranslated(translation: String) = + assertTrue(mDevice.findObject(UiSelector().text(translation)).waitForExists(waitingTime)) + class Transition { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) @@ -27,3 +42,10 @@ class SettingsSubMenuLanguageRobot { private fun goBackButton() = onView(CoreMatchers.allOf(ViewMatchers.withContentDescription("Navigate up"))) + +private val languagesList = + UiScrollable( + UiSelector() + .resourceId("$packageName:id/locale_list") + .scrollable(true) + ) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/util/Strings.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/util/Strings.kt index 3550cf1bc5..d7448ca562 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/util/Strings.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/util/Strings.kt @@ -7,3 +7,6 @@ package org.mozilla.fenix.ui.util const val STRING_ONBOARDING_ACCOUNT_SIGN_IN_HEADER = "Sync Firefox between devices" const val STRING_ONBOARDING_TRACKING_PROTECTION_HEADER = "Always-on privacy" const val STRING_ONBOARDING_TOOLBAR_PLACEMENT_HEADER = "Pick your toolbar placement" +const val FRENCH_LANGUAGE_HEADER = "Langues" +const val ROMANIAN_LANGUAGE_HEADER = "Limbă" +const val FRENCH_SYSTEM_LOCALE_OPTION = "Utiliser la langue de l’appareil"