Statistics
| Branch: | Revision:

root / tests / test-qmp-input-visitor.c @ e92cfa0d

History | View | Annotate | Download (9.8 kB)

1 d88f5fd1 Luiz Capitulino
/*
2 d88f5fd1 Luiz Capitulino
 * QMP Input Visitor unit-tests.
3 d88f5fd1 Luiz Capitulino
 *
4 d88f5fd1 Luiz Capitulino
 * Copyright (C) 2011 Red Hat Inc.
5 d88f5fd1 Luiz Capitulino
 *
6 d88f5fd1 Luiz Capitulino
 * Authors:
7 d88f5fd1 Luiz Capitulino
 *  Luiz Capitulino <lcapitulino@redhat.com>
8 d88f5fd1 Luiz Capitulino
 *
9 d88f5fd1 Luiz Capitulino
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
10 d88f5fd1 Luiz Capitulino
 * See the COPYING file in the top-level directory.
11 d88f5fd1 Luiz Capitulino
 */
12 d88f5fd1 Luiz Capitulino
13 d88f5fd1 Luiz Capitulino
#include <glib.h>
14 d88f5fd1 Luiz Capitulino
#include <stdarg.h>
15 d88f5fd1 Luiz Capitulino
16 79ee7df8 Paolo Bonzini
#include "qemu-common.h"
17 d88f5fd1 Luiz Capitulino
#include "qapi/qmp-input-visitor.h"
18 d88f5fd1 Luiz Capitulino
#include "test-qapi-types.h"
19 d88f5fd1 Luiz Capitulino
#include "test-qapi-visit.h"
20 7b1b5d19 Paolo Bonzini
#include "qapi/qmp/types.h"
21 d88f5fd1 Luiz Capitulino
22 d88f5fd1 Luiz Capitulino
typedef struct TestInputVisitorData {
23 d88f5fd1 Luiz Capitulino
    QObject *obj;
24 d88f5fd1 Luiz Capitulino
    QmpInputVisitor *qiv;
25 d88f5fd1 Luiz Capitulino
} TestInputVisitorData;
26 d88f5fd1 Luiz Capitulino
27 d88f5fd1 Luiz Capitulino
static void visitor_input_teardown(TestInputVisitorData *data,
28 d88f5fd1 Luiz Capitulino
                                   const void *unused)
29 d88f5fd1 Luiz Capitulino
{
30 d88f5fd1 Luiz Capitulino
    qobject_decref(data->obj);
31 d88f5fd1 Luiz Capitulino
    data->obj = NULL;
32 d88f5fd1 Luiz Capitulino
33 d88f5fd1 Luiz Capitulino
    if (data->qiv) {
34 d88f5fd1 Luiz Capitulino
        qmp_input_visitor_cleanup(data->qiv);
35 d88f5fd1 Luiz Capitulino
        data->qiv = NULL;
36 d88f5fd1 Luiz Capitulino
    }
37 d88f5fd1 Luiz Capitulino
}
38 d88f5fd1 Luiz Capitulino
39 d88f5fd1 Luiz Capitulino
/* This is provided instead of a test setup function so that the JSON
40 d88f5fd1 Luiz Capitulino
   string used by the tests are kept in the test functions (and not
41 d88f5fd1 Luiz Capitulino
   int main()) */
42 aba2107a Stefan Weil
static GCC_FMT_ATTR(2, 3)
43 aba2107a Stefan Weil
Visitor *visitor_input_test_init(TestInputVisitorData *data,
44 aba2107a Stefan Weil
                                 const char *json_string, ...)
