@@ -100,5 +100,41 @@ final class EndToEndTests: XCTestCase {
100
100
}
101
101
}
102
102
}
103
+
104
+ func testRepeatedSDKBuilds( ) async throws {
105
+ let fm = FileManager . default
106
+
107
+ var packageDirectory = FilePath ( #file)
108
+ packageDirectory. removeLastComponent ( )
109
+ packageDirectory. removeLastComponent ( )
110
+
111
+ // Test that an existing SDK can be rebuilt without cleaning up.
112
+ // Test with no arguments by default:
113
+ var possibleArguments = [ " " ]
114
+ do {
115
+ try await Shell . run ( " docker ps " )
116
+ possibleArguments. append ( " --with-docker --linux-distribution-name rhel --linux-distribution-version ubi9 " )
117
+ } catch {
118
+ self . logger. warning ( " Docker CLI does not seem to be working, skipping tests that involve Docker. " )
119
+ }
120
+
121
+ for runArguments in possibleArguments {
122
+ let testPackageURL = FileManager . default. temporaryDirectory. appendingPathComponent ( " swift-sdk-generator-test " )
123
+ let testPackageDir = FilePath ( testPackageURL. path)
124
+ try ? fm. removeItem ( atPath: testPackageDir. string)
125
+ try fm. createDirectory ( atPath: testPackageDir. string, withIntermediateDirectories: true )
126
+ defer { try ? fm. removeItem ( atPath: testPackageDir. string) }
127
+
128
+ let firstGeneratorOutput = try await Shell . readStdout (
129
+ " cd \( packageDirectory) && swift run swift-sdk-generator \( runArguments) "
130
+ )
131
+ XCTAssert ( firstGeneratorOutput. contains ( " swift experimental-sdk install " ) )
132
+
133
+ let repeatGeneratorOutput = try await Shell . readStdout (
134
+ " cd \( packageDirectory) && swift run swift-sdk-generator \( runArguments) "
135
+ )
136
+ XCTAssert ( repeatGeneratorOutput. contains ( " swift experimental-sdk install " ) )
137
+ }
138
+ }
103
139
#endif
104
140
}
0 commit comments