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 }