OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
6 #include "platform/json.h" | 6 #include "platform/json.h" |
7 #include "vm/json_stream.h" | 7 #include "vm/json_stream.h" |
8 #include "vm/unit_test.h" | 8 #include "vm/unit_test.h" |
9 | 9 |
10 namespace dart { | 10 namespace dart { |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 132 |
133 JSONReader r(w.buf()); | 133 JSONReader r(w.buf()); |
134 bool found = r.Seek("command"); | 134 bool found = r.Seek("command"); |
135 EXPECT(found); | 135 EXPECT(found); |
136 EXPECT_EQ(r.Type(), JSONReader::kString); | 136 EXPECT_EQ(r.Type(), JSONReader::kString); |
137 EXPECT(r.IsStringLiteral("stopIt")); | 137 EXPECT(r.IsStringLiteral("stopIt")); |
138 } | 138 } |
139 | 139 |
140 | 140 |
141 TEST_CASE(JSON_JSONStream_Primitives) { | 141 TEST_CASE(JSON_JSONStream_Primitives) { |
142 TextBuffer tb(256); | 142 { |
143 JSONStream js(&tb); | 143 JSONStream js; |
144 | 144 { |
145 js.OpenObject(); | 145 JSONObject jsobj(&js); |
146 js.CloseObject(); | 146 } |
147 | 147 EXPECT_STREQ("{}", js.ToCString()); |
148 EXPECT_STREQ("{}", tb.buf()); | 148 } |
149 | 149 { |
150 js.Clear(); | 150 JSONStream js; |
151 js.OpenArray(); | 151 { |
152 js.CloseArray(); | 152 JSONArray jsarr(&js); |
153 EXPECT_STREQ("[]", tb.buf()); | 153 } |
154 | 154 EXPECT_STREQ("[]", js.ToCString()); |
155 js.Clear(); | 155 } |
156 js.PrintValueBool(true); | 156 { |
157 EXPECT_STREQ("true", tb.buf()); | 157 JSONStream js; |
158 | 158 { |
159 js.Clear(); | 159 JSONArray jsarr(&js); |
160 js.PrintValueBool(false); | 160 jsarr.AddValue(true); |
161 EXPECT_STREQ("false", tb.buf()); | 161 } |
162 | 162 EXPECT_STREQ("[true]", js.ToCString()); |
163 js.Clear(); | 163 } |
164 js.PrintValue(static_cast<intptr_t>(4)); | 164 { |
165 EXPECT_STREQ("4", tb.buf()); | 165 JSONStream js; |
166 | 166 { |
167 js.Clear(); | 167 JSONArray jsarr(&js); |
168 js.PrintValue(1.0); | 168 jsarr.AddValue(false); |
169 EXPECT_STREQ("1.000000", tb.buf()); | 169 } |
170 | 170 EXPECT_STREQ("[false]", js.ToCString()); |
171 js.Clear(); | 171 } |
172 js.PrintValue("hello"); | 172 { |
173 EXPECT_STREQ("\"hello\"", tb.buf()); | 173 JSONStream js; |
| 174 { |
| 175 JSONArray jsarr(&js); |
| 176 jsarr.AddValue(static_cast<intptr_t>(4)); |
| 177 } |
| 178 EXPECT_STREQ("[4]", js.ToCString()); |
| 179 } |
| 180 { |
| 181 JSONStream js; |
| 182 { |
| 183 JSONArray jsarr(&js); |
| 184 jsarr.AddValue(1.0); |
| 185 } |
| 186 EXPECT_STREQ("[1.000000]", js.ToCString()); |
| 187 } |
| 188 { |
| 189 JSONStream js; |
| 190 { |
| 191 JSONArray jsarr(&js); |
| 192 jsarr.AddValue("hello"); |
| 193 } |
| 194 EXPECT_STREQ("[\"hello\"]", js.ToCString()); |
| 195 } |
| 196 { |
| 197 JSONStream js; |
| 198 { |
| 199 JSONArray jsarr(&js); |
| 200 jsarr.AddValueF("h%s", "elo"); |
| 201 } |
| 202 EXPECT_STREQ("[\"helo\"]", js.ToCString()); |
| 203 } |
174 } | 204 } |
175 | 205 |
176 | 206 |
177 TEST_CASE(JSON_JSONStream_Array) { | 207 TEST_CASE(JSON_JSONStream_Array) { |
178 TextBuffer tb(256); | 208 JSONStream js; |
179 JSONStream js(&tb); | 209 { |
180 js.Clear(); | 210 JSONArray jsarr(&js); |
181 js.OpenArray(); | 211 jsarr.AddValue(true); |
182 js.PrintValueBool(true); | 212 jsarr.AddValue(false); |
183 js.PrintValueBool(false); | 213 } |
184 js.CloseArray(); | 214 EXPECT_STREQ("[true,false]", js.ToCString()); |
185 EXPECT_STREQ("[true,false]", tb.buf()); | |
186 } | 215 } |
187 | 216 |
188 | 217 |
189 TEST_CASE(JSON_JSONStream_Object) { | 218 TEST_CASE(JSON_JSONStream_Object) { |
190 TextBuffer tb(256); | 219 JSONStream js; |
191 JSONStream js(&tb); | 220 { |
192 js.Clear(); | 221 JSONObject jsobj(&js); |
193 js.OpenObject(); | 222 jsobj.AddProperty("key1", "a"); |
194 js.PrintProperty("key1", "a"); | 223 jsobj.AddProperty("key2", "b"); |
195 js.PrintProperty("key2", "b"); | 224 } |
196 js.CloseObject(); | 225 EXPECT_STREQ("{\"key1\":\"a\",\"key2\":\"b\"}", js.ToCString()); |
197 EXPECT_STREQ("{\"key1\":\"a\",\"key2\":\"b\"}", tb.buf()); | |
198 } | 226 } |
199 | 227 |
200 TEST_CASE(JSON_JSONStream_NestedObject) { | 228 TEST_CASE(JSON_JSONStream_NestedObject) { |
201 TextBuffer tb(256); | 229 JSONStream js; |
202 JSONStream js(&tb); | 230 { |
203 js.OpenObject(); | 231 JSONObject jsobj(&js); |
204 js.OpenObject("key"); | 232 JSONObject jsobj1(jsobj, "key"); |
205 js.PrintProperty("key1", "d"); | 233 jsobj1.AddProperty("key1", "d"); |
206 js.CloseObject(); | 234 } |
207 js.CloseObject(); | 235 EXPECT_STREQ("{\"key\":{\"key1\":\"d\"}}", js.ToCString()); |
208 EXPECT_STREQ("{\"key\":{\"key1\":\"d\"}}", tb.buf()); | |
209 } | 236 } |
210 | 237 |
211 | 238 |
212 TEST_CASE(JSON_JSONStream_ObjectArray) { | 239 TEST_CASE(JSON_JSONStream_ObjectArray) { |
213 TextBuffer tb(256); | 240 JSONStream js; |
214 JSONStream js(&tb); | 241 { |
215 js.OpenArray(); | 242 JSONArray jsarr(&js); |
216 js.OpenObject(); | 243 { |
217 js.PrintProperty("key", "e"); | 244 JSONObject jsobj(jsarr); |
218 js.CloseObject(); | 245 jsobj.AddProperty("key", "e"); |
219 js.OpenObject(); | 246 } |
220 js.PrintProperty("yek", "f"); | 247 { |
221 js.CloseObject(); | 248 JSONObject jsobj(jsarr); |
222 js.CloseArray(); | 249 jsobj.AddProperty("yek", "f"); |
223 EXPECT_STREQ("[{\"key\":\"e\"},{\"yek\":\"f\"}]", tb.buf()); | 250 } |
| 251 } |
| 252 EXPECT_STREQ("[{\"key\":\"e\"},{\"yek\":\"f\"}]", js.ToCString()); |
224 } | 253 } |
225 | 254 |
226 | 255 |
227 TEST_CASE(JSON_JSONStream_ArrayArray) { | 256 TEST_CASE(JSON_JSONStream_ArrayArray) { |
228 TextBuffer tb(256); | 257 JSONStream js; |
229 JSONStream js(&tb); | 258 { |
230 js.OpenArray(); | 259 JSONArray jsarr(&js); |
231 js.OpenArray(); | 260 { |
232 js.PrintValue((intptr_t)4); | 261 JSONArray jsarr1(jsarr); |
233 js.CloseArray(); | 262 jsarr1.AddValue(static_cast<intptr_t>(4)); |
234 js.OpenArray(); | 263 } |
235 js.PrintValueBool(false); | 264 { |
236 js.CloseArray(); | 265 JSONArray jsarr1(jsarr); |
237 js.CloseArray(); | 266 jsarr1.AddValue(false); |
238 EXPECT_STREQ("[[4],[false]]", tb.buf()); | 267 } |
| 268 } |
| 269 EXPECT_STREQ("[[4],[false]]", js.ToCString()); |
239 } | 270 } |
240 | 271 |
241 | 272 |
242 TEST_CASE(JSON_JSONStream_Printf) { | 273 TEST_CASE(JSON_JSONStream_Printf) { |
243 TextBuffer tb(256); | 274 JSONStream js; |
244 JSONStream js(&tb); | 275 { |
245 js.OpenArray(); | 276 JSONArray jsarr(&js); |
246 js.PrintfValue("%d %s", 2, "hello"); | 277 jsarr.AddValueF("%d %s", 2, "hello"); |
247 js.CloseArray(); | 278 } |
248 EXPECT_STREQ("[\"2 hello\"]", tb.buf()); | 279 EXPECT_STREQ("[\"2 hello\"]", js.ToCString()); |
249 } | 280 } |
250 | 281 |
251 | 282 |
252 TEST_CASE(JSON_JSONStream_ObjectPrintf) { | 283 TEST_CASE(JSON_JSONStream_ObjectPrintf) { |
253 TextBuffer tb(256); | 284 JSONStream js; |
254 JSONStream js(&tb); | 285 { |
255 js.OpenObject(); | 286 JSONObject jsobj(&js); |
256 js.PrintfProperty("key", "%d %s", 2, "hello"); | 287 jsobj.AddPropertyF("key", "%d %s", 2, "hello"); |
257 js.CloseObject(); | 288 } |
258 EXPECT_STREQ("{\"key\":\"2 hello\"}", tb.buf()); | 289 EXPECT_STREQ("{\"key\":\"2 hello\"}", js.ToCString()); |
259 } | 290 } |
260 | 291 |
261 | 292 |
262 TEST_CASE(JSON_JSONStream_DartObject) { | 293 TEST_CASE(JSON_JSONStream_DartObject) { |
263 TextBuffer tb(256); | 294 JSONStream js; |
264 JSONStream js(&tb); | 295 { |
265 js.OpenArray(); | 296 JSONArray jsarr(&js); |
266 js.PrintValue(Object::Handle(Object::null())); | 297 jsarr.AddValue(Object::Handle(Object::null())); |
267 js.OpenObject(); | 298 JSONObject jsobj(jsarr); |
268 js.PrintProperty("object_key", Object::Handle(Object::null())); | 299 jsobj.AddProperty("object_key", Object::Handle(Object::null())); |
269 js.CloseArray(); | 300 } |
270 EXPECT_STREQ("[{\"type\":\"null\"},{\"object_key\":{\"type\":\"null\"}]", | 301 EXPECT_STREQ("[{\"type\":\"null\"},{\"object_key\":{\"type\":\"null\"}}]", |
271 tb.buf()); | 302 js.ToCString()); |
272 } | 303 } |
273 | 304 |
274 TEST_CASE(JSON_JSONStream_EscapedString) { | 305 TEST_CASE(JSON_JSONStream_EscapedString) { |
275 TextBuffer tb(256); | 306 JSONStream js; |
276 JSONStream js(&tb); | 307 { |
277 js.PrintValue("Hel\"\"lo\r\n\t"); | 308 JSONArray jsarr(&js); |
278 EXPECT_STREQ("\"Hel\\\"\\\"lo\\r\\n\\t\"", tb.buf()); | 309 jsarr.AddValue("Hel\"\"lo\r\n\t"); |
| 310 } |
| 311 EXPECT_STREQ("[\"Hel\\\"\\\"lo\\r\\n\\t\"]", js.ToCString()); |
279 } | 312 } |
280 | 313 |
281 | 314 |
282 } // namespace dart | 315 } // namespace dart |
OLD | NEW |