Skip to content

Commit b1019ca

Browse files
Make playwright a peer dependency to respect parent package.json version
1 parent d65a9e2 commit b1019ca

File tree

5 files changed

+51
-36
lines changed

5 files changed

+51
-36
lines changed

Examples/Testing/package.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"devDependencies": {
3+
"playwright": "^1.52.0"
4+
}
5+
}

Plugins/PackageToJS/Templates/package.json

+6-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@
1010
"dependencies": {
1111
"@bjorn3/browser_wasi_shim": "0.3.0"
1212
},
13-
"devDependencies": {
13+
"peerDependencies": {
1414
"playwright": "^1.51.0"
15+
},
16+
"peerDependenciesMeta": {
17+
"playwright": {
18+
"optional": true
19+
}
1520
}
1621
}

Plugins/PackageToJS/Tests/ExampleTests.swift

+31-24
Original file line numberDiff line numberDiff line change
@@ -114,20 +114,17 @@ extension Trait where Self == ConditionTrait {
114114
}
115115
}
116116

117+
typealias RunProcess = (_ executableURL: URL, _ args: [String], _ env: [String: String]) throws -> Void
117118
typealias RunSwift = (_ args: [String], _ env: [String: String]) throws -> Void
118119

119-
func withPackage(at path: String, body: (URL, _ runSwift: RunSwift) throws -> Void) throws {
120+
func withPackage(at path: String, body: (URL, _ runProcess: RunProcess, _ runSwift: RunSwift) throws -> Void) throws
121+
{
120122
try withTemporaryDirectory { tempDir, retain in
121123
let destination = tempDir.appending(path: Self.repoPath.lastPathComponent)
122124
try Self.copyRepository(to: destination)
123-
try body(destination.appending(path: path)) { args, env in
125+
func runProcess(_ executableURL: URL, _ args: [String], _ env: [String: String]) throws {
124126
let process = Process()
125-
process.executableURL = URL(
126-
fileURLWithPath: "swift",
127-
relativeTo: URL(
128-
fileURLWithPath: try #require(Self.getSwiftPath())
129-
)
130-
)
127+
process.executableURL = executableURL
131128
process.arguments = args
132129
process.currentDirectoryURL = destination.appending(path: path)
133130
process.environment = ProcessInfo.processInfo.environment.merging(env) { _, new in
@@ -157,13 +154,21 @@ extension Trait where Self == ConditionTrait {
157154
"""
158155
)
159156
}
157+
func runSwift(_ args: [String], _ env: [String: String]) throws {
158+
let swiftExecutable = URL(
159+
fileURLWithPath: "swift",
160+
relativeTo: URL(fileURLWithPath: try #require(Self.getSwiftPath()))
161+
)
162+
try runProcess(swiftExecutable, args, env)
163+
}
164+
try body(destination.appending(path: path), runProcess, runSwift)
160165
}
161166
}
162167

163168
@Test(.requireSwiftSDK)
164169
func basic() throws {
165170
let swiftSDKID = try #require(Self.getSwiftSDKID())
166-
try withPackage(at: "Examples/Basic") { packageDir, runSwift in
171+
try withPackage(at: "Examples/Basic") { packageDir, _, runSwift in
167172
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
168173
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "--debug-info-format", "dwarf"], [:])
169174
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "--debug-info-format", "name"], [:])
@@ -177,7 +182,10 @@ extension Trait where Self == ConditionTrait {
177182
@Test(.requireSwiftSDK)
178183
func testing() throws {
179184
let swiftSDKID = try #require(Self.getSwiftSDKID())
180-
try withPackage(at: "Examples/Testing") { packageDir, runSwift in
185+
try withPackage(at: "Examples/Testing") { packageDir, runProcess, runSwift in
186+
try runProcess(which("npm"), ["install"], [:])
187+
try runProcess(which("npx"), ["playwright", "install", "chromium-headless-shell"], [:])
188+
181189
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "test"], [:])
182190
try withTemporaryDirectory(body: { tempDir, _ in
183191
let scriptContent = """
@@ -208,27 +216,26 @@ extension Trait where Self == ConditionTrait {
208216
func testingWithCoverage() throws {
209217
let swiftSDKID = try #require(Self.getSwiftSDKID())
210218
let swiftPath = try #require(Self.getSwiftPath())
211-
try withPackage(at: "Examples/Testing") { packageDir, runSwift in
219+
try withPackage(at: "Examples/Testing") { packageDir, runProcess, runSwift in
212220
try runSwift(
213221
["package", "--swift-sdk", swiftSDKID, "js", "test", "--enable-code-coverage"],
214222
[
215223
"LLVM_PROFDATA_PATH": URL(fileURLWithPath: swiftPath).appending(path: "llvm-profdata").path
216224
]
217225
)
218226
do {
219-
let llvmCov = try which("llvm-cov")
220-
let process = Process()
221-
process.executableURL = llvmCov
222227
let profdata = packageDir.appending(
223228
path: ".build/plugins/PackageToJS/outputs/PackageTests/default.profdata"
224229
)
225-
let wasm = packageDir.appending(
226-
path: ".build/plugins/PackageToJS/outputs/PackageTests/TestingPackageTests.wasm"
230+
let possibleWasmPaths = ["CounterPackageTests.xctest.wasm", "CounterPackageTests.wasm"].map {
231+
packageDir.appending(path: ".build/plugins/PackageToJS/outputs/PackageTests/\($0)")
232+
}
233+
let wasmPath = try #require(
234+
possibleWasmPaths.first(where: { FileManager.default.fileExists(atPath: $0.path) }),
235+
"No wasm file found"
227236
)
228-
process.arguments = ["report", "-instr-profile", profdata.path, wasm.path]
229-
process.standardOutput = FileHandle.nullDevice
230-
try process.run()
231-
process.waitUntilExit()
237+
let llvmCov = try which("llvm-cov")
238+
try runProcess(llvmCov, ["report", "-instr-profile", profdata.path, wasmPath.path], [:])
232239
}
233240
}
234241
}
@@ -237,29 +244,29 @@ extension Trait where Self == ConditionTrait {
237244
@Test(.requireSwiftSDK(triple: "wasm32-unknown-wasip1-threads"))
238245
func multithreading() throws {
239246
let swiftSDKID = try #require(Self.getSwiftSDKID())
240-
try withPackage(at: "Examples/Multithreading") { packageDir, runSwift in
247+
try withPackage(at: "Examples/Multithreading") { packageDir, _, runSwift in
241248
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
242249
}
243250
}
244251

245252
@Test(.requireSwiftSDK(triple: "wasm32-unknown-wasip1-threads"))
246253
func offscreenCanvas() throws {
247254
let swiftSDKID = try #require(Self.getSwiftSDKID())
248-
try withPackage(at: "Examples/OffscrenCanvas") { packageDir, runSwift in
255+
try withPackage(at: "Examples/OffscrenCanvas") { packageDir, _, runSwift in
249256
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
250257
}
251258
}
252259

253260
@Test(.requireSwiftSDK(triple: "wasm32-unknown-wasip1-threads"))
254261
func actorOnWebWorker() throws {
255262
let swiftSDKID = try #require(Self.getSwiftSDKID())
256-
try withPackage(at: "Examples/ActorOnWebWorker") { packageDir, runSwift in
263+
try withPackage(at: "Examples/ActorOnWebWorker") { packageDir, _, runSwift in
257264
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
258265
}
259266
}
260267

261268
@Test(.requireEmbeddedSwift) func embedded() throws {
262-
try withPackage(at: "Examples/Embedded") { packageDir, runSwift in
269+
try withPackage(at: "Examples/Embedded") { packageDir, _, runSwift in
263270
try runSwift(
264271
["package", "--triple", "wasm32-unknown-none-wasm", "js", "-c", "release"],
265272
[

package-lock.json

+8-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"@bjorn3/browser_wasi_shim": "^0.4.1",
3838
"@rollup/plugin-typescript": "^12.1.2",
3939
"@types/node": "^22.13.14",
40-
"playwright": "^1.51.0",
40+
"playwright": "^1.52.0",
4141
"prettier": "3.5.3",
4242
"rollup": "^4.37.0",
4343
"rollup-plugin-dts": "^6.2.1",

0 commit comments

Comments
 (0)