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