github.com/hairyhenderson/gomplate/v3@v3.11.7/internal/iohelpers/readers_test.go (about)

     1  package iohelpers
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestLazyReadCloser(t *testing.T) {
    13  	r := newBufferCloser(bytes.NewBufferString("hello world"))
    14  	opened := false
    15  	l, ok := LazyReadCloser(func() (io.ReadCloser, error) {
    16  		opened = true
    17  		return r, nil
    18  	}).(*lazyReadCloser)
    19  	assert.True(t, ok)
    20  
    21  	assert.False(t, opened)
    22  	assert.Nil(t, l.r)
    23  	assert.False(t, r.closed)
    24  
    25  	p := make([]byte, 5)
    26  	n, err := l.Read(p)
    27  	assert.NoError(t, err)
    28  	assert.True(t, opened)
    29  	assert.Equal(t, r, l.r)
    30  	assert.Equal(t, 5, n)
    31  
    32  	err = l.Close()
    33  	assert.NoError(t, err)
    34  	assert.True(t, r.closed)
    35  
    36  	// test error propagation
    37  	l = LazyReadCloser(func() (io.ReadCloser, error) {
    38  		return nil, os.ErrNotExist
    39  	}).(*lazyReadCloser)
    40  
    41  	assert.Nil(t, l.r)
    42  
    43  	p = make([]byte, 5)
    44  	_, err = l.Read(p)
    45  	assert.Error(t, err)
    46  
    47  	err = l.Close()
    48  	assert.Error(t, err)
    49  }