From fabcaa8df3d6eb852b87821ef090d31d222870b7 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 21 Nov 2012 07:03:38 +0000 Subject: libgo: Update to current version of master library. From-SVN: r193688 --- libgo/go/bytes/buffer_test.go | 4 ++-- libgo/go/bytes/bytes_test.go | 2 +- libgo/go/bytes/reader.go | 21 ++++++++++++++++++++- libgo/go/bytes/reader_test.go | 21 +++++++++++++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) (limited to 'libgo/go/bytes') diff --git a/libgo/go/bytes/buffer_test.go b/libgo/go/bytes/buffer_test.go index dfecea1..92e2914 100644 --- a/libgo/go/bytes/buffer_test.go +++ b/libgo/go/bytes/buffer_test.go @@ -251,10 +251,10 @@ func TestReadFrom(t *testing.T) { func TestWriteTo(t *testing.T) { var buf Buffer for i := 3; i < 30; i += 3 { - s := fillBytes(t, "TestReadFrom (1)", &buf, "", 5, testBytes[0:len(testBytes)/i]) + s := fillBytes(t, "TestWriteTo (1)", &buf, "", 5, testBytes[0:len(testBytes)/i]) var b Buffer buf.WriteTo(&b) - empty(t, "TestReadFrom (2)", &b, s, make([]byte, len(data))) + empty(t, "TestWriteTo (2)", &b, s, make([]byte, len(data))) } } diff --git a/libgo/go/bytes/bytes_test.go b/libgo/go/bytes/bytes_test.go index 124760a..2311329 100644 --- a/libgo/go/bytes/bytes_test.go +++ b/libgo/go/bytes/bytes_test.go @@ -1026,7 +1026,7 @@ func TestEqualFold(t *testing.T) { var makeFieldsInput = func() []byte { x := make([]byte, 1<<20) - // Input is ~10% space, ~10% 2-byte UTF-8, rest ASCII non-space. + // Input is ~10% space, ~10% 2-byte UTF-8, rest ASCII non-space. for i := range x { switch rand.Intn(10) { case 0: diff --git a/libgo/go/bytes/reader.go b/libgo/go/bytes/reader.go index a062e54..b34dfc1 100644 --- a/libgo/go/bytes/reader.go +++ b/libgo/go/bytes/reader.go @@ -10,7 +10,7 @@ import ( "unicode/utf8" ) -// A Reader implements the io.Reader, io.ReaderAt, io.Seeker, +// A Reader implements the io.Reader, io.ReaderAt, io.WriterTo, io.Seeker, // io.ByteScanner, and io.RuneScanner interfaces by reading from // a byte slice. // Unlike a Buffer, a Reader is read-only and supports seeking. @@ -121,5 +121,24 @@ func (r *Reader) Seek(offset int64, whence int) (int64, error) { return abs, nil } +// WriteTo implements the io.WriterTo interface. +func (r *Reader) WriteTo(w io.Writer) (n int64, err error) { + r.prevRune = -1 + if r.i >= len(r.s) { + return 0, io.EOF + } + b := r.s[r.i:] + m, err := w.Write(b) + if m > len(b) { + panic("bytes.Reader.WriteTo: invalid Write count") + } + r.i += m + n = int64(m) + if m != len(b) && err == nil { + err = io.ErrShortWrite + } + return +} + // NewReader returns a new Reader reading from b. func NewReader(b []byte) *Reader { return &Reader{b, 0, -1} } diff --git a/libgo/go/bytes/reader_test.go b/libgo/go/bytes/reader_test.go index 2e4b1f2..6668818 100644 --- a/libgo/go/bytes/reader_test.go +++ b/libgo/go/bytes/reader_test.go @@ -86,3 +86,24 @@ func TestReaderAt(t *testing.T) { } } } + +func TestReaderWriteTo(t *testing.T) { + for i := 3; i < 30; i += 3 { + s := data[:len(data)/i] + r := NewReader(testBytes[:len(testBytes)/i]) + var b Buffer + n, err := r.WriteTo(&b) + if expect := int64(len(s)); n != expect { + t.Errorf("got %v; want %v", n, expect) + } + if err != nil { + t.Errorf("got error = %v; want nil", err) + } + if b.String() != s { + t.Errorf("got string %q; want %q", b.String(), s) + } + if r.Len() != 0 { + t.Errorf("reader contains %v bytes; want 0", r.Len()) + } + } +} -- cgit v1.1