Skip to content

Commit

Permalink
add decoding string test
Browse files Browse the repository at this point in the history
  • Loading branch information
shamaton committed Aug 2, 2024
1 parent 35822e5 commit 393f875
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 21 deletions.
15 changes: 15 additions & 0 deletions internal/common/testutil/reader.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package testutil

import "errors"

var ErrReaderErr = errors.New("reader error")

type ErrReader struct{}

func NewErrReader() *ErrReader {
return &ErrReader{}
}

func (ErrReader) Read(_ []byte) (int, error) {
return 0, ErrReaderErr
}
10 changes: 10 additions & 0 deletions internal/common/testutil/testutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,13 @@ func Equal[T comparable](t *testing.T, actual, expected T) {
t.Fatalf("not equal. actual: %v, expected: %v", actual, expected)
}
}

func EqualSlice[T comparable](t *testing.T, actual, expected []T) {
t.Helper()
if len(actual) != len(expected) {
t.Fatalf("diffrent length. actual: %v, expected: %v", actual, expected)
}
for i := range actual {
Equal[T](t, actual[i], expected[i])
}
}
54 changes: 33 additions & 21 deletions internal/stream/decoding/string_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,16 @@ package decoding

import (
"bytes"
"errors"
"io"
"math"
"reflect"
"testing"

"github.com/shamaton/msgpack/v2/def"
"github.com/shamaton/msgpack/v2/internal/common"
"github.com/shamaton/msgpack/v2/internal/common/testutil"
tu "github.com/shamaton/msgpack/v2/internal/common/testutil"
)

var errReaderErr = errors.New("reader error")

type errReader struct{}

func (errReader) Read(p []byte) (n int, err error) {
return 0, errReaderErr
}

func Test_stringByteLength(t *testing.T) {
testcases := []struct {
name string
Expand Down Expand Up @@ -69,12 +60,12 @@ func Test_stringByteLength(t *testing.T) {
return
}
d := decoder{
r: &errReader{},
r: tu.NewErrReader(),
buf: common.GetBuffer(),
}
defer common.PutBuffer(d.buf)
_, err := d.stringByteLength(tc.code, reflect.String)
testutil.IsError(t, err, errReaderErr)
tu.IsError(t, err, tu.ErrReaderErr)
})
t.Run("ok", func(t *testing.T) {
data := make([]byte, tc.length)
Expand All @@ -88,13 +79,13 @@ func Test_stringByteLength(t *testing.T) {
}
defer common.PutBuffer(d.buf)
v, err := d.stringByteLength(tc.code, reflect.String)
testutil.NoError(t, err)
testutil.Equal(t, v, tc.expected)
tu.NoError(t, err)
tu.Equal(t, v, tc.expected)

p := make([]byte, 1)
n, err := d.r.Read(p)
testutil.IsError(t, err, io.EOF)
testutil.Equal(t, n, 0)
tu.IsError(t, err, io.EOF)
tu.Equal(t, n, 0)
})
})
}
Expand All @@ -103,20 +94,41 @@ func Test_stringByteLength(t *testing.T) {
func Test_asString(t *testing.T) {
t.Run("read error", func(t *testing.T) {
d := decoder{
r: &errReader{},
r: tu.NewErrReader(),
buf: common.GetBuffer(),
}
v, err := d.asString(reflect.String)
testutil.IsError(t, err, errReaderErr)
testutil.Equal(t, v, emptyString)
tu.IsError(t, err, tu.ErrReaderErr)
tu.Equal(t, v, emptyString)
})
t.Run("ok", func(t *testing.T) {
d := decoder{
r: bytes.NewReader([]byte{def.FixStr + 1, 'a'}),
buf: common.GetBuffer(),
}
v, err := d.asString(reflect.String)
testutil.NoError(t, err)
testutil.Equal(t, v, "a")
tu.NoError(t, err)
tu.Equal(t, v, "a")
})
}

func Test_asStringByte(t *testing.T) {
t.Run("read error", func(t *testing.T) {
d := decoder{
r: tu.NewErrReader(),
buf: common.GetBuffer(),
}
v, err := d.asStringByte(reflect.String)
tu.IsError(t, err, tu.ErrReaderErr)
tu.EqualSlice(t, v, emptyBytes)
})
t.Run("ok", func(t *testing.T) {
d := decoder{
r: bytes.NewReader([]byte{def.FixStr + 1, 'a'}),
buf: common.GetBuffer(),
}
v, err := d.asStringByte(reflect.String)
tu.NoError(t, err)
tu.EqualSlice(t, v, []byte("a"))
})
}

0 comments on commit 393f875

Please sign in to comment.