]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/json: improve fidelity of TestUnmarshal for Numbers
authorJoe Tsai <joetsai@digital-static.net>
Wed, 8 Jan 2025 20:30:01 +0000 (12:30 -0800)
committerJoseph Tsai <joetsai@digital-static.net>
Wed, 8 Jan 2025 22:37:21 +0000 (14:37 -0800)
In particular, cover the behavior of unmarshaling a JSON string
into a Number type regardless of whether the `string` option
is specified or not.

Change-Id: Ibc55f16860442240bcfeea1fd51aaa76f7e50f67
Reviewed-on: https://go-review.googlesource.com/c/go/+/641416
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Joseph Tsai <joetsai@digital-static.net>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
src/encoding/json/decode_test.go

index a2b462af775e3ad5c474bcd6af3247793d86abb5..278d1e94fafa3a8b28c0795319f6a77e076a30a4 100644 (file)
@@ -1068,6 +1068,49 @@ var unmarshalTests = []struct {
                ptr:      new(map[string]Number),
                err:      fmt.Errorf("json: invalid number literal, trying to unmarshal %q into Number", `"invalid"`),
        },
+
+       {
+               CaseName: Name(""),
+               in:       `5`,
+               ptr:      new(Number),
+               out:      Number("5"),
+       },
+       {
+               CaseName: Name(""),
+               in:       `"5"`,
+               ptr:      new(Number),
+               out:      Number("5"),
+       },
+       {
+               CaseName: Name(""),
+               in:       `{"N":5}`,
+               ptr:      new(struct{ N Number }),
+               out:      struct{ N Number }{"5"},
+       },
+       {
+               CaseName: Name(""),
+               in:       `{"N":"5"}`,
+               ptr:      new(struct{ N Number }),
+               out:      struct{ N Number }{"5"},
+       },
+       {
+               CaseName: Name(""),
+               in:       `{"N":5}`,
+               ptr: new(struct {
+                       N Number `json:",string"`
+               }),
+               err: fmt.Errorf("json: invalid use of ,string struct tag, trying to unmarshal unquoted value into json.Number"),
+       },
+       {
+               CaseName: Name(""),
+               in:       `{"N":"5"}`,
+               ptr: new(struct {
+                       N Number `json:",string"`
+               }),
+               out: struct {
+                       N Number `json:",string"`
+               }{"5"},
+       },
 }
 
 func TestMarshal(t *testing.T) {