github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/lib/readers/readfill_test.go (about)

     1  package readers
     2  
     3  import (
     4  	"io"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  type byteReader struct {
    11  	c byte
    12  }
    13  
    14  func (br *byteReader) Read(p []byte) (n int, err error) {
    15  	if br.c == 0 {
    16  		err = io.EOF
    17  	} else if len(p) >= 1 {
    18  		p[0] = br.c
    19  		n = 1
    20  		br.c--
    21  	}
    22  	return
    23  }
    24  
    25  func TestReadFill(t *testing.T) {
    26  	buf := []byte{9, 9, 9, 9, 9}
    27  
    28  	n, err := ReadFill(&byteReader{0}, buf)
    29  	assert.Equal(t, io.EOF, err)
    30  	assert.Equal(t, 0, n)
    31  	assert.Equal(t, []byte{9, 9, 9, 9, 9}, buf)
    32  
    33  	n, err = ReadFill(&byteReader{3}, buf)
    34  	assert.Equal(t, io.EOF, err)
    35  	assert.Equal(t, 3, n)
    36  	assert.Equal(t, []byte{3, 2, 1, 9, 9}, buf)
    37  
    38  	n, err = ReadFill(&byteReader{8}, buf)
    39  	assert.Equal(t, nil, err)
    40  	assert.Equal(t, 5, n)
    41  	assert.Equal(t, []byte{8, 7, 6, 5, 4}, buf)
    42  }