Skip to content

Commit d2512a1

Browse files
committed
tests: Extract SDK build into a function
The EndToEnd tests build SDKs in several places. This commit consolidates this duplicated code in one function. This makes it easier for the next commit to give each build a temporary scratch directory, which will fix the problem of the tests deadlocking when run under `swift test`.
1 parent c785d05 commit d2512a1

File tree

1 file changed

+29
-27
lines changed

1 file changed

+29
-27
lines changed

Tests/SwiftSDKGeneratorTests/EndToEndTests.swift

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,32 @@ final class EndToEndTests: XCTestCase {
3838
private let logger = Logger(label: "swift-sdk-generator")
3939

4040
#if !os(macOS)
41+
func buildSDK(inDirectory packageDirectory: FilePath, withArguments runArguments: String) async throws -> String {
42+
let generatorOutput = try await Shell.readStdout(
43+
"cd \(packageDirectory) && swift run swift-sdk-generator \(runArguments)"
44+
)
45+
46+
let installCommand = try XCTUnwrap(generatorOutput.split(separator: "\n").first {
47+
$0.contains("swift experimental-sdk install")
48+
})
49+
50+
let bundleName = try XCTUnwrap(
51+
FilePath(String(XCTUnwrap(installCommand.split(separator: " ").last))).components.last
52+
).stem
53+
54+
let installedSDKs = try await Shell.readStdout("swift experimental-sdk list").components(separatedBy: "\n")
55+
56+
// Make sure this bundle hasn't been installed already.
57+
if installedSDKs.contains(bundleName) {
58+
try await Shell.run("swift experimental-sdk remove \(bundleName)")
59+
}
60+
61+
let installOutput = try await Shell.readStdout(String(installCommand))
62+
XCTAssertTrue(installOutput.contains("successfully installed"))
63+
64+
return bundleName
65+
}
66+
4167
func testPackageInitExecutable() async throws {
4268
throw XCTSkip("EndToEnd tests currently deadlock under `swift test`: https://github.com/swiftlang/swift-sdk-generator/issues/143")
4369

@@ -58,24 +84,7 @@ final class EndToEndTests: XCTestCase {
5884
}
5985

6086
for runArguments in possibleArguments {
61-
let generatorOutput = try await Shell.readStdout(
62-
"cd \(packageDirectory) && swift run swift-sdk-generator \(runArguments)"
63-
)
64-
65-
let installCommand = try XCTUnwrap(generatorOutput.split(separator: "\n").first {
66-
$0.contains("swift experimental-sdk install")
67-
})
68-
69-
let bundleName = try XCTUnwrap(
70-
FilePath(String(XCTUnwrap(installCommand.split(separator: " ").last))).components.last
71-
).stem
72-
73-
let installedSDKs = try await Shell.readStdout("swift experimental-sdk list").components(separatedBy: "\n")
74-
75-
// Make sure this bundle hasn't been installed already.
76-
if installedSDKs.contains(bundleName) {
77-
try await Shell.run("swift experimental-sdk remove \(bundleName)")
78-
}
87+
let bundleName = try await buildSDK(inDirectory: packageDirectory, withArguments: runArguments)
7988

8089
let installOutput = try await Shell.readStdout(String(installCommand))
8190
XCTAssertTrue(installOutput.contains("successfully installed"))
@@ -121,15 +130,8 @@ final class EndToEndTests: XCTestCase {
121130
}
122131

123132
for runArguments in possibleArguments {
124-
let firstGeneratorOutput = try await Shell.readStdout(
125-
"cd \(packageDirectory) && swift run swift-sdk-generator \(runArguments)"
126-
)
127-
XCTAssert(firstGeneratorOutput.contains("swift experimental-sdk install"))
128-
129-
let repeatGeneratorOutput = try await Shell.readStdout(
130-
"cd \(packageDirectory) && swift run swift-sdk-generator \(runArguments)"
131-
)
132-
XCTAssert(repeatGeneratorOutput.contains("swift experimental-sdk install"))
133+
let _ = try await buildSDK(inDirectory: packageDirectory, withArguments: runArguments)
134+
let _ = try await buildSDK(inDirectory: packageDirectory, withArguments: runArguments)
133135
}
134136
}
135137
#endif

0 commit comments

Comments
 (0)