179 lines
5.3 KiB
Swift
179 lines
5.3 KiB
Swift
// 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
|
|
|
|
private struct Constants {
|
|
static let SnapshotConversation = "01_Conversation"
|
|
static let SnapshotContactList = "02_ContactList"
|
|
static let SnapshotPin = "03_Pin"
|
|
}
|
|
|
|
class ScreenshotsUITests: XCTestCase {
|
|
override func setUp() {
|
|
super.setUp()
|
|
|
|
let app = XCUIApplication()
|
|
app.launchArguments.append("UI_TESTING")
|
|
setupSnapshot(app)
|
|
app.launch()
|
|
}
|
|
|
|
override func tearDown() {
|
|
super.tearDown()
|
|
}
|
|
|
|
func testExample() {
|
|
// I have no idea why it doesn't work without delay here.
|
|
sleep(1)
|
|
|
|
createAccount()
|
|
|
|
switch InterfaceIdiom.current() {
|
|
case .iPhone:
|
|
iPhonePart()
|
|
case .iPad:
|
|
iPadPart()
|
|
}
|
|
}
|
|
|
|
func createAccount() {
|
|
let app = XCUIApplication()
|
|
|
|
XCUIDevice.shared.orientation = .portrait
|
|
|
|
app.buttons[localizedString("create_account")].tap()
|
|
|
|
app.textFields[localizedString("create_account_username_placeholder")].tap()
|
|
app.textFields[localizedString("create_account_username_placeholder")].typeText("user")
|
|
|
|
app.textFields[localizedString("create_account_profile_placeholder")].tap()
|
|
app.textFields[localizedString("create_account_profile_placeholder")].typeText("iPhone")
|
|
|
|
app.keyboards.buttons["Next"].tap()
|
|
|
|
app.secureTextFields[localizedString("password")].tap()
|
|
app.secureTextFields[localizedString("password")].typeText("w")
|
|
|
|
app.secureTextFields[localizedString("repeat_password")].tap()
|
|
app.secureTextFields[localizedString("repeat_password")].typeText("w")
|
|
|
|
app.keyboards.buttons["Go"].tap()
|
|
|
|
addUIInterruptionMonitor(withDescription: "Notifications alert") { (alert) -> Bool in
|
|
let button = alert.buttons["OK"]
|
|
if button.exists {
|
|
button.tap()
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
}
|
|
|
|
func iPhonePart() {
|
|
let app = XCUIApplication()
|
|
|
|
// need to interact with the app for the handler to fire
|
|
app.tapTabBarElement(element: .Chats)
|
|
|
|
snapshot(Constants.SnapshotContactList)
|
|
|
|
app.tables.staticTexts[localizedString("app_store_screenshot_conversation_7")].tap()
|
|
|
|
snapshot(Constants.SnapshotConversation)
|
|
|
|
app.navigationBars[localizedString("chats_title")].buttons.element(boundBy: 0).tap()
|
|
|
|
app.tapTabBarElement(element: .Profile)
|
|
|
|
pinPart()
|
|
}
|
|
|
|
func iPadPart() {
|
|
let app = XCUIApplication()
|
|
|
|
app.tables.staticTexts[localizedString("app_store_screenshot_conversation_7")].tap()
|
|
|
|
app.children(matching: .window).element(boundBy: 0).children(matching: .other).element.children(matching: .other).element(boundBy: 2).children(matching: .other).element.children(matching: .other).element.children(matching: .other).element.children(matching: .other).element(boundBy: 0).children(matching: .textView).element.tap()
|
|
|
|
XCUIDevice.shared.orientation = .landscapeRight
|
|
|
|
snapshot(Constants.SnapshotConversation)
|
|
|
|
app.navigationBars["Antidote.PrimaryIpad"].children(matching: .other).element.children(matching: .button).element.tap()
|
|
|
|
pinPart()
|
|
}
|
|
|
|
func pinPart() {
|
|
let app = XCUIApplication()
|
|
|
|
app.tables.staticTexts[localizedString("profile_details")].tap()
|
|
app.tables.switches[localizedString("pin_enabled")].tap()
|
|
|
|
let button = app.buttons["1"]
|
|
button.tap()
|
|
button.tap()
|
|
button.tap()
|
|
|
|
let delayTime = DispatchTime.now() + Double(Int64(1.0 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)
|
|
DispatchQueue.main.asyncAfter(deadline: delayTime) {
|
|
snapshot("03_Pin")
|
|
}
|
|
|
|
app.buttons["7"].press(forDuration: 5.0)
|
|
}
|
|
}
|
|
|
|
extension XCUIApplication {
|
|
enum TabBarElement {
|
|
case Contacts
|
|
case Chats
|
|
case Settings
|
|
case Profile
|
|
|
|
var index: UInt {
|
|
switch self {
|
|
case .Contacts:
|
|
return 1
|
|
case .Chats:
|
|
return 2
|
|
case .Settings:
|
|
return 3
|
|
case .Profile:
|
|
return 4
|
|
}
|
|
}
|
|
}
|
|
|
|
func tapTabBarElement(element: TabBarElement) {
|
|
// TODO refactor me pls
|
|
let button = children(matching: .window).element(boundBy: 0).children(matching: .other).element.children(matching: .other).element(boundBy: 1).children(matching: .other).element(boundBy: Int(element.index)).children(matching: .button).element
|
|
|
|
button.tap()
|
|
}
|
|
}
|
|
|
|
func localizedString(_ key: String) -> String {
|
|
class LocalizableDummy {}
|
|
|
|
let bundle = Bundle(for: type(of: LocalizableDummy()))
|
|
|
|
var language = deviceLanguage
|
|
|
|
switch language {
|
|
case "en-US":
|
|
language = "en"
|
|
default:
|
|
break
|
|
}
|
|
|
|
let path = bundle.path(forResource: language, ofType: "lproj")!
|
|
|
|
let localizationBundle = Bundle(path: path)!
|
|
return NSLocalizedString(key, bundle:localizationBundle, comment: "")
|
|
}
|
|
|