@@ -3,37 +3,80 @@ package dicomio
33import (
44 "bufio"
55 "encoding/binary"
6+ "errors"
7+ "io"
68 "strings"
79 "testing"
810)
911
1012func TestReader_PeekAtMost (t * testing.T ) {
11- buf := bufio .NewReaderSize (strings .NewReader ("abcdefghijklmnop" ), 16 )
12- r := NewReader (buf , binary .LittleEndian , 0 )
13-
14- if s , err := r .PeekAtMost (3 ); string (s ) != "abc" || err != nil {
15- t .Fatalf ("want %q got %q, err=%v" , "abc" , string (s ), err )
13+ tests := []struct {
14+ name string
15+ data string
16+ peekCount int
17+ wantData string
18+ wantErr error
19+ }{
20+ {
21+ name : "peek_valid_count_within_buffer" ,
22+ data : "abcdefghijklmnop" ,
23+ peekCount : 3 ,
24+ wantData : "abc" ,
25+ wantErr : nil ,
26+ },
27+ {
28+ name : "peek_zero_bytes" ,
29+ data : "abcdefghijklmnop" ,
30+ peekCount : 0 ,
31+ wantData : "" ,
32+ wantErr : nil ,
33+ },
34+ {
35+ name : "peek_negative_count_returns_error" ,
36+ data : "abcdefghijklmnop" ,
37+ peekCount : - 1 ,
38+ wantData : "" ,
39+ wantErr : bufio .ErrNegativeCount ,
40+ },
41+ {
42+ name : "peek_count_larger_than_available_data" ,
43+ data : "abcdefghijklmnop" ,
44+ peekCount : 32 ,
45+ wantData : "abcdefghijklmnop" ,
46+ wantErr : nil ,
47+ },
1648 }
1749
18- if s , err := r .PeekAtMost (0 ); len (s ) != 0 || err != nil {
19- t .Fatalf ("want %d got %d, err=%v" , 0 , len (s ), err )
20- }
50+ for _ , tt := range tests {
51+ t .Run (tt .name , func (t * testing.T ) {
52+ buf := bufio .NewReaderSize (strings .NewReader (tt .data ), 16 )
53+ r := NewReader (buf , binary .LittleEndian , 0 )
2154
22- if _ , err := r .PeekAtMost (- 1 ); err != bufio .ErrNegativeCount {
23- t .Fatalf ("want ErrNegativeCount got %v" , err )
24- }
55+ data , err := r .PeekAtMost (tt .peekCount )
56+
57+ if ! errors .Is (err , tt .wantErr ) {
58+ t .Errorf ("got error %v, want %v" , err , tt .wantErr )
59+ }
2560
26- if s , err := r .PeekAtMost (32 ); string (s ) != "abcdefghijklmnop" || err != nil {
27- t .Fatalf ("want %q, without error, got %q, err=%v" , "abcdefghijklmnop" , string (s ), err )
61+ if string (data ) != tt .wantData {
62+ t .Errorf ("got data %q, want %q" , string (data ), tt .wantData )
63+ }
64+ })
2865 }
66+ }
67+
68+ func TestReader_PeekAtMost_AfterConsumingAllData (t * testing.T ) {
69+ buf := bufio .NewReaderSize (strings .NewReader ("abcdefghijklmnop" ), 16 )
70+ r := NewReader (buf , binary .LittleEndian , 0 )
2971
72+ // Consume all data
3073 n , err := r .in .Read (make ([]byte , 16 ))
3174 if n != 16 || err != nil {
32- t .Fatalf ("want 16 bytes, without error, got %d bytes, err=%v" , n , err )
75+ t .Fatalf ("failed to consume all data: got %d bytes, err=%v" , n , err )
3376 }
34-
35- if s , err := r .PeekAtMost (1 ); len (s ) == 0 && err == nil {
36- t .Fatalf ("want %d got %d, err=%v" , 1 , len (s ), err )
77+ // Now try to peek - should return empty slice with EOF error
78+ data , err := r .PeekAtMost (1 )
79+ if len (data ) != 0 || ! errors .Is (err , io .EOF ) {
80+ t .Errorf ("got len=%d, err=%v, want len=0, err=EOF" , len (data ), err )
3781 }
38-
3982}
0 commit comments