From 88eb8c969f6abe119994c7ab307b9be58ff076a5 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Mon, 21 Jul 2025 14:26:06 +0200 Subject: feat: JSON object parsing --- test_json.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'test_json.c') diff --git a/test_json.c b/test_json.c index 751b5bd..e187b62 100644 --- a/test_json.c +++ b/test_json.c @@ -1,5 +1,6 @@ #include "json.h" #include "testing.h" +#include char test_json_integer() { Arena perm = Arena_new(128e3); @@ -7,7 +8,7 @@ char test_json_integer() { JSON json_int = JSON_parse(&perm, "123"); t_assert(*json_int.integer == 123); - t_assert(Arena_get_used(perm) == 28); + t_assert_equal(Arena_get_used(perm), 36); return 0; } @@ -17,7 +18,7 @@ char test_json_int_array() { JSON json_int_array = JSON_parse(&perm, "[1,2,3]"); t_assert(json_int_array.integer == NULL); - t_assert(json_int_array.array->len == 3); + t_assert_equal(json_int_array.array->len, 3); int ints[3]; int sum = 0; for (int i = 0; i < json_int_array.array->len; i++) { @@ -29,7 +30,7 @@ char test_json_int_array() { t_assert(ints[1] == 2); t_assert(ints[2] == 3); t_assert(sum == 6); - t_assert(Arena_get_used(perm) == 264); + t_assert_equal(Arena_get_used(perm), 344); return 0; } @@ -46,7 +47,7 @@ char test_json_nested_array() { Str str = *val_2.string; Str expected = S("abc"); t_assert(Str_equals(str, expected)); - t_assert(Arena_get_used(perm) == 203); + t_assert_equal(Arena_get_used(perm), 267); return 0; } @@ -57,7 +58,32 @@ char test_json_string() { JSON js = JSON_parse(&perm, "\"abc\""); t_assert(Str_equals(*js.string, S("abc"))); - t_assert(Arena_get_used(perm) == 27); + t_assert_equal(Arena_get_used(perm), 35); return 0; } + +char test_json_empty_object() { + Arena perm = Arena_new(128e3); + + JSON doc = JSON_parse(&perm, "{}"); + + t_assert_equal(doc.object->len, 0); + t_assert_equal(Arena_get_used(perm), 216); + + return 0; +} + +char test_json_object() { + Arena perm = Arena_new(128e3); + + JSON doc = JSON_parse(&perm, "{\"key\": \"value\"}"); + + t_assert_equal(Arena_get_used(perm), 261); + t_assert_equal(doc.object->len, 1); + t_assert(Str_equals(*Vec_get(&doc.object->keys, Str, 0), S("key"))); + t_assert(Str_equals(*JSONObject_get(doc.object, S("key"))->string, S("value"))) + t_assert_equal(Arena_get_used(perm), 261); + + return 0; +} -- cgit v1.3