From e0f67b396dd4995ba0515b5718863c9e3c2a880f Mon Sep 17 00:00:00 2001 From: Kirill Korotaev Date: Sat, 11 Apr 2020 19:04:13 +0300 Subject: [PATCH] Add test cases for non-escaped mode of member names --- Makefile | 6 +++- README.md | 10 +++++++ tests/members_escaped.go | 6 ++++ tests/members_escaping_test.go | 51 ++++++++++++++++++++++++++++++++++ tests/members_unescaped.go | 6 ++++ 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tests/members_escaped.go create mode 100644 tests/members_escaping_test.go create mode 100644 tests/members_unescaped.go diff --git a/Makefile b/Makefile index dbe6a2b..57427dd 100644 --- a/Makefile +++ b/Makefile @@ -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 \ diff --git a/README.md b/README.md index c88848d..d5d44bf 100644 --- a/README.md +++ b/README.md @@ -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` / diff --git a/tests/members_escaped.go b/tests/members_escaped.go new file mode 100644 index 0000000..0fd68e8 --- /dev/null +++ b/tests/members_escaped.go @@ -0,0 +1,6 @@ +package tests + +//easyjson:json +type MembersEscaped struct { + A string `json:"漢語"` +} diff --git a/tests/members_escaping_test.go b/tests/members_escaping_test.go new file mode 100644 index 0000000..e385648 --- /dev/null +++ b/tests/members_escaping_test.go @@ -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) + } + } +} diff --git a/tests/members_unescaped.go b/tests/members_unescaped.go new file mode 100644 index 0000000..1b95721 --- /dev/null +++ b/tests/members_unescaped.go @@ -0,0 +1,6 @@ +package tests + +//easyjson:json +type MembersUnescaped struct { + A string `json:"漢語"` +}