summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/libtestgi.c105
-rw-r--r--tests/libtestgi.h49
-rw-r--r--tests/test_gi.py36
3 files changed, 190 insertions, 0 deletions
diff --git a/tests/libtestgi.c b/tests/libtestgi.c
index a8a77a5..c3899a6 100644
--- a/tests/libtestgi.c
+++ b/tests/libtestgi.c
@@ -3477,3 +3477,108 @@ test_gi_int_return_ptr_null (void)
return NULL;
}
+
+TestGIOverridesStruct *
+test_gi_overrides_struct_copy (TestGIOverridesStruct *struct_)
+{
+ TestGIOverridesStruct *new_struct;
+
+ new_struct = g_slice_new (TestGIOverridesStruct);
+
+ *new_struct = *struct_;
+
+ return new_struct;
+}
+
+static void
+test_gi_overrides_struct_free (TestGIOverridesStruct *struct_)
+{
+ g_slice_free (TestGIOverridesStruct, struct_);
+}
+
+GType
+test_gi_overrides_struct_get_type (void)
+{
+ static GType type = 0;
+
+ if (type == 0) {
+ type = g_boxed_type_register_static ("TestGIOverridesStruct",
+ (GBoxedCopyFunc) test_gi_overrides_struct_copy,
+ (GBoxedFreeFunc) test_gi_overrides_struct_free);
+ }
+
+ return type;
+}
+
+TestGIOverridesStruct *
+test_gi_overrides_struct_new (void)
+{
+ return g_slice_new (TestGIOverridesStruct);
+}
+
+glong
+test_gi_overrides_struct_method (TestGIOverridesStruct *struct_)
+{
+ return 42;
+}
+
+
+/**
+ * test_gi__overrides_struct_return:
+ *
+ * Returns: (transfer full):
+ */
+TestGIOverridesStruct *
+test_gi__overrides_struct_return (void)
+{
+ return test_gi_overrides_struct_new();
+}
+
+
+G_DEFINE_TYPE (TestGIOverridesObject, test_gi_overrides_object, G_TYPE_OBJECT);
+
+static void
+test_gi_overrides_object_init (TestGIOverridesObject *object)
+{
+}
+
+static void
+test_gi_overrides_object_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (test_gi_overrides_object_parent_class)->finalize (object);
+}
+
+static void
+test_gi_overrides_object_class_init (TestGIOverridesObjectClass *klass)
+{
+ GObjectClass* object_class = G_OBJECT_CLASS (klass);
+#if 0
+ GObjectClass* parent_class = G_OBJECT_CLASS (klass);
+#endif
+
+ object_class->finalize = test_gi_overrides_object_finalize;
+}
+
+TestGIOverridesObject *
+test_gi_overrides_object_new (void)
+{
+ return g_object_new (TESTGI_TYPE_OVERRIDES_OBJECT, NULL);
+}
+
+glong
+test_gi_overrides_object_method (TestGIOverridesObject *object)
+{
+ return 42;
+}
+
+
+/**
+ * test_gi__overrides_object_return:
+ *
+ * Returns: (transfer full):
+ */
+TestGIOverridesObject *
+test_gi__overrides_object_return (void)
+{
+ return g_object_new (TESTGI_TYPE_OVERRIDES_OBJECT, NULL);
+}
diff --git a/tests/libtestgi.h b/tests/libtestgi.h
index 1620096..970d01b 100644
--- a/tests/libtestgi.h
+++ b/tests/libtestgi.h
@@ -662,4 +662,53 @@ gint *test_gi_int_return_ptr_null (void);
void test_gi_int_in_ptr_null (gint *int_);
+/* Overrides */
+
+#define TESTGI_OVERRIDES_CONSTANT 42
+
+
+typedef struct {
+ glong long_;
+} TestGIOverridesStruct;
+
+GType test_gi_overrides_struct_get_type (void) G_GNUC_CONST;
+
+TestGIOverridesStruct *test_gi_overrides_struct_new (void);
+
+glong test_gi_overrides_struct_method (TestGIOverridesStruct *struct_);
+
+TestGIOverridesStruct *test_gi__overrides_struct_return (void);
+
+
+#define TESTGI_TYPE_OVERRIDES_OBJECT (test_gi_overrides_object_get_type ())
+#define TESTGI_OVERRIDES_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TESTGI_TYPE_OVERRIDES_OBJECT, TestGIOverridesObject))
+#define TESTGI_OVERRIDES_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TESTGI_TYPE_OVERRIDES_OBJECT, TestGIOverridesObjectClass))
+#define TESTGI_IS_OVERRIDES_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TESTGI_TYPE_OVERRIDES_OBJECT))
+#define TESTGI_IS_OVERRIDES_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TESTGI_TYPE_OVERRIDES_OBJECT))
+#define TESTGI_OVERRIDES_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TESTGI_TYPE_OVERRIDES_OBJECT, TestGIOverridesObjectClass))
+
+typedef struct _TestGIOverridesObjectClass TestGIOverridesObjectClass;
+typedef struct _TestGIOverridesObject TestGIOverridesObject;
+
+struct _TestGIOverridesObjectClass
+{
+ GObjectClass parent_class;
+};
+
+struct _TestGIOverridesObject
+{
+ GObject parent_instance;
+
+ glong long_;
+};
+
+GType test_gi_overrides_object_get_type (void) G_GNUC_CONST;
+
+TestGIOverridesObject *test_gi_overrides_object_new (void);
+
+glong test_gi_overrides_object_method (TestGIOverridesObject *object);
+
+
+TestGIOverridesObject *test_gi__overrides_object_return (void);
+
#endif /* __TEST_GI_H__ */
diff --git a/tests/test_gi.py b/tests/test_gi.py
index 2cbb2eb..0d97915 100644
--- a/tests/test_gi.py
+++ b/tests/test_gi.py
@@ -1500,3 +1500,39 @@ class TestInterfaces(unittest.TestCase):
instance = TestInterfaceImpl()
self.assertTrue(isinstance(instance, TestGI.Interface))
+
+class TestOverrides(unittest.TestCase):
+
+ def test_constant(self):
+ self.assertEquals(TestGI.OVERRIDES_CONSTANT, 7)
+
+ def test_struct(self):
+ # Test that the constructor has been overridden.
+ struct = TestGI.OverridesStruct(42)
+
+ # Test that the method has been overridden.
+ self.assertEquals(6, struct.method())
+
+ del struct
+
+ # Test that the overrides wrapper has been registered.
+ struct = TestGI.overrides_struct_return()
+
+ self.assertTrue(isinstance(struct, TestGI.OverridesStruct))
+
+ del struct
+
+ def test_struct(self):
+ # Test that the constructor has been overridden.
+ object_ = TestGI.OverridesObject(42)
+
+ # Test that the alternate constructor has been overridden.
+ object_ = TestGI.OverridesObject.new(42)
+
+ # Test that the method has been overridden.
+ self.assertEquals(6, object_.method())
+
+ # Test that the overrides wrapper has been registered.
+ object_ = TestGI.overrides_object_return()
+
+ self.assertTrue(isinstance(object_, TestGI.OverridesObject))