Bug 1807268 - Re-enable verifyShowClipboardSuggestionsToggleTest UI test r=jajohnson
[gecko.git] / mobile / android / fenix / app / src / androidTest / java / org / mozilla / fenix / ui / ContextMenusTest.kt
blob80f2d2a75c866dc40916529b5e5d7e65c02ceeaf
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
8 import org.junit.Rule
9 import org.junit.Test
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
28 /**
29  *  Tests for verifying basic functionality of content context menus
30  *
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
39  *
40  */
42 class ContextMenusTest : TestSetup() {
44     @get:Rule
45     val activityIntentTestRule = HomeActivityIntentTestRule(isJumpBackInCFREnabled = false)
47     @Rule
48     @JvmField
49     val retryTestRule = RetryTestRule(3)
51     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243837
52     @Test
53     fun verifyOpenLinkNewTabContextMenuOptionTest() {
54         val pageLinks =
55             TestAssetHelper.getGenericAsset(mockWebServer, 4)
56         val genericURL =
57             TestAssetHelper.getGenericAsset(mockWebServer, 1)
59         navigationToolbar {
60         }.enterURLAndEnterToBrowser(pageLinks.url) {
61             mDevice.waitForIdle()
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())
68         }.openTabDrawer {
69             verifyNormalModeSelected()
70             verifyExistingOpenTabs("Test_Page_1")
71             verifyExistingOpenTabs("Test_Page_4")
72         }
73     }
75     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/244655
76     @Test
77     fun verifyOpenLinkInNewPrivateTabContextMenuOptionTest() {
78         val pageLinks =
79             TestAssetHelper.getGenericAsset(mockWebServer, 4)
80         val genericURL =
81             TestAssetHelper.getGenericAsset(mockWebServer, 2)
83         navigationToolbar {
84         }.enterURLAndEnterToBrowser(pageLinks.url) {
85             mDevice.waitForIdle()
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())
92         }.openTabDrawer {
93             verifyPrivateModeSelected()
94             verifyExistingOpenTabs("Test_Page_2")
95         }
96     }
98     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243832
99     @Test
100     fun verifyCopyLinkContextMenuOptionTest() {
101         val pageLinks =
102             TestAssetHelper.getGenericAsset(mockWebServer, 4)
103         val genericURL =
104             TestAssetHelper.getGenericAsset(mockWebServer, 3)
106         navigationToolbar {
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())
116         }
117     }
119     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243838
120     @Test
121     fun verifyShareLinkContextMenuOptionTest() {
122         val pageLinks =
123             TestAssetHelper.getGenericAsset(mockWebServer, 4)
124         val genericURL =
125             TestAssetHelper.getGenericAsset(mockWebServer, 1)
127         navigationToolbar {
128         }.enterURLAndEnterToBrowser(pageLinks.url) {
129             mDevice.waitForIdle()
130             longClickPageObject(itemWithText("Link 1"))
131             verifyContextMenuForLocalHostLinks(genericURL.url)
132             clickContextMenuItem("Share link")
133             shareOverlay {
134                 verifyShareLinkIntent(genericURL.url)
135             }
136         }
137     }
139     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243833
140     @Test
141     fun verifyOpenImageNewTabContextMenuOptionTest() {
142         val pageLinks =
143             TestAssetHelper.getGenericAsset(mockWebServer, 4)
144         val imageResource =
145             TestAssetHelper.getImageAsset(mockWebServer)
147         navigationToolbar {
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())
156         }
157     }
159     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243834
160     @Test
161     fun verifyCopyImageLocationContextMenuOptionTest() {
162         val pageLinks =
163             TestAssetHelper.getGenericAsset(mockWebServer, 4)
164         val imageResource =
165             TestAssetHelper.getImageAsset(mockWebServer)
167         navigationToolbar {
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())
177         }
178     }
180     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243835
181     @Test
182     fun verifySaveImageContextMenuOptionTest() {
183         val pageLinks =
184             TestAssetHelper.getGenericAsset(mockWebServer, 4)
185         val imageResource =
186             TestAssetHelper.getImageAsset(mockWebServer)
188         navigationToolbar {
189         }.enterURLAndEnterToBrowser(pageLinks.url) {
190             mDevice.waitForIdle()
191             longClickPageObject(itemWithText("test_link_image"))
192             verifyLinkImageContextMenuItems(imageResource.url)
193             clickContextMenuItem("Save image")
194         }
196         downloadRobot {
197             verifyDownloadCompleteNotificationPopup()
198         }.clickOpen("image/jpeg") {} // verify open intent is matched with associated data type
199         downloadRobot {
200             verifyPhotosAppOpens()
201         }
202     }
204     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/352050
205     @Test
206     fun verifyContextMenuLinkVariationsTest() {
207         val pageLinks =
208             TestAssetHelper.getGenericAsset(mockWebServer, 4)
209         val genericURL =
210             TestAssetHelper.getGenericAsset(mockWebServer, 1)
211         val imageResource =
212             TestAssetHelper.getImageAsset(mockWebServer)
214         navigationToolbar {
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)
225         }
226     }
228     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2333840
229     @Test
230     fun verifyPDFContextMenuLinkVariationsTest() {
231         val genericURL =
232             TestAssetHelper.getGenericAsset(mockWebServer, 3)
234         navigationToolbar {
235         }.enterURLAndEnterToBrowser(genericURL.url) {
236             clickPageObject(itemWithText("PDF form file"))
237             waitForPageToLoad()
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
243             longClickPDFImage()
244             verifyContextMenuForLinksToOtherHosts("wikipedia.org".toUri())
245             dismissContentContextMenu()
246         }
247     }
249     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/832094
250     @Test
251     fun verifyOpenLinkInAppContextMenuOptionTest() {
252         val defaultWebPage = TestAssetHelper.getExternalLinksAsset(mockWebServer)
254         navigationToolbar {
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)
260         }
261     }