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