Statistics
| Branch: | Revision:

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
}