From 3efb43aaf789727106766d9fd5ac15df11c838d3 Mon Sep 17 00:00:00 2001 From: Virgil Date: Fri, 3 Apr 2026 05:13:09 +0000 Subject: [PATCH] Improve memory medium metadata --- io.go | 13 +++++++++++-- medium_test.go | 9 +++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/io.go b/io.go index 0f69889..b6e5b3e 100644 --- a/io.go +++ b/io.go @@ -374,6 +374,7 @@ func (medium *MemoryMedium) Open(path string) (fs.File, error) { name: core.PathBase(path), content: []byte(content), mode: medium.fileMode(path), + modTime: medium.modificationTime(path), }, nil } @@ -410,10 +411,11 @@ type MemoryFile struct { content []byte offset int64 mode fs.FileMode + modTime time.Time } func (file *MemoryFile) Stat() (fs.FileInfo, error) { - return NewFileInfo(file.name, int64(len(file.content)), file.mode, time.Time{}, false), nil + return NewFileInfo(file.name, int64(len(file.content)), file.mode, file.modTime, false), nil } func (file *MemoryFile) Read(buffer []byte) (int, error) { @@ -457,6 +459,13 @@ func (medium *MemoryMedium) fileMode(path string) fs.FileMode { return 0644 } +func (medium *MemoryMedium) modificationTime(path string) time.Time { + if modTime, ok := medium.modificationTimes[path]; ok { + return modTime + } + return time.Time{} +} + func (medium *MemoryMedium) List(path string) ([]fs.DirEntry, error) { if _, ok := medium.directories[path]; !ok { hasChildren := false @@ -518,7 +527,7 @@ func (medium *MemoryMedium) List(path string) ([]fs.DirEntry, error) { rest, false, medium.fileMode(filePath), - NewFileInfo(rest, int64(len(content)), medium.fileMode(filePath), time.Time{}, false), + NewFileInfo(rest, int64(len(content)), medium.fileMode(filePath), medium.modificationTime(filePath), false), )) } } diff --git a/medium_test.go b/medium_test.go index 26f07d3..5b103b8 100644 --- a/medium_test.go +++ b/medium_test.go @@ -234,6 +234,9 @@ func TestMemoryMedium_StreamAndFSHelpers_Good(t *testing.T) { require.NoError(t, memoryMedium.EnsureDir("dir")) require.NoError(t, memoryMedium.Write("dir/file.txt", "alpha")) + statInfo, err := memoryMedium.Stat("dir/file.txt") + require.NoError(t, err) + file, err := memoryMedium.Open("dir/file.txt") require.NoError(t, err) @@ -242,7 +245,7 @@ func TestMemoryMedium_StreamAndFSHelpers_Good(t *testing.T) { assert.Equal(t, "file.txt", info.Name()) assert.Equal(t, int64(5), info.Size()) assert.Equal(t, fs.FileMode(0644), info.Mode()) - assert.True(t, info.ModTime().IsZero()) + assert.Equal(t, statInfo.ModTime(), info.ModTime()) assert.False(t, info.IsDir()) assert.Nil(t, info.Sys()) @@ -263,6 +266,7 @@ func TestMemoryMedium_StreamAndFSHelpers_Good(t *testing.T) { assert.Equal(t, "file.txt", entryInfo.Name()) assert.Equal(t, int64(5), entryInfo.Size()) assert.Equal(t, fs.FileMode(0644), entryInfo.Mode()) + assert.Equal(t, statInfo.ModTime(), entryInfo.ModTime()) writer, err := memoryMedium.Create("created.txt") require.NoError(t, err) @@ -290,9 +294,10 @@ func TestMemoryMedium_StreamAndFSHelpers_Good(t *testing.T) { require.NoError(t, writeStream.Close()) assert.Equal(t, "stream output", memoryMedium.fileContents["streamed.txt"]) - statInfo, err := memoryMedium.Stat("streamed.txt") + statInfo, err = memoryMedium.Stat("streamed.txt") require.NoError(t, err) assert.Equal(t, fs.FileMode(0644), statInfo.Mode()) + assert.False(t, statInfo.ModTime().IsZero()) } func TestIO_Read_Good(t *testing.T) {