view_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package tools
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. "testing"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func TestReadTextFileBoundaryCases(t *testing.T) {
  11. t.Parallel()
  12. tmpDir := t.TempDir()
  13. filePath := filepath.Join(tmpDir, "sample.txt")
  14. var allLines []string
  15. for i := range 5 {
  16. allLines = append(allLines, fmt.Sprintf("line %d", i+1))
  17. }
  18. require.NoError(t, os.WriteFile(filePath, []byte(strings.Join(allLines, "\n")), 0o644))
  19. tests := []struct {
  20. name string
  21. offset int
  22. limit int
  23. wantContent string
  24. wantHasMore bool
  25. }{
  26. {
  27. name: "exactly limit lines remaining",
  28. offset: 0,
  29. limit: 5,
  30. wantContent: "line 1\nline 2\nline 3\nline 4\nline 5",
  31. wantHasMore: false,
  32. },
  33. {
  34. name: "limit plus one line remaining",
  35. offset: 0,
  36. limit: 4,
  37. wantContent: "line 1\nline 2\nline 3\nline 4",
  38. wantHasMore: true,
  39. },
  40. {
  41. name: "offset at last line",
  42. offset: 4,
  43. limit: 3,
  44. wantContent: "line 5",
  45. wantHasMore: false,
  46. },
  47. {
  48. name: "offset beyond eof",
  49. offset: 10,
  50. limit: 3,
  51. wantContent: "",
  52. wantHasMore: false,
  53. },
  54. }
  55. for _, tt := range tests {
  56. t.Run(tt.name, func(t *testing.T) {
  57. t.Parallel()
  58. gotContent, gotHasMore, err := readTextFile(filePath, tt.offset, tt.limit)
  59. require.NoError(t, err)
  60. require.Equal(t, tt.wantContent, gotContent)
  61. require.Equal(t, tt.wantHasMore, gotHasMore)
  62. })
  63. }
  64. }
  65. func TestReadTextFileTruncatesLongLines(t *testing.T) {
  66. t.Parallel()
  67. tmpDir := t.TempDir()
  68. filePath := filepath.Join(tmpDir, "longline.txt")
  69. longLine := strings.Repeat("a", MaxLineLength+10)
  70. require.NoError(t, os.WriteFile(filePath, []byte(longLine), 0o644))
  71. content, hasMore, err := readTextFile(filePath, 0, 1)
  72. require.NoError(t, err)
  73. require.False(t, hasMore)
  74. require.Equal(t, strings.Repeat("a", MaxLineLength)+"...", content)
  75. }