Skip to content

Commit e67e59b

Browse files
authored
Tests: Improve testVersion assertion and add duplicate symbol test (#8293)
The various CommandTestCases 'testVersion' tests were only asserting the output contains a string. Update the assertion to check the output matches a regular expression. Also, add a test that ensured the command does not emit duplicate symbol on stdout and stderr. rdar://144103998
1 parent bb959be commit e67e59b

7 files changed

+51
-9
lines changed

Tests/CommandsTests/BuildCommandTests.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,15 @@ final class BuildCommandTests: CommandsTestCase {
8989
XCTAssertMatch(stdout, .contains("SEE ALSO: swift run, swift package, swift test"))
9090
}
9191

92+
func testCommandDoesNotEmitDuplicateSymbols() async throws {
93+
let (stdout, stderr) = try await execute(["--help"])
94+
XCTAssertNoMatch(stdout, duplicateSymbolRegex)
95+
XCTAssertNoMatch(stderr, duplicateSymbolRegex)
96+
}
97+
9298
func testVersion() async throws {
9399
let stdout = try await execute(["--version"]).stdout
94-
XCTAssertMatch(stdout, .contains("Swift Package Manager"))
100+
XCTAssertMatch(stdout, .regex(#"Swift Package Manager -( \w+ )?\d+.\d+.\d+(-\w+)?"#))
95101
}
96102

97103
func testCreatingSanitizers() throws {

Tests/CommandsTests/CommandsTestCase.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@
1212

1313
import Basics
1414
import XCTest
15-
15+
import _InternalTestSupport
1616
class CommandsTestCase: XCTestCase {
1717

1818
/// Original working directory before the test ran (if known).
1919
private var originalWorkingDirectory: AbsolutePath? = .none
20-
20+
public let duplicateSymbolRegex = StringPattern.regex(
21+
#"objc[83768]: (.*) is implemented in both .* \(.*\) and .* \(.*\) . One of the two will be used. Which one is undefined."#
22+
)
23+
2124
override func setUp() {
2225
originalWorkingDirectory = localFileSystem.currentWorkingDirectory
2326
}

Tests/CommandsTests/PackageCommandTests.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,15 @@ final class PackageCommandTests: CommandsTestCase {
6565
XCTAssertMatch(stdout, .contains("SEE ALSO: swift build, swift run, swift test"))
6666
}
6767

68+
func testCommandDoesNotEmitDuplicateSymbols() async throws {
69+
let (stdout, stderr) = try await execute(["--help"])
70+
XCTAssertNoMatch(stdout, duplicateSymbolRegex)
71+
XCTAssertNoMatch(stderr, duplicateSymbolRegex)
72+
}
73+
6874
func testVersion() async throws {
6975
let stdout = try await execute(["--version"]).stdout
70-
XCTAssertMatch(stdout, .contains("Swift Package Manager"))
76+
XCTAssertMatch(stdout, .regex(#"Swift Package Manager -( \w+ )?\d+.\d+.\d+(-\w+)?"#))
7177
}
7278

7379
func testCompletionTool() async throws {

Tests/CommandsTests/PackageRegistryCommandTests.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ final class PackageRegistryCommandTests: CommandsTestCase {
7070
XCTAssert(stdout.contains("SEE ALSO: swift package"), "got stdout:\n" + stdout)
7171
}
7272

73+
func testCommandDoesNotEmitDuplicateSymbols() async throws {
74+
let (stdout, stderr) = try await execute(["--help"])
75+
XCTAssertNoMatch(stdout, duplicateSymbolRegex)
76+
XCTAssertNoMatch(stderr, duplicateSymbolRegex)
77+
}
78+
7379
func testVersion() async throws {
7480
// Only run the test if the environment in which we're running actually supports Swift concurrency (which the
7581
// plugin APIs require).
@@ -79,7 +85,7 @@ final class PackageRegistryCommandTests: CommandsTestCase {
7985
)
8086

8187
let stdout = try await execute(["--version"]).stdout
82-
XCTAssert(stdout.contains("Swift Package Manager"), "got stdout:\n" + stdout)
88+
XCTAssertMatch(stdout, .regex(#"Swift Package Manager -( \w+ )?\d+.\d+.\d+(-\w+)?"#))
8389
}
8490

8591
func testLocalConfiguration() async throws {

Tests/CommandsTests/RunCommandTests.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,15 @@ final class RunCommandTests: CommandsTestCase {
3535
XCTAssert(stdout.contains("SEE ALSO: swift build, swift package, swift test"), "got stdout:\n" + stdout)
3636
}
3737

38+
func testCommandDoesNotEmitDuplicateSymbols() async throws {
39+
let (stdout, stderr) = try await execute(["--help"])
40+
XCTAssertNoMatch(stdout, duplicateSymbolRegex)
41+
XCTAssertNoMatch(stderr, duplicateSymbolRegex)
42+
}
43+
3844
func testVersion() async throws {
3945
let stdout = try await execute(["--version"]).stdout
40-
XCTAssert(stdout.contains("Swift Package Manager"), "got stdout:\n" + stdout)
46+
XCTAssertMatch(stdout, .regex(#"Swift Package Manager -( \w+ )?\d+.\d+.\d+(-\w+)?"#))
4147
}
4248

4349
// echo.sh script from the toolset won't work on Windows

Tests/CommandsTests/SwiftSDKCommandTests.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,19 @@ final class SwiftSDKCommandTests: CommandsTestCase {
3232
}
3333
}
3434

35-
func testVersion() async throws {
35+
func testCommandDoesNotEmitDuplicateSymbols() async throws {
36+
for command in [SwiftPM.sdk, SwiftPM.experimentalSDK] {
37+
let (stdout, stderr) = try await command.execute(["--help"])
38+
XCTAssertNoMatch(stdout, duplicateSymbolRegex)
39+
XCTAssertNoMatch(stderr, duplicateSymbolRegex)
40+
}
41+
}
42+
43+
44+
func testVersionS() async throws {
3645
for command in [SwiftPM.sdk, SwiftPM.experimentalSDK] {
3746
let stdout = try await command.execute(["--version"]).stdout
38-
XCTAssert(stdout.contains("Swift Package Manager"), "got stdout:\n" + stdout)
47+
XCTAssertMatch(stdout, .regex(#"Swift Package Manager -( \w+ )?\d+.\d+.\d+(-\w+)?"#))
3948
}
4049
}
4150

Tests/CommandsTests/TestCommandTests.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,15 @@ final class TestCommandTests: CommandsTestCase {
4848
XCTAssert(stdout.contains("SEE ALSO: swift build, swift run, swift package"), "got stdout:\n" + stdout)
4949
}
5050

51+
func testCommandDoesNotEmitDuplicateSymbols() async throws {
52+
let (stdout, stderr) = try await execute(["--help"])
53+
XCTAssertNoMatch(stdout, duplicateSymbolRegex)
54+
XCTAssertNoMatch(stderr, duplicateSymbolRegex)
55+
}
56+
5157
func testVersion() async throws {
5258
let stdout = try await execute(["--version"]).stdout
53-
XCTAssert(stdout.contains("Swift Package Manager"), "got stdout:\n" + stdout)
59+
XCTAssertMatch(stdout, .regex(#"Swift Package Manager -( \w+ )?\d+.\d+.\d+(-\w+)?"#))
5460
}
5561

5662
// `echo.sh` script from the toolset won't work on Windows

0 commit comments

Comments
 (0)