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  }