@@ -0,0 +1,87 @@
10+ "github.com/stretchr/testify/require"
13+func TestReadTextFileBoundaryCases(t *testing.T) {
16+ tmpDir := t.TempDir()
17+ filePath := filepath.Join(tmpDir, "sample.txt")
19+ var allLines []string
21+ allLines = append(allLines, fmt.Sprintf("line %d", i+1))
23+ require.NoError(t, os.WriteFile(filePath, []byte(strings.Join(allLines, "\n")), 0o644))
33+ name: "exactly limit lines remaining",
36+ wantContent: "line 1\nline 2\nline 3\nline 4\nline 5",
40+ name: "limit plus one line remaining",
43+ wantContent: "line 1\nline 2\nline 3\nline 4",
47+ name: "offset at last line",
50+ wantContent: "line 5",
54+ name: "offset beyond eof",
62+ for _, tt := range tests {
63+ t.Run(tt.name, func(t *testing.T) {
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)
74+func TestReadTextFileTruncatesLongLines(t *testing.T) {
77+ tmpDir := t.TempDir()
78+ filePath := filepath.Join(tmpDir, "longline.txt")
80+ longLine := strings.Repeat("a", MaxLineLength+10)
81+ require.NoError(t, os.WriteFile(filePath, []byte(longLine), 0o644))
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)