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}