testvalue.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::QMJsonValue_create(void)
25 {
26  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
27  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
28  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
29  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
30  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(QString("Hello World")));
31  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue(QMPointer<QMJsonValue>()));
32  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue(QMPointer<QMJsonArray>()));
33  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue(QMPointer<QMJsonObject>()));
34  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue(QMPointer<QMJsonValue>(new QMJsonValue())));
35  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue(QMPointer<QMJsonArray>(new QMJsonArray())));
36  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue(QMPointer<QMJsonObject>(new QMJsonObject())));
37  auto value11 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonValue()));
38  auto value12 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray()));
39  auto value13 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject()));
40  auto value14 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
41  auto value15 = QMPointer<QMJsonValue>(new QMJsonValue((float)4.8));
42  auto value16 = QMPointer<QMJsonValue>(new QMJsonValue((char)4.8));
43  auto value17 = QMPointer<QMJsonValue>(new QMJsonValue((long)4.8));
44  auto value18 = QMPointer<QMJsonValue>(new QMJsonValue((unsigned long)4.8));
45  auto value19 = QMPointer<QMJsonValue>(new QMJsonValue((int8_t)15));
46  auto value20 = QMPointer<QMJsonValue>(new QMJsonValue((uint8_t)16));
47  auto value21 = QMPointer<QMJsonValue>(new QMJsonValue((int16_t)23));
48  auto value22 = QMPointer<QMJsonValue>(new QMJsonValue((uint16_t)42));
49  auto value23 = QMPointer<QMJsonValue>(new QMJsonValue((int32_t)4));
50  auto value24 = QMPointer<QMJsonValue>(new QMJsonValue((uint32_t)8));
51  auto value25 = QMPointer<QMJsonValue>(new QMJsonValue((int64_t)15));
52  auto value26 = QMPointer<QMJsonValue>(new QMJsonValue((uint64_t)16));
53  auto value27 = QMPointer<QMJsonValue>(new QMJsonValue((char)15));
54  auto value28 = QMPointer<QMJsonValue>(new QMJsonValue((unsigned char)16));
55  auto value29 = QMPointer<QMJsonValue>(new QMJsonValue((short)15));
56  auto value30 = QMPointer<QMJsonValue>(new QMJsonValue((unsigned short)16));
57  auto value31 = QMPointer<QMJsonValue>(new QMJsonValue((int)15));
58  auto value32 = QMPointer<QMJsonValue>(new QMJsonValue((unsigned int)16));
59  auto value33 = QMPointer<QMJsonValue>(new QMJsonValue((long long)15));
60  auto value34 = QMPointer<QMJsonValue>(new QMJsonValue((unsigned long long)16));
61 
62  QVERIFY(value00->type() == QMJsonValueType_Null);
63  QVERIFY(value01->type() == QMJsonValueType_Bool);
64  QVERIFY(value02->type() == QMJsonValueType_Double);
65  QVERIFY(value03->type() == QMJsonValueType_String);
66  QVERIFY(value04->type() == QMJsonValueType_String);
67  QVERIFY(value05->type() == QMJsonValueType_Null);
68  QVERIFY(value06->type() == QMJsonValueType_Array);
69  QVERIFY(value07->type() == QMJsonValueType_Object);
70  QVERIFY(value08->type() == QMJsonValueType_Null);
71  QVERIFY(value09->type() == QMJsonValueType_Array);
72  QVERIFY(value10->type() == QMJsonValueType_Object);
73  QVERIFY(value11->type() == QMJsonValueType_Null);
74  QVERIFY(value12->type() == QMJsonValueType_Array);
75  QVERIFY(value13->type() == QMJsonValueType_Object);
76  QVERIFY(value14->type() == QMJsonValueType_Custom);
77  QVERIFY(value15->type() == QMJsonValueType_Double);
78  QVERIFY(value16->type() == QMJsonValueType_Double);
79  QVERIFY(value17->type() == QMJsonValueType_Double);
80  QVERIFY(value18->type() == QMJsonValueType_Double);
81  QVERIFY(value19->type() == QMJsonValueType_Double);
82  QVERIFY(value20->type() == QMJsonValueType_Double);
83  QVERIFY(value21->type() == QMJsonValueType_Double);
84  QVERIFY(value22->type() == QMJsonValueType_Double);
85  QVERIFY(value23->type() == QMJsonValueType_Double);
86  QVERIFY(value24->type() == QMJsonValueType_Double);
87  QVERIFY(value25->type() == QMJsonValueType_Double);
88  QVERIFY(value26->type() == QMJsonValueType_Double);
89  QVERIFY(value27->type() == QMJsonValueType_Double);
90  QVERIFY(value28->type() == QMJsonValueType_Double);
91  QVERIFY(value29->type() == QMJsonValueType_Double);
92  QVERIFY(value30->type() == QMJsonValueType_Double);
93  QVERIFY(value31->type() == QMJsonValueType_Double);
94  QVERIFY(value32->type() == QMJsonValueType_Double);
95  QVERIFY(value33->type() == QMJsonValueType_Double);
96  QVERIFY(value34->type() == QMJsonValueType_Double);
97 
98  QVERIFY(value00->typeString() == "QMJsonValueType_Null");
99  QVERIFY(value01->typeString() == "QMJsonValueType_Bool");
100  QVERIFY(value02->typeString() == "QMJsonValueType_Double");
101  QVERIFY(value03->typeString() == "QMJsonValueType_String");
102  QVERIFY(value04->typeString() == "QMJsonValueType_String");
103  QVERIFY(value05->typeString() == "QMJsonValueType_Null");
104  QVERIFY(value06->typeString() == "QMJsonValueType_Array");
105  QVERIFY(value07->typeString() == "QMJsonValueType_Object");
106  QVERIFY(value08->typeString() == "QMJsonValueType_Null");
107  QVERIFY(value09->typeString() == "QMJsonValueType_Array");
108  QVERIFY(value10->typeString() == "QMJsonValueType_Object");
109  QVERIFY(value11->typeString() == "QMJsonValueType_Null");
110  QVERIFY(value12->typeString() == "QMJsonValueType_Array");
111  QVERIFY(value13->typeString() == "QMJsonValueType_Object");
112  QVERIFY(value14->typeString() == "QMJsonValueType_Custom");
113  QVERIFY(value15->typeString() == "QMJsonValueType_Double");
114  QVERIFY(value16->typeString() == "QMJsonValueType_Double");
115  QVERIFY(value17->typeString() == "QMJsonValueType_Double");
116  QVERIFY(value18->typeString() == "QMJsonValueType_Double");
117  QVERIFY(value19->typeString() == "QMJsonValueType_Double");
118  QVERIFY(value20->typeString() == "QMJsonValueType_Double");
119  QVERIFY(value21->typeString() == "QMJsonValueType_Double");
120  QVERIFY(value22->typeString() == "QMJsonValueType_Double");
121  QVERIFY(value23->typeString() == "QMJsonValueType_Double");
122  QVERIFY(value24->typeString() == "QMJsonValueType_Double");
123  QVERIFY(value25->typeString() == "QMJsonValueType_Double");
124  QVERIFY(value26->typeString() == "QMJsonValueType_Double");
125  QVERIFY(value27->typeString() == "QMJsonValueType_Double");
126  QVERIFY(value28->typeString() == "QMJsonValueType_Double");
127  QVERIFY(value29->typeString() == "QMJsonValueType_Double");
128  QVERIFY(value30->typeString() == "QMJsonValueType_Double");
129  QVERIFY(value31->typeString() == "QMJsonValueType_Double");
130  QVERIFY(value32->typeString() == "QMJsonValueType_Double");
131  QVERIFY(value33->typeString() == "QMJsonValueType_Double");
132  QVERIFY(value34->typeString() == "QMJsonValueType_Double");
133 }
134 
135 void TestJson::QMJsonValue_file(void)
136 {
137  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
138  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
139  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
140  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
141  auto document1 = QMPointer<QMJsonValue>(new QMJsonValue(object1));
142 
143  object1->insert("key1", value1);
144  object1->insert("key2", value2);
145  object1->insert("key3", value3);
146 
147  QVERIFY(document1->toJsonFile("test.json") == true);
148 
149  auto document2 = QMJsonValue::fromJsonFile("test.json");
150 
151  QVERIFY(document2.isNull() == false);
152  QVERIFY(document1->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) ==
154 }
155 
156 void TestJson::QMJsonValue_sort(void)
157 {
158  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
159  auto object2 = QMPointer<QMJsonObject>(new QMJsonObject());
160  auto object3 = QMPointer<QMJsonObject>(new QMJsonObject());
161  auto object4 = QMPointer<QMJsonObject>(new QMJsonObject());
162  auto object5 = QMPointer<QMJsonObject>(new QMJsonObject());
163  auto object6 = QMPointer<QMJsonObject>(new QMJsonObject());
164  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
165  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
166  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
167  auto document1 = QMPointer<QMJsonValue>(new QMJsonValue(object5));
168  auto document2 = QMPointer<QMJsonValue>(new QMJsonValue(object6));
169 
170  object1->insert("apple", value1);
171  object1->insert("Baseball", value2);
172  object1->insert("cat", value3);
173 
174  object2->insert("Baseball", value2);
175  object2->insert("apple", value1);
176  object2->insert("cat", value3);
177 
178  object3->insert("cat", value3);
179  object3->insert("apple", value1);
180  object3->insert("Baseball", value2);
181 
182  object4->insert("cat", value3);
183  object4->insert("Baseball", value2);
184  object4->insert("apple", value1);
185 
186  object5->insert("dog", object1);
187  object5->insert("evil", object2);
188 
189  object6->insert("evil", object4);
190  object6->insert("dog", object3);
191 
192  QVERIFY(document1->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) !=
194 
195  QVERIFY(document1->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseInsensitive) ==
197 
198  QVERIFY(document1->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) ==
200 }
201 
202 void TestJson::QMJsonValue_bool(void)
203 {
204  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
205  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
206  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(false));
207  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
208  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(0));
209  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue("true"));
210  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue("false"));
211  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
212  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
213  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
214  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
215 
216  QVERIFY(value00->isBool() == false);
217  QVERIFY(value01->isBool() == true);
218  QVERIFY(value02->isBool() == true);
219  QVERIFY(value03->isBool() == false);
220  QVERIFY(value04->isBool() == false);
221  QVERIFY(value05->isBool() == false);
222  QVERIFY(value06->isBool() == false);
223  QVERIFY(value07->isBool() == false);
224  QVERIFY(value08->isBool() == false);
225  QVERIFY(value09->isBool() == false);
226  QVERIFY(value10->isBool() == false);
227 
228  QVERIFY(value00->toBool() == false);
229  QVERIFY(value01->toBool() == true);
230  QVERIFY(value02->toBool() == false);
231  QVERIFY(value03->toBool() == true);
232  QVERIFY(value04->toBool() == false);
233  QVERIFY(value05->toBool() == true);
234  QVERIFY(value06->toBool() == false);
235  QVERIFY(value07->toBool() == false);
236  QVERIFY(value08->toBool() == false);
237  QVERIFY(value09->toBool() == false);
238  QVERIFY(value10->toBool() == false);
239 
240  QVERIFY(value00->toBool(true) == true);
241  QVERIFY(value01->toBool(true) == true);
242  QVERIFY(value02->toBool(true) == false);
243  QVERIFY(value03->toBool(true) == true);
244  QVERIFY(value04->toBool(true) == true);
245  QVERIFY(value05->toBool(true) == true);
246  QVERIFY(value06->toBool(true) == true);
247  QVERIFY(value07->toBool(true) == true);
248  QVERIFY(value08->toBool(true) == true);
249  QVERIFY(value09->toBool(true) == true);
250  QVERIFY(value10->toBool(true) == true);
251 
252  QVERIFY(value00->to<bool>(true) == true);
253  QVERIFY(value01->to<bool>(true) == true);
254  QVERIFY(value02->to<bool>(true) == false);
255  QVERIFY(value03->to<bool>(true) == true);
256  QVERIFY(value04->to<bool>(true) == true);
257  QVERIFY(value05->to<bool>(true) == true);
258  QVERIFY(value06->to<bool>(true) == true);
259  QVERIFY(value07->to<bool>(true) == true);
260  QVERIFY(value08->to<bool>(true) == true);
261  QVERIFY(value09->to<bool>(true) == true);
262  QVERIFY(value10->to<bool>(true) == true);
263 
264  QVERIFY(value00->fromBool(true) == false);
265  QVERIFY(value01->fromBool(true) == true);
266  QVERIFY(value02->fromBool(false) == true);
267  QVERIFY(value03->fromBool(true) == true);
268  QVERIFY(value04->fromBool(false) == true);
269  QVERIFY(value05->fromBool(true) == true);
270  QVERIFY(value06->fromBool(false) == true);
271  QVERIFY(value07->fromBool(true) == true);
272  QVERIFY(value08->fromBool(true) == false);
273  QVERIFY(value09->fromBool(true) == false);
274  QVERIFY(value10->fromBool(true) == false);
275 
276  QVERIFY(value01->toBool() == true);
277  QVERIFY(value02->toBool() == false);
278  QVERIFY(value03->toDouble() == 1);
279  QVERIFY(value04->toDouble() == 0);
280  QVERIFY(value05->toString() == "true");
281  QVERIFY(value06->toString() == "false");
282  QVERIFY(value07->toString() == "true");
283 
284  QVERIFY(value00->from<bool>(true) == false);
285  QVERIFY(value01->from<bool>(true) == true);
286  QVERIFY(value02->from<bool>(true) == true);
287  QVERIFY(value03->from<bool>(true) == false);
288  QVERIFY(value04->from<bool>(true) == false);
289  QVERIFY(value05->from<bool>(true) == false);
290  QVERIFY(value06->from<bool>(true) == false);
291  QVERIFY(value07->from<bool>(true) == false);
292  QVERIFY(value08->from<bool>(true) == false);
293  QVERIFY(value09->from<bool>(true) == false);
294  QVERIFY(value10->from<bool>(true) == false);
295 }
296 
297 void TestJson::QMJsonValue_double(void)
298 {
299  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
300  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
301  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(false));
302  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
303  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue("4.8"));
304  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
305  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
306  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
307  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
308  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue((float)4.8));
309  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue((int8_t)15));
310  auto value11 = QMPointer<QMJsonValue>(new QMJsonValue((uint8_t)16));
311  auto value12 = QMPointer<QMJsonValue>(new QMJsonValue((int16_t)23));
312  auto value13 = QMPointer<QMJsonValue>(new QMJsonValue((uint16_t)42));
313  auto value14 = QMPointer<QMJsonValue>(new QMJsonValue((int32_t)4));
314  auto value15 = QMPointer<QMJsonValue>(new QMJsonValue((uint32_t)8));
315  auto value16 = QMPointer<QMJsonValue>(new QMJsonValue((int64_t)15));
316  auto value17 = QMPointer<QMJsonValue>(new QMJsonValue((uint64_t)16));
317 
318  QVERIFY(value00->isDouble() == false);
319  QVERIFY(value01->isDouble() == false);
320  QVERIFY(value02->isDouble() == false);
321  QVERIFY(value03->isDouble() == true);
322  QVERIFY(value04->isDouble() == false);
323  QVERIFY(value05->isDouble() == false);
324  QVERIFY(value06->isDouble() == false);
325  QVERIFY(value07->isDouble() == false);
326  QVERIFY(value08->isDouble() == false);
327  QVERIFY(value09->isDouble() == true);
328  QVERIFY(value10->isDouble() == true);
329  QVERIFY(value11->isDouble() == true);
330  QVERIFY(value12->isDouble() == true);
331  QVERIFY(value13->isDouble() == true);
332  QVERIFY(value14->isDouble() == true);
333  QVERIFY(value15->isDouble() == true);
334  QVERIFY(value16->isDouble() == true);
335  QVERIFY(value17->isDouble() == true);
336 
337  QVERIFY(value00->toDouble() == 0);
338  QVERIFY(value01->toDouble() == 1);
339  QVERIFY(value02->toDouble() == 0);
340  QVERIFY(value03->toDouble() == 4.8);
341  QVERIFY(value04->toDouble() == 4.8);
342  QVERIFY(value05->toDouble() == 0);
343  QVERIFY(value06->toDouble() == 0);
344  QVERIFY(value07->toDouble() == 0);
345  QVERIFY(value08->toDouble() == 0);
346  QVERIFY(value09->toDouble() == (float)4.8);
347  QVERIFY(value10->toDouble() == 15);
348  QVERIFY(value11->toDouble() == 16);
349  QVERIFY(value12->toDouble() == 23);
350  QVERIFY(value13->toDouble() == 42);
351  QVERIFY(value14->toDouble() == 4);
352  QVERIFY(value15->toDouble() == 8);
353  QVERIFY(value16->toDouble() == 15);
354  QVERIFY(value17->toDouble() == 16);
355 
356  QVERIFY(value00->toDouble(15.16) == 15.16);
357  QVERIFY(value01->toDouble(15.16) == 15.16);
358  QVERIFY(value02->toDouble(15.16) == 15.16);
359  QVERIFY(value03->toDouble(15.16) == 4.8);
360  QVERIFY(value04->toDouble(15.16) == 15.16);
361  QVERIFY(value05->toDouble(15.16) == 15.16);
362  QVERIFY(value06->toDouble(15.16) == 15.16);
363  QVERIFY(value07->toDouble(15.16) == 15.16);
364  QVERIFY(value08->toDouble(15.16) == 15.16);
365  QVERIFY(value09->toDouble(15.16) == (float)4.8);
366  QVERIFY(value10->toDouble(15.16) == 15);
367  QVERIFY(value11->toDouble(15.16) == 16);
368  QVERIFY(value12->toDouble(15.16) == 23);
369  QVERIFY(value13->toDouble(15.16) == 42);
370  QVERIFY(value14->toDouble(15.16) == 4);
371  QVERIFY(value15->toDouble(15.16) == 8);
372  QVERIFY(value16->toDouble(15.16) == 15);
373  QVERIFY(value17->toDouble(15.16) == 16);
374 
375  QVERIFY(value00->to<double>(15.16) == 15.16);
376  QVERIFY(value01->to<double>(15.16) == 15.16);
377  QVERIFY(value02->to<double>(15.16) == 15.16);
378  QVERIFY(value03->to<double>(15.16) == 4.8);
379  QVERIFY(value04->to<double>(15.16) == 15.16);
380  QVERIFY(value05->to<double>(15.16) == 15.16);
381  QVERIFY(value06->to<double>(15.16) == 15.16);
382  QVERIFY(value07->to<double>(15.16) == 15.16);
383  QVERIFY(value08->to<double>(15.16) == 15.16);
384  QVERIFY(value09->to<double>(15.16) == (float)4.8);
385  QVERIFY(value10->to<double>(15.16) == 15);
386  QVERIFY(value11->to<double>(15.16) == 16);
387  QVERIFY(value12->to<double>(15.16) == 23);
388  QVERIFY(value13->to<double>(15.16) == 42);
389  QVERIFY(value14->to<double>(15.16) == 4);
390  QVERIFY(value15->to<double>(15.16) == 8);
391  QVERIFY(value16->to<double>(15.16) == 15);
392  QVERIFY(value17->to<double>(15.16) == 16);
393 
394  QVERIFY(value00->fromDouble(4.8) == false);
395  QVERIFY(value01->fromDouble(1) == true);
396  QVERIFY(value02->fromDouble(0) == true);
397  QVERIFY(value03->fromDouble(23.42) == true);
398  QVERIFY(value04->fromDouble(4.8) == true);
399  QVERIFY(value05->fromDouble(23.42) == true);
400  QVERIFY(value06->fromDouble(4.8) == false);
401  QVERIFY(value07->fromDouble(4.8) == false);
402  QVERIFY(value08->fromDouble(4.8) == false);
403  QVERIFY(value09->fromDouble(4.8) == true);
404  QVERIFY(value10->fromDouble(4.8) == true);
405  QVERIFY(value11->fromDouble(4.8) == true);
406  QVERIFY(value12->fromDouble(4.8) == true);
407  QVERIFY(value13->fromDouble(4.8) == true);
408  QVERIFY(value14->fromDouble(4.8) == true);
409  QVERIFY(value15->fromDouble(4.8) == true);
410  QVERIFY(value16->fromDouble(4.8) == true);
411  QVERIFY(value17->fromDouble(4.8) == true);
412 
413  QVERIFY(value01->toBool() == true);
414  QVERIFY(value02->toBool() == false);
415  QVERIFY(value03->toDouble() == 23.42);
416  QVERIFY(value04->toString() == "4.8");
417  QVERIFY(value05->toString() == "23.42");
418 
419  QVERIFY(value00->from<double>(4.8) == false);
420  QVERIFY(value01->from<double>(4.8) == false);
421  QVERIFY(value02->from<double>(4.8) == false);
422  QVERIFY(value03->from<double>(4.8) == true);
423  QVERIFY(value04->from<double>(4.8) == false);
424  QVERIFY(value05->from<double>(4.8) == false);
425  QVERIFY(value06->from<double>(4.8) == false);
426  QVERIFY(value07->from<double>(4.8) == false);
427  QVERIFY(value08->from<double>(4.8) == false);
428  QVERIFY(value09->from<double>(4.8) == true);
429  QVERIFY(value10->from<double>(4.8) == true);
430  QVERIFY(value11->from<double>(4.8) == true);
431  QVERIFY(value12->from<double>(4.8) == true);
432  QVERIFY(value13->from<double>(4.8) == true);
433  QVERIFY(value14->from<double>(4.8) == true);
434  QVERIFY(value15->from<double>(4.8) == true);
435  QVERIFY(value16->from<double>(4.8) == true);
436  QVERIFY(value17->from<double>(4.8) == true);
437 }
438 
439 void TestJson::QMJsonValue_string(void)
440 {
441  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
442  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
443  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(false));
444  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
445  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(0));
446  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue("true"));
447  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue("false"));
448  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
449  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
450  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
451  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
452 
453  QVERIFY(value00->isString() == false);
454  QVERIFY(value01->isString() == false);
455  QVERIFY(value02->isString() == false);
456  QVERIFY(value03->isString() == false);
457  QVERIFY(value04->isString() == false);
458  QVERIFY(value05->isString() == true);
459  QVERIFY(value06->isString() == true);
460  QVERIFY(value07->isString() == true);
461  QVERIFY(value08->isString() == false);
462  QVERIFY(value09->isString() == false);
463  QVERIFY(value10->isString() == false);
464 
465  QVERIFY(value00->toString() == "null");
466  QVERIFY(value01->toString() == "true");
467  QVERIFY(value02->toString() == "false");
468  QVERIFY(value03->toString() == "4.8");
469  QVERIFY(value04->toString() == "0");
470  QVERIFY(value05->toString() == "true");
471  QVERIFY(value06->toString() == "false");
472  QVERIFY(value07->toString() == "Hello World");
473  QVERIFY(value08->toString() == "");
474  QVERIFY(value09->toString() == "");
475  QVERIFY(value10->toString() == "");
476 
477  QVERIFY(value00->toString("15.16") == "15.16");
478  QVERIFY(value01->toString("15.16") == "15.16");
479  QVERIFY(value02->toString("15.16") == "15.16");
480  QVERIFY(value03->toString("15.16") == "15.16");
481  QVERIFY(value04->toString("15.16") == "15.16");
482  QVERIFY(value05->toString("15.16") == "true");
483  QVERIFY(value06->toString("15.16") == "false");
484  QVERIFY(value07->toString("15.16") == "Hello World");
485  QVERIFY(value08->toString("15.16") == "15.16");
486  QVERIFY(value09->toString("15.16") == "15.16");
487  QVERIFY(value10->toString("15.16") == "15.16");
488 
489  QVERIFY(value00->to<QString>("15.16") == "15.16");
490  QVERIFY(value01->to<QString>("15.16") == "15.16");
491  QVERIFY(value02->to<QString>("15.16") == "15.16");
492  QVERIFY(value03->to<QString>("15.16") == "15.16");
493  QVERIFY(value04->to<QString>("15.16") == "15.16");
494  QVERIFY(value05->to<QString>("15.16") == "true");
495  QVERIFY(value06->to<QString>("15.16") == "false");
496  QVERIFY(value07->to<QString>("15.16") == "Hello World");
497  QVERIFY(value08->to<QString>("15.16") == "15.16");
498  QVERIFY(value09->to<QString>("15.16") == "15.16");
499  QVERIFY(value10->to<QString>("15.16") == "15.16");
500 
501  QVERIFY(value00->to<const char *>("15.16") == QString("15.16"));
502  QVERIFY(value01->to<const char *>("15.16") == QString("15.16"));
503  QVERIFY(value02->to<const char *>("15.16") == QString("15.16"));
504  QVERIFY(value03->to<const char *>("15.16") == QString("15.16"));
505  QVERIFY(value04->to<const char *>("15.16") == QString("15.16"));
506  QVERIFY(value05->to<const char *>("15.16") == QString("15.16"));
507  QVERIFY(value06->to<const char *>("15.16") == QString("15.16"));
508  QVERIFY(value07->to<const char *>("15.16") == QString("15.16"));
509  QVERIFY(value08->to<const char *>("15.16") == QString("15.16"));
510  QVERIFY(value09->to<const char *>("15.16") == QString("15.16"));
511  QVERIFY(value10->to<const char *>("15.16") == QString("15.16"));
512 
513  QVERIFY(value00->fromString("Test") == false);
514  QVERIFY(value01->fromString("true") == true);
515  QVERIFY(value02->fromString("false") == true);
516  QVERIFY(value03->fromString("Test") == false);
517  QVERIFY(value04->fromString("15.16") == true);
518  QVERIFY(value05->fromString("Test1") == true);
519  QVERIFY(value06->fromString("Test2") == true);
520  QVERIFY(value07->fromString("Test3") == true);
521  QVERIFY(value08->fromString("Test") == false);
522  QVERIFY(value09->fromString("Test") == false);
523  QVERIFY(value10->fromString("Test") == false);
524 
525  QVERIFY(value01->toBool() == true);
526  QVERIFY(value02->toBool() == false);
527  QVERIFY(value03->toDouble() == 4.8);
528  QVERIFY(value04->toDouble() == 15.16);
529  QVERIFY(value05->toString() == "Test1");
530  QVERIFY(value06->toString() == "Test2");
531  QVERIFY(value07->toString() == "Test3");
532 
533  QVERIFY(value00->from<QString>("Test") == false);
534  QVERIFY(value01->from<QString>("Test") == false);
535  QVERIFY(value02->from<QString>("Test") == false);
536  QVERIFY(value03->from<QString>("Test") == false);
537  QVERIFY(value04->from<QString>("Test") == false);
538  QVERIFY(value05->from<QString>("Test") == true);
539  QVERIFY(value06->from<QString>("Test") == true);
540  QVERIFY(value07->from<QString>("Test") == true);
541  QVERIFY(value08->from<QString>("Test") == false);
542  QVERIFY(value09->from<QString>("Test") == false);
543  QVERIFY(value10->from<QString>("Test") == false);
544 }
545 
546 void TestJson::QMJsonValue_array(void)
547 {
548  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
549  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
550  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(false));
551  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
552  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(0));
553  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue("true"));
554  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue("false"));
555  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
556  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
557  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
558  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
559  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
560 
561  value08->toArray()->append(value00);
562  value08->toArray()->append(value00);
563  value08->toArray()->append(value00);
564 
565  array1->append(value00);
566  array1->append(value00);
567 
568  QVERIFY(value00->isArray() == false);
569  QVERIFY(value01->isArray() == false);
570  QVERIFY(value02->isArray() == false);
571  QVERIFY(value03->isArray() == false);
572  QVERIFY(value04->isArray() == false);
573  QVERIFY(value05->isArray() == false);
574  QVERIFY(value06->isArray() == false);
575  QVERIFY(value07->isArray() == false);
576  QVERIFY(value08->isArray() == true);
577  QVERIFY(value09->isArray() == false);
578  QVERIFY(value10->isArray() == false);
579 
580  QVERIFY(value00->toArray()->count() == 0);
581  QVERIFY(value01->toArray()->count() == 0);
582  QVERIFY(value02->toArray()->count() == 0);
583  QVERIFY(value03->toArray()->count() == 0);
584  QVERIFY(value04->toArray()->count() == 0);
585  QVERIFY(value05->toArray()->count() == 0);
586  QVERIFY(value06->toArray()->count() == 0);
587  QVERIFY(value07->toArray()->count() == 0);
588  QVERIFY(value08->toArray()->count() == 3);
589  QVERIFY(value09->toArray()->count() == 0);
590  QVERIFY(value10->toArray()->count() == 0);
591 
592  QVERIFY(value00->toArray(array1)->count() == 2);
593  QVERIFY(value01->toArray(array1)->count() == 2);
594  QVERIFY(value02->toArray(array1)->count() == 2);
595  QVERIFY(value03->toArray(array1)->count() == 2);
596  QVERIFY(value04->toArray(array1)->count() == 2);
597  QVERIFY(value05->toArray(array1)->count() == 2);
598  QVERIFY(value06->toArray(array1)->count() == 2);
599  QVERIFY(value07->toArray(array1)->count() == 2);
600  QVERIFY(value08->toArray(array1)->count() == 3);
601  QVERIFY(value09->toArray(array1)->count() == 2);
602  QVERIFY(value10->toArray(array1)->count() == 2);
603 
604  QVERIFY(value00->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
605  QVERIFY(value01->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
606  QVERIFY(value02->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
607  QVERIFY(value03->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
608  QVERIFY(value04->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
609  QVERIFY(value05->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
610  QVERIFY(value06->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
611  QVERIFY(value07->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
612  QVERIFY(value08->to<QMPointer<QMJsonArray> >(array1)->count() == 3);
613  QVERIFY(value09->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
614  QVERIFY(value10->to<QMPointer<QMJsonArray> >(array1)->count() == 2);
615 
616  QVERIFY(value00->fromArray(QMPointer<QMJsonArray>()) == false);
617  QVERIFY(value01->fromArray(QMPointer<QMJsonArray>()) == false);
618  QVERIFY(value02->fromArray(QMPointer<QMJsonArray>()) == false);
619  QVERIFY(value03->fromArray(QMPointer<QMJsonArray>()) == false);
620  QVERIFY(value04->fromArray(QMPointer<QMJsonArray>()) == false);
621  QVERIFY(value05->fromArray(QMPointer<QMJsonArray>()) == false);
622  QVERIFY(value06->fromArray(QMPointer<QMJsonArray>()) == false);
623  QVERIFY(value07->fromArray(QMPointer<QMJsonArray>()) == false);
624  QVERIFY(value08->fromArray(QMPointer<QMJsonArray>()) == true);
625  QVERIFY(value09->fromArray(QMPointer<QMJsonArray>()) == false);
626  QVERIFY(value10->fromArray(QMPointer<QMJsonArray>()) == false);
627 
628  QVERIFY(value00->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
629  QVERIFY(value01->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
630  QVERIFY(value02->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
631  QVERIFY(value03->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
632  QVERIFY(value04->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
633  QVERIFY(value05->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
634  QVERIFY(value06->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
635  QVERIFY(value07->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
636  QVERIFY(value08->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
637  QVERIFY(value09->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
638  QVERIFY(value10->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>()) == false);
639 }
640 
641 void TestJson::QMJsonValue_object(void)
642 {
643  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
644  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
645  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(false));
646  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
647  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(0));
648  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue("true"));
649  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue("false"));
650  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
651  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
652  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
653  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
654  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
655 
656  value09->toObject()->insert("key1", value00);
657  value09->toObject()->insert("key2", value00);
658  value09->toObject()->insert("key3", value00);
659 
660  object1->insert("key1", value00);
661  object1->insert("key2", value00);
662 
663  QVERIFY(value00->isObject() == false);
664  QVERIFY(value01->isObject() == false);
665  QVERIFY(value02->isObject() == false);
666  QVERIFY(value03->isObject() == false);
667  QVERIFY(value04->isObject() == false);
668  QVERIFY(value05->isObject() == false);
669  QVERIFY(value06->isObject() == false);
670  QVERIFY(value07->isObject() == false);
671  QVERIFY(value08->isObject() == false);
672  QVERIFY(value09->isObject() == true);
673  QVERIFY(value10->isObject() == false);
674 
675  QVERIFY(value00->toObject()->count() == 0);
676  QVERIFY(value01->toObject()->count() == 0);
677  QVERIFY(value02->toObject()->count() == 0);
678  QVERIFY(value03->toObject()->count() == 0);
679  QVERIFY(value04->toObject()->count() == 0);
680  QVERIFY(value05->toObject()->count() == 0);
681  QVERIFY(value06->toObject()->count() == 0);
682  QVERIFY(value07->toObject()->count() == 0);
683  QVERIFY(value08->toObject()->count() == 0);
684  QVERIFY(value09->toObject()->count() == 3);
685  QVERIFY(value10->toObject()->count() == 0);
686 
687  QVERIFY(value00->toObject(object1)->count() == 2);
688  QVERIFY(value01->toObject(object1)->count() == 2);
689  QVERIFY(value02->toObject(object1)->count() == 2);
690  QVERIFY(value03->toObject(object1)->count() == 2);
691  QVERIFY(value04->toObject(object1)->count() == 2);
692  QVERIFY(value05->toObject(object1)->count() == 2);
693  QVERIFY(value06->toObject(object1)->count() == 2);
694  QVERIFY(value07->toObject(object1)->count() == 2);
695  QVERIFY(value08->toObject(object1)->count() == 2);
696  QVERIFY(value09->toObject(object1)->count() == 3);
697  QVERIFY(value10->toObject(object1)->count() == 2);
698 
699  QVERIFY(value00->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
700  QVERIFY(value01->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
701  QVERIFY(value02->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
702  QVERIFY(value03->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
703  QVERIFY(value04->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
704  QVERIFY(value05->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
705  QVERIFY(value06->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
706  QVERIFY(value07->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
707  QVERIFY(value08->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
708  QVERIFY(value09->to<QMPointer<QMJsonObject> >(object1)->count() == 3);
709  QVERIFY(value10->to<QMPointer<QMJsonObject> >(object1)->count() == 2);
710 
711  QVERIFY(value00->fromObject(QMPointer<QMJsonObject>()) == false);
712  QVERIFY(value01->fromObject(QMPointer<QMJsonObject>()) == false);
713  QVERIFY(value02->fromObject(QMPointer<QMJsonObject>()) == false);
714  QVERIFY(value03->fromObject(QMPointer<QMJsonObject>()) == false);
715  QVERIFY(value04->fromObject(QMPointer<QMJsonObject>()) == false);
716  QVERIFY(value05->fromObject(QMPointer<QMJsonObject>()) == false);
717  QVERIFY(value06->fromObject(QMPointer<QMJsonObject>()) == false);
718  QVERIFY(value07->fromObject(QMPointer<QMJsonObject>()) == false);
719  QVERIFY(value08->fromObject(QMPointer<QMJsonObject>()) == false);
720  QVERIFY(value09->fromObject(QMPointer<QMJsonObject>()) == true);
721  QVERIFY(value10->fromObject(QMPointer<QMJsonObject>()) == false);
722 
723  QVERIFY(value00->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
724  QVERIFY(value01->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
725  QVERIFY(value02->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
726  QVERIFY(value03->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
727  QVERIFY(value04->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
728  QVERIFY(value05->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
729  QVERIFY(value06->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
730  QVERIFY(value07->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
731  QVERIFY(value08->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
732  QVERIFY(value09->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
733  QVERIFY(value10->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>()) == false);
734 }
735 
736 void TestJson::QMJsonValue_custom(void)
737 {
738  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
739  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
740  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(false));
741  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
742  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(0));
743  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue("true"));
744  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue("false"));
745  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
746  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
747  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
748  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue(QSize()));
749 
750  QVERIFY(value00->is<QSize>() == false);
751  QVERIFY(value01->is<QSize>() == false);
752  QVERIFY(value02->is<QSize>() == false);
753  QVERIFY(value03->is<QSize>() == false);
754  QVERIFY(value04->is<QSize>() == false);
755  QVERIFY(value05->is<QSize>() == false);
756  QVERIFY(value06->is<QSize>() == false);
757  QVERIFY(value07->is<QSize>() == false);
758  QVERIFY(value08->is<QSize>() == false);
759  QVERIFY(value09->is<QSize>() == false);
760  QVERIFY(value10->is<QSize>() == true);
761 
762  QVERIFY(value00->to<QSize>(QSize(10, 10)) == QSize(10, 10));
763  QVERIFY(value01->to<QSize>(QSize(10, 10)) == QSize(10, 10));
764  QVERIFY(value02->to<QSize>(QSize(10, 10)) == QSize(10, 10));
765  QVERIFY(value03->to<QSize>(QSize(10, 10)) == QSize(10, 10));
766  QVERIFY(value04->to<QSize>(QSize(10, 10)) == QSize(10, 10));
767  QVERIFY(value05->to<QSize>(QSize(10, 10)) == QSize(10, 10));
768  QVERIFY(value06->to<QSize>(QSize(10, 10)) == QSize(10, 10));
769  QVERIFY(value07->to<QSize>(QSize(10, 10)) == QSize(10, 10));
770  QVERIFY(value08->to<QSize>(QSize(10, 10)) == QSize(10, 10));
771  QVERIFY(value09->to<QSize>(QSize(10, 10)) == QSize(10, 10));
772  QVERIFY(value10->to<QSize>(QSize(10, 10)) == QSize());
773 
774  QVERIFY(value00->from<QSize>(QSize()) == false);
775  QVERIFY(value01->from<QSize>(QSize()) == false);
776  QVERIFY(value02->from<QSize>(QSize()) == false);
777  QVERIFY(value03->from<QSize>(QSize()) == false);
778  QVERIFY(value04->from<QSize>(QSize()) == false);
779  QVERIFY(value05->from<QSize>(QSize()) == false);
780  QVERIFY(value06->from<QSize>(QSize()) == false);
781  QVERIFY(value07->from<QSize>(QSize()) == false);
782  QVERIFY(value08->from<QSize>(QSize()) == false);
783  QVERIFY(value09->from<QSize>(QSize()) == false);
784  QVERIFY(value10->from<QSize>(QSize()) == true);
785 }
786 
787 
788 void TestJson::QMJsonValue_value(void)
789 {
790  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
791  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
792  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
793  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
794  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
795  auto object2 = QMPointer<QMJsonObject>(new QMJsonObject());
796  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue(object1));
797 
798  object1->insert("array1", array1);
799  object2->insert("array2", array2);
800  array1->append(object2);
801  array2->append(value01);
802  array2->append(value02);
803  array2->append(value03);
804 
805  QVERIFY(value03->value("array1")->value(0)->value("array2")->value(0)->toBool() == true);
806  QVERIFY(value03->value("array1")->value(0)->value("array2")->value(1)->toDouble() == 4.8);
807 }
808 
809 void TestJson::QMJsonValue_from(void)
810 {
811  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
812  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
813  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
814  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
815  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
816  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
817  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
818 
819  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue());
820  auto value11 = QMPointer<QMJsonValue>(new QMJsonValue(true));
821  auto value12 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
822  auto value13 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
823  auto value14 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
824  auto value15 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
825  auto value16 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
826 
827  QVERIFY(value00->from(value10) == true);
828  QVERIFY(value00->from(value11) == false);
829  QVERIFY(value00->from(value12) == false);
830  QVERIFY(value00->from(value13) == false);
831  QVERIFY(value00->from(value14) == false);
832  QVERIFY(value00->from(value15) == false);
833  QVERIFY(value00->from(value16) == false);
834 
835  QVERIFY(value01->from(value10) == true);
836  QVERIFY(value01->toBool() == false);
837  QVERIFY(value01->from(value11) == true);
838  QVERIFY(value01->toBool() == true);
839  QVERIFY(value01->from(value12) == true);
840  QVERIFY(value01->toBool() == true);
841  QVERIFY(value01->from(value13) == true);
842  QVERIFY(value01->toBool() == false);
843  QVERIFY(value01->from(value14) == true);
844  QVERIFY(value01->toBool() == false);
845  QVERIFY(value01->from(value15) == true);
846  QVERIFY(value01->toBool() == false);
847  QVERIFY(value01->from(value16) == false);
848  QVERIFY(value01->toBool() == false);
849 
850  QVERIFY(value02->from(value10) == true);
851  QVERIFY(value02->toDouble() == 0);
852  QVERIFY(value02->from(value11) == true);
853  QVERIFY(value02->toDouble() == 1);
854  QVERIFY(value02->from(value12) == true);
855  QVERIFY(value02->toDouble() == 4.8);
856  QVERIFY(value02->from(value13) == true);
857  QVERIFY(value02->toDouble() == 0);
858  QVERIFY(value02->from(value14) == true);
859  QVERIFY(value02->toDouble() == 0);
860  QVERIFY(value02->from(value15) == true);
861  QVERIFY(value02->toDouble() == 0);
862  QVERIFY(value02->from(value16) == false);
863  QVERIFY(value02->toDouble() == 0);
864 
865  QVERIFY(value03->from(value10) == true);
866  QVERIFY(value03->toString() == "null");
867  QVERIFY(value03->from(value11) == true);
868  QVERIFY(value03->toString() == "true");
869  QVERIFY(value03->from(value12) == true);
870  QVERIFY(value03->toString() == "4.8");
871  QVERIFY(value03->from(value13) == true);
872  QVERIFY(value03->toString() == "Hello World");
873  QVERIFY(value03->from(value14) == true);
874  QVERIFY(value03->toString() == "");
875  QVERIFY(value03->from(value15) == true);
876  QVERIFY(value03->toString() == "");
877  QVERIFY(value03->from(value16) == false);
878  QVERIFY(value03->toString() == "");
879 
880  QVERIFY(value04->from(value10) == true);
881  QVERIFY(value04->from(value11) == true);
882  QVERIFY(value04->from(value12) == true);
883  QVERIFY(value04->from(value13) == true);
884  QVERIFY(value04->from(value14) == true);
885  QVERIFY(value04->from(value15) == true);
886  QVERIFY(value04->from(value16) == false);
887 
888  QVERIFY(value05->from(value10) == true);
889  QVERIFY(value05->from(value11) == true);
890  QVERIFY(value05->from(value12) == true);
891  QVERIFY(value05->from(value13) == true);
892  QVERIFY(value05->from(value14) == true);
893  QVERIFY(value05->from(value15) == true);
894  QVERIFY(value05->from(value16) == false);
895 
896  QVERIFY(value06->from(value10) == false);
897  QVERIFY(value06->from(value11) == false);
898  QVERIFY(value06->from(value12) == false);
899  QVERIFY(value06->from(value13) == false);
900  QVERIFY(value06->from(value14) == false);
901  QVERIFY(value06->from(value15) == false);
902  QVERIFY(value06->from(value16) == false);
903 }
904 
905 void TestJson::QMJsonValue_variant(void)
906 {
907  auto variant0 = QVariant();
908  auto variant1 = QVariant(true);
909  auto variant2 = QVariant(4.8);
910  auto variant3 = QVariant("Hello World");
911  auto variant4 = QVariant(QVariantList());
912  auto variant5 = QVariant(QVariantHash());
913 
914  auto value0 = QMJsonValue::fromVariant(variant0);
915  auto value1 = QMJsonValue::fromVariant(variant1);
916  auto value2 = QMJsonValue::fromVariant(variant2);
917  auto value3 = QMJsonValue::fromVariant(variant3);
918  auto value4 = QMJsonValue::fromVariant(variant4);
919  auto value5 = QMJsonValue::fromVariant(variant5);
920 
921  QVERIFY(value0->toVariant() == variant0);
922  QVERIFY(value1->toVariant() == variant1);
923  QVERIFY(value2->toVariant() == variant2);
924  QVERIFY(value3->toVariant() == variant3);
925  QVERIFY(value4->toVariant() == variant4);
926  QVERIFY(value5->toVariant() == variant5);
927 }
928 
929 void TestJson::QMJsonValue_signals(void)
930 {
931  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(true));
932  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
933  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
934  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray));
935  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject));
936  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue(QSize()));
937 
938  connect(value01.data(), &QMJsonValue::valueChanged, this, &TestJson::signaled);
939  connect(value02.data(), &QMJsonValue::valueChanged, this, &TestJson::signaled);
940  connect(value03.data(), &QMJsonValue::valueChanged, this, &TestJson::signaled);
941  connect(value04.data(), &QMJsonValue::valueChanged, this, &TestJson::signaled);
942  connect(value05.data(), &QMJsonValue::valueChanged, this, &TestJson::signaled);
943  connect(value06.data(), &QMJsonValue::valueChanged, this, &TestJson::signaled);
944 
945  mCount = 0;
946  value01->fromBool(true);
947  value01->from<bool>(true);
948  QVERIFY(mCount == 2);
949 
950  mCount = 0;
951  value02->fromDouble(4.8);
952  value02->from<double>(4.8);
953  QVERIFY(mCount == 2);
954 
955  mCount = 0;
956  value03->fromString("Test");
957  value03->from<QString>("Test");
958  QVERIFY(mCount == 2);
959 
960  mCount = 0;
961  value04->fromArray(QMPointer<QMJsonArray>());
962  value04->from<QMPointer<QMJsonArray> >(QMPointer<QMJsonArray>());
963  QVERIFY(mCount == 1);
964 
965  mCount = 0;
966  value05->fromObject(QMPointer<QMJsonObject>());
967  value05->from<QMPointer<QMJsonObject> >(QMPointer<QMJsonObject>());
968  QVERIFY(mCount == 1);
969 
970  mCount = 0;
971  value06->from<QSize>(QSize());
972  QVERIFY(mCount == 1);
973 }
974 
975 void TestJson::QMJsonValue_tofromjson_null(void)
976 {
977  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue());
978 
979  auto ojson00 = value00->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
980  auto pjson00 = value00->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
981 
982  QVERIFY(ojson00 == "null");
983  QVERIFY(pjson00 == "null");
984 
985  QVERIFY(QMJsonValue::fromJson(ojson00)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson00);
986  QVERIFY(QMJsonValue::fromJson(pjson00)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson00);
987 }
988 
989 void TestJson::QMJsonValue_tofromjson_bool(void)
990 {
991  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue(true));
992  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(false));
993 
994  auto ojson00 = value00->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
995  auto ojson01 = value01->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
996  auto pjson00 = value00->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
997  auto pjson01 = value01->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
998 
999  QVERIFY(ojson00 == "true");
1000  QVERIFY(ojson01 == "false");
1001  QVERIFY(pjson00 == "true");
1002  QVERIFY(pjson01 == "false");
1003 
1004  QVERIFY(QMJsonValue::fromJson(ojson00)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson00);
1005  QVERIFY(QMJsonValue::fromJson(ojson01)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson01);
1006  QVERIFY(QMJsonValue::fromJson(pjson00)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson00);
1007  QVERIFY(QMJsonValue::fromJson(pjson01)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson01);
1008 }
1009 
1010 void TestJson::QMJsonValue_tofromjson_double(void)
1011 {
1012  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue(0));
1013  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue(-.48));
1014  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue(-0.48));
1015  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue(-4));
1016  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue(-4.8));
1017  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue(-4.8e2));
1018  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue(-4.8e-2));
1019  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue(-4.8e+2));
1020  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue(-4.8e15));
1021  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue(-4.8e-15));
1022  auto value10 = QMPointer<QMJsonValue>(new QMJsonValue(-4.8e+15));
1023  auto value11 = QMPointer<QMJsonValue>(new QMJsonValue(.48));
1024  auto value12 = QMPointer<QMJsonValue>(new QMJsonValue(0.48));
1025  auto value13 = QMPointer<QMJsonValue>(new QMJsonValue(4));
1026  auto value14 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
1027  auto value15 = QMPointer<QMJsonValue>(new QMJsonValue(4.8e2));
1028  auto value16 = QMPointer<QMJsonValue>(new QMJsonValue(4.8e-2));
1029  auto value17 = QMPointer<QMJsonValue>(new QMJsonValue(4.8e+2));
1030  auto value18 = QMPointer<QMJsonValue>(new QMJsonValue(4.8e15));
1031  auto value19 = QMPointer<QMJsonValue>(new QMJsonValue(4.8e-15));
1032  auto value20 = QMPointer<QMJsonValue>(new QMJsonValue(4.8e+15));
1033 
1034  auto ojson00 = value00->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1035  auto ojson01 = value01->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1036  auto ojson02 = value02->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1037  auto ojson03 = value03->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1038  auto ojson04 = value04->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1039  auto ojson05 = value05->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1040  auto ojson06 = value06->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1041  auto ojson07 = value07->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1042  auto ojson08 = value08->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1043  auto ojson09 = value09->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1044  auto ojson10 = value10->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1045  auto ojson11 = value11->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1046  auto ojson12 = value12->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1047  auto ojson13 = value13->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1048  auto ojson14 = value14->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1049  auto ojson15 = value15->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1050  auto ojson16 = value16->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1051  auto ojson17 = value17->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1052  auto ojson18 = value18->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1053  auto ojson19 = value19->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1054  auto ojson20 = value20->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1055 
1056  auto pjson00 = value00->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1057  auto pjson01 = value01->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1058  auto pjson02 = value02->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1059  auto pjson03 = value03->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1060  auto pjson04 = value04->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1061  auto pjson05 = value05->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1062  auto pjson06 = value06->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1063  auto pjson07 = value07->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1064  auto pjson08 = value08->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1065  auto pjson09 = value09->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1066  auto pjson10 = value10->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1067  auto pjson11 = value11->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1068  auto pjson12 = value12->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1069  auto pjson13 = value13->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1070  auto pjson14 = value14->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1071  auto pjson15 = value15->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1072  auto pjson16 = value16->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1073  auto pjson17 = value17->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1074  auto pjson18 = value18->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1075  auto pjson19 = value19->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1076  auto pjson20 = value20->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1077 
1078  QVERIFY(ojson00 == "0");
1079  QVERIFY(ojson01 == "-0.48");
1080  QVERIFY(ojson02 == "-0.48");
1081  QVERIFY(ojson03 == "-4");
1082  QVERIFY(ojson04 == "-4.8");
1083  QVERIFY(ojson05 == "-480");
1084  QVERIFY(ojson06 == "-0.048");
1085  QVERIFY(ojson07 == "-480");
1086  QVERIFY(ojson08 == "-4.8e+15");
1087  QVERIFY(ojson09 == "-4.8e-15");
1088  QVERIFY(ojson10 == "-4.8e+15");
1089  QVERIFY(ojson11 == "0.48");
1090  QVERIFY(ojson12 == "0.48");
1091  QVERIFY(ojson13 == "4");
1092  QVERIFY(ojson14 == "4.8");
1093  QVERIFY(ojson15 == "480");
1094  QVERIFY(ojson16 == "0.048");
1095  QVERIFY(ojson17 == "480");
1096  QVERIFY(ojson18 == "4.8e+15");
1097  QVERIFY(ojson19 == "4.8e-15");
1098  QVERIFY(ojson20 == "4.8e+15");
1099 
1100  QVERIFY(pjson00 == "0");
1101  QVERIFY(pjson01 == "-0.48");
1102  QVERIFY(pjson02 == "-0.48");
1103  QVERIFY(pjson03 == "-4");
1104  QVERIFY(pjson04 == "-4.8");
1105  QVERIFY(pjson05 == "-480");
1106  QVERIFY(pjson06 == "-0.048");
1107  QVERIFY(pjson07 == "-480");
1108  QVERIFY(pjson08 == "-4.8e+15");
1109  QVERIFY(pjson09 == "-4.8e-15");
1110  QVERIFY(pjson10 == "-4.8e+15");
1111  QVERIFY(pjson11 == "0.48");
1112  QVERIFY(pjson12 == "0.48");
1113  QVERIFY(pjson13 == "4");
1114  QVERIFY(pjson14 == "4.8");
1115  QVERIFY(pjson15 == "480");
1116  QVERIFY(pjson16 == "0.048");
1117  QVERIFY(pjson17 == "480");
1118  QVERIFY(pjson18 == "4.8e+15");
1119  QVERIFY(pjson19 == "4.8e-15");
1120  QVERIFY(pjson20 == "4.8e+15");
1121 
1122  QVERIFY(QMJsonValue::fromJson(ojson00)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson00);
1123  QVERIFY(QMJsonValue::fromJson(ojson01)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson01);
1124  QVERIFY(QMJsonValue::fromJson(ojson02)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson02);
1125  QVERIFY(QMJsonValue::fromJson(ojson03)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson03);
1126  QVERIFY(QMJsonValue::fromJson(ojson04)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson04);
1127  QVERIFY(QMJsonValue::fromJson(ojson05)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson05);
1128  QVERIFY(QMJsonValue::fromJson(ojson06)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson06);
1129  QVERIFY(QMJsonValue::fromJson(ojson07)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson07);
1130  QVERIFY(QMJsonValue::fromJson(ojson08)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson08);
1131  QVERIFY(QMJsonValue::fromJson(ojson09)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson09);
1132  QVERIFY(QMJsonValue::fromJson(ojson10)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson10);
1133  QVERIFY(QMJsonValue::fromJson(ojson11)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson11);
1134  QVERIFY(QMJsonValue::fromJson(ojson12)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson12);
1135  QVERIFY(QMJsonValue::fromJson(ojson13)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson13);
1136  QVERIFY(QMJsonValue::fromJson(ojson14)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson14);
1137  QVERIFY(QMJsonValue::fromJson(ojson15)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson15);
1138  QVERIFY(QMJsonValue::fromJson(ojson16)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson16);
1139  QVERIFY(QMJsonValue::fromJson(ojson17)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson17);
1140  QVERIFY(QMJsonValue::fromJson(ojson18)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson18);
1141  QVERIFY(QMJsonValue::fromJson(ojson19)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson19);
1142  QVERIFY(QMJsonValue::fromJson(ojson20)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson20);
1143 
1144  QVERIFY(QMJsonValue::fromJson(pjson00)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson00);
1145  QVERIFY(QMJsonValue::fromJson(pjson01)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson01);
1146  QVERIFY(QMJsonValue::fromJson(pjson02)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson02);
1147  QVERIFY(QMJsonValue::fromJson(pjson03)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson03);
1148  QVERIFY(QMJsonValue::fromJson(pjson04)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson04);
1149  QVERIFY(QMJsonValue::fromJson(pjson05)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson05);
1150  QVERIFY(QMJsonValue::fromJson(pjson06)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson06);
1151  QVERIFY(QMJsonValue::fromJson(pjson07)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson07);
1152  QVERIFY(QMJsonValue::fromJson(pjson08)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson08);
1153  QVERIFY(QMJsonValue::fromJson(pjson09)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson09);
1154  QVERIFY(QMJsonValue::fromJson(pjson10)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson10);
1155  QVERIFY(QMJsonValue::fromJson(pjson11)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson11);
1156  QVERIFY(QMJsonValue::fromJson(pjson12)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson12);
1157  QVERIFY(QMJsonValue::fromJson(pjson13)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson13);
1158  QVERIFY(QMJsonValue::fromJson(pjson14)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson14);
1159  QVERIFY(QMJsonValue::fromJson(pjson15)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson15);
1160  QVERIFY(QMJsonValue::fromJson(pjson16)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson16);
1161  QVERIFY(QMJsonValue::fromJson(pjson17)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson17);
1162  QVERIFY(QMJsonValue::fromJson(pjson18)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson18);
1163  QVERIFY(QMJsonValue::fromJson(pjson19)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson19);
1164  QVERIFY(QMJsonValue::fromJson(pjson20)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson20);
1165 }
1166 
1167 void TestJson::QMJsonValue_tofromjson_string(void)
1168 {
1169  auto value00 = QMPointer<QMJsonValue>(new QMJsonValue(""));
1170  auto value01 = QMPointer<QMJsonValue>(new QMJsonValue("Test"));
1171  auto value02 = QMPointer<QMJsonValue>(new QMJsonValue("\"Test\""));
1172  auto value03 = QMPointer<QMJsonValue>(new QMJsonValue("\\"));
1173  auto value04 = QMPointer<QMJsonValue>(new QMJsonValue("/"));
1174  auto value05 = QMPointer<QMJsonValue>(new QMJsonValue("\b"));
1175  auto value06 = QMPointer<QMJsonValue>(new QMJsonValue("\f"));
1176  auto value07 = QMPointer<QMJsonValue>(new QMJsonValue("\n"));
1177  auto value08 = QMPointer<QMJsonValue>(new QMJsonValue("\r"));
1178  auto value09 = QMPointer<QMJsonValue>(new QMJsonValue("\t"));
1179 
1180  auto ojson00 = value00->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1181  auto ojson01 = value01->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1182  auto ojson02 = value02->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1183  auto ojson03 = value03->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1184  auto ojson04 = value04->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1185  auto ojson05 = value05->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1186  auto ojson06 = value06->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1187  auto ojson07 = value07->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1188  auto ojson08 = value08->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1189  auto ojson09 = value09->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1190 
1191  auto pjson00 = value00->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1192  auto pjson01 = value01->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1193  auto pjson02 = value02->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1194  auto pjson03 = value03->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1195  auto pjson04 = value04->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1196  auto pjson05 = value05->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1197  auto pjson06 = value06->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1198  auto pjson07 = value07->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1199  auto pjson08 = value08->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1200  auto pjson09 = value09->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1201 
1202  QVERIFY(ojson00 == "\"\"");
1203  QVERIFY(ojson01 == "\"Test\"");
1204  QVERIFY(ojson02 == "\"\\\"Test\\\"\"");
1205  QVERIFY(ojson03 == "\"\\\\\"");
1206  QVERIFY(ojson04 == "\"\\/\"");
1207  QVERIFY(ojson05 == "\"\\b\"");
1208  QVERIFY(ojson06 == "\"\\f\"");
1209  QVERIFY(ojson07 == "\"\\n\"");
1210  QVERIFY(ojson08 == "\"\\r\"");
1211  QVERIFY(ojson09 == "\"\\t\"");
1212 
1213  QVERIFY(pjson00 == "\"\"");
1214  QVERIFY(pjson01 == "\"Test\"");
1215  QVERIFY(pjson02 == "\"\\\"Test\\\"\"");
1216  QVERIFY(pjson03 == "\"\\\\\"");
1217  QVERIFY(pjson04 == "\"\\/\"");
1218  QVERIFY(pjson05 == "\"\\b\"");
1219  QVERIFY(pjson06 == "\"\\f\"");
1220  QVERIFY(pjson07 == "\"\\n\"");
1221  QVERIFY(pjson08 == "\"\\r\"");
1222  QVERIFY(pjson09 == "\"\\t\"");
1223 
1224  QVERIFY(QMJsonValue::fromJson(ojson00)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson00);
1225  QVERIFY(QMJsonValue::fromJson(ojson01)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson01);
1226  QVERIFY(QMJsonValue::fromJson(ojson02)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson02);
1227  QVERIFY(QMJsonValue::fromJson(ojson03)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson03);
1228  QVERIFY(QMJsonValue::fromJson(ojson04)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson04);
1229  QVERIFY(QMJsonValue::fromJson(ojson05)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson05);
1230  QVERIFY(QMJsonValue::fromJson(ojson06)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson06);
1231  QVERIFY(QMJsonValue::fromJson(ojson07)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson07);
1232  QVERIFY(QMJsonValue::fromJson(ojson08)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson08);
1233  QVERIFY(QMJsonValue::fromJson(ojson09)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson09);
1234 
1235  QVERIFY(QMJsonValue::fromJson(pjson00)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson00);
1236  QVERIFY(QMJsonValue::fromJson(pjson01)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson01);
1237  QVERIFY(QMJsonValue::fromJson(pjson02)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson02);
1238  QVERIFY(QMJsonValue::fromJson(pjson03)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson03);
1239  QVERIFY(QMJsonValue::fromJson(pjson04)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson04);
1240  QVERIFY(QMJsonValue::fromJson(pjson05)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson05);
1241  QVERIFY(QMJsonValue::fromJson(pjson06)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson06);
1242  QVERIFY(QMJsonValue::fromJson(pjson07)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson07);
1243  QVERIFY(QMJsonValue::fromJson(pjson08)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson08);
1244  QVERIFY(QMJsonValue::fromJson(pjson09)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson09);
1245 }
1246 
1247 void TestJson::QMJsonValue_tofromjson_array(void)
1248 {
1249  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1250  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
1251  auto array3 = QMPointer<QMJsonArray>(new QMJsonArray());
1252  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(array1));
1253  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue(array2));
1254  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(array3));
1255 
1256  array2->append(new QMJsonValue);
1257  array2->append(true);
1258  array2->append(4.8);
1259  array2->append("test");
1260 
1261  array3->append(array1);
1262  array3->append(array2);
1263 
1264  auto ojson1 = value1->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1265  auto ojson2 = value2->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1266  auto ojson3 = value3->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1267  auto pjson1 = value1->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1268  auto pjson2 = value2->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1269  auto pjson3 = value3->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1270 
1271  QVERIFY(ojson1 == "[]");
1272  QVERIFY(ojson2 == "[null,true,4.8,\"test\"]");
1273  QVERIFY(ojson3 == "[[],[null,true,4.8,\"test\"]]");
1274 
1275  QVERIFY(pjson1 == "[]");
1276  QVERIFY(pjson2 == "[\r\n"
1277  " null,\r\n"
1278  " true,\r\n"
1279  " 4.8,\r\n"
1280  " \"test\"\r\n"
1281  "]");
1282  QVERIFY(pjson3 == "[\r\n"
1283  " [],\r\n"
1284  " [\r\n"
1285  " null,\r\n"
1286  " true,\r\n"
1287  " 4.8,\r\n"
1288  " \"test\"\r\n"
1289  " ]\r\n"
1290  "]");
1291 
1292  QVERIFY(QMJsonValue::fromJson(ojson1)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson1);
1293  QVERIFY(QMJsonValue::fromJson(ojson2)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson2);
1294  QVERIFY(QMJsonValue::fromJson(ojson3)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson3);
1295 
1296  QVERIFY(QMJsonValue::fromJson(pjson1)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson1);
1297  QVERIFY(QMJsonValue::fromJson(pjson2)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson2);
1298  QVERIFY(QMJsonValue::fromJson(pjson3)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson3);
1299 }
1300 
1301 void TestJson::QMJsonValue_tofromjson_object(void)
1302 {
1303  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
1304  auto object2 = QMPointer<QMJsonObject>(new QMJsonObject());
1305  auto object3 = QMPointer<QMJsonObject>(new QMJsonObject());
1306  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(object1));
1307  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue(object2));
1308  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(object3));
1309 
1310  object2->insert("key0", new QMJsonValue);
1311  object2->insert("key1", true);
1312  object2->insert("key2", 4.8);
1313  object2->insert("key3", "test");
1314 
1315  object3->insert("key4", object1);
1316  object3->insert("key5", object2);
1317 
1318  auto ojson1 = value1->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1319  auto ojson2 = value2->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1320  auto ojson3 = value3->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive);
1321  auto pjson1 = value1->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1322  auto pjson2 = value2->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1323  auto pjson3 = value3->toJson(QMJsonFormat_Pretty, QMJsonSort_CaseSensitive);
1324 
1325  QVERIFY(ojson1 == "{}");
1326  QVERIFY(ojson2 == "{\"key0\":null,\"key1\":true,\"key2\":4.8,\"key3\":\"test\"}");
1327  QVERIFY(ojson3 == "{\"key4\":{},\"key5\":{\"key0\":null,\"key1\":true,\"key2\":4.8,\"key3\":\"test\"}}");
1328 
1329  QVERIFY(pjson1 == "{}");
1330  QVERIFY(pjson2 == "{\r\n"
1331  " \"key0\":null,\r\n"
1332  " \"key1\":true,\r\n"
1333  " \"key2\":4.8,\r\n"
1334  " \"key3\":\"test\"\r\n"
1335  "}");
1336  QVERIFY(pjson3 == "{\r\n"
1337  " \"key4\":{},\r\n"
1338  " \"key5\":{\r\n"
1339  " \"key0\":null,\r\n"
1340  " \"key1\":true,\r\n"
1341  " \"key2\":4.8,\r\n"
1342  " \"key3\":\"test\"\r\n"
1343  " }\r\n"
1344  "}");
1345 
1346  QVERIFY(QMJsonValue::fromJson(ojson1)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson1);
1347  QVERIFY(QMJsonValue::fromJson(ojson2)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson2);
1348  QVERIFY(QMJsonValue::fromJson(ojson3)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson3);
1349 
1350  QVERIFY(QMJsonValue::fromJson(pjson1)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson1);
1351  QVERIFY(QMJsonValue::fromJson(pjson2)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson2);
1352  QVERIFY(QMJsonValue::fromJson(pjson3)->toJson(QMJsonFormat_Optimized, QMJsonSort_CaseSensitive) == ojson3);
1353 }
static QMPointer< QMJsonValue > fromJson(const QString &json)
void valueChanged(void)
static QMPointer< QMJsonValue > fromVariant(const QVariant &value)
static QMPointer< QMJsonValue > fromJsonFile(const QString &filename)