Skip to content

Commit d0fcd84

Browse files
committed
Have FileHandle.nullDevice return a subclass which does nothing.
1 parent d922247 commit d0fcd84

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

Foundation/NSFileHandle.swift

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,41 @@ extension FileHandle {
216216
}
217217

218218
internal static var _nulldeviceFileHandle: FileHandle = {
219-
return FileHandle(forUpdatingAtPath: "/dev/null")!
219+
class NullDevice: FileHandle {
220+
override var availableData: Data {
221+
return Data()
222+
}
223+
224+
override func readDataToEndOfFile() -> Data {
225+
return Data()
226+
}
227+
228+
override func readData(ofLength length: Int) -> Data {
229+
return Data()
230+
}
231+
232+
override func write(_ data: Data) {}
233+
234+
override var offsetInFile: UInt64 {
235+
return 0
236+
}
237+
238+
override func seekToEndOfFile() -> UInt64 {
239+
return 0
240+
}
241+
242+
override func seek(toFileOffset offset: UInt64) {}
243+
244+
override func truncateFile(atOffset offset: UInt64) {}
245+
246+
override func synchronizeFile() {}
247+
248+
override func closeFile() {}
249+
250+
deinit {}
251+
}
252+
253+
return NullDevice(fileDescriptor: -1, closeOnDealloc: false)
220254
}()
221255

222256
open class var nullDevice: FileHandle {

TestFoundation/TestNSFileHandle.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,18 @@ class TestNSFileHandle : XCTestCase {
4343
func test_nullDevice() {
4444
let fh = FileHandle.nullDevice
4545

46+
XCTAssertEqual(fh.fileDescriptor, -1)
47+
fh.closeFile()
48+
fh.seek(toFileOffset: 10)
49+
XCTAssertEqual(fh.offsetInFile, 0)
50+
XCTAssertEqual(fh.seekToEndOfFile(), 0)
51+
XCTAssertEqual(fh.readData(ofLength: 15).count, 0)
52+
fh.synchronizeFile()
53+
4654
fh.write(Data(bytes: [1,2]))
55+
fh.seek(toFileOffset: 0)
4756
XCTAssertEqual(fh.availableData.count, 0)
57+
fh.write(Data(bytes: [1,2]))
4858
fh.seek(toFileOffset: 0)
4959
XCTAssertEqual(fh.readDataToEndOfFile().count, 0)
5060
}

0 commit comments

Comments
 (0)