1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 package org.mozilla.fenix.ui
7 import androidx.core.net.toUri
10 import org.mozilla.fenix.helpers.AppAndSystemHelper.assertExternalAppOpens
11 import org.mozilla.fenix.helpers.Constants.PackageName.YOUTUBE_APP
12 import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
13 import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
14 import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
15 import org.mozilla.fenix.helpers.RetryTestRule
16 import org.mozilla.fenix.helpers.TestAssetHelper
17 import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
18 import org.mozilla.fenix.helpers.TestHelper.mDevice
19 import org.mozilla.fenix.helpers.TestHelper.verifySnackBarText
20 import org.mozilla.fenix.helpers.TestSetup
21 import org.mozilla.fenix.ui.robots.clickContextMenuItem
22 import org.mozilla.fenix.ui.robots.clickPageObject
23 import org.mozilla.fenix.ui.robots.downloadRobot
24 import org.mozilla.fenix.ui.robots.longClickPageObject
25 import org.mozilla.fenix.ui.robots.navigationToolbar
26 import org.mozilla.fenix.ui.robots.shareOverlay
29 * Tests for verifying basic functionality of content context menus
31 * - Verifies long click "Open link in new tab" UI and functionality
32 * - Verifies long click "Open link in new Private tab" UI and functionality
33 * - Verifies long click "Copy Link" UI and functionality
34 * - Verifies long click "Share Link" UI and functionality
35 * - Verifies long click "Open image in new tab" UI and functionality
36 * - Verifies long click "Save Image" UI and functionality
37 * - Verifies long click "Copy image location" UI and functionality
38 * - Verifies long click items of mixed hypertext items
42 class ContextMenusTest : TestSetup() {
45 val activityIntentTestRule = HomeActivityIntentTestRule(isJumpBackInCFREnabled = false)
49 val retryTestRule = RetryTestRule(3)
51 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243837
53 fun verifyOpenLinkNewTabContextMenuOptionTest() {
55 TestAssetHelper.getGenericAsset(mockWebServer, 4)
57 TestAssetHelper.getGenericAsset(mockWebServer, 1)
60 }.enterURLAndEnterToBrowser(pageLinks.url) {
62 longClickPageObject(itemWithText("Link 1"))
63 verifyContextMenuForLocalHostLinks(genericURL.url)
64 clickContextMenuItem("Open link in new tab")
65 verifySnackBarText("New tab opened")
66 clickSnackbarButton("SWITCH")
67 verifyUrl(genericURL.url.toString())
69 verifyNormalModeSelected()
70 verifyExistingOpenTabs("Test_Page_1")
71 verifyExistingOpenTabs("Test_Page_4")
75 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/244655
77 fun verifyOpenLinkInNewPrivateTabContextMenuOptionTest() {
79 TestAssetHelper.getGenericAsset(mockWebServer, 4)
81 TestAssetHelper.getGenericAsset(mockWebServer, 2)
84 }.enterURLAndEnterToBrowser(pageLinks.url) {
86 longClickPageObject(itemWithText("Link 2"))
87 verifyContextMenuForLocalHostLinks(genericURL.url)
88 clickContextMenuItem("Open link in private tab")
89 verifySnackBarText("New private tab opened")
90 clickSnackbarButton("SWITCH")
91 verifyUrl(genericURL.url.toString())
93 verifyPrivateModeSelected()
94 verifyExistingOpenTabs("Test_Page_2")
98 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243832
100 fun verifyCopyLinkContextMenuOptionTest() {
102 TestAssetHelper.getGenericAsset(mockWebServer, 4)
104 TestAssetHelper.getGenericAsset(mockWebServer, 3)
107 }.enterURLAndEnterToBrowser(pageLinks.url) {
108 mDevice.waitForIdle()
109 longClickPageObject(itemWithText("Link 3"))
110 verifyContextMenuForLocalHostLinks(genericURL.url)
111 clickContextMenuItem("Copy link")
112 verifySnackBarText("Link copied to clipboard")
113 }.openNavigationToolbar {
114 }.visitLinkFromClipboard {
115 verifyUrl(genericURL.url.toString())
119 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243838
121 fun verifyShareLinkContextMenuOptionTest() {
123 TestAssetHelper.getGenericAsset(mockWebServer, 4)
125 TestAssetHelper.getGenericAsset(mockWebServer, 1)
128 }.enterURLAndEnterToBrowser(pageLinks.url) {
129 mDevice.waitForIdle()
130 longClickPageObject(itemWithText("Link 1"))
131 verifyContextMenuForLocalHostLinks(genericURL.url)
132 clickContextMenuItem("Share link")
134 verifyShareLinkIntent(genericURL.url)
139 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243833
141 fun verifyOpenImageNewTabContextMenuOptionTest() {
143 TestAssetHelper.getGenericAsset(mockWebServer, 4)
145 TestAssetHelper.getImageAsset(mockWebServer)
148 }.enterURLAndEnterToBrowser(pageLinks.url) {
149 mDevice.waitForIdle()
150 longClickPageObject(itemWithText("test_link_image"))
151 verifyLinkImageContextMenuItems(imageResource.url)
152 clickContextMenuItem("Open image in new tab")
153 verifySnackBarText("New tab opened")
154 clickSnackbarButton("SWITCH")
155 verifyUrl(imageResource.url.toString())
159 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243834
161 fun verifyCopyImageLocationContextMenuOptionTest() {
163 TestAssetHelper.getGenericAsset(mockWebServer, 4)
165 TestAssetHelper.getImageAsset(mockWebServer)
168 }.enterURLAndEnterToBrowser(pageLinks.url) {
169 mDevice.waitForIdle()
170 longClickPageObject(itemWithText("test_link_image"))
171 verifyLinkImageContextMenuItems(imageResource.url)
172 clickContextMenuItem("Copy image location")
173 verifySnackBarText("Link copied to clipboard")
174 }.openNavigationToolbar {
175 }.visitLinkFromClipboard {
176 verifyUrl(imageResource.url.toString())
180 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243835
182 fun verifySaveImageContextMenuOptionTest() {
184 TestAssetHelper.getGenericAsset(mockWebServer, 4)
186 TestAssetHelper.getImageAsset(mockWebServer)
189 }.enterURLAndEnterToBrowser(pageLinks.url) {
190 mDevice.waitForIdle()
191 longClickPageObject(itemWithText("test_link_image"))
192 verifyLinkImageContextMenuItems(imageResource.url)
193 clickContextMenuItem("Save image")
197 verifyDownloadCompleteNotificationPopup()
198 }.clickOpen("image/jpeg") {} // verify open intent is matched with associated data type
200 verifyPhotosAppOpens()
204 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/352050
206 fun verifyContextMenuLinkVariationsTest() {
208 TestAssetHelper.getGenericAsset(mockWebServer, 4)
210 TestAssetHelper.getGenericAsset(mockWebServer, 1)
212 TestAssetHelper.getImageAsset(mockWebServer)
215 }.enterURLAndEnterToBrowser(pageLinks.url) {
216 mDevice.waitForIdle()
217 longClickPageObject(itemWithText("Link 1"))
218 verifyContextMenuForLocalHostLinks(genericURL.url)
219 dismissContentContextMenu()
220 longClickPageObject(itemWithText("test_link_image"))
221 verifyLinkImageContextMenuItems(imageResource.url)
222 dismissContentContextMenu()
223 longClickPageObject(itemWithText("test_no_link_image"))
224 verifyNoLinkImageContextMenuItems(imageResource.url)
228 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2333840
230 fun verifyPDFContextMenuLinkVariationsTest() {
232 TestAssetHelper.getGenericAsset(mockWebServer, 3)
235 }.enterURLAndEnterToBrowser(genericURL.url) {
236 clickPageObject(itemWithText("PDF form file"))
238 longClickPageObject(itemWithText("Wikipedia link"))
239 verifyContextMenuForLinksToOtherHosts("wikipedia.org".toUri())
240 dismissContentContextMenu()
241 // Some options are missing from the linked and non liked images context menus in PDF files
242 // See https://bugzilla.mozilla.org/show_bug.cgi?id=1012805 for more details
244 verifyContextMenuForLinksToOtherHosts("wikipedia.org".toUri())
245 dismissContentContextMenu()
249 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/832094
251 fun verifyOpenLinkInAppContextMenuOptionTest() {
252 val defaultWebPage = TestAssetHelper.getExternalLinksAsset(mockWebServer)
255 }.enterURLAndEnterToBrowser(defaultWebPage.url) {
256 longClickPageObject(itemContainingText("Youtube full link"))
257 verifyContextMenuForLinksToOtherApps("youtube.com")
258 clickContextMenuItem("Open link in external app")
259 assertExternalAppOpens(YOUTUBE_APP)