12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package readers
- import (
- "bytes"
- "io"
- "testing"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
- // Check interface
- var _ io.ReadSeeker = &FakeSeeker{}
- func TestFakeSeeker(t *testing.T) {
- // Test that passing in an io.ReadSeeker just passes it through
- bufReader := bytes.NewReader([]byte{1})
- r := NewFakeSeeker(bufReader, 5)
- assert.Equal(t, r, bufReader)
- in := bytes.NewBufferString("hello")
- buf := make([]byte, 16)
- r = NewFakeSeeker(in, 5)
- assert.NotEqual(t, r, in)
- // check the seek offset is as passed in
- checkPos := func(pos int64) {
- abs, err := r.Seek(0, io.SeekCurrent)
- require.NoError(t, err)
- assert.Equal(t, pos, abs)
- }
- // Test some seeking
- checkPos(0)
- abs, err := r.Seek(2, io.SeekStart)
- require.NoError(t, err)
- assert.Equal(t, int64(2), abs)
- checkPos(2)
- abs, err = r.Seek(-1, io.SeekEnd)
- require.NoError(t, err)
- assert.Equal(t, int64(4), abs)
- checkPos(4)
- // Check can't read if not at start
- _, err = r.Read(buf)
- require.ErrorContains(t, err, "not at start")
- // Seek back to start
- abs, err = r.Seek(-4, io.SeekCurrent)
- require.NoError(t, err)
- assert.Equal(t, int64(0), abs)
- checkPos(0)
- _, err = r.Seek(42, 17)
- require.ErrorContains(t, err, "invalid whence")
- _, err = r.Seek(-1, io.SeekStart)
- require.ErrorContains(t, err, "negative position")
- // Test reading now seeked back to the start
- n, err := r.Read(buf)
- require.NoError(t, err)
- assert.Equal(t, 5, n)
- assert.Equal(t, []byte("hello"), buf[:5])
- // Seeking should give an error now
- _, err = r.Seek(-1, io.SeekEnd)
- require.ErrorContains(t, err, "after reading")
- }
- func TestFakeSeekerError(t *testing.T) {
- in := bytes.NewBufferString("hello")
- r := NewFakeSeeker(in, 5)
- assert.NotEqual(t, r, in)
- buf, err := io.ReadAll(r)
- require.NoError(t, err)
- assert.Equal(t, []byte("hello"), buf)
- _, err = r.Read(buf)
- assert.Equal(t, io.EOF, err)
- _, err = r.Seek(0, io.SeekStart)
- assert.Equal(t, io.EOF, err)
- }
|