Bug 1807268 - Re-enable verifyShowClipboardSuggestionsToggleTest UI test r=jajohnson
[gecko.git] / mobile / android / fenix / app / src / androidTest / java / org / mozilla / fenix / ui / ComposeContextMenusTest.kt
blob0261c72d896d10340e62e9c2e0cf4e1d777e3b7a
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.compose.ui.test.junit4.AndroidComposeTestRule
8 import androidx.core.net.toUri
9 import org.junit.Rule
10 import org.junit.Test
11 import org.mozilla.fenix.helpers.AppAndSystemHelper.assertExternalAppOpens
12 import org.mozilla.fenix.helpers.Constants
13 import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
14 import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
15 import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
16 import org.mozilla.fenix.helpers.RetryTestRule
17 import org.mozilla.fenix.helpers.TestAssetHelper
18 import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
19 import org.mozilla.fenix.helpers.TestHelper.mDevice
20 import org.mozilla.fenix.helpers.TestHelper.verifySnackBarText
21 import org.mozilla.fenix.helpers.TestSetup
22 import org.mozilla.fenix.ui.robots.clickContextMenuItem
23 import org.mozilla.fenix.ui.robots.clickPageObject
24 import org.mozilla.fenix.ui.robots.downloadRobot
25 import org.mozilla.fenix.ui.robots.longClickPageObject
26 import org.mozilla.fenix.ui.robots.navigationToolbar
27 import org.mozilla.fenix.ui.robots.shareOverlay
29 /**
30  *  Tests for verifying basic functionality of content context menus
31  *
32  *  - Verifies long click "Open link in new tab" UI and functionality
33  *  - Verifies long click "Open link in new Private tab" UI and functionality
34  *  - Verifies long click "Copy Link" UI and functionality
35  *  - Verifies long click "Share Link" UI and functionality
36  *  - Verifies long click "Open image in new tab" UI and functionality
37  *  - Verifies long click "Save Image" UI and functionality
38  *  - Verifies long click "Copy image location" UI and functionality
39  *  - Verifies long click items of mixed hypertext items
40  *
41  */
43 class ComposeContextMenusTest : TestSetup() {
45     @get:Rule(order = 0)
46     val composeTestRule =
47         AndroidComposeTestRule(
48             HomeActivityIntentTestRule(
49                 tabsTrayRewriteEnabled = true,
50                 isJumpBackInCFREnabled = false,
51             ),
52         ) { it.activity }
54     @Rule(order = 1)
55     @JvmField
56     val retryTestRule = RetryTestRule(3)
58     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243837
59     @Test
60     fun verifyOpenLinkNewTabContextMenuOptionTest() {
61         val pageLinks =
62             TestAssetHelper.getGenericAsset(mockWebServer, 4)
63         val genericURL =
64             TestAssetHelper.getGenericAsset(mockWebServer, 1)
66         navigationToolbar {
67         }.enterURLAndEnterToBrowser(pageLinks.url) {
68             mDevice.waitForIdle()
69             longClickPageObject(itemWithText("Link 1"))
70             verifyContextMenuForLocalHostLinks(genericURL.url)
71             clickContextMenuItem("Open link in new tab")
72             verifySnackBarText("New tab opened")
73             clickSnackbarButton("SWITCH")
74             verifyUrl(genericURL.url.toString())
75         }.openComposeTabDrawer(composeTestRule) {
76             verifyNormalBrowsingButtonIsSelected()
77             verifyExistingOpenTabs("Test_Page_1")
78             verifyExistingOpenTabs("Test_Page_4")
79         }
80     }
82     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/244655
83     @Test
84     fun verifyOpenLinkInNewPrivateTabContextMenuOptionTest() {
85         val pageLinks =
86             TestAssetHelper.getGenericAsset(mockWebServer, 4)
87         val genericURL =
88             TestAssetHelper.getGenericAsset(mockWebServer, 2)
90         navigationToolbar {
91         }.enterURLAndEnterToBrowser(pageLinks.url) {
92             mDevice.waitForIdle()
93             longClickPageObject(itemWithText("Link 2"))
94             verifyContextMenuForLocalHostLinks(genericURL.url)
95             clickContextMenuItem("Open link in private tab")
96             verifySnackBarText("New private tab opened")
97             clickSnackbarButton("SWITCH")
98             verifyUrl(genericURL.url.toString())
99         }.openComposeTabDrawer(composeTestRule) {
100             verifyPrivateBrowsingButtonIsSelected()
101             verifyExistingOpenTabs("Test_Page_2")
102         }
103     }
105     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243832
106     @Test
107     fun verifyCopyLinkContextMenuOptionTest() {
108         val pageLinks =
109             TestAssetHelper.getGenericAsset(mockWebServer, 4)
110         val genericURL =
111             TestAssetHelper.getGenericAsset(mockWebServer, 3)
113         navigationToolbar {
114         }.enterURLAndEnterToBrowser(pageLinks.url) {
115             mDevice.waitForIdle()
116             longClickPageObject(itemWithText("Link 3"))
117             verifyContextMenuForLocalHostLinks(genericURL.url)
118             clickContextMenuItem("Copy link")
119             verifySnackBarText("Link copied to clipboard")
120         }.openNavigationToolbar {
121         }.visitLinkFromClipboard {
122             verifyUrl(genericURL.url.toString())
123         }
124     }
126     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243838
127     @Test
128     fun verifyShareLinkContextMenuOptionTest() {
129         val pageLinks =
130             TestAssetHelper.getGenericAsset(mockWebServer, 4)
131         val genericURL =
132             TestAssetHelper.getGenericAsset(mockWebServer, 1)
134         navigationToolbar {
135         }.enterURLAndEnterToBrowser(pageLinks.url) {
136             mDevice.waitForIdle()
137             longClickPageObject(itemWithText("Link 1"))
138             verifyContextMenuForLocalHostLinks(genericURL.url)
139             clickContextMenuItem("Share link")
140             shareOverlay {
141                 verifyShareLinkIntent(genericURL.url)
142             }
143         }
144     }
146     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243833
147     @Test
148     fun verifyOpenImageNewTabContextMenuOptionTest() {
149         val pageLinks =
150             TestAssetHelper.getGenericAsset(mockWebServer, 4)
151         val imageResource =
152             TestAssetHelper.getImageAsset(mockWebServer)
154         navigationToolbar {
155         }.enterURLAndEnterToBrowser(pageLinks.url) {
156             mDevice.waitForIdle()
157             longClickPageObject(itemWithText("test_link_image"))
158             verifyLinkImageContextMenuItems(imageResource.url)
159             clickContextMenuItem("Open image in new tab")
160             verifySnackBarText("New tab opened")
161             clickSnackbarButton("SWITCH")
162             verifyUrl(imageResource.url.toString())
163         }
164     }
166     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243834
167     @Test
168     fun verifyCopyImageLocationContextMenuOptionTest() {
169         val pageLinks =
170             TestAssetHelper.getGenericAsset(mockWebServer, 4)
171         val imageResource =
172             TestAssetHelper.getImageAsset(mockWebServer)
174         navigationToolbar {
175         }.enterURLAndEnterToBrowser(pageLinks.url) {
176             mDevice.waitForIdle()
177             longClickPageObject(itemWithText("test_link_image"))
178             verifyLinkImageContextMenuItems(imageResource.url)
179             clickContextMenuItem("Copy image location")
180             verifySnackBarText("Link copied to clipboard")
181         }.openNavigationToolbar {
182         }.visitLinkFromClipboard {
183             verifyUrl(imageResource.url.toString())
184         }
185     }
187     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243835
188     @Test
189     fun verifySaveImageContextMenuOptionTest() {
190         val pageLinks =
191             TestAssetHelper.getGenericAsset(mockWebServer, 4)
192         val imageResource =
193             TestAssetHelper.getImageAsset(mockWebServer)
195         navigationToolbar {
196         }.enterURLAndEnterToBrowser(pageLinks.url) {
197             mDevice.waitForIdle()
198             longClickPageObject(itemWithText("test_link_image"))
199             verifyLinkImageContextMenuItems(imageResource.url)
200             clickContextMenuItem("Save image")
201         }
203         downloadRobot {
204             verifyDownloadCompleteNotificationPopup()
205         }.clickOpen("image/jpeg") {} // verify open intent is matched with associated data type
206         downloadRobot {
207             verifyPhotosAppOpens()
208         }
209     }
211     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/352050
212     @Test
213     fun verifyContextMenuLinkVariationsTest() {
214         val pageLinks =
215             TestAssetHelper.getGenericAsset(mockWebServer, 4)
216         val genericURL =
217             TestAssetHelper.getGenericAsset(mockWebServer, 1)
218         val imageResource =
219             TestAssetHelper.getImageAsset(mockWebServer)
221         navigationToolbar {
222         }.enterURLAndEnterToBrowser(pageLinks.url) {
223             mDevice.waitForIdle()
224             longClickPageObject(itemWithText("Link 1"))
225             verifyContextMenuForLocalHostLinks(genericURL.url)
226             dismissContentContextMenu()
227             longClickPageObject(itemWithText("test_link_image"))
228             verifyLinkImageContextMenuItems(imageResource.url)
229             dismissContentContextMenu()
230             longClickPageObject(itemWithText("test_no_link_image"))
231             verifyNoLinkImageContextMenuItems(imageResource.url)
232         }
233     }
235     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2333840
236     @Test
237     fun verifyPDFContextMenuLinkVariationsTest() {
238         val genericURL =
239             TestAssetHelper.getGenericAsset(mockWebServer, 3)
241         navigationToolbar {
242         }.enterURLAndEnterToBrowser(genericURL.url) {
243             clickPageObject(itemWithText("PDF form file"))
244             waitForPageToLoad()
245             longClickPageObject(itemWithText("Wikipedia link"))
246             verifyContextMenuForLinksToOtherHosts("wikipedia.org".toUri())
247             dismissContentContextMenu()
248             // Some options are missing from the linked and non liked images context menus in PDF files
249             // See https://bugzilla.mozilla.org/show_bug.cgi?id=1012805 for more details
250             longClickPDFImage()
251             verifyContextMenuForLinksToOtherHosts("wikipedia.org".toUri())
252             dismissContentContextMenu()
253         }
254     }
256     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/832094
257     @Test
258     fun verifyOpenLinkInAppContextMenuOptionTest() {
259         val defaultWebPage = TestAssetHelper.getExternalLinksAsset(mockWebServer)
261         navigationToolbar {
262         }.enterURLAndEnterToBrowser(defaultWebPage.url) {
263             longClickPageObject(itemContainingText("Youtube full link"))
264             verifyContextMenuForLinksToOtherApps("youtube.com")
265             clickContextMenuItem("Open link in external app")
266             assertExternalAppOpens(Constants.PackageName.YOUTUBE_APP)
267         }
268     }