-
Notifications
You must be signed in to change notification settings - Fork 1
/
decoder_test.go
70 lines (61 loc) · 1.58 KB
/
decoder_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package grison
import (
"reflect"
"testing"
"github.com/go-test/deep"
)
func UnmarshalTestRaw(t *testing.T, b string, v interface{}) {
type emptyMaster struct{}
dec, err := newDecoder(&emptyMaster{})
if err != nil {
t.Errorf("can't create decoder: %v", err)
return
}
v2 := reflect.New(reflect.TypeOf(v))
err = dec.unmarshalAny([]byte(b), v2)
if err != nil {
t.Errorf("decoding error encountered: %v", err)
return
}
if diff := deep.Equal(v, v2.Elem().Interface()); diff != nil {
t.Errorf("unexpected unmarshal result.\n%v", diff)
}
}
func UnmarshalTest(t *testing.T, b string, v interface{}) {
v2 := reflect.New(reflect.TypeOf(v))
err := Unmarshal([]byte(b), v2)
if err != nil {
t.Errorf("decoding error encountered: %v", err)
return
}
if diff := deep.Equal(v, v2.Elem().Interface()); diff != nil {
t.Errorf("unexpected unmarshal result.\n%v", diff)
}
}
func TestDecodeBasicTypes(t *testing.T) {
UnmarshalTestRaw(t, `543`, 543)
UnmarshalTestRaw(t, `-32`, -32)
UnmarshalTestRaw(t, `3.14`, 3.14)
UnmarshalTestRaw(t, `"foo"`, "foo")
}
func TestDecodeSlice(t *testing.T) {
UnmarshalTestRaw(t, `[1,2,3]`, []int{1, 2, 3})
UnmarshalTestRaw(t, `["foo","bar"]`, []string{"foo", "bar"})
}
func TestDecodeMap(t *testing.T) {
UnmarshalTestRaw(t, `{"a":1,"b":2}`, map[string]int{"a": 1, "b": 2})
}
func TestDecodeStruct(t *testing.T) {
type Foo struct {
A int
B string
}
UnmarshalTestRaw(t, `{"A":1,"B":"bar"}`, Foo{A: 1, B: "bar"})
}
func TestDecodePtr(t *testing.T) {
var i int = 10
pi := &i
UnmarshalTestRaw(t, `10`, pi)
ppi := &pi
UnmarshalTestRaw(t, `10`, ppi)
}