|
|
1.1 ! root 1: /* ! 2: * String Output Visitor unit-tests. ! 3: * ! 4: * Copyright (C) 2012 Red Hat Inc. ! 5: * ! 6: * Authors: ! 7: * Paolo Bonzini <[email protected]> (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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.