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