@@ -41,16 +41,15 @@ static void validate_teardown(TestInputVisitorData *data,
}
}
-/* The various test_init functions are provided instead of a test setup
+/* The test_init function is provided instead of a test setup
function so that the JSON string used by the tests are kept in the test
functions (and not in main()). */
-static Visitor *validate_test_init_internal(TestInputVisitorData *data,
- const char *json_string,
- va_list *ap)
+static Visitor *validate_test_init(TestInputVisitorData *data,
+ const char *json_string)
{
validate_teardown(data, NULL);
- data->obj = qobject_from_jsonv(json_string, ap);
+ data->obj = qobject_from_json(json_string);
g_assert(data->obj);
data->qiv = qobject_input_visitor_new(data->obj, true);
@@ -58,32 +57,6 @@ static Visitor *validate_test_init_internal(TestInputVisitorData *data,
return data->qiv;
}
-static GCC_FMT_ATTR(2, 3)
-Visitor *validate_test_init(TestInputVisitorData *data,
- const char *json_string, ...)
-{
- Visitor *v;
- va_list ap;
-
- va_start(ap, json_string);
- v = validate_test_init_internal(data, json_string, &ap);
- va_end(ap);
- return v;
-}
-
-/* similar to validate_test_init(), but does not expect a string
- * literal/format json_string argument and so can be used for
- * programatically generated strings (and we can't pass in programatically
- * generated strings via %s format parameters since qobject_from_jsonv()
- * will wrap those in double-quotes and treat the entire object as a
- * string)
- */
-static Visitor *validate_test_init_raw(TestInputVisitorData *data,
- const char *json_string)
-{
- return validate_test_init_internal(data, json_string, NULL);
-}
-
static void test_validate_struct(TestInputVisitorData *data,
const void *unused)
@@ -315,7 +288,7 @@ static void do_test_validate_qmp_introspect(TestInputVisitorData *data,
SchemaInfoList *schema = NULL;
Visitor *v;
- v = validate_test_init_raw(data, schema_json);
+ v = validate_test_init(data, schema_json);
visit_type_SchemaInfoList(v, NULL, &schema, &error_abort);
g_assert(schema);
@@ -40,44 +40,24 @@ static void visitor_input_teardown(TestInputVisitorData *data,
/* The various test_init functions are provided instead of a test setup
function so that the JSON string used by the tests are kept in the test
functions (and not in main()). */
-static Visitor *visitor_input_test_init_internal(TestInputVisitorData *data,
- const char *json_string,
- va_list *ap)
+static Visitor *visitor_input_test_init_obj(TestInputVisitorData *data,
+ QObject *obj)
{
visitor_input_teardown(data, NULL);
- data->obj = qobject_from_jsonv(json_string, ap);
- g_assert(data->obj);
-
+ data->obj = obj;
data->qiv = qobject_input_visitor_new(data->obj, false);
g_assert(data->qiv);
return data->qiv;
}
-static GCC_FMT_ATTR(2, 3)
-Visitor *visitor_input_test_init(TestInputVisitorData *data,
- const char *json_string, ...)
-{
- Visitor *v;
- va_list ap;
-
- va_start(ap, json_string);
- v = visitor_input_test_init_internal(data, json_string, &ap);
- va_end(ap);
- return v;
-}
-
-/* similar to visitor_input_test_init(), but does not expect a string
- * literal/format json_string argument and so can be used for
- * programatically generated strings (and we can't pass in programatically
- * generated strings via %s format parameters since qobject_from_jsonv()
- * will wrap those in double-quotes and treat the entire object as a
- * string)
+/* similar to visitor_input_test_init_obj(), but takes input as a raw JSON
+ * string rather than a preformed QObject
*/
-static Visitor *visitor_input_test_init_raw(TestInputVisitorData *data,
- const char *json_string)
+static Visitor *visitor_input_test_init(TestInputVisitorData *data,
+ const char *json_string)
{
- return visitor_input_test_init_internal(data, json_string, NULL);
+ return visitor_input_test_init_obj(data, qobject_from_json(json_string));
}
static void test_visitor_in_int(TestInputVisitorData *data,
@@ -87,7 +67,7 @@ static void test_visitor_in_int(TestInputVisitorData *data,
int value = -42;
Visitor *v;
- v = visitor_input_test_init(data, "%d", value);
+ v = visitor_input_test_init_obj(data, QOBJECT(qint_from_int(value)));
visit_type_int(v, NULL, &res, &error_abort);
g_assert_cmpint(res, ==, value);
@@ -104,7 +84,8 @@ static void test_visitor_in_int_overflow(TestInputVisitorData *data,
* a QFloat/double field instead, leading to an error if we pass it
* to visit_type_int. confirm this.
*/
- v = visitor_input_test_init(data, "%f", DBL_MAX);
+ v = visitor_input_test_init_obj(data,
+ QOBJECT(qfloat_from_double(DBL_MAX)));
visit_type_int(v, NULL, &res, &err);
error_free_or_abort(&err);
@@ -116,7 +97,7 @@ static void test_visitor_in_bool(TestInputVisitorData *data,
bool res = false;
Visitor *v;
- v = visitor_input_test_init(data, "true");
+ v = visitor_input_test_init_obj(data, QOBJECT(qbool_from_bool(true)));
visit_type_bool(v, NULL, &res, &error_abort);
g_assert_cmpint(res, ==, true);
@@ -128,7 +109,7 @@ static void test_visitor_in_number(TestInputVisitorData *data,
double res = 0, value = 3.14;
Visitor *v;
- v = visitor_input_test_init(data, "%f", value);
+ v = visitor_input_test_init_obj(data, QOBJECT(qfloat_from_double(value)));
visit_type_number(v, NULL, &res, &error_abort);
g_assert_cmpfloat(res, ==, value);
@@ -140,7 +121,7 @@ static void test_visitor_in_string(TestInputVisitorData *data,
char *res = NULL, *value = (char *) "Q E M U";
Visitor *v;
- v = visitor_input_test_init(data, "%s", value);
+ v = visitor_input_test_init_obj(data, QOBJECT(qstring_from_str(value)));
visit_type_str(v, NULL, &res, &error_abort);
g_assert_cmpstr(res, ==, value);
@@ -156,8 +137,9 @@ static void test_visitor_in_enum(TestInputVisitorData *data,
for (i = 0; EnumOne_lookup[i]; i++) {
EnumOne res = -1;
+ QString *str = qstring_from_str(EnumOne_lookup[i]);
- v = visitor_input_test_init(data, "%s", EnumOne_lookup[i]);
+ v = visitor_input_test_init_obj(data, QOBJECT(str));
visit_type_EnumOne(v, NULL, &res, &error_abort);
g_assert_cmpint(i, ==, res);
@@ -171,7 +153,8 @@ static void test_visitor_in_struct(TestInputVisitorData *data,
TestStruct *p = NULL;
Visitor *v;
- v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
+ v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true,"
+ " 'string': 'foo' }");
visit_type_TestStruct(v, NULL, &p, &error_abort);
g_assert_cmpint(p->integer, ==, -42);
@@ -191,7 +174,8 @@ static void test_visitor_in_struct_nested(TestInputVisitorData *data,
v = visitor_input_test_init(data, "{ 'string0': 'string0', "
"'dict1': { 'string1': 'string1', "
"'dict2': { 'userdef': { 'integer': 42, "
- "'string': 'string' }, 'string': 'string2'}}}");
+ "'string': 'string' }, "
+ "'string': 'string2'}}}");
visit_type_UserDefTwo(v, NULL, &udp, &error_abort);
@@ -212,7 +196,10 @@ static void test_visitor_in_list(TestInputVisitorData *data,
Visitor *v;
int i;
- v = visitor_input_test_init(data, "[ { 'string': 'string0', 'integer': 42 }, { 'string': 'string1', 'integer': 43 }, { 'string': 'string2', 'integer': 44 } ]");
+ v = visitor_input_test_init(data,
+ "[ { 'string': 'string0', 'integer': 42 },"
+ "{ 'string': 'string1', 'integer': 43 }, "
+ "{ 'string': 'string2', 'integer': 44 } ]");
visit_type_UserDefOneList(v, NULL, &head, &error_abort);
g_assert(head != NULL);
@@ -252,7 +239,8 @@ static void test_visitor_in_any(TestInputVisitorData *data,
g_assert_cmpint(qint_get_int(qint), ==, -42);
qobject_decref(res);
- v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
+ v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true, "
+ "'string': 'foo' }");
visit_type_any(v, NULL, &res, &error_abort);
qdict = qobject_to_qdict(res);
g_assert(qdict && qdict_size(qdict) == 3);
@@ -375,7 +363,8 @@ static void test_visitor_in_alternate(TestInputVisitorData *data,
g_assert_cmpstr(wrap->alt->u.s, ==, "string");
qapi_free_WrapAlternate(wrap);
- v = visitor_input_test_init(data, "{ 'alt': {'integer':1, 'string':'str', "
+ v = visitor_input_test_init(data, "{ 'alt': {'integer':1, "
+ "'string':'str', "
"'enum1':'value1', 'boolean':true} }");
visit_type_WrapAlternate(v, NULL, &wrap, &error_abort);
g_assert_cmpint(wrap->alt->type, ==, QTYPE_QDICT);
@@ -492,7 +481,7 @@ static void test_native_list_integer_helper(TestInputVisitorData *data,
g_string_append_printf(gstr_union, "{ 'type': '%s', 'data': [ %s ] }",
UserDefNativeListUnionKind_lookup[kind],
gstr_list->str);
- v = visitor_input_test_init_raw(data, gstr_union->str);
+ v = visitor_input_test_init(data, gstr_union->str);
visit_type_UserDefNativeListUnion(v, NULL, &cvalue, &error_abort);
g_assert(cvalue != NULL);
@@ -654,7 +643,7 @@ static void test_visitor_in_native_list_bool(TestInputVisitorData *data,
}
g_string_append_printf(gstr_union, "{ 'type': 'boolean', 'data': [ %s ] }",
gstr_list->str);
- v = visitor_input_test_init_raw(data, gstr_union->str);
+ v = visitor_input_test_init(data, gstr_union->str);
visit_type_UserDefNativeListUnion(v, NULL, &cvalue, &error_abort);
g_assert(cvalue != NULL);
@@ -687,7 +676,7 @@ static void test_visitor_in_native_list_string(TestInputVisitorData *data,
}
g_string_append_printf(gstr_union, "{ 'type': 'string', 'data': [ %s ] }",
gstr_list->str);
- v = visitor_input_test_init_raw(data, gstr_union->str);
+ v = visitor_input_test_init(data, gstr_union->str);
visit_type_UserDefNativeListUnion(v, NULL, &cvalue, &error_abort);
g_assert(cvalue != NULL);
@@ -724,7 +713,7 @@ static void test_visitor_in_native_list_number(TestInputVisitorData *data,
}
g_string_append_printf(gstr_union, "{ 'type': 'number', 'data': [ %s ] }",
gstr_list->str);
- v = visitor_input_test_init_raw(data, gstr_union->str);
+ v = visitor_input_test_init(data, gstr_union->str);
visit_type_UserDefNativeListUnion(v, NULL, &cvalue, &error_abort);
g_assert(cvalue != NULL);
As argued elsewhere, we want to get rid of the pseudo-printf dynamic JSON parsing of qobject_from_jsonv(). In the qobject-input visitor tests, it is trivial to convert to using the direct qobject_from_json() or a hand-built QObject. While at it, wrap some long lines noticed while auditing callers. Signed-off-by: Eric Blake <eblake@redhat.com> --- tests/test-qobject-input-strict.c | 37 +++---------------- tests/test-qobject-input-visitor.c | 75 ++++++++++++++++---------------------- 2 files changed, 37 insertions(+), 75 deletions(-)