-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathTest.swift
147 lines (112 loc) · 3.86 KB
/
Test.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
@testable import HotwireNative
import UIKit
import WebKit
class TestVisitable: UIViewController, Visitable {
// MARK: - Tests
var visitableDidRenderCalled = false
var visitableDidActivateWebViewWasCalled = false
var visitableDidDeactivateWebViewWasCalled = false
// MARK: - Visitable
var visitableDelegate: VisitableDelegate?
var visitableView: VisitableView!
var visitableURL: URL!
init(url: URL) {
self.visitableURL = url
self.visitableView = VisitableView(frame: .zero)
super.init(nibName: nil, bundle: nil)
}
@available(*, unavailable)
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func visitableDidRender() {
visitableDidRenderCalled = true
}
func visitableDidActivateWebView(_ webView: WKWebView) {
visitableDidActivateWebViewWasCalled = true
}
func visitableDidDeactivateWebView() {
visitableDidDeactivateWebViewWasCalled = true
}
}
class TestSessionDelegate: NSObject, SessionDelegate {
var sessionDidLoadWebViewCalled = false { didSet { didChange?() }}
var sessionDidStartRequestCalled = false
var sessionDidFinishRequestCalled = false
var failedRequestError: Error? = nil
var sessionDidFailRequestCalled = false { didSet { didChange?() }}
var sessionDidProposeVisitCalled = false
var sessionDidProposeVisitToCrossOriginRedirectWasCalled = false
var sessionDidProposeVisitToCrossOriginRedirectLocation: URL?
var didChange: (() -> Void)?
func sessionDidLoadWebView(_ session: Session) {
sessionDidLoadWebViewCalled = true
}
func sessionDidStartRequest(_ session: Session) {
sessionDidStartRequestCalled = true
}
func sessionDidFinishRequest(_ session: Session) {
sessionDidFinishRequestCalled = true
}
func sesssionDidStartFormSubmission(_ session: Session) {}
func sessionDidFinishFormSubmission(_ session: Session) {}
func sessionWebViewProcessDidTerminate(_ session: Session) {}
func session(_ session: Session, didFailRequestForVisitable visitable: Visitable, error: Error) {
sessionDidFailRequestCalled = true
failedRequestError = error
}
func session(_ session: Session, didProposeVisit proposal: VisitProposal) {
sessionDidProposeVisitCalled = true
}
func session(_ session: Session, didProposeVisitToCrossOriginRedirect location: URL) {
sessionDidProposeVisitToCrossOriginRedirectWasCalled = true
sessionDidProposeVisitToCrossOriginRedirectLocation = location
}
}
class TestVisitDelegate {
var methodsCalled: Set<String> = []
func didCall(_ method: String) -> Bool {
methodsCalled.contains(method)
}
private func record(_ string: String = #function) {
methodsCalled.insert(string)
}
}
extension TestVisitDelegate: VisitDelegate {
func visitDidInitializeWebView(_ visit: Visit) {
record()
}
func visitWillStart(_ visit: Visit) {
record()
}
func visitDidStart(_ visit: Visit) {
record()
}
func visitDidComplete(_ visit: Visit) {
record()
}
func visitDidFail(_ visit: Visit) {
record()
}
func visitDidFinish(_ visit: Visit) {
record()
}
func visitWillLoadResponse(_ visit: Visit) {
record()
}
func visitDidRender(_ visit: Visit) {
record()
}
func visitRequestDidStart(_ visit: Visit) {
record()
}
func visit(_ visit: Visit, requestDidFailWithError error: Error) {
record()
}
func visitRequestDidFinish(_ visit: Visit) {
record()
}
func visit(_ visit: Visit, didReceiveAuthenticationChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
record()
}
}