feat: add stat instance method to File class returning Stat object

Implement `File.stat` method that performs an asynchronous `fstat` call on the open file descriptor, returning a `Stat` object populated with file metadata (device, inode, mode, link count, user, group, size, block size, block count). Refactor the existing `statPathCallback` into a generic `statCallback` shared by both `statPath` and the new `fileStat` function. Bump `MAX_METHODS_PER_CLASS` from 11 to 12 to accommodate the new foreign method slot. Add comprehensive test coverage including successful stat retrieval and error handling when called on a closed file.
This commit is contained in:
Bob Nystrom
2016-02-21 18:18:45 +00:00
parent e87cd41c32
commit 42ba73b03b
7 changed files with 88 additions and 43 deletions
-1
View File
@@ -1,5 +1,4 @@
import "io" for File
import "scheduler" for Scheduler
var file = File.open("test/io/file/file.txt")
System.print(file.size) // expect: 19
+18
View File
@@ -0,0 +1,18 @@
import "io" for File, Stat
var file = File.open("test/io/file/file.txt")
var stat = file.stat
System.print(stat is Stat) // expect: true
System.print(stat.device is Num) // expect: true
System.print(stat.inode is Num) // expect: true
System.print(stat.mode is Num) // expect: true
System.print(stat.linkCount) // expect: 1
System.print(stat.user is Num) // expect: true
System.print(stat.group is Num) // expect: true
System.print(stat.specialDevice) // expect: 0
System.print(stat.size) // expect: 19
System.print(stat.blockSize is Num) // expect: true
System.print(stat.blockCount is Num) // expect: true
file.close()
+6
View File
@@ -0,0 +1,6 @@
import "io" for File
var file = File.open("test/io/file/file.txt")
file.close()
file.stat // expect runtime error: File is not open.