aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/encoding/json/decode_test.go
diff options
context:
space:
mode:
authorAndrey Mirtchovski <mirtchovski@gmail.com>2013-01-30 09:10:32 -0800
committerRuss Cox <rsc@golang.org>2013-01-30 09:10:32 -0800
commite57939590518b3af48dcddee0394339ef9ede1cc (patch)
treea3acbc6859d2ee2180c244f7c5bf6177e511e613 /src/pkg/encoding/json/decode_test.go
parente6861d8c34002b7f1b8a12b03672fda02f02d7ed (diff)
downloadgo-e57939590518b3af48dcddee0394339ef9ede1cc.tar.xz
encoding/json: properly unmarshal empty arrays.
The JSON unmarshaller failed to allocate an array when there are no values for the input causing the `[]` unmarshalled to []interface{} to generate []interface{}(nil) rather than []interface{}{}. This wasn't caught in the tests because Decode() works correctly and because jsonBig never generated zero-sized arrays. The modification to scanner_test.go quickly triggers the error: without the change to decoder.go, but with the change to scanner_test.go: $ go test --- FAIL: TestUnmarshalMarshal (0.10 seconds) decode_test.go:446: Marshal jsonBig scanner_test.go:206: diverge at 70: «03c1OL6$":null},{"[=» vs «03c1OL6$":[]},{"[=^\» FAIL exit status 1 FAIL encoding/json 0.266s Also added a simple regression to decode_test.go. R=adg, dave, rsc CC=golang-dev https://golang.org/cl/7196050
Diffstat (limited to 'src/pkg/encoding/json/decode_test.go')
-rw-r--r--src/pkg/encoding/json/decode_test.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/pkg/encoding/json/decode_test.go b/src/pkg/encoding/json/decode_test.go
index a91c6da01d..b65687e4a4 100644
--- a/src/pkg/encoding/json/decode_test.go
+++ b/src/pkg/encoding/json/decode_test.go
@@ -239,6 +239,12 @@ var unmarshalTests = []unmarshalTest{
{in: `[1, 2, 3]`, ptr: new([1]int), out: [1]int{1}},
{in: `[1, 2, 3]`, ptr: new([5]int), out: [5]int{1, 2, 3, 0, 0}},
+ // empty array to interface test
+ {in: `[]`, ptr: new([]interface{}), out: []interface{}{}},
+ {in: `null`, ptr: new([]interface{}), out: []interface{}(nil)},
+ {in: `{"T":[]}`, ptr: new(map[string]interface{}), out: map[string]interface{}{"T": []interface{}{}}},
+ {in: `{"T":null}`, ptr: new(map[string]interface{}), out: map[string]interface{}{"T": interface{}(nil)}},
+
// composite tests
{in: allValueIndent, ptr: new(All), out: allValue},
{in: allValueCompact, ptr: new(All), out: allValue},