qapi: complete implementation of unions

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Paolo Bonzini 2012-03-06 18:55:56 +01:00 committed by Kevin Wolf
parent 622d241998
commit dc8fb6df5a
5 changed files with 98 additions and 1 deletions

View file

@ -380,6 +380,38 @@ static void test_visitor_out_list_qapi_free(TestOutputVisitorData *data,
qapi_free_UserDefNestedList(head);
}
static void test_visitor_out_union(TestOutputVisitorData *data,
const void *unused)
{
QObject *arg, *qvalue;
QDict *qdict, *value;
Error *err = NULL;
UserDefUnion *tmp = g_malloc0(sizeof(UserDefUnion));
tmp->kind = USER_DEF_UNION_KIND_A;
tmp->a = g_malloc0(sizeof(UserDefA));
tmp->a->boolean = true;
visit_type_UserDefUnion(data->ov, &tmp, NULL, &err);
g_assert(err == NULL);
arg = qmp_output_get_qobject(data->qov);
g_assert(qobject_type(arg) == QTYPE_QDICT);
qdict = qobject_to_qdict(arg);
g_assert_cmpstr(qdict_get_str(qdict, "type"), ==, "a");
qvalue = qdict_get(qdict, "data");
g_assert(data != NULL);
g_assert(qobject_type(qvalue) == QTYPE_QDICT);
value = qobject_to_qdict(qvalue);
g_assert_cmpint(qdict_get_bool(value, "boolean"), ==, true);
qapi_free_UserDefUnion(tmp);
QDECREF(qdict);
}
static void output_visitor_test_add(const char *testpath,
TestOutputVisitorData *data,
void (*test_func)(TestOutputVisitorData *data, const void *user_data))
@ -416,6 +448,8 @@ int main(int argc, char **argv)
&out_visitor_data, test_visitor_out_list);
output_visitor_test_add("/visitor/output/list-qapi-free",
&out_visitor_data, test_visitor_out_list_qapi_free);
output_visitor_test_add("/visitor/output/union",
&out_visitor_data, test_visitor_out_union);
g_test_run();