mirror of https://github.com/xemu-project/xemu.git
qapi: Share test_init code in test-qmp-input*
Rather than duplicate the body of two functions just to decide between qobject_from_jsonv() and qobject_from_json(), exploit the fact that qobject_from_jsonv() intentionally takes 'va_list *' instead of the more common 'va_list', and that qobject_from_json() just calls qobject_from_jsonv(,NULL). For each file, our two existing init functions then become thin wrappers around a new internal function, and future updates to initialization don't have to be duplicated. Suggested-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1446791754-23823-5-git-send-email-eblake@redhat.com> [Two old comment typos fixed] Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
cc9f60d4a2
commit
0920a17199
|
@ -40,9 +40,27 @@ static void validate_teardown(TestInputVisitorData *data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is provided instead of a test setup function so that the JSON
|
/* The various test_init functions are provided instead of a test setup
|
||||||
string used by the tests are kept in the test functions (and not
|
function so that the JSON string used by the tests are kept in the test
|
||||||
int main()) */
|
functions (and not in main()). */
|
||||||
|
static Visitor *validate_test_init_internal(TestInputVisitorData *data,
|
||||||
|
const char *json_string,
|
||||||
|
va_list *ap)
|
||||||
|
{
|
||||||
|
Visitor *v;
|
||||||
|
|
||||||
|
data->obj = qobject_from_jsonv(json_string, ap);
|
||||||
|
g_assert(data->obj);
|
||||||
|
|
||||||
|
data->qiv = qmp_input_visitor_new_strict(data->obj);
|
||||||
|
g_assert(data->qiv);
|
||||||
|
|
||||||
|
v = qmp_input_get_visitor(data->qiv);
|
||||||
|
g_assert(v);
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
static GCC_FMT_ATTR(2, 3)
|
static GCC_FMT_ATTR(2, 3)
|
||||||
Visitor *validate_test_init(TestInputVisitorData *data,
|
Visitor *validate_test_init(TestInputVisitorData *data,
|
||||||
const char *json_string, ...)
|
const char *json_string, ...)
|
||||||
|
@ -51,17 +69,8 @@ Visitor *validate_test_init(TestInputVisitorData *data,
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, json_string);
|
va_start(ap, json_string);
|
||||||
data->obj = qobject_from_jsonv(json_string, &ap);
|
v = validate_test_init_internal(data, json_string, &ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
g_assert(data->obj != NULL);
|
|
||||||
|
|
||||||
data->qiv = qmp_input_visitor_new_strict(data->obj);
|
|
||||||
g_assert(data->qiv != NULL);
|
|
||||||
|
|
||||||
v = qmp_input_get_visitor(data->qiv);
|
|
||||||
g_assert(v != NULL);
|
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,18 +84,7 @@ Visitor *validate_test_init(TestInputVisitorData *data,
|
||||||
static Visitor *validate_test_init_raw(TestInputVisitorData *data,
|
static Visitor *validate_test_init_raw(TestInputVisitorData *data,
|
||||||
const char *json_string)
|
const char *json_string)
|
||||||
{
|
{
|
||||||
Visitor *v;
|
return validate_test_init_internal(data, json_string, NULL);
|
||||||
|
|
||||||
data->obj = qobject_from_json(json_string);
|
|
||||||
g_assert(data->obj != NULL);
|
|
||||||
|
|
||||||
data->qiv = qmp_input_visitor_new_strict(data->obj);
|
|
||||||
g_assert(data->qiv != NULL);
|
|
||||||
|
|
||||||
v = qmp_input_get_visitor(data->qiv);
|
|
||||||
g_assert(v != NULL);
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,27 @@ static void visitor_input_teardown(TestInputVisitorData *data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is provided instead of a test setup function so that the JSON
|
/* The various test_init functions are provided instead of a test setup
|
||||||
string used by the tests are kept in the test functions (and not
|
function so that the JSON string used by the tests are kept in the test
|
||||||
int main()) */
|
functions (and not in main()). */
|
||||||
|
static Visitor *visitor_input_test_init_internal(TestInputVisitorData *data,
|
||||||
|
const char *json_string,
|
||||||
|
va_list *ap)
|
||||||
|
{
|
||||||
|
Visitor *v;
|
||||||
|
|
||||||
|
data->obj = qobject_from_jsonv(json_string, ap);
|
||||||
|
g_assert(data->obj);
|
||||||
|
|
||||||
|
data->qiv = qmp_input_visitor_new(data->obj);
|
||||||
|
g_assert(data->qiv);
|
||||||
|
|
||||||
|
v = qmp_input_get_visitor(data->qiv);
|
||||||
|
g_assert(v);
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
static GCC_FMT_ATTR(2, 3)
|
static GCC_FMT_ATTR(2, 3)
|
||||||
Visitor *visitor_input_test_init(TestInputVisitorData *data,
|
Visitor *visitor_input_test_init(TestInputVisitorData *data,
|
||||||
const char *json_string, ...)
|
const char *json_string, ...)
|
||||||
|
@ -47,17 +65,8 @@ Visitor *visitor_input_test_init(TestInputVisitorData *data,
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, json_string);
|
va_start(ap, json_string);
|
||||||
data->obj = qobject_from_jsonv(json_string, &ap);
|
v = visitor_input_test_init_internal(data, json_string, &ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
g_assert(data->obj != NULL);
|
|
||||||
|
|
||||||
data->qiv = qmp_input_visitor_new(data->obj);
|
|
||||||
g_assert(data->qiv != NULL);
|
|
||||||
|
|
||||||
v = qmp_input_get_visitor(data->qiv);
|
|
||||||
g_assert(v != NULL);
|
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,19 +80,7 @@ Visitor *visitor_input_test_init(TestInputVisitorData *data,
|
||||||
static Visitor *visitor_input_test_init_raw(TestInputVisitorData *data,
|
static Visitor *visitor_input_test_init_raw(TestInputVisitorData *data,
|
||||||
const char *json_string)
|
const char *json_string)
|
||||||
{
|
{
|
||||||
Visitor *v;
|
return visitor_input_test_init_internal(data, json_string, NULL);
|
||||||
|
|
||||||
data->obj = qobject_from_json(json_string);
|
|
||||||
|
|
||||||
g_assert(data->obj != NULL);
|
|
||||||
|
|
||||||
data->qiv = qmp_input_visitor_new(data->obj);
|
|
||||||
g_assert(data->qiv != NULL);
|
|
||||||
|
|
||||||
v = qmp_input_get_visitor(data->qiv);
|
|
||||||
g_assert(v != NULL);
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_visitor_in_int(TestInputVisitorData *data,
|
static void test_visitor_in_int(TestInputVisitorData *data,
|
||||||
|
|
Loading…
Reference in New Issue