QAPI patches for 2017-02-22

-----BEGIN PGP SIGNATURE-----
 
 iQIcBAABAgAGBQJYreKbAAoJEDhwtADrkYZTBvgP/1lituSTlTjG0qfol9E2djCj
 8gH4XCFZy79qej6aZQtswFDjlVz5IWSw64byBMOL/KsBemNJHdmUDrAaa4hhuP/f
 tRM/NMt+unz5MuuDmf8iGROEwTmLZNg09K2GfTA9q59WhXNTQ7vPsxYiBJx7ZHND
 3aKEDALWPNtQmyyhqdxqnOvWUbfmACmb6DdxxyhKh5jhWrAt36g3Bh3lfbgw9INz
 jUzvarL0AQOZvljoUcTQEW8FCdHVOwelG9U7/yJkUP1kWGBPq6afnecaGiMe7vav
 frbEqOKGzqjvv3ADiEIjULInL5KlKqTcEGFNtme6rubw3nj/UgSHTiZjOZJzAxvw
 GKC+Cex/Hnfyyvf24vFkJMXwqqhkRtE+Beb9uJMyOzs+G0k9q+z7GMrqnPbbPTnk
 5qCMd0Dk9wYnEaOg8HVu8vPohYcbsYnzYgu917GJW9kCKRzaQBcr4jT6JwKPStUk
 ziJf1Ng8PdnDqKERx+T71H/9egnew9PDjxQ9YFAJROwQc8342xtaUzevpAIwhGLk
 NiXC7E1cNGzzIpnywM9MtOzGbcXg3IJd0h/DXrMQxk4bH/6Y3TOVkNS4I1iQ7Amz
 8qZ/4kh8dg2dGtr4Cc2XzJ+ELNydCuvRapLI1u2hiJLyFGA6OCAFzfEexXmmwLO1
 Zp+9aCArCknWoech7NTw
 =7Lt+
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2017-02-22' into staging

QAPI patches for 2017-02-22

# gpg: Signature made Wed 22 Feb 2017 19:12:27 GMT
# gpg:                using RSA key 0x3870B400EB918653
# gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
# gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>"
# Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653

* remotes/armbru/tags/pull-qapi-2017-02-22:
  block: Don't bother asserting type of output visitor's output
  monitor: Clean up handle_hmp_command() a bit
  tests: Don't check qobject_type() before qobject_to_qbool()
  tests: Don't check qobject_type() before qobject_to_qfloat()
  tests: Don't check qobject_type() before qobject_to_qint()
  tests: Don't check qobject_type() before qobject_to_qstring()
  tests: Don't check qobject_type() before qobject_to_qlist()
  Don't check qobject_type() before qobject_to_qdict()
  test-qmp-event: Simplify and tighten event_test_emit()
  libqtest: Clean up qmp_response() a bit
  check-qjson: Simplify around compare_litqobj_to_qobj()
  check-qdict: Tighten qdict_crumple_test_recursive() some
  check-qdict: Simplify qdict_crumple_test_recursive()
  qdict: Make qdict_get_qlist() safe like qdict_get_qdict()
  net: Flatten simple union NetLegacyOptions
  numa: Flatten simple union NumaOptions

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2017-02-24 15:00:51 +00:00
commit fe8ee082db
16 changed files with 155 additions and 274 deletions

View File

@ -1169,13 +1169,13 @@ static QDict *parse_json_filename(const char *filename, Error **errp)
return NULL; return NULL;
} }
if (qobject_type(options_obj) != QTYPE_QDICT) { options = qobject_to_qdict(options_obj);
if (!options) {
qobject_decref(options_obj); qobject_decref(options_obj);
error_setg(errp, "Invalid JSON object given"); error_setg(errp, "Invalid JSON object given");
return NULL; return NULL;
} }
options = qobject_to_qdict(options_obj);
qdict_flatten(options); qdict_flatten(options);
return options; return options;

View File

@ -537,8 +537,6 @@ static void nbd_refresh_filename(BlockDriverState *bs, QDict *options)
visit_type_SocketAddress(ov, NULL, &s->saddr, &error_abort); visit_type_SocketAddress(ov, NULL, &s->saddr, &error_abort);
visit_complete(ov, &saddr_qdict); visit_complete(ov, &saddr_qdict);
visit_free(ov); visit_free(ov);
assert(qobject_type(saddr_qdict) == QTYPE_QDICT);
qdict_put_obj(opts, "server", saddr_qdict); qdict_put_obj(opts, "server", saddr_qdict);
if (s->export) { if (s->export) {

View File

@ -805,8 +805,6 @@ static void nfs_refresh_filename(BlockDriverState *bs, QDict *options)
ov = qobject_output_visitor_new(&server_qdict); ov = qobject_output_visitor_new(&server_qdict);
visit_type_NFSServer(ov, NULL, &client->server, &error_abort); visit_type_NFSServer(ov, NULL, &client->server, &error_abort);
visit_complete(ov, &server_qdict); visit_complete(ov, &server_qdict);
assert(qobject_type(server_qdict) == QTYPE_QDICT);
qdict_put_obj(opts, "server", server_qdict); qdict_put_obj(opts, "server", server_qdict);
qdict_put(opts, "path", qstring_from_str(client->path)); qdict_put(opts, "path", qstring_from_str(client->path));

View File

@ -682,7 +682,6 @@ void bdrv_image_info_specific_dump(fprintf_function func_fprintf, void *f,
visit_type_ImageInfoSpecific(v, NULL, &info_spec, &error_abort); visit_type_ImageInfoSpecific(v, NULL, &info_spec, &error_abort);
visit_complete(v, &obj); visit_complete(v, &obj);
assert(qobject_type(obj) == QTYPE_QDICT);
data = qdict_get(qobject_to_qdict(obj), "data"); data = qdict_get(qobject_to_qdict(obj), "data");
dump_qobject(func_fprintf, f, 1, data); dump_qobject(func_fprintf, f, 1, data);
qobject_decref(obj); qobject_decref(obj);

View File

@ -1025,8 +1025,8 @@ void hmp_pcie_aer_inject_error(Monitor *mon, const QDict *qdict)
return; return;
} }
assert(qobject_type(data) == QTYPE_QDICT);
qdict = qobject_to_qdict(data); qdict = qobject_to_qdict(data);
assert(qdict);
devfn = (int)qdict_get_int(qdict, "devfn"); devfn = (int)qdict_get_int(qdict, "devfn");
monitor_printf(mon, "OK id: %s root bus: %s, bus: %x devfn: %x.%x\n", monitor_printf(mon, "OK id: %s root bus: %s, bus: %x devfn: %x.%x\n",

View File

@ -3712,12 +3712,12 @@ static QDict *qmp_check_input_obj(QObject *input_obj, Error **errp)
int has_exec_key = 0; int has_exec_key = 0;
QDict *input_dict; QDict *input_dict;
if (qobject_type(input_obj) != QTYPE_QDICT) { input_dict = qobject_to_qdict(input_obj);
if (!input_dict) {
error_setg(errp, QERR_QMP_BAD_INPUT_OBJECT, "object"); error_setg(errp, QERR_QMP_BAD_INPUT_OBJECT, "object");
return NULL; return NULL;
} }
input_dict = qobject_to_qdict(input_obj);
for (ent = qdict_first(input_dict); ent; ent = qdict_next(input_dict, ent)){ for (ent = qdict_first(input_dict); ent; ent = qdict_next(input_dict, ent)){
const char *arg_name = qdict_entry_key(ent); const char *arg_name = qdict_entry_key(ent);
@ -3761,10 +3761,11 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
Error *err = NULL; Error *err = NULL;
req = json_parser_parse_err(tokens, NULL, &err); req = json_parser_parse_err(tokens, NULL, &err);
if (err || !req || qobject_type(req) != QTYPE_QDICT) { if (!req && !err) {
if (!err) { /* json_parser_parse_err() sucks: can fail without setting @err */
error_setg(&err, QERR_JSON_PARSING); error_setg(&err, QERR_JSON_PARSING);
} }
if (err) {
goto err_out; goto err_out;
} }

View File

@ -993,47 +993,47 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp)
/* Map the old options to the new flat type */ /* Map the old options to the new flat type */
switch (opts->type) { switch (opts->type) {
case NET_LEGACY_OPTIONS_KIND_NONE: case NET_LEGACY_OPTIONS_TYPE_NONE:
return 0; /* nothing to do */ return 0; /* nothing to do */
case NET_LEGACY_OPTIONS_KIND_NIC: case NET_LEGACY_OPTIONS_TYPE_NIC:
legacy.type = NET_CLIENT_DRIVER_NIC; legacy.type = NET_CLIENT_DRIVER_NIC;
legacy.u.nic = *opts->u.nic.data; legacy.u.nic = opts->u.nic;
break; break;
case NET_LEGACY_OPTIONS_KIND_USER: case NET_LEGACY_OPTIONS_TYPE_USER:
legacy.type = NET_CLIENT_DRIVER_USER; legacy.type = NET_CLIENT_DRIVER_USER;
legacy.u.user = *opts->u.user.data; legacy.u.user = opts->u.user;
break; break;
case NET_LEGACY_OPTIONS_KIND_TAP: case NET_LEGACY_OPTIONS_TYPE_TAP:
legacy.type = NET_CLIENT_DRIVER_TAP; legacy.type = NET_CLIENT_DRIVER_TAP;
legacy.u.tap = *opts->u.tap.data; legacy.u.tap = opts->u.tap;
break; break;
case NET_LEGACY_OPTIONS_KIND_L2TPV3: case NET_LEGACY_OPTIONS_TYPE_L2TPV3:
legacy.type = NET_CLIENT_DRIVER_L2TPV3; legacy.type = NET_CLIENT_DRIVER_L2TPV3;
legacy.u.l2tpv3 = *opts->u.l2tpv3.data; legacy.u.l2tpv3 = opts->u.l2tpv3;
break; break;
case NET_LEGACY_OPTIONS_KIND_SOCKET: case NET_LEGACY_OPTIONS_TYPE_SOCKET:
legacy.type = NET_CLIENT_DRIVER_SOCKET; legacy.type = NET_CLIENT_DRIVER_SOCKET;
legacy.u.socket = *opts->u.socket.data; legacy.u.socket = opts->u.socket;
break; break;
case NET_LEGACY_OPTIONS_KIND_VDE: case NET_LEGACY_OPTIONS_TYPE_VDE:
legacy.type = NET_CLIENT_DRIVER_VDE; legacy.type = NET_CLIENT_DRIVER_VDE;
legacy.u.vde = *opts->u.vde.data; legacy.u.vde = opts->u.vde;
break; break;
case NET_LEGACY_OPTIONS_KIND_DUMP: case NET_LEGACY_OPTIONS_TYPE_DUMP:
legacy.type = NET_CLIENT_DRIVER_DUMP; legacy.type = NET_CLIENT_DRIVER_DUMP;
legacy.u.dump = *opts->u.dump.data; legacy.u.dump = opts->u.dump;
break; break;
case NET_LEGACY_OPTIONS_KIND_BRIDGE: case NET_LEGACY_OPTIONS_TYPE_BRIDGE:
legacy.type = NET_CLIENT_DRIVER_BRIDGE; legacy.type = NET_CLIENT_DRIVER_BRIDGE;
legacy.u.bridge = *opts->u.bridge.data; legacy.u.bridge = opts->u.bridge;
break; break;
case NET_LEGACY_OPTIONS_KIND_NETMAP: case NET_LEGACY_OPTIONS_TYPE_NETMAP:
legacy.type = NET_CLIENT_DRIVER_NETMAP; legacy.type = NET_CLIENT_DRIVER_NETMAP;
legacy.u.netmap = *opts->u.netmap.data; legacy.u.netmap = opts->u.netmap;
break; break;
case NET_LEGACY_OPTIONS_KIND_VHOST_USER: case NET_LEGACY_OPTIONS_TYPE_VHOST_USER:
legacy.type = NET_CLIENT_DRIVER_VHOST_USER; legacy.type = NET_CLIENT_DRIVER_VHOST_USER;
legacy.u.vhost_user = *opts->u.vhost_user.data; legacy.u.vhost_user = opts->u.vhost_user;
break; break;
default: default:
abort(); abort();
@ -1048,7 +1048,7 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp)
/* Do not add to a vlan if it's a nic with a netdev= parameter. */ /* Do not add to a vlan if it's a nic with a netdev= parameter. */
if (netdev->type != NET_CLIENT_DRIVER_NIC || if (netdev->type != NET_CLIENT_DRIVER_NIC ||
!opts->u.nic.data->has_netdev) { !opts->u.nic.has_netdev) {
peer = net_hub_add_port(net->has_vlan ? net->vlan : 0, NULL); peer = net_hub_add_port(net->has_vlan ? net->vlan : 0, NULL);
} }

4
numa.c
View File

@ -228,8 +228,8 @@ static int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
} }
switch (object->type) { switch (object->type) {
case NUMA_OPTIONS_KIND_NODE: case NUMA_OPTIONS_TYPE_NODE:
numa_node_parse(object->u.node.data, opts, &err); numa_node_parse(&object->u.node, opts, &err);
if (err) { if (err) {
goto end; goto end;
} }

View File

@ -3971,6 +3971,15 @@
'*name': 'str', '*name': 'str',
'opts': 'NetLegacyOptions' } } 'opts': 'NetLegacyOptions' } }
##
# @NetLegacyOptionsType:
#
# Since: 1.2
##
{ 'enum': 'NetLegacyOptionsType',
'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
'dump', 'bridge', 'netmap', 'vhost-user'] }
## ##
# @NetLegacyOptions: # @NetLegacyOptions:
# #
@ -3979,6 +3988,8 @@
# Since: 1.2 # Since: 1.2
## ##
{ 'union': 'NetLegacyOptions', { 'union': 'NetLegacyOptions',
'base': { 'type': 'NetLegacyOptionsType' },
'discriminator': 'type',
'data': { 'data': {
'none': 'NetdevNoneOptions', 'none': 'NetdevNoneOptions',
'nic': 'NetLegacyNicOptions', 'nic': 'NetLegacyNicOptions',
@ -5583,6 +5594,14 @@
'*head' : 'int', '*head' : 'int',
'events' : [ 'InputEvent' ] } } 'events' : [ 'InputEvent' ] } }
##
# @NumaOptionsType:
#
# Since: 2.1
##
{ 'enum': 'NumaOptionsType',
'data': [ 'node' ] }
## ##
# @NumaOptions: # @NumaOptions:
# #
@ -5591,6 +5610,8 @@
# Since: 2.1 # Since: 2.1
## ##
{ 'union': 'NumaOptions', { 'union': 'NumaOptions',
'base': { 'type': 'NumaOptionsType' },
'discriminator': 'type',
'data': { 'data': {
'node': 'NumaNodeOptions' }} 'node': 'NumaNodeOptions' }}

