@@ -25,6 +25,27 @@ final class WebSocketClientTests: XCTestCase {
2525 XCTAssert ( isLoggingConfigured)
2626 }
2727
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+
2849 func testOpen( ) async throws {
2950 let tt = TestMessageTransport ( initialMessages: [
3051 // it's not guaranteed that there aren't messages put inbetween
@@ -97,6 +118,7 @@ final class WebSocketClientTests: XCTestCase {
97118 }
98119}
99120
121+ @available ( iOS 15 . 0 , * )
100122extension MessageMetadata : CustomDebugStringConvertible {
101123 public var debugDescription : String {
102124 #if canImport(Darwin)
@@ -119,3 +141,27 @@ let isLoggingConfigured: Bool = {
119141 }
120142 return true
121143} ( )
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