github.com/go-playground/pkg/v5@v5.29.1/io/limit_reader_test.go (about) 1 package ioext 2 3 import ( 4 "strings" 5 "testing" 6 ) 7 8 func TestLimitedReader_Read(t *testing.T) { 9 eofLimited := LimitReader(strings.NewReader("all"), 5) 10 11 type args struct { 12 p []byte 13 } 14 tests := []struct { 15 name string 16 l *LimitedReader 17 args args 18 wantN int 19 wantErr bool 20 }{ 21 { 22 name: "not-limited", 23 l: LimitReader(strings.NewReader("all"), 3), 24 args: args{p: make([]byte, 4)}, 25 wantN: 3, 26 wantErr: false, 27 }, 28 { 29 name: "not-limited-exact", 30 l: LimitReader(strings.NewReader("all"), 3), 31 args: args{p: make([]byte, 3)}, 32 wantN: 3, 33 wantErr: false, 34 }, 35 { 36 name: "not-limited-EOF-OK", 37 l: eofLimited, 38 args: args{p: make([]byte, 4)}, 39 wantN: 3, 40 wantErr: false, 41 }, 42 { 43 name: "not-limited-EOF", 44 l: eofLimited, 45 args: args{p: make([]byte, 4)}, 46 wantN: 0, 47 wantErr: true, 48 }, 49 { 50 name: "limited", 51 l: LimitReader(strings.NewReader("limited"), 1), 52 args: args{p: make([]byte, 3)}, 53 wantN: 2, // need to read one past to know we're past 54 wantErr: true, 55 }, 56 { 57 name: "limited-buff-under-N", 58 l: LimitReader(strings.NewReader("limited"), 0), 59 args: args{p: make([]byte, 1)}, 60 wantN: 1, 61 wantErr: true, 62 }, 63 } 64 for _, tt := range tests { 65 t.Run(tt.name, func(t *testing.T) { 66 gotN, err := tt.l.Read(tt.args.p) 67 if (err != nil) != tt.wantErr { 68 t.Errorf("LimitedReader.Read() error = %v, wantErr %v", err, tt.wantErr) 69 return 70 } 71 if gotN != tt.wantN { 72 t.Errorf("LimitedReader.Read() = %v, want %v", gotN, tt.wantN) 73 } 74 }) 75 } 76 }