cuelang.org/go@v0.10.1/cue/load/fs_test.go (about) 1 package load 2 3 import ( 4 "io/fs" 5 "os" 6 "path/filepath" 7 "slices" 8 "testing" 9 "testing/fstest" 10 11 "github.com/go-quicktest/qt" 12 ) 13 14 func TestIOFS(t *testing.T) { 15 dir := t.TempDir() 16 onDiskFiles := []string{ 17 "foo/bar/a", 18 "foo/bar/b", 19 "foo/baz", 20 "arble", 21 } 22 for _, f := range onDiskFiles { 23 writeFile(t, filepath.Join(dir, f), f) 24 } 25 overlayFiles := []string{ 26 "foo/bar/a", 27 "foo/bar/c", 28 "other/x", 29 } 30 overlay := map[string]Source{} 31 for _, f := range overlayFiles { 32 overlay[filepath.Join(dir, f)] = FromString(f + " overlay") 33 } 34 35 fsys, err := newFileSystem(&Config{ 36 Dir: filepath.Join(dir, "foo"), 37 Overlay: overlay, 38 }) 39 qt.Assert(t, qt.IsNil(err)) 40 ffsys := fsys.ioFS(dir) 41 err = fstest.TestFS(ffsys, append(slices.Clip(onDiskFiles), overlayFiles...)...) 42 qt.Assert(t, qt.IsNil(err)) 43 checked := make(map[string]bool) 44 for _, f := range overlayFiles { 45 data, err := fs.ReadFile(ffsys, f) 46 qt.Assert(t, qt.IsNil(err)) 47 qt.Assert(t, qt.Equals(string(data), f+" overlay")) 48 checked[f] = true 49 } 50 for _, f := range onDiskFiles { 51 if checked[f] { 52 continue 53 } 54 data, err := fs.ReadFile(ffsys, f) 55 qt.Assert(t, qt.IsNil(err)) 56 qt.Assert(t, qt.Equals(string(data), f)) 57 } 58 } 59 60 func writeFile(t *testing.T, fpath string, content string) { 61 err := os.MkdirAll(filepath.Dir(fpath), 0o777) 62 qt.Assert(t, qt.IsNil(err)) 63 err = os.WriteFile(fpath, []byte(content), 0o666) 64 qt.Assert(t, qt.IsNil(err)) 65 }