marshroute

Форк
0
214 строк · 7.3 Кб
1
import XCTest
2
@testable import Marshroute
3
import UIKit.UIGestureRecognizerSubclass
4

5
class BasePeekAndPopUtilityImplTestCase: XCTestCase {
6
    let asyncTimeout: TimeInterval = 0.5
7
    let asyncDelay: TimeInterval = 0.1
8
    
9
    var peekAndPopUtility: PeekAndPopUtilityImpl!
10
    var sourceViewController: TestablePeekAndPopSourceViewController!
11
    var sourceView: UIView!
12
    var otherSourceView: UIView!
13
    var sourceViewController2: TestablePeekAndPopSourceViewController!
14
    var sourceView2: UIView!
15
    var window: UIWindow!
16
    var previewingContext: UIViewControllerPreviewing?
17
    var previewingContext2: UIViewControllerPreviewing?
18
    var peekViewController: UIViewController?
19
    var peekNavigationController: UINavigationController?
20
    var peekViewControllerAnotherParentViewController: UIViewController!
21
    var peekInterruptingViewController: UIViewController!
22

23
    override func setUp() {
24
        super.setUp()
25
        peekAndPopUtility = PeekAndPopUtilityImpl()
26
        sourceViewController = TestablePeekAndPopSourceViewController()
27
        sourceView = sourceViewController.view
28
        otherSourceView = UIView()
29
        sourceViewController2 = TestablePeekAndPopSourceViewController()
30
        sourceView2 = sourceViewController2.view
31
        window = UIWindow()
32
        peekViewController = UIViewController()
33
        peekNavigationController = UINavigationController(rootViewController: peekViewController!)
34
        peekViewControllerAnotherParentViewController = UIViewController()
35
        peekInterruptingViewController = UIViewController()
36
    }
37
    
38
    override func tearDown() {
39
        super.tearDown()
40
        peekAndPopUtility = nil
41
        sourceViewController = nil
42
        sourceView = nil
43
        otherSourceView = nil
44
        sourceViewController2 = nil
45
        sourceView2 = nil
46
        window = nil
47
        previewingContext = nil
48
        previewingContext2 = nil
49
        peekViewController = nil
50
        peekNavigationController = nil
51
        peekViewControllerAnotherParentViewController = nil
52
        peekInterruptingViewController = nil
53
    }
54
        
55
    // MARK: - Internal
56
    func unbindSourceViewControllerFromWindow() {
57
        window.rootViewController = nil
58
        sourceView.removeFromSuperview()
59
    }
60
    
61
    func bindSourceViewControllerToWindow() {
62
        window.addSubview(sourceView)
63
    }
64
    
65
    func bindSourceViewController2ToWindow() {
66
        window.addSubview(sourceView2)
67
    }
68
    
69
    func bindPeekViewControllerToAnotherParent() {
70
        peekNavigationController?.viewControllers = []
71
        peekViewControllerAnotherParentViewController!.addChild(peekViewController!)
72
    }
73
    
74
    func registerSourceViewControllerForPreviewing(
75
        onPeek: ((_ previewingContext: UIViewControllerPreviewing) -> ())? = nil)
76
    {
77
        peekAndPopUtility.register(
78
            viewController: sourceViewController,
79
            forPreviewingInSourceView: sourceView,
80
            onPeek: { previewingContext, _ in 
81
                onPeek?(previewingContext)
82
            },
83
            onPreviewingContextChange: { [weak self] previewingContext in
84
                self?.previewingContext = previewingContext
85
            }
86
        )
87
    }
88
    
89
    func registerSourceViewControllerForPreviewingWithOtherSourceView(
90
        onPeek: ((_ previewingContext: UIViewControllerPreviewing) -> ())? = nil)
91
    {
92
        peekAndPopUtility.register(
93
            viewController: sourceViewController,
94
            forPreviewingInSourceView: otherSourceView,
95
            onPeek: { previewingContext, _ in 
96
                onPeek?(previewingContext)
97
        },
98
            onPreviewingContextChange: { [weak self] previewingContext in
99
                self?.previewingContext = previewingContext
100
            }
101
        )
102
    }
103
    
104
    func registerSourceViewController2ForPreviewing(
105
        onPeek: ((_ previewingContext: UIViewControllerPreviewing) -> ())? = nil)
106
    {
107
        peekAndPopUtility.register(
108
            viewController: sourceViewController2,
109
            forPreviewingInSourceView: sourceView2,
110
            onPeek: { previewingContext, _ in 
111
                onPeek?(previewingContext)
112
            },
113
            onPreviewingContextChange: { [weak self] previewingContext in
114
                self?.previewingContext2 = previewingContext
115
            }
116
        )
117
    }
118
    
119
    func unregisterSourceViewControllerFromPreviewing() {
120
        peekAndPopUtility.unregister(
121
            viewController: sourceViewController,
122
            fromPreviewingInSourceView: sourceView
123
        )
124
    }
125
    
126
    func unregisterSourceViewControllerFromPreviewingWithOtherSourceView() {
127
        peekAndPopUtility.unregister(
128
            viewController: sourceViewController,
129
            fromPreviewingInSourceView: otherSourceView
130
        )
131
    }
132
    
133
    func unregisterSourceViewControllerFromPreviewingInAllSourceViews() {
134
        peekAndPopUtility.unregisterViewControllerFromPreviewingInAllSourceViews(
135
            sourceViewController
136
        )
137
    }
138
    
139
    func subscribeForPeekAndPopStateChanges(
140
        onPeekAndPopStateChange: @escaping ((_ viewController: UIViewController, _ peekAndPopState: PeekAndPopState) -> ()))
141
    {
142
        peekAndPopUtility.addObserver(
143
            disposable: self,
144
            onPeekAndPopStateChange: onPeekAndPopStateChange
145
        )
146
    }
147
    
148
    private let peekLocation = CGPoint(x: 100, y: 100)
149
    
150
    @discardableResult
151
    func beginPeekOnRegisteredViewController() -> UIViewController? {
152
        return peekAndPopUtility.previewingContext(
153
            previewingContext!,
154
            viewControllerForLocation: peekLocation
155
        )
156
    }
157
    
158
    @discardableResult
159
    func beginPeekOnRegisteredViewController2() -> UIViewController? {
160
        return peekAndPopUtility.previewingContext(
161
            previewingContext2!,
162
            viewControllerForLocation: peekLocation
163
        )
164
    }
165
    
166
    func commitPickOnRegisteredViewController() {
167
        peekAndPopUtility.previewingContext(
168
            previewingContext!,
169
            commit: peekViewController!
170
        )
171
    }
172
    
173
    func commitPickOnRegisteredViewController2() {
174
        peekAndPopUtility.previewingContext(
175
            previewingContext2!,
176
            commit: peekViewController!
177
        )
178
    }
179
    
180
    func commitPickOnRegisteredViewControllerToNotPeekViewController() {
181
        peekAndPopUtility.previewingContext(
182
            previewingContext!,
183
            commit: UIViewController()
184
        )   
185
    }
186
    
187
    func interruptPeekWithAnotherTransitionOnRegisteredViewController() {
188
        invokeTransitionToPeekInterruptingViewController()
189
    }
190
    
191
    func invokeTransitionToPeekViewController(popAction: @escaping (() -> ()) = {}) {
192
        peekAndPopUtility.coordinatePeekIfNeededFor(
193
            viewController: peekViewController!,
194
            popAction: popAction
195
        )
196
    }
197
    
198
    func invokeTransitionToPeekInterruptingViewController(popAction: @escaping (() -> ()) = {}) {
199
        peekAndPopUtility.coordinatePeekIfNeededFor(
200
            viewController: peekInterruptingViewController!,
201
            popAction: popAction
202
        )
203
    }
204
    
205
    func expectation() -> XCTestExpectation {
206
        return expectation(description: "async expectation")
207
    }
208
    
209
    func invertedExpectation() -> XCTestExpectation {
210
        let result = expectation(description: "inverted async expectation")
211
        result.isInverted = true
212
        return result
213
    }
214
}
215

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

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

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

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