On Thu, Jul 11, 2013 at 08:48:44AM +0200, Igor Mammedov wrote: [...] > > #define TYPE_STATIC_PROPS "static_prop_type" > > @@ -80,7 +82,7 @@ static void test_static_prop(void) > > static void test_static_globalprop(void) > > { > > MyType *mt; > > - GlobalProperty props[] = { > > + static GlobalProperty props[] = { > > {TYPE_STATIC_PROPS, "prop1", "200"}, > > {} > > }; > hunk belongs to the 1st patch?
Yes, thanks for noticing. > > > @@ -93,15 +95,82 @@ static void test_static_globalprop(void) > > g_assert_cmpuint(mt->prop2, ==, PROP_DEFAULT); > > } > > > > +#define TYPE_DYNAMIC_PROPS "dynamic_prop_type" > > +#define DYNAMIC_TYPE(obj) \ > > + OBJECT_CHECK(MyType, (obj), TYPE_DYNAMIC_PROPS) > > + > > +static void prop1_acessor(Object *obj, > > + struct Visitor *v, > > + void *opaque, > > + const char *name, > > + struct Error **errp) > > +{ > > + MyType *mt = DYNAMIC_TYPE(obj); > > + visit_type_uint32(v, &mt->prop1, name, errp); > > +} > > + > > +static void prop2_acessor(Object *obj, > > + struct Visitor *v, > > + void *opaque, > > + const char *name, > > + struct Error **errp) > > +{ > > + MyType *mt = DYNAMIC_TYPE(obj); > > + visit_type_uint32(v, &mt->prop2, name, errp); > > +} > > + > > +static void dynamic_instance_init(Object *obj) > > +{ > > + object_property_add(obj, "prop1", "uint32", prop1_acessor, > > prop1_acessor, > > + NULL, NULL, NULL); > > + object_property_add(obj, "prop2", "uint32", prop2_acessor, > > prop2_acessor, > > + NULL, NULL, NULL); > > +} > > + > > +static void dynamic_class_init(ObjectClass *klass, void *data) > > +{ > > + DeviceClass *dc = DEVICE_CLASS(klass); > > + dc->init = mytype_init; > > +} > > + > > + > > +static TypeInfo dynamic_prop_type = { > > + .name = TYPE_DYNAMIC_PROPS, > > + .parent = TYPE_DEVICE, > > + .instance_size = sizeof(MyType), > > + .instance_init = dynamic_instance_init, > > + .class_init = dynamic_class_init, > > +}; > > + > > +/* Test setting of static property using global properties */ > > +static void test_dynamic_globalprop(void) > > +{ > > + MyType *mt; > > + static GlobalProperty props[] = { > > + {TYPE_DYNAMIC_PROPS, "prop1", "101"}, > > + {TYPE_DYNAMIC_PROPS, "prop2", "102"}, > > + {} > > + }; > this list cloud be the same for static and dynamic tests, no need to duplicate > > and perhaps one property is enough, like it's done for static one? I don't know. I like the fact that both test cases are exercising the property-setting API in different ways and are likely to catch different types of bugs. > > > > + qdev_prop_register_global_list(props); > > + > > + mt = DYNAMIC_TYPE(object_new(TYPE_DYNAMIC_PROPS)); > > + qdev_init_nofail(DEVICE(mt)); > > + > > + g_assert_cmpuint(mt->prop1, ==, 101); > > + g_assert_cmpuint(mt->prop2, ==, 102); > > +} > > + > > int main(int argc, char **argv) > > { > > module_call_init(MODULE_INIT_QOM); > > type_register_static(&static_prop_type); > > + type_register_static(&dynamic_prop_type); > > > > g_test_init(&argc, &argv, NULL); > > > > g_test_add_func("/qdev/properties/static/default", test_static_prop); > > g_test_add_func("/qdev/properties/static/global", > > test_static_globalprop); > > + g_test_add_func("/qdev/properties/dynamic/global", > > test_dynamic_globalprop); > > > > g_test_run(); > > > -- Eduardo