github.com/coreos/mantle@v0.13.0/lang/bufpipe/fixed_buffer_test.go (about)

     1  // Copyright 2014 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  // Licensed under the same terms as Go itself:
     5  // https://github.com/golang/go/blob/master/LICENSE
     6  
     7  package bufpipe
     8  
     9  import (
    10  	"reflect"
    11  	"testing"
    12  )
    13  
    14  var bufferReadTests = []struct {
    15  	buf      fixedBuffer
    16  	read, wn int
    17  	werr     error
    18  	wp       []byte
    19  	wbuf     fixedBuffer
    20  }{
    21  	{
    22  		fixedBuffer{[]byte{'a', 0}, 0, 1},
    23  		5, 1, nil, []byte{'a'},
    24  		fixedBuffer{[]byte{'a', 0}, 0, 0},
    25  	},
    26  	{
    27  		fixedBuffer{[]byte{0, 'a'}, 1, 2},
    28  		5, 1, nil, []byte{'a'},
    29  		fixedBuffer{[]byte{0, 'a'}, 0, 0},
    30  	},
    31  	{
    32  		fixedBuffer{[]byte{'a', 'b'}, 0, 2},
    33  		1, 1, nil, []byte{'a'},
    34  		fixedBuffer{[]byte{'a', 'b'}, 1, 2},
    35  	},
    36  	{
    37  		fixedBuffer{[]byte{}, 0, 0},
    38  		5, 0, errReadEmpty, []byte{},
    39  		fixedBuffer{[]byte{}, 0, 0},
    40  	},
    41  }
    42  
    43  func TestBufferRead(t *testing.T) {
    44  	for i, tt := range bufferReadTests {
    45  		read := make([]byte, tt.read)
    46  		n, err := tt.buf.Read(read)
    47  		if n != tt.wn {
    48  			t.Errorf("#%d: wn = %d want %d", i, n, tt.wn)
    49  			continue
    50  		}
    51  		if err != tt.werr {
    52  			t.Errorf("#%d: werr = %v want %v", i, err, tt.werr)
    53  			continue
    54  		}
    55  		read = read[:n]
    56  		if !reflect.DeepEqual(read, tt.wp) {
    57  			t.Errorf("#%d: read = %+v want %+v", i, read, tt.wp)
    58  		}
    59  		if !reflect.DeepEqual(tt.buf, tt.wbuf) {
    60  			t.Errorf("#%d: buf = %+v want %+v", i, tt.buf, tt.wbuf)
    61  		}
    62  	}
    63  }
    64  
    65  var bufferWriteTests = []struct {
    66  	buf       fixedBuffer
    67  	write, wn int
    68  	werr      error
    69  	wbuf      fixedBuffer
    70  }{
    71  	{
    72  		buf: fixedBuffer{
    73  			buf: []byte{},
    74  		},
    75  		wbuf: fixedBuffer{
    76  			buf: []byte{},
    77  		},
    78  	},
    79  	{
    80  		buf: fixedBuffer{
    81  			buf: []byte{1, 'a'},
    82  		},
    83  		write: 1,
    84  		wn:    1,
    85  		wbuf: fixedBuffer{
    86  			buf: []byte{0, 'a'},
    87  			w:   1,
    88  		},
    89  	},
    90  	{
    91  		buf: fixedBuffer{
    92  			buf: []byte{'a', 1},
    93  			r:   1,
    94  			w:   1,
    95  		},
    96  		write: 2,
    97  		wn:    2,
    98  		wbuf: fixedBuffer{
    99  			buf: []byte{0, 0},
   100  			w:   2,
   101  		},
   102  	},
   103  	{
   104  		buf: fixedBuffer{
   105  			buf: []byte{},
   106  		},
   107  		write: 5,
   108  		werr:  errWriteFull,
   109  		wbuf: fixedBuffer{
   110  			buf: []byte{},
   111  		},
   112  	},
   113  }
   114  
   115  func TestBufferWrite(t *testing.T) {
   116  	for i, tt := range bufferWriteTests {
   117  		n, err := tt.buf.Write(make([]byte, tt.write))
   118  		if n != tt.wn {
   119  			t.Errorf("#%d: wrote %d bytes; want %d", i, n, tt.wn)
   120  			continue
   121  		}
   122  		if err != tt.werr {
   123  			t.Errorf("#%d: error = %v; want %v", i, err, tt.werr)
   124  			continue
   125  		}
   126  		if !reflect.DeepEqual(tt.buf, tt.wbuf) {
   127  			t.Errorf("#%d: buf = %+v; want %+v", i, tt.buf, tt.wbuf)
   128  		}
   129  	}
   130  }