diff options
author | Petri Lehtinen <petri@digip.org> | 2016-06-20 21:03:02 +0300 |
---|---|---|
committer | Petri Lehtinen <petri@digip.org> | 2016-06-20 21:10:23 +0300 |
commit | 9df267054fda51cbe3851a8c299ab95049ff6e64 (patch) | |
tree | 9fb549b316effb842e75f9ccb1a7e38bdfa4e525 /test | |
parent | 8f067962f6442bda65f0a8909f589f2616a42c5a (diff) | |
download | jansson-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.c | 18 | ||||
-rw-r--r-- | test/suites/api/test_object.c | 48 |
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"); |