@@ -114,20 +114,17 @@ extension Trait where Self == ConditionTrait {
114
114
}
115
115
}
116
116
117
+ typealias RunProcess = ( _ executableURL: URL , _ args: [ String ] , _ env: [ String : String ] ) throws -> Void
117
118
typealias RunSwift = ( _ args: [ String ] , _ env: [ String : String ] ) throws -> Void
118
119
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
+ {
120
122
try withTemporaryDirectory { tempDir, retain in
121
123
let destination = tempDir. appending ( path: Self . repoPath. lastPathComponent)
122
124
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 {
124
126
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
131
128
process. arguments = args
132
129
process. currentDirectoryURL = destination. appending ( path: path)
133
130
process. environment = ProcessInfo . processInfo. environment. merging ( env) { _, new in
@@ -157,13 +154,21 @@ extension Trait where Self == ConditionTrait {
157
154
"""
158
155
)
159
156
}
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)
160
165
}
161
166
}
162
167
163
168
@Test ( . requireSwiftSDK)
164
169
func basic( ) throws {
165
170
let swiftSDKID = try #require( Self . getSwiftSDKID ( ) )
166
- try withPackage ( at: " Examples/Basic " ) { packageDir, runSwift in
171
+ try withPackage ( at: " Examples/Basic " ) { packageDir, _ , runSwift in
167
172
try runSwift ( [ " package " , " --swift-sdk " , swiftSDKID, " js " ] , [ : ] )
168
173
try runSwift ( [ " package " , " --swift-sdk " , swiftSDKID, " js " , " --debug-info-format " , " dwarf " ] , [ : ] )
169
174
try runSwift ( [ " package " , " --swift-sdk " , swiftSDKID, " js " , " --debug-info-format " , " name " ] , [ : ] )
@@ -177,7 +182,10 @@ extension Trait where Self == ConditionTrait {
177
182
@Test ( . requireSwiftSDK)
178
183
func testing( ) throws {
179
184
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
+
181
189
try runSwift ( [ " package " , " --swift-sdk " , swiftSDKID, " js " , " test " ] , [ : ] )
182
190
try withTemporaryDirectory ( body: { tempDir, _ in
183
191
let scriptContent = """
@@ -208,27 +216,26 @@ extension Trait where Self == ConditionTrait {
208
216
func testingWithCoverage( ) throws {
209
217
let swiftSDKID = try #require( Self . getSwiftSDKID ( ) )
210
218
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
212
220
try runSwift (
213
221
[ " package " , " --swift-sdk " , swiftSDKID, " js " , " test " , " --enable-code-coverage " ] ,
214
222
[
215
223
" LLVM_PROFDATA_PATH " : URL ( fileURLWithPath: swiftPath) . appending ( path: " llvm-profdata " ) . path
216
224
]
217
225
)
218
226
do {
219
- let llvmCov = try which ( " llvm-cov " )
220
- let process = Process ( )
221
- process. executableURL = llvmCov
222
227
let profdata = packageDir. appending (
223
228
path: " .build/plugins/PackageToJS/outputs/PackageTests/default.profdata "
224
229
)
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 "
227
236
)
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] , [ : ] )
232
239
}
233
240
}
234
241
}
@@ -237,29 +244,29 @@ extension Trait where Self == ConditionTrait {
237
244
@Test ( . requireSwiftSDK( triple: " wasm32-unknown-wasip1-threads " ) )
238
245
func multithreading( ) throws {
239
246
let swiftSDKID = try #require( Self . getSwiftSDKID ( ) )
240
- try withPackage ( at: " Examples/Multithreading " ) { packageDir, runSwift in
247
+ try withPackage ( at: " Examples/Multithreading " ) { packageDir, _ , runSwift in
241
248
try runSwift ( [ " package " , " --swift-sdk " , swiftSDKID, " js " ] , [ : ] )
242
249
}
243
250
}
244
251
245
252
@Test ( . requireSwiftSDK( triple: " wasm32-unknown-wasip1-threads " ) )
246
253
func offscreenCanvas( ) throws {
247
254
let swiftSDKID = try #require( Self . getSwiftSDKID ( ) )
248
- try withPackage ( at: " Examples/OffscrenCanvas " ) { packageDir, runSwift in
255
+ try withPackage ( at: " Examples/OffscrenCanvas " ) { packageDir, _ , runSwift in
249
256
try runSwift ( [ " package " , " --swift-sdk " , swiftSDKID, " js " ] , [ : ] )
250
257
}
251
258
}
252
259
253
260
@Test ( . requireSwiftSDK( triple: " wasm32-unknown-wasip1-threads " ) )
254
261
func actorOnWebWorker( ) throws {
255
262
let swiftSDKID = try #require( Self . getSwiftSDKID ( ) )
256
- try withPackage ( at: " Examples/ActorOnWebWorker " ) { packageDir, runSwift in
263
+ try withPackage ( at: " Examples/ActorOnWebWorker " ) { packageDir, _ , runSwift in
257
264
try runSwift ( [ " package " , " --swift-sdk " , swiftSDKID, " js " ] , [ : ] )
258
265
}
259
266
}
260
267
261
268
@Test ( . requireEmbeddedSwift) func embedded( ) throws {
262
- try withPackage ( at: " Examples/Embedded " ) { packageDir, runSwift in
269
+ try withPackage ( at: " Examples/Embedded " ) { packageDir, _ , runSwift in
263
270
try runSwift (
264
271
[ " package " , " --triple " , " wasm32-unknown-none-wasm " , " js " , " -c " , " release " ] ,
265
272
[
0 commit comments