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