mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
json: fix []unmarshaler case
Now that reflect has v.Addr(), we can use it. R=golang-dev, dsymonds, r CC=golang-dev https://golang.org/cl/4860041
This commit is contained in:
parent
c9cf04a9f6
commit
83c734601c
2 changed files with 16 additions and 1 deletions
|
|
@ -34,10 +34,17 @@ func (u *unmarshaler) UnmarshalJSON(b []byte) os.Error {
|
|||
return nil
|
||||
}
|
||||
|
||||
type ustruct struct {
|
||||
M unmarshaler
|
||||
}
|
||||
|
||||
var (
|
||||
um0, um1 unmarshaler // target2 of unmarshaling
|
||||
ump = &um1
|
||||
umtrue = unmarshaler{true}
|
||||
umslice = []unmarshaler{unmarshaler{true}}
|
||||
umslicep = new([]unmarshaler)
|
||||
umstruct = ustruct{unmarshaler{true}}
|
||||
)
|
||||
|
||||
type unmarshalTest struct {
|
||||
|
|
@ -77,6 +84,9 @@ var unmarshalTests = []unmarshalTest{
|
|||
// unmarshal interface test
|
||||
{`{"T":false}`, &um0, umtrue, nil}, // use "false" so test will fail if custom unmarshaler is not called
|
||||
{`{"T":false}`, &ump, &umtrue, nil},
|
||||
{`[{"T":false}]`, &umslice, umslice, nil},
|
||||
{`[{"T":false}]`, &umslicep, &umslice, nil},
|
||||
{`{"M":{"T":false}}`, &umstruct, umstruct, nil},
|
||||
}
|
||||
|
||||
func TestMarshal(t *testing.T) {
|
||||
|
|
@ -140,7 +150,6 @@ func TestUnmarshal(t *testing.T) {
|
|||
println(string(data))
|
||||
data, _ = Marshal(tt.out)
|
||||
println(string(data))
|
||||
return
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue