github.com/x04/go/src@v0.0.0-20200202162449-3d481ceb3525/testing/iotest/reader_test.go (about)

     1  // Copyright 2019 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package iotest
     6  
     7  import (
     8  	"github.com/x04/go/src/bytes"
     9  	"github.com/x04/go/src/io"
    10  	"github.com/x04/go/src/testing"
    11  )
    12  
    13  func TestOneByteReader_nonEmptyReader(t *testing.T) {
    14  	msg := "Hello, World!"
    15  	buf := new(bytes.Buffer)
    16  	buf.WriteString(msg)
    17  
    18  	obr := OneByteReader(buf)
    19  	var b []byte
    20  	n, err := obr.Read(b)
    21  	if err != nil || n != 0 {
    22  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
    23  	}
    24  
    25  	b = make([]byte, 3)
    26  	// Read from obr until EOF.
    27  	got := new(bytes.Buffer)
    28  	for i := 0; ; i++ {
    29  		n, err = obr.Read(b)
    30  		if err != nil {
    31  			break
    32  		}
    33  		if g, w := n, 1; g != w {
    34  			t.Errorf("Iteration #%d read %d bytes, want %d", i, g, w)
    35  		}
    36  		got.Write(b[:n])
    37  	}
    38  	if g, w := err, io.EOF; g != w {
    39  		t.Errorf("Unexpected error after reading all bytes\n\tGot:  %v\n\tWant: %v", g, w)
    40  	}
    41  	if g, w := got.String(), "Hello, World!"; g != w {
    42  		t.Errorf("Read mismatch\n\tGot:  %q\n\tWant: %q", g, w)
    43  	}
    44  }
    45  
    46  func TestOneByteReader_emptyReader(t *testing.T) {
    47  	r := new(bytes.Buffer)
    48  
    49  	obr := OneByteReader(r)
    50  	var b []byte
    51  	if n, err := obr.Read(b); err != nil || n != 0 {
    52  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
    53  	}
    54  
    55  	b = make([]byte, 5)
    56  	n, err := obr.Read(b)
    57  	if g, w := err, io.EOF; g != w {
    58  		t.Errorf("Error mismatch\n\tGot:  %v\n\tWant: %v", g, w)
    59  	}
    60  	if g, w := n, 0; g != w {
    61  		t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w)
    62  	}
    63  }
    64  
    65  func TestHalfReader_nonEmptyReader(t *testing.T) {
    66  	msg := "Hello, World!"
    67  	buf := new(bytes.Buffer)
    68  	buf.WriteString(msg)
    69  	// empty read buffer
    70  	hr := HalfReader(buf)
    71  	var b []byte
    72  	n, err := hr.Read(b)
    73  	if err != nil || n != 0 {
    74  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
    75  	}
    76  	// non empty read buffer
    77  	b = make([]byte, 2)
    78  	got := new(bytes.Buffer)
    79  	for i := 0; ; i++ {
    80  		n, err = hr.Read(b)
    81  		if err != nil {
    82  			break
    83  		}
    84  		if g, w := n, 1; g != w {
    85  			t.Errorf("Iteration #%d read %d bytes, want %d", i, g, w)
    86  		}
    87  		got.Write(b[:n])
    88  	}
    89  	if g, w := err, io.EOF; g != w {
    90  		t.Errorf("Unexpected error after reading all bytes\n\tGot:  %v\n\tWant: %v", g, w)
    91  	}
    92  	if g, w := got.String(), "Hello, World!"; g != w {
    93  		t.Errorf("Read mismatch\n\tGot:  %q\n\tWant: %q", g, w)
    94  	}
    95  }
    96  
    97  func TestHalfReader_emptyReader(t *testing.T) {
    98  	r := new(bytes.Buffer)
    99  
   100  	hr := HalfReader(r)
   101  	var b []byte
   102  	if n, err := hr.Read(b); err != nil || n != 0 {
   103  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
   104  	}
   105  
   106  	b = make([]byte, 5)
   107  	n, err := hr.Read(b)
   108  	if g, w := err, io.EOF; g != w {
   109  		t.Errorf("Error mismatch\n\tGot:  %v\n\tWant: %v", g, w)
   110  	}
   111  	if g, w := n, 0; g != w {
   112  		t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w)
   113  	}
   114  }
   115  
   116  func TestTimeOutReader_nonEmptyReader(t *testing.T) {
   117  	msg := "Hello, World!"
   118  	buf := new(bytes.Buffer)
   119  	buf.WriteString(msg)
   120  	// empty read buffer
   121  	tor := TimeoutReader(buf)
   122  	var b []byte
   123  	n, err := tor.Read(b)
   124  	if err != nil || n != 0 {
   125  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
   126  	}
   127  	// Second call should timeout
   128  	n, err = tor.Read(b)
   129  	if g, w := err, ErrTimeout; g != w {
   130  		t.Errorf("Error mismatch\n\tGot:  %v\n\tWant: %v", g, w)
   131  	}
   132  	if g, w := n, 0; g != w {
   133  		t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w)
   134  	}
   135  	// non empty read buffer
   136  	tor2 := TimeoutReader(buf)
   137  	b = make([]byte, 3)
   138  	if n, err := tor2.Read(b); err != nil || n == 0 {
   139  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
   140  	}
   141  	// Second call should timeout
   142  	n, err = tor2.Read(b)
   143  	if g, w := err, ErrTimeout; g != w {
   144  		t.Errorf("Error mismatch\n\tGot:  %v\n\tWant: %v", g, w)
   145  	}
   146  	if g, w := n, 0; g != w {
   147  		t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w)
   148  	}
   149  }
   150  
   151  func TestTimeOutReader_emptyReader(t *testing.T) {
   152  	r := new(bytes.Buffer)
   153  	// empty read buffer
   154  	tor := TimeoutReader(r)
   155  	var b []byte
   156  	if n, err := tor.Read(b); err != nil || n != 0 {
   157  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
   158  	}
   159  	// Second call should timeout
   160  	n, err := tor.Read(b)
   161  	if g, w := err, ErrTimeout; g != w {
   162  		t.Errorf("Error mismatch\n\tGot:  %v\n\tWant: %v", g, w)
   163  	}
   164  	if g, w := n, 0; g != w {
   165  		t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w)
   166  	}
   167  	// non empty read buffer
   168  	tor2 := TimeoutReader(r)
   169  	b = make([]byte, 5)
   170  	if n, err := tor2.Read(b); err != io.EOF || n != 0 {
   171  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
   172  	}
   173  	// Second call should timeout
   174  	n, err = tor2.Read(b)
   175  	if g, w := err, ErrTimeout; g != w {
   176  		t.Errorf("Error mismatch\n\tGot:  %v\n\tWant: %v", g, w)
   177  	}
   178  	if g, w := n, 0; g != w {
   179  		t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w)
   180  	}
   181  }
   182  
   183  func TestDataErrReader_nonEmptyReader(t *testing.T) {
   184  	msg := "Hello, World!"
   185  	buf := new(bytes.Buffer)
   186  	buf.WriteString(msg)
   187  
   188  	der := DataErrReader(buf)
   189  
   190  	b := make([]byte, 3)
   191  	got := new(bytes.Buffer)
   192  	var n int
   193  	var err error
   194  	for {
   195  		n, err = der.Read(b)
   196  		got.Write(b[:n])
   197  		if err != nil {
   198  			break
   199  		}
   200  	}
   201  	if err != io.EOF || n == 0 {
   202  		t.Errorf("Last Read returned n=%d err=%v", n, err)
   203  	}
   204  	if g, w := got.String(), "Hello, World!"; g != w {
   205  		t.Errorf("Read mismatch\n\tGot:  %q\n\tWant: %q", g, w)
   206  	}
   207  }
   208  
   209  func TestDataErrReader_emptyReader(t *testing.T) {
   210  	r := new(bytes.Buffer)
   211  
   212  	der := DataErrReader(r)
   213  	var b []byte
   214  	if n, err := der.Read(b); err != io.EOF || n != 0 {
   215  		t.Errorf("Empty buffer read returned n=%d err=%v", n, err)
   216  	}
   217  
   218  	b = make([]byte, 5)
   219  	n, err := der.Read(b)
   220  	if g, w := err, io.EOF; g != w {
   221  		t.Errorf("Error mismatch\n\tGot:  %v\n\tWant: %v", g, w)
   222  	}
   223  	if g, w := n, 0; g != w {
   224  		t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w)
   225  	}
   226  }