Parcourir la source

cJSON_Add...ToObject: Add tests for failure conditions

Max Bruckner il y a 7 ans
Parent
commit
77931e7fc0
1 fichiers modifiés avec 244 ajouts et 0 suppressions
  1. 244 0
      tests/cjson_add.c

+ 244 - 0
tests/cjson_add.c

@@ -28,6 +28,17 @@
 #include "unity/src/unity.h"
 #include "unity/src/unity.h"
 #include "common.h"
 #include "common.h"
 
 
+static void *failing_malloc(size_t size)
+{
+    (void)size;
+    return NULL;
+}
+
+static cJSON_Hooks failing_hooks = {
+    failing_malloc,
+    free
+};
+
 static void cjson_add_null_should_add_null(void)
 static void cjson_add_null_should_add_null(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -41,6 +52,29 @@ static void cjson_add_null_should_add_null(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_null_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddNullToObject(NULL, "null"));
+    TEST_ASSERT_NULL(cJSON_AddNullToObject(root, NULL));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_null_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddNullToObject(root, "null"));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 static void cjson_add_true_should_add_true(void)
 static void cjson_add_true_should_add_true(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -54,6 +88,29 @@ static void cjson_add_true_should_add_true(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_true_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddTrueToObject(NULL, "true"));
+    TEST_ASSERT_NULL(cJSON_AddTrueToObject(root, NULL));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_true_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddTrueToObject(root, "true"));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 static void cjson_add_false_should_add_false(void)
 static void cjson_add_false_should_add_false(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -67,6 +124,29 @@ static void cjson_add_false_should_add_false(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_false_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddFalseToObject(NULL, "false"));
+    TEST_ASSERT_NULL(cJSON_AddFalseToObject(root, NULL));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_false_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddFalseToObject(root, "false"));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 static void cjson_add_bool_should_add_bool(void)
 static void cjson_add_bool_should_add_bool(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -86,6 +166,29 @@ static void cjson_add_bool_should_add_bool(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_bool_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddBoolToObject(NULL, "false", false));
+    TEST_ASSERT_NULL(cJSON_AddBoolToObject(root, NULL, false));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_bool_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddBoolToObject(root, "false", false));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 static void cjson_add_number_should_add_number(void)
 static void cjson_add_number_should_add_number(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -102,6 +205,29 @@ static void cjson_add_number_should_add_number(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_number_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddNumberToObject(NULL, "number", 42));
+    TEST_ASSERT_NULL(cJSON_AddNumberToObject(root, NULL, 42));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_number_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddNumberToObject(root, "number", 42));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 static void cjson_add_string_should_add_string(void)
 static void cjson_add_string_should_add_string(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -116,6 +242,29 @@ static void cjson_add_string_should_add_string(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_string_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddStringToObject(NULL, "string", "string"));
+    TEST_ASSERT_NULL(cJSON_AddStringToObject(root, NULL, "string"));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_string_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddStringToObject(root, "string", "string"));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 static void cjson_add_raw_should_add_raw(void)
 static void cjson_add_raw_should_add_raw(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -130,6 +279,29 @@ static void cjson_add_raw_should_add_raw(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_raw_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddRawToObject(NULL, "raw", "{}"));
+    TEST_ASSERT_NULL(cJSON_AddRawToObject(root, NULL, "{}"));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_raw_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddRawToObject(root, "raw", "{}"));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 static void cJSON_add_object_should_add_object(void)
 static void cJSON_add_object_should_add_object(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -142,6 +314,29 @@ static void cJSON_add_object_should_add_object(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_object_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddObjectToObject(NULL, "object"));
+    TEST_ASSERT_NULL(cJSON_AddObjectToObject(root, NULL));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_object_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddObjectToObject(root, "object"));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 static void cJSON_add_array_should_add_array(void)
 static void cJSON_add_array_should_add_array(void)
 {
 {
     cJSON *root = cJSON_CreateObject();
     cJSON *root = cJSON_CreateObject();
@@ -154,19 +349,68 @@ static void cJSON_add_array_should_add_array(void)
     cJSON_Delete(root);
     cJSON_Delete(root);
 }
 }
 
 
+static void cjson_add_array_should_fail_with_null_pointers(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    TEST_ASSERT_NULL(cJSON_AddArrayToObject(NULL, "array"));
+    TEST_ASSERT_NULL(cJSON_AddArrayToObject(root, NULL));
+
+    cJSON_Delete(root);
+}
+
+static void cjson_add_array_should_fail_on_allocation_failure(void)
+{
+    cJSON *root = cJSON_CreateObject();
+
+    cJSON_InitHooks(&failing_hooks);
+
+    TEST_ASSERT_NULL(cJSON_AddArrayToObject(root, "array"));
+
+    cJSON_InitHooks(NULL);
+
+    cJSON_Delete(root);
+}
+
 int main(void)
 int main(void)
 {
 {
     UNITY_BEGIN();
     UNITY_BEGIN();
 
 
     RUN_TEST(cjson_add_null_should_add_null);
     RUN_TEST(cjson_add_null_should_add_null);
+    RUN_TEST(cjson_add_null_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_null_should_fail_on_allocation_failure);
+
     RUN_TEST(cjson_add_true_should_add_true);
     RUN_TEST(cjson_add_true_should_add_true);
+    RUN_TEST(cjson_add_true_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_true_should_fail_on_allocation_failure);
+
     RUN_TEST(cjson_add_false_should_add_false);
     RUN_TEST(cjson_add_false_should_add_false);
+    RUN_TEST(cjson_add_false_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_false_should_fail_on_allocation_failure);
+
     RUN_TEST(cjson_add_bool_should_add_bool);
     RUN_TEST(cjson_add_bool_should_add_bool);
+    RUN_TEST(cjson_add_bool_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_bool_should_fail_on_allocation_failure);
+
     RUN_TEST(cjson_add_number_should_add_number);
     RUN_TEST(cjson_add_number_should_add_number);
+    RUN_TEST(cjson_add_number_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_number_should_fail_on_allocation_failure);
+
     RUN_TEST(cjson_add_string_should_add_string);
     RUN_TEST(cjson_add_string_should_add_string);
+    RUN_TEST(cjson_add_string_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_string_should_fail_on_allocation_failure);
+
     RUN_TEST(cjson_add_raw_should_add_raw);
     RUN_TEST(cjson_add_raw_should_add_raw);
+    RUN_TEST(cjson_add_raw_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_raw_should_fail_on_allocation_failure);
+
     RUN_TEST(cJSON_add_object_should_add_object);
     RUN_TEST(cJSON_add_object_should_add_object);
+    RUN_TEST(cjson_add_object_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_object_should_fail_on_allocation_failure);
+
     RUN_TEST(cJSON_add_array_should_add_array);
     RUN_TEST(cJSON_add_array_should_add_array);
+    RUN_TEST(cjson_add_array_should_fail_with_null_pointers);
+    RUN_TEST(cjson_add_array_should_fail_on_allocation_failure);
 
 
     return UNITY_END();
     return UNITY_END();
 }
 }