@@ -25,6 +25,27 @@ final class WebSocketClientTests: XCTestCase {
25
25
XCTAssert ( isLoggingConfigured)
26
26
}
27
27
28
+ func testNeverOpening( ) async throws {
29
+ let logger = Logger ( label: " Test " )
30
+ logger. debug ( " Creating client " )
31
+ // This is an invalid URL - it's not a websocket endpoint
32
+ let request = URLRequest ( url: . init( string: " https://www.apple.com " ) !)
33
+ let tt = URLSessionWebSocketTransport ( request: request, urlSession: . shared, logger: logger)
34
+ let client = WebSocketClient (
35
+ inboundMiddleware: NoOpMiddleWare ( ) ,
36
+ outboundMiddleware: NoOpMiddleWare ( ) ,
37
+ transport: tt,
38
+ logger: logger
39
+ )
40
+ logger. debug ( " Connecting " )
41
+
42
+ for try await event in client. connect ( ) {
43
+ logger. debug ( " \( String ( reflecting: event) ) " )
44
+ }
45
+
46
+ logger. debug ( " Events are done " )
47
+ }
48
+
28
49
func testOpen( ) async throws {
29
50
let tt = TestMessageTransport ( initialMessages: [
30
51
// it's not guaranteed that there aren't messages put inbetween
@@ -97,6 +118,7 @@ final class WebSocketClientTests: XCTestCase {
97
118
}
98
119
}
99
120
121
+ @available ( iOS 15 . 0 , * )
100
122
extension MessageMetadata : CustomDebugStringConvertible {
101
123
public var debugDescription : String {
102
124
#if canImport(Darwin)
@@ -119,3 +141,27 @@ let isLoggingConfigured: Bool = {
119
141
}
120
142
return true
121
143
} ( )
144
+
145
+ import AsyncAlgorithms
146
+ public final class TestNotOpeningTransport : MessageTransport , Sendable {
147
+ private let _events : AsyncChannel < WebSocketEvent > = . init( )
148
+ private let events : AsyncChannel < WebSocketEvent > = . init( )
149
+
150
+ public init ( ) { }
151
+
152
+ public func send( _ message: URLSessionWebSocketTask . Message ) async throws { }
153
+
154
+ public func close( with closeCode: URLSessionWebSocketTask . CloseCode , reason: Data ? ) {
155
+ //
156
+ }
157
+
158
+ public func connect( ) -> AsyncChannel < WebSocketEvent > {
159
+ Task { [ unowned self] in
160
+ for await event in self . _events {
161
+ await self . events. send ( event)
162
+ }
163
+ self . events. finish ( )
164
+ }
165
+ return self . events
166
+ }
167
+ }
0 commit comments