123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484 |
- /*
- * Copyright (c) 2009-2016 Petri Lehtinen <[email protected]>
- *
- * Jansson is free software; you can redistribute it and/or modify
- * it under the terms of the MIT license. See LICENSE for details.
- */
- #include "util.h"
- #include <jansson.h>
- static void test_misc(void) {
- json_t *array, *five, *seven, *value;
- size_t i;
- array = json_array();
- five = json_integer(5);
- seven = json_integer(7);
- if (!array)
- fail("unable to create array");
- if (!five || !seven)
- fail("unable to create integer");
- if (json_array_size(array) != 0)
- fail("empty array has nonzero size");
- if (!json_array_append(array, NULL))
- fail("able to append NULL");
- if (json_array_append(array, five))
- fail("unable to append");
- if (json_array_size(array) != 1)
- fail("wrong array size");
- value = json_array_get(array, 0);
- if (!value)
- fail("unable to get item");
- if (value != five)
- fail("got wrong value");
- if (json_array_append(array, seven))
- fail("unable to append value");
- if (json_array_size(array) != 2)
- fail("wrong array size");
- value = json_array_get(array, 1);
- if (!value)
- fail("unable to get item");
- if (value != seven)
- fail("got wrong value");
- if (json_array_set(array, 0, seven))
- fail("unable to set value");
- if (!json_array_set(array, 0, NULL))
- fail("able to set NULL");
- if (json_array_size(array) != 2)
- fail("wrong array size");
- value = json_array_get(array, 0);
- if (!value)
- fail("unable to get item");
- if (value != seven)
- fail("got wrong value");
- if (json_array_get(array, 2) != NULL)
- fail("able to get value out of bounds");
- if (!json_array_set(array, 2, seven))
- fail("able to set value out of bounds");
- for (i = 2; i < 30; i++) {
- if (json_array_append(array, seven))
- fail("unable to append value");
- if (json_array_size(array) != i + 1)
- fail("wrong array size");
- }
- for (i = 0; i < 30; i++) {
- value = json_array_get(array, i);
- if (!value)
- fail("unable to get item");
- if (value != seven)
- fail("got wrong value");
- }
- if (json_array_set_new(array, 15, json_integer(123)))
- fail("unable to set new value");
- value = json_array_get(array, 15);
- if (!json_is_integer(value) || json_integer_value(value) != 123)
- fail("json_array_set_new works incorrectly");
- if (!json_array_set_new(array, 15, NULL))
- fail("able to set_new NULL value");
- if (json_array_append_new(array, json_integer(321)))
- fail("unable to append new value");
- value = json_array_get(array, json_array_size(array) - 1);
- if (!json_is_integer(value) || json_integer_value(value) != 321)
- fail("json_array_append_new works incorrectly");
- if (!json_array_append_new(array, NULL))
- fail("able to append_new NULL value");
- json_decref(five);
- json_decref(seven);
- json_decref(array);
- }
- static void test_insert(void) {
- json_t *array, *five, *seven, *eleven, *value;
- int i;
- array = json_array();
- five = json_integer(5);
- seven = json_integer(7);
- eleven = json_integer(11);
- if (!array)
- fail("unable to create array");
- if (!five || !seven || !eleven)
- fail("unable to create integer");
- if (!json_array_insert(array, 1, five))
- fail("able to insert value out of bounds");
- if (json_array_insert(array, 0, five))
- fail("unable to insert value in an empty array");
- if (json_array_get(array, 0) != five)
- fail("json_array_insert works incorrectly");
- if (json_array_size(array) != 1)
- fail("array size is invalid after insertion");
- if (json_array_insert(array, 1, seven))
- fail("unable to insert value at the end of an array");
- if (json_array_get(array, 0) != five)
- fail("json_array_insert works incorrectly");
- if (json_array_get(array, 1) != seven)
- fail("json_array_insert works incorrectly");
- if (json_array_size(array) != 2)
- fail("array size is invalid after insertion");
- if (json_array_insert(array, 1, eleven))
- fail("unable to insert value in the middle of an array");
- if (json_array_get(array, 0) != five)
- fail("json_array_insert works incorrectly");
- if (json_array_get(array, 1) != eleven)
- fail("json_array_insert works incorrectly");
- if (json_array_get(array, 2) != seven)
- fail("json_array_insert works incorrectly");
- if (json_array_size(array) != 3)
- fail("array size is invalid after insertion");
- if (json_array_insert_new(array, 2, json_integer(123)))
- fail("unable to insert value in the middle of an array");
- value = json_array_get(array, 2);
- if (!json_is_integer(value) || json_integer_value(value) != 123)
- fail("json_array_insert_new works incorrectly");
- if (json_array_size(array) != 4)
- fail("array size is invalid after insertion");
- for (i = 0; i < 20; i++) {
- if (json_array_insert(array, 0, seven))
- fail("unable to insert value at the beginning of an array");
- }
- for (i = 0; i < 20; i++) {
- if (json_array_get(array, i) != seven)
- fail("json_aray_insert works incorrectly");
- }
- if (json_array_size(array) != 24)
- fail("array size is invalid after loop insertion");
- json_decref(five);
- json_decref(seven);
- json_decref(eleven);
- json_decref(array);
- }
- static void test_remove(void) {
- json_t *array, *five, *seven;
- int i;
- array = json_array();
- five = json_integer(5);
- seven = json_integer(7);
- if (!array)
- fail("unable to create array");
- if (!five)
- fail("unable to create integer");
- if (!seven)
- fail("unable to create integer");
- if (!json_array_remove(array, 0))
- fail("able to remove an unexisting index");
- if (json_array_append(array, five))
- fail("unable to append");
- if (!json_array_remove(array, 1))
- fail("able to remove an unexisting index");
- if (json_array_remove(array, 0))
- fail("unable to remove");
- if (json_array_size(array) != 0)
- fail("array size is invalid after removing");
- if (json_array_append(array, five) || json_array_append(array, seven) ||
- json_array_append(array, five) || json_array_append(array, seven))
- fail("unable to append");
- if (json_array_remove(array, 2))
- fail("unable to remove");
- if (json_array_size(array) != 3)
- fail("array size is invalid after removing");
- if (json_array_get(array, 0) != five || json_array_get(array, 1) != seven ||
- json_array_get(array, 2) != seven)
- fail("remove works incorrectly");
- json_decref(array);
- array = json_array();
- for (i = 0; i < 4; i++) {
- json_array_append(array, five);
- json_array_append(array, seven);
- }
- if (json_array_size(array) != 8)
- fail("unable to append 8 items to array");
- /* Remove an element from a "full" array. */
- json_array_remove(array, 5);
- json_decref(five);
- json_decref(seven);
- json_decref(array);
- }
- static void test_clear(void) {
- json_t *array, *five, *seven;
- int i;
- array = json_array();
- five = json_integer(5);
- seven = json_integer(7);
- if (!array)
- fail("unable to create array");
- if (!five || !seven)
- fail("unable to create integer");
- for (i = 0; i < 10; i++) {
- if (json_array_append(array, five))
- fail("unable to append");
- }
- for (i = 0; i < 10; i++) {
- if (json_array_append(array, seven))
- fail("unable to append");
- }
- if (json_array_size(array) != 20)
- fail("array size is invalid after appending");
- if (json_array_clear(array))
- fail("unable to clear");
- if (json_array_size(array) != 0)
- fail("array size is invalid after clearing");
- json_decref(five);
- json_decref(seven);
- json_decref(array);
- }
- static void test_extend(void) {
- json_t *array1, *array2, *five, *seven;
- int i;
- array1 = json_array();
- array2 = json_array();
- five = json_integer(5);
- seven = json_integer(7);
- if (!array1 || !array2)
- fail("unable to create array");
- if (!five || !seven)
- fail("unable to create integer");
- for (i = 0; i < 10; i++) {
- if (json_array_append(array1, five))
- fail("unable to append");
- }
- for (i = 0; i < 10; i++) {
- if (json_array_append(array2, seven))
- fail("unable to append");
- }
- if (json_array_size(array1) != 10 || json_array_size(array2) != 10)
- fail("array size is invalid after appending");
- if (json_array_extend(array1, array2))
- fail("unable to extend");
- for (i = 0; i < 10; i++) {
- if (json_array_get(array1, i) != five)
- fail("invalid array contents after extending");
- }
- for (i = 10; i < 20; i++) {
- if (json_array_get(array1, i) != seven)
- fail("invalid array contents after extending");
- }
- json_decref(five);
- json_decref(seven);
- json_decref(array1);
- json_decref(array2);
- }
- static void test_circular() {
- json_t *array1, *array2;
- /* the simple cases are checked */
- array1 = json_array();
- if (!array1)
- fail("unable to create array");
- if (json_array_append(array1, array1) == 0)
- fail("able to append self");
- if (json_array_insert(array1, 0, array1) == 0)
- fail("able to insert self");
- if (json_array_append_new(array1, json_true()))
- fail("failed to append true");
- if (json_array_set(array1, 0, array1) == 0)
- fail("able to set self");
- json_decref(array1);
- /* create circular references */
- array1 = json_array();
- array2 = json_array();
- if (!array1 || !array2)
- fail("unable to create array");
- if (json_array_append(array1, array2) || json_array_append(array2, array1))
- fail("unable to append");
- /* circularity is detected when dumping */
- if (json_dumps(array1, 0) != NULL)
- fail("able to dump circulars");
- /* decref twice to deal with the circular references */
- json_decref(array1);
- json_decref(array2);
- json_decref(array1);
- }
- static void test_array_foreach() {
- size_t index;
- json_t *array1, *array2, *value;
- array1 = json_pack("[sisisi]", "foo", 1, "bar", 2, "baz", 3);
- array2 = json_array();
- json_array_foreach(array1, index, value) { json_array_append(array2, value); }
- if (!json_equal(array1, array2))
- fail("json_array_foreach failed to iterate all elements");
- json_decref(array1);
- json_decref(array2);
- }
- static void test_bad_args(void) {
- json_t *arr = json_array();
- json_t *num = json_integer(1);
- if (!arr || !num)
- fail("failed to create required objects");
- if (json_array_size(NULL) != 0)
- fail("NULL array has nonzero size");
- if (json_array_size(num) != 0)
- fail("non-array has nonzero array size");
- if (json_array_get(NULL, 0))
- fail("json_array_get did not return NULL for non-array");
- if (json_array_get(num, 0))
- fail("json_array_get did not return NULL for non-array");
- if (!json_array_set_new(NULL, 0, json_incref(num)))
- fail("json_array_set_new did not return error for non-array");
- if (!json_array_set_new(num, 0, json_incref(num)))
- fail("json_array_set_new did not return error for non-array");
- if (!json_array_set_new(arr, 0, NULL))
- fail("json_array_set_new did not return error for NULL value");
- if (!json_array_set_new(arr, 0, json_incref(arr)))
- fail("json_array_set_new did not return error for value == array");
- if (!json_array_remove(NULL, 0))
- fail("json_array_remove did not return error for non-array");
- if (!json_array_remove(num, 0))
- fail("json_array_remove did not return error for non-array");
- if (!json_array_clear(NULL))
- fail("json_array_clear did not return error for non-array");
- if (!json_array_clear(num))
- fail("json_array_clear did not return error for non-array");
- if (!json_array_append_new(NULL, json_incref(num)))
- fail("json_array_append_new did not return error for non-array");
- if (!json_array_append_new(num, json_incref(num)))
- fail("json_array_append_new did not return error for non-array");
- if (!json_array_append_new(arr, NULL))
- fail("json_array_append_new did not return error for NULL value");
- if (!json_array_append_new(arr, json_incref(arr)))
- fail("json_array_append_new did not return error for value == array");
- if (!json_array_insert_new(NULL, 0, json_incref(num)))
- fail("json_array_insert_new did not return error for non-array");
- if (!json_array_insert_new(num, 0, json_incref(num)))
- fail("json_array_insert_new did not return error for non-array");
- if (!json_array_insert_new(arr, 0, NULL))
- fail("json_array_insert_new did not return error for NULL value");
- if (!json_array_insert_new(arr, 0, json_incref(arr)))
- fail("json_array_insert_new did not return error for value == array");
- if (!json_array_extend(NULL, arr))
- fail("json_array_extend did not return error for first argument "
- "non-array");
- if (!json_array_extend(num, arr))
- fail("json_array_extend did not return error for first argument "
- "non-array");
- if (!json_array_extend(arr, NULL))
- fail("json_array_extend did not return error for second argument "
- "non-array");
- if (!json_array_extend(arr, num))
- fail("json_array_extend did not return error for second argument "
- "non-array");
- if (num->refcount != 1)
- fail("unexpected reference count on num");
- if (arr->refcount != 1)
- fail("unexpected reference count on arr");
- json_decref(num);
- json_decref(arr);
- }
- static void run_tests() {
- test_misc();
- test_insert();
- test_remove();
- test_clear();
- test_extend();
- test_circular();
- test_array_foreach();
- test_bad_args();
- }
|