1// +build go1.1
2
3package simplejson
4
5import (
6	"bytes"
7	"encoding/json"
8	"github.com/bmizerany/assert"
9	"strconv"
10	"testing"
11)
12
13func TestNewFromReader(t *testing.T) {
14	//Use New Constructor
15	buf := bytes.NewBuffer([]byte(`{
16		"test": {
17			"array": [1, "2", 3],
18			"arraywithsubs": [
19				{"subkeyone": 1},
20				{"subkeytwo": 2, "subkeythree": 3}
21			],
22			"bignum": 9223372036854775807,
23			"uint64": 18446744073709551615
24		}
25	}`))
26	js, err := NewFromReader(buf)
27
28	//Standard Test Case
29	assert.NotEqual(t, nil, js)
30	assert.Equal(t, nil, err)
31
32	arr, _ := js.Get("test").Get("array").Array()
33	assert.NotEqual(t, nil, arr)
34	for i, v := range arr {
35		var iv int
36		switch v.(type) {
37		case json.Number:
38			i64, err := v.(json.Number).Int64()
39			assert.Equal(t, nil, err)
40			iv = int(i64)
41		case string:
42			iv, _ = strconv.Atoi(v.(string))
43		}
44		assert.Equal(t, i+1, iv)
45	}
46
47	ma := js.Get("test").Get("array").MustArray()
48	assert.Equal(t, ma, []interface{}{json.Number("1"), "2", json.Number("3")})
49
50	mm := js.Get("test").Get("arraywithsubs").GetIndex(0).MustMap()
51	assert.Equal(t, mm, map[string]interface{}{"subkeyone": json.Number("1")})
52
53	assert.Equal(t, js.Get("test").Get("bignum").MustInt64(), int64(9223372036854775807))
54	assert.Equal(t, js.Get("test").Get("uint64").MustUint64(), uint64(18446744073709551615))
55}
56
57func TestSimplejsonGo11(t *testing.T) {
58	js, err := NewJson([]byte(`{
59		"test": {
60			"array": [1, "2", 3],
61			"arraywithsubs": [
62				{"subkeyone": 1},
63				{"subkeytwo": 2, "subkeythree": 3}
64			],
65			"bignum": 9223372036854775807,
66			"uint64": 18446744073709551615
67		}
68	}`))
69
70	assert.NotEqual(t, nil, js)
71	assert.Equal(t, nil, err)
72
73	arr, _ := js.Get("test").Get("array").Array()
74	assert.NotEqual(t, nil, arr)
75	for i, v := range arr {
76		var iv int
77		switch v.(type) {
78		case json.Number:
79			i64, err := v.(json.Number).Int64()
80			assert.Equal(t, nil, err)
81			iv = int(i64)
82		case string:
83			iv, _ = strconv.Atoi(v.(string))
84		}
85		assert.Equal(t, i+1, iv)
86	}
87
88	ma := js.Get("test").Get("array").MustArray()
89	assert.Equal(t, ma, []interface{}{json.Number("1"), "2", json.Number("3")})
90
91	mm := js.Get("test").Get("arraywithsubs").GetIndex(0).MustMap()
92	assert.Equal(t, mm, map[string]interface{}{"subkeyone": json.Number("1")})
93
94	assert.Equal(t, js.Get("test").Get("bignum").MustInt64(), int64(9223372036854775807))
95	assert.Equal(t, js.Get("test").Get("uint64").MustUint64(), uint64(18446744073709551615))
96}
97