From b5b25328b75ad97836f585f708b60d8fc6bca902 Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Sun, 19 Aug 2018 00:27:21 -0400 Subject: regress: Implement interface and override properties This adds a property to RegressTestInterface which can be overridden, and makes RegressTestSubObj implement it and override the property. This is in order to catch the regressions in GJS around property access. See gjs#193. --- tests/scanner/regress.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) (limited to 'tests/scanner/regress.c') diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index f998a498..6f1c4c3b 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -3228,12 +3228,82 @@ struct _CallbackInfo gpointer user_data; }; +static void +regress_test_sub_obj_iface_init (RegressTestInterfaceIface *iface) +{ +} + +enum { + PROP_TEST_SUB_OBJ_NUMBER = 1, + PROP_TEST_SUB_OBJ_BOOLEAN, +}; + +G_DEFINE_TYPE_WITH_CODE(RegressTestSubObj, regress_test_sub_obj, + REGRESS_TEST_TYPE_OBJ, + G_IMPLEMENT_INTERFACE(REGRESS_TEST_TYPE_INTERFACE, + regress_test_sub_obj_iface_init)); + + +static void +regress_test_sub_obj_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + RegressTestSubObj *self = REGRESS_TEST_SUB_OBJECT (object); -G_DEFINE_TYPE(RegressTestSubObj, regress_test_sub_obj, REGRESS_TEST_TYPE_OBJ); + switch (property_id) + { + case PROP_TEST_SUB_OBJ_NUMBER: + self->number = g_value_get_int (value); + break; + + case PROP_TEST_SUB_OBJ_BOOLEAN: + self->boolean = g_value_get_boolean (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +regress_test_sub_obj_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + RegressTestSubObj *self = REGRESS_TEST_SUB_OBJECT (object); + + switch (property_id) + { + case PROP_TEST_SUB_OBJ_NUMBER: + g_value_set_int (value, self->number); + break; + + case PROP_TEST_SUB_OBJ_BOOLEAN: + g_value_set_boolean (value, self->boolean); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} static void regress_test_sub_obj_class_init (RegressTestSubObjClass *klass) { + const guint flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS; + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + gobject_class->get_property = regress_test_sub_obj_get_property; + gobject_class->set_property = regress_test_sub_obj_set_property; + + g_object_class_install_property (gobject_class, PROP_TEST_SUB_OBJ_BOOLEAN, + g_param_spec_boolean ("boolean", "Boolean", "Boolean", + TRUE, flags)); + + g_object_class_override_property (gobject_class, PROP_TEST_SUB_OBJ_NUMBER, + "number"); } static void @@ -3970,6 +4040,7 @@ G_DEFINE_INTERFACE (RegressTestInterface, regress_test_interface, G_TYPE_OBJECT) static void regress_test_interface_default_init(RegressTestInterfaceIface *iface) { + const guint flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS; static gboolean initialized = FALSE; if (initialized) return; @@ -3984,6 +4055,13 @@ regress_test_interface_default_init(RegressTestInterfaceIface *iface) G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_POINTER); + /** + * RegressTestInterface:number: + */ + g_object_interface_install_property (iface, + g_param_spec_int ("number", "Number", "Number", + 0, 10, 0, flags)); + initialized = TRUE; } -- cgit v1.2.1