45 d88f5fd1 Luiz Capitulino
{
46 d88f5fd1 Luiz Capitulino
    Visitor *v;
47 d88f5fd1 Luiz Capitulino
    va_list ap;
48 d88f5fd1 Luiz Capitulino
49 d88f5fd1 Luiz Capitulino
    va_start(ap, json_string);
50 d88f5fd1 Luiz Capitulino
    data->obj = qobject_from_jsonv(json_string, &ap);
51 d88f5fd1 Luiz Capitulino
    va_end(ap);
52 d88f5fd1 Luiz Capitulino
53 d88f5fd1 Luiz Capitulino
    g_assert(data->obj != NULL);
54 d88f5fd1 Luiz Capitulino
55 d88f5fd1 Luiz Capitulino
    data->qiv = qmp_input_visitor_new(data->obj);
56 d88f5fd1 Luiz Capitulino
    g_assert(data->qiv != NULL);
57 d88f5fd1 Luiz Capitulino
58 d88f5fd1 Luiz Capitulino
    v = qmp_input_get_visitor(data->qiv);
59 d88f5fd1 Luiz Capitulino
    g_assert(v != NULL);
60 d88f5fd1 Luiz Capitulino
61 d88f5fd1 Luiz Capitulino
    return v;
62 d88f5fd1 Luiz Capitulino
}
63 d88f5fd1 Luiz Capitulino
64 d88f5fd1 Luiz Capitulino
static void test_visitor_in_int(TestInputVisitorData *data,
65 d88f5fd1 Luiz Capitulino
                                const void *unused)
66 d88f5fd1 Luiz Capitulino
{
67 d88f5fd1 Luiz Capitulino
    int64_t res = 0, value = -42;
68 d88f5fd1 Luiz Capitulino
    Error *errp = NULL;
69 d88f5fd1 Luiz Capitulino
    Visitor *v;
70 d88f5fd1 Luiz Capitulino
71 aba2107a Stefan Weil
    v = visitor_input_test_init(data, "%" PRId64, value);
72 d88f5fd1 Luiz Capitulino
73 d88f5fd1 Luiz Capitulino
    visit_type_int(v, &res, NULL, &errp);
74 d88f5fd1 Luiz Capitulino
    g_assert(!error_is_set(&errp));
75 d88f5fd1 Luiz Capitulino
    g_assert_cmpint(res, ==, value);
76 d88f5fd1 Luiz Capitulino
}
77 d88f5fd1 Luiz Capitulino
78 e92cfa0d Michael Roth
static void test_visitor_in_int_overflow(TestInputVisitorData *data,
79 e92cfa0d Michael Roth
                                         const void *unused)
80 e92cfa0d Michael Roth
{
81 e92cfa0d Michael Roth
    int64_t res = 0;
82 e92cfa0d Michael Roth
    Error *errp = NULL;
83 e92cfa0d Michael Roth
    Visitor *v;
84 e92cfa0d Michael Roth
85 e92cfa0d Michael Roth
    /* this will overflow a Qint/int64, so should be deserialized into
86 e92cfa0d Michael Roth
     * a QFloat/double field instead, leading to an error if we pass it
87 e92cfa0d Michael Roth
     * to visit_type_int. confirm this.
88 e92cfa0d Michael Roth
     */
89 e92cfa0d Michael Roth
    v = visitor_input_test_init(data, "%f", DBL_MAX);
90 e92cfa0d Michael Roth
91 e92cfa0d Michael Roth
    visit_type_int(v, &res, NULL, &errp);
92 e92cfa0d Michael Roth
    g_assert(error_is_set(&errp));
93 e92cfa0d Michael Roth
    error_free(errp);
94 e92cfa0d Michael Roth
}
95 e92cfa0d Michael Roth
96 d88f5fd1 Luiz Capitulino
static void test_visitor_in_bool(TestInputVisitorData *data,
97 d88f5fd1 Luiz Capitulino
                                 const void *unused)
