diff options
author | Philip Chimento <philip.chimento@gmail.com> | 2018-08-19 00:27:21 -0400 |
---|---|---|
committer | Philip Chimento <philip.chimento@gmail.com> | 2018-11-07 22:43:06 -0500 |
commit | b5b25328b75ad97836f585f708b60d8fc6bca902 (patch) | |
tree | 4554f2f6f6c55cf1e366eec832af2f644a2d32c8 /tests | |
parent | 581f74be8e4919ac7dd4bec036eeda7605f425d7 (diff) | |
download | gobject-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')
11 files changed, 163 insertions, 8 deletions
diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.TestInterface.page b/tests/scanner/Regress-1.0-C-expected/Regress.TestInterface.page index 19e45215..2d72b94a 100644 --- a/tests/scanner/Regress-1.0-C-expected/Regress.TestInterface.page +++ b/tests/scanner/Regress-1.0-C-expected/Regress.TestInterface.page @@ -17,7 +17,7 @@ </synopsis> <synopsis> <title>Known Implementations</title> - <p>None</p> + <p>TestInterface is implemented by TestSubObj</p> </synopsis> <links type="topic" ui:expanded="true" api:type="function" api:mime="text/x-csrc" diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.TestSubObj-boolean.page b/tests/scanner/Regress-1.0-C-expected/Regress.TestSubObj-boolean.page new file mode 100644 index 00000000..223c3e92 --- /dev/null +++ b/tests/scanner/Regress-1.0-C-expected/Regress.TestSubObj-boolean.page @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<page id="Regress.TestSubObj-boolean" + type="topic" + style="property" + xmlns="http://projectmallard.org/1.0/" + xmlns:api="http://projectmallard.org/experimental/api/" + xmlns:ui="http://projectmallard.org/1.0/ui/"> + <info> + <link xref="Regress.TestSubObj" group="property" type="guide"/> + <title type="link" role="topic">boolean</title> + </info> + <title>Regress.TestSubObj:boolean</title> + + +</page> diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestInterface.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestInterface.page index 5fb58df4..de94a5c0 100644 --- a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestInterface.page +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestInterface.page @@ -12,7 +12,9 @@ <synopsis><code> const Regress = imports.gi.Regress; -let test_interface = new Regress.TestInterface(); +let test_interface = new Regress.TestInterface({ + <link xref='Regress.TestInterface-number'>number</link>: value, +}); </code></synopsis> @@ -22,7 +24,7 @@ let test_interface = new Regress.TestInterface(); </synopsis> <synopsis> <title>Known Implementations</title> - <p>None</p> + <p>TestInterface is implemented by TestSubObj</p> </synopsis> <links type="topic" ui:expanded="true" api:type="function" api:mime="text/x-gjs" diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj-boolean.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj-boolean.page new file mode 100644 index 00000000..b2be61b0 --- /dev/null +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj-boolean.page @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<page id="Regress.TestSubObj-boolean" + type="topic" + style="property" + xmlns="http://projectmallard.org/1.0/" + xmlns:api="http://projectmallard.org/experimental/api/" + xmlns:ui="http://projectmallard.org/1.0/ui/"> + <info> + <link xref="Regress.TestSubObj" group="property" type="guide"/> + <title type="link" role="topic">boolean</title> + </info> + <title>Regress.TestSubObj.boolean</title> + <synopsis><code mime="text/x-gjs"> +TestSubObj.boolean: Boolean (Read / Write / Construct) + </code></synopsis> + + +</page> diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj.page index d9f0885e..b69022bd 100644 --- a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj.page +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj.page @@ -12,7 +12,9 @@ <synopsis><code> const Regress = imports.gi.Regress; -let testSubObj = new Regress.TestSubObj(); +let testSubObj = new Regress.TestSubObj({ + <link xref='Regress.TestSubObj-boolean'>boolean</link>: value, +}); </code></synopsis> diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.TestInterface.page b/tests/scanner/Regress-1.0-Python-expected/Regress.TestInterface.page index 7fb4c88c..be09d3ad 100644 --- a/tests/scanner/Regress-1.0-Python-expected/Regress.TestInterface.page +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.TestInterface.page @@ -12,7 +12,7 @@ <synopsis><code> from gi.repository import Regress -test_interface = Regress.TestInterface() </code></synopsis> +test_interface = Regress.TestInterface(<link xref='Regress.TestInterface-number'>number</link>=value) </code></synopsis> <synopsis> @@ -21,7 +21,7 @@ test_interface = Regress.TestInterface() </code></synopsis> </synopsis> <synopsis> <title>Known Implementations</title> - <p>None</p> + <p>TestInterface is implemented by TestSubObj</p> </synopsis> <links type="topic" ui:expanded="true" api:type="function" api:mime="text/python" diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj-boolean.page b/tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj-boolean.page new file mode 100644 index 00000000..52071310 --- /dev/null +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj-boolean.page @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<page id="Regress.TestSubObj-boolean" + type="topic" + style="property" + xmlns="http://projectmallard.org/1.0/" + xmlns:api="http://projectmallard.org/experimental/api/" + xmlns:ui="http://projectmallard.org/1.0/ui/"> + <info> + <link xref="Regress.TestSubObj" group="property" type="guide"/> + <title type="link" role="topic">boolean</title> + </info> + <title>Regress.TestSubObj:boolean</title> + <synopsis><code mime="text/x-python"> +"boolean" bool : Read / Write / Construct + </code></synopsis> + + +</page> diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj.page b/tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj.page index da1c0db4..e5b3a135 100644 --- a/tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj.page +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj.page @@ -12,7 +12,7 @@ <synopsis><code> from gi.repository import Regress -test_sub_obj = Regress.TestSubObj() +test_sub_obj = Regress.TestSubObj(<link xref='Regress.TestSubObj-boolean'>boolean</link>=value) </code></synopsis> diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 923e4725..2b4962ff 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -2919,6 +2919,12 @@ use it should be.</doc> </instance-parameter> </parameters> </method> + <property name="number" + writable="1" + construct="1" + transfer-ownership="none"> + <type name="gint" c:type="gint"/> + </property> <glib:signal name="interface-signal" when="last"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -4318,6 +4324,7 @@ the introspection client langage.</doc> glib:type-name="RegressTestSubObj" glib:get-type="regress_test_sub_obj_get_type" glib:type-struct="TestSubObjClass"> + <implements name="TestInterface"/> <constructor name="new" c:identifier="regress_test_sub_obj_new"> <return-value transfer-ownership="full"> <type name="TestObj" c:type="RegressTestObj*"/> @@ -4344,9 +4351,21 @@ the introspection client langage.</doc> </instance-parameter> </parameters> </method> + <property name="boolean" + writable="1" + construct="1" + transfer-ownership="none"> + <type name="gboolean" c:type="gboolean"/> + </property> <field name="parent_instance"> <type name="TestObj" c:type="RegressTestObj"/> </field> + <field name="number" readable="0" private="1"> + <type name="gint" c:type="gint"/> + </field> + <field name="boolean" readable="0" private="1"> + <type name="gboolean" c:type="gboolean"/> + </field> </class> <record name="TestSubObjClass" c:type="RegressTestSubObjClass" 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; } diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h index f0885f2b..167a71d9 100644 --- a/tests/scanner/regress.h +++ b/tests/scanner/regress.h @@ -968,6 +968,9 @@ typedef struct _RegressTestSubObjClass RegressTestSubObjClass; struct _RegressTestSubObj { RegressTestObj parent_instance; + /*< private >*/ + gint number; + gboolean boolean; }; struct _RegressTestSubObjClass |