1package fsext
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/stretchr/testify/require"
9)
10
11func TestListDirectory(t *testing.T) {
12 tmp := t.TempDir()
13
14 testFiles := map[string]string{
15 "regular.txt": "content",
16 ".hidden": "hidden content",
17 ".gitignore": ".*\n*.log\n",
18 "subdir/file.go": "package main",
19 "subdir/.another": "more hidden",
20 "build.log": "build output",
21 }
22
23 for name, content := range testFiles {
24 fp := filepath.Join(tmp, name)
25 dir := filepath.Dir(fp)
26 require.NoError(t, os.MkdirAll(dir, 0o755))
27 require.NoError(t, os.WriteFile(fp, []byte(content), 0o644))
28 }
29
30 t.Run("no limit", func(t *testing.T) {
31 files, truncated, err := ListDirectory(tmp, nil, -1, -1)
32 require.NoError(t, err)
33 require.False(t, truncated)
34 require.Len(t, files, 4)
35 require.ElementsMatch(t, []string{
36 "regular.txt",
37 "subdir",
38 "subdir/.another",
39 "subdir/file.go",
40 }, relPaths(t, files, tmp))
41 })
42 t.Run("limit", func(t *testing.T) {
43 files, truncated, err := ListDirectory(tmp, nil, -1, 2)
44 require.NoError(t, err)
45 require.True(t, truncated)
46 require.Len(t, files, 2)
47 })
48}
49
50func relPaths(tb testing.TB, in []string, base string) []string {
51 tb.Helper()
52 out := make([]string, 0, len(in))
53 for _, p := range in {
54 rel, err := filepath.Rel(base, p)
55 require.NoError(tb, err)
56 out = append(out, filepath.ToSlash(rel))
57 }
58 return out
59}