98 d88f5fd1 Luiz Capitulino
{
99 d88f5fd1 Luiz Capitulino
    Error *errp = NULL;
100 d88f5fd1 Luiz Capitulino
    bool res = false;
101 d88f5fd1 Luiz Capitulino
    Visitor *v;
102 d88f5fd1 Luiz Capitulino
103 d88f5fd1 Luiz Capitulino
    v = visitor_input_test_init(data, "true");
104 d88f5fd1 Luiz Capitulino
105 d88f5fd1 Luiz Capitulino
    visit_type_bool(v, &res, NULL, &errp);
106 d88f5fd1 Luiz Capitulino
    g_assert(!error_is_set(&errp));
107 d88f5fd1 Luiz Capitulino
    g_assert_cmpint(res, ==, true);
108 d88f5fd1 Luiz Capitulino
}
109 d88f5fd1 Luiz Capitulino
110 d88f5fd1 Luiz Capitulino
static void test_visitor_in_number(TestInputVisitorData *data,
111 d88f5fd1 Luiz Capitulino
                                   const void *unused)
112 d88f5fd1 Luiz Capitulino
{
113 d88f5fd1 Luiz Capitulino
    double res = 0, value = 3.14;
114 d88f5fd1 Luiz Capitulino
    Error *errp = NULL;
115 d88f5fd1 Luiz Capitulino
    Visitor *v;
116 d88f5fd1 Luiz Capitulino
117 d88f5fd1 Luiz Capitulino
    v = visitor_input_test_init(data, "%f", value);
118 d88f5fd1 Luiz Capitulino
119 d88f5fd1 Luiz Capitulino
    visit_type_number(v, &res, NULL, &errp);
120 d88f5fd1 Luiz Capitulino
    g_assert(!error_is_set(&errp));
121 d88f5fd1 Luiz Capitulino
    g_assert_cmpfloat(res, ==, value);
122 d88f5fd1 Luiz Capitulino
}
123 d88f5fd1 Luiz Capitulino
124 d88f5fd1 Luiz Capitulino
static void test_visitor_in_string(TestInputVisitorData *data,
125 d88f5fd1 Luiz Capitulino
                                   const void *unused)
126 d88f5fd1 Luiz Capitulino
{
127 d88f5fd1 Luiz Capitulino
    char *res = NULL, *value = (char *) "Q E M U";
128 d88f5fd1 Luiz Capitulino
    Error *errp = NULL;
129 d88f5fd1 Luiz Capitulino
    Visitor *v;
130 d88f5fd1 Luiz Capitulino
131 d88f5fd1 Luiz Capitulino
    v = visitor_input_test_init(data, "%s", value);
132 d88f5fd1 Luiz Capitulino
133 d88f5fd1 Luiz Capitulino
    visit_type_str(v, &res, NULL, &errp);
134 d88f5fd1 Luiz Capitulino
    g_assert(!error_is_set(&errp));
135 d88f5fd1 Luiz Capitulino
    g_assert_cmpstr(res, ==, value);
136 d88f5fd1 Luiz Capitulino
137 d88f5fd1 Luiz Capitulino
    g_free(res);
138 d88f5fd1 Luiz Capitulino
}
139 d88f5fd1 Luiz Capitulino
140 d88f5fd1 Luiz Capitulino
static void test_visitor_in_enum(TestInputVisitorData *data,
141 d88f5fd1 Luiz Capitulino
                                 const void *unused)
