github.com/alexflint/go-memdump@v1.1.0/delim_test.go (about) 1 package memdump 2 3 import ( 4 "bytes" 5 "io" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func join(bufs ...[]byte) []byte { 12 return bytes.Join(bufs, nil) 13 } 14 15 func TestDelimitedReader_Simple(t *testing.T) { 16 data := join([]byte("abc"), delim, []byte("defggg"), delim) 17 r := NewDelimitedReader(bytes.NewReader(data)) 18 19 seg, err := r.Next() 20 assert.NoError(t, err) 21 assert.Equal(t, "abc", string(seg)) 22 23 seg, err = r.Next() 24 assert.NoError(t, err) 25 assert.Equal(t, "defggg", string(seg)) 26 27 seg, err = r.Next() 28 assert.Equal(t, io.EOF, err) 29 assert.Nil(t, seg) 30 } 31 32 func TestDelimitedReader_Long(t *testing.T) { 33 data := make([]byte, 32768) 34 for i := range data { 35 data[i] = 0 36 } 37 copy(data[len(data)-len(delim):], delim) 38 r := NewDelimitedReader(bytes.NewReader(data)) 39 40 seg, err := r.Next() 41 assert.NoError(t, err) 42 assert.Len(t, seg, len(data)-len(delim)) 43 44 seg, err = r.Next() 45 assert.Equal(t, io.EOF, err) 46 assert.Nil(t, seg) 47 } 48 49 func TestDelimitedReader_SimpleThenEmpty(t *testing.T) { 50 data := join([]byte("abc"), delim, delim) 51 r := NewDelimitedReader(bytes.NewReader(data)) 52 53 seg, err := r.Next() 54 assert.NoError(t, err) 55 assert.Equal(t, "abc", string(seg)) 56 57 seg, err = r.Next() 58 assert.NoError(t, err) 59 assert.NotNil(t, seg) 60 assert.Equal(t, "", string(seg)) 61 62 seg, err = r.Next() 63 assert.Equal(t, io.EOF, err) 64 assert.Nil(t, seg) 65 } 66 67 func TestDelimitedReader_Empty(t *testing.T) { 68 r := NewDelimitedReader(bytes.NewReader(nil)) 69 seg, err := r.Next() 70 assert.Equal(t, io.EOF, err) 71 assert.Nil(t, seg) 72 73 // same thing again 74 seg, err = r.Next() 75 assert.Equal(t, io.EOF, err) 76 assert.Nil(t, seg) 77 } 78 79 func TestDelimitedReader_Unterminated(t *testing.T) { 80 r := NewDelimitedReader(bytes.NewReader([]byte("abc"))) 81 _, err := r.Next() 82 assert.Equal(t, ErrUnexpectedEOF, err) 83 } 84 85 func TestDelimitedReader_ReadAfterEOF(t *testing.T) { 86 data := join([]byte("abc"), delim) 87 r := NewDelimitedReader(bytes.NewReader(data)) 88 89 // first read: should not return error 90 _, err := r.Next() 91 assert.NoError(t, err) 92 93 // second read: should return EOF 94 _, err = r.Next() 95 assert.Equal(t, io.EOF, err) 96 97 // third read: should return EOF again 98 _, err = r.Next() 99 assert.Equal(t, io.EOF, err) 100 }