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  }