142 d88f5fd1 Luiz Capitulino
{
143 d88f5fd1 Luiz Capitulino
    Error *errp = NULL;
144 d88f5fd1 Luiz Capitulino
    Visitor *v;
145 d88f5fd1 Luiz Capitulino
    EnumOne i;
146 d88f5fd1 Luiz Capitulino
147 d88f5fd1 Luiz Capitulino
    for (i = 0; EnumOne_lookup[i]; i++) {
148 d88f5fd1 Luiz Capitulino
        EnumOne res = -1;
149 d88f5fd1 Luiz Capitulino
150 d88f5fd1 Luiz Capitulino
        v = visitor_input_test_init(data, "%s", EnumOne_lookup[i]);
151 d88f5fd1 Luiz Capitulino
152 d88f5fd1 Luiz Capitulino
        visit_type_EnumOne(v, &res, NULL, &errp);
153 d88f5fd1 Luiz Capitulino
        g_assert(!error_is_set(&errp));
154 d88f5fd1 Luiz Capitulino
        g_assert_cmpint(i, ==, res);
155 d88f5fd1 Luiz Capitulino
156 d88f5fd1 Luiz Capitulino
        visitor_input_teardown(data, NULL);
157 d88f5fd1 Luiz Capitulino
    }
158 d88f5fd1 Luiz Capitulino
159 d88f5fd1 Luiz Capitulino
    data->obj = NULL;
160 d88f5fd1 Luiz Capitulino
    data->qiv = NULL;
161 d88f5fd1 Luiz Capitulino
}
162 d88f5fd1 Luiz Capitulino
163 d88f5fd1 Luiz Capitulino
typedef struct TestStruct
164 d88f5fd1 Luiz Capitulino
{
165 d88f5fd1 Luiz Capitulino
    int64_t integer;
166 d88f5fd1 Luiz Capitulino
    bool boolean;
167 d88f5fd1 Luiz Capitulino
    char *string;
168 d88f5fd1 Luiz Capitulino
} TestStruct;
169 d88f5fd1 Luiz Capitulino
170 d88f5fd1 Luiz Capitulino
static void visit_type_TestStruct(Visitor *v, TestStruct **obj,
171 d88f5fd1 Luiz Capitulino
                                  const char *name, Error **errp)
172 d88f5fd1 Luiz Capitulino
{
173 d195325b Paolo Bonzini
    Error *err = NULL;
174 d195325b Paolo Bonzini
    if (!error_is_set(errp)) {
175 d195325b Paolo Bonzini
        visit_start_struct(v, (void **)obj, "TestStruct", name, sizeof(TestStruct),
176 d195325b Paolo Bonzini
                           &err);
177 d195325b Paolo Bonzini
        if (!err) {
178 d195325b Paolo Bonzini
            visit_type_int(v, &(*obj)->integer, "integer", &err);
179 d195325b Paolo Bonzini
            visit_type_bool(v, &(*obj)->boolean, "boolean", &err);
180 d195325b Paolo Bonzini
            visit_type_str(v, &(*obj)->string, "string", &err);
181 d195325b Paolo Bonzini
182 d195325b Paolo Bonzini
            /* Always call end_struct if start_struct succeeded.  */
183 d195325b Paolo Bonzini
            error_propagate(errp, err);
184 d195325b Paolo Bonzini
            err = NULL;
185 d195325b Paolo Bonzini
            visit_end_struct(v, &err);
186 d195325b Paolo Bonzini
        }
187 d195325b Paolo Bonzini
        error_propagate(errp, err);
188 d195325b Paolo Bonzini
    }
189 d88f5fd1 Luiz Capitulino
}
190 d88f5fd1 Luiz Capitulino
191 d88f5fd1 Luiz Capitulino
static void test_visitor_in_struct(TestInputVisitorData *data,
192 d88f5fd1 Luiz Capitulino
                                   const void *unused)
