...
1
16
17 package issue_test
18
19 import (
20 . `github.com/bytedance/sonic`
21 `testing`
22
23 `github.com/bytedance/sonic/decoder`
24 `github.com/stretchr/testify/require`
25 )
26
27 type normalIfaceIssue39 interface {
28 Foo()
29 }
30
31 type normalWrapIssue39 struct {
32 F normalIfaceIssue39
33 }
34
35 type normalImplIssue39 struct {
36 X int
37 }
38
39 func (_ *normalImplIssue39) Foo() {}
40
41 type jsonIfaceIssue39 interface {
42 UnmarshalJSON(b []byte) error
43 }
44
45 type jsonWrapIssue39 struct {
46 F jsonIfaceIssue39
47 }
48
49 type jsonImplIssue39 struct {
50 a string
51 }
52
53 func (self *jsonImplIssue39) UnmarshalJSON(b []byte) error{
54 self.a = string(b)
55 return nil
56 }
57
58 type textIfaceIssue39 interface {
59 UnmarshalText(b []byte) error
60 }
61
62 type textWrapIssue39 struct {
63 F textIfaceIssue39
64 }
65
66 type textImplIssue39 struct {
67 a string
68 }
69
70 func (self *textImplIssue39) UnmarshalText(b []byte) error{
71 self.a = string(b)
72 return nil
73 }
74
75 func TestIssue39_Iface(t *testing.T) {
76 p := new(normalImplIssue39)
77 obj := normalWrapIssue39{F: p}
78 err := Unmarshal([]byte(`{"F":{"X":123}}`), &obj)
79 if err != nil {
80 if v, ok := err.(decoder.SyntaxError); ok {
81 println(v.Description())
82 }
83 require.NoError(t, err)
84 }
85 require.Equal(t, 123, p.X)
86 }
87
88 func TestIssue39_UnmarshalJSON(t *testing.T) {
89 p := &jsonImplIssue39{}
90 obj := jsonWrapIssue39{F: p}
91 err := Unmarshal([]byte(`{"F":"xx"}`), &obj)
92 if err != nil {
93 if v, ok := err.(decoder.SyntaxError); ok {
94 println(v.Description())
95 }
96 require.NoError(t, err)
97 }
98 require.Equal(t, `"xx"`, p.a)
99 }
100
101 func TestIssue39_UnmarshalText(t *testing.T) {
102 p := &textImplIssue39{}
103 obj := textWrapIssue39{F: p}
104 err := Unmarshal([]byte(`{"F":"xx"}`), &obj)
105 if err != nil {
106 if v, ok := err.(decoder.SyntaxError); ok {
107 println(v.Description())
108 }
109 require.NoError(t, err)
110 }
111 require.Equal(t, `xx`, p.a)
112 }
113
View as plain text