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 | } |