marshroute
200 строк · 9.3 Кб
1import XCTest
2@testable import Marshroute
3
4final class TabBarTransitionsHandlerImplTests: XCTestCase {
5
6var transitionsCoordinatorSpy: TransitionsCoordinatorSpy!
7var tabBarTransitionsHandler: TabBarTransitionsHandlerImpl!
8var tabBarController = UITabBarController()
9
10override func setUp() {
11super.setUp()
12
13transitionsCoordinatorSpy = TransitionsCoordinatorSpy()
14
15tabBarTransitionsHandler = TabBarTransitionsHandlerImpl(
16tabBarController: tabBarController,
17transitionsCoordinator: transitionsCoordinatorSpy
18)
19}
20
21// MARK: - TransitionsHandler
22
23func testThatTabBarTransitionsHandlerForwards_PerformTransition_CallsToItsTransitionsCoordinator() {
24// Given
25let presentationContext = TransitionContextsCreator.createPresentationTransitionContext()
26
27// When
28tabBarTransitionsHandler.performTransition(context: presentationContext)
29
30// Then
31if case .forContaining(let context, let transitionsHandler) = transitionsCoordinatorSpy.coordinatePerformingTransition! {
32XCTAssert(context == presentationContext)
33XCTAssert(transitionsHandler === tabBarTransitionsHandler)
34} else { XCTFail() }
35}
36
37func testThatTabBarTransitionsHandlerForwards_UndoTransitionsAfter_CallsToItsTransitionsCoordinator() {
38// Given
39let generatedTansitionId = TransitionIdGeneratorImpl().generateNewTransitionId()
40
41// When
42tabBarTransitionsHandler.undoTransitionsAfter(transitionId: generatedTansitionId)
43
44// Then
45if case .forContaining(let transitionId, let transitionsHandler) = transitionsCoordinatorSpy.coordinateUndoingTransitionsAfter! {
46XCTAssert(transitionId == generatedTansitionId)
47XCTAssert(transitionsHandler === tabBarTransitionsHandler)
48} else { XCTFail() }
49}
50
51func testThatTabBarTransitionsHandlerForwards_UndoTransitionWith_CallsToItsTransitionsCoordinator() {
52// Given
53let generatedTansitionId = TransitionIdGeneratorImpl().generateNewTransitionId()
54
55// When
56tabBarTransitionsHandler.undoTransitionWith(transitionId: generatedTansitionId)
57
58// Then
59if case .forContaining(let transitionId, let transitionsHandler) = transitionsCoordinatorSpy.coordinateUndoingTransitionWith! {
60XCTAssert(transitionId == generatedTansitionId)
61XCTAssert(transitionsHandler === tabBarTransitionsHandler)
62} else { XCTFail() }
63}
64
65func testThatTabBarTransitionsHandlerDoesNotForward_UndoAllChainedTransitions_CallsToItsTransitionsCoordinator() {
66// When
67tabBarTransitionsHandler.undoAllChainedTransitions()
68
69// Then
70XCTAssertNil(transitionsCoordinatorSpy.coordinateUndoingAllChainedTransitions)
71}
72
73func testThatTabBarTransitionsHandlerDoesNotForward_UndoAllTransitions_CallsToItsTransitionsCoordinator() {
74// When
75tabBarTransitionsHandler.undoAllTransitions()
76
77// Then
78XCTAssertNil(transitionsCoordinatorSpy.coordinateUndoingAllChainedTransitions)
79}
80
81func testThatTabBarTransitionsHandlerDoesNotForward_ResetWithTransition_CallsToItsTransitionsCoordinator() {
82// Given
83let resettingContext = TransitionContextsCreator.createRegisteringEndpointNavigationControllerTransitionContext()
84
85// When
86tabBarTransitionsHandler.resetWithTransition(context: resettingContext)
87
88// Then
89XCTAssertNil(transitionsCoordinatorSpy.coordinateResettingWithTransition)
90}
91
92// MARK: - TransitionsHandlerContainer
93
94func testThatTabBarTransitionsHandlerReturnsAllTransitionsHandlersOn_AllTransitionsHandlers_Call_IfAllAreAnimating() {
95// Given
96let animatingTransitionsHandler1 = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
97let animatingTransitionsHandler2 = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
98
99tabBarController.viewControllers = [UIViewController(), UIViewController()]
100tabBarTransitionsHandler.animatingTransitionsHandlers = [
1010: animatingTransitionsHandler1,
1021: animatingTransitionsHandler2
103]
104
105// When
106let allTransitionsHandlers = tabBarTransitionsHandler.allTransitionsHandlers!
107
108// Then
109XCTAssertNotNil(allTransitionsHandlers.firstIndex { $0 === animatingTransitionsHandler1 })
110XCTAssertNotNil(allTransitionsHandlers.firstIndex { $0 === animatingTransitionsHandler2 })
111}
112
113func testThatTabBarTransitionsHandlerUnboxesContainingTransitionsHandlersAndReturnsAllTransitionsHandlersOn_AllTransitionsHandlers_Call() {
114// Given
115let animatingTransitionsHandler = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
116
117let masterTransitionsHandler = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
118let detailTransitionsHandler = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
119
120let splitViewController = UISplitViewController()
121let splitViewTransitionsHandler = SplitViewTransitionsHandlerImpl(
122splitViewController: splitViewController,
123transitionsCoordinator: transitionsCoordinatorSpy
124)
125
126splitViewTransitionsHandler.masterTransitionsHandler = masterTransitionsHandler
127splitViewTransitionsHandler.detailTransitionsHandler = detailTransitionsHandler
128
129tabBarController.viewControllers = [splitViewController, UIViewController()]
130tabBarTransitionsHandler.containingTransitionsHandlers = [
1310: splitViewTransitionsHandler
132]
133tabBarTransitionsHandler.animatingTransitionsHandlers = [
1341: animatingTransitionsHandler
135]
136
137// When
138let allTransitionsHandlers = tabBarTransitionsHandler.allTransitionsHandlers!
139
140// Then
141XCTAssertNotNil(allTransitionsHandlers.firstIndex { $0 === animatingTransitionsHandler })
142XCTAssertNotNil(allTransitionsHandlers.firstIndex { $0 === masterTransitionsHandler })
143XCTAssertNotNil(allTransitionsHandlers.firstIndex { $0 === detailTransitionsHandler })
144}
145
146func testThatTabBarTransitionsHandlerReturnsVisibleTransitionsHandlerOn_VisibleTransitionsHandlers_Call_IfVisibleIsAnimating() {
147// Given
148let animatingTransitionsHandler1 = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
149let animatingTransitionsHandler2 = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
150
151tabBarController.viewControllers = [UIViewController(), UIViewController()]
152tabBarTransitionsHandler.animatingTransitionsHandlers = [
1530: animatingTransitionsHandler1,
1541: animatingTransitionsHandler2
155]
156
157// When
158tabBarController.selectedViewController = tabBarController.viewControllers?[1]
159let visibleTransitionsHandlers = tabBarTransitionsHandler.visibleTransitionsHandlers!
160
161// Then
162XCTAssertNil(visibleTransitionsHandlers.firstIndex { $0 === animatingTransitionsHandler1 })
163XCTAssertNotNil(visibleTransitionsHandlers.firstIndex { $0 === animatingTransitionsHandler2 })
164}
165
166func testThatTabBarTransitionsHandlerUnboxesContainingTransitionsHandlerAndReturnsAllItsTransitionsHandlerOn_VisibleTransitionsHandlers_Call_IfVisibleIsContaining() {
167// Given
168let animatingTransitionsHandler = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
169
170let masterTransitionsHandler = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
171let detailTransitionsHandler = BaseAnimatingTransitionsHandler(transitionsCoordinator: transitionsCoordinatorSpy)
172
173let splitViewController = UISplitViewController()
174let splitViewTransitionsHandler = SplitViewTransitionsHandlerImpl(
175splitViewController: splitViewController,
176transitionsCoordinator: transitionsCoordinatorSpy
177)
178
179splitViewTransitionsHandler.masterTransitionsHandler = masterTransitionsHandler
180splitViewTransitionsHandler.detailTransitionsHandler = detailTransitionsHandler
181
182tabBarController.viewControllers = [UIViewController(), splitViewController]
183tabBarTransitionsHandler.animatingTransitionsHandlers = [
1840: animatingTransitionsHandler
185]
186tabBarTransitionsHandler.containingTransitionsHandlers = [
1871: splitViewTransitionsHandler
188]
189
190// When
191// select a tab with a ContainingTransitionsHandler
192tabBarController.selectedViewController = tabBarController.viewControllers?[1]
193let visibleTransitionsHandlers = tabBarTransitionsHandler.visibleTransitionsHandlers!
194
195// Then
196XCTAssertNil(visibleTransitionsHandlers.firstIndex { $0 === animatingTransitionsHandler })
197XCTAssertNotNil(visibleTransitionsHandlers.firstIndex { $0 === masterTransitionsHandler })
198XCTAssertNotNil(visibleTransitionsHandlers.firstIndex { $0 === detailTransitionsHandler })
199}
200}
201