| 168 | } |
| 169 | |
| 170 | func TestStdlibInterfaces(t *testing.T) { |
| 171 | val := new(struct { |
| 172 | Name string `json:"name"` |
| 173 | Params *Json `json:"params"` |
| 174 | }) |
| 175 | val2 := new(struct { |
| 176 | Name string `json:"name"` |
| 177 | Params *Json `json:"params"` |
| 178 | }) |
| 179 | |
| 180 | raw := `{"name":"myobject","params":{"string":"simplejson"}}` |
| 181 | |
| 182 | if err := json.Unmarshal([]byte(raw), val); err != nil { |
| 183 | t.Fatalf("err %#v", err) |
| 184 | } |
| 185 | if val.Name != "myobject" { |
| 186 | t.Errorf("got %#v", val.Name) |
| 187 | } |
| 188 | if val.Params.data == nil { |
| 189 | t.Errorf("got %#v", val.Params.data) |
| 190 | } |
| 191 | if s, _ := val.Params.Get("string").String(); s != "simplejson" { |
| 192 | t.Errorf("got %#v", s) |
| 193 | } |
| 194 | |
| 195 | p, err := json.Marshal(val) |
| 196 | if err != nil { |
| 197 | t.Fatalf("err %#v", err) |
| 198 | } |
| 199 | if err = json.Unmarshal(p, val2); err != nil { |
| 200 | t.Fatalf("err %#v", err) |
| 201 | } |
| 202 | if !reflect.DeepEqual(val, val2) { // stable |
| 203 | t.Errorf("got %#v expected %#v", val2, val) |
| 204 | } |
| 205 | } |
| 206 | |
| 207 | func TestSet(t *testing.T) { |
| 208 | js, err := NewJson([]byte(`{}`)) |