static void test_visitor_in_errors(TestInputVisitorData *data, const void *unused) { TestStruct *p = NULL; Error *err = NULL; Visitor *v; strList *q = NULL; UserDefTwo *r = NULL; WrapAlternate *s = NULL; v = visitor_input_test_init(data, "{ 'integer': false, 'boolean': 'foo', " "'string': -42 }"); visit_type_TestStruct(v, NULL, &p, &err); error_free_or_abort(&err); g_assert(!p); v = visitor_input_test_init(data, "[ '1', '2', false, '3' ]"); visit_type_strList(v, NULL, &q, &err); error_free_or_abort(&err); assert(!q); v = visitor_input_test_init(data, "{ 'str':'hi' }"); visit_type_UserDefTwo(v, NULL, &r, &err); error_free_or_abort(&err); assert(!r); v = visitor_input_test_init(data, "{ }"); visit_type_WrapAlternate(v, NULL, &s, &err); error_free_or_abort(&err); assert(!s); }
static void test_visitor_in_errors(TestInputVisitorData *data, const void *unused) { TestStruct *p = NULL; Error *err = NULL; Visitor *v; strList *q = NULL; v = visitor_input_test_init(data, "{ 'integer': false, 'boolean': 'foo', " "'string': -42 }"); visit_type_TestStruct(v, &p, NULL, &err); error_free_or_abort(&err); /* FIXME - a failed parse should not leave a partially-allocated p * for us to clean up; this could cause callers to leak memory. */ g_assert(p->string == NULL); g_free(p->string); g_free(p); v = visitor_input_test_init(data, "[ '1', '2', false, '3' ]"); visit_type_strList(v, &q, NULL, &err); error_free_or_abort(&err); assert(q); qapi_free_strList(q); }
static void test_visitor_in_wrong_type(TestInputVisitorData *data, const void *unused) { TestStruct *p = NULL; Visitor *v; strList *q = NULL; int64_t i; Error *err = NULL; /* Make sure arrays and structs cannot be confused */ v = visitor_input_test_init(data, "[]"); visit_type_TestStruct(v, &p, NULL, &err); error_free_or_abort(&err); g_assert(!p); v = visitor_input_test_init(data, "{}"); visit_type_strList(v, &q, NULL, &err); error_free_or_abort(&err); assert(!q); /* Make sure primitives and struct cannot be confused */ v = visitor_input_test_init(data, "1"); visit_type_TestStruct(v, &p, NULL, &err); error_free_or_abort(&err); g_assert(!p); v = visitor_input_test_init(data, "{}"); visit_type_int(v, &i, NULL, &err); error_free_or_abort(&err); /* Make sure primitives and arrays cannot be confused */ v = visitor_input_test_init(data, "1"); visit_type_strList(v, &q, NULL, &err); error_free_or_abort(&err); assert(!q); v = visitor_input_test_init(data, "[]"); visit_type_int(v, &i, NULL, &err); error_free_or_abort(&err); }
static void visit_primitive_list(Visitor *v, void **native, Error **errp) { PrimitiveList *pl = *native; switch (pl->type) { case PTYPE_STRING: visit_type_strList(v, NULL, &pl->value.strings, errp); break; case PTYPE_BOOLEAN: visit_type_boolList(v, NULL, &pl->value.booleans, errp); break; case PTYPE_NUMBER: visit_type_numberList(v, NULL, &pl->value.numbers, errp); break; case PTYPE_INTEGER: visit_type_intList(v, NULL, &pl->value.integers, errp); break; case PTYPE_S8: visit_type_int8List(v, NULL, &pl->value.s8_integers, errp); break; case PTYPE_S16: visit_type_int16List(v, NULL, &pl->value.s16_integers, errp); break; case PTYPE_S32: visit_type_int32List(v, NULL, &pl->value.s32_integers, errp); break; case PTYPE_S64: visit_type_int64List(v, NULL, &pl->value.s64_integers, errp); break; case PTYPE_U8: visit_type_uint8List(v, NULL, &pl->value.u8_integers, errp); break; case PTYPE_U16: visit_type_uint16List(v, NULL, &pl->value.u16_integers, errp); break; case PTYPE_U32: visit_type_uint32List(v, NULL, &pl->value.u32_integers, errp); break; case PTYPE_U64: visit_type_uint64List(v, NULL, &pl->value.u64_integers, errp); break; default: g_assert_not_reached(); } }