@@ -21,7 +21,7 @@ final class ZipTests: XCTestCase {
21
21
22
22
func test_unzip( ) async throws {
23
23
// Test basic unzip behaviour we expect from the library we use
24
- try await withTempDir { tempDir in
24
+ try withTempDir { tempDir in
25
25
let tempURL = URL ( fileURLWithPath: tempDir)
26
26
let zipFile = fixtureUrl ( for: " out.zip " )
27
27
let outDir = tempURL. appendingPathComponent ( " out " )
@@ -41,7 +41,7 @@ final class ZipTests: XCTestCase {
41
41
42
42
func test_zip_roundtrip( ) async throws {
43
43
// Test basic zip roundtrip
44
- try await withTempDir { tempDir in
44
+ try withTempDir { tempDir in
45
45
// temp
46
46
let tempURL = URL ( fileURLWithPath: tempDir)
47
47
@@ -92,7 +92,7 @@ final class ZipTests: XCTestCase {
92
92
try XCTSkipIf ( !FileManager. default. fileExists ( atPath: Zipper . zip. path) )
93
93
94
94
// Test basic zip roundtrip with the shellTool method
95
- try await withTempDir { tempDir in
95
+ try withTempDir { tempDir in
96
96
// temp
97
97
let tempURL = URL ( fileURLWithPath: tempDir)
98
98
@@ -139,4 +139,41 @@ final class ZipTests: XCTestCase {
139
139
}
140
140
}
141
141
142
+ func test_zip_roundtrip_shellTool_relative_paths( ) async throws {
143
+ try XCTSkipIf ( !FileManager. default. fileExists ( atPath: Zipper . zip. path) )
144
+
145
+ // Test basic zip roundtrip with the shellTool method and relative paths
146
+ try withTempDir { tempDir in
147
+ // DocBundle components
148
+ // metadataURL: tempDir/metadata.json
149
+ // sourceURL: tempDir/.docs/owner/repo/ref
150
+ // should be zipped as
151
+ // - metadata.json
152
+ // - ref
153
+ // at the top level as relative paths.
154
+ let tempURL = URL ( fileURLWithPath: tempDir)
155
+ let metadataURL = tempURL. appendingPathComponent ( " metadata.json " )
156
+ try " metadata " . write ( to: metadataURL, atomically: true , encoding: . utf8)
157
+ let sourceURL = tempURL. appendingPathComponent ( " docs/owner/repo/ref " )
158
+ try FileManager . default. createDirectory ( at: sourceURL, withIntermediateDirectories: true )
159
+ let indexHTML = sourceURL. appendingPathComponent ( " index.html " )
160
+ try " index " . write ( to: indexHTML, atomically: true , encoding: . utf8)
161
+
162
+ // MUT
163
+ let zipFile = tempURL. appendingPathComponent ( " out.zip " )
164
+ try Zipper . zip ( paths: [ metadataURL, sourceURL] , to: zipFile, method: . zipTool( workingDirectory: tempDir) )
165
+
166
+ do { // validate
167
+ let unzipDir = tempURL. appendingPathComponent ( " unzip " )
168
+ try Zipper . unzip ( from: zipFile, to: unzipDir)
169
+ let metadataURL = unzipDir. appendingPathComponent ( " metadata.json " )
170
+ let indexHTML = unzipDir. appendingPathComponent ( " ref/index.html " )
171
+ XCTAssert ( FileManager . default. fileExists ( atPath: metadataURL. path) )
172
+ XCTAssert ( FileManager . default. fileExists ( atPath: indexHTML. path) )
173
+ XCTAssertEqual ( try String ( contentsOf: metadataURL) , " metadata " )
174
+ XCTAssertEqual ( try String ( contentsOf: indexHTML) , " index " )
175
+ }
176
+ }
177
+ }
178
+
142
179
}
0 commit comments