193 d88f5fd1 Luiz Capitulino
{
194 d88f5fd1 Luiz Capitulino
    TestStruct *p = NULL;
195 d88f5fd1 Luiz Capitulino
    Error *errp = NULL;
196 d88f5fd1 Luiz Capitulino
    Visitor *v;
197 d88f5fd1 Luiz Capitulino
198 d88f5fd1 Luiz Capitulino
    v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
199 d88f5fd1 Luiz Capitulino
200 d88f5fd1 Luiz Capitulino
    visit_type_TestStruct(v, &p, NULL, &errp);
201 d88f5fd1 Luiz Capitulino
    g_assert(!error_is_set(&errp));
202 d88f5fd1 Luiz Capitulino
    g_assert_cmpint(p->integer, ==, -42);
203 d88f5fd1 Luiz Capitulino
    g_assert(p->boolean == true);
204 d88f5fd1 Luiz Capitulino
    g_assert_cmpstr(p->string, ==, "foo");
205 d88f5fd1 Luiz Capitulino
206 d88f5fd1 Luiz Capitulino
    g_free(p->string);
207 d88f5fd1 Luiz Capitulino
    g_free(p);
208 d88f5fd1 Luiz Capitulino
}
209 d88f5fd1 Luiz Capitulino
210 d88f5fd1 Luiz Capitulino
static void check_and_free_str(char *str, const char *cmp)
211 d88f5fd1 Luiz Capitulino
{
212 d88f5fd1 Luiz Capitulino
    g_assert_cmpstr(str, ==, cmp);
213 d88f5fd1 Luiz Capitulino
    g_free(str);
214 d88f5fd1 Luiz Capitulino
}
215 d88f5fd1 Luiz Capitulino
216 d88f5fd1 Luiz Capitulino
static void test_visitor_in_struct_nested(TestInputVisitorData *data,
217 d88f5fd1 Luiz Capitulino
                                          const void *unused)
218 d88f5fd1 Luiz Capitulino
{
219 d88f5fd1 Luiz Capitulino
    UserDefNested *udp = NULL;
220 d88f5fd1 Luiz Capitulino
    Error *errp = NULL;
221 d88f5fd1 Luiz Capitulino
    Visitor *v;
222 d88f5fd1 Luiz Capitulino
223 d88f5fd1 Luiz Capitulino
    v = visitor_input_test_init(data, "{ 'string0': 'string0', 'dict1': { 'string1': 'string1', 'dict2': { 'userdef1': { 'integer': 42, 'string': 'string' }, 'string2': 'string2'}}}");
224 d88f5fd1 Luiz Capitulino
225 d88f5fd1 Luiz Capitulino
    visit_type_UserDefNested(v, &udp, NULL, &errp);
226 d88f5fd1 Luiz Capitulino
    g_assert(!error_is_set(&errp));
227 d88f5fd1 Luiz Capitulino
228 d88f5fd1 Luiz Capitulino
    check_and_free_str(udp->string0, "string0");
229 d88f5fd1 Luiz Capitulino
    check_and_free_str(udp->dict1.string1, "string1");
230 d88f5fd1 Luiz Capitulino
    g_assert_cmpint(udp->dict1.dict2.userdef1->integer, ==, 42);
231 d88f5fd1 Luiz Capitulino
    check_and_free_str(udp->dict1.dict2.userdef1->string, "string");
232 d88f5fd1 Luiz Capitulino
    check_and_free_str(udp->dict1.dict2.string2, "string2");
233 d88f5fd1 Luiz Capitulino
    g_assert(udp->dict1.has_dict3 == false);
234 d88f5fd1 Luiz Capitulino
235 d88f5fd1 Luiz Capitulino
    g_free(udp->dict1.dict2.userdef1);
236 d88f5fd1 Luiz Capitulino
    g_free(udp);
237 d88f5fd1 Luiz Capitulino
}
238 d88f5fd1 Luiz Capitulino
239 d88f5fd1 Luiz Capitulino
static void test_visitor_in_list(TestInputVisitorData *data,
240 d88f5fd1 Luiz Capitulino
                                 const void *unused)
