| 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 |