提交 0920a171 编写于 作者: E Eric Blake 提交者: Markus Armbruster

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: NMarkus Armbruster <armbru@redhat.com>
Signed-off-by: NEric Blake <eblake@redhat.com>
Message-Id: <1446791754-23823-5-git-send-email-eblake@redhat.com>
[Two old comment typos fixed]
Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
上级 cc9f60d4
...@@ -40,9 +40,27 @@ static void validate_teardown(TestInputVisitorData *data, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册