Skip to content

Commit 1db5065

Browse files
authored
Merge pull request #690 from kareman/implement-FileHandle.nullDevice
2 parents 37b6641 + d0fcd84 commit 1db5065

File tree

2 files changed

+61
-3
lines changed

2 files changed

+61
-3
lines changed

Foundation/NSFileHandle.swift

100644100755
Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,49 @@ extension FileHandle {
214214
open class var standardError: FileHandle {
215215
return _stderrFileHandle
216216
}
217-
217+
218+
internal static var _nulldeviceFileHandle: FileHandle = {
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)
254+
}()
255+
218256
open class var nullDevice: FileHandle {
219-
NSUnimplemented()
257+
return _nulldeviceFileHandle
220258
}
221-
259+
222260
public convenience init?(forReadingAtPath path: String) {
223261
self.init(path: path, flags: O_RDONLY, createMode: 0)
224262
}

TestFoundation/TestNSFileHandle.swift

100644100755
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class TestNSFileHandle : XCTestCase {
1919
static var allTests : [(String, (TestNSFileHandle) -> () throws -> ())] {
2020
return [
2121
("test_pipe", test_pipe),
22+
("test_nullDevice", test_nullDevice),
2223
]
2324
}
2425

@@ -38,4 +39,23 @@ class TestNSFileHandle : XCTestCase {
3839
XCTAssertEqual(output, input)
3940
}
4041
}
42+
43+
func test_nullDevice() {
44+
let fh = FileHandle.nullDevice
45+
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+
54+
fh.write(Data(bytes: [1,2]))
55+
fh.seek(toFileOffset: 0)
56+
XCTAssertEqual(fh.availableData.count, 0)
57+
fh.write(Data(bytes: [1,2]))
58+
fh.seek(toFileOffset: 0)
59+
XCTAssertEqual(fh.readDataToEndOfFile().count, 0)
60+
}
4161
}

0 commit comments

Comments
 (0)