testobject.cpp
Go to the documentation of this file.
1 //
2 // QtMark JSON Library
3 //
4 // Copyright (C) 2015 Assured Information Security, Inc.
5 // Author: Rian Quinn <quinnr@ainfosec.com>
6 // Author: Rodney Forbes <forbesr@ainfosec.com>
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 
22 #include <test.h>
23 
24 void TestJson::QMJsonObject_create(void)
25 {
26  auto hash1 = QHash<QString, QMPointer<QMJsonValue> >();
27  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
28  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(4));
29  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue(8));
30  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(15));
31 
32  hash1["key1"] = value1;
33  hash1["key2"] = value2;
34  hash1["key3"] = value3;
35  object1->insert("key1", value1);
36  object1->insert("key2", value2);
37  object1->insert("key3", value3);
38 
39  auto object2 = QMPointer<QMJsonObject>(new QMJsonObject(hash1));
40 
41  QVERIFY(object1->toDouble("key1") == object2->toDouble("key1"));
42  QVERIFY(object1->toDouble("key2") == object2->toDouble("key2"));
43  QVERIFY(object1->toDouble("key3") == object2->toDouble("key3"));
44 }
45 
46 void TestJson::QMJsonObject_insert(void)
47 {
48  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue());
49  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
50  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
51  auto object2 = QMPointer<QMJsonObject>(new QMJsonObject());
52  auto rawValue1 = new QMJsonValue();
53  auto rawArray1 = new QMJsonArray();
54  auto rawObject1 = new QMJsonObject();
55 
56  object1->insert("key1", new QMJsonValue());
57  QVERIFY(object1->value("key1").isNull() == false);
58  QVERIFY(object1->value("key1")->isNull() == true);
59 
60  object1->insert("key1", QMPointer<QMJsonValue>());
61  QVERIFY(object1->value("key1").isNull() == false);
62  QVERIFY(object1->value("key1")->isNull() == true);
63 
64  object1->insert("key1", value1);
65  QVERIFY(object1->value("key1").isNull() == false);
66  QVERIFY(object1->value("key1")->isNull() == true);
67 
68  object1->insert("key1", rawValue1);
69  QVERIFY(object1->value("key1").isNull() == false);
70  QVERIFY(object1->value("key1")->isNull() == true);
71 
72  object1->insert("key1", new QMJsonArray());
73  QVERIFY(object1->value("key1").isNull() == false);
74  QVERIFY(object1->value("key1")->isArray() == true);
75 
76  object1->insert("key1", QMPointer<QMJsonArray>());
77  QVERIFY(object1->value("key1").isNull() == false);
78  QVERIFY(object1->value("key1")->isArray() == true);
79 
80  object1->insert("key1", array1);
81  QVERIFY(object1->value("key1").isNull() == false);
82  QVERIFY(object1->value("key1")->isArray() == true);
83 
84  object1->insert("key1", rawArray1);
85  QVERIFY(object1->value("key1").isNull() == false);
86  QVERIFY(object1->value("key1")->isArray() == true);
87 
88  object1->insert("key1", new QMJsonObject());
89  QVERIFY(object1->value("key1").isNull() == false);
90  QVERIFY(object1->value("key1")->isObject() == true);
91 
92  object1->insert("key1", QMPointer<QMJsonObject>());
93  QVERIFY(object1->value("key1").isNull() == false);
94  QVERIFY(object1->value("key1")->isObject() == true);
95 
96  object1->insert("key1", object1);
97  QVERIFY(object1->value("key1").isNull() == false);
98  QVERIFY(object1->value("key1")->isObject() == true);
99 
100  object1->insert("key1", rawObject1);
101  QVERIFY(object1->value("key1").isNull() == false);
102  QVERIFY(object1->value("key1")->isObject() == true);
103 
104  object1->insert("key1", QMPointer<QMJsonValue>());
105  QVERIFY(object1->value("key1").isNull() == false);
106  QVERIFY(object1->value("key1")->isNull() == true);
107 
108  object1->insert("key1", 4.8);
109  QVERIFY(object1->value("key1").isNull() == false);
110  QVERIFY(object1->value("key1")->isDouble() == true);
111 
112  object1->insert("key1", "Hello World");
113  QVERIFY(object1->value("key1").isNull() == false);
114  QVERIFY(object1->value("key1")->isString() == true);
115 
116  object1->insert("key1", QString("Hello World"));
117  QVERIFY(object1->value("key1").isNull() == false);
118  QVERIFY(object1->value("key1")->isString() == true);
119 
120  object1->insert("key1", new QMJsonValue(4.8));
121  QVERIFY(object1->value("key1").isNull() == false);
122  QVERIFY(object1->value("key1")->isDouble() == true);
123 
124  object1->insert("key1", new QMJsonValue("Hello World"));
125  QVERIFY(object1->value("key1").isNull() == false);
126  QVERIFY(object1->value("key1")->isString() == true);
127 
128  object1->insert("key1", new QMJsonValue(QString("Hello World")));
129  QVERIFY(object1->value("key1").isNull() == false);
130  QVERIFY(object1->value("key1")->isString() == true);
131 
132  object1->insert("key1", QMPointer<QMJsonValue>(new QMJsonValue(4.8)));
133  QVERIFY(object1->value("key1").isNull() == false);
134  QVERIFY(object1->value("key1")->isDouble() == true);
135 
136  object1->insert("key1", QMPointer<QMJsonValue>(new QMJsonValue("Hello World")));
137  QVERIFY(object1->value("key1").isNull() == false);
138  QVERIFY(object1->value("key1")->isString() == true);
139 
140  object1->insert("key1", QMPointer<QMJsonValue>(new QMJsonValue(QString("Hello World"))));
141  QVERIFY(object1->value("key1").isNull() == false);
142  QVERIFY(object1->value("key1")->isString() == true);
143 }
144 
145 void TestJson::QMJsonObject_unite(void)
146 {
147  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
148  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
149  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
150  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
151  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
152  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
153  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
154  auto object2 = QMPointer<QMJsonObject>(new QMJsonObject());
155 
156  array2->append(value2);
157  array2->append(value3);
158  object2->insert("key0", value2);
159  object2->insert("key2", value3);
160  object2->insert("array", array2);
161 
162  object1->clear();
163  array1->append(value0);
164  array1->append(value1);
165  object1->insert("key0", value0);
166  object1->insert("key1", value1);
167  object1->insert("array", array1);
169 
170  QVERIFY(object1->isString("key0") == true);
171  QVERIFY(object1->isBool("key1") == true);
172  QVERIFY(object1->isDouble("key2") == true);
173  QVERIFY(object1->toArray("array")->isNull(0) == true);
174  QVERIFY(object1->toArray("array")->isBool(1) == true);
175  QVERIFY(object1->toArray("array")->isString(2) == true);
176  QVERIFY(object1->toArray("array")->isDouble(3) == true);
177 
178  object1->clear();
179  array1->append(value0);
180  array1->append(value1);
181  object1->insert("key0", value0);
182  object1->insert("key1", value1);
183  object1->insert("array", array1);
185 
186  QVERIFY(object1->isString("key0") == true);
187  QVERIFY(object1->isBool("key1") == true);
188  QVERIFY(object1->isDouble("key2") == true);
189  QVERIFY(object1->toArray("array")->isDouble(0) == true);
190  QVERIFY(object1->toArray("array")->isString(1) == true);
191  QVERIFY(object1->toArray("array")->isNull(2) == true);
192  QVERIFY(object1->toArray("array")->isBool(3) == true);
193 
194  object1->clear();
195  array1->append(value0);
196  array1->append(value1);
197  object1->insert("key0", value0);
198  object1->insert("key1", value1);
199  object1->insert("array", array1);
201 
202  QVERIFY(object1->isNull("key0") == true);
203  QVERIFY(object1->isBool("key1") == true);
204  QVERIFY(object1->isDouble("key2") == true);
205  QVERIFY(object1->toArray("array")->isNull(0) == true);
206  QVERIFY(object1->toArray("array")->isBool(1) == true);
207  QVERIFY(object1->toArray("array")->isString(2) == true);
208  QVERIFY(object1->toArray("array")->isDouble(3) == true);
209 
210  object1->clear();
211  array1->append(value0);
212  array1->append(value1);
213  object1->insert("key0", value0);
214  object1->insert("key1", value1);
215  object1->insert("array", array1);
217 
218  QVERIFY(object1->isNull("key0") == true);
219  QVERIFY(object1->isBool("key1") == true);
220  QVERIFY(object1->isDouble("key2") == true);
221  QVERIFY(object1->toArray("array")->isDouble(0) == true);
222  QVERIFY(object1->toArray("array")->isString(1) == true);
223  QVERIFY(object1->toArray("array")->isNull(2) == true);
224  QVERIFY(object1->toArray("array")->isBool(3) == true);
225 }
226 
227 void TestJson::QMJsonObject_iter(void)
228 {
229  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
230  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
231  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
232  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
233  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
234 
235  object1->insert("key0", value0);
236  object1->insert("key1", value1);
237  object1->insert("key2", value2);
238  object1->insert("key3", value3);
239 
240  auto iter0 = object1->find("key0");
241  QVERIFY(iter0.value() == value0);
242 
243  auto iter1 = object1->find("key1");
244  QVERIFY(iter1.value() == value1);
245 
246  auto iter2 = object1->find("key2");
247  QVERIFY(iter2.value() == value2);
248 
249  auto iter3 = object1->find("key3");
250  QVERIFY(iter3.value() == value3);
251 
252  auto iter4 = object1->find("blah");
253  QVERIFY(iter4 == object1->end());
254 
255  auto iter5 = object1->begin();
256  QVERIFY(iter5 != object1->end());
257 
258  const auto const_iter0 = object1->cfind("key0");
259  QVERIFY(const_iter0.value() == value0);
260 
261  const auto const_iter1 = object1->cfind("key1");
262  QVERIFY(const_iter1.value() == value1);
263 
264  const auto const_iter2 = object1->cfind("key2");
265  QVERIFY(const_iter2.value() == value2);
266 
267  const auto const_iter3 = object1->cfind("key3");
268  QVERIFY(const_iter3.value() == value3);
269 
270  const auto const_iter4 = object1->cfind("blah");
271  QVERIFY(const_iter4 == object1->cend());
272 
273  const auto const_iter5 = object1->cbegin();
274  QVERIFY(const_iter5 != object1->cend());
275 
276  auto iter = object1->begin();
277  while(iter != object1->end())
278  iter = object1->erase(iter);
279 
280  QVERIFY(object1->count() == 0);
281 }
282 
283 void TestJson::QMJsonObject_count(void)
284 {
285  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
286  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
287  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
288  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
289  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
290 
291  QVERIFY(object1->count() == 0);
292  QVERIFY(object1->size() == 0);
293 
294  object1->insert("key0", value0);
295  QVERIFY(object1->count() == 1);
296  QVERIFY(object1->size() == 1);
297 
298  object1->insert("key1", value1);
299  QVERIFY(object1->count() == 2);
300  QVERIFY(object1->size() == 2);
301 
302  object1->insert("key2", value2);
303  QVERIFY(object1->count() == 3);
304  QVERIFY(object1->size() == 3);
305 
306  object1->insert("key3", value3);
307  QVERIFY(object1->count() == 4);
308  QVERIFY(object1->size() == 4);
309 
310  object1->clear();
311  QVERIFY(object1->count() == 0);
312  QVERIFY(object1->size() == 0);
313 }
314 
315 void TestJson::QMJsonObject_clear(void)
316 {
317  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
318  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
319  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
320  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
321  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
322  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
323  auto object2 = QMPointer<QMJsonObject>(new QMJsonObject());
324  auto document1 = QMPointer<QMJsonValue>(new QMJsonValue(array1));
325  auto document2 = QMPointer<QMJsonValue>(new QMJsonValue(object1));
326  auto document3 = QMPointer<QMJsonValue>(new QMJsonValue(object2));
327 
328  array1->append(value0);
329  array1->append(value1);
330  object1->insert("key2", value2);
331  object1->insert("key3", value3);
332  object2->insert("array", array1);
333  object2->insert("object", object1);
334 
335  object2->clear();
336 
337  QVERIFY(document1->toJson() == "[]");
338  QVERIFY(document2->toJson() == "{}");
339  QVERIFY(document3->toJson() == "{}");
340 }
341 
342 void TestJson::QMJsonObject_empty(void)
343 {
344  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
345  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
346  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
347  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
348  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
349 
350  QVERIFY(object1->isEmpty() == true);
351  QVERIFY(object1->empty() == true);
352 
353  object1->insert("key0", value0);
354  object1->insert("key1", value1);
355  object1->insert("key2", value2);
356  object1->insert("key3", value3);
357 
358  QVERIFY(object1->isEmpty() == false);
359  QVERIFY(object1->empty() == false);
360 
361  object1->clear();
362 
363  QVERIFY(object1->isEmpty() == true);
364  QVERIFY(object1->empty() == true);
365 }
366 
367 void TestJson::QMJsonObject_contains(void)
368 {
369  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
370  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
371  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
372  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
373  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
374 
375  QVERIFY(object1->contains("") == false);
376  QVERIFY(object1->contains(QString()) == false);
377  QVERIFY(object1->contains("key0") == false);
378  QVERIFY(object1->contains("key1") == false);
379  QVERIFY(object1->contains("key2") == false);
380  QVERIFY(object1->contains("key3") == false);
381  QVERIFY(object1->contains("key4") == false);
382 
383  object1->insert("key0", value0);
384  object1->insert("key1", value1);
385  object1->insert("key2", value2);
386  object1->insert("key3", value3);
387 
388  QVERIFY(object1->contains("key0") == true);
389  QVERIFY(object1->contains("key1") == true);
390  QVERIFY(object1->contains("key2") == true);
391  QVERIFY(object1->contains("key3") == true);
392  QVERIFY(object1->contains("key4") == false);
393 
394  object1->clear();
395 
396  QVERIFY(object1->contains("key0") == false);
397  QVERIFY(object1->contains("key1") == false);
398  QVERIFY(object1->contains("key2") == false);
399  QVERIFY(object1->contains("key3") == false);
400  QVERIFY(object1->contains("key4") == false);
401 }
402 
403 void TestJson::QMJsonObject_remove(void)
404 {
405  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
406  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
407  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
408  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
409  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
410 
411  object1->remove("");
412  object1->remove(QString());
413  object1->remove("key0");
414  QVERIFY(object1->count() == 0);
415  QVERIFY(object1->take("key0").isNull() == false);
416  QVERIFY(object1->take("key0", value0).isNull() == false);
417  QVERIFY(object1->take("key0", 4.8).isNull() == false);
418  QVERIFY(object1->count() == 0);
419 
420  auto array = object1->take("array", QMPointer<QMJsonArray>());
421  QVERIFY(array.isNull() == false);
422  QVERIFY(array->toArray().isNull() == false);
423 
424  auto object = object1->take("object", QMPointer<QMJsonObject>());
425  QVERIFY(object.isNull() == false);
426  QVERIFY(object->toArray().isNull() == false);
427 
428  object1->insert("key0", value0);
429  object1->insert("key1", value1);
430  object1->insert("key2", value2);
431  object1->insert("key3", value3);
432 
433  object1->remove("key0");
434  QVERIFY(object1->count() == 3);
435  QVERIFY(object1->take("key1") == value1);
436  QVERIFY(object1->take("key2", value0) == value2);
437  QVERIFY(object1->take("key3", 4.8) == value3);
438  QVERIFY(object1->count() == 0);
439 }
440 
441 void TestJson::QMJsonObject_key(void)
442 {
443  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
444  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
445  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
446  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
447  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
448 
449  QVERIFY(object1->key(QMPointer<QMJsonValue>()) == QString());
450  QVERIFY(object1->key(value0) == QString());
451  QVERIFY(object1->key(value0, "test") == "test");
452 
453  object1->insert("key0", value0);
454  object1->insert("key1", value1);
455  object1->insert("key2", value2);
456  object1->insert("key3", value3);
457 
458  QVERIFY(object1->key(value0) == "key0");
459  QVERIFY(object1->key(value0, "test") == "key0");
460 
461  QVERIFY(object1->key(value1) == "key1");
462  QVERIFY(object1->key(value1, "test") == "key1");
463 
464  QVERIFY(object1->key(value2) == "key2");
465  QVERIFY(object1->key(value2, "test") == "key2");
466 
467  QVERIFY(object1->key(value3) == "key3");
468  QVERIFY(object1->key(value3, "test") == "key3");
469 }
470 
471 void TestJson::QMJsonObject_value(void)
472 {
473  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
474  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
475  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
476  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
477  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
478 
479  QVERIFY(object1->value("").isNull() == false);
480  QVERIFY(object1->value(QString()).isNull() == false);
481  QVERIFY(object1->value("key0").isNull() == false);
482  QVERIFY(object1->value("key0", QMPointer<QMJsonValue>()).isNull() == true);
483  QVERIFY(object1->value("key0", value2) == value2);
484  QVERIFY(object1->value("key0", 4.8).isNull() == false);
485 
486  auto array = object1->value("array", QMPointer<QMJsonArray>());
487  QVERIFY(array.isNull() == false);
488  QVERIFY(array->toArray().isNull() == false);
489 
490  auto object = object1->value("object", QMPointer<QMJsonObject>());
491  QVERIFY(object.isNull() == false);
492  QVERIFY(object->toArray().isNull() == false);
493 
494  object1->insert("key0", value0);
495  object1->insert("key1", value1);
496  object1->insert("key2", value2);
497  object1->insert("key3", value3);
498 
499  QVERIFY(object1->value("key0") == value0);
500  QVERIFY(object1->value("key0", QMPointer<QMJsonValue>()) == value0);
501  QVERIFY(object1->value("key0", value2) == value0);
502  QVERIFY(object1->value("key0", 4.8) == value0);
503 
504  QVERIFY(object1->value("key1") == value1);
505  QVERIFY(object1->value("key1", QMPointer<QMJsonValue>()) == value1);
506  QVERIFY(object1->value("key1", value2) == value1);
507  QVERIFY(object1->value("key1", 4.8) == value1);
508 
509  QVERIFY(object1->value("key2") == value2);
510  QVERIFY(object1->value("key2", QMPointer<QMJsonValue>()) == value2);
511  QVERIFY(object1->value("key2", value0) == value2);
512  QVERIFY(object1->value("key2", 4.8) == value2);
513 
514  QVERIFY(object1->value("key3") == value3);
515  QVERIFY(object1->value("key3", QMPointer<QMJsonValue>()) == value3);
516  QVERIFY(object1->value("key3", value2) == value3);
517  QVERIFY(object1->value("key3", 4.8) == value3);
518 }
519 
520 void TestJson::QMJsonObject_keys(void)
521 {
522  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
523  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
524  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
525  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
526  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
527 
528  QVERIFY(object1->keys() == QList<QString>());
529  QVERIFY(object1->keys().count() == 0);
530 
531  object1->insert("key0", value0);
532  object1->insert("key1", value1);
533  object1->insert("key2", value2);
534  object1->insert("key3", value3);
535 
536  QStringList keys = object1->keys();
537  keys.sort();
538 
539  QVERIFY(keys == QStringList() << "key0" << "key1" << "key2" << "key3");
540  QVERIFY(keys.count() == 4);
541 }
542 
543 void TestJson::QMJsonObject_values(void)
544 {
545  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
546  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
547  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
548  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
549  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
550 
551  QVERIFY(object1->values() == QList<QMPointer<QMJsonValue> >());
552  QVERIFY(object1->values().count() == 0);
553 
554  object1->insert("key0", value0);
555  object1->insert("key1", value1);
556  object1->insert("key2", value2);
557  object1->insert("key3", value3);
558 
559  auto values = object1->values();
560  QVERIFY(values.contains(value0) == true);
561  QVERIFY(values.contains(value1) == true);
562  QVERIFY(values.contains(value2) == true);
563  QVERIFY(values.contains(value3) == true);
564  QVERIFY(values.count() == 4);
565 }
566 
567 void TestJson::QMJsonObject_hash(void)
568 {
569  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
570  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
571  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
572  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
573  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
574 
575  auto emptyHash = QHash<QString, QMPointer<QMJsonValue> >();
576 
577  QVERIFY(object1->hash() == emptyHash);
578  QVERIFY(object1->hash().count() == 0);
579 
580  object1->insert("key0", value0);
581  object1->insert("key1", value1);
582  object1->insert("key2", value2);
583  object1->insert("key3", value3);
584 
585  auto hash = object1->hash();
586  QVERIFY(hash.contains("key0") == true);
587  QVERIFY(hash.contains("key1") == true);
588  QVERIFY(hash.contains("key2") == true);
589  QVERIFY(hash.contains("key3") == true);
590  QVERIFY(hash.count() == 4);
591 }
592 
593 void TestJson::QMJsonObject_null(void)
594 {
595  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
596  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
597 
598  object1->insert("key0", value0);
599 
600  QVERIFY(object1->isNull("key0") == true);
601  QVERIFY(object1->isBool("key0") == false);
602  QVERIFY(object1->isDouble("key0") == false);
603  QVERIFY(object1->isString("key0") == false);
604  QVERIFY(object1->isArray("key0") == false);
605  QVERIFY(object1->isObject("key0") == false);
606  QVERIFY(object1->is<QRect>("key0") == false);
607 
608  QVERIFY(object1->toBool("key0") == false);
609  QVERIFY(object1->toDouble("key0") == 0);
610  QVERIFY(object1->toString("key0") == "null");
611  QVERIFY(object1->toArray("key0").isNull() == false);
612  QVERIFY(object1->toObject("key0").isNull() == false);
613 
614  QVERIFY(object1->toBool("key0", true) == true);
615  QVERIFY(object1->toDouble("key0", 4.8) == 4.8);
616  QVERIFY(object1->toString("key0", "15.16") == "15.16");
617  QVERIFY(object1->toArray("key0", QMPointer<QMJsonArray>()).isNull() == true);
618  QVERIFY(object1->toObject("key0", QMPointer<QMJsonObject>()).isNull() == true);
619  QVERIFY(object1->to<QRect>("key0", QRect()) == QRect());
620  QVERIFY(object1->from("key0", value0) == true);
621  QVERIFY(object1->from<QSize>("key0", QSize(15, 16)) == false);
622 }
623 
624 void TestJson::QMJsonObject_bool(void)
625 {
626  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(true));
627  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
628 
629  object1->insert("key0", value0);
630 
631  QVERIFY(object1->isNull("key0") == false);
632  QVERIFY(object1->isBool("key0") == true);
633  QVERIFY(object1->isDouble("key0") == false);
634  QVERIFY(object1->isString("key0") == false);
635  QVERIFY(object1->isArray("key0") == false);
636  QVERIFY(object1->isObject("key0") == false);
637  QVERIFY(object1->is<QRect>("key0") == false);
638 
639  QVERIFY(object1->toBool("key0") == true);
640  QVERIFY(object1->toDouble("key0") == 1);
641  QVERIFY(object1->toString("key0") == "true");
642  QVERIFY(object1->toArray("key0").isNull() == false);
643  QVERIFY(object1->toObject("key0").isNull() == false);
644 
645  QVERIFY(object1->toBool("key0", false) == true);
646  QVERIFY(object1->toDouble("key0", 4.8) == 4.8);
647  QVERIFY(object1->toString("key0", "15.16") == "15.16");
648  QVERIFY(object1->toArray("key0", QMPointer<QMJsonArray>()).isNull() == true);
649  QVERIFY(object1->toObject("key0", QMPointer<QMJsonObject>()).isNull() == true);
650  QVERIFY(object1->to<QRect>("key0", QRect()) == QRect());
651 
652  QVERIFY(object1->from("key0", value0) == true);
653  QVERIFY(object1->fromBool("key0", false) == true);
654  QVERIFY(object1->fromDouble("key0", 4.8) == true);
655  QVERIFY(object1->fromString("key0", "false") == true);
656  QVERIFY(object1->fromArray("key0", QMPointer<QMJsonArray>()) == false);
657  QVERIFY(object1->fromObject("key0", QMPointer<QMJsonObject>()) == false);
658  QVERIFY(object1->from<QSize>("key0", QSize(15, 16)) == false);
659 }
660 
661 void TestJson::QMJsonObject_double(void)
662 {
663  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
664  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
665 
666  object1->insert("key0", value0);
667 
668  QVERIFY(object1->isNull("key0") == false);
669  QVERIFY(object1->isBool("key0") == false);
670  QVERIFY(object1->isDouble("key0") == true);
671  QVERIFY(object1->isString("key0") == false);
672  QVERIFY(object1->isArray("key0") == false);
673  QVERIFY(object1->isObject("key0") == false);
674  QVERIFY(object1->is<QRect>("key0") == false);
675 
676  QVERIFY(object1->toBool("key0") == true);
677  QVERIFY(object1->toDouble("key0") == 4.8);
678  QVERIFY(object1->toString("key0") == "4.8");
679  QVERIFY(object1->toArray("key0").isNull() == false);
680  QVERIFY(object1->toObject("key0").isNull() == false);
681 
682  QVERIFY(object1->toBool("key0", false) == false);
683  QVERIFY(object1->toDouble("key0", 15.16) == 4.8);
684  QVERIFY(object1->toString("key0", "15.16") == "15.16");
685  QVERIFY(object1->toArray("key0", QMPointer<QMJsonArray>()).isNull() == true);
686  QVERIFY(object1->toObject("key0", QMPointer<QMJsonObject>()).isNull() == true);
687  QVERIFY(object1->to<QRect>("key0", QRect()) == QRect());
688 
689  QVERIFY(object1->from("key0", value0) == true);
690  QVERIFY(object1->fromBool("key0", false) == true);
691  QVERIFY(object1->fromDouble("key0", 15.16) == true);
692  QVERIFY(object1->fromString("key0", "false") == false);
693  QVERIFY(object1->fromArray("key0", QMPointer<QMJsonArray>()) == false);
694  QVERIFY(object1->fromObject("key0", QMPointer<QMJsonObject>()) == false);
695  QVERIFY(object1->from<QSize>("key0", QSize(15, 16)) == false);
696 }
697 
698 void TestJson::QMJsonObject_string(void)
699 {
700  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue("test"));
701  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
702 
703  object1->insert("key0", value0);
704 
705  QVERIFY(object1->isNull("key0") == false);
706  QVERIFY(object1->isBool("key0") == false);
707  QVERIFY(object1->isDouble("key0") == false);
708  QVERIFY(object1->isString("key0") == true);
709  QVERIFY(object1->isArray("key0") == false);
710  QVERIFY(object1->isObject("key0") == false);
711  QVERIFY(object1->is<QRect>("key0") == false);
712 
713  QVERIFY(object1->toBool("key0") == false);
714  QVERIFY(object1->toDouble("key0") == 0);
715  QVERIFY(object1->toString("key0") == "test");
716  QVERIFY(object1->toArray("key0").isNull() == false);
717  QVERIFY(object1->toObject("key0").isNull() == false);
718 
719  QVERIFY(object1->toBool("key0", true) == true);
720  QVERIFY(object1->toDouble("key0", 15.16) == 15.16);
721  QVERIFY(object1->toString("key0", "15.16") == "test");
722  QVERIFY(object1->toArray("key0", QMPointer<QMJsonArray>()).isNull() == true);
723  QVERIFY(object1->toObject("key0", QMPointer<QMJsonObject>()).isNull() == true);
724  QVERIFY(object1->to<QRect>("key0", QRect()) == QRect());
725 
726  QVERIFY(object1->from("key0", value0) == true);
727  QVERIFY(object1->fromBool("key0", false) == true);
728  QVERIFY(object1->fromDouble("key0", 15.16) == true);
729  QVERIFY(object1->fromString("key0", "15.16") == true);
730  QVERIFY(object1->fromArray("key0", QMPointer<QMJsonArray>()) == false);
731  QVERIFY(object1->fromObject("key0", QMPointer<QMJsonObject>()) == false);
732  QVERIFY(object1->from<QSize>("key0", QSize(15, 16)) == false);
733 }
734 
735 void TestJson::QMJsonObject_array(void)
736 {
737  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray()));
738  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
739 
740  object1->insert("key0", value0);
741 
742  QVERIFY(object1->isNull("key0") == false);
743  QVERIFY(object1->isBool("key0") == false);
744  QVERIFY(object1->isDouble("key0") == false);
745  QVERIFY(object1->isString("key0") == false);
746  QVERIFY(object1->isArray("key0") == true);
747  QVERIFY(object1->isObject("key0") == false);
748  QVERIFY(object1->is<QRect>("key0") == false);
749 
750  QVERIFY(object1->toBool("key0") == false);
751  QVERIFY(object1->toDouble("key0") == 0);
752  QVERIFY(object1->toString("key0") == QString());
753  QVERIFY(object1->toArray("key0").isNull() == false);
754  QVERIFY(object1->toObject("key0").isNull() == false);
755 
756  QVERIFY(object1->toBool("key0", true) == true);
757  QVERIFY(object1->toDouble("key0", 15.16) == 15.16);
758  QVERIFY(object1->toString("key0", "15.16") == "15.16");
759  QVERIFY(object1->toArray("key0", QMPointer<QMJsonArray>()).isNull() == false);
760  QVERIFY(object1->toObject("key0", QMPointer<QMJsonObject>()).isNull() == true);
761  QVERIFY(object1->to<QRect>("key0", QRect()) == QRect());
762 
763  QVERIFY(object1->from("key0", value0) == true);
764  QVERIFY(object1->fromBool("key0", false) == false);
765  QVERIFY(object1->fromDouble("key0", 15.16) == false);
766  QVERIFY(object1->fromString("key0", "15.16") == false);
767  QVERIFY(object1->fromArray("key0", QMPointer<QMJsonArray>()) == true);
768  QVERIFY(object1->fromObject("key0", QMPointer<QMJsonObject>()) == false);
769  QVERIFY(object1->from<QSize>("key0", QSize(15, 16)) == false);
770 }
771 
772 void TestJson::QMJsonObject_object(void)
773 {
774  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject()));
775  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
776 
777  object1->insert("key0", value0);
778 
779  QVERIFY(object1->isNull("key0") == false);
780  QVERIFY(object1->isBool("key0") == false);
781  QVERIFY(object1->isDouble("key0") == false);
782  QVERIFY(object1->isString("key0") == false);
783  QVERIFY(object1->isArray("key0") == false);
784  QVERIFY(object1->isObject("key0") == true);
785  QVERIFY(object1->is<QRect>("key0") == false);
786 
787  QVERIFY(object1->toBool("key0") == false);
788  QVERIFY(object1->toDouble("key0") == 0);
789  QVERIFY(object1->toString("key0") == QString());
790  QVERIFY(object1->toArray("key0").isNull() == false);
791  QVERIFY(object1->toObject("key0").isNull() == false);
792 
793  QVERIFY(object1->toBool("key0", true) == true);
794  QVERIFY(object1->toDouble("key0", 15.16) == 15.16);
795  QVERIFY(object1->toString("key0", "15.16") == "15.16");
796  QVERIFY(object1->toArray("key0", QMPointer<QMJsonArray>()).isNull() == true);
797  QVERIFY(object1->toObject("key0", QMPointer<QMJsonObject>()).isNull() == false);
798  QVERIFY(object1->to<QRect>("key0", QRect()) == QRect());
799 
800  QVERIFY(object1->from("key0", value0) == true);
801  QVERIFY(object1->fromBool("key0", false) == false);
802  QVERIFY(object1->fromDouble("key0", 15.16) == false);
803  QVERIFY(object1->fromString("key0", "15.16") == false);
804  QVERIFY(object1->fromArray("key0", QMPointer<QMJsonArray>()) == false);
805  QVERIFY(object1->fromObject("key0", QMPointer<QMJsonObject>()) == true);
806  QVERIFY(object1->from<QSize>("key0", QSize(15, 16)) == false);
807 }
808 
809 void TestJson::QMJsonObject_custom(void)
810 {
811  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(QSize(4, 8)));
812  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
813 
814  object1->insert("key0", value0);
815 
816  QVERIFY(object1->isNull("key0") == false);
817  QVERIFY(object1->isBool("key0") == false);
818  QVERIFY(object1->isDouble("key0") == false);
819  QVERIFY(object1->isString("key0") == false);
820  QVERIFY(object1->isArray("key0") == false);
821  QVERIFY(object1->isObject("key0") == false);
822  QVERIFY(object1->is<QSize>("key0") == true);
823 
824  QVERIFY(object1->toBool("key0") == false);
825  QVERIFY(object1->toDouble("key0") == 0);
826  QVERIFY(object1->toString("key0") == QString());
827  QVERIFY(object1->toArray("key0").isNull() == false);
828  QVERIFY(object1->toObject("key0").isNull() == false);
829 
830  QVERIFY(object1->toBool("key0", true) == true);
831  QVERIFY(object1->toDouble("key0", 15.16) == 15.16);
832  QVERIFY(object1->toString("key0", "15.16") == "15.16");
833  QVERIFY(object1->toArray("key0", QMPointer<QMJsonArray>()).isNull() == true);
834  QVERIFY(object1->toObject("key0", QMPointer<QMJsonObject>()).isNull() == true);
835  QVERIFY(object1->to<QSize>("key0", QSize()) == QSize(4, 8));
836 
837  QVERIFY(object1->from("key0", value0) == false);
838  QVERIFY(object1->fromBool("key0", false) == false);
839  QVERIFY(object1->fromDouble("key0", 15.16) == false);
840  QVERIFY(object1->fromString("key0", "15.16") == false);
841  QVERIFY(object1->fromArray("key0", QMPointer<QMJsonArray>()) == false);
842  QVERIFY(object1->fromObject("key0", QMPointer<QMJsonObject>()) == false);
843  QVERIFY(object1->from<QSize>("key0", QSize(15, 16)) == true);
844 }
845 
846 void TestJson::QMJsonObject_signals(void)
847 {
848  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue("15.16"));
849  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
850  auto object2 = QMPointer<QMJsonObject>(new QMJsonObject());
851 
852  connect(object1.data(), &QMJsonObject::itemAdded, this, &TestJson::signaled);
853  connect(object1.data(), &QMJsonObject::itemRemoved, this, &TestJson::signaled);
854  connect(object2.data(), &QMJsonObject::itemAdded, this, &TestJson::signaled);
855  connect(object2.data(), &QMJsonObject::itemRemoved, this, &TestJson::signaled);
856 
857  mCount = 0;
858  object1->clear();
859  QVERIFY(mCount == 0);
860 
861  mCount = 0;
862  object1->remove("key0");
863  QVERIFY(mCount == 0);
864 
865  mCount = 0;
866  object1->take("key1");
867  object1->take("key2", value0);
868  object1->take("key3", 15.16);
869  QVERIFY(mCount == 0);
870 
871  mCount = 0;
872  object1->erase(object1->find("key4"));
873  QVERIFY(mCount == 0);
874 
875  mCount = 0;
876  object1->insert("key0", value0);
877  object1->insert("key1", value0);
878  object1->insert("key2", value0);
879  QVERIFY(mCount == 3);
880 
881  mCount = 0;
882  object2->insert("key2", value0);
883  object2->insert("key3", value0);
884  object2->insert("key4", value0);
885  object2->insert("key5", value0);
886  QVERIFY(mCount == 4);
887 
888  mCount = 0;
889  object1->unite(object2);
890  QVERIFY(mCount == 5);
891 
892  mCount = 0;
893  object1->remove("key0");
894  QVERIFY(mCount == 1);
895 
896  mCount = 0;
897  object1->take("key1");
898  object1->take("key2", value0);
899  object1->take("key3", 15.16);
900  QVERIFY(mCount == 3);
901 
902  mCount = 0;
903  object1->erase(object1->find("key4"));
904  QVERIFY(mCount == 1);
905 
906  mCount = 0;
907  object1->clear();
908  QVERIFY(mCount == 1);
909 }
910 
void itemRemoved(const QString &key, const QMPointer< QMJsonValue > &value)
void itemAdded(const QString &key, const QMPointer< QMJsonValue > &value)