package buffer import ( "errors" "io" "testing" ) func TestReader_ReadAt(t *testing.T) { type args struct { p []byte off int64 } bs := &Reader{} bs.Append([]byte("github.com")) bs.Append([]byte("/OpenList")) bs.Append([]byte("Team/")) bs.Append([]byte("OpenList")) tests := []struct { name string b *Reader args args want func(a args, n int, err error) error }{ { name: "readAt len 10 offset 0", b: bs, args: args{ p: make([]byte, 10), off: 0, }, want: func(a args, n int, err error) error { if n != len(a.p) { return errors.New("read length not match") } if string(a.p) != "github.com" { return errors.New("read content not match") } if err != nil { return err } return nil }, }, { name: "readAt len 12 offset 11", b: bs, args: args{ p: make([]byte, 12), off: 11, }, want: func(a args, n int, err error) error { if n != len(a.p) { return errors.New("read length not match") } if string(a.p) != "OpenListTeam" { return errors.New("read content not match") } if err != nil { return err } return nil }, }, { name: "readAt len 50 offset 24", b: bs, args: args{ p: make([]byte, 50), off: 24, }, want: func(a args, n int, err error) error { if n != int(bs.Size()-a.off) { return errors.New("read length not match") } if string(a.p[:n]) != "OpenList" { return errors.New("read content not match") } if err != io.EOF { return errors.New("expect eof") } return nil }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := tt.b.ReadAt(tt.args.p, tt.args.off) if err := tt.want(tt.args, got, err); err != nil { t.Errorf("Bytes.ReadAt() error = %v", err) } }) } }