END_TEST START_TEST(test_dynamic_type) { qeocore_type_t *structure = NULL, *sequence = NULL, *string = NULL, *primitive = NULL; qeocore_member_id_t id; /* init */ stub_init(); /* test */ fail_unless(NULL != (structure = qeocore_type_struct_new("a_dynamic_struct"))); fail_unless(NULL != (string = qeocore_type_string_new(0))); fail_unless(NULL != (primitive = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT32))); fail_unless(NULL != (sequence = qeocore_type_sequence_new(primitive))); qeocore_type_free(primitive); id = QEOCORE_MEMBER_ID_DEFAULT; fail_unless(QEO_OK == qeocore_type_struct_add(structure, string, "a_string", &id, QEOCORE_FLAG_KEY)); qeocore_type_free(string); id = QEOCORE_MEMBER_ID_DEFAULT; fail_unless(QEO_OK == qeocore_type_struct_add(structure, sequence, "a_sequence", &id, QEOCORE_FLAG_NONE)); qeocore_type_free(sequence); /* clean up */ qeocore_type_free(structure); stub_fini(); }
static qeocore_type_t *type_unnest_register(qeo_factory_t *factory) { qeocore_type_t *outer = NULL; qeocore_type_t *member = NULL; // the outer struct assert(NULL != (outer = qeocore_type_struct_new("org.qeo.test.NestedTests"))); assert(NULL != (member = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT32))); assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_int32", &_outer_int32_id, QEOCORE_FLAG_KEY)); qeocore_type_free(member); assert(NULL != (member = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT8))); assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_int8", &_outer_int8_id, QEOCORE_FLAG_NONE)); qeocore_type_free(member); assert(NULL != (member = qeocore_type_string_new(0))); assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_string", &_outer_string_id, QEOCORE_FLAG_NONE)); qeocore_type_free(member); assert(NULL != (member = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT16))); assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_int16", &_outer_int16_id, QEOCORE_FLAG_NONE)); qeocore_type_free(member); assert(NULL != (member = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT64))); assert(QEO_OK == qeocore_type_struct_add(outer, member, "outer_int64", &_outer_int64_id, QEOCORE_FLAG_NONE)); qeocore_type_free(member); assert(QEO_OK == qeocore_type_register(factory, outer, "org.qeo.test.QDMTestDynType")); return outer; }
static qeocore_type_t *type_register(qeo_factory_t *factory) { qeocore_type_t *bigdata = NULL; qeocore_type_t *primitive = NULL; qeocore_type_t *sequence = NULL; assert(NULL != (bigdata = qeocore_type_struct_new("org.qeo.test.bigdata"))); assert(NULL != (primitive = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT32))); assert(QEO_OK == qeocore_type_struct_add(bigdata, primitive, "size", &_size_id, QEOCORE_FLAG_KEY)); qeocore_type_free(primitive); assert(NULL != (primitive = qeocore_type_primitive_new(QEOCORE_TYPECODE_INT8))); assert(NULL != (sequence = qeocore_type_sequence_new(primitive))); assert(QEO_OK == qeocore_type_struct_add(bigdata, sequence, "buf", &_buf_id, QEOCORE_FLAG_NONE)); qeocore_type_free(sequence); qeocore_type_free(primitive); assert(QEO_OK == qeocore_type_register(factory, bigdata, "org.qeo.test.bigdata")); return bigdata; }
static qeo_retcode_t object_add_member(const qeo_factory_t *factory, qeocore_type_t *type, const char *member_name, json_t *member) { qeo_retcode_t result = QEO_EFAIL; qeocore_type_t *qeoType = NULL; qeocore_member_id_t qeo_member_id = QEOCORE_MEMBER_ID_DEFAULT; json_t *member_key = json_object_get(member, KEY_KEY); // optional => BOOLEAN json_t *member_id = json_object_get(member, KEY_ID); // optional => INTxx assert(factory != NULL); if (((NULL != member_key) && !json_is_boolean(member_key)) || ((NULL != member_id) && !json_is_integer(member_id)) || (NULL == member_name)) { // syntax error return QEO_EINVAL; } qeo_log_d("Processing %s", member_name); qeoType = build_member_type(factory, member); if (NULL == qeoType) { qeo_log_e("Could not build member_type"); return result; } bool is_key = (member_key && json_is_true(member_key)); do { result = qeocore_type_struct_add(type, // container qeoType, // new member to add member_name, // name of member &qeo_member_id, // member id is_key ? QEOCORE_FLAG_KEY : 0); // flag if (QEO_OK != result) { qeo_log_e("qeocore_type_struct_add failed for member %s", member_name); break; } qeocore_type_free(qeoType); // Modify the json member to add/update the qeo member id json_object_set_new(member, KEY_ID, json_integer(qeo_member_id)); } while (0); return result; }