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