marshroute

Форк
0
/
ModalPresentationRouterTests_BaseRouter.swift 
283 строки · 15.0 Кб
1
import XCTest
2
@testable import Marshroute
3

4
final class ModalPresentationRouterTests_BaseRouter: XCTestCase
5
{
6
    var detailAnimatingTransitionsHandlerSpy: AnimatingTransitionsHandlerSpy!
7
    var router: ModalPresentationRouter!
8
    
9
    override func setUp() {
10
        super.setUp()
11
        
12
        let transitionIdGenerator = TransitionIdGeneratorImpl()
13
        
14
        let peekAndPopTransitionsCoordinator = PeekAndPopUtilityImpl()
15
        
16
        let transitionsCoordinator = TransitionsCoordinatorImpl(
17
            stackClientProvider: TransitionContextsStackClientProviderImpl(),
18
            peekAndPopTransitionsCoordinator: peekAndPopTransitionsCoordinator
19
        )
20
        
21
        detailAnimatingTransitionsHandlerSpy = AnimatingTransitionsHandlerSpy(
22
            transitionsCoordinator: transitionsCoordinator
23
        )
24
        
25
        router = BaseRouter(
26
            routerSeed: RouterSeed(
27
                transitionsHandlerBox: .init(
28
                    animatingTransitionsHandler: detailAnimatingTransitionsHandlerSpy
29
                ),
30
                transitionId: transitionIdGenerator.generateNewTransitionId(),
31
                presentingTransitionsHandler: nil,
32
                transitionsHandlersProvider: transitionsCoordinator,
33
                transitionIdGenerator: transitionIdGenerator,
34
                controllersProvider: RouterControllersProviderImpl(),
35
                routerTransitionDelegate: nil
36
            )
37
        )
38
    }
39
    
40
    // MARK: - UIViewController
41
    
42
    func testThatRouterCallsItsTransitionsHandlerOn_PresentModalViewControllerDerivedFrom_WithCorrectPresentationContext() {
43
        // Given
44
        let targetViewController = UIViewController()
45
        var nextModuleRouterSeed: RouterSeed!
46
        
47
        // When
48
        router.presentModalViewControllerDerivedFrom { (routerSeed) -> UIViewController in
49
            nextModuleRouterSeed = routerSeed
50
            return targetViewController
51
        }
52
        
53
        // Then
54
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
55
        
56
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
57
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
58
        XCTAssert(presentationContext?.targetViewController === targetViewController)
59
        if case .some(.animating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
60
        XCTAssert(presentationContext?.storableParameters! is NavigationTransitionStorableParameters)
61
        if case .some(.modal(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
62
            XCTAssert(launchingContext.targetViewController! == targetViewController)
63
        } else { XCTFail() }
64
    }
65
    
66
    func testThatRouterCallsItsTransitionsHandlerOn_PresentModalViewControllerDerivedFrom_WithCorrectPresentationContext_IfCustomAnimator() {
67
        // Given
68
        let targetViewController = UIViewController()
69
        var nextModuleRouterSeed: RouterSeed!
70
        let modalTransitionsAnimator = ModalTransitionsAnimator()
71
        
72
        // When
73
        router.presentModalViewControllerDerivedFrom( { (routerSeed) -> UIViewController in
74
            nextModuleRouterSeed = routerSeed
75
            return targetViewController
76
            }, animator: modalTransitionsAnimator
77
        )
78
        
79
        // Then
80
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
81
        
82
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
83
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
84
        XCTAssert(presentationContext?.targetViewController === targetViewController)
85
        if case .some(.animating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
86
        XCTAssert(presentationContext?.storableParameters! is NavigationTransitionStorableParameters)
87
        if case .some(.modal(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
88
            XCTAssert(launchingContext.animator === modalTransitionsAnimator)
89
            XCTAssert(launchingContext.targetViewController! === targetViewController)
90
        } else { XCTFail() }
91
    }
92
    
93
    // MARK: - UISplitViewController
94
    
95
    func testThatRouterCallsItsTransitionsHandlerOn_PresentModalMasterDetailViewControllerDerivedFrom_WithCorrectPresentationContext() {
96
        // Given
97
        let targetMasterViewController = UIViewController()
98
        let targetDetailViewController = UIViewController()
99
        var nextMasterDetailModuleRouterSeed: MasterDetailRouterSeed!
100
        var nextDetailModuleRouterSeed: RouterSeed!
101
        
102
        // When
103
        router.presentModalMasterDetailViewControllerDerivedFrom(
104
            deriveMasterViewController: { (routerSeed) -> UIViewController in
105
                nextMasterDetailModuleRouterSeed = routerSeed
106
                return targetMasterViewController
107
            },
108
            deriveDetailViewController: { (routerSeed) -> UIViewController in
109
                nextDetailModuleRouterSeed = routerSeed
110
                return targetDetailViewController
111
            }
112
        )
113
        
114
        // Then
115
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
116
        
117
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
118
        XCTAssertEqual(presentationContext?.transitionId, nextMasterDetailModuleRouterSeed.transitionId)
119
        XCTAssertEqual(presentationContext?.transitionId, nextDetailModuleRouterSeed.transitionId)
120

121
        if case .some(.containing) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
122
        XCTAssert(presentationContext?.storableParameters! is NavigationTransitionStorableParameters)
123
        if case .some(.modalMasterDetail) = presentationContext?.presentationAnimationLaunchingContextBox {} else { XCTFail() }
124
    }
125
    
126
    func testThatRouterCallsItsTransitionsHandlerOn_PresentModalMasterDetailViewControllerDerivedFrom_WithCorrectPresentationContext_IfCustomAnimator() {
127
        // Given
128
        let targetMasterViewController = UIViewController()
129
        let targetDetailViewController = UIViewController()
130
        let modalMasterDetailTransitionsAnimator = ModalMasterDetailTransitionsAnimator()
131
        var nextMasterDetailModuleRouterSeed: MasterDetailRouterSeed!
132
        var nextDetailModuleRouterSeed: RouterSeed!
133
        
134
        // When
135
        router.presentModalMasterDetailViewControllerDerivedFrom(
136
            deriveMasterViewController: { (routerSeed) -> UIViewController in
137
                nextMasterDetailModuleRouterSeed = routerSeed
138
                return targetMasterViewController
139
            },
140
            deriveDetailViewController: { (routerSeed) -> UIViewController in
141
                nextDetailModuleRouterSeed = routerSeed
142
                return targetDetailViewController
143
            },
144
            animator: modalMasterDetailTransitionsAnimator
145
        )
146
        
147
        // Then
148
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
149
        
150
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
151
        XCTAssertEqual(presentationContext?.transitionId, nextMasterDetailModuleRouterSeed.transitionId)
152
        XCTAssertEqual(presentationContext?.transitionId, nextDetailModuleRouterSeed.transitionId)
153
        
154
        if case .some(.containing) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
155
        XCTAssert(presentationContext?.storableParameters! is NavigationTransitionStorableParameters)
156
        if case .some(.modalMasterDetail(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
157
            XCTAssert(launchingContext.animator === modalMasterDetailTransitionsAnimator)
158
        } else { XCTFail() }
159
    }
160
    
161
    func testThatRouterCallsItsTransitionsHandlerOn_PresentModalMasterDetailViewControllerDerivedFrom_WithCorrectPresentationContext_IfCustomAnimator_CustomMasterNavigationController_CustomDetailNavigationController_CustomSplitViewController() {
162
        // Given
163
        let targetMasterViewController = UIViewController()
164
        let targetDetailViewController = UIViewController()
165
        let splitViewController = UISplitViewController()
166
        let modalMasterDetailTransitionsAnimator = ModalMasterDetailTransitionsAnimator()
167
        var nextMasterDetailModuleRouterSeed: MasterDetailRouterSeed!
168
        var nextDetailModuleRouterSeed: RouterSeed!
169
        
170
        // When
171
        router.presentModalMasterDetailViewControllerDerivedFrom(
172
            deriveMasterViewController: { (routerSeed) -> UIViewController in
173
                nextMasterDetailModuleRouterSeed = routerSeed
174
                return targetMasterViewController
175
            },
176
            deriveDetailViewController: { (routerSeed) -> UIViewController in
177
                nextDetailModuleRouterSeed = routerSeed
178
                return targetDetailViewController
179
            },
180
            animator: modalMasterDetailTransitionsAnimator,
181
            masterNavigationController: UINavigationController(),
182
            detailNavigationController: UINavigationController(),
183
            splitViewController: splitViewController
184
        )
185
        
186
        // Then
187
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
188
        
189
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
190
        XCTAssertEqual(presentationContext?.transitionId, nextMasterDetailModuleRouterSeed.transitionId)
191
        XCTAssertEqual(presentationContext?.transitionId, nextDetailModuleRouterSeed.transitionId)
192
        
193
        if case .some(.containing) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
194
        XCTAssert(presentationContext?.storableParameters! is NavigationTransitionStorableParameters)
195
        if case .some(.modalMasterDetail(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
196
            XCTAssert(launchingContext.animator === modalMasterDetailTransitionsAnimator)
197
            XCTAssert(launchingContext.targetViewController! === splitViewController)
198
        } else { XCTFail() }
199
    }
200
    
201
    // MARK: - UIViewController in UINavigationController
202
    
203
    func testThatRouterCallsItsTransitionsHandlerOn_PresentModalNavigationControllerWithRootViewControllerDerivedFrom_WithCorrectPresentationContext() {
204
        // Given
205
        let targetViewController = UIViewController()
206
        var nextModuleRouterSeed: RouterSeed!
207
        
208
        // When
209
        router.presentModalNavigationControllerWithRootViewControllerDerivedFrom { (routerSeed) -> UIViewController in
210
            nextModuleRouterSeed = routerSeed
211
            return targetViewController
212
        }
213
        
214
        // Then
215
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
216
        
217
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
218
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
219
        XCTAssert(presentationContext?.targetViewController === targetViewController)
220
        if case .some(.animating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
221
        XCTAssert(presentationContext?.storableParameters! is NavigationTransitionStorableParameters)
222
        if case .some(.modalNavigation(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
223
            XCTAssert(launchingContext.targetViewController! == targetViewController)
224
        } else { XCTFail() }
225
    }
226
    
227
    func testThatRouterCallsItsTransitionsHandlerOn_PresentModalNavigationControllerWithRootViewControllerDerivedFrom_WithCorrectPresentationContext_IfCustomAnimator() {
228
        // Given
229
        let targetViewController = UIViewController()
230
        var nextModuleRouterSeed: RouterSeed!
231
        let modalNavigationTransitionsAnimator = ModalNavigationTransitionsAnimator()
232
        
233
        // When
234
        router.presentModalNavigationControllerWithRootViewControllerDerivedFrom( { (routerSeed) -> UIViewController in
235
            nextModuleRouterSeed = routerSeed
236
            return targetViewController
237
            }, animator: modalNavigationTransitionsAnimator
238
        )
239
        
240
        // Then
241
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
242
        
243
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
244
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
245
        XCTAssert(presentationContext?.targetViewController === targetViewController)
246
        if case .some(.animating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
247
        XCTAssert(presentationContext?.storableParameters! is NavigationTransitionStorableParameters)
248
        if case .some(.modalNavigation(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
249
            XCTAssert(launchingContext.animator === modalNavigationTransitionsAnimator)
250
            XCTAssert(launchingContext.targetViewController! === targetViewController)
251
        } else { XCTFail() }
252
    }
253
    
254
    func testThatRouterCallsItsTransitionsHandlerOn_PresentModalNavigationControllerWithRootViewControllerDerivedFrom_WithCorrectPresentationContext_IfCustomAnimator_CustomNavigationController() {
255
        // Given
256
        let targetViewController = UIViewController()
257
        let navigationController = UINavigationController()
258
        var nextModuleRouterSeed: RouterSeed!
259
        let modalNavigationTransitionsAnimator = ModalNavigationTransitionsAnimator()
260
        
261
        // When
262
        router.presentModalNavigationControllerWithRootViewControllerDerivedFrom( { (routerSeed) -> UIViewController in
263
            nextModuleRouterSeed = routerSeed
264
            return targetViewController
265
            }, animator: modalNavigationTransitionsAnimator,
266
               navigationController: navigationController
267
        )
268
        
269
        // Then
270
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
271
        
272
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
273
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
274
        XCTAssert(presentationContext?.targetViewController === targetViewController)
275
        if case .some(.animating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
276
        XCTAssert(presentationContext?.storableParameters! is NavigationTransitionStorableParameters)
277
        if case .some(.modalNavigation(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
278
            XCTAssert(launchingContext.animator === modalNavigationTransitionsAnimator)
279
            XCTAssert(launchingContext.targetViewController! === targetViewController)
280
            XCTAssert(launchingContext.targetNavigationController! === navigationController)
281
        } else { XCTFail() }
282
    }
283
}
284

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.