diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libtestgi.c | 105 | ||||
-rw-r--r-- | tests/libtestgi.h | 49 | ||||
-rw-r--r-- | tests/test_gi.py | 36 |
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)) |