4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
1 |
// Copyright 2013 Canonical Ltd. This software is licensed under the
|
2 |
// GNU Lesser General Public License version 3 (see the file COPYING).
|
|
3 |
||
4 |
package gomaasapi |
|
5 |
||
6 |
import ( |
|
19.1.2
by Jeroen Vermeulen
Test JSON (de)serialization of JSONObjects. |
7 |
"encoding/json"
|
8 |
"fmt"
|
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
9 |
. "launchpad.net/gocheck" |
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
10 |
)
|
11 |
||
13.2.3
by Raphael Badin
Rename test suites. |
12 |
type JSONObjectSuite struct { |
13 |
}
|
|
14 |
||
15 |
var _ = Suite(&JSONObjectSuite{}) |
|
16 |
||
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
17 |
// maasify() converts nil.
|
13.2.3
by Raphael Badin
Rename test suites. |
18 |
func (suite *JSONObjectSuite) TestMaasifyConvertsNil(c *C) { |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
19 |
c.Check(maasify(Client{}, nil).IsNil(), Equals, true) |
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
20 |
}
|
21 |
||
22 |
// maasify() converts strings.
|
|
13.2.3
by Raphael Badin
Rename test suites. |
23 |
func (suite *JSONObjectSuite) TestMaasifyConvertsString(c *C) { |
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
24 |
const text = "Hello" |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
25 |
out, err := maasify(Client{}, text).GetString() |
26 |
c.Assert(err, IsNil) |
|
27 |
c.Check(out, Equals, text) |
|
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
28 |
}
|
29 |
||
30 |
// maasify() converts float64 numbers.
|
|
13.2.3
by Raphael Badin
Rename test suites. |
31 |
func (suite *JSONObjectSuite) TestMaasifyConvertsNumber(c *C) { |
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
32 |
const number = 3.1415926535 |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
33 |
num, err := maasify(Client{}, number).GetFloat64() |
34 |
c.Assert(err, IsNil) |
|
35 |
c.Check(num, Equals, number) |
|
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
36 |
}
|
37 |
||
38 |
// maasify() converts array slices.
|
|
13.2.3
by Raphael Badin
Rename test suites. |
39 |
func (suite *JSONObjectSuite) TestMaasifyConvertsArray(c *C) { |
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
40 |
original := []interface{}{3.0, 2.0, 1.0} |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
41 |
output, err := maasify(Client{}, original).GetArray() |
42 |
c.Assert(err, IsNil) |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
43 |
c.Check(len(output), Equals, len(original)) |
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
44 |
}
|
45 |
||
4.2.6
by Jeroen Vermeulen
Test that maasified maps and arrays contain JSONObjects. |
46 |
// When maasify() converts an array slice, the result contains JSONObjects.
|
13.2.3
by Raphael Badin
Rename test suites. |
47 |
func (suite *JSONObjectSuite) TestMaasifyArrayContainsJSONObjects(c *C) { |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
48 |
arr, err := maasify(Client{}, []interface{}{9.9}).GetArray() |
49 |
c.Assert(err, IsNil) |
|
18.1.4
by Jeroen Vermeulen
Review changes. |
50 |
var _ JSONObject = arr[0] |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
51 |
entry, err := arr[0].GetFloat64() |
52 |
c.Assert(err, IsNil) |
|
53 |
c.Check(entry, Equals, 9.9) |
|
4.2.6
by Jeroen Vermeulen
Test that maasified maps and arrays contain JSONObjects. |
54 |
}
|
55 |
||
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
56 |
// maasify() converts maps.
|
13.2.3
by Raphael Badin
Rename test suites. |
57 |
func (suite *JSONObjectSuite) TestMaasifyConvertsMap(c *C) { |
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
58 |
original := map[string]interface{}{"1": "one", "2": "two", "3": "three"} |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
59 |
output, err := maasify(Client{}, original).GetMap() |
60 |
c.Assert(err, IsNil) |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
61 |
c.Check(len(output), Equals, len(original)) |
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
62 |
}
|
63 |
||
4.2.6
by Jeroen Vermeulen
Test that maasified maps and arrays contain JSONObjects. |
64 |
// When maasify() converts a map, the result contains JSONObjects.
|
13.2.3
by Raphael Badin
Rename test suites. |
65 |
func (suite *JSONObjectSuite) TestMaasifyMapContainsJSONObjects(c *C) { |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
66 |
jsonobj := maasify(Client{}, map[string]interface{}{"key": "value"}) |
67 |
mp, err := jsonobj.GetMap() |
|
18.1.4
by Jeroen Vermeulen
Review changes. |
68 |
var _ JSONObject = mp["key"] |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
69 |
c.Assert(err, IsNil) |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
70 |
entry, err := mp["key"].GetString() |
71 |
c.Check(entry, Equals, "value") |
|
4.2.6
by Jeroen Vermeulen
Test that maasified maps and arrays contain JSONObjects. |
72 |
}
|
73 |
||
4.2.16
by Jeroen Vermeulen
Get rid of the term 'model.' Rename maasModel to jsonMAASObject. |
74 |
// maasify() converts MAAS objects.
|
13.2.3
by Raphael Badin
Rename test suites. |
75 |
func (suite *JSONObjectSuite) TestMaasifyConvertsMAASObject(c *C) { |
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
76 |
original := map[string]interface{}{ |
77 |
"resource_uri": "http://example.com/foo", |
|
4.2.13
by Jeroen Vermeulen
gofmt. |
78 |
"size": "3", |
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
79 |
}
|
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
80 |
obj, err := maasify(Client{}, original).GetMAASObject() |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
81 |
c.Assert(err, IsNil) |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
82 |
c.Check(len(obj.GetMap()), Equals, len(original)) |
83 |
size, err := obj.GetMap()["size"].GetString() |
|
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
84 |
c.Assert(err, IsNil) |
85 |
c.Check(size, Equals, "3") |
|
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
86 |
}
|
87 |
||
8.1.1
by Raphael Badin
Use url.URL and embed the base URL in the client. |
88 |
// maasify() passes its client to a MAASObject it creates.
|
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
89 |
func (suite *JSONObjectSuite) TestMaasifyPassesClientToMAASObject(c *C) { |
4.2.18
by Jeroen Vermeulen
Merge trunk. Resolve conflicts, semantic and syntactic. |
90 |
client := Client{} |
7.1.1
by Raphael Badin
Implement POST/PUT/DELETE. |
91 |
original := map[string]interface{}{"resource_uri": "/foo"} |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
92 |
output, err := maasify(client, original).GetMAASObject() |
93 |
c.Assert(err, IsNil) |
|
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
94 |
c.Check(output.client, Equals, client) |
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
95 |
}
|
96 |
||
8.1.1
by Raphael Badin
Use url.URL and embed the base URL in the client. |
97 |
// maasify() passes its client into an array of MAASObjects it creates.
|
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
98 |
func (suite *JSONObjectSuite) TestMaasifyPassesClientIntoArray(c *C) { |
4.2.18
by Jeroen Vermeulen
Merge trunk. Resolve conflicts, semantic and syntactic. |
99 |
client := Client{} |
7.1.1
by Raphael Badin
Implement POST/PUT/DELETE. |
100 |
obj := map[string]interface{}{"resource_uri": "/foo"} |
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
101 |
list := []interface{}{obj} |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
102 |
jsonobj, err := maasify(client, list).GetArray() |
103 |
c.Assert(err, IsNil) |
|
104 |
out, err := jsonobj[0].GetMAASObject() |
|
105 |
c.Assert(err, IsNil) |
|
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
106 |
c.Check(out.client, Equals, client) |
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
107 |
}
|
108 |
||
8.1.1
by Raphael Badin
Use url.URL and embed the base URL in the client. |
109 |
// maasify() passes its client into a map of MAASObjects it creates.
|
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
110 |
func (suite *JSONObjectSuite) TestMaasifyPassesClientIntoMap(c *C) { |
4.2.18
by Jeroen Vermeulen
Merge trunk. Resolve conflicts, semantic and syntactic. |
111 |
client := Client{} |
7.1.1
by Raphael Badin
Implement POST/PUT/DELETE. |
112 |
obj := map[string]interface{}{"resource_uri": "/foo"} |
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
113 |
mp := map[string]interface{}{"key": obj} |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
114 |
jsonobj, err := maasify(client, mp).GetMap() |
115 |
c.Assert(err, IsNil) |
|
116 |
out, err := jsonobj["key"].GetMAASObject() |
|
117 |
c.Assert(err, IsNil) |
|
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
118 |
c.Check(out.client, Equals, client) |
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
119 |
}
|
120 |
||
8.1.1
by Raphael Badin
Use url.URL and embed the base URL in the client. |
121 |
// maasify() passes its client all the way down into any MAASObjects in the
|
122 |
// object structure it creates.
|
|
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
123 |
func (suite *JSONObjectSuite) TestMaasifyPassesClientAllTheWay(c *C) { |
4.2.18
by Jeroen Vermeulen
Merge trunk. Resolve conflicts, semantic and syntactic. |
124 |
client := Client{} |
7.1.1
by Raphael Badin
Implement POST/PUT/DELETE. |
125 |
obj := map[string]interface{}{"resource_uri": "/foo"} |
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
126 |
mp := map[string]interface{}{"key": obj} |
127 |
list := []interface{}{mp} |
|
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
128 |
jsonobj, err := maasify(client, list).GetArray() |
129 |
c.Assert(err, IsNil) |
|
130 |
outerMap, err := jsonobj[0].GetMap() |
|
131 |
c.Assert(err, IsNil) |
|
132 |
out, err := outerMap["key"].GetMAASObject() |
|
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
133 |
c.Assert(err, IsNil) |
134 |
c.Check(out.client, Equals, client) |
|
4.2.11
by Jeroen Vermeulen
Implement full passing of Client down to MAASModels. |
135 |
}
|
136 |
||
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
137 |
// maasify() converts Booleans.
|
13.2.3
by Raphael Badin
Rename test suites. |
138 |
func (suite *JSONObjectSuite) TestMaasifyConvertsBool(c *C) { |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
139 |
t, err := maasify(Client{}, true).GetBool() |
140 |
c.Assert(err, IsNil) |
|
141 |
f, err := maasify(Client{}, false).GetBool() |
|
142 |
c.Assert(err, IsNil) |
|
143 |
c.Check(t, Equals, true) |
|
144 |
c.Check(f, Equals, false) |
|
4.2.4
by Jeroen Vermeulen
s/MAASObject/JSONObject/g |
145 |
}
|
4.2.12
by Jeroen Vermeulen
Test conversions. |
146 |
|
147 |
// Parse takes you from a JSON blob to a JSONObject.
|
|
13.2.3
by Raphael Badin
Rename test suites. |
148 |
func (suite *JSONObjectSuite) TestParseMaasifiesJSONBlob(c *C) { |
4.2.12
by Jeroen Vermeulen
Test conversions. |
149 |
blob := []byte("[12]") |
8.1.1
by Raphael Badin
Use url.URL and embed the base URL in the client. |
150 |
obj, err := Parse(Client{}, blob) |
18.1.1
by Jeroen Vermeulen
Reduce JSONObject tests' reliance on casting. |
151 |
c.Assert(err, IsNil) |
152 |
||
153 |
arr, err := obj.GetArray() |
|
154 |
c.Assert(err, IsNil) |
|
155 |
out, err := arr[0].GetFloat64() |
|
156 |
c.Assert(err, IsNil) |
|
157 |
c.Check(out, Equals, 12.0) |
|
4.2.12
by Jeroen Vermeulen
Test conversions. |
158 |
}
|
159 |
||
19.2.5
by Jeroen Vermeulen
Write initial tests. |
160 |
func (suite *JSONObjectSuite) TestParseKeepsBinaryOriginal(c *C) { |
161 |
blob := []byte(`"Hi"`) |
|
162 |
||
163 |
obj, err := Parse(Client{}, blob) |
|
164 |
c.Assert(err, IsNil) |
|
165 |
||
166 |
text, err := obj.GetString() |
|
167 |
c.Assert(err, IsNil) |
|
168 |
c.Check(text, Equals, "Hi") |
|
169 |
binary, err := obj.GetBytes() |
|
170 |
c.Assert(err, IsNil) |
|
171 |
c.Check(binary, DeepEquals, blob) |
|
172 |
}
|
|
173 |
||
174 |
func (suite *JSONObjectSuite) TestParseTreatsInvalidJSONAsBinary(c *C) { |
|
175 |
blob := []byte("?x]}y![{z") |
|
176 |
||
177 |
obj, err := Parse(Client{}, blob) |
|
178 |
c.Assert(err, IsNil) |
|
179 |
||
180 |
c.Check(obj.IsNil(), Equals, false) |
|
181 |
c.Check(obj.value, IsNil) |
|
182 |
binary, err := obj.GetBytes() |
|
183 |
c.Assert(err, IsNil) |
|
184 |
c.Check(binary, DeepEquals, blob) |
|
185 |
}
|
|
186 |
||
187 |
func (suite *JSONObjectSuite) TestParseTreatsInvalidUTF8AsBinary(c *C) { |
|
188 |
// Arbitrary data that is definitely not UTF-8.
|
|
189 |
blob := []byte{220, 8, 129} |
|
190 |
||
191 |
obj, err := Parse(Client{}, blob) |
|
192 |
c.Assert(err, IsNil) |
|
193 |
||
194 |
c.Check(obj.IsNil(), Equals, false) |
|
195 |
c.Check(obj.value, IsNil) |
|
196 |
binary, err := obj.GetBytes() |
|
197 |
c.Assert(err, IsNil) |
|
198 |
c.Check(binary, DeepEquals, blob) |
|
199 |
}
|
|
200 |
||
201 |
func (suite *JSONObjectSuite) TestParseTreatsEmptyJSONAsBinary(c *C) { |
|
202 |
blob := []byte{} |
|
203 |
||
204 |
obj, err := Parse(Client{}, blob) |
|
205 |
c.Assert(err, IsNil) |
|
206 |
||
207 |
c.Check(obj.IsNil(), Equals, false) |
|
208 |
data, err := obj.GetBytes() |
|
209 |
c.Assert(err, IsNil) |
|
210 |
c.Check(data, DeepEquals, blob) |
|
211 |
}
|
|
212 |
||
19.2.9
by Jeroen Vermeulen
Made nil input a panic instead of an error. |
213 |
func (suite *JSONObjectSuite) TestParsePanicsOnNilJSON(c *C) { |
19.2.13
by Jeroen Vermeulen
gofmt. |
214 |
defer func() { |
19.2.9
by Jeroen Vermeulen
Made nil input a panic instead of an error. |
215 |
failure := recover() |
216 |
c.Assert(failure, NotNil) |
|
19.2.10
by Jeroen Vermeulen
Panic if Parse() input is nil. Tests: 3 failures. |
217 |
c.Check(failure.(error).Error(), Matches, ".*nil input") |
19.2.9
by Jeroen Vermeulen
Made nil input a panic instead of an error. |
218 |
}()
|
219 |
Parse(Client{}, nil) |
|
19.2.5
by Jeroen Vermeulen
Write initial tests. |
220 |
}
|
221 |
||
222 |
func (suite *JSONObjectSuite) TestParseNullProducesIsNil(c *C) { |
|
223 |
blob := []byte("null") |
|
224 |
obj, err := Parse(Client{}, blob) |
|
225 |
c.Assert(err, IsNil) |
|
226 |
c.Check(obj.IsNil(), Equals, true) |
|
227 |
}
|
|
228 |
||
229 |
func (suite *JSONObjectSuite) TestParseNonNullProducesNonIsNil(c *C) { |
|
230 |
blob := []byte("1") |
|
231 |
obj, err := Parse(Client{}, blob) |
|
232 |
c.Assert(err, IsNil) |
|
233 |
c.Check(obj.IsNil(), Equals, false) |
|
234 |
}
|
|
235 |
||
19.2.12
by Jeroen Vermeulen
Keep track of the special JSON-null case. Satisfy tests. |
236 |
func (suite *JSONObjectSuite) TestParseSpacedNullProducesIsNil(c *C) { |
237 |
blob := []byte(" null ") |
|
238 |
obj, err := Parse(Client{}, blob) |
|
239 |
c.Assert(err, IsNil) |
|
240 |
c.Check(obj.IsNil(), Equals, true) |
|
241 |
}
|
|
242 |
||
4.2.12
by Jeroen Vermeulen
Test conversions. |
243 |
// String-type JSONObjects convert only to string.
|
13.2.3
by Raphael Badin
Rename test suites. |
244 |
func (suite *JSONObjectSuite) TestConversionsString(c *C) { |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
245 |
obj := maasify(Client{}, "Test string") |
4.2.12
by Jeroen Vermeulen
Test conversions. |
246 |
|
247 |
value, err := obj.GetString() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
248 |
c.Check(err, IsNil) |
249 |
c.Check(value, Equals, "Test string") |
|
4.2.12
by Jeroen Vermeulen
Test conversions. |
250 |
|
251 |
_, err = obj.GetFloat64() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
252 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
253 |
_, err = obj.GetMap() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
254 |
c.Check(err, NotNil) |
4.2.16
by Jeroen Vermeulen
Get rid of the term 'model.' Rename maasModel to jsonMAASObject. |
255 |
_, err = obj.GetMAASObject() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
256 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
257 |
_, err = obj.GetArray() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
258 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
259 |
_, err = obj.GetBool() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
260 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
261 |
}
|
262 |
||
263 |
// Number-type JSONObjects convert only to float64.
|
|
13.2.3
by Raphael Badin
Rename test suites. |
264 |
func (suite *JSONObjectSuite) TestConversionsFloat64(c *C) { |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
265 |
obj := maasify(Client{}, 1.1) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
266 |
|
267 |
value, err := obj.GetFloat64() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
268 |
c.Check(err, IsNil) |
269 |
c.Check(value, Equals, 1.1) |
|
4.2.12
by Jeroen Vermeulen
Test conversions. |
270 |
|
271 |
_, err = obj.GetString() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
272 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
273 |
_, err = obj.GetMap() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
274 |
c.Check(err, NotNil) |
4.2.16
by Jeroen Vermeulen
Get rid of the term 'model.' Rename maasModel to jsonMAASObject. |
275 |
_, err = obj.GetMAASObject() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
276 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
277 |
_, err = obj.GetArray() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
278 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
279 |
_, err = obj.GetBool() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
280 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
281 |
}
|
282 |
||
283 |
// Map-type JSONObjects convert only to map.
|
|
13.2.3
by Raphael Badin
Rename test suites. |
284 |
func (suite *JSONObjectSuite) TestConversionsMap(c *C) { |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
285 |
obj := maasify(Client{}, map[string]interface{}{"x": "y"}) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
286 |
|
287 |
value, err := obj.GetMap() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
288 |
c.Check(err, IsNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
289 |
text, err := value["x"].GetString() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
290 |
c.Check(err, IsNil) |
291 |
c.Check(text, Equals, "y") |
|
4.2.12
by Jeroen Vermeulen
Test conversions. |
292 |
|
293 |
_, err = obj.GetString() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
294 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
295 |
_, err = obj.GetFloat64() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
296 |
c.Check(err, NotNil) |
4.2.16
by Jeroen Vermeulen
Get rid of the term 'model.' Rename maasModel to jsonMAASObject. |
297 |
_, err = obj.GetMAASObject() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
298 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
299 |
_, err = obj.GetArray() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
300 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
301 |
_, err = obj.GetBool() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
302 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
303 |
}
|
304 |
||
305 |
// Array-type JSONObjects convert only to array.
|
|
13.2.3
by Raphael Badin
Rename test suites. |
306 |
func (suite *JSONObjectSuite) TestConversionsArray(c *C) { |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
307 |
obj := maasify(Client{}, []interface{}{"item"}) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
308 |
|
309 |
value, err := obj.GetArray() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
310 |
c.Check(err, IsNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
311 |
text, err := value[0].GetString() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
312 |
c.Check(err, IsNil) |
313 |
c.Check(text, Equals, "item") |
|
4.2.12
by Jeroen Vermeulen
Test conversions. |
314 |
|
315 |
_, err = obj.GetString() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
316 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
317 |
_, err = obj.GetFloat64() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
318 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
319 |
_, err = obj.GetMap() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
320 |
c.Check(err, NotNil) |
4.2.16
by Jeroen Vermeulen
Get rid of the term 'model.' Rename maasModel to jsonMAASObject. |
321 |
_, err = obj.GetMAASObject() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
322 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
323 |
_, err = obj.GetBool() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
324 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
325 |
}
|
326 |
||
4.2.14
by Jeroen Vermeulen
Test model conversions in maasmodel, and test URL. |
327 |
// Boolean-type JSONObjects convert only to bool.
|
13.2.3
by Raphael Badin
Rename test suites. |
328 |
func (suite *JSONObjectSuite) TestConversionsBool(c *C) { |
18.1.2
by Jeroen Vermeulen
Move all JSONObject variations into a single class. |
329 |
obj := maasify(Client{}, false) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
330 |
|
331 |
value, err := obj.GetBool() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
332 |
c.Check(err, IsNil) |
333 |
c.Check(value, Equals, false) |
|
4.2.12
by Jeroen Vermeulen
Test conversions. |
334 |
|
335 |
_, err = obj.GetString() |
|
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
336 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
337 |
_, err = obj.GetFloat64() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
338 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
339 |
_, err = obj.GetMap() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
340 |
c.Check(err, NotNil) |
4.2.16
by Jeroen Vermeulen
Get rid of the term 'model.' Rename maasModel to jsonMAASObject. |
341 |
_, err = obj.GetMAASObject() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
342 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
343 |
_, err = obj.GetArray() |
4.2.15
by Jeroen Vermeulen
Import gocheck as . |
344 |
c.Check(err, NotNil) |
4.2.12
by Jeroen Vermeulen
Test conversions. |
345 |
}
|
19.1.2
by Jeroen Vermeulen
Test JSON (de)serialization of JSONObjects. |
346 |
|
347 |
func (suite *JSONObjectSuite) TestNilSerializesToJSON(c *C) { |
|
348 |
output, err := json.Marshal(maasify(Client{}, nil)) |
|
349 |
c.Assert(err, IsNil) |
|
350 |
c.Check(output, DeepEquals, []byte("null")) |
|
351 |
}
|
|
352 |
||
19.2.16
by Jeroen Vermeulen
Another review change: test for the empty string. |
353 |
func (suite *JSONObjectSuite) TestEmptyStringSerializesToJSON(c *C) { |
354 |
output, err := json.Marshal(maasify(Client{}, "")) |
|
355 |
c.Assert(err, IsNil) |
|
356 |
c.Check(string(output), Equals, `""`) |
|
357 |
}
|
|
358 |
||
19.1.2
by Jeroen Vermeulen
Test JSON (de)serialization of JSONObjects. |
359 |
func (suite *JSONObjectSuite) TestStringSerializesToJSON(c *C) { |
360 |
text := "Text wrapped in JSON" |
|
361 |
output, err := json.Marshal(maasify(Client{}, text)) |
|
362 |
c.Assert(err, IsNil) |
|
363 |
c.Check(output, DeepEquals, []byte(fmt.Sprintf(`"%s"`, text))) |
|
364 |
}
|
|
365 |
||
366 |
func (suite *JSONObjectSuite) TestStringIsEscapedInJSON(c *C) { |
|
367 |
text := `\"Quote,\" \\backslash, and \'apostrophe\'.` |
|
368 |
output, err := json.Marshal(maasify(Client{}, text)) |
|
369 |
c.Assert(err, IsNil) |
|
370 |
var deserialized string |
|
371 |
err = json.Unmarshal(output, &deserialized) |
|
372 |
c.Assert(err, IsNil) |
|
373 |
c.Check(deserialized, Equals, text) |
|
374 |
}
|
|
375 |
||
376 |
func (suite *JSONObjectSuite) TestFloat64SerializesToJSON(c *C) { |
|
377 |
number := 3.1415926535 |
|
378 |
output, err := json.Marshal(maasify(Client{}, number)) |
|
379 |
c.Assert(err, IsNil) |
|
380 |
var deserialized float64 |
|
381 |
err = json.Unmarshal(output, &deserialized) |
|
382 |
c.Assert(err, IsNil) |
|
383 |
c.Check(deserialized, Equals, number) |
|
384 |
}
|
|
385 |
||
386 |
func (suite *JSONObjectSuite) TestEmptyMapSerializesToJSON(c *C) { |
|
387 |
mp := map[string]interface{}{} |
|
388 |
output, err := json.Marshal(maasify(Client{}, mp)) |
|
389 |
c.Assert(err, IsNil) |
|
390 |
var deserialized interface{} |
|
391 |
err = json.Unmarshal(output, &deserialized) |
|
392 |
c.Assert(err, IsNil) |
|
393 |
c.Check(deserialized.(map[string]interface{}), DeepEquals, mp) |
|
394 |
}
|
|
395 |
||
396 |
func (suite *JSONObjectSuite) TestMapSerializesToJSON(c *C) { |
|
397 |
// Sample data: counting in Japanese.
|
|
398 |
mp := map[string]interface{}{"one": "ichi", "two": "nii", "three": "san"} |
|
399 |
output, err := json.Marshal(maasify(Client{}, mp)) |
|
400 |
c.Assert(err, IsNil) |
|
401 |
var deserialized interface{} |
|
402 |
err = json.Unmarshal(output, &deserialized) |
|
403 |
c.Assert(err, IsNil) |
|
404 |
c.Check(deserialized.(map[string]interface{}), DeepEquals, mp) |
|
405 |
}
|
|
406 |
||
407 |
func (suite *JSONObjectSuite) TestEmptyArraySerializesToJSON(c *C) { |
|
408 |
arr := []interface{}{} |
|
409 |
output, err := json.Marshal(maasify(Client{}, arr)) |
|
410 |
c.Assert(err, IsNil) |
|
411 |
var deserialized interface{} |
|
412 |
err = json.Unmarshal(output, &deserialized) |
|
413 |
c.Assert(err, IsNil) |
|
414 |
// The deserialized value is a slice, and it contains no elements.
|
|
415 |
// Can't do a regular comparison here because at least in the current
|
|
416 |
// json implementation, an empty list deserializes as a nil slice,
|
|
417 |
// not as an empty slice!
|
|
418 |
// (It doesn't work that way for maps though, for some reason).
|
|
419 |
c.Check(len(deserialized.([]interface{})), Equals, len(arr)) |
|
420 |
}
|
|
421 |
||
422 |
func (suite *JSONObjectSuite) TestArrayOfStringsSerializesToJSON(c *C) { |
|
423 |
value := "item" |
|
424 |
output, err := json.Marshal(maasify(Client{}, []interface{}{value})) |
|
425 |
c.Assert(err, IsNil) |
|
426 |
var deserialized []string |
|
427 |
err = json.Unmarshal(output, &deserialized) |
|
428 |
c.Assert(err, IsNil) |
|
429 |
c.Check(deserialized, DeepEquals, []string{value}) |
|
430 |
}
|
|
431 |
||
432 |
func (suite *JSONObjectSuite) TestArrayOfNumbersSerializesToJSON(c *C) { |
|
433 |
value := 9.0 |
|
434 |
output, err := json.Marshal(maasify(Client{}, []interface{}{value})) |
|
435 |
c.Assert(err, IsNil) |
|
436 |
var deserialized []float64 |
|
437 |
err = json.Unmarshal(output, &deserialized) |
|
438 |
c.Assert(err, IsNil) |
|
439 |
c.Check(deserialized, DeepEquals, []float64{value}) |
|
440 |
}
|
|
441 |
||
442 |
func (suite *JSONObjectSuite) TestArrayPreservesOrderInJSON(c *C) { |
|
443 |
// Sample data: counting in Korean.
|
|
444 |
arr := []interface{}{"jong", "il", "ee", "sam"} |
|
445 |
output, err := json.Marshal(maasify(Client{}, arr)) |
|
446 |
c.Assert(err, IsNil) |
|
447 |
||
448 |
var deserialized []interface{} |
|
449 |
err = json.Unmarshal(output, &deserialized) |
|
450 |
c.Assert(err, IsNil) |
|
451 |
c.Check(deserialized, DeepEquals, arr) |
|
452 |
}
|
|
453 |
||
454 |
func (suite *JSONObjectSuite) TestBoolSerializesToJSON(c *C) { |
|
455 |
f, err := json.Marshal(maasify(Client{}, false)) |
|
456 |
c.Assert(err, IsNil) |
|
457 |
t, err := json.Marshal(maasify(Client{}, true)) |
|
458 |
c.Assert(err, IsNil) |
|
459 |
||
460 |
c.Check(f, DeepEquals, []byte("false")) |
|
461 |
c.Check(t, DeepEquals, []byte("true")) |
|
462 |
}
|