| // 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 ( |
| "json"; |
| "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); |
| } |
| } |