ls_test.go 1.4 KB

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