aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPetri Lehtinen <petri@digip.org>2019-10-17 13:37:33 +0300
committerGitHub <noreply@github.com>2019-10-17 13:37:33 +0300
commit25e706cce729678f215cc47fb2c0e85633a77c01 (patch)
treeae8ef507f52507e368cdc3b86c37fe055d8e28fc /test
parent8682f2aab3891a53c30c5b47490a2814cb41f340 (diff)
parent8b022dad76d44ea5ec01fdeffbd8214eeab88c19 (diff)
downloadjansson-25e706cce729678f215cc47fb2c0e85633a77c01.zip
jansson-25e706cce729678f215cc47fb2c0e85633a77c01.tar.gz
jansson-25e706cce729678f215cc47fb2c0e85633a77c01.tar.bz2
Merge branch 'master' into fix-issue281
Diffstat (limited to 'test')
-rw-r--r--test/suites/api/test_array.c6
-rw-r--r--test/suites/api/test_dump.c4
-rw-r--r--test/suites/api/test_equal.c18
-rw-r--r--test/suites/api/test_object.c83
4 files changed, 103 insertions, 8 deletions
diff --git a/test/suites/api/test_array.c b/test/suites/api/test_array.c
index 9991fa0..a1a0934 100644
--- a/test/suites/api/test_array.c
+++ b/test/suites/api/test_array.c
@@ -186,7 +186,7 @@ static void test_insert(void)
for(i = 0; i < 20; i++) {
if(json_array_insert(array, 0, seven))
- fail("unable to insert value at the begining of an array");
+ fail("unable to insert value at the beginning of an array");
}
for(i = 0; i < 20; i++) {
@@ -479,9 +479,9 @@ static void test_bad_args(void)
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 arguemnt non-array");
+ 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 arguemnt non-array");
+ fail("json_array_extend did not return error for second argument non-array");
if(num->refcount != 1)
fail("unexpected reference count on num");
diff --git a/test/suites/api/test_dump.c b/test/suites/api/test_dump.c
index cd4af63..c97a105 100644
--- a/test/suites/api/test_dump.c
+++ b/test/suites/api/test_dump.c
@@ -13,6 +13,10 @@
#include <unistd.h>
#endif
#include "util.h"
+#ifdef __MINGW32__
+#include <fcntl.h>
+#define pipe(fds) _pipe(fds, 1024, _O_BINARY)
+#endif
static int encode_null_callback(const char *buffer, size_t size, void *data)
{
diff --git a/test/suites/api/test_equal.c b/test/suites/api/test_equal.c
index 339bab6..ed1023f 100644
--- a/test/suites/api/test_equal.c
+++ b/test/suites/api/test_equal.c
@@ -159,7 +159,7 @@ static void test_equal_object()
static void test_equal_complex()
{
- json_t *value1, *value2;
+ json_t *value1, *value2, *value3;
const char *complex_json =
"{"
@@ -176,15 +176,25 @@ static void test_equal_complex()
value1 = json_loads(complex_json, 0, NULL);
value2 = json_loads(complex_json, 0, NULL);
+ value3 = json_loads(complex_json, 0, NULL);
if(!value1 || !value2)
fail("unable to parse JSON");
if(!json_equal(value1, value2))
- fail("json_equal fails for two inequal strings");
+ fail("json_equal fails for two equal objects");
+
+ json_array_set_new(json_object_get(json_object_get(value2, "object"),
+ "array-in-object"), 1, json_false());
+ if(json_equal(value1, value2))
+ fail("json_equal fails for two inequal objects");
+
+ json_object_set_new(json_object_get(json_object_get(value3, "object"),
+ "object-in-object"), "foo", json_string("baz"));
+ if(json_equal(value1, value3))
+ fail("json_equal fails for two inequal objects");
json_decref(value1);
json_decref(value2);
-
- /* TODO: There's no negative test case here */
+ json_decref(value3);
}
static void run_tests()
diff --git a/test/suites/api/test_object.c b/test/suites/api/test_object.c
index 0d320b3..5112fc7 100644
--- a/test/suites/api/test_object.c
+++ b/test/suites/api/test_object.c
@@ -59,7 +59,7 @@ static void test_update()
/* update an empty object with an empty object */
if(json_object_update(object, other))
- fail("unable to update an emtpy object with an empty object");
+ fail("unable to update an empty object with an empty object");
if(json_object_size(object) != 0)
fail("invalid size after update");
@@ -270,6 +270,86 @@ static void test_conditional_updates()
json_decref(other);
}
+static void test_recursive_updates()
+{
+ json_t *invalid, *object, *other, *barBefore, *barAfter;
+
+ invalid = json_integer(42);
+
+ object = json_pack("{sis{si}}", "foo", 1, "bar", "baz", 2);
+ other = json_pack("{sisisi}", "foo", 3, "bar", 4, "baz", 5);
+
+ if(!json_object_update_recursive(invalid, other))
+ fail("json_object_update_recursive accepted non-object argument");
+
+ json_decref(invalid);
+
+ if(json_object_update_recursive(object, other))
+ fail("json_object_update_recursive failed");
+
+ if(json_object_size(object) != 3)
+ fail("invalid size after update");
+
+ if(json_integer_value(json_object_get(object, "foo")) != 3)
+ fail("json_object_update_recursive failed to update existing key");
+
+ if(json_integer_value(json_object_get(object, "bar")) != 4)
+ fail("json_object_update_recursive failed to overwrite object");
+
+ if(json_integer_value(json_object_get(object, "baz")) != 5)
+ fail("json_object_update_recursive didn't add new item");
+
+ json_decref(object);
+ json_decref(other);
+
+ object = json_pack("{sis{si}}", "foo", 1, "bar", "baz", 2);
+ other = json_pack("{s{si}}", "bar", "baz", 3);
+ barBefore = json_object_get(object, "bar");
+
+ if(!barBefore)
+ fail("can't get bar object before json_object_update_recursive");
+
+ if(json_object_update_recursive(object, other))
+ fail("json_object_update_recursive failed");
+
+ if(json_object_size(object) != 2)
+ fail("invalid size after update");
+
+ if(!json_object_get(object, "foo"))
+ fail("json_object_update_recursive removed existing key");
+
+ if(json_integer_value(json_object_get(json_object_get(object, "bar"), "baz")) != 3)
+ fail("json_object_update_recursive failed to update nested value");
+
+ barAfter = json_object_get(object, "bar");
+ if(!barAfter)
+ fail("can't get bar object after json_object_update_recursive");
+
+ if(barBefore != barAfter)
+ fail("bar object reference changed after json_object_update_recursive");
+
+ json_decref(object);
+ json_decref(other);
+
+ /* check circular reference */
+ object = json_pack("{s{s{s{si}}}}", "foo", "bar", "baz", "xxx", 2);
+ other = json_pack("{s{s{si}}}", "foo", "bar", "baz", 2);
+ json_object_set(json_object_get(json_object_get(other, "foo"), "bar"), "baz",
+ json_object_get(other, "foo"));
+
+ if(!json_object_update_recursive(object, other))
+ fail("json_object_update_recursive update a circular reference!");
+
+ json_object_set_new(json_object_get(json_object_get(other, "foo"), "bar"), "baz",
+ json_integer(1));
+
+ if(json_object_update_recursive(object, other))
+ fail("json_object_update_recursive failed!");
+
+ json_decref(object);
+ json_decref(other);
+}
+
static void test_circular()
{
json_t *object1, *object2;
@@ -730,6 +810,7 @@ static void run_tests()
test_update();
test_set_many_keys();
test_conditional_updates();
+ test_recursive_updates();
test_circular();
test_set_nocheck();
test_iterators();