From f3e2147e7220d90a569cd830b99b968bfdd71ddd Mon Sep 17 00:00:00 2001 From: James Prestwood Date: Thu, 6 Jan 2022 11:50:07 -0800 Subject: [PATCH] unit: add test for nested arrays --- unit/test-json.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/unit/test-json.c b/unit/test-json.c index 56986438..d160f6b7 100644 --- a/unit/test-json.c +++ b/unit/test-json.c @@ -423,6 +423,51 @@ static void test_json_arrays(const void *data) json_contents_free(c); } +static void test_json_nested_arrays(const void *data) +{ + char json[] = "{\"array\":[[], {}, [1, 2], {\"key\":\"value\"}]}"; + int count = 0; + struct json_iter iter; + struct json_iter array; + struct json_iter inner; + struct json_contents *c = json_contents_new(json, strlen(json)); + + json_iter_init(&iter, c); + assert(json_iter_parse(&iter, + JSON_MANDATORY("array", JSON_ARRAY, &array), + JSON_UNDEFINED)); + + while (json_iter_next(&array)) { + int count2 = 0; + + assert(json_iter_get_container(&array, &inner)); + + while (json_iter_next(&inner)) + count2++; + + /* + * TODO: add checks for object iteration. Currently these will + * just count all tokens in the object. + */ + switch (count) { + case 0: + assert(count2 == 0); + break; + case 2: + assert(count2 == 2); + break; + default: + break; + } + + count++; + } + + assert(count == 4); + + json_contents_free(c); +} + int main(int argc, char *argv[]) { l_test_init(&argc, &argv); @@ -435,6 +480,7 @@ int main(int argc, char *argv[]) l_test_add("json larger object", test_json_larger_object, NULL); l_test_add("json test primitives", test_json_primitives, NULL); l_test_add("json test arrays", test_json_arrays, NULL); + l_test_add("json test nested arrays", test_json_nested_arrays, NULL); return l_test_run(); }