summaryrefslogtreecommitdiff
path: root/tests
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
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')
-rw-r--r--tests/scanner/Regress-1.0-C-expected/Regress.TestInterface.page2
-rw-r--r--tests/scanner/Regress-1.0-C-expected/Regress.TestSubObj-boolean.page15
-rw-r--r--tests/scanner/Regress-1.0-Gjs-expected/Regress.TestInterface.page6
-rw-r--r--tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj-boolean.page18
-rw-r--r--tests/scanner/Regress-1.0-Gjs-expected/Regress.TestSubObj.page4
-rw-r--r--tests/scanner/Regress-1.0-Python-expected/Regress.TestInterface.page4
-rw-r--r--tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj-boolean.page18
-rw-r--r--tests/scanner/Regress-1.0-Python-expected/Regress.TestSubObj.page2
-rw-r--r--tests/scanner/Regress-1.0-expected.gir19
-rw-r--r--tests/scanner/regress.c80
-rw-r--r--tests/scanner/regress.h3
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