241 d88f5fd1 Luiz Capitulino
{
242 d88f5fd1 Luiz Capitulino
    UserDefOneList *item, *head = NULL;
243 d88f5fd1 Luiz Capitulino
    Error *errp = NULL;
244 d88f5fd1 Luiz Capitulino
    Visitor *v;
245 d88f5fd1 Luiz Capitulino
    int i;
246 d88f5fd1 Luiz Capitulino
247 d88f5fd1 Luiz Capitulino
    v = visitor_input_test_init(data, "[ { 'string': 'string0', 'integer': 42 }, { 'string': 'string1', 'integer': 43 }, { 'string': 'string2', 'integer': 44 } ]");
248 d88f5fd1 Luiz Capitulino
249 d88f5fd1 Luiz Capitulino
    visit_type_UserDefOneList(v, &head, NULL, &errp);
250 d88f5fd1 Luiz Capitulino
    g_assert(!error_is_set(&errp));
251 d88f5fd1 Luiz Capitulino
    g_assert(head != NULL);
252 d88f5fd1 Luiz Capitulino
253 d88f5fd1 Luiz Capitulino
    for (i = 0, item = head; item; item = item->next, i++) {
254 d88f5fd1 Luiz Capitulino
        char string[12];
255 d88f5fd1 Luiz Capitulino
256 d88f5fd1 Luiz Capitulino
        snprintf(string, sizeof(string), "string%d", i);
257 d88f5fd1 Luiz Capitulino
        g_assert_cmpstr(item->value->string, ==, string);
258 d88f5fd1 Luiz Capitulino
        g_assert_cmpint(item->value->integer, ==, 42 + i);
259 d88f5fd1 Luiz Capitulino
    }
260 d88f5fd1 Luiz Capitulino
261 d88f5fd1 Luiz Capitulino
    qapi_free_UserDefOneList(head);
262 d88f5fd1 Luiz Capitulino
}
263 d88f5fd1 Luiz Capitulino
264 dc8fb6df Paolo Bonzini
static void test_visitor_in_union(TestInputVisitorData *data,
265 dc8fb6df Paolo Bonzini
                                  const void *unused)
266 dc8fb6df Paolo Bonzini
{
267 dc8fb6df Paolo Bonzini
    Visitor *v;
268 dc8fb6df Paolo Bonzini
    Error *err = NULL;
269 dc8fb6df Paolo Bonzini
    UserDefUnion *tmp;
270 dc8fb6df Paolo Bonzini
271 dc8fb6df Paolo Bonzini
    v = visitor_input_test_init(data, "{ 'type': 'b', 'data' : { 'integer': 42 } }");
272 dc8fb6df Paolo Bonzini
273 dc8fb6df Paolo Bonzini
    visit_type_UserDefUnion(v, &tmp, NULL, &err);
274 dc8fb6df Paolo Bonzini
    g_assert(err == NULL);
275 dc8fb6df Paolo Bonzini
    g_assert_cmpint(tmp->kind, ==, USER_DEF_UNION_KIND_B);
276 dc8fb6df Paolo Bonzini
    g_assert_cmpint(tmp->b->integer, ==, 42);
277 dc8fb6df Paolo Bonzini
    qapi_free_UserDefUnion(tmp);
278 dc8fb6df Paolo Bonzini
}
279 dc8fb6df Paolo Bonzini
280 d88f5fd1 Luiz Capitulino
static void input_visitor_test_add(const char *testpath,
281 d88f5fd1 Luiz Capitulino
                                   TestInputVisitorData *data,
282 d88f5fd1 Luiz Capitulino
                                   void (*test_func)(TestInputVisitorData *data, const void *user_data))
283 d88f5fd1 Luiz Capitulino
{
284 d88f5fd1 Luiz Capitulino
    g_test_add(testpath, TestInputVisitorData, data, NULL, test_func,
285 d88f5fd1 Luiz Capitulino
               visitor_input_teardown);
286 d88f5fd1 Luiz Capitulino
}
287 d88f5fd1 Luiz Capitulino
288 3dcf71f6 Paolo Bonzini
static void test_visitor_in_errors(TestInputVisitorData *data,
289 3dcf71f6 Paolo Bonzini
                                   const void *unused)
