Skip to content

Commit c4bc984

Browse files
authoredFeb 3, 2025
Merge 7a28b74 into 5c10e5a
2 parents 5c10e5a + 7a28b74 commit c4bc984

File tree

6 files changed

+126
-82
lines changed

6 files changed

+126
-82
lines changed
 

‎.github/workflows/swift.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,13 @@ jobs:
3131
path: getargv-swift
3232
fetch-tags: true
3333
fetch-depth: 0 # until https://github.com/actions/checkout/issues/1471 fixed
34+
- uses: maxim-lobanov/setup-xcode@v1
35+
with:
36+
xcode-version: latest-stable
3437
- uses: swift-actions/setup-swift@v2
3538
with:
36-
swift-version: '5.10'
39+
swift-version: '6.0'
40+
# https://www.swift.org/download/
3741
- name: Build
3842
run: swift build -v
3943
working-directory: getargv-swift

‎.spi.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ builder:
33
configs:
44
- documentation_targets: [ SwiftGetargv, Cgetargv ]
55
platform: macosSpm
6-
swift_version: '5.10'
6+
swift_version: '6.0'

‎Package.resolved

+23-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"originHash" : "962efd74b56b59bb8cdeb4ecfc2c8b4570ec41f2408fd1ffbb8a6c271e5c3e90",
2+
"originHash" : "afcfa35ae20d597ac5d4f2fabf441880f5f27655b3abca40249c0f711ca42284",
33
"pins" : [
44
{
55
"identity" : "swift-argument-parser",
@@ -13,20 +13,38 @@
1313
{
1414
"identity" : "swift-docc-plugin",
1515
"kind" : "remoteSourceControl",
16-
"location" : "https://github.com/apple/swift-docc-plugin",
16+
"location" : "https://github.com/swiftlang/swift-docc-plugin",
1717
"state" : {
18-
"revision" : "26ac5758409154cc448d7ab82389c520fa8a8247",
19-
"version" : "1.3.0"
18+
"revision" : "85e4bb4e1cd62cec64a4b8e769dcefdf0c5b9d64",
19+
"version" : "1.4.3"
2020
}
2121
},
2222
{
2323
"identity" : "swift-docc-symbolkit",
2424
"kind" : "remoteSourceControl",
25-
"location" : "https://github.com/apple/swift-docc-symbolkit",
25+
"location" : "https://github.com/swiftlang/swift-docc-symbolkit",
2626
"state" : {
2727
"revision" : "b45d1f2ed151d057b54504d653e0da5552844e34",
2828
"version" : "1.0.0"
2929
}
30+
},
31+
{
32+
"identity" : "swift-syntax",
33+
"kind" : "remoteSourceControl",
34+
"location" : "https://github.com/swiftlang/swift-syntax.git",
35+
"state" : {
36+
"revision" : "06b5cdc432e93b60e3bdf53aff2857c6b312991a",
37+
"version" : "600.0.0-prerelease-2024-07-30"
38+
}
39+
},
40+
{
41+
"identity" : "swift-testing",
42+
"kind" : "remoteSourceControl",
43+
"location" : "https://github.com/swiftlang/swift-testing",
44+
"state" : {
45+
"revision" : "6155e83dbaa2696d13bcd0079665b6a6daaf6dc8",
46+
"version" : "0.11.0"
47+
}
3048
}
3149
],
3250
"version" : 3

‎Package.swift

+61-26
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,67 @@
1-
// swift-tools-version:5.10
1+
// swift-tools-version:6.0
22
// The swift-tools-version declares the minimum version of Swift required to build this package.
33

44
import PackageDescription
55

66
let package = Package(
7-
name: "Cgetargv",
8-
platforms: [.macOS(.v10_13)],
9-
products: [
10-
.library(name: "SwiftGetargv", targets: ["SwiftGetargv"]),
11-
.library(name: "Cgetargv", targets: ["Cgetargv"])
12-
],
13-
dependencies: [
14-
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.5.0"),
15-
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.3.0"),
16-
],
17-
targets: [
18-
.executableTarget(name: "getargv2", dependencies: [ "SwiftGetargv", .product(
19-
name: "ArgumentParser",
20-
package: "swift-argument-parser"
21-
)]),
22-
.executableTarget(name: "getargv", dependencies: [ "Cgetargv", .product(
23-
name: "ArgumentParser",
24-
package: "swift-argument-parser"
25-
)]),
26-
.target(name: "SwiftGetargv", dependencies: [ "Cgetargv" ]),
27-
.systemLibrary(name: "Cgetargv", pkgConfig: "getargv", providers: [ .brew(["libgetagv"]) ]),
28-
.testTarget(name: "SwiftGetargvTests", dependencies: [ "SwiftGetargv" ]),
29-
.testTarget(name: "CgetargvTests", dependencies: [ "Cgetargv" ])
30-
],
31-
cLanguageStandard: .c99 // https://developer.apple.com/documentation/packagedescription/clanguagestandard
7+
name: "Cgetargv",
8+
platforms: [.macOS(.v10_15)],
9+
products: [
10+
.library(name: "SwiftGetargv", targets: ["SwiftGetargv"]),
11+
.library(name: "Cgetargv", targets: ["Cgetargv"])
12+
],
13+
dependencies: [
14+
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.5.0"),
15+
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.4.3"),
16+
.package(url: "https://github.com/swiftlang/swift-testing", from: "0.11.0"),
17+
],
18+
targets: [
19+
.executableTarget(
20+
name: "getargv2",
21+
dependencies: [
22+
"SwiftGetargv",
23+
.product(
24+
name: "ArgumentParser",
25+
package: "swift-argument-parser"
26+
)
27+
]
28+
),
29+
.executableTarget(
30+
name: "getargv",
31+
dependencies: [
32+
"Cgetargv",
33+
.product(
34+
name: "ArgumentParser",
35+
package: "swift-argument-parser"
36+
)
37+
]
38+
),
39+
.target(name: "SwiftGetargv", dependencies: [ "Cgetargv" ]),
40+
.systemLibrary(
41+
name: "Cgetargv",
42+
pkgConfig: "getargv",
43+
providers: [ .brew(["libgetagv"]) ]
44+
),
45+
.testTarget(
46+
name: "SwiftGetargvTests",
47+
dependencies: [
48+
"SwiftGetargv",
49+
.product(
50+
name: "Testing",
51+
package: "swift-testing"
52+
)
53+
]
54+
),
55+
.testTarget(
56+
name: "CgetargvTests",
57+
dependencies: [
58+
"Cgetargv",
59+
.product(
60+
name: "Testing",
61+
package: "swift-testing"
62+
)
63+
]
64+
)
65+
],
66+
cLanguageStandard: .c99 // https://developer.apple.com/documentation/packagedescription/clanguagestandard
3267
)

‎Tests/CgetargvTests/Test.swift

+20-22
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,40 @@
11
import Foundation
2-
import XCTest
2+
import Testing
33

44
@testable import Cgetargv
55

6-
final class CgetargvTests: XCTestCase {
7-
func testGetArgvOfPid() {
8-
let options = GetArgvOptions(skip: 0, pid: getpid(), nuls: true)
9-
var res = ArgvResult()
10-
XCTAssert(withUnsafePointer(to: options, { get_argv_of_pid($0, &res) }))
11-
12-
let expectedOutput = ProcessInfo.processInfo.arguments.joined(separator: " ")
13-
let actualOutput = String(cString: res.start_pointer)
14-
15-
XCTAssertEqual(actualOutput, expectedOutput, "The Args are not correct.")
16-
}
6+
@Suite()
7+
struct CgetargvTests {
178

18-
func testGetArgvOfPidWithNuls() {
19-
let options = GetArgvOptions(skip: 0, pid: getpid(), nuls: false)
9+
@Test("test getArgvOfPid NUL replacement", arguments: zip([true, false], [" ", "\0"]))
10+
func GetArgvOfPidNuls(nuls: Bool, separator: String) throws {
11+
let options = GetArgvOptions(skip: 0, pid: getpid(), nuls: nuls)
2012
var res = ArgvResult()
21-
XCTAssert(withUnsafePointer(to: options, { get_argv_of_pid($0, &res) }))
13+
try #require(withUnsafePointer(to: options, { get_argv_of_pid($0, &res) }))
2214

23-
let expectedOutput = ProcessInfo.processInfo.arguments.flatMap { $0.utf8CString }
24-
let actualOutput = Array(
25-
UnsafeBufferPointer<CChar>(start: res.start_pointer!, count: res.end_pointer - res.start_pointer + 1))
15+
let expectedOutput = CommandLine.arguments.joined(separator: separator).utf8CString.withUnsafeBufferPointer { bytes -> Data in
16+
Data(buffer: bytes)
17+
}
18+
19+
let count = (res.start_pointer == nil || res.end_pointer == res.start_pointer) ? 0 : res.end_pointer - res.start_pointer + 1
20+
let actualOutput = Data(
21+
buffer: UnsafeBufferPointer<CChar>(start: res.start_pointer!, count: count)
22+
)
2623

27-
XCTAssertEqual(actualOutput, expectedOutput, "The Args are not correct.")
24+
#expect(actualOutput == expectedOutput)
2825
}
2926

30-
func testGetArgvAndArgcOfPid() {
27+
@Test("test getArgvAndArgcOfPid")
28+
func testGetArgvAndArgcOfPid() throws {
3129
let pid = getpid()
3230
var res = ArgvArgcResult()
33-
XCTAssert(get_argv_and_argc_of_pid(pid, &res))
31+
try #require(get_argv_and_argc_of_pid(pid, &res))
3432

3533
let expectedOutput = ProcessInfo.processInfo.arguments
3634
let actualOutput = Array(
3735
UnsafeBufferPointer<UnsafeMutablePointer<CChar>?>(start: res.argv, count: Int(res.argc))
3836
).map { String(cString: $0!) }
3937

40-
XCTAssertEqual(actualOutput, expectedOutput, "The Args are not correct.")
38+
#expect(actualOutput == expectedOutput)
4139
}
4240
}

‎Tests/SwiftGetargvTests/Test.swift

+16-27
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,28 @@
11
import Foundation
2-
import XCTest
2+
import Testing
33

44
@testable import SwiftGetargv
55

6-
final class SwiftGetargvTests: XCTestCase {
7-
func testGetArgvOfPid() {
8-
let expectedOutput = CommandLine.arguments.joined(separator: " ").utf8CString
6+
@Suite()
7+
struct SwiftGetargvTests {
98

10-
switch getArgvOfPid(pid: getpid(), nuls: true) {
11-
case .success(let actualOutput):
12-
XCTAssertEqual(actualOutput.array, Array(expectedOutput), "The Args are not correct.")
13-
case .failure(let error):
14-
XCTFail("getArgvOfPid failed with \(error)")
15-
}
16-
}
9+
@available(macOS 11.0, *)
10+
@Test("test getArgvOfPid NUL replacement", arguments: zip([true, false], [" ", "\0"]))
11+
func GetArgvOfPidNuls(nuls: Bool, separator: String) throws {
12+
let expectedOutput = CommandLine.arguments.joined(separator: separator).utf8CString
1713

18-
func testGetArgvOfPidWithNuls() {
19-
let expectedOutput = CommandLine.arguments.flatMap { $0.utf8CString }
14+
let actualOutput = try #require(try getArgvOfPid(pid: getpid(), nuls: nuls).get())
2015

21-
switch getArgvOfPid(pid: getpid()) {
22-
case .success(let actualOutput):
23-
XCTAssertEqual(actualOutput.array, expectedOutput, "The Args are not correct.")
24-
case .failure(let error):
25-
XCTFail("getArgvOfPid failed with \(error)")
16+
#expect(actualOutput.array == Array(expectedOutput))
2617
}
27-
}
2818

29-
func testGetArgvAndArgcOfPid() {
30-
let expectedOutput = CommandLine.arguments
19+
@available(macOS 11.0, *)
20+
@Test("test getArgvAndArgcOfPid")
21+
func testGetArgvAndArgcOfPid() throws {
22+
let expectedOutput = CommandLine.arguments
23+
24+
let actualOutput = try #require(try getArgvAndArgcOfPid(pid: getpid(), encoding: String.Encoding.nonLossyASCII).get())
3125

32-
switch getArgvAndArgcOfPid(pid: getpid(), encoding: String.Encoding.nonLossyASCII) {
33-
case .success(let actualOutput):
34-
XCTAssertEqual(actualOutput, expectedOutput, "The Args are not correct.")
35-
case .failure(let error):
36-
XCTFail("getArgvAndArgcOfPid failed with \(error)")
26+
#expect(actualOutput == expectedOutput)
3727
}
38-
}
3928
}

0 commit comments

Comments
 (0)
Please sign in to comment.