github.com/hairyhenderson/gomplate/v4@v4.0.0-pre-2.0.20240520121557-362f058f0c93/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  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestLazyReadCloser(t *testing.T) {
    14  	r := newBufferCloser(bytes.NewBufferString("hello world"))
    15  	opened := false
    16  	l, ok := LazyReadCloser(func() (io.ReadCloser, error) {
    17  		opened = true
    18  		return r, nil
    19  	}).(*lazyReadCloser)
    20  	assert.True(t, ok)
    21  
    22  	assert.False(t, opened)
    23  	assert.Nil(t, l.r)
    24  	assert.False(t, r.closed)
    25  
    26  	p := make([]byte, 5)
    27  	n, err := l.Read(p)
    28  	require.NoError(t, err)
    29  	assert.True(t, opened)
    30  	assert.Equal(t, r, l.r)
    31  	assert.Equal(t, 5, n)
    32  
    33  	err = l.Close()
    34  	require.NoError(t, err)
    35  	assert.True(t, r.closed)
    36  
    37  	// test error propagation
    38  	l = LazyReadCloser(func() (io.ReadCloser, error) {
    39  		return nil, os.ErrNotExist
    40  	}).(*lazyReadCloser)
    41  
    42  	assert.Nil(t, l.r)
    43  
    44  	p = make([]byte, 5)
    45  	_, err = l.Read(p)
    46  	require.Error(t, err)
    47  
    48  	err = l.Close()
    49  	require.Error(t, err)
    50  }