You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
397 lines
13 KiB
Kotlin
397 lines
13 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.fenix.ui.robots
|
|
|
|
import androidx.test.espresso.Espresso.onView
|
|
import androidx.test.espresso.assertion.ViewAssertions.matches
|
|
import androidx.test.espresso.matcher.ViewMatchers
|
|
import androidx.test.espresso.matcher.ViewMatchers.Visibility
|
|
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
|
|
import androidx.test.espresso.matcher.ViewMatchers.isChecked
|
|
import androidx.test.espresso.matcher.ViewMatchers.isNotChecked
|
|
import androidx.test.espresso.matcher.ViewMatchers.withClassName
|
|
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
|
|
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
|
|
import androidx.test.espresso.matcher.ViewMatchers.withId
|
|
import androidx.test.espresso.matcher.ViewMatchers.withText
|
|
import androidx.test.uiautomator.UiSelector
|
|
import org.hamcrest.CoreMatchers
|
|
import org.hamcrest.CoreMatchers.allOf
|
|
import org.hamcrest.Matchers
|
|
import org.junit.Assert.assertTrue
|
|
import org.mozilla.fenix.R
|
|
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeShort
|
|
import org.mozilla.fenix.helpers.TestHelper
|
|
import org.mozilla.fenix.helpers.TestHelper.mDevice
|
|
import org.mozilla.fenix.helpers.click
|
|
|
|
/**
|
|
* Implementation of Robot Pattern for the settings Homepage sub menu.
|
|
*/
|
|
class SettingsSubMenuHomepageRobot {
|
|
|
|
fun verifyHomePageView(
|
|
shortcutsSwitchEnabled: Boolean = true,
|
|
sponsoredShortcutsCheckBox: Boolean = true,
|
|
jumpBackInSwitchEnabled: Boolean = true,
|
|
recentBookmarksSwitchEnabled: Boolean = true,
|
|
recentlyVisitedSwitchEnabled: Boolean = true,
|
|
pocketSwitchEnabled: Boolean = true,
|
|
sponsoredStoriesCheckBox: Boolean = true,
|
|
) {
|
|
assertShortcutsButton()
|
|
assertShortcutsSwitchState(shortcutsSwitchEnabled)
|
|
assertSponsoredShortcutsButton()
|
|
assertSponsoredShortcutsCheckBox(sponsoredShortcutsCheckBox)
|
|
assertJumpBackInButton()
|
|
assertJumpBackInSwitchState(jumpBackInSwitchEnabled)
|
|
assertRecentBookmarksButton()
|
|
assertRecentBookmarksSwitchState(recentBookmarksSwitchEnabled)
|
|
assertRecentlyVisitedButton()
|
|
assertRecentlyVisitedSwitchState(recentlyVisitedSwitchEnabled)
|
|
assertPocketButton()
|
|
assertPocketSwitchState(pocketSwitchEnabled)
|
|
assertSponsoredStoriesButton()
|
|
assertSponsoredStoriesCheckBox(sponsoredStoriesCheckBox)
|
|
assertOpeningScreenHeading()
|
|
assertHomepageButton()
|
|
assertLastTabButton()
|
|
assertHomepageAfterFourHoursButton()
|
|
}
|
|
|
|
fun clickShortcutsButton() = shortcutsButton().click()
|
|
|
|
fun clickSponsoredShortcuts() = sponsoredShortcutsButton().click()
|
|
|
|
fun clickJumpBackInButton() = jumpBackInButton().click()
|
|
|
|
fun clickRecentlyVisited() = recentlyVisitedButton().click()
|
|
|
|
fun clickRecentBookmarksButton() = recentBookmarksButton().click()
|
|
|
|
fun clickRecentSearchesButton() = recentlyVisitedButton().click()
|
|
|
|
fun clickPocketButton() = pocketButton().click()
|
|
|
|
fun clickStartOnHomepageButton() = homepageButton().click()
|
|
|
|
fun clickStartOnLastTabButton() = lastTabButton().click()
|
|
|
|
fun openWallpapersMenu() = wallpapersMenuButton.click()
|
|
|
|
fun selectWallpaper(wallpaperName: String) =
|
|
mDevice.findObject(UiSelector().description(wallpaperName)).click()
|
|
|
|
fun verifySnackBarText(expectedText: String) =
|
|
assertTrue(
|
|
mDevice.findObject(
|
|
UiSelector()
|
|
.textContains(expectedText),
|
|
).waitForExists(waitingTimeShort),
|
|
)
|
|
|
|
fun verifySponsoredShortcutsCheckBox(checked: Boolean) = assertSponsoredShortcutsCheckBox(checked)
|
|
|
|
class Transition {
|
|
|
|
fun goBack(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition {
|
|
goBackButton().click()
|
|
|
|
HomeScreenRobot().interact()
|
|
return HomeScreenRobot.Transition()
|
|
}
|
|
|
|
fun clickSnackBarViewButton(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition {
|
|
val snackBarButton = mDevice.findObject(UiSelector().text("VIEW"))
|
|
snackBarButton.waitForExists(waitingTimeShort)
|
|
snackBarButton.click()
|
|
|
|
HomeScreenRobot().interact()
|
|
return HomeScreenRobot.Transition()
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun shortcutsButton() =
|
|
onView(allOf(withText(R.string.top_sites_toggle_top_recent_sites_4)))
|
|
|
|
private fun sponsoredShortcutsButton() =
|
|
onView(allOf(withText(R.string.customize_toggle_contile)))
|
|
|
|
private fun jumpBackInButton() =
|
|
onView(allOf(withText(R.string.customize_toggle_jump_back_in)))
|
|
|
|
private fun recentBookmarksButton() =
|
|
onView(allOf(withText(R.string.customize_toggle_recent_bookmarks)))
|
|
|
|
private fun recentlyVisitedButton() =
|
|
onView(allOf(withText(R.string.customize_toggle_recently_visited)))
|
|
|
|
private fun pocketButton() =
|
|
onView(allOf(withText(R.string.customize_toggle_pocket_2)))
|
|
|
|
private fun sponsoredStoriesButton() =
|
|
onView(allOf(withText(R.string.customize_toggle_pocket_sponsored)))
|
|
|
|
private fun openingScreenHeading() = onView(withText(R.string.preferences_opening_screen))
|
|
|
|
private fun homepageButton() =
|
|
onView(
|
|
allOf(
|
|
withId(R.id.title),
|
|
withText(R.string.opening_screen_homepage),
|
|
hasSibling(withId(R.id.radio_button)),
|
|
),
|
|
)
|
|
|
|
private fun lastTabButton() =
|
|
onView(
|
|
allOf(
|
|
withId(R.id.title),
|
|
withText(R.string.opening_screen_last_tab),
|
|
hasSibling(withId(R.id.radio_button)),
|
|
),
|
|
)
|
|
|
|
private fun homepageAfterFourHoursButton() =
|
|
onView(
|
|
allOf(
|
|
withId(R.id.title),
|
|
withText(R.string.opening_screen_after_four_hours_of_inactivity),
|
|
hasSibling(withId(R.id.radio_button)),
|
|
),
|
|
)
|
|
|
|
private fun goBackButton() = onView(allOf(withContentDescription(R.string.action_bar_up_description)))
|
|
|
|
private fun assertShortcutsButton() =
|
|
shortcutsButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertSponsoredShortcutsButton() =
|
|
sponsoredShortcutsButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertJumpBackInButton() =
|
|
jumpBackInButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertRecentBookmarksButton() =
|
|
recentBookmarksButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertRecentlyVisitedButton() =
|
|
recentlyVisitedButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertPocketButton() =
|
|
pocketButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertSponsoredStoriesButton() =
|
|
sponsoredStoriesButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertOpeningScreenHeading() =
|
|
openingScreenHeading().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertHomepageButton() =
|
|
homepageButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertLastTabButton() =
|
|
lastTabButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
private fun assertHomepageAfterFourHoursButton() =
|
|
homepageAfterFourHoursButton().check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
|
|
|
fun assertShortcutsSwitchState(enabled: Boolean) {
|
|
if (enabled) {
|
|
shortcutsButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
} else {
|
|
shortcutsButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isNotChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
fun assertSponsoredShortcutsCheckBox(checked: Boolean) {
|
|
if (checked) {
|
|
sponsoredShortcutsButton()
|
|
.check(
|
|
matches(
|
|
hasSibling(
|
|
ViewMatchers.withChild(
|
|
allOf(
|
|
withClassName(CoreMatchers.endsWith("CheckBox")),
|
|
isChecked(),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
} else {
|
|
sponsoredShortcutsButton()
|
|
.check(
|
|
matches(
|
|
hasSibling(
|
|
ViewMatchers.withChild(
|
|
allOf(
|
|
withClassName(CoreMatchers.endsWith("CheckBox")),
|
|
isNotChecked(),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
fun assertJumpBackInSwitchState(enabled: Boolean) {
|
|
if (enabled) {
|
|
jumpBackInButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
} else {
|
|
jumpBackInButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isNotChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
fun assertRecentBookmarksSwitchState(enabled: Boolean) {
|
|
if (enabled) {
|
|
recentBookmarksButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
} else {
|
|
recentBookmarksButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isNotChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
fun assertRecentlyVisitedSwitchState(enabled: Boolean) {
|
|
if (enabled) {
|
|
recentlyVisitedButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
} else {
|
|
recentlyVisitedButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isNotChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
fun assertPocketSwitchState(enabled: Boolean) {
|
|
if (enabled) {
|
|
pocketButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
} else {
|
|
pocketButton()
|
|
.check(
|
|
matches(
|
|
TestHelper.hasCousin(
|
|
Matchers.allOf(
|
|
withClassName(Matchers.endsWith("Switch")),
|
|
isNotChecked(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
fun assertSponsoredStoriesCheckBox(checked: Boolean) {
|
|
if (checked) {
|
|
sponsoredStoriesButton()
|
|
.check(
|
|
matches(
|
|
hasSibling(
|
|
ViewMatchers.withChild(
|
|
allOf(
|
|
withClassName(CoreMatchers.endsWith("CheckBox")),
|
|
isChecked(),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
} else {
|
|
sponsoredStoriesButton()
|
|
.check(
|
|
matches(
|
|
hasSibling(
|
|
ViewMatchers.withChild(
|
|
allOf(
|
|
withClassName(CoreMatchers.endsWith("CheckBox")),
|
|
isNotChecked(),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
private val wallpapersMenuButton = onView(withText("Wallpapers"))
|