Skip to content

Commit 9c38b8f

Browse files
Add test cases for WebWorkerDedicatedExecutor
1 parent 6400651 commit 9c38b8f

File tree

3 files changed

+37
-4
lines changed

3 files changed

+37
-4
lines changed

Sources/JavaScriptEventLoopTestSupport/JavaScriptEventLoopTestSupport.swift

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ import JavaScriptEventLoop
2727
func swift_javascriptkit_activate_js_executor_impl() {
2828
MainActor.assumeIsolated {
2929
JavaScriptEventLoop.installGlobalExecutor()
30+
#if canImport(wasi_pthread) && compiler(>=6.1) && _runtime(_multithreaded)
31+
if #available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *) {
32+
WebWorkerTaskExecutor.installGlobalExecutor()
33+
}
34+
#endif
3035
}
3136
}
3237

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import XCTest
2+
@testable import JavaScriptEventLoop
3+
4+
final class WebWorkerDedicatedExecutorTests: XCTestCase {
5+
actor MyActor {
6+
let executor: WebWorkerDedicatedExecutor
7+
nonisolated var unownedExecutor: UnownedSerialExecutor {
8+
self.executor.asUnownedSerialExecutor()
9+
}
10+
11+
init(executor: WebWorkerDedicatedExecutor) {
12+
self.executor = executor
13+
XCTAssertTrue(isMainThread())
14+
}
15+
16+
func onWorkerThread() async {
17+
XCTAssertFalse(isMainThread())
18+
await Task.detached {}.value
19+
// Should keep on the thread after back from the other isolation domain
20+
XCTAssertFalse(isMainThread())
21+
}
22+
}
23+
24+
func testEnqueue() async throws {
25+
let executor = try await WebWorkerDedicatedExecutor()
26+
defer { executor.terminate() }
27+
let actor = MyActor(executor: executor)
28+
XCTAssertTrue(isMainThread())
29+
await actor.onWorkerThread()
30+
XCTAssertTrue(isMainThread())
31+
}
32+
}

Tests/JavaScriptEventLoopTests/WebWorkerTaskExecutorTests.swift

-4
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ func pthread_mutex_lock(_ mutex: UnsafeMutablePointer<pthread_mutex_t>) -> Int32
2323
#endif
2424

2525
final class WebWorkerTaskExecutorTests: XCTestCase {
26-
override func setUp() async {
27-
WebWorkerTaskExecutor.installGlobalExecutor()
28-
}
29-
3026
func testTaskRunOnMainThread() async throws {
3127
let executor = try await WebWorkerTaskExecutor(numberOfThreads: 1)
3228

0 commit comments

Comments
 (0)