1package fsext
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10)
11
12func chdir(t *testing.T, dir string) {
13 original, err := os.Getwd()
14 require.NoError(t, err)
15
16 err = os.Chdir(dir)
17 require.NoError(t, err)
18
19 t.Cleanup(func() {
20 err := os.Chdir(original)
21 require.NoError(t, err)
22 })
23}
24
25func TestListDirectory(t *testing.T) {
26 tempDir := t.TempDir()
27 chdir(t, tempDir)
28
29 testFiles := map[string]string{
30 "regular.txt": "content",
31 ".hidden": "hidden content",
32 ".gitignore": ".*\n*.log\n",
33 "subdir/file.go": "package main",
34 "subdir/.another": "more hidden",
35 "build.log": "build output",
36 }
37
38 for filePath, content := range testFiles {
39 dir := filepath.Dir(filePath)
40 if dir != "." {
41 require.NoError(t, os.MkdirAll(dir, 0o755))
42 }
43
44 err := os.WriteFile(filePath, []byte(content), 0o644)
45 require.NoError(t, err)
46 }
47
48 files, truncated, err := ListDirectory(".", nil, 0)
49 require.NoError(t, err)
50 assert.False(t, truncated)
51 assert.Equal(t, len(files), 4)
52
53 fileSet := make(map[string]bool)
54 for _, file := range files {
55 fileSet[filepath.ToSlash(file)] = true
56 }
57
58 assert.True(t, fileSet["./regular.txt"])
59 assert.True(t, fileSet["./subdir/"])
60 assert.True(t, fileSet["./subdir/file.go"])
61 assert.True(t, fileSet["./regular.txt"])
62
63 assert.False(t, fileSet["./.hidden"])
64 assert.False(t, fileSet["./.gitignore"])
65 assert.False(t, fileSet["./build.log"])
66}