Skip to content

Commit 4abd4e0

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

File tree

5 files changed

+50
-36
lines changed

5 files changed

+50
-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

+30-24
Original file line numberDiff line numberDiff line change
@@ -114,20 +114,16 @@ 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 {
120121
try withTemporaryDirectory { tempDir, retain in
121122
let destination = tempDir.appending(path: Self.repoPath.lastPathComponent)
122123
try Self.copyRepository(to: destination)
123-
try body(destination.appending(path: path)) { args, env in
124+
func runProcess(_ executableURL: URL, _ args: [String], _ env: [String: String]) throws {
124125
let process = Process()
125-
process.executableURL = URL(
126-
fileURLWithPath: "swift",
127-
relativeTo: URL(
128-
fileURLWithPath: try #require(Self.getSwiftPath())
129-
)
130-
)
126+
process.executableURL = executableURL
131127
process.arguments = args
132128
process.currentDirectoryURL = destination.appending(path: path)
133129
process.environment = ProcessInfo.processInfo.environment.merging(env) { _, new in
@@ -157,13 +153,21 @@ extension Trait where Self == ConditionTrait {
157153
"""
158154
)
159155
}
156+
func runSwift(_ args: [String], _ env: [String: String]) throws {
157+
let swiftExecutable = URL(
158+
fileURLWithPath: "swift",
159+
relativeTo: URL(fileURLWithPath: try #require(Self.getSwiftPath()))
160+
)
161+
try runProcess(swiftExecutable, args, env)
162+
}
163+
try body(destination.appending(path: path), runProcess, runSwift)
160164
}
161165
}
162166

163167
@Test(.requireSwiftSDK)
164168
func basic() throws {
165169
let swiftSDKID = try #require(Self.getSwiftSDKID())
166-
try withPackage(at: "Examples/Basic") { packageDir, runSwift in
170+
try withPackage(at: "Examples/Basic") { packageDir, _, runSwift in
167171
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
168172
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "--debug-info-format", "dwarf"], [:])
169173
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "--debug-info-format", "name"], [:])
@@ -177,7 +181,10 @@ extension Trait where Self == ConditionTrait {
177181
@Test(.requireSwiftSDK)
178182
func testing() throws {
179183
let swiftSDKID = try #require(Self.getSwiftSDKID())
180-
try withPackage(at: "Examples/Testing") { packageDir, runSwift in
184+
try withPackage(at: "Examples/Testing") { packageDir, runProcess, runSwift in
185+
try runProcess(which("npm"), ["install"], [:])
186+
try runProcess(which("npx"), ["playwright", "install", "chromium-headless-shell"], [:])
187+
181188
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "test"], [:])
182189
try withTemporaryDirectory(body: { tempDir, _ in
183190
let scriptContent = """
@@ -208,27 +215,26 @@ extension Trait where Self == ConditionTrait {
208215
func testingWithCoverage() throws {
209216
let swiftSDKID = try #require(Self.getSwiftSDKID())
210217
let swiftPath = try #require(Self.getSwiftPath())
211-
try withPackage(at: "Examples/Testing") { packageDir, runSwift in
218+
try withPackage(at: "Examples/Testing") { packageDir, runProcess, runSwift in
212219
try runSwift(
213220
["package", "--swift-sdk", swiftSDKID, "js", "test", "--enable-code-coverage"],
214221
[
215222
"LLVM_PROFDATA_PATH": URL(fileURLWithPath: swiftPath).appending(path: "llvm-profdata").path
216223
]
217224
)
218225
do {
219-
let llvmCov = try which("llvm-cov")
220-
let process = Process()
221-
process.executableURL = llvmCov
222226
let profdata = packageDir.appending(
223227
path: ".build/plugins/PackageToJS/outputs/PackageTests/default.profdata"
224228
)
225-
let wasm = packageDir.appending(
226-
path: ".build/plugins/PackageToJS/outputs/PackageTests/TestingPackageTests.wasm"
229+
let possibleWasmPaths = ["CounterPackageTests.xctest.wasm", "CounterPackageTests.wasm"].map {
230+
packageDir.appending(path: ".build/plugins/PackageToJS/outputs/PackageTests/\($0)")
231+
}
232+
let wasmPath = try #require(
233+
possibleWasmPaths.first(where: { FileManager.default.fileExists(atPath: $0.path) }),
234+
"No wasm file found"
227235
)
228-
process.arguments = ["report", "-instr-profile", profdata.path, wasm.path]
229-
process.standardOutput = FileHandle.nullDevice
230-
try process.run()
231-
process.waitUntilExit()
236+
let llvmCov = try which("llvm-cov")
237+
try runProcess(llvmCov, ["report", "-instr-profile", profdata.path, wasmPath.path], [:])
232238
}
233239
}
234240
}
@@ -237,29 +243,29 @@ extension Trait where Self == ConditionTrait {
237243
@Test(.requireSwiftSDK(triple: "wasm32-unknown-wasip1-threads"))
238244
func multithreading() throws {
239245
let swiftSDKID = try #require(Self.getSwiftSDKID())
240-
try withPackage(at: "Examples/Multithreading") { packageDir, runSwift in
246+
try withPackage(at: "Examples/Multithreading") { packageDir, _, runSwift in
241247
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
242248
}
243249
}
244250

245251
@Test(.requireSwiftSDK(triple: "wasm32-unknown-wasip1-threads"))
246252
func offscreenCanvas() throws {
247253
let swiftSDKID = try #require(Self.getSwiftSDKID())
248-
try withPackage(at: "Examples/OffscrenCanvas") { packageDir, runSwift in
254+
try withPackage(at: "Examples/OffscrenCanvas") { packageDir, _, runSwift in
249255
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
250256
}
251257
}
252258

253259
@Test(.requireSwiftSDK(triple: "wasm32-unknown-wasip1-threads"))
254260
func actorOnWebWorker() throws {
255261
let swiftSDKID = try #require(Self.getSwiftSDKID())
256-
try withPackage(at: "Examples/ActorOnWebWorker") { packageDir, runSwift in
262+
try withPackage(at: "Examples/ActorOnWebWorker") { packageDir, _, runSwift in
257263
try runSwift(["package", "--swift-sdk", swiftSDKID, "js"], [:])
258264
}
259265
}
260266

261267
@Test(.requireEmbeddedSwift) func embedded() throws {
262-
try withPackage(at: "Examples/Embedded") { packageDir, runSwift in
268+
try withPackage(at: "Examples/Embedded") { packageDir, _, runSwift in
263269
try runSwift(
264270
["package", "--triple", "wasm32-unknown-none-wasm", "js", "-c", "release"],
265271
[

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)