@@ -9,7 +9,7 @@ func isMainThread() -> Bool
99
1010final class WebWorkerTaskExecutorTests : XCTestCase {
1111 override func setUp( ) async {
12- await WebWorkerTaskExecutor . installGlobalExecutor ( )
12+ WebWorkerTaskExecutor . installGlobalExecutor ( )
1313 }
1414
1515 func testTaskRunOnMainThread( ) async throws {
@@ -264,6 +264,37 @@ final class WebWorkerTaskExecutorTests: XCTestCase {
264264 executor. terminate ( )
265265 }
266266
267+ func testTransfer( ) async throws {
268+ let Uint8Array = JSObject . global. Uint8Array. function!
269+ let buffer = Uint8Array . new ( 100 ) . buffer. object!
270+ let transferring = JSObject . transfer ( buffer)
271+ let executor = try await WebWorkerTaskExecutor ( numberOfThreads: 1 )
272+ let task = Task ( executorPreference: executor) {
273+ let buffer = try await transferring. receive ( )
274+ return buffer. byteLength. number!
275+ }
276+ let byteLength = try await task. value
277+ XCTAssertEqual ( byteLength, 100 )
278+ // Deinit the transferring object on the thread that was created
279+ withExtendedLifetime ( transferring) { }
280+ }
281+
282+ func testTransferNonTransferable( ) async throws {
283+ let object = JSObject . global. Object. function!. new ( )
284+ let transferring = JSObject . transfer ( object)
285+ let executor = try await WebWorkerTaskExecutor ( numberOfThreads: 1 )
286+ let task = Task ( executorPreference: executor) {
287+ _ = try await transferring. receive ( )
288+ return
289+ }
290+ do {
291+ try await task. value
292+ XCTFail ( " Should throw an error " )
293+ } catch { }
294+ // Deinit the transferring object on the thread that was created
295+ withExtendedLifetime ( transferring) { }
296+ }
297+
267298/*
268299 func testDeinitJSObjectOnDifferentThread() async throws {
269300 let executor = try await WebWorkerTaskExecutor(numberOfThreads: 1)
0 commit comments