Skip to content

Commit a656070

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 953257c commit a656070

File tree

3 files changed

+39
-50
lines changed

3 files changed

+39
-50
lines changed

TestFoundation/TestFileHandle.swift

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -278,39 +278,40 @@ class TestFileHandle : XCTestCase {
278278
XCTAssertEqual(fh.readDataToEndOfFile().count, 0)
279279
}
280280

281-
func test_truncateFile() {
282-
mkstemp(template: "test_truncateFile.XXXXXX") { (fh) in
283-
fh.truncateFile(atOffset: 50)
284-
XCTAssertEqual(fh.offsetInFile, 50)
281+
func test_truncateFile() throws {
282+
let url: URL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(ProcessInfo.processInfo.globallyUniqueString)
283+
let fh: FileHandle = try FileHandle(forWritingTo: url)
285284

286-
fh.truncateFile(atOffset: 0)
287-
XCTAssertEqual(fh.offsetInFile, 0)
285+
fh.truncateFile(atOffset: 50)
286+
XCTAssertEqual(fh.offsetInFile, 50)
288287

289-
fh.truncateFile(atOffset: 100)
290-
XCTAssertEqual(fh.offsetInFile, 100)
288+
fh.truncateFile(atOffset: 0)
289+
XCTAssertEqual(fh.offsetInFile, 0)
291290

292-
fh.write(Data([1, 2]))
293-
XCTAssertEqual(fh.offsetInFile, 102)
291+
fh.truncateFile(atOffset: 100)
292+
XCTAssertEqual(fh.offsetInFile, 100)
294293

295-
fh.seek(toFileOffset: 4)
296-
XCTAssertEqual(fh.offsetInFile, 4)
294+
fh.write(Data([1, 2]))
295+
XCTAssertEqual(fh.offsetInFile, 102)
297296

298-
(0..<20).forEach { fh.write(Data([$0])) }
299-
XCTAssertEqual(fh.offsetInFile, 24)
297+
fh.seek(toFileOffset: 4)
298+
XCTAssertEqual(fh.offsetInFile, 4)
300299

301-
fh.seekToEndOfFile()
302-
XCTAssertEqual(fh.offsetInFile, 102)
300+
(0..<20).forEach { fh.write(Data([$0])) }
301+
XCTAssertEqual(fh.offsetInFile, 24)
303302

304-
fh.truncateFile(atOffset: 10)
305-
XCTAssertEqual(fh.offsetInFile, 10)
303+
fh.seekToEndOfFile()
304+
XCTAssertEqual(fh.offsetInFile, 102)
306305

307-
fh.seek(toFileOffset: 0)
308-
XCTAssertEqual(fh.offsetInFile, 0)
306+
fh.truncateFile(atOffset: 10)
307+
XCTAssertEqual(fh.offsetInFile, 10)
309308

310-
let data = fh.readDataToEndOfFile()
311-
XCTAssertEqual(data.count, 10)
312-
XCTAssertEqual(data, Data([0, 0, 0, 0, 0, 1, 2, 3, 4, 5]))
313-
}
309+
fh.seek(toFileOffset: 0)
310+
XCTAssertEqual(fh.offsetInFile, 0)
311+
312+
let data = fh.readDataToEndOfFile()
313+
XCTAssertEqual(data.count, 10)
314+
XCTAssertEqual(data, Data([0, 0, 0, 0, 0, 1, 2, 3, 4, 5]))
314315
}
315316

316317
func test_readabilityHandlerCloseFileRace() throws {

TestFoundation/TestProcess.swift

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -225,27 +225,28 @@ 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+
let handle: FileHandle = try FileHandle(forWritingTo: url)
236236

237-
process.launch()
238-
process.waitUntilExit()
239-
XCTAssertEqual(process.terminationStatus, 0)
237+
process.standardOutput = handle
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.launch()
240+
process.waitUntilExit()
241+
XCTAssertEqual(process.terminationStatus, 0)
242+
243+
handle.seek(toFileOffset: 0)
244+
let data = handle.readDataToEndOfFile()
245+
guard let string = String(data: data, encoding: .ascii) else {
246+
XCTFail("Could not read stdout")
247+
return
248248
}
249+
XCTAssertTrue(string.hasSuffix("/which\n"))
249250
}
250251

251252
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)