From a5089f5a79c2ef42a08a79a7fa0b2aaec8279d42 Mon Sep 17 00:00:00 2001 From: dota17 Date: Tue, 31 Dec 2019 11:27:09 +0800 Subject: [PATCH] update json_visit testcase --- tests/test_visit.c | 55 +++++++++++++++++++++++++++++++++++++++ tests/test_visit.expected | 34 ++++++++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/tests/test_visit.c b/tests/test_visit.c index 4046133..53df190 100644 --- a/tests/test_visit.c +++ b/tests/test_visit.c @@ -12,6 +12,9 @@ static json_c_visit_userfunc emit_object; static json_c_visit_userfunc skip_arrays; static json_c_visit_userfunc pop_and_stop; static json_c_visit_userfunc err_on_subobj2; +static json_c_visit_userfunc pop_array; +static json_c_visit_userfunc stop_array; +static json_c_visit_userfunc err_return; int main(void) { @@ -48,6 +51,18 @@ int main(void) printf("json_c_visit(err_on_subobj2)=%d\n", rv); printf("================================\n\n"); + rv = json_c_visit(jso, 0, pop_array, NULL); + printf("json_c_visit(pop_array)=%d\n", rv); + printf("================================\n\n"); + + rv = json_c_visit(jso, 0, stop_array, NULL); + printf("json_c_visit(stop_array)=%d\n", rv); + printf("================================\n\n"); + + rv = json_c_visit(jso, 0, err_return, NULL); + printf("json_c_visit(err_return)=%d\n", rv); + printf("================================\n\n"); + json_object_put(jso); return 0; @@ -111,3 +126,43 @@ static int err_on_subobj2(json_object *jso, int flags, return JSON_C_VISIT_RETURN_CONTINUE; } +static int pop_array(json_object *jso, int flags, + json_object *parent_jso, + const char *jso_key, + size_t *jso_index, void *userarg) +{ + (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); + if (jso_index != NULL && (*jso_index == 0)) + { + printf("POP after handling array[0]\n"); + return JSON_C_VISIT_RETURN_POP; + } + return JSON_C_VISIT_RETURN_CONTINUE; +} + +static int stop_array(json_object *jso, int flags, + json_object *parent_jso, + const char *jso_key, + size_t *jso_index, void *userarg) +{ + (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); + if (jso_index != NULL && (*jso_index == 0)) + { + printf("STOP after handling array[1]\n"); + return JSON_C_VISIT_RETURN_STOP; + } + return JSON_C_VISIT_RETURN_CONTINUE; +} + +static int err_return(json_object *jso, int flags, + json_object *parent_jso, + const char *jso_key, + size_t *jso_index, void *userarg) +{ + printf("flags: 0x%x, key: %s, index: %ld, value: %s\n", + flags, + (jso_key ? jso_key : "(null)"), + (jso_index ? (long)*jso_index : -1L), + json_object_to_json_string(jso)); + return 100; +} diff --git a/tests/test_visit.expected b/tests/test_visit.expected index 2f05622..5f32317 100644 --- a/tests/test_visit.expected +++ b/tests/test_visit.expected @@ -53,3 +53,37 @@ ERROR after handling subobj1 json_c_visit(err_on_subobj2)=-1 ================================ +flags: 0x0, key: (null), index: -1, value: { "obj1": 123, "obj2": { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] }, "obj3": 1.234, "obj4": [ true, false, null ] } +flags: 0x0, key: obj1, index: -1, value: 123 +flags: 0x0, key: obj2, index: -1, value: { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] } +flags: 0x0, key: subobj1, index: -1, value: "aaa" +flags: 0x0, key: subobj2, index: -1, value: "bbb" +flags: 0x0, key: subobj3, index: -1, value: [ "elem1", "elem2", true ] +flags: 0x0, key: (null), index: 0, value: "elem1" +POP after handling array[0] +flags: 0x2, key: subobj3, index: -1, value: [ "elem1", "elem2", true ] +flags: 0x2, key: obj2, index: -1, value: { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] } +flags: 0x0, key: obj3, index: -1, value: 1.234 +flags: 0x0, key: obj4, index: -1, value: [ true, false, null ] +flags: 0x0, key: (null), index: 0, value: true +POP after handling array[0] +flags: 0x2, key: obj4, index: -1, value: [ true, false, null ] +flags: 0x2, key: (null), index: -1, value: { "obj1": 123, "obj2": { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] }, "obj3": 1.234, "obj4": [ true, false, null ] } +json_c_visit(pop_array)=0 +================================ + +flags: 0x0, key: (null), index: -1, value: { "obj1": 123, "obj2": { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] }, "obj3": 1.234, "obj4": [ true, false, null ] } +flags: 0x0, key: obj1, index: -1, value: 123 +flags: 0x0, key: obj2, index: -1, value: { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] } +flags: 0x0, key: subobj1, index: -1, value: "aaa" +flags: 0x0, key: subobj2, index: -1, value: "bbb" +flags: 0x0, key: subobj3, index: -1, value: [ "elem1", "elem2", true ] +flags: 0x0, key: (null), index: 0, value: "elem1" +STOP after handling array[1] +json_c_visit(stop_array)=0 +================================ + +flags: 0x0, key: (null), index: -1, value: { "obj1": 123, "obj2": { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] }, "obj3": 1.234, "obj4": [ true, false, null ] } +json_c_visit(err_return)=-1 +================================ + -- 2.49.0