mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-11 00:40:00 +08:00
chore: refactor jsonx.Marshal (#5045)
Signed-off-by: Kevin Wan <wanjunfeng@gmail.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package jsonx
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -101,3 +102,105 @@ func TestUnmarshalFromReaderError(t *testing.T) {
|
||||
err := UnmarshalFromReader(strings.NewReader(s), &v)
|
||||
assert.NotNil(t, err)
|
||||
}
|
||||
|
||||
func Test_doMarshalJson(t *testing.T) {
|
||||
type args struct {
|
||||
v any
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want []byte
|
||||
wantErr assert.ErrorAssertionFunc
|
||||
}{
|
||||
{
|
||||
name: "nil",
|
||||
args: args{nil},
|
||||
want: []byte("null"),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "string",
|
||||
args: args{"hello"},
|
||||
want: []byte(`"hello"`),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "int",
|
||||
args: args{42},
|
||||
want: []byte("42"),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "bool",
|
||||
args: args{true},
|
||||
want: []byte("true"),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "struct",
|
||||
args: args{
|
||||
struct {
|
||||
Name string `json:"name"`
|
||||
}{Name: "test"},
|
||||
},
|
||||
want: []byte(`{"name":"test"}`),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "slice",
|
||||
args: args{[]int{1, 2, 3}},
|
||||
want: []byte("[1,2,3]"),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "map",
|
||||
args: args{map[string]int{"a": 1, "b": 2}},
|
||||
want: []byte(`{"a":1,"b":2}`),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "unmarshalable type",
|
||||
args: args{complex(1, 2)},
|
||||
want: nil,
|
||||
wantErr: assert.Error,
|
||||
},
|
||||
{
|
||||
name: "channel type",
|
||||
args: args{make(chan int)},
|
||||
want: nil,
|
||||
wantErr: assert.Error,
|
||||
},
|
||||
{
|
||||
name: "url with query params",
|
||||
args: args{"https://example.com/api?name=test&age=25"},
|
||||
want: []byte(`"https://example.com/api?name=test&age=25"`),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "url with encoded query params",
|
||||
args: args{"https://example.com/api?data=hello%20world&special=%26%3D"},
|
||||
want: []byte(`"https://example.com/api?data=hello%20world&special=%26%3D"`),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
{
|
||||
name: "url with multiple query params",
|
||||
args: args{"http://localhost:8080/users?page=1&limit=10&sort=name&order=asc"},
|
||||
want: []byte(`"http://localhost:8080/users?page=1&limit=10&sort=name&order=asc"`),
|
||||
wantErr: assert.NoError,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
tt := tt
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := Marshal(tt.args.v)
|
||||
if !tt.wantErr(t, err, fmt.Sprintf("Marshal(%v)", tt.args.v)) {
|
||||
return
|
||||
}
|
||||
|
||||
assert.Equalf(t, string(tt.want), string(got), "Marshal(%v)", tt.args.v)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user