Skip to content

Instantly share code, notes, and snippets.

@nil-biribiri
Created February 1, 2019 03:34
Show Gist options
  • Save nil-biribiri/5b942ebef32a0ece5b564b4b15eabd33 to your computer and use it in GitHub Desktop.
Save nil-biribiri/5b942ebef32a0ece5b564b4b15eabd33 to your computer and use it in GitHub Desktop.
UI setup class for test in Swift 4.0
import XCTest
import UIKit
class TopLevelUIUtilities<T: UIViewController> {
private var rootWindow: UIWindow!
func setupTopLevelUI(withViewController viewController: T, withNavigationController navController: Bool = false) -> T {
rootWindow = UIWindow(frame: UIScreen.main.bounds)
rootWindow.isHidden = false
if navController {
rootWindow.rootViewController = UINavigationController(rootViewController: viewController).topViewController as! T
} else {
rootWindow.rootViewController = viewController
}
return rootWindow.rootViewController as! T
}
func loadTopLevelUI(withViewController viewController: T) {
_ = viewController.view
viewController.viewWillAppear(false)
viewController.viewDidAppear(false)
}
func tearDownTopLevelUI() {
guard let rootWindow = rootWindow,
let rootViewController = rootWindow.rootViewController as? T else {
XCTFail("tearDownTopLevelUI() was called without setupTopLevelUI() being called first")
return
}
rootViewController.viewWillDisappear(false)
rootViewController.viewDidDisappear(false)
rootWindow.rootViewController = nil
rootWindow.isHidden = true
self.rootWindow = nil
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment