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 }