summaryrefslogtreecommitdiff
path: root/tests/scanner/regress.c
diff options
context:
space:
mode:
authorPhilip Chimento <philip.chimento@gmail.com>2018-08-19 00:27:21 -0400
committerPhilip Chimento <philip.chimento@gmail.com>2018-11-07 22:43:06 -0500
commitb5b25328b75ad97836f585f708b60d8fc6bca902 (patch)
tree4554f2f6f6c55cf1e366eec832af2f644a2d32c8 /tests/scanner/regress.c
parent581f74be8e4919ac7dd4bec036eeda7605f425d7 (diff)
downloadgobject-introspection-b5b25328b75ad97836f585f708b60d8fc6bca902.tar.gz
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.
Diffstat (limited to 'tests/scanner/regress.c')
-rw-r--r--tests/scanner/regress.c80
1 files changed, 79 insertions, 1 deletions
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;
}