Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5f1f224

Browse files
Merge pull request #300 from swiftwasm/katei/Xnode
Add `-Xnode` option to pass extra arguments to node
2 parents 6236711 + c4a8bae commit 5f1f224

File tree

3 files changed

+60
-5
lines changed

3 files changed

+60
-5
lines changed

‎Plugins/PackageToJS/Sources/PackageToJS.swift‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ struct PackageToJS {
3838
var environment: String?
3939
/// Whether to run tests in the browser with inspector enabled
4040
var inspect: Bool
41+
/// The extra arguments to pass to node
42+
var extraNodeArguments: [String]
4143
/// The options for packaging
4244
var packageOptions: PackageOptions
4345
}
@@ -82,7 +84,8 @@ struct PackageToJS {
8284

8385
try PackageToJS.runSingleTestingLibrary(
8486
testRunner: testRunner, currentDirectoryURL: currentDirectoryURL,
85-
extraArguments: extraArguments
87+
extraArguments: extraArguments,
88+
testOptions: testOptions
8689
)
8790
}
8891
let swiftTestingCoverageFile = outputDir.appending(path: "SwiftTesting.profraw")
@@ -97,7 +100,8 @@ struct PackageToJS {
97100

98101
try PackageToJS.runSingleTestingLibrary(
99102
testRunner: testRunner, currentDirectoryURL: currentDirectoryURL,
100-
extraArguments: extraArguments
103+
extraArguments: extraArguments,
104+
testOptions: testOptions
101105
)
102106
}
103107

@@ -114,10 +118,11 @@ struct PackageToJS {
114118
static func runSingleTestingLibrary(
115119
testRunner: URL,
116120
currentDirectoryURL: URL,
117-
extraArguments: [String]
121+
extraArguments: [String],
122+
testOptions: TestOptions
118123
) throws {
119124
let node = try which("node")
120-
let arguments = ["--experimental-wasi-unstable-preview1",testRunner.path] + extraArguments
125+
let arguments = ["--experimental-wasi-unstable-preview1"]+ testOptions.extraNodeArguments +[testRunner.path] + extraArguments
121126
print("Running test...")
122127
logCommandExecution(node.path, arguments)
123128

‎Plugins/PackageToJS/Sources/PackageToJSPlugin.swift‎

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,10 +340,13 @@ extension PackageToJS.TestOptions {
340340
let prelude = extractor.extractOption(named: "prelude").last
341341
let environment = extractor.extractOption(named: "environment").last
342342
let inspect = extractor.extractFlag(named: "inspect")
343+
let extraNodeArguments = extractor.extractSingleDashOption(named: "Xnode")
343344
let packageOptions = PackageToJS.PackageOptions.parse(from: &extractor)
344345
var options = PackageToJS.TestOptions(
345346
buildOnly: buildOnly != 0, listTests: listTests != 0,
346-
filter: filter, prelude: prelude, environment: environment, inspect: inspect != 0, packageOptions: packageOptions
347+
filter: filter, prelude: prelude, environment: environment, inspect: inspect != 0,
348+
extraNodeArguments: extraNodeArguments,
349+
packageOptions: packageOptions
347350
)
348351

349352
if !options.buildOnly, !options.packageOptions.useCDN {
@@ -379,6 +382,39 @@ extension PackageToJS.TestOptions {
379382

380383
// MARK: - PackagePlugin helpers
381384

385+
extension ArgumentExtractor {
386+
fileprivate mutating func extractSingleDashOption(named name: String) -> [String] {
387+
let parts = remainingArguments.split(separator: "--", maxSplits: 1, omittingEmptySubsequences: false)
388+
var args = Array(parts[0])
389+
let literals = Array(parts.count == 2 ? parts[1] : [])
390+
391+
var values: [String] = []
392+
var idx = 0
393+
while idx < args.count {
394+
var arg = args[idx]
395+
if arg == "-\(name)" {
396+
args.remove(at: idx)
397+
if idx < args.count {
398+
let val = args[idx]
399+
values.append(val)
400+
args.remove(at: idx)
401+
}
402+
}
403+
else if arg.starts(with: "-\(name)=") {
404+
args.remove(at: idx)
405+
arg.removeFirst(2 + name.count)
406+
values.append(arg)
407+
}
408+
else {
409+
idx += 1
410+
}
411+
}
412+
413+
self = ArgumentExtractor(args + literals)
414+
return values
415+
}
416+
}
417+
382418
/// Derive default product from the package
383419
/// - Returns: The name of the product to build
384420
/// - Throws: `PackageToJSError` if there's no executable product or if there's more than one

‎Plugins/PackageToJS/Tests/ExampleTests.swift‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,20 @@ extension Trait where Self == ConditionTrait {
148148
let swiftSDKID = try #require(Self.getSwiftSDKID())
149149
try withPackage(at: "Examples/Testing") { packageDir, runSwift in
150150
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "test"], [:])
151+
try withTemporaryDirectory(body: { tempDir, _ in
152+
let scriptContent = """
153+
const fs = require('fs');
154+
const path = require('path');
155+
const scriptPath = path.join(__dirname, 'test.txt');
156+
fs.writeFileSync(scriptPath, 'Hello, world!');
157+
"""
158+
try scriptContent.write(to: tempDir.appending(path: "script.js"), atomically: true, encoding: .utf8)
159+
let scriptPath = tempDir.appending(path: "script.js")
160+
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "test", "-Xnode=--require=\(scriptPath.path)"], [:])
161+
let testPath = tempDir.appending(path: "test.txt")
162+
try #require(FileManager.default.fileExists(atPath: testPath.path), "test.txt should exist")
163+
try #require(try String(contentsOf: testPath, encoding: .utf8) == "Hello, world!", "test.txt should be created by the script")
164+
})
151165
try runSwift(["package", "--swift-sdk", swiftSDKID, "js", "test", "--environment", "browser"], [:])
152166
}
153167
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /