aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPetri Lehtinen <petri@digip.org>2016-06-20 21:03:02 +0300
committerPetri Lehtinen <petri@digip.org>2016-06-20 21:10:23 +0300
commit9df267054fda51cbe3851a8c299ab95049ff6e64 (patch)
tree9fb549b316effb842e75f9ccb1a7e38bdfa4e525 /test
parent8f067962f6442bda65f0a8909f589f2616a42c5a (diff)
downloadjansson-9df267054fda51cbe3851a8c299ab95049ff6e64.zip
jansson-9df267054fda51cbe3851a8c299ab95049ff6e64.tar.gz
jansson-9df267054fda51cbe3851a8c299ab95049ff6e64.tar.bz2
Always preserve insertion order of object items
Diffstat (limited to 'test')
-rw-r--r--test/suites/api/test_copy.c18
-rw-r--r--test/suites/api/test_object.c48
2 files changed, 29 insertions, 37 deletions
diff --git a/test/suites/api/test_copy.c b/test/suites/api/test_copy.c
index cf1f25a..aeb7e72 100644
--- a/test/suites/api/test_copy.c
+++ b/test/suites/api/test_copy.c
@@ -232,6 +232,9 @@ static void test_copy_object(void)
const char *json_object_text =
"{\"foo\": \"bar\", \"a\": 1, \"b\": 3.141592, \"c\": [1,2,3,4]}";
+ const char *keys[] = {"foo", "a", "b", "c"};
+ int i;
+
json_t *object, *copy;
void *iter;
@@ -247,6 +250,7 @@ static void test_copy_object(void)
if(!json_equal(copy, object))
fail("copying an object produces an inequal copy");
+ i = 0;
iter = json_object_iter(object);
while(iter)
{
@@ -258,9 +262,13 @@ static void test_copy_object(void)
value2 = json_object_get(copy, key);
if(value1 != value2)
- fail("deep copying an object modifies its items");
+ fail("copying an object modifies its items");
+
+ if (strcmp(key, keys[i]) != 0)
+ fail("copying an object doesn't preserve key order");
iter = json_object_iter_next(object, iter);
+ i++;
}
json_decref(object);
@@ -272,6 +280,9 @@ static void test_deep_copy_object(void)
const char *json_object_text =
"{\"foo\": \"bar\", \"a\": 1, \"b\": 3.141592, \"c\": [1,2,3,4]}";
+ const char *keys[] = {"foo", "a", "b", "c"};
+ int i;
+
json_t *object, *copy;
void *iter;
@@ -287,6 +298,7 @@ static void test_deep_copy_object(void)
if(!json_equal(copy, object))
fail("deep copying an object produces an inequal copy");
+ i = 0;
iter = json_object_iter(object);
while(iter)
{
@@ -300,7 +312,11 @@ static void test_deep_copy_object(void)
if(value1 == value2)
fail("deep copying an object doesn't copy its items");
+ if (strcmp(key, keys[i]) != 0)
+ fail("deep copying an object doesn't preserve key order");
+
iter = json_object_iter_next(object, iter);
+ i++;
}
json_decref(object);
diff --git a/test/suites/api/test_object.c b/test/suites/api/test_object.c
index 01cc8fd..c5b97e3 100644
--- a/test/suites/api/test_object.c
+++ b/test/suites/api/test_object.c
@@ -275,11 +275,7 @@ static void test_set_nocheck()
static void test_iterators()
{
- int i;
json_t *object, *foo, *bar, *baz;
- const char *iter_keys[3];
- int have_key[3] = { 0, 0, 0 };
- json_t *iter_values[3];
void *iter;
if(json_object_iter(NULL))
@@ -306,50 +302,30 @@ static void test_iterators()
iter = json_object_iter(object);
if(!iter)
fail("unable to get iterator");
- iter_keys[0] = json_object_iter_key(iter);
- iter_values[0] = json_object_iter_value(iter);
+ if (strcmp(json_object_iter_key(iter), "a") != 0)
+ fail("iterating doesn't yield keys in order");
+ if (json_object_iter_value(iter) != foo)
+ fail("iterating doesn't yield values in order");
iter = json_object_iter_next(object, iter);
if(!iter)
fail("unable to increment iterator");
- iter_keys[1] = json_object_iter_key(iter);
- iter_values[1] = json_object_iter_value(iter);
+ if (strcmp(json_object_iter_key(iter), "b") != 0)
+ fail("iterating doesn't yield keys in order");
+ if (json_object_iter_value(iter) != bar)
+ fail("iterating doesn't yield values in order");
iter = json_object_iter_next(object, iter);
if(!iter)
fail("unable to increment iterator");
- iter_keys[2] = json_object_iter_key(iter);
- iter_values[2] = json_object_iter_value(iter);
+ if (strcmp(json_object_iter_key(iter), "c") != 0)
+ fail("iterating doesn't yield keys in order");
+ if (json_object_iter_value(iter) != baz)
+ fail("iterating doesn't yield values in order");
if(json_object_iter_next(object, iter) != NULL)
fail("able to iterate over the end");
- /* Check that keys have correct values */
- for (i = 0; i < 3; i++) {
- if (strcmp(iter_keys[i], "a") == 0) {
- if (iter_values[i] != foo)
- fail("wrong value for iter key a");
- else
- have_key[0] = 1;
- } else if (strcmp(iter_keys[i], "b") == 0) {
- if (iter_values[i] != bar)
- fail("wrong value for iter key b");
- else
- have_key[1] = 1;
- } else if (strcmp(iter_keys[i], "c") == 0) {
- if (iter_values[i] != baz)
- fail("wrong value for iter key c");
- else
- have_key[2] = 1;
- }
- }
-
- /* Check that we got all keys */
- for(i = 0; i < 3; i++) {
- if(!have_key[i])
- fail("a key wasn't iterated over");
- }
-
if(json_object_iter_at(object, "foo"))
fail("json_object_iter_at() succeeds for non-existent key");