This repository has been archived by the owner. It is now read-only.
Permalink
Cannot retrieve contributors at this time
269 lines (214 sloc)
14.6 KB
| /* 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/. */ | |
| import XCTest | |
| let firstWebsite = ["url": "www.wikipedia.org", "tabName": "Wikipedia"] | |
| let secondWebsite = ["url": "www.twitter.com", "tabName": "Twitter"] | |
| let homeTab = ["tabName": "home"] | |
| let websiteWithSearchField = ["url": "https://developer.mozilla.org/en-US/search", "urlSearchField": "Search the docs"] | |
| class DragAndDropTests: BaseTestCase { | |
| override func tearDown() { | |
| XCUIDevice.shared.orientation = UIDeviceOrientation.portrait | |
| super.tearDown() | |
| } | |
| private func openTwoWebsites() { | |
| // Open two tabs | |
| navigator.openURL(firstWebsite["url"]!) | |
| navigator.goto(TabTray) | |
| navigator.openURL(secondWebsite["url"]!) | |
| waitUntilPageLoad() | |
| } | |
| private func dragAndDrop(dragElement: XCUIElement, dropOnElement: XCUIElement) { | |
| dragElement.press(forDuration: 2, thenDragTo: dropOnElement) | |
| } | |
| private func checkTabsOrder(dragAndDropTab: Bool, firstTab: String, secondTab: String) { | |
| let firstTabCell = app.collectionViews.cells.element(boundBy: 0).label | |
| let secondTabCell = app.collectionViews.cells.element(boundBy: 1).label | |
| if (dragAndDropTab) { | |
| XCTAssertEqual(firstTabCell, firstTab, "first tab after is not correct") | |
| XCTAssertEqual(secondTabCell, secondTab, "second tab after is not correct") | |
| } else { | |
| XCTAssertEqual(firstTabCell, firstTab, "first tab before is not correct") | |
| XCTAssertEqual(secondTabCell, secondTab, "second tab before is not correct") | |
| } | |
| } | |
| // This feature is working only on iPad so far and so tests enabled only on that schema | |
| func testRearrangeTabs() { | |
| openTwoWebsites() | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Drag first tab on the second one | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]!, secondTab: firstWebsite["tabName"]!) | |
| // Check that focus is kept on last website open | |
| XCTAssertEqual(app.textFields["url"].value! as? String, "mobile.twitter.com/", "The tab has not been dropped correctly") | |
| } | |
| func testRearrangeTabsLandscape() { | |
| // Set the device in landscape mode | |
| XCUIDevice.shared.orientation = UIDeviceOrientation.landscapeLeft | |
| openTwoWebsites() | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Rearrange the tabs via drag home tab and drop it on twitter tab | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]!, secondTab: firstWebsite["tabName"]!) | |
| // Check that focus is kept on last website open | |
| XCTAssertEqual(app.textFields["url"].value! as? String, "mobile.twitter.com/", "The tab has not been dropped correctly") | |
| } | |
| func testRearrangeTabsTabTray() { | |
| openTwoWebsites() | |
| navigator.goto(TabTray) | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]!, secondTab: firstWebsite["tabName"]!) | |
| } | |
| func testRearrangeMoreThan3TabsTabTray() { | |
| // Arranging more than 3 to check that it works moving tabs between lines | |
| let thirdWebsite = ["url": "example.com", "tabName": "Example Domain"] | |
| // Open three websites and home tab | |
| openTwoWebsites() | |
| navigator.performAction(Action.OpenNewTabFromTabTray) | |
| navigator.openNewURL(urlString: thirdWebsite["url"]!) | |
| waitUntilPageLoad() | |
| navigator.goto(TabTray) | |
| let fourthWebsitePosition = app.collectionViews.cells.element(boundBy: 3).label | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| XCTAssertEqual(fourthWebsitePosition, thirdWebsite["tabName"]!, "last tab before is not correct") | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.collectionViews.cells[thirdWebsite["tabName"]!]) | |
| let thirdWebsitePosition = app.collectionViews.cells.element(boundBy: 2).label | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]! , secondTab: homeTab["tabName"]!) | |
| XCTAssertEqual(thirdWebsitePosition, thirdWebsite["tabName"]!, "last tab after is not correct") | |
| } | |
| func testRearrangeTabsTabTrayLandscape() { | |
| // Set the device in landscape mode | |
| XCUIDevice.shared.orientation = UIDeviceOrientation.landscapeLeft | |
| openTwoWebsites() | |
| navigator.goto(TabTray) | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Rearrange the tabs via drag home tab and drop it on twitter tab | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]!, secondTab: firstWebsite["tabName"]!) | |
| } | |
| func testDragDropToInvalidArea() { | |
| openTwoWebsites() | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Rearrange the tabs via drag home tab and drop it to the tabs button | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.buttons["TopTabsViewController.tabsButton"]) | |
| // Check that the order of the tabs have not changed | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Check that focus on the website does not change either | |
| XCTAssertEqual(app.textFields["url"].value! as? String, "mobile.twitter.com/", "The tab has not been dropped correctly") | |
| } | |
| func testDragAndDropHomeTab() { | |
| // Home tab is open and then a new website | |
| navigator.openNewURL(urlString: secondWebsite["url"]!) | |
| waitUntilPageLoad() | |
| waitforExistence(app.collectionViews.cells.element(boundBy: 1)) | |
| checkTabsOrder(dragAndDropTab: false, firstTab: homeTab["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Drag and drop home tab from the second position to the first one | |
| dragAndDrop(dragElement: app.collectionViews.cells["home"], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]! , secondTab: homeTab["tabName"]!) | |
| // Check that focus is kept on last website open | |
| XCTAssertEqual(app.textFields["url"].value! as? String, "mobile.twitter.com/", "The tab has not been dropped correctly") | |
| } | |
| func testDragAndDropHomeTabTabsTray() { | |
| navigator.openNewURL(urlString: secondWebsite["url"]!) | |
| waitUntilPageLoad() | |
| navigator.goto(TabTray) | |
| checkTabsOrder(dragAndDropTab: false, firstTab: homeTab["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Drag and drop home tab from the first position to the second | |
| dragAndDrop(dragElement: app.collectionViews.cells["home"], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]! , secondTab: homeTab["tabName"]!) | |
| } | |
| func testRearrangeTabsPrivateMode() { | |
| navigator.toggleOn(userState.isPrivate, withAction: Action.TogglePrivateMode) | |
| openTwoWebsites() | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Drag first tab on the second one | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]!, secondTab: firstWebsite["tabName"]!) | |
| // Check that focus is kept on last website open | |
| XCTAssertEqual(app.textFields["url"].value! as? String, "mobile.twitter.com/", "The tab has not been dropped correctly") | |
| } | |
| func testRearrangeTabsPrivateModeTabTray() { | |
| navigator.toggleOn(userState.isPrivate, withAction: Action.TogglePrivateMode) | |
| openTwoWebsites() | |
| navigator.goto(TabTray) | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| // Drag first tab on the second one | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]!, secondTab: firstWebsite["tabName"]!) | |
| } | |
| // This test drags the address bar and since it is not possible to drop it on another app, lets do it in a search box | |
| func testDragAddressBarIntoSearchBox() { | |
| navigator.openURL("developer.mozilla.org/en-US/search") | |
| waitUntilPageLoad() | |
| // Check the text in the search field before dragging and dropping the url text field | |
| XCTAssertEqual(app.webViews.searchFields[websiteWithSearchField["urlSearchField"]!].placeholderValue, "Search the docs") | |
| // DragAndDrop the url for only one second so that the TP menu is not shown and the search box is not covered | |
| app.textFields["url"].press(forDuration: 1, thenDragTo: app.webViews.searchFields[websiteWithSearchField["urlSearchField"]!]) | |
| // Verify that the text in the search field is the same as the text in the url text field | |
| XCTAssertEqual(app.webViews.searchFields[websiteWithSearchField["urlSearchField"]!].value as? String, websiteWithSearchField["url"]!) | |
| } | |
| func testRearrangeTabsTabTrayIsKeptinTopTabs() { | |
| openTwoWebsites() | |
| checkTabsOrder(dragAndDropTab: false, firstTab: firstWebsite["tabName"]!, secondTab: secondWebsite["tabName"]!) | |
| navigator.goto(TabTray) | |
| // Drag first tab on the second one | |
| dragAndDrop(dragElement: app.collectionViews.cells[firstWebsite["tabName"]!], dropOnElement: app.collectionViews.cells[secondWebsite["tabName"]!]) | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]!, secondTab: firstWebsite["tabName"]!) | |
| // Leave Tab Tray and check order in Top Tabs | |
| app.collectionViews.cells[firstWebsite["tabName"]!].tap() | |
| checkTabsOrder(dragAndDropTab: true, firstTab: secondWebsite["tabName"]!, secondTab: firstWebsite["tabName"]!) | |
| } | |
| func testDragAndDropHistoryEntry() { | |
| // Drop a bookmark/history entry is only allowed on other apps. This test is to check that nothing happens within the app | |
| openTwoWebsites() | |
| navigator.goto(BrowserTabMenu) | |
| navigator.goto(HomePanel_History) | |
| let firstEntryOnList = app.tables["History List"].cells.element(boundBy: 2).staticTexts[secondWebsite["tabName"]!] | |
| let secondEntryOnList = app.tables["History List"].cells.element(boundBy: 3).staticTexts[firstWebsite["tabName"]!] | |
| XCTAssertTrue(firstEntryOnList.exists, "first entry after is not correct") | |
| XCTAssertTrue(secondEntryOnList.exists, "second entry after is not correct") | |
| // Drag and Drop the element and check that the position of the two elements does not change | |
| app.tables["History List"].cells.staticTexts[firstWebsite["tabName"]!].press(forDuration: 1, thenDragTo: app.tables["History List"].cells.staticTexts[secondWebsite["tabName"]!]) | |
| XCTAssertTrue(firstEntryOnList.exists, "first entry after is not correct") | |
| XCTAssertTrue(secondEntryOnList.exists, "second entry after is not correct") | |
| } | |
| func testDragAndDropBookmarkEntry() { | |
| navigator.openURL(firstWebsite["url"]!) | |
| waitUntilPageLoad() | |
| navigator.performAction(Action.BookmarkThreeDots) | |
| navigator.openURL(secondWebsite["url"]!) | |
| waitUntilPageLoad() | |
| navigator.performAction(Action.BookmarkThreeDots) | |
| navigator.goto(BrowserTabMenu) | |
| navigator.goto(HomePanel_Bookmarks) | |
| waitforExistence(app.tables["Bookmarks List"]) | |
| let firstEntryOnList = app.tables["Bookmarks List"].cells.element(boundBy: 0).staticTexts[firstWebsite["tabName"]!] | |
| let secondEntryOnList = app.tables["Bookmarks List"].cells.element(boundBy: 1).staticTexts[secondWebsite["tabName"]!] | |
| XCTAssertTrue(firstEntryOnList.exists, "first entry after is not correct") | |
| XCTAssertTrue(secondEntryOnList.exists, "second entry after is not correct") | |
| // Drag and Drop the element and check that the position of the two elements does not change | |
| app.tables["Bookmarks List"].cells.staticTexts[firstWebsite["tabName"]!].press(forDuration: 1, thenDragTo: app.tables["Bookmarks List"].cells.staticTexts[secondWebsite["tabName"]!]) | |
| XCTAssertTrue(firstEntryOnList.exists, "first entry after is not correct") | |
| XCTAssertTrue(secondEntryOnList.exists, "second entry after is not correct") | |
| } | |
| func testTryDragAndDropHistoryToURLBar() { | |
| openTwoWebsites() | |
| navigator.goto(HomePanel_History) | |
| waitforExistence(app.tables["History List"].cells.staticTexts[firstWebsite["tabName"]!]) | |
| app.tables["History List"].cells.staticTexts[firstWebsite["tabName"]!].press(forDuration: 1, thenDragTo: app.textFields["url"]) | |
| // It is not allowed to drop the entry on the url field | |
| let urlBarValue = app.textFields["url"].value as? String | |
| XCTAssertEqual(urlBarValue, "Search or enter address") | |
| } | |
| func testTryDragAndDropBookmarkyToURLBar() { | |
| navigator.openURL(firstWebsite["url"]!) | |
| navigator.performAction(Action.BookmarkThreeDots) | |
| navigator.goto(HomePanel_Bookmarks) | |
| waitforExistence(app.tables["Bookmarks List"]) | |
| app.tables["Bookmarks List"].cells.staticTexts[firstWebsite["tabName"]!].press(forDuration: 1, thenDragTo: app.textFields["url"]) | |
| // It is not allowed to drop the entry on the url field | |
| let urlBarValue = app.textFields["url"].value as? String | |
| XCTAssertEqual(urlBarValue, "Search or enter address") | |
| } | |
| } |