static void test_visitor_in_number(TestInputVisitorData *data, const void *unused) { double res = 0, value = 3.14; Visitor *v; v = visitor_input_test_init(data, "%f", value); visit_type_number(v, &res, NULL, &error_abort); g_assert_cmpfloat(res, ==, value); }
/* Try to crash the visitors */ static void test_visitor_in_fuzz(TestInputVisitorData *data, const void *unused) { int64_t ires; intList *ilres; bool bres; double nres; char *sres; EnumOne eres; Visitor *v; unsigned int i; char buf[10000]; for (i = 0; i < 100; i++) { unsigned int j; j = g_test_rand_int_range(0, sizeof(buf) - 1); buf[j] = '\0'; if (j != 0) { for (j--; j != 0; j--) { buf[j - 1] = (char)g_test_rand_int_range(0, 256); } } v = visitor_input_test_init(data, buf); visit_type_int(v, NULL, &ires, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_intList(v, NULL, &ilres, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_bool(v, NULL, &bres, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_number(v, NULL, &nres, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); sres = NULL; visit_type_str(v, NULL, &sres, NULL); g_free(sres); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_EnumOne(v, NULL, &eres, NULL); visitor_input_teardown(data, NULL); } }
static void test_visitor_out_number(TestOutputVisitorData *data, const void *unused) { double value = 3.14; QNum *qnum; visit_type_number(data->ov, NULL, &value, &error_abort); qnum = qobject_to_qnum(visitor_get(data)); g_assert(qnum); g_assert(qnum_get_double(qnum) == value); }
static void test_visitor_out_number(TestOutputVisitorData *data, const void *unused) { double value = 3.14; QObject *obj; visit_type_number(data->ov, NULL, &value, &error_abort); obj = visitor_get(data); g_assert(qobject_type(obj) == QTYPE_QFLOAT); g_assert(qfloat_get_double(qobject_to_qfloat(obj)) == value); }
static void test_visitor_in_number(TestInputVisitorData *data, const void *unused) { double res = 0, value = 3.14; Error *errp = NULL; Visitor *v; v = visitor_input_test_init(data, "3.14"); visit_type_number(v, &res, NULL, &errp); g_assert(!error_is_set(&errp)); g_assert_cmpfloat(res, ==, value); }
static void test_visitor_out_number(TestOutputVisitorData *data, const void *unused) { double value = 3.14; Error *errp = NULL; QObject *obj; visit_type_number(data->ov, &value, NULL, &errp); g_assert(error_is_set(&errp) == 0); obj = qmp_output_get_qobject(data->qov); g_assert(obj != NULL); g_assert(qobject_type(obj) == QTYPE_QFLOAT); g_assert(qfloat_get_double(qobject_to_qfloat(obj)) == value); qobject_decref(obj); }
static void visit_primitive_type(Visitor *v, void **native, Error **errp) { PrimitiveType *pt = *native; switch(pt->type) { case PTYPE_STRING: visit_type_str(v, NULL, (char **)&pt->value.string, errp); break; case PTYPE_BOOLEAN: visit_type_bool(v, NULL, &pt->value.boolean, errp); break; case PTYPE_NUMBER: visit_type_number(v, NULL, &pt->value.number, errp); break; case PTYPE_INTEGER: visit_type_int(v, NULL, &pt->value.integer, errp); break; case PTYPE_U8: visit_type_uint8(v, NULL, &pt->value.u8, errp); break; case PTYPE_U16: visit_type_uint16(v, NULL, &pt->value.u16, errp); break; case PTYPE_U32: visit_type_uint32(v, NULL, &pt->value.u32, errp); break; case PTYPE_U64: visit_type_uint64(v, NULL, &pt->value.u64, errp); break; case PTYPE_S8: visit_type_int8(v, NULL, &pt->value.s8, errp); break; case PTYPE_S16: visit_type_int16(v, NULL, &pt->value.s16, errp); break; case PTYPE_S32: visit_type_int32(v, NULL, &pt->value.s32, errp); break; case PTYPE_S64: visit_type_int64(v, NULL, &pt->value.s64, errp); break; case PTYPE_EOL: g_assert_not_reached(); } }
static void test_validate_fail_struct_missing(TestInputVisitorData *data, const void *unused) { Error *err = NULL; Visitor *v; QObject *any; GenericAlternate *alt; bool present; int en; int64_t i64; uint32_t u32; int8_t i8; char *str; double dbl; v = validate_test_init(data, "{}"); visit_start_struct(v, NULL, NULL, 0, &error_abort); visit_start_struct(v, "struct", NULL, 0, &err); error_free_or_abort(&err); visit_start_list(v, "list", NULL, 0, &err); error_free_or_abort(&err); visit_start_alternate(v, "alternate", &alt, sizeof(*alt), false, &err); error_free_or_abort(&err); visit_optional(v, "optional", &present); g_assert(!present); visit_type_enum(v, "enum", &en, EnumOne_lookup, &err); error_free_or_abort(&err); visit_type_int(v, "i64", &i64, &err); error_free_or_abort(&err); visit_type_uint32(v, "u32", &u32, &err); error_free_or_abort(&err); visit_type_int8(v, "i8", &i8, &err); error_free_or_abort(&err); visit_type_str(v, "i8", &str, &err); error_free_or_abort(&err); visit_type_number(v, "dbl", &dbl, &err); error_free_or_abort(&err); visit_type_any(v, "any", &any, &err); error_free_or_abort(&err); visit_type_null(v, "null", &err); error_free_or_abort(&err); visit_end_struct(v, NULL); }