root / tests / test-string-output-visitor.c @ 4115852b
History | View | Annotate | Download (5.4 kB)
1 | 2d7799f2 | Paolo Bonzini | /*
|
---|---|---|---|
2 | 2d7799f2 | Paolo Bonzini | * String Output 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-output-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 | |
15 | 2d7799f2 | Paolo Bonzini | #include "qapi/string-output-visitor.h" |
16 | 2d7799f2 | Paolo Bonzini | #include "test-qapi-types.h" |
17 | 2d7799f2 | Paolo Bonzini | #include "test-qapi-visit.h" |
18 | 2d7799f2 | Paolo Bonzini | #include "qemu-objects.h" |
19 | 2d7799f2 | Paolo Bonzini | |
20 | 2d7799f2 | Paolo Bonzini | typedef struct TestOutputVisitorData { |
21 | 2d7799f2 | Paolo Bonzini | StringOutputVisitor *sov; |
22 | 2d7799f2 | Paolo Bonzini | Visitor *ov; |
23 | 2d7799f2 | Paolo Bonzini | } TestOutputVisitorData; |
24 | 2d7799f2 | Paolo Bonzini | |
25 | 2d7799f2 | Paolo Bonzini | static void visitor_output_setup(TestOutputVisitorData *data, |
26 | 2d7799f2 | Paolo Bonzini | const void *unused) |
27 | 2d7799f2 | Paolo Bonzini | { |
28 | 2d7799f2 | Paolo Bonzini | data->sov = string_output_visitor_new(); |
29 | 2d7799f2 | Paolo Bonzini | g_assert(data->sov != NULL);
|
30 | 2d7799f2 | Paolo Bonzini | |
31 | 2d7799f2 | Paolo Bonzini | data->ov = string_output_get_visitor(data->sov); |
32 | 2d7799f2 | Paolo Bonzini | g_assert(data->ov != NULL);
|
33 | 2d7799f2 | Paolo Bonzini | } |
34 | 2d7799f2 | Paolo Bonzini | |
35 | 2d7799f2 | Paolo Bonzini | static void visitor_output_teardown(TestOutputVisitorData *data, |
36 | 2d7799f2 | Paolo Bonzini | const void *unused) |
37 | 2d7799f2 | Paolo Bonzini | { |
38 | 2d7799f2 | Paolo Bonzini | string_output_visitor_cleanup(data->sov); |
39 | 2d7799f2 | Paolo Bonzini | data->sov = NULL;
|
40 | 2d7799f2 | Paolo Bonzini | data->ov = NULL;
|
41 | 2d7799f2 | Paolo Bonzini | } |
42 | 2d7799f2 | Paolo Bonzini | |
43 | 2d7799f2 | Paolo Bonzini | static void test_visitor_out_int(TestOutputVisitorData *data, |
44 | 2d7799f2 | Paolo Bonzini | const void *unused) |
45 | 2d7799f2 | Paolo Bonzini | { |
46 | 2d7799f2 | Paolo Bonzini | int64_t value = -42;
|
47 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
48 | 2d7799f2 | Paolo Bonzini | char *str;
|
49 | 2d7799f2 | Paolo Bonzini | |
50 | 2d7799f2 | Paolo Bonzini | visit_type_int(data->ov, &value, NULL, &errp);
|
51 | 2d7799f2 | Paolo Bonzini | g_assert(error_is_set(&errp) == 0);
|
52 | 2d7799f2 | Paolo Bonzini | |
53 | 2d7799f2 | Paolo Bonzini | str = string_output_get_string(data->sov); |
54 | 2d7799f2 | Paolo Bonzini | g_assert(str != NULL);
|
55 | 2d7799f2 | Paolo Bonzini | g_assert_cmpstr(str, ==, "-42");
|
56 | 2d7799f2 | Paolo Bonzini | g_free(str); |
57 | 2d7799f2 | Paolo Bonzini | } |
58 | 2d7799f2 | Paolo Bonzini | |
59 | 2d7799f2 | Paolo Bonzini | static void test_visitor_out_bool(TestOutputVisitorData *data, |
60 | 2d7799f2 | Paolo Bonzini | const void *unused) |
61 | 2d7799f2 | Paolo Bonzini | { |
62 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
63 | 2d7799f2 | Paolo Bonzini | bool value = true; |
64 | 2d7799f2 | Paolo Bonzini | char *str;
|
65 | 2d7799f2 | Paolo Bonzini | |
66 | 2d7799f2 | Paolo Bonzini | visit_type_bool(data->ov, &value, NULL, &errp);
|
67 | 2d7799f2 | Paolo Bonzini | g_assert(error_is_set(&errp) == 0);
|
68 | 2d7799f2 | Paolo Bonzini | |
69 | 2d7799f2 | Paolo Bonzini | str = string_output_get_string(data->sov); |
70 | 2d7799f2 | Paolo Bonzini | g_assert(str != NULL);
|
71 | 2d7799f2 | Paolo Bonzini | g_assert_cmpstr(str, ==, "true");
|
72 | 2d7799f2 | Paolo Bonzini | g_free(str); |
73 | 2d7799f2 | Paolo Bonzini | } |
74 | 2d7799f2 | Paolo Bonzini | |
75 | 2d7799f2 | Paolo Bonzini | static void test_visitor_out_number(TestOutputVisitorData *data, |
76 | 2d7799f2 | Paolo Bonzini | const void *unused) |
77 | 2d7799f2 | Paolo Bonzini | { |
78 | 2d7799f2 | Paolo Bonzini | double value = 3.14; |
79 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
80 | 2d7799f2 | Paolo Bonzini | char *str;
|
81 | 2d7799f2 | Paolo Bonzini | |
82 | 2d7799f2 | Paolo Bonzini | visit_type_number(data->ov, &value, NULL, &errp);
|
83 | 2d7799f2 | Paolo Bonzini | g_assert(error_is_set(&errp) == 0);
|
84 | 2d7799f2 | Paolo Bonzini | |
85 | 2d7799f2 | Paolo Bonzini | str = string_output_get_string(data->sov); |
86 | 2d7799f2 | Paolo Bonzini | g_assert(str != NULL);
|
87 | 2d7799f2 | Paolo Bonzini | g_assert_cmpstr(str, ==, "3.14");
|
88 | 2d7799f2 | Paolo Bonzini | g_free(str); |
89 | 2d7799f2 | Paolo Bonzini | } |
90 | 2d7799f2 | Paolo Bonzini | |
91 | 2d7799f2 | Paolo Bonzini | static void test_visitor_out_string(TestOutputVisitorData *data, |
92 | 2d7799f2 | Paolo Bonzini | const void *unused) |
93 | 2d7799f2 | Paolo Bonzini | { |
94 | 2d7799f2 | Paolo Bonzini | char *string = (char *) "Q E M U"; |
95 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
96 | 2d7799f2 | Paolo Bonzini | char *str;
|
97 | 2d7799f2 | Paolo Bonzini | |
98 | 2d7799f2 | Paolo Bonzini | visit_type_str(data->ov, &string, NULL, &errp);
|
99 | 2d7799f2 | Paolo Bonzini | g_assert(error_is_set(&errp) == 0);
|
100 | 2d7799f2 | Paolo Bonzini | |
101 | 2d7799f2 | Paolo Bonzini | str = string_output_get_string(data->sov); |
102 | 2d7799f2 | Paolo Bonzini | g_assert(str != NULL);
|
103 | 2d7799f2 | Paolo Bonzini | g_assert_cmpstr(str, ==, string); |
104 | 2d7799f2 | Paolo Bonzini | g_free(str); |
105 | 2d7799f2 | Paolo Bonzini | } |
106 | 2d7799f2 | Paolo Bonzini | |
107 | 2d7799f2 | Paolo Bonzini | static void test_visitor_out_no_string(TestOutputVisitorData *data, |
108 | 2d7799f2 | Paolo Bonzini | const void *unused) |
109 | 2d7799f2 | Paolo Bonzini | { |
110 | 2d7799f2 | Paolo Bonzini | char *string = NULL; |
111 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
112 | 2d7799f2 | Paolo Bonzini | char *str;
|
113 | 2d7799f2 | Paolo Bonzini | |
114 | 2d7799f2 | Paolo Bonzini | /* A null string should return "" */
|
115 | 2d7799f2 | Paolo Bonzini | visit_type_str(data->ov, &string, NULL, &errp);
|
116 | 2d7799f2 | Paolo Bonzini | g_assert(error_is_set(&errp) == 0);
|
117 | 2d7799f2 | Paolo Bonzini | |
118 | 2d7799f2 | Paolo Bonzini | str = string_output_get_string(data->sov); |
119 | 2d7799f2 | Paolo Bonzini | g_assert(str != NULL);
|
120 | 2d7799f2 | Paolo Bonzini | g_assert_cmpstr(str, ==, "");
|
121 | 2d7799f2 | Paolo Bonzini | g_free(str); |
122 | 2d7799f2 | Paolo Bonzini | } |
123 | 2d7799f2 | Paolo Bonzini | |
124 | 2d7799f2 | Paolo Bonzini | static void test_visitor_out_enum(TestOutputVisitorData *data, |
125 | 2d7799f2 | Paolo Bonzini | const void *unused) |
126 | 2d7799f2 | Paolo Bonzini | { |
127 | 2d7799f2 | Paolo Bonzini | Error *errp = NULL;
|
128 | 2d7799f2 | Paolo Bonzini | char *str;
|
129 | 2d7799f2 | Paolo Bonzini | EnumOne i; |
130 | 2d7799f2 | Paolo Bonzini | |
131 | 2d7799f2 | Paolo Bonzini | for (i = 0; i < ENUM_ONE_MAX; i++) { |
132 | 2d7799f2 | Paolo Bonzini | visit_type_EnumOne(data->ov, &i, "unused", &errp);
|
133 | 2d7799f2 | Paolo Bonzini | g_assert(!error_is_set(&errp)); |
134 | 2d7799f2 | Paolo Bonzini | |
135 | 2d7799f2 | Paolo Bonzini | str = string_output_get_string(data->sov); |
136 | 2d7799f2 | Paolo Bonzini | g_assert(str != NULL);
|
137 | 2d7799f2 | Paolo Bonzini | g_assert_cmpstr(str, ==, EnumOne_lookup[i]); |
138 | 2d7799f2 | Paolo Bonzini | g_free(str); |
139 | 2d7799f2 | Paolo Bonzini | } |
140 | 2d7799f2 | Paolo Bonzini | } |
141 | 2d7799f2 | Paolo Bonzini | |
142 | 2d7799f2 | Paolo Bonzini | static void test_visitor_out_enum_errors(TestOutputVisitorData *data, |
143 | 2d7799f2 | Paolo Bonzini | const void *unused) |
144 | 2d7799f2 | Paolo Bonzini | { |
145 | 2d7799f2 | Paolo Bonzini | EnumOne i, bad_values[] = { ENUM_ONE_MAX, -1 };
|
146 | 2d7799f2 | Paolo Bonzini | Error *errp; |
147 | 2d7799f2 | Paolo Bonzini | |
148 | 2d7799f2 | Paolo Bonzini | for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) { |
149 | 2d7799f2 | Paolo Bonzini | errp = NULL;
|
150 | 2d7799f2 | Paolo Bonzini | visit_type_EnumOne(data->ov, &bad_values[i], "unused", &errp);
|
151 | 2d7799f2 | Paolo Bonzini | g_assert(error_is_set(&errp) == true);
|
152 | 2d7799f2 | Paolo Bonzini | error_free(errp); |
153 | 2d7799f2 | Paolo Bonzini | } |
154 | 2d7799f2 | Paolo Bonzini | } |
155 | 2d7799f2 | Paolo Bonzini | |
156 | 2d7799f2 | Paolo Bonzini | static void output_visitor_test_add(const char *testpath, |
157 | 2d7799f2 | Paolo Bonzini | TestOutputVisitorData *data, |
158 | 2d7799f2 | Paolo Bonzini | void (*test_func)(TestOutputVisitorData *data, const void *user_data)) |
159 | 2d7799f2 | Paolo Bonzini | { |
160 | 2d7799f2 | Paolo Bonzini | g_test_add(testpath, TestOutputVisitorData, data, visitor_output_setup, |
161 | 2d7799f2 | Paolo Bonzini | test_func, visitor_output_teardown); |
162 | 2d7799f2 | Paolo Bonzini | } |
163 | 2d7799f2 | Paolo Bonzini | |
164 | 2d7799f2 | Paolo Bonzini | int main(int argc, char **argv) |
165 | 2d7799f2 | Paolo Bonzini | { |
166 | 2d7799f2 | Paolo Bonzini | TestOutputVisitorData out_visitor_data; |
167 | 2d7799f2 | Paolo Bonzini | |
168 | 2d7799f2 | Paolo Bonzini | g_test_init(&argc, &argv, NULL);
|
169 | 2d7799f2 | Paolo Bonzini | |
170 | 2d7799f2 | Paolo Bonzini | output_visitor_test_add("/string-visitor/output/int",
|
171 | 2d7799f2 | Paolo Bonzini | &out_visitor_data, test_visitor_out_int); |
172 | 2d7799f2 | Paolo Bonzini | output_visitor_test_add("/string-visitor/output/bool",
|
173 | 2d7799f2 | Paolo Bonzini | &out_visitor_data, test_visitor_out_bool); |
174 | 2d7799f2 | Paolo Bonzini | output_visitor_test_add("/string-visitor/output/number",
|
175 | 2d7799f2 | Paolo Bonzini | &out_visitor_data, test_visitor_out_number); |
176 | 2d7799f2 | Paolo Bonzini | output_visitor_test_add("/string-visitor/output/string",
|
177 | 2d7799f2 | Paolo Bonzini | &out_visitor_data, test_visitor_out_string); |
178 | 2d7799f2 | Paolo Bonzini | output_visitor_test_add("/string-visitor/output/no-string",
|
179 | 2d7799f2 | Paolo Bonzini | &out_visitor_data, test_visitor_out_no_string); |
180 | 2d7799f2 | Paolo Bonzini | output_visitor_test_add("/string-visitor/output/enum",
|
181 | 2d7799f2 | Paolo Bonzini | &out_visitor_data, test_visitor_out_enum); |
182 | 2d7799f2 | Paolo Bonzini | output_visitor_test_add("/string-visitor/output/enum-errors",
|
183 | 2d7799f2 | Paolo Bonzini | &out_visitor_data, test_visitor_out_enum_errors); |
184 | 2d7799f2 | Paolo Bonzini | |
185 | 2d7799f2 | Paolo Bonzini | g_test_run(); |
186 | 2d7799f2 | Paolo Bonzini | |
187 | 2d7799f2 | Paolo Bonzini | return 0; |
188 | 2d7799f2 | Paolo Bonzini | } |