Annotation of qemu/tests/test-string-input-visitor.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * String Input Visitor unit-tests.
        !             3:  *
        !             4:  * Copyright (C) 2012 Red Hat Inc.
        !             5:  *
        !             6:  * Authors:
        !             7:  *  Paolo Bonzini <[email protected]> (based on test-qmp-input-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: #include <stdarg.h>
        !            15: 
        !            16: #include "qapi/string-input-visitor.h"
        !            17: #include "test-qapi-types.h"
        !            18: #include "test-qapi-visit.h"
        !            19: #include "qemu-objects.h"
        !            20: 
        !            21: typedef struct TestInputVisitorData {
        !            22:     StringInputVisitor *siv;
        !            23: } TestInputVisitorData;
        !            24: 
        !            25: static void visitor_input_teardown(TestInputVisitorData *data,
        !            26:                                    const void *unused)
        !            27: {
        !            28:     if (data->siv) {
        !            29:         string_input_visitor_cleanup(data->siv);
        !            30:         data->siv = NULL;
        !            31:     }
        !            32: }
        !            33: 
        !            34: /* This is provided instead of a test setup function so that the JSON
        !            35:    string used by the tests are kept in the test functions (and not
        !            36:    int main()) */
        !            37: static
        !            38: Visitor *visitor_input_test_init(TestInputVisitorData *data,
        !            39:                                  const char *string)
        !            40: {
        !            41:     Visitor *v;
        !            42: 
        !            43:     data->siv = string_input_visitor_new(string);
        !            44:     g_assert(data->siv != NULL);
        !            45: 
        !            46:     v = string_input_get_visitor(data->siv);
        !            47:     g_assert(v != NULL);
        !            48: 
        !            49:     return v;
        !            50: }
        !            51: 
        !            52: static void test_visitor_in_int(TestInputVisitorData *data,
        !            53:                                 const void *unused)
        !            54: {
        !            55:     int64_t res = 0, value = -42;
        !            56:     Error *errp = NULL;
        !            57:     Visitor *v;
        !            58: 
        !            59:     v = visitor_input_test_init(data, "-42");
        !            60: 
        !            61:     visit_type_int(v, &res, NULL, &errp);
        !            62:     g_assert(!error_is_set(&errp));
        !            63:     g_assert_cmpint(res, ==, value);
        !            64: }
        !            65: 
        !            66: static void test_visitor_in_bool(TestInputVisitorData *data,
        !            67:                                  const void *unused)
        !            68: {
        !            69:     Error *errp = NULL;
        !            70:     bool res = false;
        !            71:     Visitor *v;
        !            72: 
        !            73:     v = visitor_input_test_init(data, "true");
        !            74: 
        !            75:     visit_type_bool(v, &res, NULL, &errp);
        !            76:     g_assert(!error_is_set(&errp));
        !            77:     g_assert_cmpint(res, ==, true);
        !            78:     visitor_input_teardown(data, unused);
        !            79: 
        !            80:     v = visitor_input_test_init(data, "yes");
        !            81: 
        !            82:     visit_type_bool(v, &res, NULL, &errp);
        !            83:     g_assert(!error_is_set(&errp));
        !            84:     g_assert_cmpint(res, ==, true);
        !            85:     visitor_input_teardown(data, unused);
        !            86: 
        !            87:     v = visitor_input_test_init(data, "on");
        !            88: 
        !            89:     visit_type_bool(v, &res, NULL, &errp);
        !            90:     g_assert(!error_is_set(&errp));
        !            91:     g_assert_cmpint(res, ==, true);
        !            92:     visitor_input_teardown(data, unused);
        !            93: 
        !            94:     v = visitor_input_test_init(data, "false");
        !            95: 
        !            96:     visit_type_bool(v, &res, NULL, &errp);
        !            97:     g_assert(!error_is_set(&errp));
        !            98:     g_assert_cmpint(res, ==, false);
        !            99:     visitor_input_teardown(data, unused);
        !           100: 
        !           101:     v = visitor_input_test_init(data, "no");
        !           102: 
        !           103:     visit_type_bool(v, &res, NULL, &errp);
        !           104:     g_assert(!error_is_set(&errp));
        !           105:     g_assert_cmpint(res, ==, false);
        !           106:     visitor_input_teardown(data, unused);
        !           107: 
        !           108:     v = visitor_input_test_init(data, "off");
        !           109: 
        !           110:     visit_type_bool(v, &res, NULL, &errp);
        !           111:     g_assert(!error_is_set(&errp));
        !           112:     g_assert_cmpint(res, ==, false);
        !           113: }
        !           114: 
        !           115: static void test_visitor_in_number(TestInputVisitorData *data,
        !           116:                                    const void *unused)
        !           117: {
        !           118:     double res = 0, value = 3.14;
        !           119:     Error *errp = NULL;
        !           120:     Visitor *v;
        !           121: 
        !           122:     v = visitor_input_test_init(data, "3.14");
        !           123: 
        !           124:     visit_type_number(v, &res, NULL, &errp);
        !           125:     g_assert(!error_is_set(&errp));
        !           126:     g_assert_cmpfloat(res, ==, value);
        !           127: }
        !           128: 
        !           129: static void test_visitor_in_string(TestInputVisitorData *data,
        !           130:                                    const void *unused)
        !           131: {
        !           132:     char *res = NULL, *value = (char *) "Q E M U";
        !           133:     Error *errp = NULL;
        !           134:     Visitor *v;
        !           135: 
        !           136:     v = visitor_input_test_init(data, value);
        !           137: 
        !           138:     visit_type_str(v, &res, NULL, &errp);
        !           139:     g_assert(!error_is_set(&errp));
        !           140:     g_assert_cmpstr(res, ==, value);
        !           141: 
        !           142:     g_free(res);
        !           143: }
        !           144: 
        !           145: static void test_visitor_in_enum(TestInputVisitorData *data,
        !           146:                                  const void *unused)
        !           147: {
        !           148:     Error *errp = NULL;
        !           149:     Visitor *v;
        !           150:     EnumOne i;
        !           151: 
        !           152:     for (i = 0; EnumOne_lookup[i]; i++) {
        !           153:         EnumOne res = -1;
        !           154: 
        !           155:         v = visitor_input_test_init(data, EnumOne_lookup[i]);
        !           156: 
        !           157:         visit_type_EnumOne(v, &res, NULL, &errp);
        !           158:         g_assert(!error_is_set(&errp));
        !           159:         g_assert_cmpint(i, ==, res);
        !           160: 
        !           161:         visitor_input_teardown(data, NULL);
        !           162:     }
        !           163: 
        !           164:     data->siv = NULL;
        !           165: }
        !           166: 
        !           167: static void input_visitor_test_add(const char *testpath,
        !           168:                                    TestInputVisitorData *data,
        !           169:                                    void (*test_func)(TestInputVisitorData *data, const void *user_data))
        !           170: {
        !           171:     g_test_add(testpath, TestInputVisitorData, data, NULL, test_func,
        !           172:                visitor_input_teardown);
        !           173: }
        !           174: 
        !           175: int main(int argc, char **argv)
        !           176: {
        !           177:     TestInputVisitorData in_visitor_data;
        !           178: 
        !           179:     g_test_init(&argc, &argv, NULL);
        !           180: 
        !           181:     input_visitor_test_add("/string-visitor/input/int",
        !           182:                            &in_visitor_data, test_visitor_in_int);
        !           183:     input_visitor_test_add("/string-visitor/input/bool",
        !           184:                            &in_visitor_data, test_visitor_in_bool);
        !           185:     input_visitor_test_add("/string-visitor/input/number",
        !           186:                            &in_visitor_data, test_visitor_in_number);
        !           187:     input_visitor_test_add("/string-visitor/input/string",
        !           188:                             &in_visitor_data, test_visitor_in_string);
        !           189:     input_visitor_test_add("/string-visitor/input/enum",
        !           190:                             &in_visitor_data, test_visitor_in_enum);
        !           191: 
        !           192:     g_test_run();
        !           193: 
        !           194:     return 0;
        !           195: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.