@@ -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 [
0 commit comments