code.gitea.io/gitea@v1.22.3/modules/assetfs/layered_test.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package assetfs 5 6 import ( 7 "io" 8 "io/fs" 9 "os" 10 "path/filepath" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestLayered(t *testing.T) { 17 dir := filepath.Join(t.TempDir(), "assetfs-layers") 18 dir1 := filepath.Join(dir, "l1") 19 dir2 := filepath.Join(dir, "l2") 20 21 mkdir := func(elems ...string) { 22 assert.NoError(t, os.MkdirAll(filepath.Join(elems...), 0o755)) 23 } 24 write := func(content string, elems ...string) { 25 assert.NoError(t, os.WriteFile(filepath.Join(elems...), []byte(content), 0o644)) 26 } 27 28 // d1 & f1: only in "l1"; d2 & f2: only in "l2" 29 // da & fa: in both "l1" and "l2" 30 mkdir(dir1, "d1") 31 mkdir(dir1, "da") 32 mkdir(dir1, "da/sub1") 33 34 mkdir(dir2, "d2") 35 mkdir(dir2, "da") 36 mkdir(dir2, "da/sub2") 37 38 write("dummy", dir1, ".DS_Store") 39 write("f1", dir1, "f1") 40 write("fa-1", dir1, "fa") 41 write("d1-f", dir1, "d1/f") 42 write("da-f-1", dir1, "da/f") 43 44 write("f2", dir2, "f2") 45 write("fa-2", dir2, "fa") 46 write("d2-f", dir2, "d2/f") 47 write("da-f-2", dir2, "da/f") 48 49 assets := Layered(Local("l1", dir1), Local("l2", dir2)) 50 51 f, err := assets.Open("f1") 52 assert.NoError(t, err) 53 bs, err := io.ReadAll(f) 54 assert.NoError(t, err) 55 assert.EqualValues(t, "f1", string(bs)) 56 _ = f.Close() 57 58 assertRead := func(expected string, expectedErr error, elems ...string) { 59 bs, err := assets.ReadFile(elems...) 60 if err != nil { 61 assert.ErrorAs(t, err, &expectedErr) 62 } else { 63 assert.NoError(t, err) 64 assert.Equal(t, expected, string(bs)) 65 } 66 } 67 assertRead("f1", nil, "f1") 68 assertRead("f2", nil, "f2") 69 assertRead("fa-1", nil, "fa") 70 71 assertRead("d1-f", nil, "d1/f") 72 assertRead("d2-f", nil, "d2/f") 73 assertRead("da-f-1", nil, "da/f") 74 75 assertRead("", fs.ErrNotExist, "no-such") 76 77 files, err := assets.ListFiles(".", true) 78 assert.NoError(t, err) 79 assert.EqualValues(t, []string{"f1", "f2", "fa"}, files) 80 81 files, err = assets.ListFiles(".", false) 82 assert.NoError(t, err) 83 assert.EqualValues(t, []string{"d1", "d2", "da"}, files) 84 85 files, err = assets.ListFiles(".") 86 assert.NoError(t, err) 87 assert.EqualValues(t, []string{"d1", "d2", "da", "f1", "f2", "fa"}, files) 88 89 files, err = assets.ListAllFiles(".", true) 90 assert.NoError(t, err) 91 assert.EqualValues(t, []string{"d1/f", "d2/f", "da/f", "f1", "f2", "fa"}, files) 92 93 files, err = assets.ListAllFiles(".", false) 94 assert.NoError(t, err) 95 assert.EqualValues(t, []string{"d1", "d2", "da", "da/sub1", "da/sub2"}, files) 96 97 files, err = assets.ListAllFiles(".") 98 assert.NoError(t, err) 99 assert.EqualValues(t, []string{ 100 "d1", "d1/f", 101 "d2", "d2/f", 102 "da", "da/f", "da/sub1", "da/sub2", 103 "f1", "f2", "fa", 104 }, files) 105 106 assert.Empty(t, assets.GetFileLayerName("no-such")) 107 assert.EqualValues(t, "l1", assets.GetFileLayerName("f1")) 108 assert.EqualValues(t, "l2", assets.GetFileLayerName("f2")) 109 }