Bug 1842267 - Convert `BookmarksTest` to support the Tabs Tray rewrite
parent
cf1e9b35c8
commit
1adc04e44e
@ -0,0 +1,872 @@
|
|||||||
|
/* 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
|
||||||
|
|
||||||
|
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
|
||||||
|
import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu
|
||||||
|
import androidx.test.espresso.Espresso.pressBack
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
|
||||||
|
import androidx.test.uiautomator.UiDevice
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import mozilla.appservices.places.BookmarkRoot
|
||||||
|
import okhttp3.mockwebserver.MockWebServer
|
||||||
|
import org.junit.After
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.customannotations.SmokeTest
|
||||||
|
import org.mozilla.fenix.ext.bookmarkStorage
|
||||||
|
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
|
||||||
|
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
|
||||||
|
import org.mozilla.fenix.helpers.RecyclerViewIdlingResource
|
||||||
|
import org.mozilla.fenix.helpers.RetryTestRule
|
||||||
|
import org.mozilla.fenix.helpers.TestAssetHelper
|
||||||
|
import org.mozilla.fenix.helpers.TestHelper
|
||||||
|
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
|
||||||
|
import org.mozilla.fenix.helpers.TestHelper.exitMenu
|
||||||
|
import org.mozilla.fenix.helpers.TestHelper.longTapSelectItem
|
||||||
|
import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources
|
||||||
|
import org.mozilla.fenix.ui.robots.bookmarksMenu
|
||||||
|
import org.mozilla.fenix.ui.robots.browserScreen
|
||||||
|
import org.mozilla.fenix.ui.robots.homeScreen
|
||||||
|
import org.mozilla.fenix.ui.robots.multipleSelectionToolbar
|
||||||
|
import org.mozilla.fenix.ui.robots.navigationToolbar
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for verifying basic functionality of bookmarks
|
||||||
|
*/
|
||||||
|
class ComposeBookmarksTest {
|
||||||
|
private lateinit var mockWebServer: MockWebServer
|
||||||
|
private lateinit var mDevice: UiDevice
|
||||||
|
private val bookmarksFolderName = "New Folder"
|
||||||
|
private val testBookmark = object {
|
||||||
|
var title: String = "Bookmark title"
|
||||||
|
var url: String = "https://www.example.com"
|
||||||
|
}
|
||||||
|
|
||||||
|
@get:Rule(order = 0)
|
||||||
|
val activityTestRule =
|
||||||
|
AndroidComposeTestRule(
|
||||||
|
HomeActivityIntentTestRule.withDefaultSettingsOverrides(
|
||||||
|
tabsTrayRewriteEnabled = true,
|
||||||
|
),
|
||||||
|
) { it.activity }
|
||||||
|
|
||||||
|
@Rule(order = 1)
|
||||||
|
@JvmField
|
||||||
|
val retryTestRule = RetryTestRule(3)
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
mDevice = UiDevice.getInstance(getInstrumentation())
|
||||||
|
mockWebServer = MockWebServer().apply {
|
||||||
|
dispatcher = AndroidAssetDispatcher()
|
||||||
|
start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
fun tearDown() {
|
||||||
|
mockWebServer.shutdown()
|
||||||
|
// Clearing all bookmarks data after each test to avoid overlapping data
|
||||||
|
val bookmarksStorage = activityTestRule.activity?.bookmarkStorage
|
||||||
|
runBlocking {
|
||||||
|
val bookmarks = bookmarksStorage?.getTree(BookmarkRoot.Mobile.id)?.children
|
||||||
|
bookmarks?.forEach { bookmarksStorage.deleteNode(it.guid) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun verifyEmptyBookmarksMenuTest() {
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 1),
|
||||||
|
) {
|
||||||
|
verifyBookmarksMenuView()
|
||||||
|
verifyAddFolderButton()
|
||||||
|
verifyCloseButton()
|
||||||
|
verifyBookmarkTitle("Desktop Bookmarks")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun defaultDesktopBookmarksFoldersTest() {
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 1),
|
||||||
|
) {
|
||||||
|
selectFolder("Desktop Bookmarks")
|
||||||
|
verifyFolderTitle("Bookmarks Menu")
|
||||||
|
verifyFolderTitle("Bookmarks Toolbar")
|
||||||
|
verifyFolderTitle("Other Bookmarks")
|
||||||
|
verifySyncSignInButton()
|
||||||
|
}
|
||||||
|
}.clickSingInToSyncButton {
|
||||||
|
verifyTurnOnSyncToolbarTitle()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun verifyBookmarkButtonTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
navigationToolbar {
|
||||||
|
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.bookmarkPage {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
verifyEditBookmarkButton()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun addBookmarkTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {
|
||||||
|
verifyBookmarkedURL(defaultWebPage.url.toString())
|
||||||
|
verifyBookmarkFavicon(defaultWebPage.url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun createBookmarkFolderTest() {
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 1),
|
||||||
|
) {
|
||||||
|
clickAddFolderButton()
|
||||||
|
verifyKeyboardVisible()
|
||||||
|
addNewFolderName(bookmarksFolderName)
|
||||||
|
saveNewFolder()
|
||||||
|
verifyFolderTitle(bookmarksFolderName)
|
||||||
|
verifyKeyboardHidden()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun cancelCreateBookmarkFolderTest() {
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
clickAddFolderButton()
|
||||||
|
addNewFolderName(bookmarksFolderName)
|
||||||
|
navigateUp()
|
||||||
|
verifyKeyboardHidden()
|
||||||
|
verifyBookmarkFolderIsNotCreated(bookmarksFolderName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun cancelEditBookmarkTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
navigationToolbar {
|
||||||
|
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.bookmarkPage {
|
||||||
|
clickSnackbarButton("EDIT")
|
||||||
|
}
|
||||||
|
bookmarksMenu {
|
||||||
|
verifyEditBookmarksView()
|
||||||
|
changeBookmarkTitle(testBookmark.title)
|
||||||
|
changeBookmarkUrl(testBookmark.url)
|
||||||
|
}.closeEditBookmarkSection {
|
||||||
|
}
|
||||||
|
browserScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
verifyBookmarkTitle(defaultWebPage.title)
|
||||||
|
verifyBookmarkedURL(defaultWebPage.url.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun editBookmarkTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.editBookmarkPage {
|
||||||
|
verifyEditBookmarksView()
|
||||||
|
changeBookmarkTitle(testBookmark.title)
|
||||||
|
changeBookmarkUrl(testBookmark.url)
|
||||||
|
saveEditBookmark()
|
||||||
|
}
|
||||||
|
browserScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {}
|
||||||
|
verifyBookmarkTitle(testBookmark.title)
|
||||||
|
verifyBookmarkedURL(testBookmark.url)
|
||||||
|
}.openBookmarkWithTitle(testBookmark.title) {
|
||||||
|
verifyUrl("example.com")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyBookmarkURLTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {}
|
||||||
|
}.openThreeDotMenu(defaultWebPage.title) {
|
||||||
|
}.clickCopy {
|
||||||
|
verifyCopySnackBarText()
|
||||||
|
navigateUp()
|
||||||
|
}
|
||||||
|
|
||||||
|
navigationToolbar {
|
||||||
|
}.clickUrlbar {
|
||||||
|
clickClearButton()
|
||||||
|
longClickToolbar()
|
||||||
|
clickPasteText()
|
||||||
|
verifyTypedToolbarText(defaultWebPage.url.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun threeDotMenuShareBookmarkTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {}
|
||||||
|
}.openThreeDotMenu(defaultWebPage.title) {
|
||||||
|
}.clickShare {
|
||||||
|
verifyShareOverlay()
|
||||||
|
verifyShareBookmarkFavicon()
|
||||||
|
verifyShareBookmarkTitle()
|
||||||
|
verifyShareBookmarkUrl()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun openBookmarkInNewTabTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {}
|
||||||
|
}.openThreeDotMenu(defaultWebPage.title) {
|
||||||
|
}.clickOpenInNewTab(activityTestRule) {
|
||||||
|
verifyTabTrayIsOpen()
|
||||||
|
verifyNormalBrowsingButtonIsSelected()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun openAllInTabsTest() {
|
||||||
|
val webPages = listOf(
|
||||||
|
TestAssetHelper.getGenericAsset(mockWebServer, 1),
|
||||||
|
TestAssetHelper.getGenericAsset(mockWebServer, 2),
|
||||||
|
TestAssetHelper.getGenericAsset(mockWebServer, 3),
|
||||||
|
TestAssetHelper.getGenericAsset(mockWebServer, 4),
|
||||||
|
)
|
||||||
|
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
createFolder("root")
|
||||||
|
createFolder("sub", "root")
|
||||||
|
createFolder("empty", "root")
|
||||||
|
}.closeMenu {
|
||||||
|
}
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(webPages[0].url)
|
||||||
|
createBookmark(webPages[1].url, "root")
|
||||||
|
createBookmark(webPages[2].url, "root")
|
||||||
|
createBookmark(webPages[3].url, "sub")
|
||||||
|
}.openComposeTabDrawer(activityTestRule) {
|
||||||
|
closeTab()
|
||||||
|
}
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
}.openThreeDotMenu("root") {
|
||||||
|
}.clickOpenAllInTabs(activityTestRule) {
|
||||||
|
verifyTabTrayIsOpen()
|
||||||
|
verifyNormalBrowsingButtonIsSelected()
|
||||||
|
|
||||||
|
verifyExistingOpenTabs("Test_Page_2", "Test_Page_3", "Test_Page_4")
|
||||||
|
|
||||||
|
// Bookmark that is not under the root folder should not be opened
|
||||||
|
verifyNoExistingOpenTabs("Test_Page_1")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun openAllInPrivateTabsTest() {
|
||||||
|
val webPages = listOf(
|
||||||
|
TestAssetHelper.getGenericAsset(mockWebServer, 1),
|
||||||
|
TestAssetHelper.getGenericAsset(mockWebServer, 2),
|
||||||
|
)
|
||||||
|
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
createFolder("root")
|
||||||
|
createFolder("sub", "root")
|
||||||
|
createFolder("empty", "root")
|
||||||
|
}.closeMenu {
|
||||||
|
}
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(webPages[0].url, "root")
|
||||||
|
createBookmark(webPages[1].url, "sub")
|
||||||
|
}.openComposeTabDrawer(activityTestRule) {
|
||||||
|
closeTab()
|
||||||
|
}
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
}.openThreeDotMenu("root") {
|
||||||
|
}.clickOpenAllInPrivateTabs(activityTestRule) {
|
||||||
|
verifyTabTrayIsOpen()
|
||||||
|
verifyPrivateBrowsingButtonIsSelected()
|
||||||
|
|
||||||
|
verifyExistingOpenTabs("Test_Page_1", "Test_Page_2")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun openBookmarkInPrivateTabTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {}
|
||||||
|
}.openThreeDotMenu(defaultWebPage.title) {
|
||||||
|
}.clickOpenInPrivateTab(activityTestRule) {
|
||||||
|
verifyTabTrayIsOpen()
|
||||||
|
verifyPrivateBrowsingButtonIsSelected()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun deleteBookmarkTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {}
|
||||||
|
}.openThreeDotMenu(defaultWebPage.title) {
|
||||||
|
}.clickDelete {
|
||||||
|
verifyDeleteSnackBarText()
|
||||||
|
verifyUndoDeleteSnackBarButton()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun undoDeleteBookmarkTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {}
|
||||||
|
}.openThreeDotMenu(defaultWebPage.title) {
|
||||||
|
}.clickDelete {
|
||||||
|
verifyUndoDeleteSnackBarButton()
|
||||||
|
clickUndoDeleteButton()
|
||||||
|
verifySnackBarHidden()
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {
|
||||||
|
verifyBookmarkedURL(defaultWebPage.url.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun bookmarksMultiSelectionToolbarItemsTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {
|
||||||
|
longTapSelectItem(defaultWebPage.url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
multipleSelectionToolbar {
|
||||||
|
verifyMultiSelectionCheckmark(defaultWebPage.url)
|
||||||
|
verifyMultiSelectionCounter()
|
||||||
|
verifyShareBookmarksButton()
|
||||||
|
verifyCloseToolbarButton()
|
||||||
|
}.closeToolbarReturnToBookmarks {
|
||||||
|
verifyBookmarksMenuView()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun openSelectionInNewTabTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openComposeTabDrawer(activityTestRule) {
|
||||||
|
closeTab()
|
||||||
|
}
|
||||||
|
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {
|
||||||
|
longTapSelectItem(defaultWebPage.url)
|
||||||
|
openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
multipleSelectionToolbar {
|
||||||
|
}.clickOpenNewTab(activityTestRule) {
|
||||||
|
verifyTabTrayIsOpen()
|
||||||
|
verifyNormalBrowsingButtonIsSelected()
|
||||||
|
verifyNormalTabsList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun openSelectionInPrivateTabTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {
|
||||||
|
longTapSelectItem(defaultWebPage.url)
|
||||||
|
openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
multipleSelectionToolbar {
|
||||||
|
}.clickOpenPrivateTab(activityTestRule) {
|
||||||
|
verifyPrivateBrowsingButtonIsSelected()
|
||||||
|
verifyPrivateTabsList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun deleteMultipleSelectionTest() {
|
||||||
|
val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(firstWebPage.url)
|
||||||
|
createBookmark(secondWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 3),
|
||||||
|
) {
|
||||||
|
longTapSelectItem(firstWebPage.url)
|
||||||
|
longTapSelectItem(secondWebPage.url)
|
||||||
|
}
|
||||||
|
openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
|
||||||
|
}
|
||||||
|
|
||||||
|
multipleSelectionToolbar {
|
||||||
|
clickMultiSelectionDelete()
|
||||||
|
}
|
||||||
|
|
||||||
|
bookmarksMenu {
|
||||||
|
verifyDeleteMultipleBookmarksSnackBar()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun undoDeleteMultipleSelectionTest() {
|
||||||
|
val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(firstWebPage.url)
|
||||||
|
createBookmark(secondWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 3),
|
||||||
|
) {
|
||||||
|
longTapSelectItem(firstWebPage.url)
|
||||||
|
longTapSelectItem(secondWebPage.url)
|
||||||
|
}
|
||||||
|
openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
|
||||||
|
}
|
||||||
|
|
||||||
|
multipleSelectionToolbar {
|
||||||
|
clickMultiSelectionDelete()
|
||||||
|
}
|
||||||
|
|
||||||
|
bookmarksMenu {
|
||||||
|
verifyDeleteMultipleBookmarksSnackBar()
|
||||||
|
clickUndoDeleteButton()
|
||||||
|
verifyBookmarkedURL(firstWebPage.url.toString())
|
||||||
|
verifyBookmarkedURL(secondWebPage.url.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun multipleSelectionShareButtonTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {
|
||||||
|
longTapSelectItem(defaultWebPage.url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
multipleSelectionToolbar {
|
||||||
|
clickShareBookmarksButton()
|
||||||
|
verifyShareOverlay()
|
||||||
|
verifyShareTabFavicon()
|
||||||
|
verifyShareTabTitle()
|
||||||
|
verifyShareTabUrl()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun multipleBookmarkDeletionsTest() {
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
createFolder("1")
|
||||||
|
getInstrumentation().waitForIdleSync()
|
||||||
|
createFolder("2")
|
||||||
|
getInstrumentation().waitForIdleSync()
|
||||||
|
createFolder("3")
|
||||||
|
getInstrumentation().waitForIdleSync()
|
||||||
|
}.openThreeDotMenu("1") {
|
||||||
|
}.clickDelete {
|
||||||
|
verifyDeleteFolderConfirmationMessage()
|
||||||
|
confirmDeletion()
|
||||||
|
verifyDeleteSnackBarText()
|
||||||
|
}.openThreeDotMenu("2") {
|
||||||
|
}.clickDelete {
|
||||||
|
verifyDeleteFolderConfirmationMessage()
|
||||||
|
confirmDeletion()
|
||||||
|
verifyDeleteSnackBarText()
|
||||||
|
verifyFolderTitle("3")
|
||||||
|
// On some devices we need to wait for the Snackbar to be gone before continuing
|
||||||
|
TestHelper.waitUntilSnackbarGone()
|
||||||
|
}.closeMenu {
|
||||||
|
}
|
||||||
|
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
verifyFolderTitle("3")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun changeBookmarkParentFolderTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {
|
||||||
|
createFolder(bookmarksFolderName)
|
||||||
|
}
|
||||||
|
}.openThreeDotMenu(defaultWebPage.title) {
|
||||||
|
}.clickEdit {
|
||||||
|
clickParentFolderSelector()
|
||||||
|
selectFolder(bookmarksFolderName)
|
||||||
|
navigateUp()
|
||||||
|
saveEditBookmark()
|
||||||
|
selectFolder(bookmarksFolderName)
|
||||||
|
verifyBookmarkedURL(defaultWebPage.url.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun navigateBookmarksFoldersTest() {
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
createFolder("1")
|
||||||
|
getInstrumentation().waitForIdleSync()
|
||||||
|
waitForBookmarksFolderContentToExist("Bookmarks", "1")
|
||||||
|
selectFolder("1")
|
||||||
|
verifyCurrentFolderTitle("1")
|
||||||
|
createFolder("2")
|
||||||
|
getInstrumentation().waitForIdleSync()
|
||||||
|
waitForBookmarksFolderContentToExist("1", "2")
|
||||||
|
selectFolder("2")
|
||||||
|
verifyCurrentFolderTitle("2")
|
||||||
|
navigateUp()
|
||||||
|
waitForBookmarksFolderContentToExist("1", "2")
|
||||||
|
verifyCurrentFolderTitle("1")
|
||||||
|
mDevice.pressBack()
|
||||||
|
verifyBookmarksMenuView()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun cantSelectDesktopFoldersTest() {
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list)),
|
||||||
|
) {
|
||||||
|
longTapDesktopFolder("Desktop Bookmarks")
|
||||||
|
verifySelectDefaultFolderSnackBarText()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun verifyCloseMenuTest() {
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
}.closeMenu {
|
||||||
|
verifyHomeScreen()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun deleteBookmarkInEditModeTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 2),
|
||||||
|
) {}
|
||||||
|
}.openThreeDotMenu(defaultWebPage.title) {
|
||||||
|
}.clickEdit {
|
||||||
|
clickDeleteInEditModeButton()
|
||||||
|
cancelDeletion()
|
||||||
|
clickDeleteInEditModeButton()
|
||||||
|
confirmDeletion()
|
||||||
|
verifyDeleteSnackBarText()
|
||||||
|
verifyBookmarkIsDeleted("Test_Page_1")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SmokeTest
|
||||||
|
@Test
|
||||||
|
fun undoDeleteBookmarkFolderTest() {
|
||||||
|
browserScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
registerAndCleanupIdlingResources(
|
||||||
|
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.bookmark_list), 1),
|
||||||
|
) {
|
||||||
|
createFolder("My Folder")
|
||||||
|
verifyFolderTitle("My Folder")
|
||||||
|
}
|
||||||
|
}.openThreeDotMenu("My Folder") {
|
||||||
|
}.clickDelete {
|
||||||
|
cancelFolderDeletion()
|
||||||
|
verifyFolderTitle("My Folder")
|
||||||
|
}.openThreeDotMenu("My Folder") {
|
||||||
|
}.clickDelete {
|
||||||
|
confirmDeletion()
|
||||||
|
verifyDeleteSnackBarText()
|
||||||
|
clickUndoDeleteButton()
|
||||||
|
verifyFolderTitle("My Folder")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun verifySearchBookmarksViewTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
}.clickSearchButton {
|
||||||
|
verifySearchView()
|
||||||
|
verifySearchToolbar(true)
|
||||||
|
verifySearchSelectorButton()
|
||||||
|
verifySearchEngineIcon("Bookmarks")
|
||||||
|
verifySearchBarPlaceholder("Search bookmarks")
|
||||||
|
verifySearchBarPosition(true)
|
||||||
|
tapOutsideToDismissSearchBar()
|
||||||
|
verifySearchToolbar(false)
|
||||||
|
}
|
||||||
|
bookmarksMenu {
|
||||||
|
}.goBackToBrowserScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openSettings {
|
||||||
|
}.openCustomizeSubMenu {
|
||||||
|
clickTopToolbarToggle()
|
||||||
|
}
|
||||||
|
|
||||||
|
exitMenu()
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
}.clickSearchButton {
|
||||||
|
verifySearchToolbar(true)
|
||||||
|
verifySearchEngineIcon("Bookmarks")
|
||||||
|
verifySearchBarPosition(false)
|
||||||
|
pressBack()
|
||||||
|
verifySearchToolbar(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun verifySearchForBookmarkedItemsTest() {
|
||||||
|
val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
val secondWebPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
|
||||||
|
|
||||||
|
homeScreen {
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
createFolder(bookmarksFolderName)
|
||||||
|
}
|
||||||
|
|
||||||
|
exitMenu()
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(firstWebPage.url, bookmarksFolderName)
|
||||||
|
createBookmark(secondWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
}.clickSearchButton {
|
||||||
|
// Search for a valid term
|
||||||
|
typeSearch(firstWebPage.title)
|
||||||
|
verifySearchEngineSuggestionResults(activityTestRule, firstWebPage.url.toString())
|
||||||
|
verifyNoSuggestionsAreDisplayed(activityTestRule, secondWebPage.url.toString())
|
||||||
|
// Search for invalid term
|
||||||
|
typeSearch("Android")
|
||||||
|
verifyNoSuggestionsAreDisplayed(activityTestRule, firstWebPage.url.toString())
|
||||||
|
verifyNoSuggestionsAreDisplayed(activityTestRule, secondWebPage.url.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun verifyVoiceSearchInBookmarksTest() {
|
||||||
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(defaultWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
}.clickSearchButton {
|
||||||
|
verifySearchToolbar(true)
|
||||||
|
verifySearchEngineIcon("Bookmarks")
|
||||||
|
startVoiceSearch()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun verifyDeletedBookmarksCanNotBeSearchedTest() {
|
||||||
|
val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||||
|
val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2)
|
||||||
|
val thirdWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 3)
|
||||||
|
|
||||||
|
browserScreen {
|
||||||
|
createBookmark(firstWebPage.url)
|
||||||
|
createBookmark(secondWebPage.url)
|
||||||
|
createBookmark(thirdWebPage.url)
|
||||||
|
}.openThreeDotMenu {
|
||||||
|
}.openBookmarks {
|
||||||
|
}.openThreeDotMenu(firstWebPage.title) {
|
||||||
|
}.clickDelete {
|
||||||
|
verifyBookmarkIsDeleted(firstWebPage.title)
|
||||||
|
}.openThreeDotMenu(secondWebPage.title) {
|
||||||
|
}.clickDelete {
|
||||||
|
verifyBookmarkIsDeleted(secondWebPage.title)
|
||||||
|
}.clickSearchButton {
|
||||||
|
// Search for a valid term
|
||||||
|
typeSearch("generic")
|
||||||
|
verifyNoSuggestionsAreDisplayed(activityTestRule, firstWebPage.url.toString())
|
||||||
|
verifyNoSuggestionsAreDisplayed(activityTestRule, secondWebPage.url.toString())
|
||||||
|
verifySearchEngineSuggestionResults(activityTestRule, thirdWebPage.url.toString())
|
||||||
|
pressBack()
|
||||||
|
}
|
||||||
|
bookmarksMenu {
|
||||||
|
}.openThreeDotMenu(thirdWebPage.title) {
|
||||||
|
}.clickDelete {
|
||||||
|
verifyBookmarkIsDeleted(thirdWebPage.title)
|
||||||
|
}.clickSearchButton {
|
||||||
|
// Search for a valid term
|
||||||
|
typeSearch("generic")
|
||||||
|
verifyNoSuggestionsAreDisplayed(activityTestRule, thirdWebPage.url.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue