add dbuJsonToList tests default tip

Tue, 06 Jan 2026 20:59:06 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 06 Jan 2026 20:59:06 +0100
changeset 46
96e139ab57f2
parent 45
a8b1df52e63e

add dbuJsonToList tests

dbutils/json.c file | annotate | diff | comparison | revisions
test/json.c file | annotate | diff | comparison | revisions
test/json.h file | annotate | diff | comparison | revisions
test/main.c file | annotate | diff | comparison | revisions
--- a/dbutils/json.c	Tue Jan 06 20:50:10 2026 +0100
+++ b/dbutils/json.c	Tue Jan 06 20:59:06 2026 +0100
@@ -287,12 +287,16 @@
     }
     
     for(size_t i=0;i<value->array.size;i++) {
-        void *elm = jsonToObj(type, a, value->array.data[i], 1, error);
-        if(!elm) {
-            cxListFree(list);
-            return NULL;
+        CxJsonValue *elm = value->array.data[i];
+        void *elm_obj = NULL;
+        if(cxJsonIsObject(elm)) {
+            elm_obj = jsonToObj(type, a, elm, 1, error);
+            if(!elm_obj) {
+                cxListFree(list);
+                return NULL;
+            }
         }
-        if(cxListAdd(list, elm)) {
+        if(cxListAdd(list, elm_obj)) {
             *error = 3;
             cxListFree(list);
             return NULL;
--- a/test/json.c	Tue Jan 06 20:50:10 2026 +0100
+++ b/test/json.c	Tue Jan 06 20:59:06 2026 +0100
@@ -466,3 +466,61 @@
         free(obj);
     }
 }
+
+CX_TEST(testJsonToListEmpty) {
+    const char *jsonStr = "[]";
+    
+    CxJsonValue *json;
+    cxJsonFromString(NULL, jsonStr, &json);
+    
+    CX_TEST_DO {
+        CxList *list = dbuJsonToList(test2_class, NULL, json);
+        
+        CX_TEST_ASSERT(list != NULL);
+        CX_TEST_ASSERT(cxListSize(list) == 0);
+    }
+}
+
+CX_TEST(testJsonToListNull) {
+    const char *jsonStr = "[ null, null, null ]";
+    
+    CxJsonValue *json;
+    cxJsonFromString(NULL, jsonStr, &json);
+    
+    CX_TEST_DO {
+        CxList *list = dbuJsonToList(test2_class, NULL, json);
+        
+        CX_TEST_ASSERT(list != NULL);
+        CX_TEST_ASSERT(cxListSize(list) == 3);
+        
+        CX_TEST_ASSERT(cxListAt(list, 0) == NULL);
+        CX_TEST_ASSERT(cxListAt(list, 1) == NULL);
+        CX_TEST_ASSERT(cxListAt(list, 2) == NULL);
+    }
+}
+
+CX_TEST(testJsonToList) {
+    const char *jsonStr = "[ { \"name\":\"list test\", \"i\": 12 }, { \"name\":\"hello world\", \"i\": 14 } ]";
+    
+    CxJsonValue *json;
+    cxJsonFromString(NULL, jsonStr, &json);
+    
+    CX_TEST_DO {
+        CxList *list = dbuJsonToList(test2_class, NULL, json);
+        
+        CX_TEST_ASSERT(list != NULL);
+        CX_TEST_ASSERT(cxListSize(list) == 2);
+        
+        Test2 *elm0 = cxListAt(list, 0);
+        Test2 *elm1 = cxListAt(list, 1);
+        
+        CX_TEST_ASSERT(elm0 != NULL);
+        CX_TEST_ASSERT(elm1 != NULL);
+        
+        CX_TEST_ASSERT(!cx_strcmp(elm0->name, "list test"));
+        CX_TEST_ASSERT(elm0->i == 12);
+        
+        CX_TEST_ASSERT(!cx_strcmp(elm1->name, "hello world"));
+        CX_TEST_ASSERT(elm1->i == 14);
+    }
+}
--- a/test/json.h	Tue Jan 06 20:50:10 2026 +0100
+++ b/test/json.h	Tue Jan 06 20:59:06 2026 +0100
@@ -49,6 +49,9 @@
 CX_TEST(testJsonToObjectWithArray);
 CX_TEST(testJsonToObjectWithEmptyArray);
 CX_TEST(testJsonToObjectWithNullArray);
+CX_TEST(testJsonToListEmpty);
+CX_TEST(testJsonToListNull);
+CX_TEST(testJsonToList);
 
 
 #ifdef __cplusplus
--- a/test/main.c	Tue Jan 06 20:50:10 2026 +0100
+++ b/test/main.c	Tue Jan 06 20:59:06 2026 +0100
@@ -149,6 +149,9 @@
     cx_test_register(suite, testJsonToObjectWithArray);
     cx_test_register(suite, testJsonToObjectWithEmptyArray);
     cx_test_register(suite, testJsonToObjectWithNullArray);
+    cx_test_register(suite, testJsonToListEmpty);
+    cx_test_register(suite, testJsonToListNull);
+    cx_test_register(suite, testJsonToList);
     
     cx_test_run_stdout(suite);
     

mercurial