2023-08-18 08:07:25 +00:00
|
|
|
package fileset
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/fs"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"slices"
|
2023-10-10 08:45:15 +00:00
|
|
|
"strings"
|
2023-08-18 08:07:25 +00:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestGlobFileset(t *testing.T) {
|
|
|
|
cwd, err := os.Getwd()
|
|
|
|
require.NoError(t, err)
|
|
|
|
root := filepath.Join(cwd, "..", "filer")
|
|
|
|
|
|
|
|
entries, err := os.ReadDir(root)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
g, err := NewGlobSet(root, []string{
|
|
|
|
"./*.go",
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
files, err := g.All()
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
require.Equal(t, len(files), len(entries))
|
|
|
|
for _, f := range files {
|
|
|
|
exists := slices.ContainsFunc(entries, func(de fs.DirEntry) bool {
|
|
|
|
return de.Name() == f.Name()
|
|
|
|
})
|
|
|
|
require.True(t, exists)
|
|
|
|
}
|
|
|
|
|
|
|
|
g, err = NewGlobSet(root, []string{
|
|
|
|
"./*.js",
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
files, err = g.All()
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, len(files), 0)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGlobFilesetWithRelativeRoot(t *testing.T) {
|
|
|
|
root := filepath.Join("..", "filer")
|
|
|
|
|
|
|
|
entries, err := os.ReadDir(root)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
g, err := NewGlobSet(root, []string{
|
|
|
|
"./*.go",
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
files, err := g.All()
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
require.Equal(t, len(files), len(entries))
|
|
|
|
for _, f := range files {
|
|
|
|
require.True(t, filepath.IsAbs(f.Absolute))
|
|
|
|
}
|
|
|
|
}
|
2023-10-10 08:45:15 +00:00
|
|
|
|
|
|
|
func TestGlobFilesetRecursively(t *testing.T) {
|
|
|
|
cwd, err := os.Getwd()
|
|
|
|
require.NoError(t, err)
|
|
|
|
root := filepath.Join(cwd, "..", "git")
|
|
|
|
|
|
|
|
entries := make([]string, 0)
|
|
|
|
err = filepath.Walk(filepath.Join(root, "testdata"), func(path string, info fs.FileInfo, err error) error {
|
|
|
|
if !info.IsDir() {
|
|
|
|
entries = append(entries, path)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
g, err := NewGlobSet(root, []string{
|
|
|
|
"testdata/*",
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
files, err := g.All()
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
require.Equal(t, len(files), len(entries))
|
|
|
|
for _, f := range files {
|
|
|
|
exists := slices.ContainsFunc(entries, func(path string) bool {
|
|
|
|
return path == f.Absolute
|
|
|
|
})
|
|
|
|
require.True(t, exists)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGlobFilesetDir(t *testing.T) {
|
|
|
|
cwd, err := os.Getwd()
|
|
|
|
require.NoError(t, err)
|
|
|
|
root := filepath.Join(cwd, "..", "git")
|
|
|
|
|
|
|
|
entries := make([]string, 0)
|
|
|
|
err = filepath.Walk(filepath.Join(root, "testdata", "a"), func(path string, info fs.FileInfo, err error) error {
|
|
|
|
if !info.IsDir() {
|
|
|
|
entries = append(entries, path)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
g, err := NewGlobSet(root, []string{
|
|
|
|
"testdata/a",
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
files, err := g.All()
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
require.Equal(t, len(files), len(entries))
|
|
|
|
for _, f := range files {
|
|
|
|
exists := slices.ContainsFunc(entries, func(path string) bool {
|
|
|
|
return path == f.Absolute
|
|
|
|
})
|
|
|
|
require.True(t, exists)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGlobFilesetDoubleQuotesWithFilePatterns(t *testing.T) {
|
|
|
|
cwd, err := os.Getwd()
|
|
|
|
require.NoError(t, err)
|
|
|
|
root := filepath.Join(cwd, "..", "git")
|
|
|
|
|
|
|
|
entries := make([]string, 0)
|
|
|
|
err = filepath.Walk(filepath.Join(root, "testdata"), func(path string, info fs.FileInfo, err error) error {
|
|
|
|
if strings.HasSuffix(path, ".txt") {
|
|
|
|
entries = append(entries, path)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
g, err := NewGlobSet(root, []string{
|
|
|
|
"testdata/**/*.txt",
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
files, err := g.All()
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
require.Equal(t, len(files), len(entries))
|
|
|
|
for _, f := range files {
|
|
|
|
exists := slices.ContainsFunc(entries, func(path string) bool {
|
|
|
|
return path == f.Absolute
|
|
|
|
})
|
|
|
|
require.True(t, exists)
|
|
|
|
}
|
|
|
|
}
|