290 3dcf71f6 Paolo Bonzini
{
291 3dcf71f6 Paolo Bonzini
    TestStruct *p = NULL;
292 3dcf71f6 Paolo Bonzini
    Error *errp = NULL;
293 3dcf71f6 Paolo Bonzini
    Visitor *v;
294 3dcf71f6 Paolo Bonzini
295 3dcf71f6 Paolo Bonzini
    v = visitor_input_test_init(data, "{ 'integer': false, 'boolean': 'foo', 'string': -42 }");
296 3dcf71f6 Paolo Bonzini
297 3dcf71f6 Paolo Bonzini
    visit_type_TestStruct(v, &p, NULL, &errp);
298 3dcf71f6 Paolo Bonzini
    g_assert(error_is_set(&errp));
299 3dcf71f6 Paolo Bonzini
    g_assert(p->string == NULL);
300 3dcf71f6 Paolo Bonzini
301 3dcf71f6 Paolo Bonzini
    g_free(p->string);
302 3dcf71f6 Paolo Bonzini
    g_free(p);
303 3dcf71f6 Paolo Bonzini
}
304 3dcf71f6 Paolo Bonzini
305 d88f5fd1 Luiz Capitulino
int main(int argc, char **argv)
306 d88f5fd1 Luiz Capitulino
{
307 d88f5fd1 Luiz Capitulino
    TestInputVisitorData in_visitor_data;
308 d88f5fd1 Luiz Capitulino
309 d88f5fd1 Luiz Capitulino
    g_test_init(&argc, &argv, NULL);
310 d88f5fd1 Luiz Capitulino
311 d88f5fd1 Luiz Capitulino
    input_visitor_test_add("/visitor/input/int",
312 d88f5fd1 Luiz Capitulino
                           &in_visitor_data, test_visitor_in_int);
313 e92cfa0d Michael Roth
    input_visitor_test_add("/visitor/input/int_overflow",
314 e92cfa0d Michael Roth
                           &in_visitor_data, test_visitor_in_int_overflow);
315 d88f5fd1 Luiz Capitulino
    input_visitor_test_add("/visitor/input/bool",
316 d88f5fd1 Luiz Capitulino
                           &in_visitor_data, test_visitor_in_bool);
317 d88f5fd1 Luiz Capitulino
    input_visitor_test_add("/visitor/input/number",
318 d88f5fd1 Luiz Capitulino
                           &in_visitor_data, test_visitor_in_number);
319 d88f5fd1 Luiz Capitulino
    input_visitor_test_add("/visitor/input/string",
320 d88f5fd1 Luiz Capitulino
                            &in_visitor_data, test_visitor_in_string);
321 d88f5fd1 Luiz Capitulino
    input_visitor_test_add("/visitor/input/enum",
322 d88f5fd1 Luiz Capitulino
                            &in_visitor_data, test_visitor_in_enum);
323 d88f5fd1 Luiz Capitulino
    input_visitor_test_add("/visitor/input/struct",
324 d88f5fd1 Luiz Capitulino
                            &in_visitor_data, test_visitor_in_struct);
325 d88f5fd1 Luiz Capitulino
    input_visitor_test_add("/visitor/input/struct-nested",
326 d88f5fd1 Luiz Capitulino
                            &in_visitor_data, test_visitor_in_struct_nested);
327 d88f5fd1 Luiz Capitulino
    input_visitor_test_add("/visitor/input/list",
328 d88f5fd1 Luiz Capitulino
                            &in_visitor_data, test_visitor_in_list);
329 dc8fb6df Paolo Bonzini
    input_visitor_test_add("/visitor/input/union",
330 dc8fb6df Paolo Bonzini
                            &in_visitor_data, test_visitor_in_union);
331 3dcf71f6 Paolo Bonzini
    input_visitor_test_add("/visitor/input/errors",
332 3dcf71f6 Paolo Bonzini
                            &in_visitor_data, test_visitor_in_errors);
333 d88f5fd1 Luiz Capitulino
334 d88f5fd1 Luiz Capitulino
    g_test_run();
335 d88f5fd1 Luiz Capitulino
336 d88f5fd1 Luiz Capitulino
    return 0;
337 d88f5fd1 Luiz Capitulino
}