diff options
| author | Anthony Liguori <aliguori@us.ibm.com> | 2011-10-10 08:21:46 -0500 |
|---|---|---|
| committer | Anthony Liguori <aliguori@us.ibm.com> | 2011-10-10 08:21:46 -0500 |
| commit | ebffe2afceb1a17b5d134b5debf553955fe5ea1a (patch) | |
| tree | 223ee0630a56a8d1410d5ad283996486ec434ab7 /test-visitor.c | |
| parent | 057643f6c4751651ab640edb9b445cb3816edffc (diff) | |
| parent | 5bc465e4b1b6f4582a400c0a7033a1c841744278 (diff) | |
| download | focaccia-qemu-ebffe2afceb1a17b5d134b5debf553955fe5ea1a.tar.gz focaccia-qemu-ebffe2afceb1a17b5d134b5debf553955fe5ea1a.zip | |
Merge remote-tracking branch 'qmp/queue/qmp' into staging
Diffstat (limited to 'test-visitor.c')
| -rw-r--r-- | test-visitor.c | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/test-visitor.c b/test-visitor.c index b7717deb6d..847ce14ea1 100644 --- a/test-visitor.c +++ b/test-visitor.c @@ -27,11 +27,11 @@ static void visit_type_TestStruct(Visitor *v, TestStruct **obj, const char *name static void visit_type_TestStructList(Visitor *m, TestStructList ** obj, const char *name, Error **errp) { - GenericList *i; + GenericList *i, **head = (GenericList **)obj; visit_start_list(m, name, errp); - for (i = visit_next_list(m, (GenericList **)obj, errp); i; i = visit_next_list(m, &i, errp)) { + for (*head = i = visit_next_list(m, head, errp); i; i = visit_next_list(m, &i, errp)) { TestStructList *native_i = (TestStructList *)i; visit_type_TestStruct(m, &native_i->value, NULL, errp); } @@ -50,6 +50,8 @@ static void test_visitor_core(void) TestStructList *lts = NULL; Error *err = NULL; QObject *obj; + QList *qlist; + QDict *qdict; QString *str; int64_t value = 0; @@ -96,7 +98,9 @@ static void test_visitor_core(void) g_assert(pts->y == 84); qobject_decref(obj); + g_free(pts); + /* test list input visitor */ obj = qobject_from_json("[{'x': 42, 'y': 84}, {'x': 12, 'y': 24}]"); mi = qmp_input_visitor_new(obj); v = qmp_input_get_visitor(mi); @@ -110,14 +114,41 @@ static void test_visitor_core(void) g_assert(lts->value->x == 42); g_assert(lts->value->y == 84); - lts = lts->next; - g_assert(lts != NULL); - g_assert(lts->value->x == 12); - g_assert(lts->value->y == 24); + g_assert(lts->next != NULL); + g_assert(lts->next->value->x == 12); + g_assert(lts->next->value->y == 24); + g_assert(lts->next->next == NULL); - g_assert(lts->next == NULL); + qobject_decref(obj); + /* test list output visitor */ + mo = qmp_output_visitor_new(); + v = qmp_output_get_visitor(mo); + visit_type_TestStructList(v, <s, NULL, &err); + if (err) { + g_error("%s", error_get_pretty(err)); + } + obj = qmp_output_get_qobject(mo); + g_print("obj: %s\n", qstring_get_str(qobject_to_json(obj))); + + qlist = qobject_to_qlist(obj); + assert(qlist); + obj = qlist_pop(qlist); + qdict = qobject_to_qdict(obj); + assert(qdict); + assert(qdict_get_int(qdict, "x") == 42); + assert(qdict_get_int(qdict, "y") == 84); + qobject_decref(obj); + + obj = qlist_pop(qlist); + qdict = qobject_to_qdict(obj); + assert(qdict); + assert(qdict_get_int(qdict, "x") == 12); + assert(qdict_get_int(qdict, "y") == 24); qobject_decref(obj); + + qmp_output_visitor_cleanup(mo); + QDECREF(qlist); } /* test deep nesting with refs to other user-defined types */ @@ -286,7 +317,8 @@ static void test_nested_enums(void) g_assert(nested_enums_cpy->has_enum2 == false); g_assert(nested_enums_cpy->has_enum4 == true); - qobject_decref(obj); + qmp_output_visitor_cleanup(mo); + qmp_input_visitor_cleanup(mi); qapi_free_NestedEnumsOne(nested_enums); qapi_free_NestedEnumsOne(nested_enums_cpy); } |