root / test-string-input-visitor.c @ 371c6489
History | View | Annotate | Download (5.2 kB)
1 | 2d7799f2 | Paolo Bonzini | /*
|
---|---|---|---|
2 | 2d7799f2 | Paolo Bonzini | * String Input Visitor unit-tests.
|
3 | 2d7799f2 | Paolo Bonzini | *
|
4 | 2d7799f2 | Paolo Bonzini | * Copyright (C) 2012 Red Hat Inc.
|
5 | 2d7799f2 | Paolo Bonzini | *
|
6 | 2d7799f2 | Paolo Bonzini | * Authors:
|
7 | 2d7799f2 | Paolo Bonzini | * Paolo Bonzini <pbonzini@redhat.com> (based on test-qmp-input-visitor)
|
8 | 2d7799f2 | Paolo Bonzini | *
|
9 | 2d7799f2 | Paolo Bonzini | * This work is licensed under the terms of the GNU GPL, version 2 or later.
|
10 | 2d7799f2 | Paolo Bonzini | * See the COPYING file in the top-level directory.
|
11 | 2d7799f2 | Paolo Bonzini | */
|
12 | 2d7799f2 | Paolo Bonzini | |
13 | 2d7799f2 | Paolo Bonzini | #include <glib.h> |
14 | 2d7799f2 | Paolo Bonzini | #include <stdarg.h> |
15 | 2d7799f2 | Paolo Bonzini | |
16 | 2d7799f2 | Paolo Bonzini | #include "qapi/string-input-visitor.h" |
17 | 2d7799f2 | Paolo Bonzini | #include "test-qapi-types.h" |
18 | 2d7799f2 | Paolo Bonzini | #include "test-qapi-visit.h" |
19 | 2d7799f2 | Paolo Bonzini | #include "qemu-objects.h" |
20 | 2d7799f2 | Paolo Bonzini | |
21 | 2d7799f2 | Paolo Bonzini | typedef struct TestInputVisitorData { |
22 | 2d7799f2 | Paolo Bonzini | StringInputVisitor *siv; |
23 | 2d7799f2 | Paolo Bonzini | } TestInputVisitorData; |
24 | 2d7799f2 | Paolo Bonzini | |
25 | 2d7799f2 | Paolo Bonzini | static void visitor_input_teardown(TestInputVisitorData *data, |
26 | 2d7799f2 | Paolo Bonzini | const void *unused) |
27 | 2d7799f2 | Paolo Bonzini | { |
28 | 2d7799f2 | Paolo Bonzini | if (data->siv) {
|
29 | 2d7799f2 | Paolo Bonzini | string_input_visitor_cleanup(data->siv); |
30 | 2d7799f2 | Paolo Bonzini | data->siv = NULL;
|
31 | 2d7799f2 | Paolo Bonzini | } |
32 | 2d7799f2 | Paolo Bonzini | } |
33 | 2d7799f2 | Paolo Bonzini | |
34 | 2d7799f2 | Paolo Bonzini | /* This is provided instead of a test setup function so that the JSON
|
35 | 2d7799f2 | Paolo Bonzini | string used by the tests are kept in the test functions (and not
|
36 | 2d7799f2 | Paolo Bonzini | int main()) */
|
37 | 2d7799f2 | Paolo Bonzini | static
|
38 | 2d7799f2 | Paolo Bonzini | Visitor *visitor_input_test_init(TestInputVisitorData *data, |
39 | 2d7799f2 | Paolo Bonzini | const char *string) |
40 | 2d7799f2 | Paolo Bonzini | { |
41 | 2d7799f2 | Paolo Bonzini | Visitor *v; |
42 | 2d7799f2 | Paolo Bonzini | |
43 | 2d7799f2 | Paolo Bonzini | data->siv = string_input_visitor_new(string); |
44 | 2d7799f2 | Paolo Bonzini | g_assert(data->siv != NULL);
|
45 | 2d7799f2 | Paolo Bonzini | |
46 | 2d7799f2 | Paolo Bonzini | v = string_input_get_visitor(data->siv); |
47 | 2d7799f2 | Paolo Bonzini | g_assert(v != NULL);
|
48 | 2d7799f2 | Paolo Bonzini | |
49 | 2d7799f2 | Paolo Bonzini | return v;
|
50 | 2d7799f2 | Paolo Bonzini | } |
51 | 2d7799f2 | Paolo Bonzini | |
52 | 2d7799f2 | Paolo Bonzini | static void test_visitor_in_int(TestInputVisitorData *data, |
53 | 2d7799f2 | Paolo Bonzini | const void *unused) |
54 | 2d7799f2 | Paolo Bonzini | { |
55 | 2d7799f2 | Paolo Bonzini | int64_t res = 0, value = -42; |
56 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
57 | 2d7799f2 | Paolo Bonzini | Visitor *v; |
58 | 2d7799f2 | Paolo Bonzini | |
59 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, "-42");
|
60 | 2d7799f2 | Paolo Bonzini | |
61 | 2d7799f2 | Paolo Bonzini | visit_type_int(v, &res, NULL, &errp);
|
62 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
63 | 2d7799f2 | Paolo Bonzini | g_assert_cmpint(res, ==, value); |
64 | 2d7799f2 | Paolo Bonzini | } |
65 | 2d7799f2 | Paolo Bonzini | |
66 | 2d7799f2 | Paolo Bonzini | static void test_visitor_in_bool(TestInputVisitorData *data, |
67 | 2d7799f2 | Paolo Bonzini | const void *unused) |
68 | 2d7799f2 | Paolo Bonzini | { |
69 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
70 | 2d7799f2 | Paolo Bonzini | bool res = false; |
71 | 2d7799f2 | Paolo Bonzini | Visitor *v; |
72 | 2d7799f2 | Paolo Bonzini | |
73 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, "true");
|
74 | 2d7799f2 | Paolo Bonzini | |
75 | 2d7799f2 | Paolo Bonzini | visit_type_bool(v, &res, NULL, &errp);
|
76 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
77 | 2d7799f2 | Paolo Bonzini | g_assert_cmpint(res, ==, true);
|
78 | 2d7799f2 | Paolo Bonzini | visitor_input_teardown(data, unused); |
79 | 2d7799f2 | Paolo Bonzini | |
80 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, "yes");
|
81 | 2d7799f2 | Paolo Bonzini | |
82 | 2d7799f2 | Paolo Bonzini | visit_type_bool(v, &res, NULL, &errp);
|
83 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
84 | 2d7799f2 | Paolo Bonzini | g_assert_cmpint(res, ==, true);
|
85 | 2d7799f2 | Paolo Bonzini | visitor_input_teardown(data, unused); |
86 | 2d7799f2 | Paolo Bonzini | |
87 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, "on");
|
88 | 2d7799f2 | Paolo Bonzini | |
89 | 2d7799f2 | Paolo Bonzini | visit_type_bool(v, &res, NULL, &errp);
|
90 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
91 | 2d7799f2 | Paolo Bonzini | g_assert_cmpint(res, ==, true);
|
92 | 2d7799f2 | Paolo Bonzini | visitor_input_teardown(data, unused); |
93 | 2d7799f2 | Paolo Bonzini | |
94 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, "false");
|
95 | 2d7799f2 | Paolo Bonzini | |
96 | 2d7799f2 | Paolo Bonzini | visit_type_bool(v, &res, NULL, &errp);
|
97 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
98 | 2d7799f2 | Paolo Bonzini | g_assert_cmpint(res, ==, false);
|
99 | 2d7799f2 | Paolo Bonzini | visitor_input_teardown(data, unused); |
100 | 2d7799f2 | Paolo Bonzini | |
101 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, "no");
|
102 | 2d7799f2 | Paolo Bonzini | |
103 | 2d7799f2 | Paolo Bonzini | visit_type_bool(v, &res, NULL, &errp);
|
104 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
105 | 2d7799f2 | Paolo Bonzini | g_assert_cmpint(res, ==, false);
|
106 | 2d7799f2 | Paolo Bonzini | visitor_input_teardown(data, unused); |
107 | 2d7799f2 | Paolo Bonzini | |
108 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, "off");
|
109 | 2d7799f2 | Paolo Bonzini | |
110 | 2d7799f2 | Paolo Bonzini | visit_type_bool(v, &res, NULL, &errp);
|
111 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
112 | 2d7799f2 | Paolo Bonzini | g_assert_cmpint(res, ==, false);
|
113 | 2d7799f2 | Paolo Bonzini | } |
114 | 2d7799f2 | Paolo Bonzini | |
115 | 2d7799f2 | Paolo Bonzini | static void test_visitor_in_number(TestInputVisitorData *data, |
116 | 2d7799f2 | Paolo Bonzini | const void *unused) |
117 | 2d7799f2 | Paolo Bonzini | { |
118 | 2d7799f2 | Paolo Bonzini | double res = 0, value = 3.14; |
119 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
120 | 2d7799f2 | Paolo Bonzini | Visitor *v; |
121 | 2d7799f2 | Paolo Bonzini | |
122 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, "3.14");
|
123 | 2d7799f2 | Paolo Bonzini | |
124 | 2d7799f2 | Paolo Bonzini | visit_type_number(v, &res, NULL, &errp);
|
125 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
126 | 2d7799f2 | Paolo Bonzini | g_assert_cmpfloat(res, ==, value); |
127 | 2d7799f2 | Paolo Bonzini | } |
128 | 2d7799f2 | Paolo Bonzini | |
129 | 2d7799f2 | Paolo Bonzini | static void test_visitor_in_string(TestInputVisitorData *data, |
130 | 2d7799f2 | Paolo Bonzini | const void *unused) |
131 | 2d7799f2 | Paolo Bonzini | { |
132 | 2d7799f2 | Paolo Bonzini | char *res = NULL, *value = (char *) "Q E M U"; |
133 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
134 | 2d7799f2 | Paolo Bonzini | Visitor *v; |
135 | 2d7799f2 | Paolo Bonzini | |
136 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, value); |
137 | 2d7799f2 | Paolo Bonzini | |
138 | 2d7799f2 | Paolo Bonzini | visit_type_str(v, &res, NULL, &errp);
|
139 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
140 | 2d7799f2 | Paolo Bonzini | g_assert_cmpstr(res, ==, value); |
141 | 2d7799f2 | Paolo Bonzini | |
142 | 2d7799f2 | Paolo Bonzini | g_free(res); |
143 | 2d7799f2 | Paolo Bonzini | } |
144 | 2d7799f2 | Paolo Bonzini | |
145 | 2d7799f2 | Paolo Bonzini | static void test_visitor_in_enum(TestInputVisitorData *data, |
146 | 2d7799f2 | Paolo Bonzini | const void *unused) |
147 | 2d7799f2 | Paolo Bonzini | { |
148 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
149 | 2d7799f2 | Paolo Bonzini | Visitor *v; |
150 | 2d7799f2 | Paolo Bonzini | EnumOne i; |
151 | 2d7799f2 | Paolo Bonzini | |
152 | 2d7799f2 | Paolo Bonzini | for (i = 0; EnumOne_lookup[i]; i++) { |
153 | 2d7799f2 | Paolo Bonzini | EnumOne res = -1;
|
154 | 2d7799f2 | Paolo Bonzini | |
155 | 2d7799f2 | Paolo Bonzini | v = visitor_input_test_init(data, EnumOne_lookup[i]); |
156 | 2d7799f2 | Paolo Bonzini | |
157 | 2d7799f2 | Paolo Bonzini | visit_type_EnumOne(v, &res, NULL, &errp);
|
158 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
159 | 2d7799f2 | Paolo Bonzini | g_assert_cmpint(i, ==, res); |
160 | 2d7799f2 | Paolo Bonzini | |
161 | 2d7799f2 | Paolo Bonzini | visitor_input_teardown(data, NULL);
|
162 | 2d7799f2 | Paolo Bonzini | } |
163 | 2d7799f2 | Paolo Bonzini | |
164 | 2d7799f2 | Paolo Bonzini | data->siv = NULL;
|
165 | 2d7799f2 | Paolo Bonzini | } |
166 | 2d7799f2 | Paolo Bonzini | |
167 | 2d7799f2 | Paolo Bonzini | static void input_visitor_test_add(const char *testpath, |
168 | 2d7799f2 | Paolo Bonzini | TestInputVisitorData *data, |
169 | 2d7799f2 | Paolo Bonzini | void (*test_func)(TestInputVisitorData *data, const void *user_data)) |
170 | 2d7799f2 | Paolo Bonzini | { |
171 | 2d7799f2 | Paolo Bonzini | g_test_add(testpath, TestInputVisitorData, data, NULL, test_func,
|
172 | 2d7799f2 | Paolo Bonzini | visitor_input_teardown); |
173 | 2d7799f2 | Paolo Bonzini | } |
174 | 2d7799f2 | Paolo Bonzini | |
175 | 2d7799f2 | Paolo Bonzini | int main(int argc, char **argv) |
176 | 2d7799f2 | Paolo Bonzini | { |
177 | 2d7799f2 | Paolo Bonzini | TestInputVisitorData in_visitor_data; |
178 | 2d7799f2 | Paolo Bonzini | |
179 | 2d7799f2 | Paolo Bonzini | g_test_init(&argc, &argv, NULL);
|
180 | 2d7799f2 | Paolo Bonzini | |
181 | 2d7799f2 | Paolo Bonzini | input_visitor_test_add("/string-visitor/input/int",
|
182 | 2d7799f2 | Paolo Bonzini | &in_visitor_data, test_visitor_in_int); |
183 | 2d7799f2 | Paolo Bonzini | input_visitor_test_add("/string-visitor/input/bool",
|
184 | 2d7799f2 | Paolo Bonzini | &in_visitor_data, test_visitor_in_bool); |
185 | 2d7799f2 | Paolo Bonzini | input_visitor_test_add("/string-visitor/input/number",
|
186 | 2d7799f2 | Paolo Bonzini | &in_visitor_data, test_visitor_in_number); |
187 | 2d7799f2 | Paolo Bonzini | input_visitor_test_add("/string-visitor/input/string",
|
188 | 2d7799f2 | Paolo Bonzini | &in_visitor_data, test_visitor_in_string); |
189 | 2d7799f2 | Paolo Bonzini | input_visitor_test_add("/string-visitor/input/enum",
|
190 | 2d7799f2 | Paolo Bonzini | &in_visitor_data, test_visitor_in_enum); |
191 | 2d7799f2 | Paolo Bonzini | |
192 | 2d7799f2 | Paolo Bonzini | g_test_run(); |
193 | 2d7799f2 | Paolo Bonzini | |
194 | 2d7799f2 | Paolo Bonzini | return 0; |
195 | 2d7799f2 | Paolo Bonzini | } |