Files
GitHawk/FreetimeTests/SplitViewTests.swift
2018-02-21 10:20:32 -05:00

173 lines
7.0 KiB
Swift

//
// SplitViewTests.swift
// Freetime
//
// Created by Ryan Nystrom on 9/10/17.
// Copyright © 2017 Ryan Nystrom. All rights reserved.
//
import XCTest
@testable import Freetime
class RootViewController: UIViewController, PrimaryViewController {}
class SplitViewTests: XCTestCase {
func test_whenSeparating_withPrimaryAndOtherVCs_thatSplitVCIsSeparated_andResultHasNonPrimary() {
let masterTab = UITabBarController()
let leftNav = UINavigationController()
let left = UIViewController()
leftNav.pushViewController(left, animated: false)
let rightNav = UINavigationController()
let right1 = RootViewController()
let right2 = RootViewController()
let right3 = UIViewController()
let right4 = UIViewController()
right2.hidesBottomBarWhenPushed = true
rightNav.pushViewController(right1, animated: false)
rightNav.pushViewController(right2, animated: false)
rightNav.pushViewController(right3, animated: false)
rightNav.pushViewController(right4, animated: false)
masterTab.viewControllers = [leftNav, rightNav]
masterTab.selectedIndex = 1
let split = UISplitViewController()
split.viewControllers = [masterTab]
let delegate = SplitViewControllerDelegate()
let result = delegate.splitViewController(split, separateSecondaryFrom: masterTab)
let resultTab = (split.viewControllers[0] as! UITabBarController)
let resultLeft = resultTab.viewControllers![0] as! UINavigationController
let resultRight = resultTab.viewControllers![1] as! UINavigationController
XCTAssertEqual(resultTab, masterTab)
XCTAssertEqual(resultLeft, leftNav)
XCTAssertEqual(resultRight, rightNav)
XCTAssertEqual(resultTab.selectedViewController, rightNav)
XCTAssertEqual(resultRight.viewControllers.count, 2)
XCTAssertEqual(resultRight.viewControllers[0], right1)
XCTAssertEqual(resultRight.viewControllers[1], right2)
let resultDetailVCs = (result as! UINavigationController).viewControllers
XCTAssertEqual(resultDetailVCs.count, 2)
XCTAssertEqual(resultDetailVCs[0], right3)
XCTAssertEqual(resultDetailVCs[1], right4)
}
func test_whenSeparating_withSinglePrimary_thatSplitVCIsSeparated_andResultHasPlaceholder() {
let masterTab = UITabBarController()
let leftNav = UINavigationController()
let left = UIViewController()
leftNav.pushViewController(left, animated: false)
let rightNav = UINavigationController()
let right1 = RootViewController()
rightNav.pushViewController(right1, animated: false)
masterTab.viewControllers = [leftNav, rightNav]
masterTab.selectedIndex = 1
let split = UISplitViewController()
split.viewControllers = [masterTab]
let delegate = SplitViewControllerDelegate()
let result = delegate.splitViewController(split, separateSecondaryFrom: masterTab)
let resultTab = (split.viewControllers[0] as! UITabBarController)
let resultLeft = resultTab.viewControllers![0] as! UINavigationController
let resultRight = resultTab.viewControllers![1] as! UINavigationController
XCTAssertEqual(resultTab, masterTab)
XCTAssertEqual(resultLeft, leftNav)
XCTAssertEqual(resultRight, rightNav)
XCTAssertEqual(resultTab.selectedViewController, rightNav)
XCTAssertEqual(resultRight.viewControllers.count, 1)
XCTAssertEqual(resultRight.viewControllers[0], right1)
let resultDetailVCs = (result as! UINavigationController).viewControllers
XCTAssertEqual(resultDetailVCs.count, 1)
XCTAssert(resultDetailVCs[0] is SplitPlaceholderViewController)
}
func test_whenCollapsing_withVCsStackedOnMasterAndDetail_thatVCsStackedOnSelectedNav() {
let masterTab = UITabBarController()
let leftNav = UINavigationController()
let left = UIViewController()
leftNav.pushViewController(left, animated: false)
let rightNav = UINavigationController()
let right1 = RootViewController()
let right2 = RootViewController()
rightNav.pushViewController(right1, animated: false)
rightNav.pushViewController(right2, animated: false)
masterTab.viewControllers = [leftNav, rightNav]
masterTab.selectedIndex = 1
let detailNav = UINavigationController()
let detail1 = UIViewController()
let detail2 = UIViewController()
detailNav.pushViewController(detail1, animated: false)
detailNav.pushViewController(detail2, animated: false)
let split = UISplitViewController()
split.viewControllers = [masterTab, detailNav]
let delegate = SplitViewControllerDelegate()
_ = delegate.splitViewController(split, collapseSecondary: detailNav, onto: masterTab)
let resultTab = split.viewControllers[0] as! UITabBarController
XCTAssertEqual(resultTab.viewControllers?.count, 2)
XCTAssertEqual(resultTab.selectedViewController, rightNav)
XCTAssertEqual(rightNav.viewControllers.count, 4)
XCTAssertEqual(rightNav.viewControllers[0], right1)
XCTAssertEqual(rightNav.viewControllers[1], right2)
XCTAssertEqual(rightNav.viewControllers[2], detail1)
XCTAssertEqual(rightNav.viewControllers[3], detail2)
XCTAssertFalse(rightNav.viewControllers[0].hidesBottomBarWhenPushed)
XCTAssertFalse(rightNav.viewControllers[1].hidesBottomBarWhenPushed)
XCTAssertTrue(rightNav.viewControllers[2].hidesBottomBarWhenPushed)
XCTAssertTrue(rightNav.viewControllers[3].hidesBottomBarWhenPushed)
}
func test_whenCollapsing_withPlaceholderStackedOnDetail_thatVCsStackedWithoutPlaceholder() {
let masterTab = UITabBarController()
let leftNav = UINavigationController()
let left = UIViewController()
leftNav.pushViewController(left, animated: false)
let rightNav = UINavigationController()
let right1 = RootViewController()
let right2 = RootViewController()
rightNav.pushViewController(right1, animated: false)
rightNav.pushViewController(right2, animated: false)
masterTab.viewControllers = [leftNav, rightNav]
masterTab.selectedIndex = 1
let detailNav = UINavigationController()
let detail1 = SplitPlaceholderViewController()
detailNav.pushViewController(detail1, animated: false)
let split = UISplitViewController()
split.viewControllers = [masterTab, detailNav]
let delegate = SplitViewControllerDelegate()
_ = delegate.splitViewController(split, collapseSecondary: detailNav, onto: masterTab)
let resultTab = split.viewControllers[0] as! UITabBarController
XCTAssertEqual(resultTab.viewControllers?.count, 2)
XCTAssertEqual(resultTab.selectedViewController, rightNav)
XCTAssertEqual(rightNav.viewControllers.count, 2)
XCTAssertEqual(rightNav.viewControllers[0], right1)
XCTAssertEqual(rightNav.viewControllers[1], right2)
}
}