github.com/goreleaser/nfpm/v2@v2.44.0/internal/glob/glob_test.go (about) 1 package glob 2 3 import ( 4 "path/filepath" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestLongestCommonPrefix(t *testing.T) { 11 strings := []string{ 12 "longestcommonprefix", 13 "longestcommontest", 14 "longtest", 15 "longestcommon", 16 "longtest", 17 "longesttest", 18 } 19 20 lcp1 := longestCommonPrefix(strings) 21 require.Equal(t, "long", lcp1) 22 23 empty := []string{} 24 lcp2 := longestCommonPrefix(empty) 25 require.Empty(t, lcp2) 26 27 unique := []string{ 28 "every", 29 "string", 30 "is", 31 "different", 32 "than", 33 "one", 34 "another", 35 } 36 37 lcp3 := longestCommonPrefix(unique) 38 require.Empty(t, lcp3) 39 } 40 41 func TestGlob(t *testing.T) { 42 t.Run("simple", func(t *testing.T) { 43 files, err := Glob("./testdata/dir_a/dir_*/*", "/foo/bar", false) 44 require.NoError(t, err) 45 require.Len(t, files, 2) 46 require.Equal(t, "/foo/bar/dir_b/test_b.txt", files["testdata/dir_a/dir_b/test_b.txt"]) 47 require.Equal(t, "/foo/bar/dir_c/test_c.txt", files["testdata/dir_a/dir_c/test_c.txt"]) 48 }) 49 50 t.Run("dst is a dir", func(t *testing.T) { 51 files, err := Glob("./testdata/dir_a/dir_b/test_b.txt", "/foo/bar/", false) 52 require.NoError(t, err) 53 require.Len(t, files, 1) 54 require.Equal(t, "/foo/bar/test_b.txt", filepath.ToSlash(files["testdata/dir_a/dir_b/test_b.txt"])) 55 }) 56 57 t.Run("to parent", func(t *testing.T) { 58 pattern := "../../testdata/fake" 59 abs, err := filepath.Abs(pattern) 60 require.NoError(t, err) 61 files, err := Glob(pattern, "/foo/fake", false) 62 require.NoError(t, err) 63 require.Len(t, files, 1) 64 require.Equal(t, "/foo/fake", files[filepath.ToSlash(abs)]) 65 }) 66 67 t.Run("single file", func(t *testing.T) { 68 files, err := Glob("testdata/dir_a/dir_b/*", "/foo/bar", false) 69 require.NoError(t, err) 70 require.Len(t, files, 1) 71 require.Equal(t, "/foo/bar/test_b.txt", files["testdata/dir_a/dir_b/test_b.txt"]) 72 }) 73 74 t.Run("double star", func(t *testing.T) { 75 files, err := Glob("testdata/**/test*.txt", "/foo/bar", false) 76 require.NoError(t, err) 77 require.Len(t, files, 3) 78 require.Equal(t, "/foo/bar/dir_a/dir_b/test_b.txt", files["testdata/dir_a/dir_b/test_b.txt"]) 79 }) 80 81 t.Run("nil value", func(t *testing.T) { 82 files, err := Glob("does/not/exist", "/foo/bar", false) 83 require.EqualError(t, err, "matching \"./does/not/exist\": file does not exist") 84 require.Nil(t, files) 85 }) 86 87 t.Run("no matches", func(t *testing.T) { 88 files, err := Glob("testdata/nothing*", "/foo/bar", false) 89 require.Nil(t, files) 90 require.EqualError(t, err, "glob failed: testdata/nothing*: no matching files") 91 }) 92 93 t.Run("escaped brace", func(t *testing.T) { 94 files, err := Glob("testdata/\\{dir_d\\}/*", "/foo/bar", false) 95 require.NoError(t, err) 96 require.Len(t, files, 1) 97 require.Equal(t, "/foo/bar/test_brace.txt", files["testdata/{dir_d}/test_brace.txt"]) 98 }) 99 100 t.Run("no glob", func(t *testing.T) { 101 files, err := Glob("testdata/dir_a/dir_b/test_b.txt", "/foo/bar/dest.dat", false) 102 require.NoError(t, err) 103 require.Len(t, files, 1) 104 require.Equal(t, "/foo/bar/dest.dat", files["testdata/dir_a/dir_b/test_b.txt"]) 105 }) 106 }