Tue, 06 Jan 2026 20:59:06 +0100
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);