@@ -27,6 +27,9 @@ typealias PreparedRequest = HTTPClientRequest.Prepared
2727final class TransactionTests : XCTestCase {
2828 func testCancelAsyncRequest( ) {
2929 guard #available( macOS 10 . 15 , iOS 13 . 0 , watchOS 6 . 0 , tvOS 13 . 0 , * ) else { return }
30+ // creating the `XCTestExpectation` off the main thread crashes on Linux with Swift 5.6
31+ // therefore we create it here as a workaround which works fine
32+ let scheduledRequestCanceled = self . expectation ( description: " scheduled request canceled " )
3033 XCTAsyncTest {
3134 let embeddedEventLoop = EmbeddedEventLoop ( )
3235 defer { XCTAssertNoThrow ( try embeddedEventLoop. syncShutdownGracefully ( ) ) }
@@ -43,19 +46,25 @@ final class TransactionTests: XCTestCase {
4346 preferredEventLoop: embeddedEventLoop
4447 )
4548
46- let queuer = MockTaskQueuer ( )
49+ let queuer = MockTaskQueuer { _ in
50+ scheduledRequestCanceled. fulfill ( )
51+ }
4752 transaction. requestWasQueued ( queuer)
4853
54+ XCTAssertEqual ( queuer. hitCancelCount, 0 )
4955 Task . detached {
5056 try await Task . sleep ( nanoseconds: 5 * 1000 * 1000 )
5157 transaction. cancel ( )
5258 }
5359
54- XCTAssertEqual ( queuer. hitCancelCount, 0 )
5560 await XCTAssertThrowsError ( try await responseTask. value) { error in
5661 XCTAssertTrue ( error is CancellationError , " unexpected error \( error) " )
5762 }
58- XCTAssertEqual ( queuer. hitCancelCount, 1 )
63+
64+ // self.fulfillment(of:) is not available on Linux
65+ _ = {
66+ self . wait ( for: [ scheduledRequestCanceled] , timeout: 1 )
67+ } ( )
5968 }
6069 }
6170
0 commit comments