mirror of
https://github.com/zhufuyi/sponge.git
synced 2025-10-23 09:01:02 +08:00
80 lines
1.4 KiB
Go
80 lines
1.4 KiB
Go
package json
|
|
|
|
import (
|
|
"google.golang.org/protobuf/compiler/protogen"
|
|
"google.golang.org/protobuf/reflect/protoreflect"
|
|
"google.golang.org/protobuf/types/pluginpb"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type obj struct {
|
|
ID uint64 `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func TestJSON(t *testing.T) {
|
|
c := codec{}
|
|
|
|
name := c.Name()
|
|
assert.Equal(t, Name, name)
|
|
|
|
data, err := c.Marshal(&obj{ID: 1, Name: "foo"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.NotNil(t, data)
|
|
|
|
o := new(obj)
|
|
err = c.Unmarshal(data, o)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "foo", o.Name)
|
|
}
|
|
|
|
type obj2 struct {
|
|
ID uint64 `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func (o obj2) MarshalJSON() ([]byte, error) {
|
|
return []byte("test data"), nil
|
|
}
|
|
|
|
func TestJSON2(t *testing.T) {
|
|
c := codec{}
|
|
b, err := c.Marshal(&obj2{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.NotNil(t, b)
|
|
|
|
err = c.Unmarshal(b, &obj2{})
|
|
assert.NotNil(t, err)
|
|
}
|
|
|
|
type obj3 struct {
|
|
ID uint64 `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func (o obj3) ProtoReflect() protoreflect.Message {
|
|
req := &pluginpb.CodeGeneratorRequest{}
|
|
opts := protogen.Options{}
|
|
gen, _ := opts.New(req)
|
|
|
|
return gen.Response().ProtoReflect()
|
|
}
|
|
|
|
func TestJSON3(t *testing.T) {
|
|
c := codec{}
|
|
b, err := c.Marshal(&obj3{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.NotNil(t, b)
|
|
|
|
err = c.Unmarshal(b, &obj3{})
|
|
assert.NoError(t, err)
|
|
}
|