Statistics
| Branch: | Revision:

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
}