View File

@ -28,14 +28,13 @@ static QDict *qmp_dispatch_check_obj(const QObject *request, Error **errp)
bool has_exec_key = false; bool has_exec_key = false;
QDict *dict = NULL; QDict *dict = NULL;
if (qobject_type(request) != QTYPE_QDICT) { dict = qobject_to_qdict(request);
if (!dict) {
error_setg(errp, QERR_QMP_BAD_INPUT_OBJECT, error_setg(errp, QERR_QMP_BAD_INPUT_OBJECT,
"request is not a dictionary"); "request is not a dictionary");
return NULL; return NULL;
} }
dict = qobject_to_qdict(request);
for (ent = qdict_first(dict); ent; for (ent = qdict_first(dict); ent;
ent = qdict_next(dict, ent)) { ent = qdict_next(dict, ent)) {
arg_name = qdict_entry_key(ent); arg_name = qdict_entry_key(ent);

View File

@ -177,20 +177,6 @@ size_t qdict_size(const QDict *qdict)
return qdict->size; return qdict->size;
} }
/**
* qdict_get_obj(): Get a QObject of a specific type
*/
static QObject *qdict_get_obj(const QDict *qdict, const char *key, QType type)
{
QObject *obj;
obj = qdict_get(qdict, key);
assert(obj != NULL);
assert(qobject_type(obj) == type);
return obj;
}
/** /**
* qdict_get_double(): Get an number mapped by 'key' * qdict_get_double(): Get an number mapped by 'key'
* *
@ -241,25 +227,15 @@ bool qdict_get_bool(const QDict *qdict, const char *key)
} }
/** /**
* qdict_get_qlist(): Get the QList mapped by 'key' * qdict_get_qlist(): If @qdict maps @key to a QList, return it, else NULL.
*
* This function assumes that 'key' exists and it stores a
* QList object.
*
* Return QList mapped by 'key'.
*/ */
QList *qdict_get_qlist(const QDict *qdict, const char *key) QList *qdict_get_qlist(const QDict *qdict, const char *key)
{ {
return qobject_to_qlist(qdict_get_obj(qdict, key, QTYPE_QLIST)); return qobject_to_qlist(qdict_get(qdict, key));
} }
/** /**
* qdict_get_qdict(): Get the QDict mapped by 'key' * qdict_get_qdict(): If @qdict maps @key to a QDict, return it, else NULL.
*
* This function assumes that 'key' exists and it stores a
* QDict object.
*
* Return QDict mapped by 'key'.
*/ */
QDict *qdict_get_qdict(const QDict *qdict, const char *key) QDict *qdict_get_qdict(const QDict *qdict, const char *key)
{ {

View File

@ -591,7 +591,6 @@ static void qdict_join_test(void)
static void qdict_crumple_test_recursive(void) static void qdict_crumple_test_recursive(void)
{ {
QDict *src, *dst, *rule, *vnc, *acl, *listen; QDict *src, *dst, *rule, *vnc, *acl, *listen;
QObject *child, *res;
QList *rules; QList *rules;
src = qdict_new(); src = qdict_new();
@ -605,40 +604,37 @@ static void qdict_crumple_test_recursive(void)
qdict_put(src, "vnc.acl..name", qstring_from_str("acl0")); qdict_put(src, "vnc.acl..name", qstring_from_str("acl0"));
qdict_put(src, "vnc.acl.rule..name", qstring_from_str("acl0")); qdict_put(src, "vnc.acl.rule..name", qstring_from_str("acl0"));
res = qdict_crumple(src, &error_abort); dst = qobject_to_qdict(qdict_crumple(src, &error_abort));
g_assert(dst);
g_assert_cmpint(qobject_type(res), ==, QTYPE_QDICT);
dst = qobject_to_qdict(res);
g_assert_cmpint(qdict_size(dst), ==, 1); g_assert_cmpint(qdict_size(dst), ==, 1);
child = qdict_get(dst, "vnc"); vnc = qdict_get_qdict(dst, "vnc");
g_assert_cmpint(qobject_type(child), ==, QTYPE_QDICT); g_assert(vnc);
vnc = qobject_to_qdict(child); g_assert_cmpint(qdict_size(vnc), ==, 3);
child = qdict_get(vnc, "listen"); listen = qdict_get_qdict(vnc, "listen");
g_assert_cmpint(qobject_type(child), ==, QTYPE_QDICT); g_assert(listen);
listen = qobject_to_qdict(child); g_assert_cmpint(qdict_size(listen), ==, 2);
g_assert_cmpstr("127.0.0.1", ==, qdict_get_str(listen, "addr")); g_assert_cmpstr("127.0.0.1", ==, qdict_get_str(listen, "addr"));
g_assert_cmpstr("5901", ==, qdict_get_str(listen, "port")); g_assert_cmpstr("5901", ==, qdict_get_str(listen, "port"));
child = qdict_get(vnc, "acl"); acl = qdict_get_qdict(vnc, "acl");
g_assert_cmpint(qobject_type(child), ==, QTYPE_QDICT); g_assert(acl);
acl = qobject_to_qdict(child); g_assert_cmpint(qdict_size(acl), ==, 3);
child = qdict_get(acl, "rules"); rules = qdict_get_qlist(acl, "rules");
g_assert_cmpint(qobject_type(child), ==, QTYPE_QLIST); g_assert(rules);
rules = qobject_to_qlist(child);
g_assert_cmpint(qlist_size(rules), ==, 2); g_assert_cmpint(qlist_size(rules), ==, 2);
rule = qobject_to_qdict(qlist_pop(rules)); rule = qobject_to_qdict(qlist_pop(rules));
g_assert(rule);
g_assert_cmpint(qdict_size(rule), ==, 2); g_assert_cmpint(qdict_size(rule), ==, 2);
g_assert_cmpstr("fred", ==, qdict_get_str(rule, "match")); g_assert_cmpstr("fred", ==, qdict_get_str(rule, "match"));
g_assert_cmpstr("allow", ==, qdict_get_str(rule, "policy")); g_assert_cmpstr("allow", ==, qdict_get_str(rule, "policy"));
QDECREF(rule); QDECREF(rule);
rule = qobject_to_qdict(qlist_pop(rules)); rule = qobject_to_qdict(qlist_pop(rules));
g_assert(rule);
g_assert_cmpint(qdict_size(rule), ==, 2); g_assert_cmpint(qdict_size(rule), ==, 2);
g_assert_cmpstr("bob", ==, qdict_get_str(rule, "match")); g_assert_cmpstr("bob", ==, qdict_get_str(rule, "match"));
g_assert_cmpstr("deny", ==, qdict_get_str(rule, "policy")); g_assert_cmpstr("deny", ==, qdict_get_str(rule, "policy"));
@ -646,9 +642,6 @@ static void qdict_crumple_test_recursive(void)
/* With recursive crumpling, we should see all names unescaped */ /* With recursive crumpling, we should see all names unescaped */
g_assert_cmpstr("acl0", ==, qdict_get_str(vnc, "acl.name")); g_assert_cmpstr("acl0", ==, qdict_get_str(vnc, "acl.name"));
child = qdict_get(vnc, "acl");
g_assert_cmpint(qobject_type(child), ==, QTYPE_QDICT);
acl = qdict_get_qdict(vnc, "acl");
g_assert_cmpstr("acl0", ==, qdict_get_str(acl, "rule.name")); g_assert_cmpstr("acl0", ==, qdict_get_str(acl, "rule.name"));
QDECREF(src); QDECREF(src);

View File

@ -54,11 +54,8 @@ static void escaped_string(void)
QString *str; QString *str;
obj = qobject_from_json(test_cases[i].encoded); obj = qobject_from_json(test_cases[i].encoded);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QSTRING);
str = qobject_to_qstring(obj); str = qobject_to_qstring(obj);
g_assert(str);
g_assert_cmpstr(qstring_get_str(str), ==, test_cases[i].decoded); g_assert_cmpstr(qstring_get_str(str), ==, test_cases[i].decoded);
if (test_cases[i].skip == 0) { if (test_cases[i].skip == 0) {
@ -89,11 +86,8 @@ static void simple_string(void)
QString *str; QString *str;
obj = qobject_from_json(test_cases[i].encoded); obj = qobject_from_json(test_cases[i].encoded);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QSTRING);
str = qobject_to_qstring(obj); str = qobject_to_qstring(obj);
g_assert(str);
g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0); g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0);
str = qobject_to_json(obj); str = qobject_to_json(obj);
@ -123,11 +117,8 @@ static void single_quote_string(void)
QString *str; QString *str;
obj = qobject_from_json(test_cases[i].encoded); obj = qobject_from_json(test_cases[i].encoded);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QSTRING);
str = qobject_to_qstring(obj); str = qobject_to_qstring(obj);
g_assert(str);
g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0); g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0);
QDECREF(str); QDECREF(str);
@ -820,9 +811,8 @@ static void utf8_string(void)
obj = qobject_from_json(json_in); obj = qobject_from_json(json_in);
if (utf8_out) { if (utf8_out) {
g_assert(obj);
g_assert(qobject_type(obj) == QTYPE_QSTRING);
str = qobject_to_qstring(obj); str = qobject_to_qstring(obj);
g_assert(str);
g_assert_cmpstr(qstring_get_str(str), ==, utf8_out); g_assert_cmpstr(qstring_get_str(str), ==, utf8_out);
} else { } else {
g_assert(!obj); g_assert(!obj);
@ -847,9 +837,8 @@ static void utf8_string(void)
*/ */
if (0 && json_out != json_in) { if (0 && json_out != json_in) {
obj = qobject_from_json(json_out); obj = qobject_from_json(json_out);
g_assert(obj);
g_assert(qobject_type(obj) == QTYPE_QSTRING);
str = qobject_to_qstring(obj); str = qobject_to_qstring(obj);
g_assert(str);
g_assert_cmpstr(qstring_get_str(str), ==, utf8_out); g_assert_cmpstr(qstring_get_str(str), ==, utf8_out);
} }
} }
@ -867,15 +856,11 @@ static void vararg_string(void)
}; };
for (i = 0; test_cases[i].decoded; i++) { for (i = 0; test_cases[i].decoded; i++) {
QObject *obj;
QString *str; QString *str;
obj = qobject_from_jsonf("%s", test_cases[i].decoded); str = qobject_to_qstring(qobject_from_jsonf("%s",
test_cases[i].decoded));
g_assert(obj != NULL); g_assert(str);
g_assert(qobject_type(obj) == QTYPE_QSTRING);
str = qobject_to_qstring(obj);
g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0); g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0);
QDECREF(str); QDECREF(str);
@ -899,19 +884,15 @@ static void simple_number(void)
}; };
for (i = 0; test_cases[i].encoded; i++) { for (i = 0; test_cases[i].encoded; i++) {
QObject *obj;
QInt *qint; QInt *qint;
obj = qobject_from_json(test_cases[i].encoded); qint = qobject_to_qint(qobject_from_json(test_cases[i].encoded));
g_assert(obj != NULL); g_assert(qint);
g_assert(qobject_type(obj) == QTYPE_QINT);
qint = qobject_to_qint(obj);
g_assert(qint_get_int(qint) == test_cases[i].decoded); g_assert(qint_get_int(qint) == test_cases[i].decoded);
if (test_cases[i].skip == 0) { if (test_cases[i].skip == 0) {
QString *str; QString *str;
str = qobject_to_json(obj); str = qobject_to_json(QOBJECT(qint));
g_assert(strcmp(qstring_get_str(str), test_cases[i].encoded) == 0); g_assert(strcmp(qstring_get_str(str), test_cases[i].encoded) == 0);
QDECREF(str); QDECREF(str);
} }
@ -940,10 +921,8 @@ static void float_number(void)
QFloat *qfloat; QFloat *qfloat;
obj = qobject_from_json(test_cases[i].encoded); obj = qobject_from_json(test_cases[i].encoded);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QFLOAT);
qfloat = qobject_to_qfloat(obj); qfloat = qobject_to_qfloat(obj);
g_assert(qfloat);
g_assert(qfloat_get_double(qfloat) == test_cases[i].decoded); g_assert(qfloat_get_double(qfloat) == test_cases[i].decoded);
if (test_cases[i].skip == 0) { if (test_cases[i].skip == 0) {
@ -960,38 +939,22 @@ static void float_number(void)
static void vararg_number(void) static void vararg_number(void)
{ {
QObject *obj;
QInt *qint; QInt *qint;
QFloat *qfloat; QFloat *qfloat;
int value = 0x2342; int value = 0x2342;
long long value_ll = 0x2342342343LL; long long value_ll = 0x2342342343LL;
double valuef = 2.323423423; double valuef = 2.323423423;
obj = qobject_from_jsonf("%d", value); qint = qobject_to_qint(qobject_from_jsonf("%d", value));
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QINT);
qint = qobject_to_qint(obj);
g_assert(qint_get_int(qint) == value); g_assert(qint_get_int(qint) == value);
QDECREF(qint); QDECREF(qint);
obj = qobject_from_jsonf("%lld", value_ll); qint = qobject_to_qint(qobject_from_jsonf("%lld", value_ll));
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QINT);
qint = qobject_to_qint(obj);
g_assert(qint_get_int(qint) == value_ll); g_assert(qint_get_int(qint) == value_ll);
QDECREF(qint); QDECREF(qint);
obj = qobject_from_jsonf("%f", valuef); qfloat = qobject_to_qfloat(qobject_from_jsonf("%f", valuef));
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QFLOAT);
qfloat = qobject_to_qfloat(obj);
g_assert(qfloat_get_double(qfloat) == valuef); g_assert(qfloat_get_double(qfloat) == valuef);
QDECREF(qfloat); QDECREF(qfloat);
} }
@ -1003,10 +966,8 @@ static void keyword_literal(void)
QString *str; QString *str;
obj = qobject_from_json("true"); obj = qobject_from_json("true");
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QBOOL);
qbool = qobject_to_qbool(obj); qbool = qobject_to_qbool(obj);
g_assert(qbool);
g_assert(qbool_get_bool(qbool) == true); g_assert(qbool_get_bool(qbool) == true);
str = qobject_to_json(obj); str = qobject_to_json(obj);
@ -1016,10 +977,8 @@ static void keyword_literal(void)
QDECREF(qbool); QDECREF(qbool);
obj = qobject_from_json("false"); obj = qobject_from_json("false");
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QBOOL);
qbool = qobject_to_qbool(obj); qbool = qobject_to_qbool(obj);
g_assert(qbool);
g_assert(qbool_get_bool(qbool) == false); g_assert(qbool_get_bool(qbool) == false);
str = qobject_to_json(obj); str = qobject_to_json(obj);
@ -1028,23 +987,15 @@ static void keyword_literal(void)
QDECREF(qbool); QDECREF(qbool);
obj = qobject_from_jsonf("%i", false); qbool = qobject_to_qbool(qobject_from_jsonf("%i", false));
g_assert(obj != NULL); g_assert(qbool);
g_assert(qobject_type(obj) == QTYPE_QBOOL);
qbool = qobject_to_qbool(obj);
g_assert(qbool_get_bool(qbool) == false); g_assert(qbool_get_bool(qbool) == false);
QDECREF(qbool); QDECREF(qbool);
/* Test that non-zero values other than 1 get collapsed to true */ /* Test that non-zero values other than 1 get collapsed to true */
obj = qobject_from_jsonf("%i", 2); qbool = qobject_to_qbool(qobject_from_jsonf("%i", 2));
g_assert(obj != NULL); g_assert(qbool);
g_assert(qobject_type(obj) == QTYPE_QBOOL);
qbool = qobject_to_qbool(obj);
g_assert(qbool_get_bool(qbool) == true); g_assert(qbool_get_bool(qbool) == true);
QDECREF(qbool); QDECREF(qbool);
obj = qobject_from_json("null"); obj = qobject_from_json("null");
@ -1110,7 +1061,7 @@ static void compare_helper(QObject *obj, void *opaque)
static int compare_litqobj_to_qobj(LiteralQObject *lhs, QObject *rhs) static int compare_litqobj_to_qobj(LiteralQObject *lhs, QObject *rhs)
{ {
if (lhs->type != qobject_type(rhs)) { if (!rhs || lhs->type != qobject_type(rhs)) {
return 0; return 0;
} }
@ -1184,18 +1135,12 @@ static void simple_dict(void)
QString *str; QString *str;
obj = qobject_from_json(test_cases[i].encoded); obj = qobject_from_json(test_cases[i].encoded);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QDICT);
g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1); g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
str = qobject_to_json(obj); str = qobject_to_json(obj);
qobject_decref(obj); qobject_decref(obj);
obj = qobject_from_json(qstring_get_str(str)); obj = qobject_from_json(qstring_get_str(str));
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QDICT);
g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1); g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
qobject_decref(obj); qobject_decref(obj);
QDECREF(str); QDECREF(str);
@ -1299,18 +1244,12 @@ static void simple_list(void)
QString *str; QString *str;
obj = qobject_from_json(test_cases[i].encoded); obj = qobject_from_json(test_cases[i].encoded);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QLIST);
g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1); g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
str = qobject_to_json(obj); str = qobject_to_json(obj);
qobject_decref(obj); qobject_decref(obj);
obj = qobject_from_json(qstring_get_str(str)); obj = qobject_from_json(qstring_get_str(str));
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QLIST);
g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1); g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
qobject_decref(obj); qobject_decref(obj);
QDECREF(str); QDECREF(str);
@ -1367,18 +1306,12 @@ static void simple_whitespace(void)
QString *str; QString *str;
obj = qobject_from_json(test_cases[i].encoded); obj = qobject_from_json(test_cases[i].encoded);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QLIST);
g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1); g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
str = qobject_to_json(obj); str = qobject_to_json(obj);
qobject_decref(obj); qobject_decref(obj);
obj = qobject_from_json(qstring_get_str(str)); obj = qobject_from_json(qstring_get_str(str));
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QLIST);
g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1); g_assert(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
qobject_decref(obj); qobject_decref(obj);
@ -1403,8 +1336,6 @@ static void simple_varargs(void)
g_assert(embedded_obj != NULL); g_assert(embedded_obj != NULL);
obj = qobject_from_jsonf("[%d, 2, %p]", 1, embedded_obj); obj = qobject_from_jsonf("[%d, 2, %p]", 1, embedded_obj);
g_assert(obj != NULL);
g_assert(compare_litqobj_to_qobj(&decoded, obj) == 1); g_assert(compare_litqobj_to_qobj(&decoded, obj) == 1);
qobject_decref(obj); qobject_decref(obj);

View File

@ -379,9 +379,9 @@ static void qmp_response(JSONMessageParser *parser, GQueue *tokens)
exit(1); exit(1);
} }
g_assert(qobject_type(obj) == QTYPE_QDICT);
g_assert(!qmp->response); g_assert(!qmp->response);
qmp->response = (QDict *)obj; qmp->response = qobject_to_qdict(obj);
g_assert(qmp->response);
} }
QDict *qmp_fd_receive(int fd) QDict *qmp_fd_receive(int fd)

