From 076ba3156c13375a75983cef7a409c8c8afea119 Mon Sep 17 00:00:00 2001 From: Simon van der Linden Date: Thu, 26 Nov 2009 23:50:54 +0100 Subject: Fix members initialization in metaclasses In metaclasses, the test for the name of the class was wrong, since it prevented one to create a subclass with the same name (especially annoying for overrides). Now, if a GType is available from the info, the fact that it doesn't have any wrapper yet means that the metaclass is creating the base class, which will be registerd just after its creation. This is true for objects, and for structures registered as boxed or pointer too. This patch includes a test for basic subclassing in Python. It notably tests that methods don't get overridden by the metaclass. --- tests/test_gi.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'tests') diff --git a/tests/test_gi.py b/tests/test_gi.py index e8654b6..2d9c002 100644 --- a/tests/test_gi.py +++ b/tests/test_gi.py @@ -1422,6 +1422,25 @@ class TestGObject(unittest.TestCase): # self.assertEquals(object_.__grefcount__, 1) +class TestPythonGObject(unittest.TestCase): + + class Object(TestGI.Object): + __gtype_name__ = "Object" + + def method(self): + # Don't call super, which asserts that self.int == 42. + pass + + def test_object(self): + self.assertTrue(issubclass(self.Object, TestGI.Object)) + + object_ = self.Object(int = 42) + self.assertTrue(isinstance(object_, self.Object)) + + def test_object_method(self): + self.Object(int = 0).method() + + class TestMultiOutputArgs(unittest.TestCase): def test_int_out_out(self): -- cgit