TestReadNthLine tests the readNthLine function with various scenarios.
(t *testing.T)
| 320 | |
| 321 | // TestReadNthLine tests the readNthLine function with various scenarios. |
| 322 | func TestReadNthLine(t *testing.T) { |
| 323 | // Create a temporary test file |
| 324 | testContent := "line 0 \n line 1 \nline 2 \nline 3 \nline 4" |
| 325 | tempFile, err := os.CreateTemp("", "testfile*.txt") |
| 326 | if err != nil { |
| 327 | t.Fatal(err) |
| 328 | } |
| 329 | defer os.Remove(tempFile.Name()) |
| 330 | |
| 331 | // Write test content to the temporary file |
| 332 | if _, err := tempFile.WriteString(testContent); err != nil { |
| 333 | t.Fatal(err) |
| 334 | } |
| 335 | if err := tempFile.Close(); err != nil { |
| 336 | t.Fatal(err) |
| 337 | } |
| 338 | |
| 339 | // Test cases |
| 340 | tests := []struct { |
| 341 | name string |
| 342 | lineNum int |
| 343 | fileName string |
| 344 | want string |
| 345 | wantErr bool |
| 346 | }{ |
| 347 | {name: "Read first line", lineNum: 0, fileName: tempFile.Name(), want: "line 0", wantErr: false}, |
| 348 | {name: "Read middle line", lineNum: 2, fileName: tempFile.Name(), want: "line 2", wantErr: false}, |
| 349 | {name: "Read last line", lineNum: 4, fileName: tempFile.Name(), want: "line 4", wantErr: false}, |
| 350 | {name: "Line number exceeds file length", lineNum: 10, fileName: tempFile.Name(), want: "", wantErr: false}, |
| 351 | {name: "Negative line number", lineNum: -1, fileName: tempFile.Name(), want: "", wantErr: false}, |
| 352 | {name: "Non-existent file", lineNum: 1, fileName: "/non/existent/file.txt", want: "", wantErr: true}, |
| 353 | } |
| 354 | |
| 355 | for _, tt := range tests { |
| 356 | t.Run(tt.name, func(t *testing.T) { |
| 357 | got, err := readNthLine(tt.fileName, tt.lineNum) |
| 358 | assert.Equal(t, tt.wantErr, err != nil) |
| 359 | assert.Equal(t, tt.want, got) |
| 360 | }) |
| 361 | } |
| 362 | } |
| 363 | |
| 364 | func BenchmarkStack(b *testing.B) { |
| 365 | b.ReportAllocs() |
nothing calls this directly
no test coverage detected