testarray.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::QMJsonArray_create(void)
25 {
26  auto list1 = QList<QMPointer<QMJsonValue> >();
27  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
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  list1 << value1 << value2 << value3;
33  array1->append(value1);
34  array1->append(value2);
35  array1->append(value3);
36 
37  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray(list1));
38 
39  QVERIFY(array1->toDouble(0) == array2->toDouble(0));
40  QVERIFY(array1->toDouble(1) == array2->toDouble(1));
41  QVERIFY(array1->toDouble(2) == array2->toDouble(2));
42 }
43 
44 void TestJson::QMJsonArray_prepend(void)
45 {
46  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue());
47  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
48  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
49  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
50  auto rawValue1 = new QMJsonValue();
51  auto rawArray1 = new QMJsonArray();
52  auto rawObject1 = new QMJsonObject();
53 
54  array1->prepend(new QMJsonValue());
55  QVERIFY(array1->front().isNull() == false);
56  QVERIFY(array1->front()->isNull() == true);
57 
58  array1->prepend(QMPointer<QMJsonValue>());
59  QVERIFY(array1->front().isNull() == false);
60  QVERIFY(array1->front()->isNull() == true);
61 
62  array1->prepend(value1);
63  QVERIFY(array1->front().isNull() == false);
64  QVERIFY(array1->front()->isNull() == true);
65 
66  array1->prepend(rawValue1);
67  QVERIFY(array1->front().isNull() == false);
68  QVERIFY(array1->front()->isNull() == true);
69 
70  array1->prepend(new QMJsonArray());
71  QVERIFY(array1->front().isNull() == false);
72  QVERIFY(array1->front()->isArray() == true);
73 
74  array1->prepend(QMPointer<QMJsonArray>());
75  QVERIFY(array1->front().isNull() == false);
76  QVERIFY(array1->front()->isArray() == true);
77 
78  array1->prepend(array2);
79  QVERIFY(array1->front().isNull() == false);
80  QVERIFY(array1->front()->isArray() == true);
81 
82  array1->prepend(rawArray1);
83  QVERIFY(array1->front().isNull() == false);
84  QVERIFY(array1->front()->isArray() == true);
85 
86  array1->prepend(new QMJsonObject());
87  QVERIFY(array1->front().isNull() == false);
88  QVERIFY(array1->front()->isObject() == true);
89 
90  array1->prepend(QMPointer<QMJsonObject>());
91  QVERIFY(array1->front().isNull() == false);
92  QVERIFY(array1->front()->isObject() == true);
93 
94  array1->prepend(object1);
95  QVERIFY(array1->front().isNull() == false);
96  QVERIFY(array1->front()->isObject() == true);
97 
98  array1->prepend(rawObject1);
99  QVERIFY(array1->front().isNull() == false);
100  QVERIFY(array1->front()->isObject() == true);
101 
102  array1->prepend(QMPointer<QMJsonValue>());
103  QVERIFY(array1->front().isNull() == false);
104  QVERIFY(array1->front()->isNull() == true);
105 
106  array1->prepend(4.8);
107  QVERIFY(array1->front().isNull() == false);
108  QVERIFY(array1->front()->isDouble() == true);
109 
110  array1->prepend("Hello World");
111  QVERIFY(array1->front().isNull() == false);
112  QVERIFY(array1->front()->isString() == true);
113 
114  array1->prepend(QString("Hello World"));
115  QVERIFY(array1->front().isNull() == false);
116  QVERIFY(array1->front()->isString() == true);
117 
118  array1->prepend(new QMJsonValue(4.8));
119  QVERIFY(array1->front().isNull() == false);
120  QVERIFY(array1->front()->isDouble() == true);
121 
122  array1->prepend(new QMJsonValue("Hello World"));
123  QVERIFY(array1->front().isNull() == false);
124  QVERIFY(array1->front()->isString() == true);
125 
126  array1->prepend(new QMJsonValue(QString("Hello World")));
127  QVERIFY(array1->front().isNull() == false);
128  QVERIFY(array1->front()->isString() == true);
129 
130  array1->prepend(QMPointer<QMJsonValue>(new QMJsonValue(4.8)));
131  QVERIFY(array1->front().isNull() == false);
132  QVERIFY(array1->front()->isDouble() == true);
133 
134  array1->prepend(QMPointer<QMJsonValue>(new QMJsonValue("Hello World")));
135  QVERIFY(array1->front().isNull() == false);
136  QVERIFY(array1->front()->isString() == true);
137 
138  array1->prepend(QMPointer<QMJsonValue>(new QMJsonValue(QString("Hello World"))));
139  QVERIFY(array1->front().isNull() == false);
140  QVERIFY(array1->front()->isString() == true);
141 }
142 
143 void TestJson::QMJsonArray_append(void)
144 {
145  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue());
146  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
147  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
148  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
149  auto rawValue1 = new QMJsonValue();
150  auto rawArray1 = new QMJsonArray();
151  auto rawObject1 = new QMJsonObject();
152 
153  array1->append(new QMJsonValue());
154  QVERIFY(array1->back().isNull() == false);
155  QVERIFY(array1->back()->isNull() == true);
156 
157  array1->append(QMPointer<QMJsonValue>());
158  QVERIFY(array1->back().isNull() == false);
159  QVERIFY(array1->back()->isNull() == true);
160 
161  array1->append(value1);
162  QVERIFY(array1->back().isNull() == false);
163  QVERIFY(array1->back()->isNull() == true);
164 
165  array1->append(rawValue1);
166  QVERIFY(array1->back().isNull() == false);
167  QVERIFY(array1->back()->isNull() == true);
168 
169  array1->append(new QMJsonArray());
170  QVERIFY(array1->back().isNull() == false);
171  QVERIFY(array1->back()->isArray() == true);
172 
173  array1->append(QMPointer<QMJsonArray>());
174  QVERIFY(array1->back().isNull() == false);
175  QVERIFY(array1->back()->isArray() == true);
176 
177  array1->append(array2);
178  QVERIFY(array1->back().isNull() == false);
179  QVERIFY(array1->back()->isArray() == true);
180 
181  array1->append(rawArray1);
182  QVERIFY(array1->back().isNull() == false);
183  QVERIFY(array1->back()->isArray() == true);
184 
185  array1->append(new QMJsonObject());
186  QVERIFY(array1->back().isNull() == false);
187  QVERIFY(array1->back()->isObject() == true);
188 
189  array1->append(QMPointer<QMJsonObject>());
190  QVERIFY(array1->back().isNull() == false);
191  QVERIFY(array1->back()->isObject() == true);
192 
193  array1->append(object1);
194  QVERIFY(array1->back().isNull() == false);
195  QVERIFY(array1->back()->isObject() == true);
196 
197  array1->append(rawObject1);
198  QVERIFY(array1->back().isNull() == false);
199  QVERIFY(array1->back()->isObject() == true);
200 
201  array1->append(QMPointer<QMJsonValue>());
202  QVERIFY(array1->back().isNull() == false);
203  QVERIFY(array1->back()->isNull() == true);
204 
205  array1->append(4.8);
206  QVERIFY(array1->back().isNull() == false);
207  QVERIFY(array1->back()->isDouble() == true);
208 
209  array1->append("Hello World");
210  QVERIFY(array1->back().isNull() == false);
211  QVERIFY(array1->back()->isString() == true);
212 
213  array1->append(QString("Hello World"));
214  QVERIFY(array1->back().isNull() == false);
215  QVERIFY(array1->back()->isString() == true);
216 
217  array1->append(new QMJsonValue(4.8));
218  QVERIFY(array1->back().isNull() == false);
219  QVERIFY(array1->back()->isDouble() == true);
220 
221  array1->append(new QMJsonValue("Hello World"));
222  QVERIFY(array1->back().isNull() == false);
223  QVERIFY(array1->back()->isString() == true);
224 
225  array1->append(new QMJsonValue(QString("Hello World")));
226  QVERIFY(array1->back().isNull() == false);
227  QVERIFY(array1->back()->isString() == true);
228 
229  array1->append(QMPointer<QMJsonValue>(new QMJsonValue(4.8)));
230  QVERIFY(array1->back().isNull() == false);
231  QVERIFY(array1->back()->isDouble() == true);
232 
233  array1->append(QMPointer<QMJsonValue>(new QMJsonValue("Hello World")));
234  QVERIFY(array1->back().isNull() == false);
235  QVERIFY(array1->back()->isString() == true);
236 
237  array1->append(QMPointer<QMJsonValue>(new QMJsonValue(QString("Hello World"))));
238  QVERIFY(array1->back().isNull() == false);
239  QVERIFY(array1->back()->isString() == true);
240 }
241 
242 void TestJson::QMJsonArray_insert(void)
243 {
244  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue());
245  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
246  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
247  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
248  auto rawValue1 = new QMJsonValue();
249  auto rawArray1 = new QMJsonArray();
250  auto rawObject1 = new QMJsonObject();
251 
252  array1->insert(0, new QMJsonValue());
253  QVERIFY(array1->front().isNull() == false);
254  QVERIFY(array1->front()->isNull() == true);
255 
256  array1->insert(0, QMPointer<QMJsonValue>());
257  QVERIFY(array1->front().isNull() == false);
258  QVERIFY(array1->front()->isNull() == true);
259 
260  array1->insert(0, value1);
261  QVERIFY(array1->front().isNull() == false);
262  QVERIFY(array1->front()->isNull() == true);
263 
264  array1->insert(0, rawValue1);
265  QVERIFY(array1->front().isNull() == false);
266  QVERIFY(array1->front()->isNull() == true);
267 
268  array1->insert(0, new QMJsonArray());
269  QVERIFY(array1->front().isNull() == false);
270  QVERIFY(array1->front()->isArray() == true);
271 
272  array1->insert(0, QMPointer<QMJsonArray>());
273  QVERIFY(array1->front().isNull() == false);
274  QVERIFY(array1->front()->isArray() == true);
275 
276  array1->insert(0, array2);
277  QVERIFY(array1->front().isNull() == false);
278  QVERIFY(array1->front()->isArray() == true);
279 
280  array1->insert(0, rawArray1);
281  QVERIFY(array1->front().isNull() == false);
282  QVERIFY(array1->front()->isArray() == true);
283 
284  array1->insert(0, new QMJsonObject());
285  QVERIFY(array1->front().isNull() == false);
286  QVERIFY(array1->front()->isObject() == true);
287 
288  array1->insert(0, QMPointer<QMJsonObject>());
289  QVERIFY(array1->front().isNull() == false);
290  QVERIFY(array1->front()->isObject() == true);
291 
292  array1->insert(0, object1);
293  QVERIFY(array1->front().isNull() == false);
294  QVERIFY(array1->front()->isObject() == true);
295 
296  array1->insert(0, rawObject1);
297  QVERIFY(array1->front().isNull() == false);
298  QVERIFY(array1->front()->isObject() == true);
299 
300  array1->insert(0, QMPointer<QMJsonValue>());
301  QVERIFY(array1->front().isNull() == false);
302  QVERIFY(array1->front()->isNull() == true);
303 
304  array1->insert(0, 4.8);
305  QVERIFY(array1->front().isNull() == false);
306  QVERIFY(array1->front()->isDouble() == true);
307 
308  array1->insert(0, "Hello World");
309  QVERIFY(array1->front().isNull() == false);
310  QVERIFY(array1->front()->isString() == true);
311 
312  array1->insert(0, QString("Hello World"));
313  QVERIFY(array1->front().isNull() == false);
314  QVERIFY(array1->front()->isString() == true);
315 
316  array1->insert(0, new QMJsonValue(4.8));
317  QVERIFY(array1->front().isNull() == false);
318  QVERIFY(array1->front()->isDouble() == true);
319 
320  array1->insert(0, new QMJsonValue("Hello World"));
321  QVERIFY(array1->front().isNull() == false);
322  QVERIFY(array1->front()->isString() == true);
323 
324  array1->insert(0, new QMJsonValue(QString("Hello World")));
325  QVERIFY(array1->front().isNull() == false);
326  QVERIFY(array1->front()->isString() == true);
327 
328  array1->insert(0, QMPointer<QMJsonValue>(new QMJsonValue(4.8)));
329  QVERIFY(array1->front().isNull() == false);
330  QVERIFY(array1->front()->isDouble() == true);
331 
332  array1->insert(0, QMPointer<QMJsonValue>(new QMJsonValue("Hello World")));
333  QVERIFY(array1->front().isNull() == false);
334  QVERIFY(array1->front()->isString() == true);
335 
336  array1->insert(0, QMPointer<QMJsonValue>(new QMJsonValue(QString("Hello World"))));
337  QVERIFY(array1->front().isNull() == false);
338  QVERIFY(array1->front()->isString() == true);
339 }
340 
341 void TestJson::QMJsonArray_indexOf(void)
342 {
343  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
344  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
345  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
346  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
347  auto value4 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray()));
348  auto value5 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject()));
349  auto value6 = QMPointer<QMJsonValue>(new QMJsonValue(15.16));
350  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
351 
352  array1->append(value0);
353  array1->append(value1);
354  array1->append(value2);
355  array1->append(value3);
356  array1->append(value4);
357  array1->append(value5);
358  array1->append(value5);
359  array1->append(value5);
360 
361  QVERIFY(array1->indexOf(value0) == 0);
362  QVERIFY(array1->indexOf(value1) == 1);
363  QVERIFY(array1->indexOf(value2) == 2);
364  QVERIFY(array1->indexOf(value3) == 3);
365  QVERIFY(array1->indexOf(value4) == 4);
366  QVERIFY(array1->indexOf(value5) == 5);
367  QVERIFY(array1->indexOf(value6) == -1);
368 }
369 
370 void TestJson::QMJsonArray_lastIndexOf(void)
371 {
372  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
373  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
374  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
375  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
376  auto value4 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray()));
377  auto value5 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject()));
378  auto value6 = QMPointer<QMJsonValue>(new QMJsonValue(15.16));
379  auto value7 = QMPointer<QMJsonValue>(new QMJsonValue(QRect()));
380  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
381 
382  array1->append(value0);
383  array1->append(value1);
384  array1->append(value2);
385  array1->append(value3);
386  array1->append(value4);
387  array1->append(value5);
388  array1->append(value5);
389  array1->append(value5);
390 
391  QVERIFY(array1->lastIndexOf(value0) == 0);
392  QVERIFY(array1->lastIndexOf(value1) == 1);
393  QVERIFY(array1->lastIndexOf(value2) == 2);
394  QVERIFY(array1->lastIndexOf(value3) == 3);
395  QVERIFY(array1->lastIndexOf(value4) == 4);
396  QVERIFY(array1->lastIndexOf(value5) == 7);
397  QVERIFY(array1->lastIndexOf(value6) == -1);
398  QVERIFY(array1->lastIndexOf(value0, -1) == 0);
399  QVERIFY(array1->lastIndexOf(value1, -1) == 1);
400  QVERIFY(array1->lastIndexOf(value2, -1) == 2);
401  QVERIFY(array1->lastIndexOf(value3, -1) == 3);
402  QVERIFY(array1->lastIndexOf(value4, -1) == 4);
403  QVERIFY(array1->lastIndexOf(value5, -1) == 7);
404  QVERIFY(array1->lastIndexOf(value6, -1) == -1);
405  QVERIFY(array1->lastIndexOf(value5, 7) == 7);
406  QVERIFY(array1->lastIndexOf(value5, 6) == 6);
407  QVERIFY(array1->lastIndexOf(value5, 5) == 5);
408  QVERIFY(array1->lastIndexOf(value5, 4) == -1);
409 
410  QVERIFY(array1->lastIndexOf(value1, -2) == 1);
411  QVERIFY(array1->lastIndexOf(value1, 100) == 1);
412 }
413 
414 void TestJson::QMJsonArray_contains(void)
415 {
416  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
417  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
418  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
419  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
420  auto value4 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray()));
421  auto value5 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject()));
422  auto value6 = QMPointer<QMJsonValue>(new QMJsonValue(15.16));
423  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
424 
425  array1->append(value0);
426  array1->append(value1);
427  array1->append(value2);
428  array1->append(value3);
429  array1->append(value4);
430  array1->append(value5);
431  array1->append(value5);
432  array1->append(value5);
433 
434  QVERIFY(array1->contains(value0) == true);
435  QVERIFY(array1->contains(value1) == true);
436  QVERIFY(array1->contains(value2) == true);
437  QVERIFY(array1->contains(value3) == true);
438  QVERIFY(array1->contains(value4) == true);
439  QVERIFY(array1->contains(value5) == true);
440  QVERIFY(array1->contains(value6) == false);
441 }
442 
443 void TestJson::QMJsonArray_unite(void)
444 {
445  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
446  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
447  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
448  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
449  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
450  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
451  auto array3 = QMPointer<QMJsonArray>(new QMJsonArray());
452  auto array4 = QMPointer<QMJsonArray>(new QMJsonArray());
453 
454  array1->append(value0);
455  array1->append(value1);
456  array2->append(value2);
457  array2->append(value3);
458 
459  array3->unite(array1, QMJsonArrayUnitePolicy_Prepend);
460  array3->unite(array2, QMJsonArrayUnitePolicy_Prepend);
461 
462  array4->unite(array1, QMJsonArrayUnitePolicy_Append);
463  array4->unite(array2, QMJsonArrayUnitePolicy_Append);
464 
465  QVERIFY(array3->value(0)->isDouble() == true);
466  QVERIFY(array3->value(1)->isString() == true);
467  QVERIFY(array3->value(2)->isBool() == true);
468  QVERIFY(array3->value(3)->isNull() == true);
469 
470  QVERIFY(array4->value(0)->isNull() == true);
471  QVERIFY(array4->value(1)->isBool() == true);
472  QVERIFY(array4->value(2)->isString() == true);
473  QVERIFY(array4->value(3)->isDouble() == true);
474 }
475 
476 void TestJson::QMJsonArray_count(void)
477 {
478  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
479  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
480  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
481  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
482  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
483 
484  QVERIFY(array1->count() == 0);
485  QVERIFY(array1->length() == 0);
486  QVERIFY(array1->size() == 0);
487 
488  array1->append(value0);
489  QVERIFY(array1->count() == 1);
490  QVERIFY(array1->length() == 1);
491  QVERIFY(array1->size() == 1);
492 
493  array1->append(value1);
494  QVERIFY(array1->count() == 2);
495  QVERIFY(array1->length() == 2);
496  QVERIFY(array1->size() == 2);
497 
498  array1->append(value2);
499  QVERIFY(array1->count() == 3);
500  QVERIFY(array1->length() == 3);
501  QVERIFY(array1->size() == 3);
502 
503  array1->append(value3);
504  QVERIFY(array1->count() == 4);
505  QVERIFY(array1->length() == 4);
506  QVERIFY(array1->size() == 4);
507 
508  array1->clear();
509  QVERIFY(array1->count() == 0);
510  QVERIFY(array1->length() == 0);
511  QVERIFY(array1->size() == 0);
512 }
513 
514 void TestJson::QMJsonArray_clear(void)
515 {
516  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
517  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
518  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
519  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
520  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
521  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
522  auto object1 = QMPointer<QMJsonObject>(new QMJsonObject());
523  auto document1 = QMPointer<QMJsonValue>(new QMJsonValue(array1));
524  auto document2 = QMPointer<QMJsonValue>(new QMJsonValue(array2));
525  auto document3 = QMPointer<QMJsonValue>(new QMJsonValue(object1));
526 
527  array1->append(value0);
528  array1->append(value1);
529  object1->insert("key2", value2);
530  object1->insert("key3", value3);
531  array2->append(array1);
532  array2->append(object1);
533 
534  array2->clear();
535 
536  QVERIFY(document1->toJson() == "[]");
537  QVERIFY(document2->toJson() == "[]");
538  QVERIFY(document3->toJson() == "{}");
539 }
540 
541 void TestJson::QMJsonArray_empty(void)
542 {
543  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
544  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
545  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
546  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
547  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
548 
549  QVERIFY(array1->isEmpty() == true);
550  QVERIFY(array1->empty() == true);
551 
552  array1->append(value0);
553  array1->append(value1);
554  array1->append(value2);
555  array1->append(value3);
556 
557  QVERIFY(array1->isEmpty() == false);
558  QVERIFY(array1->empty() == false);
559 
560  array1->clear();
561 
562  QVERIFY(array1->isEmpty() == true);
563  QVERIFY(array1->empty() == true);
564 }
565 
566 void TestJson::QMJsonArray_with(void)
567 {
568  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
569  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
570  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
571  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
572  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
573 
574  QVERIFY(array1->startsWith(value0) == false);
575  QVERIFY(array1->endsWith(value3) == false);
576 
577  array1->append(value0);
578  array1->append(value1);
579  array1->append(value2);
580  array1->append(value3);
581 
582  QVERIFY(array1->startsWith(value0) == true);
583  QVERIFY(array1->endsWith(value3) == true);
584 
585  array1->clear();
586 
587  QVERIFY(array1->startsWith(value0) == false);
588  QVERIFY(array1->endsWith(value3) == false);
589 }
590 
591 void TestJson::QMJsonArray_remove(void)
592 {
593  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
594  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
595  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
596  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
597  auto value4 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray()));
598  auto value5 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject()));
599  auto value6 = QMPointer<QMJsonValue>(new QMJsonValue(15.16));
600  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
601 
602  array1->append(value0);
603  array1->append(value1);
604  array1->append(value2);
605  array1->append(value3);
606  array1->append(value4);
607  array1->append(value5);
608  array1->append(value5);
609  array1->append(value5);
610 
611  array1->removeAll(value6);
612  QVERIFY(array1->count() == 8);
613  QVERIFY(array1->contains(value6) == false);
614 
615  array1->removeAll(value0);
616  QVERIFY(array1->count() == 7);
617  QVERIFY(array1->contains(value0) == false);
618 
619  array1->removeAll(value1);
620  QVERIFY(array1->count() == 6);
621  QVERIFY(array1->contains(value1) == false);
622 
623  array1->removeAll(value2);
624  QVERIFY(array1->count() == 5);
625  QVERIFY(array1->contains(value2) == false);
626 
627  array1->removeAll(value3);
628  QVERIFY(array1->count() == 4);
629  QVERIFY(array1->contains(value3) == false);
630 
631  array1->removeAll(value4);
632  QVERIFY(array1->count() == 3);
633  QVERIFY(array1->contains(value4) == false);
634 
635  array1->removeAll(value5);
636  QVERIFY(array1->count() == 0);
637  QVERIFY(array1->contains(value5) == false);
638 
639  array1->removeAll(QMPointer<QMJsonValue>());
640  QVERIFY(array1->count() == 0);
641 
642  array1->append(value0);
643  array1->append(value1);
644  array1->append(value2);
645  array1->append(value3);
646  array1->append(value4);
647  array1->append(value5);
648  array1->append(value5);
649  array1->append(value5);
650 
651  array1->removeOne(value6);
652  QVERIFY(array1->count() == 8);
653  QVERIFY(array1->contains(value6) == false);
654 
655  array1->removeOne(value0);
656  QVERIFY(array1->count() == 7);
657  QVERIFY(array1->contains(value0) == false);
658 
659  array1->removeOne(value1);
660  QVERIFY(array1->count() == 6);
661  QVERIFY(array1->contains(value1) == false);
662 
663  array1->removeOne(value2);
664  QVERIFY(array1->count() == 5);
665  QVERIFY(array1->contains(value2) == false);
666 
667  array1->removeOne(value3);
668  QVERIFY(array1->count() == 4);
669  QVERIFY(array1->contains(value3) == false);
670 
671  array1->removeOne(value4);
672  QVERIFY(array1->count() == 3);
673  QVERIFY(array1->contains(value4) == false);
674 
675  array1->removeOne(value5);
676  QVERIFY(array1->count() == 2);
677  QVERIFY(array1->contains(value5) == true);
678 
679  array1->removeOne(value5);
680  QVERIFY(array1->count() == 1);
681  QVERIFY(array1->contains(value5) == true);
682 
683  array1->removeOne(value5);
684  QVERIFY(array1->count() == 0);
685  QVERIFY(array1->contains(value5) == false);
686 
687  array1->removeOne(QMPointer<QMJsonValue>());
688  QVERIFY(array1->count() == 0);
689 
690  array1->append(value0);
691  array1->append(value1);
692  array1->append(value2);
693  array1->append(value3);
694  array1->append(value4);
695  array1->append(value5);
696  array1->append(value5);
697  array1->append(value5);
698 
699  array1->removeAt(1);
700  QVERIFY(array1->count() == 7);
701  QVERIFY(array1->contains(value1) == false);
702 
703  array1->removeAt(1);
704  QVERIFY(array1->count() == 6);
705  QVERIFY(array1->contains(value2) == false);
706 
707  array1->removeAt(1);
708  QVERIFY(array1->count() == 5);
709  QVERIFY(array1->contains(value3) == false);
710 
711  array1->removeAt(1);
712  QVERIFY(array1->count() == 4);
713  QVERIFY(array1->contains(value4) == false);
714 
715  array1->removeAt(1);
716  QVERIFY(array1->count() == 3);
717  QVERIFY(array1->contains(value5) == true);
718 
719  array1->removeAt(1);
720  QVERIFY(array1->count() == 2);
721  QVERIFY(array1->contains(value5) == true);
722 
723  array1->removeAt(1);
724  QVERIFY(array1->count() == 1);
725  QVERIFY(array1->contains(value5) == false);
726 
727  array1->removeAt(0);
728  QVERIFY(array1->count() == 0);
729  QVERIFY(array1->contains(value0) == false);
730 
731  array1->removeAt(-1);
732  array1->removeAt(0);
733  array1->removeAt(100);
734  QVERIFY(array1->count() == 0);
735 
736  array1->append(value0);
737  array1->append(value1);
738  array1->append(value2);
739  array1->append(value3);
740  array1->append(value4);
741  array1->append(value5);
742  array1->append(value5);
743  array1->append(value5);
744 
745  array1->removeFirst();
746  QVERIFY(array1->count() == 7);
747  QVERIFY(array1->contains(value0) == false);
748 
749  array1->removeFirst();
750  QVERIFY(array1->count() == 6);
751  QVERIFY(array1->contains(value1) == false);
752 
753  array1->removeFirst();
754  QVERIFY(array1->count() == 5);
755  QVERIFY(array1->contains(value2) == false);
756 
757  array1->removeFirst();
758  QVERIFY(array1->count() == 4);
759  QVERIFY(array1->contains(value3) == false);
760 
761  array1->removeFirst();
762  QVERIFY(array1->count() == 3);
763  QVERIFY(array1->contains(value4) == false);
764 
765  array1->removeFirst();
766  QVERIFY(array1->count() == 2);
767  QVERIFY(array1->contains(value5) == true);
768 
769  array1->removeFirst();
770  QVERIFY(array1->count() == 1);
771  QVERIFY(array1->contains(value5) == true);
772 
773  array1->removeFirst();
774  QVERIFY(array1->count() == 0);
775  QVERIFY(array1->contains(value5) == false);
776 
777  array1->removeFirst();
778  QVERIFY(array1->count() == 0);
779 
780  array1->append(value0);
781  array1->append(value1);
782  array1->append(value2);
783  array1->append(value3);
784  array1->append(value4);
785  array1->append(value5);
786  array1->append(value5);
787  array1->append(value5);
788 
789  array1->removeLast();
790  QVERIFY(array1->count() == 7);
791  QVERIFY(array1->contains(value5) == true);
792 
793  array1->removeLast();
794  QVERIFY(array1->count() == 6);
795  QVERIFY(array1->contains(value5) == true);
796 
797  array1->removeLast();
798  QVERIFY(array1->count() == 5);
799  QVERIFY(array1->contains(value5) == false);
800 
801  array1->removeLast();
802  QVERIFY(array1->count() == 4);
803  QVERIFY(array1->contains(value4) == false);
804 
805  array1->removeLast();
806  QVERIFY(array1->count() == 3);
807  QVERIFY(array1->contains(value3) == false);
808 
809  array1->removeLast();
810  QVERIFY(array1->count() == 2);
811  QVERIFY(array1->contains(value2) == false);
812 
813  array1->removeLast();
814  QVERIFY(array1->count() == 1);
815  QVERIFY(array1->contains(value1) == false);
816 
817  array1->removeLast();
818  QVERIFY(array1->count() == 0);
819  QVERIFY(array1->contains(value0) == false);
820 
821  array1->removeLast();
822  QVERIFY(array1->count() == 0);
823 }
824 
825 void TestJson::QMJsonArray_take(void)
826 {
827  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
828  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
829  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
830  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
831  auto value4 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray()));
832  auto value5 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject()));
833  auto value6 = QMPointer<QMJsonValue>(new QMJsonValue(15.16));
834  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
835 
836  array1->append(value0);
837  array1->append(value1);
838  array1->append(value2);
839  array1->append(value3);
840  array1->append(value4);
841  array1->append(value5);
842  array1->append(value5);
843  array1->append(value5);
844 
845  QVERIFY(array1->takeAt(1) == value1);
846  QVERIFY(array1->count() == 7);
847  QVERIFY(array1->contains(value1) == false);
848 
849  QVERIFY(array1->takeAt(1) == value2);
850  QVERIFY(array1->count() == 6);
851  QVERIFY(array1->contains(value2) == false);
852 
853  QVERIFY(array1->takeAt(1) == value3);
854  QVERIFY(array1->count() == 5);
855  QVERIFY(array1->contains(value3) == false);
856 
857  QVERIFY(array1->takeAt(1) == value4);
858  QVERIFY(array1->count() == 4);
859  QVERIFY(array1->contains(value4) == false);
860 
861  QVERIFY(array1->takeAt(1) == value5);
862  QVERIFY(array1->count() == 3);
863  QVERIFY(array1->contains(value5) == true);
864 
865  QVERIFY(array1->takeAt(1) == value5);
866  QVERIFY(array1->count() == 2);
867  QVERIFY(array1->contains(value5) == true);
868 
869  QVERIFY(array1->takeAt(1) == value5);
870  QVERIFY(array1->count() == 1);
871  QVERIFY(array1->contains(value5) == false);
872 
873  QVERIFY(array1->takeAt(0) == value0);
874  QVERIFY(array1->count() == 0);
875  QVERIFY(array1->contains(value0) == false);
876 
877  QVERIFY(array1->takeAt(-1).isNull() == false);
878  QVERIFY(array1->takeAt(0).isNull() == false);
879  QVERIFY(array1->takeAt(100).isNull() == false);
880  QVERIFY(array1->count() == 0);
881 
882  array1->append(value0);
883  array1->append(value1);
884  array1->append(value2);
885  array1->append(value3);
886  array1->append(value4);
887  array1->append(value5);
888  array1->append(value5);
889  array1->append(value5);
890 
891  QVERIFY(array1->takeAt(1, value0) == value1);
892  QVERIFY(array1->count() == 7);
893  QVERIFY(array1->contains(value1) == false);
894 
895  QVERIFY(array1->takeAt(1, value0) == value2);
896  QVERIFY(array1->count() == 6);
897  QVERIFY(array1->contains(value2) == false);
898 
899  QVERIFY(array1->takeAt(1, value0) == value3);
900  QVERIFY(array1->count() == 5);
901  QVERIFY(array1->contains(value3) == false);
902 
903  QVERIFY(array1->takeAt(1, value0) == value4);
904  QVERIFY(array1->count() == 4);
905  QVERIFY(array1->contains(value4) == false);
906 
907  QVERIFY(array1->takeAt(1, value0) == value5);
908  QVERIFY(array1->count() == 3);
909  QVERIFY(array1->contains(value5) == true);
910 
911  QVERIFY(array1->takeAt(1, value0) == value5);
912  QVERIFY(array1->count() == 2);
913  QVERIFY(array1->contains(value5) == true);
914 
915  QVERIFY(array1->takeAt(1, value0) == value5);
916  QVERIFY(array1->count() == 1);
917  QVERIFY(array1->contains(value5) == false);
918 
919  QVERIFY(array1->takeAt(0, value1) == value0);
920  QVERIFY(array1->count() == 0);
921  QVERIFY(array1->contains(value0) == false);
922 
923  QVERIFY(array1->takeAt(-1, value0) == value0);
924  QVERIFY(array1->takeAt(0, value0) == value0);
925  QVERIFY(array1->takeAt(100, value0) == value0);
926  QVERIFY(array1->count() == 0);
927 
928  array1->append(value0);
929  array1->append(value1);
930  array1->append(value2);
931  array1->append(value3);
932  array1->append(value4);
933  array1->append(value5);
934  array1->append(value5);
935  array1->append(value5);
936 
937  QVERIFY(array1->takeAt(1, false) == value1);
938  QVERIFY(array1->count() == 7);
939  QVERIFY(array1->contains(value1) == false);
940 
941  QVERIFY(array1->takeAt(1, "World Hello") == value2);
942  QVERIFY(array1->count() == 6);
943  QVERIFY(array1->contains(value2) == false);
944 
945  QVERIFY(array1->takeAt(1, 15.16) == value3);
946  QVERIFY(array1->count() == 5);
947  QVERIFY(array1->contains(value3) == false);
948 
949  QVERIFY(array1->takeAt(1, QMPointer<QMJsonArray>()) == value4);
950  QVERIFY(array1->count() == 4);
951  QVERIFY(array1->contains(value4) == false);
952 
953  QVERIFY(array1->takeAt(1, QMPointer<QMJsonObject>()) == value5);
954  QVERIFY(array1->count() == 3);
955  QVERIFY(array1->contains(value5) == true);
956 
957  QVERIFY(array1->takeAt(1, QMPointer<QMJsonObject>()) == value5);
958  QVERIFY(array1->count() == 2);
959  QVERIFY(array1->contains(value5) == true);
960 
961  QVERIFY(array1->takeAt(1, QMPointer<QMJsonObject>()) == value5);
962  QVERIFY(array1->count() == 1);
963  QVERIFY(array1->contains(value5) == false);
964 
965  QVERIFY(array1->takeAt(0, QMPointer<QMJsonValue>()) == value0);
966  QVERIFY(array1->count() == 0);
967  QVERIFY(array1->contains(value0) == false);
968 
969  QVERIFY(array1->takeAt(-1, QMPointer<QMJsonValue>()).isNull() == true);
970  QVERIFY(array1->takeAt(0, QMPointer<QMJsonValue>()).isNull() == true);
971  QVERIFY(array1->takeAt(100, QMPointer<QMJsonValue>()).isNull() == true);
972  QVERIFY(array1->count() == 0);
973 
974  array1->append(value0);
975  array1->append(value1);
976  array1->append(value2);
977  array1->append(value3);
978  array1->append(value4);
979  array1->append(value5);
980  array1->append(value5);
981  array1->append(value5);
982 
983  QVERIFY(array1->takeFirst() == value0);
984  QVERIFY(array1->count() == 7);
985  QVERIFY(array1->contains(value0) == false);
986 
987  QVERIFY(array1->takeFirst() == value1);
988  QVERIFY(array1->count() == 6);
989  QVERIFY(array1->contains(value1) == false);
990 
991  QVERIFY(array1->takeFirst() == value2);
992  QVERIFY(array1->count() == 5);
993  QVERIFY(array1->contains(value2) == false);
994 
995  QVERIFY(array1->takeFirst() == value3);
996  QVERIFY(array1->count() == 4);
997  QVERIFY(array1->contains(value3) == false);
998 
999  QVERIFY(array1->takeFirst() == value4);
1000  QVERIFY(array1->count() == 3);
1001  QVERIFY(array1->contains(value4) == false);
1002 
1003  QVERIFY(array1->takeFirst() == value5);
1004  QVERIFY(array1->count() == 2);
1005  QVERIFY(array1->contains(value5) == true);
1006 
1007  QVERIFY(array1->takeFirst() == value5);
1008  QVERIFY(array1->count() == 1);
1009  QVERIFY(array1->contains(value5) == true);
1010 
1011  QVERIFY(array1->takeFirst() == value5);
1012  QVERIFY(array1->count() == 0);
1013  QVERIFY(array1->contains(value5) == false);
1014 
1015  array1->takeFirst();
1016  QVERIFY(array1->count() == 0);
1017 
1018  array1->append(value0);
1019  array1->append(value1);
1020  array1->append(value2);
1021  array1->append(value3);
1022  array1->append(value4);
1023  array1->append(value5);
1024  array1->append(value5);
1025  array1->append(value5);
1026 
1027  QVERIFY(array1->takeLast() == value5);
1028  QVERIFY(array1->count() == 7);
1029  QVERIFY(array1->contains(value5) == true);
1030 
1031  QVERIFY(array1->takeLast() == value5);
1032  QVERIFY(array1->count() == 6);
1033  QVERIFY(array1->contains(value5) == true);
1034 
1035  QVERIFY(array1->takeLast() == value5);
1036  QVERIFY(array1->count() == 5);
1037  QVERIFY(array1->contains(value5) == false);
1038 
1039  QVERIFY(array1->takeLast() == value4);
1040  QVERIFY(array1->count() == 4);
1041  QVERIFY(array1->contains(value4) == false);
1042 
1043  QVERIFY(array1->takeLast() == value3);
1044  QVERIFY(array1->count() == 3);
1045  QVERIFY(array1->contains(value3) == false);
1046 
1047  QVERIFY(array1->takeLast() == value2);
1048  QVERIFY(array1->count() == 2);
1049  QVERIFY(array1->contains(value2) == false);
1050 
1051  QVERIFY(array1->takeLast() == value1);
1052  QVERIFY(array1->count() == 1);
1053  QVERIFY(array1->contains(value1) == false);
1054 
1055  QVERIFY(array1->takeLast() == value0);
1056  QVERIFY(array1->count() == 0);
1057  QVERIFY(array1->contains(value0) == false);
1058 
1059  array1->takeLast();
1060  QVERIFY(array1->count() == 0);
1061 }
1062 
1063 void TestJson::QMJsonArray_value(void)
1064 {
1065  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
1066  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
1067  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
1068  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
1069  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1070 
1071  QVERIFY(array1->front().isNull() == false);
1072  QVERIFY(array1->back().isNull() == false);
1073 
1074  array1->append(value0);
1075  array1->append(value1);
1076  array1->append(value2);
1077  array1->append(value3);
1078 
1079  QVERIFY(array1->front() == value0);
1080  QVERIFY(array1->back() == value3);
1081 
1082  QVERIFY(array1->value(-1).isNull() == false);
1083  QVERIFY(array1->value(100).isNull() == false);
1084  QVERIFY(array1->value(0) == value0);
1085  QVERIFY(array1->value(1) == value1);
1086  QVERIFY(array1->value(2) == value2);
1087  QVERIFY(array1->value(3) == value3);
1088 
1089  QVERIFY(array1->value(-1, value1) == value1);
1090  QVERIFY(array1->value(100, value1) == value1);
1091  QVERIFY(array1->value(0, value1) == value0);
1092  QVERIFY(array1->value(1, value0) == value1);
1093  QVERIFY(array1->value(2, value1) == value2);
1094  QVERIFY(array1->value(3, value1) == value3);
1095 
1096  QVERIFY(array1->value(-1, 15.16).isNull() == false);
1097  QVERIFY(array1->value(100, 15.16).isNull() == false);
1098  QVERIFY(array1->value(0, 15.16) == value0);
1099  QVERIFY(array1->value(1, 15.16) == value1);
1100  QVERIFY(array1->value(2, 15.16) == value2);
1101  QVERIFY(array1->value(3, 15.16) == value3);
1102 }
1103 
1104 void TestJson::QMJsonArray_values(void)
1105 {
1106  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
1107  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
1108  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
1109  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
1110  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1111 
1112  QVERIFY(array1->values() == QList<QMPointer<QMJsonValue> >());
1113 
1114  array1->append(value0);
1115  array1->append(value1);
1116  array1->append(value2);
1117  array1->append(value3);
1118 
1119  QVERIFY(array1->values() == QList<QMPointer<QMJsonValue> >() << value0 << value1 << value2 << value3);
1120  QVERIFY(array1->mid(-1, 100) == QList<QMPointer<QMJsonValue> >() << value0 << value1 << value2 << value3);
1121  QVERIFY(array1->mid(-1, 4) == QList<QMPointer<QMJsonValue> >() << value0 << value1 << value2 << value3);
1122 
1123  QVERIFY(array1->mid(0, 4) == QList<QMPointer<QMJsonValue> >() << value0 << value1 << value2 << value3);
1124  QVERIFY(array1->mid(0, 3) == QList<QMPointer<QMJsonValue> >() << value0 << value1 << value2);
1125  QVERIFY(array1->mid(0, 2) == QList<QMPointer<QMJsonValue> >() << value0 << value1);
1126  QVERIFY(array1->mid(0, 1) == QList<QMPointer<QMJsonValue> >() << value0);
1127  QVERIFY(array1->mid(0, 0) == QList<QMPointer<QMJsonValue> >());
1128 
1129  QVERIFY(array1->mid(1, 4) == QList<QMPointer<QMJsonValue> >() << value1 << value2 << value3);
1130  QVERIFY(array1->mid(1, 3) == QList<QMPointer<QMJsonValue> >() << value1 << value2 << value3);
1131  QVERIFY(array1->mid(1, 2) == QList<QMPointer<QMJsonValue> >() << value1 << value2);
1132  QVERIFY(array1->mid(1, 1) == QList<QMPointer<QMJsonValue> >() << value1);
1133  QVERIFY(array1->mid(1, 0) == QList<QMPointer<QMJsonValue> >());
1134 
1135  QVERIFY(array1->mid(2, 4) == QList<QMPointer<QMJsonValue> >() << value2 << value3);
1136  QVERIFY(array1->mid(2, 3) == QList<QMPointer<QMJsonValue> >() << value2 << value3);
1137  QVERIFY(array1->mid(2, 2) == QList<QMPointer<QMJsonValue> >() << value2 << value3);
1138  QVERIFY(array1->mid(2, 1) == QList<QMPointer<QMJsonValue> >() << value2);
1139  QVERIFY(array1->mid(2, 0) == QList<QMPointer<QMJsonValue> >());
1140 
1141  QVERIFY(array1->mid(3, 4) == QList<QMPointer<QMJsonValue> >() << value3);
1142  QVERIFY(array1->mid(3, 3) == QList<QMPointer<QMJsonValue> >() << value3);
1143  QVERIFY(array1->mid(3, 2) == QList<QMPointer<QMJsonValue> >() << value3);
1144  QVERIFY(array1->mid(3, 1) == QList<QMPointer<QMJsonValue> >() << value3);
1145  QVERIFY(array1->mid(3, 0) == QList<QMPointer<QMJsonValue> >());
1146 
1147  QVERIFY(array1->mid(4, 4) == QList<QMPointer<QMJsonValue> >());
1148  QVERIFY(array1->mid(4, 3) == QList<QMPointer<QMJsonValue> >());
1149  QVERIFY(array1->mid(4, 2) == QList<QMPointer<QMJsonValue> >());
1150  QVERIFY(array1->mid(4, 1) == QList<QMPointer<QMJsonValue> >());
1151  QVERIFY(array1->mid(4, 0) == QList<QMPointer<QMJsonValue> >());
1152 }
1153 
1154 void TestJson::QMJsonArray_move(void)
1155 {
1156  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
1157  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
1158  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
1159  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
1160  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1161 
1162  array1->move(-1, 100);
1163  array1->move(0, 0);
1164  array1->move(4, 2);
1165 
1166  array1->append(value0);
1167  array1->append(value1);
1168  array1->append(value2);
1169  array1->append(value3);
1170 
1171  array1->move(-1, -1);
1172  array1->move(-1, 0);
1173  array1->move(-1, 1);
1174  array1->move(-1, 2);
1175  array1->move(-1, 3);
1176  array1->move(-1, 4);
1177 
1178  array1->move(0, -1);
1179  array1->move(0, 0);
1180  array1->move(0, 1);
1181  array1->move(0, 2);
1182  array1->move(0, 3);
1183  array1->move(0, 4);
1184  QVERIFY(array1->value(0) == value2);
1185  QVERIFY(array1->value(1) == value1);
1186  QVERIFY(array1->value(2) == value3);
1187  QVERIFY(array1->value(3) == value0);
1188 
1189  array1->move(1, -1);
1190  array1->move(1, 0);
1191  array1->move(1, 1);
1192  array1->move(1, 2);
1193  array1->move(1, 3);
1194  array1->move(1, 4);
1195  QVERIFY(array1->value(0) == value1);
1196  QVERIFY(array1->value(1) == value2);
1197  QVERIFY(array1->value(2) == value0);
1198  QVERIFY(array1->value(3) == value3);
1199 
1200  array1->move(2, -1);
1201  array1->move(2, 0);
1202  array1->move(2, 1);
1203  array1->move(2, 2);
1204  array1->move(2, 3);
1205  array1->move(2, 4);
1206  QVERIFY(array1->value(0) == value0);
1207  QVERIFY(array1->value(1) == value2);
1208  QVERIFY(array1->value(2) == value3);
1209  QVERIFY(array1->value(3) == value1);
1210 
1211  array1->move(3, -1);
1212  array1->move(3, 0);
1213  array1->move(3, 1);
1214  array1->move(3, 2);
1215  array1->move(3, 3);
1216  array1->move(3, 4);
1217  QVERIFY(array1->value(0) == value1);
1218  QVERIFY(array1->value(1) == value3);
1219  QVERIFY(array1->value(2) == value2);
1220  QVERIFY(array1->value(3) == value0);
1221 
1222  array1->move(4, -1);
1223  array1->move(4, 0);
1224  array1->move(4, 1);
1225  array1->move(4, 2);
1226  array1->move(4, 3);
1227  array1->move(4, 4);
1228  QVERIFY(array1->value(0) == value1);
1229  QVERIFY(array1->value(1) == value3);
1230  QVERIFY(array1->value(2) == value2);
1231  QVERIFY(array1->value(3) == value0);
1232 }
1233 
1234 void TestJson::QMJsonArray_replace(void)
1235 {
1236  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
1237  auto value1 = QMPointer<QMJsonValue>(new QMJsonValue(true));
1238  auto value2 = QMPointer<QMJsonValue>(new QMJsonValue("Hello World"));
1239  auto value3 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
1240  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1241 
1242  array1->replace(-1, QMPointer<QMJsonValue>());
1243  array1->replace(0, QMPointer<QMJsonValue>());
1244  array1->replace(100, QMPointer<QMJsonValue>());
1245 
1246  array1->replace(-1, 10);
1247  array1->replace(0, true);
1248  array1->replace(100, "Hello");
1249 
1250  array1->append(value0);
1251  array1->append(value1);
1252 
1253  array1->replace(0, value2);
1254  array1->replace(1, value3);
1255  QVERIFY(array1->value(0) == value2);
1256  QVERIFY(array1->value(1) == value3);
1257 
1258  array1->replace(0, QMPointer<QMJsonValue>());
1259  array1->replace(1, QMPointer<QMJsonValue>());
1260  QVERIFY(array1->value(0).isNull() == false);
1261  QVERIFY(array1->value(1).isNull() == false);
1262 
1263  array1->replace(0, "15.16");
1264  array1->replace(1, true);
1265  QVERIFY(array1->value(0)->isString() == true);
1266  QVERIFY(array1->value(1)->isBool() == true);
1267 }
1268 
1269 void TestJson::QMJsonArray_null(void)
1270 {
1271  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue());
1272  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1273 
1274  array1->append(value0);
1275 
1276  QVERIFY(array1->isNull(0) == true);
1277  QVERIFY(array1->isBool(0) == false);
1278  QVERIFY(array1->isDouble(0) == false);
1279  QVERIFY(array1->isString(0) == false);
1280  QVERIFY(array1->isArray(0) == false);
1281  QVERIFY(array1->isObject(0) == false);
1282  QVERIFY(array1->is<QRect>(0) == false);
1283 
1284  QVERIFY(array1->toBool(0) == false);
1285  QVERIFY(array1->toDouble(0) == 0);
1286  QVERIFY(array1->toString(0) == "null");
1287  QVERIFY(array1->toArray(0).isNull() == false);
1288  QVERIFY(array1->toObject(0).isNull() == false);
1289 
1290  QVERIFY(array1->toBool(0, true) == true);
1291  QVERIFY(array1->toDouble(0, 4.8) == 4.8);
1292  QVERIFY(array1->toString(0, "15.16") == "15.16");
1293  QVERIFY(array1->toArray(0, QMPointer<QMJsonArray>()).isNull() == true);
1294  QVERIFY(array1->toObject(0, QMPointer<QMJsonObject>()).isNull() == true);
1295  QVERIFY(array1->to<QRect>(0, QRect()) == QRect());
1296  QVERIFY(array1->from(0, value0) == true);
1297  QVERIFY(array1->from<QSize>(0, QSize(15, 16)) == false);
1298 }
1299 
1300 void TestJson::QMJsonArray_bool(void)
1301 {
1302  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(true));
1303  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1304 
1305  array1->append(value0);
1306 
1307  QVERIFY(array1->isNull(0) == false);
1308  QVERIFY(array1->isBool(0) == true);
1309  QVERIFY(array1->isDouble(0) == false);
1310  QVERIFY(array1->isString(0) == false);
1311  QVERIFY(array1->isArray(0) == false);
1312  QVERIFY(array1->isObject(0) == false);
1313  QVERIFY(array1->is<QRect>(0) == false);
1314 
1315  QVERIFY(array1->toBool(0) == true);
1316  QVERIFY(array1->toDouble(0) == 1);
1317  QVERIFY(array1->toString(0) == "true");
1318  QVERIFY(array1->toArray(0).isNull() == false);
1319  QVERIFY(array1->toObject(0).isNull() == false);
1320 
1321  QVERIFY(array1->toBool(0, false) == true);
1322  QVERIFY(array1->toDouble(0, 4.8) == 4.8);
1323  QVERIFY(array1->toString(0, "15.16") == "15.16");
1324  QVERIFY(array1->toArray(0, QMPointer<QMJsonArray>()).isNull() == true);
1325  QVERIFY(array1->toObject(0, QMPointer<QMJsonObject>()).isNull() == true);
1326  QVERIFY(array1->to<QRect>(0, QRect()) == QRect());
1327 
1328  QVERIFY(array1->from(0, value0) == true);
1329  QVERIFY(array1->fromBool(0, false) == true);
1330  QVERIFY(array1->fromDouble(0, 4.8) == true);
1331  QVERIFY(array1->fromString(0, "false") == true);
1332  QVERIFY(array1->fromArray(0, QMPointer<QMJsonArray>()) == false);
1333  QVERIFY(array1->fromObject(0, QMPointer<QMJsonObject>()) == false);
1334  QVERIFY(array1->from<QSize>(0, QSize(15, 16)) == false);
1335 }
1336 
1337 void TestJson::QMJsonArray_double(void)
1338 {
1339  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(4.8));
1340  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1341 
1342  array1->append(value0);
1343 
1344  QVERIFY(array1->isNull(0) == false);
1345  QVERIFY(array1->isBool(0) == false);
1346  QVERIFY(array1->isDouble(0) == true);
1347  QVERIFY(array1->isString(0) == false);
1348  QVERIFY(array1->isArray(0) == false);
1349  QVERIFY(array1->isObject(0) == false);
1350  QVERIFY(array1->is<QRect>(0) == false);
1351 
1352  QVERIFY(array1->toBool(0) == true);
1353  QVERIFY(array1->toDouble(0) == 4.8);
1354  QVERIFY(array1->toString(0) == "4.8");
1355  QVERIFY(array1->toArray(0).isNull() == false);
1356  QVERIFY(array1->toObject(0).isNull() == false);
1357 
1358  QVERIFY(array1->toBool(0, false) == false);
1359  QVERIFY(array1->toDouble(0, 15.16) == 4.8);
1360  QVERIFY(array1->toString(0, "15.16") == "15.16");
1361  QVERIFY(array1->toArray(0, QMPointer<QMJsonArray>()).isNull() == true);
1362  QVERIFY(array1->toObject(0, QMPointer<QMJsonObject>()).isNull() == true);
1363  QVERIFY(array1->to<QRect>(0, QRect()) == QRect());
1364 
1365  QVERIFY(array1->from(0, value0) == true);
1366  QVERIFY(array1->fromBool(0, false) == true);
1367  QVERIFY(array1->fromDouble(0, 15.16) == true);
1368  QVERIFY(array1->fromString(0, "false") == false);
1369  QVERIFY(array1->fromArray(0, QMPointer<QMJsonArray>()) == false);
1370  QVERIFY(array1->fromObject(0, QMPointer<QMJsonObject>()) == false);
1371  QVERIFY(array1->from<QSize>(0, QSize(15, 16)) == false);
1372 }
1373 
1374 void TestJson::QMJsonArray_string(void)
1375 {
1376  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue("test"));
1377  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1378 
1379  array1->append(value0);
1380 
1381  QVERIFY(array1->isNull(0) == false);
1382  QVERIFY(array1->isBool(0) == false);
1383  QVERIFY(array1->isDouble(0) == false);
1384  QVERIFY(array1->isString(0) == true);
1385  QVERIFY(array1->isArray(0) == false);
1386  QVERIFY(array1->isObject(0) == false);
1387  QVERIFY(array1->is<QRect>(0) == false);
1388 
1389  QVERIFY(array1->toBool(0) == false);
1390  QVERIFY(array1->toDouble(0) == 0);
1391  QVERIFY(array1->toString(0) == "test");
1392  QVERIFY(array1->toArray(0).isNull() == false);
1393  QVERIFY(array1->toObject(0).isNull() == false);
1394 
1395  QVERIFY(array1->toBool(0, true) == true);
1396  QVERIFY(array1->toDouble(0, 15.16) == 15.16);
1397  QVERIFY(array1->toString(0, "15.16") == "test");
1398  QVERIFY(array1->toArray(0, QMPointer<QMJsonArray>()).isNull() == true);
1399  QVERIFY(array1->toObject(0, QMPointer<QMJsonObject>()).isNull() == true);
1400  QVERIFY(array1->to<QRect>(0, QRect()) == QRect());
1401 
1402  QVERIFY(array1->from(0, value0) == true);
1403  QVERIFY(array1->fromBool(0, false) == true);
1404  QVERIFY(array1->fromDouble(0, 15.16) == true);
1405  QVERIFY(array1->fromString(0, "15.16") == true);
1406  QVERIFY(array1->fromArray(0, QMPointer<QMJsonArray>()) == false);
1407  QVERIFY(array1->fromObject(0, QMPointer<QMJsonObject>()) == false);
1408  QVERIFY(array1->from<QSize>(0, QSize(15, 16)) == false);
1409 }
1410 
1411 void TestJson::QMJsonArray_array(void)
1412 {
1413  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonArray()));
1414  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1415 
1416  array1->append(value0);
1417 
1418  QVERIFY(array1->isNull(0) == false);
1419  QVERIFY(array1->isBool(0) == false);
1420  QVERIFY(array1->isDouble(0) == false);
1421  QVERIFY(array1->isString(0) == false);
1422  QVERIFY(array1->isArray(0) == true);
1423  QVERIFY(array1->isObject(0) == false);
1424  QVERIFY(array1->is<QRect>(0) == false);
1425 
1426  QVERIFY(array1->toBool(0) == false);
1427  QVERIFY(array1->toDouble(0) == 0);
1428  QVERIFY(array1->toString(0) == QString());
1429  QVERIFY(array1->toArray(0).isNull() == false);
1430  QVERIFY(array1->toObject(0).isNull() == false);
1431 
1432  QVERIFY(array1->toBool(0, true) == true);
1433  QVERIFY(array1->toDouble(0, 15.16) == 15.16);
1434  QVERIFY(array1->toString(0, "15.16") == "15.16");
1435  QVERIFY(array1->toArray(0, QMPointer<QMJsonArray>()).isNull() == false);
1436  QVERIFY(array1->toObject(0, QMPointer<QMJsonObject>()).isNull() == true);
1437  QVERIFY(array1->to<QRect>(0, QRect()) == QRect());
1438 
1439  QVERIFY(array1->from(0, value0) == true);
1440  QVERIFY(array1->fromBool(0, false) == false);
1441  QVERIFY(array1->fromDouble(0, 15.16) == false);
1442  QVERIFY(array1->fromString(0, "15.16") == false);
1443  QVERIFY(array1->fromArray(0, QMPointer<QMJsonArray>()) == true);
1444  QVERIFY(array1->fromObject(0, QMPointer<QMJsonObject>()) == false);
1445  QVERIFY(array1->from<QSize>(0, QSize(15, 16)) == false);
1446 }
1447 
1448 void TestJson::QMJsonArray_object(void)
1449 {
1450  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(new QMJsonObject()));
1451  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1452 
1453  array1->append(value0);
1454 
1455  QVERIFY(array1->isNull(0) == false);
1456  QVERIFY(array1->isBool(0) == false);
1457  QVERIFY(array1->isDouble(0) == false);
1458  QVERIFY(array1->isString(0) == false);
1459  QVERIFY(array1->isArray(0) == false);
1460  QVERIFY(array1->isObject(0) == true);
1461  QVERIFY(array1->is<QRect>(0) == false);
1462 
1463  QVERIFY(array1->toBool(0) == false);
1464  QVERIFY(array1->toDouble(0) == 0);
1465  QVERIFY(array1->toString(0) == QString());
1466  QVERIFY(array1->toArray(0).isNull() == false);
1467  QVERIFY(array1->toObject(0).isNull() == false);
1468 
1469  QVERIFY(array1->toBool(0, true) == true);
1470  QVERIFY(array1->toDouble(0, 15.16) == 15.16);
1471  QVERIFY(array1->toString(0, "15.16") == "15.16");
1472  QVERIFY(array1->toArray(0, QMPointer<QMJsonArray>()).isNull() == true);
1473  QVERIFY(array1->toObject(0, QMPointer<QMJsonObject>()).isNull() == false);
1474  QVERIFY(array1->to<QRect>(0, QRect()) == QRect());
1475 
1476  QVERIFY(array1->from(0, value0) == true);
1477  QVERIFY(array1->fromBool(0, false) == false);
1478  QVERIFY(array1->fromDouble(0, 15.16) == false);
1479  QVERIFY(array1->fromString(0, "15.16") == false);
1480  QVERIFY(array1->fromArray(0, QMPointer<QMJsonArray>()) == false);
1481  QVERIFY(array1->fromObject(0, QMPointer<QMJsonObject>()) == true);
1482  QVERIFY(array1->from<QSize>(0, QSize(15, 16)) == false);
1483 }
1484 
1485 void TestJson::QMJsonArray_custom(void)
1486 {
1487  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue(QSize(4, 8)));
1488  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1489 
1490  array1->append(value0);
1491 
1492  QVERIFY(array1->isNull(0) == false);
1493  QVERIFY(array1->isBool(0) == false);
1494  QVERIFY(array1->isDouble(0) == false);
1495  QVERIFY(array1->isString(0) == false);
1496  QVERIFY(array1->isArray(0) == false);
1497  QVERIFY(array1->isObject(0) == false);
1498  QVERIFY(array1->is<QSize>(0) == true);
1499 
1500  QVERIFY(array1->toBool(0) == false);
1501  QVERIFY(array1->toDouble(0) == 0);
1502  QVERIFY(array1->toString(0) == QString());
1503  QVERIFY(array1->toArray(0).isNull() == false);
1504  QVERIFY(array1->toObject(0).isNull() == false);
1505 
1506  QVERIFY(array1->toBool(0, true) == true);
1507  QVERIFY(array1->toDouble(0, 15.16) == 15.16);
1508  QVERIFY(array1->toString(0, "15.16") == "15.16");
1509  QVERIFY(array1->toArray(0, QMPointer<QMJsonArray>()).isNull() == true);
1510  QVERIFY(array1->toObject(0, QMPointer<QMJsonObject>()).isNull() == true);
1511  QVERIFY(array1->to<QSize>(0, QSize()) == QSize(4, 8));
1512 
1513  QVERIFY(array1->from(0, value0) == false);
1514  QVERIFY(array1->fromBool(0, false) == false);
1515  QVERIFY(array1->fromDouble(0, 15.16) == false);
1516  QVERIFY(array1->fromString(0, "15.16") == false);
1517  QVERIFY(array1->fromArray(0, QMPointer<QMJsonArray>()) == false);
1518  QVERIFY(array1->fromObject(0, QMPointer<QMJsonObject>()) == false);
1519  QVERIFY(array1->from<QSize>(0, QSize(15, 16)) == true);
1520 }
1521 
1522 void TestJson::QMJsonArray_signals(void)
1523 {
1524  auto value0 = QMPointer<QMJsonValue>(new QMJsonValue("15.16"));
1525  auto array1 = QMPointer<QMJsonArray>(new QMJsonArray());
1526  auto array2 = QMPointer<QMJsonArray>(new QMJsonArray());
1527 
1528  connect(array1.data(), &QMJsonArray::itemAdded, this, &TestJson::signaled);
1529  connect(array1.data(), &QMJsonArray::itemRemoved, this, &TestJson::signaled);
1530  connect(array2.data(), &QMJsonArray::itemAdded, this, &TestJson::signaled);
1531  connect(array2.data(), &QMJsonArray::itemRemoved, this, &TestJson::signaled);
1532 
1533  mCount = 0;
1534  array1->removeFirst();
1535  array1->removeLast();
1536  QVERIFY(mCount == 0);
1537 
1538  mCount = 0;
1539  array1->removeAt(1);
1540  QVERIFY(mCount == 0);
1541 
1542  mCount = 0;
1543  array1->removeOne(value0);
1544  QVERIFY(mCount == 0);
1545 
1546  mCount = 0;
1547  array1->removeAll(value0);
1548  QVERIFY(mCount == 0);
1549 
1550  mCount = 0;
1551  array1->clear();
1552  QVERIFY(mCount == 0);
1553 
1554  mCount = 0;
1555  array1->prepend(value0);
1556  array1->append(value0);
1557  array1->insert(0, value0);
1558  QVERIFY(mCount == 3);
1559 
1560  mCount = 0;
1561  array2->prepend(4.8);
1562  array2->append(15.16);
1563  array2->insert(0, 23.42);
1564  QVERIFY(mCount == 3);
1565 
1566  mCount = 0;
1567  array1->unite(array2, QMJsonArrayUnitePolicy_Prepend);
1568  array1->unite(array2, QMJsonArrayUnitePolicy_Append);
1569  QVERIFY(mCount == 6);
1570 
1571  mCount = 0;
1572  array1->removeFirst();
1573  array1->removeLast();
1574  QVERIFY(mCount == 2);
1575 
1576  mCount = 0;
1577  array1->removeAt(1);
1578  QVERIFY(mCount == 1);
1579 
1580  mCount = 0;
1581  array1->removeOne(value0);
1582  QVERIFY(mCount == 1);
1583 
1584  mCount = 0;
1585  array1->removeAll(value0);
1586  QVERIFY(mCount == 2);
1587 
1588  mCount = 0;
1589  array1->clear();
1590  QVERIFY(mCount == 3);
1591 
1592  mCount = 0;
1593  array1->takeFirst();
1594  array1->takeLast();
1595  QVERIFY(mCount == 0);
1596 
1597  mCount = 0;
1598  array1->takeAt(1);
1599  array1->takeAt(1, value0);
1600  array1->takeAt(1, 15.16);
1601  QVERIFY(mCount == 0);
1602 
1603  mCount = 0;
1604  array1->append(value0);
1605  array1->append(value0);
1606  array1->append(value0);
1607  array1->append(value0);
1608  array1->append(value0);
1609  array1->append(value0);
1610  QVERIFY(mCount == 6);
1611 
1612  mCount = 0;
1613  array1->takeAt(1);
1614  array1->takeAt(1, value0);
1615  array1->takeAt(1, 15.16);
1616  QVERIFY(mCount == 3);
1617 
1618  mCount = 0;
1619  array1->takeFirst();
1620  array1->takeLast();
1621  QVERIFY(mCount == 2);
1622 
1623  mCount = 0;
1624  array1->clear();
1625  QVERIFY(mCount == 1);
1626 
1627  mCount = 0;
1628  array1->append(value0);
1629  QVERIFY(mCount == 1);
1630 
1631  mCount = 0;
1632  array1->replace(0, value0);
1633  QVERIFY(mCount == 2);
1634 
1635  mCount = 0;
1636  array1->replace(0, 15.16);
1637  QVERIFY(mCount == 2);
1638 }
void itemRemoved(int32_t index, const QMPointer< QMJsonValue > &value)
void itemAdded(int32_t index, const QMPointer< QMJsonValue > &value)