From ea7687d0111faa99916f0048c54fc3cad6a8fc52 Mon Sep 17 00:00:00 2001 From: jolheiser Date: Fri, 19 Feb 2021 20:41:44 -0600 Subject: [PATCH] Implement ReadDir Signed-off-by: jolheiser --- overlay.go | 6 ++++++ overlay_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/overlay.go b/overlay.go index 84410a2..8dab55d 100644 --- a/overlay.go +++ b/overlay.go @@ -39,6 +39,12 @@ func (f *FS) Open(name string) (fs.File, error) { return f.fs.Open(name) } +// ReadDir reads []fs.DirEntry +// This method will prefer EMBEDDED, because that is the "real" FS for overlay +func (f *FS) ReadDir(name string) ([]fs.DirEntry, error) { + return fs.ReadDir(f.fs, name) +} + // Option is a functional option for an FS type Option func(*FS) error diff --git a/overlay_test.go b/overlay_test.go index 2992095..07ec8d2 100644 --- a/overlay_test.go +++ b/overlay_test.go @@ -3,6 +3,7 @@ package overlay import ( "embed" "io" + "io/fs" "os" "strings" "testing" @@ -62,6 +63,48 @@ func TestOverlay(t *testing.T) { } } +func TestWalk(t *testing.T) { + expected := []string{"test1.txt", "test2.txt"} + + x, err := New("_test/disk", embedded, WithSub("_test/embed"), WithCaching(false)) + if err != nil { + t.Log(err) + t.FailNow() + } + + found := make([]string, 0) + if err := fs.WalkDir(x, ".", func(walkPath string, walkEntry fs.DirEntry, walkErr error) error { + if walkErr != nil { + return walkErr + } + + if walkEntry.IsDir() { + return nil + } + + found = append(found, walkEntry.Name()) + + return nil + }); err != nil { + t.Log(err) + t.FailNow() + } + + for _, e := range expected { + exists := false + for _, f := range found { + if e == f { + exists = true + break + } + } + if !exists { + t.Logf("could not find %s in %s\n", e, found) + t.Fail() + } + } +} + var emptyFS embed.FS func TestInvalid(t *testing.T) {