view_test.go

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