tests/test_json.c

changeset 1567
f60f23b362e9
parent 1563
6e2f83ef6f5a
--- a/tests/test_json.c	Wed Dec 10 22:34:48 2025 +0100
+++ b/tests/test_json.c	Wed Dec 10 22:53:41 2025 +0100
@@ -215,23 +215,34 @@
 
 CX_TEST(test_json_from_string_multiple_values) {
     CxJsonStatus status;
-    CxJsonValue *obj = NULL;
+    CxJsonValue *obj;
     CX_TEST_DO {
+        obj = NULL;
         status = cxJsonFromString(NULL, "{ \"obj1\": \"hello\" }\n\"value2\"\n", &obj);
-        
-        // TODO: what is the expected behavior here? Is this an error or do we ignore the second value?
+        CX_TEST_ASSERT(obj != NULL);
+        CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
+        CX_TEST_ASSERT(status == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
+
+        obj = NULL;
+        status = cxJsonFromString(NULL, "\"value\" \n ] syntax error [", &obj);
+        CX_TEST_ASSERT(obj != NULL);
+        CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
+        CX_TEST_ASSERT(status == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
+    }
+}
+
+CX_TEST(test_json_from_string_untrimmed) {
+    CxJsonStatus status;
+    CxJsonValue *obj;
+    CX_TEST_DO {
+        obj = NULL;
+        status = cxJsonFromString(NULL, "\n\t{ \"obj1\": \"hello\" }   \n", &obj);
         CX_TEST_ASSERT(status == CX_JSON_NO_ERROR);
         CX_TEST_ASSERT(cxJsonIsObject(obj));
-        // CX_TEST_ASSERT(status == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
-        
-        cxJsonValueFree(obj);
-        
-        // TODO: this really should be an error in theory
-        status = cxJsonFromString(NULL, "\"value\" \n ] syntax error [", &obj);
-        CX_TEST_ASSERT(status == CX_JSON_NO_ERROR);
-        CX_TEST_ASSERT(cxJsonIsString(obj));
-        // CX_TEST_ASSERT(status == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
-        
+        CxJsonValue *obj1 = cxJsonObjGet(obj, "obj1");
+        CX_TEST_ASSERT(cxJsonIsString(obj1));
+        CX_TEST_ASSERT(cx_strcmp(cxJsonAsCxString(obj1), "hello") == 0);
+
         cxJsonValueFree(obj);
     }
 }
@@ -930,7 +941,7 @@
         cxJsonValueFree(v);
         // read remaining '\n'
         result = cxJsonNext(&json, &v);
-        CX_TEST_ASSERT(result == CX_JSON_INCOMPLETE_DATA);
+        CX_TEST_ASSERT(result == CX_JSON_NO_DATA);
         // read string
         cxJsonFill(&json, "\"hello world\"\n");
         result = cxJsonNext(&json, &v);
@@ -1565,6 +1576,7 @@
     cx_test_register(suite, test_json_from_string);
     cx_test_register(suite, test_json_from_string_errors);
     cx_test_register(suite, test_json_from_string_multiple_values);
+    cx_test_register(suite, test_json_from_string_untrimmed);
     cx_test_register(suite, test_json_escaped_strings);
     cx_test_register(suite, test_json_escaped_unicode_strings);
     cx_test_register(suite, test_json_escaped_unicode_malformed);

mercurial