Skip to content

Commit

Permalink
bson: more tests added
Browse files Browse the repository at this point in the history
  • Loading branch information
sougou committed Mar 3, 2014
1 parent 5d4b59b commit 51aa0c1
Showing 1 changed file with 102 additions and 39 deletions.
141 changes: 102 additions & 39 deletions go/bson/bson_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,22 @@ import (
"github.com/youtube/vitess/go/bytes2"
)

type testStruct struct {
Val string
}

var marshaltest = []struct {
desc string
in interface{}
out string
}{{
"struct encode",
struct{ Val string }{"test"},
testStruct{"test"},
"\x13\x00\x00\x00\x05Val\x00\x04\x00\x00\x00\x00test\x00",
}, {
"embedded struct encode",
struct{ Inner testStruct }{testStruct{"test"}},
"\x1f\x00\x00\x00\x03Inner\x00\x13\x00\x00\x00\x05Val\x00\x04\x00\x00\x00\x00test\x00\x00",
}, {
"map encode",
map[string]string{"Val": "test"},
Expand All @@ -29,6 +37,10 @@ var marshaltest = []struct {
"slice encode",
[]string{"test1", "test2"},
"\x1f\x00\x00\x00\x050\x00\x05\x00\x00\x00\x00test1\x051\x00\x05\x00\x00\x00\x00test2\x00",
}, {
"embedded slice encode",
struct{ Inner []string }{[]string{"test1", "test2"}},
"+\x00\x00\x00\x04Inner\x00\x1f\x00\x00\x00\x050\x00\x05\x00\x00\x00\x00test1\x051\x00\x05\x00\x00\x00\x00test2\x00\x00",
}, {
"array encode",
[2]string{"test1", "test2"},
Expand Down Expand Up @@ -88,16 +100,17 @@ func TestMarshal(t *testing.T) {
}
}

func newstring(v string) *string { return &v }
func newint64(v int64) *int64 { return &v }
func newint32(v int32) *int32 { return &v }
func newint(v int) *int { return &v }
func newuint64(v uint64) *uint64 { return &v }
func newuint32(v uint32) *uint32 { return &v }
func newuint(v uint) *uint { return &v }
func newfloat64(v float64) *float64 { return &v }
func newbool(v bool) *bool { return &v }
func newtime(v time.Time) *time.Time { return &v }
func newstring(v string) *string { return &v }
func newint64(v int64) *int64 { return &v }
func newint32(v int32) *int32 { return &v }
func newint(v int) *int { return &v }
func newuint64(v uint64) *uint64 { return &v }
func newuint32(v uint32) *uint32 { return &v }
func newuint(v uint) *uint { return &v }
func newfloat64(v float64) *float64 { return &v }
func newbool(v bool) *bool { return &v }
func newtime(v time.Time) *time.Time { return &v }
func newinterface(v interface{}) *interface{} { return &v }

var unmarshaltest = []struct {
desc string
Expand All @@ -124,39 +137,34 @@ var unmarshaltest = []struct {
"\x13\x00\x00\x00\x05Val\x00\x04\x00\x00\x00\x00test\x00",
&[2]string{},
&[2]string{"test", ""},
}, {
"string decode from Binary",
"\x15\x00\x00\x00\x05_Val_\x00\x04\x00\x00\x00\x00test\x00",
newstring(""),
newstring("test"),
}, {
"string decode from String",
"\x15\x00\x00\x00\x02_Val_\x00\x05\x00\x00\x00test\x00\x00",
newstring(""),
newstring("test"),
}, {
"bytes decode from Binary",
"string decode from Binary",
"\x15\x00\x00\x00\x05_Val_\x00\x04\x00\x00\x00\x00test\x00",
&[]byte{},
&[]byte{'t', 'e', 's', 't'},
newstring(""),
newstring("test"),
}, {
"bytes decode from String",
"\x15\x00\x00\x00\x02_Val_\x00\x05\x00\x00\x00test\x00\x00",
&[]byte{},
&[]byte{'t', 'e', 's', 't'},
}, {
"int64 decode from Long",
"\x14\x00\x00\x00\x12_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newint64(0),
newint64(1),
"bytes decode from Binary",
"\x15\x00\x00\x00\x05_Val_\x00\x04\x00\x00\x00\x00test\x00",
&[]byte{},
&[]byte{'t', 'e', 's', 't'},
}, {
"int64 decode from Int",
"\x10\x00\x00\x00\x10_Val_\x00\x01\x00\x00\x00\x00",
newint64(0),
newint64(1),
}, {
"int64 decode from Ulong",
"\x14\x00\x00\x00?_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
"int64 decode from Long",
"\x14\x00\x00\x00\x12_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newint64(0),
newint64(1),
}, {
Expand All @@ -169,6 +177,11 @@ var unmarshaltest = []struct {
"\x14\x00\x00\x00\x12_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newint(0),
newint(1),
}, {
"int64 decode from Ulong",
"\x14\x00\x00\x00?_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newint64(0),
newint64(1),
}, {
"int decode from Int",
"\x10\x00\x00\x00\x10_Val_\x00\x01\x00\x00\x00\x00",
Expand All @@ -180,8 +193,8 @@ var unmarshaltest = []struct {
newint(0),
newint(1),
}, {
"uint64 decode from Ulong",
"\x14\x00\x00\x00?_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
"uint64 decode from Int",
"\x10\x00\x00\x00\x10_Val_\x00\x01\x00\x00\x00\x00",
newuint64(0),
newuint64(1),
}, {
Expand All @@ -190,23 +203,23 @@ var unmarshaltest = []struct {
newuint64(0),
newuint64(1),
}, {
"uint64 decode from Int",
"\x10\x00\x00\x00\x10_Val_\x00\x01\x00\x00\x00\x00",
"uint64 decode from Ulong",
"\x14\x00\x00\x00?_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newuint64(0),
newuint64(1),
}, {
"uint32 decode from Ulong",
"\x14\x00\x00\x00?_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newuint32(0),
newuint32(1),
}, {
"uint32 decode from Int",
"\x10\x00\x00\x00\x10_Val_\x00\x01\x00\x00\x00\x00",
newuint32(0),
newuint32(1),
}, {
"uint decode from Ulong",
"uint32 decode from Ulong",
"\x14\x00\x00\x00?_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newuint32(0),
newuint32(1),
}, {
"uint decode from Int",
"\x10\x00\x00\x00\x10_Val_\x00\x01\x00\x00\x00\x00",
newuint(0),
newuint(1),
}, {
Expand All @@ -215,12 +228,12 @@ var unmarshaltest = []struct {
newuint(0),
newuint(1),
}, {
"uint decode from Int",
"\x10\x00\x00\x00\x10_Val_\x00\x01\x00\x00\x00\x00",
"uint decode from Ulong",
"\x14\x00\x00\x00?_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newuint(0),
newuint(1),
}, {
"float64 decode",
"float64 decode from Number",
"\x14\x00\x00\x00\x01_Val_\x00\x00\x00\x00\x00\x00\x00\xf0?\x00",
newfloat64(0),
newfloat64(1.0),
Expand All @@ -245,10 +258,60 @@ var unmarshaltest = []struct {
newbool(false),
newbool(true),
}, {
"time decode",
"time decode from Datetime",
"\x14\x00\x00\x00\t_Val_\x00\x88\xf2\\\x8d\b\x01\x00\x00\x00",
newtime(time.Now()),
newtime(time.Unix(1136243045, 0).UTC()),
}, {
"interface decode from Number",
"\x14\x00\x00\x00\x01_Val_\x00\x00\x00\x00\x00\x00\x00\xf0?\x00",
newinterface(nil),
newinterface(float64(1.0)),
}, {
"interface decode from String",
"\x15\x00\x00\x00\x02_Val_\x00\x05\x00\x00\x00test\x00\x00",
newinterface(nil),
newinterface("test"),
}, {
"interface decode from Binary",
"\x15\x00\x00\x00\x05_Val_\x00\x04\x00\x00\x00\x00test\x00",
newinterface(nil),
newinterface([]byte("test")),
}, {
"interface decode from Boolean",
"\r\x00\x00\x00\b_Val_\x00\x01\x00",
newinterface(nil),
newinterface(true),
}, {
"interface decode from DateTime",
"\x14\x00\x00\x00\t_Val_\x00\x88\xf2\\\x8d\b\x01\x00\x00\x00",
newinterface(nil),
newinterface(time.Unix(1136243045, 0).UTC()),
}, {
"interface decode from Int",
"\x10\x00\x00\x00\x10_Val_\x00\x01\x00\x00\x00\x00",
newinterface(nil),
newinterface(int32(1)),
}, {
"interface decode from Long",
"\x14\x00\x00\x00\x12_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newinterface(nil),
newinterface(int64(1)),
}, {
"interface decode from Ulong",
"\x14\x00\x00\x00?_Val_\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00",
newinterface(nil),
newinterface(uint64(1)),
}, {
"interface decode from Object",
"\x1f\x00\x00\x00\x03Inner\x00\x13\x00\x00\x00\x05Val\x00\x04\x00\x00\x00\x00test\x00\x00",
&struct{ Inner interface{} }{},
&struct{ Inner interface{} }{Inner: map[string]interface{}{"Val": []byte("test")}},
}, {
"interface decode from Array",
"+\x00\x00\x00\x04Inner\x00\x1f\x00\x00\x00\x050\x00\x05\x00\x00\x00\x00test1\x051\x00\x05\x00\x00\x00\x00test2\x00\x00",
&struct{ Inner interface{} }{},
&struct{ Inner interface{} }{Inner: []interface{}{[]byte("test1"), []byte("test2")}},
}}

func TestUnmarshal(t *testing.T) {
Expand Down

0 comments on commit 51aa0c1

Please sign in to comment.