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:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user