blob: ce0ab3473ab682edafc98d17be4b73bdd5956a35 [file] [log] [blame]
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package json
import (
"testing";
)
type _MyStruct struct {
T bool;
F bool;
S string;
I8 int8;
I16 int16;
I32 int32;
I64 int64;
U8 uint8;
U16 uint16;
U32 uint32;
U64 uint64;
I int;
U uint;
Fl float;
Fl32 float32;
Fl64 float64;
A []string;
My *_MyStruct;
};
const _Encoded =
`{"t":true,"f":false,"s":"abc","i8":1,"i16":2,"i32":3,"i64":4,`
` "u8":5,"u16":6,"u32":7,"u64":8,`
` "i":-9,"u":10,"bogusfield":"should be ignored",`
` "fl":11.5,"fl32":12.25,"fl64":13.75,`
` "a":["x","y","z"],"my":{"s":"subguy"}}`;
func _Check(t *testing.T, ok bool, name string, v interface{}) {
if !ok {
t.Errorf("%s = %v (BAD)", name, v);
} else {
t.Logf("%s = %v (good)", name, v);
}
}
func TestUnmarshal(t *testing.T) {
var m _MyStruct;
m.F = true;
ok, errtok := Unmarshal(_Encoded, &m);
if !ok {
t.Fatalf("Unmarshal failed near %s", errtok);
}
_Check(t, m.T==true, "t", m.T);
_Check(t, m.F==false, "f", m.F);
_Check(t, m.S=="abc", "s", m.S);
_Check(t, m.I8==1, "i8", m.I8);
_Check(t, m.I16==2, "i16", m.I16);
_Check(t, m.I32==3, "i32", m.I32);
_Check(t, m.I64==4, "i64", m.I64);
_Check(t, m.U8==5, "u8", m.U8);
_Check(t, m.U16==6, "u16", m.U16);
_Check(t, m.U32==7, "u32", m.U32);
_Check(t, m.U64==8, "u64", m.U64);
_Check(t, m.I==-9, "i", m.I);
_Check(t, m.U==10, "u", m.U);
_Check(t, m.Fl==11.5, "fl", m.Fl);
_Check(t, m.Fl32==12.25, "fl32", m.Fl32);
_Check(t, m.Fl64==13.75, "fl64", m.Fl64);
_Check(t, m.A!=nil, "a", m.A);
if m.A != nil {
_Check(t, m.A[0]=="x", "a[0]", m.A[0]);
_Check(t, m.A[1]=="y", "a[1]", m.A[1]);
_Check(t, m.A[2]=="z", "a[2]", m.A[2]);
}
_Check(t, m.My!=nil, "my", m.My);
if m.My != nil {
_Check(t, m.My.S=="subguy", "my.s", m.My.S);
}
}