View File

@ -95,24 +95,18 @@ static bool qdict_cmp_simple(QDict *a, QDict *b)
correctness. */ correctness. */
static void event_test_emit(test_QAPIEvent event, QDict *d, Error **errp) static void event_test_emit(test_QAPIEvent event, QDict *d, Error **errp)
{ {
QObject *obj;
QDict *t; QDict *t;
int64_t s, ms; int64_t s, ms;
/* Verify that we have timestamp, then remove it to compare other fields */ /* Verify that we have timestamp, then remove it to compare other fields */
obj = qdict_get(d, "timestamp"); t = qdict_get_qdict(d, "timestamp");
g_assert(obj);
t = qobject_to_qdict(obj);
g_assert(t); g_assert(t);
obj = qdict_get(t, "seconds"); s = qdict_get_try_int(t, "seconds", -2);
g_assert(obj && qobject_type(obj) == QTYPE_QINT); ms = qdict_get_try_int(t, "microseconds", -2);
s = qint_get_int(qobject_to_qint(obj));
obj = qdict_get(t, "microseconds");
g_assert(obj && qobject_type(obj) == QTYPE_QINT);
ms = qint_get_int(qobject_to_qint(obj));
if (s == -1) { if (s == -1) {
g_assert(ms == -1); g_assert(ms == -1);
} else { } else {
g_assert(s >= 0);
g_assert(ms >= 0 && ms <= 999999); g_assert(ms >= 0 && ms <= 999999);
} }
g_assert(qdict_size(t) == 2); g_assert(qdict_size(t) == 2);

View File

@ -58,81 +58,80 @@ static void test_visitor_out_int(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
int64_t value = -42; int64_t value = -42;
QObject *obj; QInt *qint;
visit_type_int(data->ov, NULL, &value, &error_abort); visit_type_int(data->ov, NULL, &value, &error_abort);
obj = visitor_get(data); qint = qobject_to_qint(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QINT); g_assert(qint);
g_assert_cmpint(qint_get_int(qobject_to_qint(obj)), ==, value); g_assert_cmpint(qint_get_int(qint), ==, value);
} }
static void test_visitor_out_bool(TestOutputVisitorData *data, static void test_visitor_out_bool(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
bool value = true; bool value = true;
QObject *obj; QBool *qbool;
visit_type_bool(data->ov, NULL, &value, &error_abort); visit_type_bool(data->ov, NULL, &value, &error_abort);
obj = visitor_get(data); qbool = qobject_to_qbool(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QBOOL); g_assert(qbool);
g_assert(qbool_get_bool(qobject_to_qbool(obj)) == value); g_assert(qbool_get_bool(qbool) == value);
} }
static void test_visitor_out_number(TestOutputVisitorData *data, static void test_visitor_out_number(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
double value = 3.14; double value = 3.14;
QObject *obj; QFloat *qfloat;
visit_type_number(data->ov, NULL, &value, &error_abort); visit_type_number(data->ov, NULL, &value, &error_abort);
obj = visitor_get(data); qfloat = qobject_to_qfloat(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QFLOAT); g_assert(qfloat);
g_assert(qfloat_get_double(qobject_to_qfloat(obj)) == value); g_assert(qfloat_get_double(qfloat) == value);
} }
static void test_visitor_out_string(TestOutputVisitorData *data, static void test_visitor_out_string(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
char *string = (char *) "Q E M U"; char *string = (char *) "Q E M U";
QObject *obj; QString *qstr;
visit_type_str(data->ov, NULL, &string, &error_abort); visit_type_str(data->ov, NULL, &string, &error_abort);
obj = visitor_get(data); qstr = qobject_to_qstring(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QSTRING); g_assert(qstr);
g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==, string); g_assert_cmpstr(qstring_get_str(qstr), ==, string);
} }
static void test_visitor_out_no_string(TestOutputVisitorData *data, static void test_visitor_out_no_string(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
char *string = NULL; char *string = NULL;
QObject *obj; QString *qstr;
/* A null string should return "" */ /* A null string should return "" */
visit_type_str(data->ov, NULL, &string, &error_abort); visit_type_str(data->ov, NULL, &string, &error_abort);
obj = visitor_get(data); qstr = qobject_to_qstring(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QSTRING); g_assert(qstr);
g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==, ""); g_assert_cmpstr(qstring_get_str(qstr), ==, "");
} }
static void test_visitor_out_enum(TestOutputVisitorData *data, static void test_visitor_out_enum(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
QObject *obj;
EnumOne i; EnumOne i;
QString *qstr;
for (i = 0; i < ENUM_ONE__MAX; i++) { for (i = 0; i < ENUM_ONE__MAX; i++) {
visit_type_EnumOne(data->ov, "unused", &i, &error_abort); visit_type_EnumOne(data->ov, "unused", &i, &error_abort);
obj = visitor_get(data); qstr = qobject_to_qstring(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QSTRING); g_assert(qstr);
g_assert_cmpstr(qstring_get_str(qobject_to_qstring(obj)), ==, g_assert_cmpstr(qstring_get_str(qstr), ==, EnumOne_lookup[i]);
EnumOne_lookup[i]);
visitor_reset(data); visitor_reset(data);
} }
} }
@ -160,15 +159,12 @@ static void test_visitor_out_struct(TestOutputVisitorData *data,
.boolean = false, .boolean = false,
.string = (char *) "foo"}; .string = (char *) "foo"};
TestStruct *p = &test_struct; TestStruct *p = &test_struct;
QObject *obj;
QDict *qdict; QDict *qdict;
visit_type_TestStruct(data->ov, NULL, &p, &error_abort); visit_type_TestStruct(data->ov, NULL, &p, &error_abort);
obj = visitor_get(data); qdict = qobject_to_qdict(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QDICT); g_assert(qdict);
qdict = qobject_to_qdict(obj);
g_assert_cmpint(qdict_size(qdict), ==, 3); g_assert_cmpint(qdict_size(qdict), ==, 3);
g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 42); g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 42);
g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, false); g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, false);
@ -180,7 +176,6 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
{ {
int64_t value = 42; int64_t value = 42;
UserDefTwo *ud2; UserDefTwo *ud2;
QObject *obj;
QDict *qdict, *dict1, *dict2, *dict3, *userdef; QDict *qdict, *dict1, *dict2, *dict3, *userdef;
const char *string = "user def string"; const char *string = "user def string";
const char *strings[] = { "forty two", "forty three", "forty four", const char *strings[] = { "forty two", "forty three", "forty four",
@ -207,10 +202,8 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
visit_type_UserDefTwo(data->ov, "unused", &ud2, &error_abort); visit_type_UserDefTwo(data->ov, "unused", &ud2, &error_abort);
obj = visitor_get(data); qdict = qobject_to_qdict(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QDICT); g_assert(qdict);
qdict = qobject_to_qdict(obj);
g_assert_cmpint(qdict_size(qdict), ==, 2); g_assert_cmpint(qdict_size(qdict), ==, 2);
g_assert_cmpstr(qdict_get_str(qdict, "string0"), ==, strings[0]); g_assert_cmpstr(qdict_get_str(qdict, "string0"), ==, strings[0]);
@ -267,7 +260,6 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
bool value_bool = true; bool value_bool = true;
int value_int = 10; int value_int = 10;
QListEntry *entry; QListEntry *entry;
QObject *obj;
QList *qlist; QList *qlist;
int i; int i;
@ -285,10 +277,8 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
visit_type_TestStructList(data->ov, NULL, &head, &error_abort); visit_type_TestStructList(data->ov, NULL, &head, &error_abort);
obj = visitor_get(data); qlist = qobject_to_qlist(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QLIST); g_assert(qlist);
qlist = qobject_to_qlist(obj);
g_assert(!qlist_empty(qlist)); g_assert(!qlist_empty(qlist));
/* ...and ensure that the visitor sees it in order */ /* ...and ensure that the visitor sees it in order */
@ -296,8 +286,8 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
QLIST_FOREACH_ENTRY(qlist, entry) { QLIST_FOREACH_ENTRY(qlist, entry) {
QDict *qdict; QDict *qdict;
g_assert(qobject_type(entry->value) == QTYPE_QDICT);
qdict = qobject_to_qdict(entry->value); qdict = qobject_to_qdict(entry->value);
g_assert(qdict);
g_assert_cmpint(qdict_size(qdict), ==, 3); g_assert_cmpint(qdict_size(qdict), ==, 3);
g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, value_int + i); g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, value_int + i);
g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, value_bool); g_assert_cmpint(qdict_get_bool(qdict, "boolean"), ==, value_bool);
@ -345,13 +335,12 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
QBool *qbool; QBool *qbool;
QString *qstring; QString *qstring;
QDict *qdict; QDict *qdict;
QObject *obj;
qobj = QOBJECT(qint_from_int(-42)); qobj = QOBJECT(qint_from_int(-42));
visit_type_any(data->ov, NULL, &qobj, &error_abort); visit_type_any(data->ov, NULL, &qobj, &error_abort);
obj = visitor_get(data); qint = qobject_to_qint(visitor_get(data));
g_assert(qobject_type(obj) == QTYPE_QINT); g_assert(qint);
g_assert_cmpint(qint_get_int(qobject_to_qint(obj)), ==, -42); g_assert_cmpint(qint_get_int(qint), ==, -42);
qobject_decref(qobj); qobject_decref(qobj);
visitor_reset(data); visitor_reset(data);
@ -362,22 +351,15 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
qobj = QOBJECT(qdict); qobj = QOBJECT(qdict);
visit_type_any(data->ov, NULL, &qobj, &error_abort); visit_type_any(data->ov, NULL, &qobj, &error_abort);
qobject_decref(qobj); qobject_decref(qobj);
obj = visitor_get(data); qdict = qobject_to_qdict(visitor_get(data));
qdict = qobject_to_qdict(obj);
g_assert(qdict); g_assert(qdict);
qobj = qdict_get(qdict, "integer"); qint = qobject_to_qint(qdict_get(qdict, "integer"));
g_assert(qobj);
qint = qobject_to_qint(qobj);
g_assert(qint); g_assert(qint);
g_assert_cmpint(qint_get_int(qint), ==, -42); g_assert_cmpint(qint_get_int(qint), ==, -42);
qobj = qdict_get(qdict, "boolean"); qbool = qobject_to_qbool(qdict_get(qdict, "boolean"));
g_assert(qobj);
qbool = qobject_to_qbool(qobj);
g_assert(qbool); g_assert(qbool);
g_assert(qbool_get_bool(qbool) == true); g_assert(qbool_get_bool(qbool) == true);
qobj = qdict_get(qdict, "string"); qstring = qobject_to_qstring(qdict_get(qdict, "string"));
g_assert(qobj);
qstring = qobject_to_qstring(qobj);
g_assert(qstring); g_assert(qstring);
g_assert_cmpstr(qstring_get_str(qstring), ==, "foo"); g_assert_cmpstr(qstring_get_str(qstring), ==, "foo");
} }
@ -385,7 +367,6 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
static void test_visitor_out_union_flat(TestOutputVisitorData *data, static void test_visitor_out_union_flat(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
QObject *arg;
QDict *qdict; QDict *qdict;
UserDefFlatUnion *tmp = g_malloc0(sizeof(UserDefFlatUnion)); UserDefFlatUnion *tmp = g_malloc0(sizeof(UserDefFlatUnion));
@ -395,11 +376,8 @@ static void test_visitor_out_union_flat(TestOutputVisitorData *data,
tmp->u.value1.boolean = true; tmp->u.value1.boolean = true;
visit_type_UserDefFlatUnion(data->ov, NULL, &tmp, &error_abort); visit_type_UserDefFlatUnion(data->ov, NULL, &tmp, &error_abort);
arg = visitor_get(data); qdict = qobject_to_qdict(visitor_get(data));
g_assert(qdict);
g_assert(qobject_type(arg) == QTYPE_QDICT);
qdict = qobject_to_qdict(arg);
g_assert_cmpstr(qdict_get_str(qdict, "enum1"), ==, "value1"); g_assert_cmpstr(qdict_get_str(qdict, "enum1"), ==, "value1");
g_assert_cmpstr(qdict_get_str(qdict, "string"), ==, "str"); g_assert_cmpstr(qdict_get_str(qdict, "string"), ==, "str");
g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 41); g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 41);
@ -411,8 +389,9 @@ static void test_visitor_out_union_flat(TestOutputVisitorData *data,
static void test_visitor_out_alternate(TestOutputVisitorData *data, static void test_visitor_out_alternate(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
QObject *arg;
UserDefAlternate *tmp; UserDefAlternate *tmp;
QInt *qint;
QString *qstr;
QDict *qdict; QDict *qdict;
tmp = g_new0(UserDefAlternate, 1); tmp = g_new0(UserDefAlternate, 1);
@ -420,10 +399,9 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
tmp->u.i = 42; tmp->u.i = 42;
visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort); visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
arg = visitor_get(data); qint = qobject_to_qint(visitor_get(data));
g_assert(qint);
g_assert(qobject_type(arg) == QTYPE_QINT); g_assert_cmpint(qint_get_int(qint), ==, 42);
g_assert_cmpint(qint_get_int(qobject_to_qint(arg)), ==, 42);
qapi_free_UserDefAlternate(tmp); qapi_free_UserDefAlternate(tmp);
@ -433,10 +411,9 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
tmp->u.s = g_strdup("hello"); tmp->u.s = g_strdup("hello");
visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort); visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
arg = visitor_get(data); qstr = qobject_to_qstring(visitor_get(data));
g_assert(qstr);
g_assert(qobject_type(arg) == QTYPE_QSTRING); g_assert_cmpstr(qstring_get_str(qstr), ==, "hello");
g_assert_cmpstr(qstring_get_str(qobject_to_qstring(arg)), ==, "hello");
qapi_free_UserDefAlternate(tmp); qapi_free_UserDefAlternate(tmp);
@ -449,10 +426,8 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
tmp->u.udfu.u.value1.boolean = true; tmp->u.udfu.u.value1.boolean = true;
visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort); visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
arg = visitor_get(data); qdict = qobject_to_qdict(visitor_get(data));
g_assert(qdict);
g_assert_cmpint(qobject_type(arg), ==, QTYPE_QDICT);
qdict = qobject_to_qdict(arg);
g_assert_cmpint(qdict_size(qdict), ==, 4); g_assert_cmpint(qdict_size(qdict), ==, 4);
g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 1); g_assert_cmpint(qdict_get_int(qdict, "integer"), ==, 1);
g_assert_cmpstr(qdict_get_str(qdict, "string"), ==, "str"); g_assert_cmpstr(qdict_get_str(qdict, "string"), ==, "str");
@ -465,7 +440,6 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
static void test_visitor_out_null(TestOutputVisitorData *data, static void test_visitor_out_null(TestOutputVisitorData *data,
const void *unused) const void *unused)
{ {
QObject *arg;
QDict *qdict; QDict *qdict;
QObject *nil; QObject *nil;
@ -473,9 +447,8 @@ static void test_visitor_out_null(TestOutputVisitorData *data,
visit_type_null(data->ov, "a", &error_abort); visit_type_null(data->ov, "a", &error_abort);
visit_check_struct(data->ov, &error_abort); visit_check_struct(data->ov, &error_abort);
visit_end_struct(data->ov, NULL); visit_end_struct(data->ov, NULL);
arg = visitor_get(data); qdict = qobject_to_qdict(visitor_get(data));
g_assert(qobject_type(arg) == QTYPE_QDICT); g_assert(qdict);
qdict = qobject_to_qdict(arg);
g_assert_cmpint(qdict_size(qdict), ==, 1); g_assert_cmpint(qdict_size(qdict), ==, 1);
nil = qdict_get(qdict, "a"); nil = qdict_get(qdict, "a");
g_assert(nil); g_assert(nil);
@ -618,8 +591,6 @@ static void check_native_list(QObject *qobj,
QList *qlist; QList *qlist;
int i; int i;
g_assert(qobj);
g_assert(qobject_type(qobj) == QTYPE_QDICT);
qdict = qobject_to_qdict(qobj); qdict = qobject_to_qdict(qobj);
g_assert(qdict); g_assert(qdict);
g_assert(qdict_haskey(qdict, "data")); g_assert(qdict_haskey(qdict, "data"));