os.Stat("") will return an error, stat : no such file or directory, where as MemMapFs.Stat() does not return an error. Instead it returns a populated FileInfo:
FileInfo.Name() == ""
FileInfo.Size() == 42
FileInfo.Mode() == "drwxr-xr-x"
FileInfo.ModTime() == "2025-07-30 16:15:24.211543491 -0400 EDT m=+0.000353724"
FileInfo.IsDir() == true
This can be worked around by having special case handling for empty strings in the code calling into Stat(), but that kinda defeats the purpose of having an injectable FS for testing.
A test showing this difference in behaviour:
func TestMemMapFsStat(t *testing.T) {
fs := &MemMapFs{}
{
f, err := fs.Stat("")
if err != nil {
fmt.Printf("fs.Stat() err is %s\n", err.Error())
} else {
fmt.Println("fs.Stat() err is nil")
fmt.Println(f.Name())
fmt.Println(f.Size())
fmt.Println(f.Mode())
fmt.Println(f.ModTime())
fmt.Println(f.IsDir())
}
}
{
f, err := os.Stat("")
if err != nil {
fmt.Printf("os.Stat() err is %s\n", err.Error())
} else {
fmt.Println("os.Stat() err is nil")
fmt.Println(f.Name())
fmt.Println(f.Size())
fmt.Println(f.Mode())
fmt.Println(f.ModTime())
fmt.Println(f.IsDir())
}
}
}
os.Stat("") will return an error,
stat : no such file or directory, where as MemMapFs.Stat() does not return an error. Instead it returns a populated FileInfo:This can be worked around by having special case handling for empty strings in the code calling into Stat(), but that kinda defeats the purpose of having an injectable FS for testing.
A test showing this difference in behaviour: