Skip to content

Commit 7c3ef96

Browse files
committed
TestFoundation: remove mkstemp usage
`mkstemp` is not available on Windows. Replace the two sites with a GUID temporary path instead.
1 parent 2e4aa1c commit 7c3ef96

File tree

3 files changed

+43
-50
lines changed

3 files changed

+43
-50
lines changed

TestFoundation/TestFileHandle.swift

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -280,39 +280,42 @@ class TestFileHandle : XCTestCase {
280280
XCTAssertEqual(fh.readDataToEndOfFile().count, 0)
281281
}
282282

283-
func test_truncateFile() {
284-
mkstemp(template: "test_truncateFile.XXXXXX") { (fh) in
285-
fh.truncateFile(atOffset: 50)
286-
XCTAssertEqual(fh.offsetInFile, 50)
283+
func test_truncateFile() throws {
284+
let url: URL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(ProcessInfo.processInfo.globallyUniqueString)
285+
try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true)
287286

288-
fh.truncateFile(atOffset: 0)
289-
XCTAssertEqual(fh.offsetInFile, 0)
287+
let fh: FileHandle = try FileHandle(forWritingTo: url)
290288

291-
fh.truncateFile(atOffset: 100)
292-
XCTAssertEqual(fh.offsetInFile, 100)
289+
fh.truncateFile(atOffset: 50)
290+
XCTAssertEqual(fh.offsetInFile, 50)
293291

294-
fh.write(Data([1, 2]))
295-
XCTAssertEqual(fh.offsetInFile, 102)
292+
fh.truncateFile(atOffset: 0)
293+
XCTAssertEqual(fh.offsetInFile, 0)
296294

297-
fh.seek(toFileOffset: 4)
298-
XCTAssertEqual(fh.offsetInFile, 4)
295+
fh.truncateFile(atOffset: 100)
296+
XCTAssertEqual(fh.offsetInFile, 100)
299297

300-
(0..<20).forEach { fh.write(Data([$0])) }
301-
XCTAssertEqual(fh.offsetInFile, 24)
298+
fh.write(Data([1, 2]))
299+
XCTAssertEqual(fh.offsetInFile, 102)
302300

303-
fh.seekToEndOfFile()
304-
XCTAssertEqual(fh.offsetInFile, 102)
301+
fh.seek(toFileOffset: 4)
302+
XCTAssertEqual(fh.offsetInFile, 4)
305303

306-
fh.truncateFile(atOffset: 10)
307-
XCTAssertEqual(fh.offsetInFile, 10)
304+
(0..<20).forEach { fh.write(Data([$0])) }
305+
XCTAssertEqual(fh.offsetInFile, 24)
308306

309-
fh.seek(toFileOffset: 0)
310-
XCTAssertEqual(fh.offsetInFile, 0)
307+
fh.seekToEndOfFile()
308+
XCTAssertEqual(fh.offsetInFile, 102)
311309

312-
let data = fh.readDataToEndOfFile()
313-
XCTAssertEqual(data.count, 10)
314-
XCTAssertEqual(data, Data([0, 0, 0, 0, 0, 1, 2, 3, 4, 5]))
315-
}
310+
fh.truncateFile(atOffset: 10)
311+
XCTAssertEqual(fh.offsetInFile, 10)
312+
313+
fh.seek(toFileOffset: 0)
314+
XCTAssertEqual(fh.offsetInFile, 0)
315+
316+
let data = fh.readDataToEndOfFile()
317+
XCTAssertEqual(data.count, 10)
318+
XCTAssertEqual(data, Data([0, 0, 0, 0, 0, 1, 2, 3, 4, 5]))
316319
}
317320

318321
func test_readabilityHandlerCloseFileRace() throws {

TestFoundation/TestProcess.swift

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -225,27 +225,30 @@ class TestProcess : XCTestCase {
225225
XCTAssertEqual(errMsg, "cat: invalid_file_name: No such file or directory\n")
226226
}
227227

228-
func test_file_stdout() {
228+
func test_file_stdout() throws {
229229
let process = Process()
230230

231231
process.launchPath = "/usr/bin/which"
232232
process.arguments = ["which"]
233233

234-
mkstemp(template: "TestProcess.XXXXXX") { handle in
235-
process.standardOutput = handle
234+
let url: URL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(ProcessInfo.processInfo.globallyUniqueString)
235+
try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true)
236236

237-
process.launch()
238-
process.waitUntilExit()
239-
XCTAssertEqual(process.terminationStatus, 0)
237+
let handle: FileHandle = try FileHandle(forWritingTo: url)
240238

241-
handle.seek(toFileOffset: 0)
242-
let data = handle.readDataToEndOfFile()
243-
guard let string = String(data: data, encoding: .ascii) else {
244-
XCTFail("Could not read stdout")
245-
return
246-
}
247-
XCTAssertTrue(string.hasSuffix("/which\n"))
239+
process.standardOutput = handle
240+
241+
process.launch()
242+
process.waitUntilExit()
243+
XCTAssertEqual(process.terminationStatus, 0)
244+
245+
handle.seek(toFileOffset: 0)
246+
let data = handle.readDataToEndOfFile()
247+
guard let string = String(data: data, encoding: .ascii) else {
248+
XCTFail("Could not read stdout")
249+
return
248250
}
251+
XCTAssertTrue(string.hasSuffix("/which\n"))
249252
}
250253

251254
func test_passthrough_environment() {

TestFoundation/TestUtils.swift

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,3 @@ func ensureFiles(_ fileNames: [String]) -> Bool {
4242
}
4343
return result
4444
}
45-
46-
func mkstemp(template: String, body: (FileHandle) throws -> Void) rethrows {
47-
let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(template)
48-
49-
try url.withUnsafeFileSystemRepresentation {
50-
switch mkstemp(UnsafeMutablePointer(mutating: $0!)) {
51-
case -1: XCTFail("Could not create temporary file")
52-
case let fd:
53-
defer { url.withUnsafeFileSystemRepresentation { _ = unlink($0!) } }
54-
try body(FileHandle(fileDescriptor: fd, closeOnDealloc: true))
55-
}
56-
}
57-
}

0 commit comments

Comments
 (0)