Add test cases for non-escaped mode of member names

This commit is contained in:
Kirill Korotaev
2020-04-11 19:12:49 +03:00
parent 9a01c9afdb
commit e0f67b396d
5 changed files with 78 additions and 1 deletions
+5 -1
View File
@@ -20,7 +20,9 @@ generate: build
./tests/reference_to_pointer.go \
./tests/html.go \
./tests/unknown_fields.go \
./tests/type_declaration.go
./tests/type_declaration.go \
./tests/members_escaped.go \
./tests/members_unescaped.go \
bin/easyjson -all ./tests/data.go
bin/easyjson -all ./tests/nothing.go
@@ -38,6 +40,8 @@ generate: build
bin/easyjson -disallow_unknown_fields ./tests/disallow_unknown.go
bin/easyjson ./tests/unknown_fields.go
bin/easyjson ./tests/type_declaration.go
bin/easyjson ./tests/members_escaped.go
bin/easyjson -disable_members_unescape ./tests/members_unescaped.go
test: generate
go test \
+10
View File
@@ -57,6 +57,8 @@ Usage of easyjson:
only generate stubs for marshaler/unmarshaler funcs
-disallow_unknown_fields
return error if some unknown field in json appeared
-disable_members_unescape
disable unescaping of \uXXXX string sequences in member names
```
Using `-all` will generate marshalers/unmarshalers for all Go structs in the
@@ -78,6 +80,14 @@ Additional option notes:
* `-build_tags` will add the specified build tags to generated Go sources.
## Structure json tag options
Besides standart json tag options like 'omitempty' the following are supported:
* 'noclone' - disables allocation and copying of string values, making them
refer to original json buffer memory. This works great for short lived
objects which are not hold in memory after decoding and immediate usage.
## Generated Marshaler/Unmarshaler Funcs
For Go struct types, easyjson generates the funcs `MarshalEasyJSON` /
+6
View File
@@ -0,0 +1,6 @@
package tests
//easyjson:json
type MembersEscaped struct {
A string `json:"漢語"`
}
+51
View File
@@ -0,0 +1,51 @@
package tests
import (
"reflect"
"testing"
"github.com/mailru/easyjson"
)
func TestMembersEscaping(t *testing.T) {
cases := []struct {
data string
esc MembersEscaped
unesc MembersUnescaped
}{
{
data: `{"漢語": "中国"}`,
esc: MembersEscaped{A: "中国"},
unesc: MembersUnescaped{A: "中国"},
},
{
data: `{"漢語": "\u4e2D\u56fD"}`,
esc: MembersEscaped{A: "中国"},
unesc: MembersUnescaped{A: "中国"},
},
{
data: `{"\u6f22\u8a9E": "中国"}`,
esc: MembersEscaped{A: "中国"},
unesc: MembersUnescaped{A: ""},
},
{
data: `{"\u6f22\u8a9E": "\u4e2D\u56fD"}`,
esc: MembersEscaped{A: "中国"},
unesc: MembersUnescaped{A: ""},
},
}
for i, c := range cases {
var esc MembersEscaped
easyjson.Unmarshal([]byte(c.data), &esc)
if !reflect.DeepEqual(esc, c.esc) {
t.Errorf("[%d] TestMembersEscaping(): got=%+v, exp=%+v", i, esc, c.esc)
}
var unesc MembersUnescaped
easyjson.Unmarshal([]byte(c.data), &unesc)
if !reflect.DeepEqual(unesc, c.unesc) {
t.Errorf("[%d] TestMembersEscaping(): no-unescaping case: got=%+v, exp=%+v", i, esc, c.esc)
}
}
}
+6
View File
@@ -0,0 +1,6 @@
package tests
//easyjson:json
type MembersUnescaped struct {
A string `json:"漢語"`
}