diff options
-rw-r--r-- | gi/types.py | 5 | ||||
-rw-r--r-- | tests/test_gi.py | 19 |
2 files changed, 22 insertions, 2 deletions
diff --git a/gi/types.py b/gi/types.py index e32bb72..87dbe16 100644 --- a/gi/types.py +++ b/gi/types.py @@ -116,7 +116,7 @@ class GObjectMeta(gobject.GObjectMeta, MetaClassHelper): super(GObjectMeta, cls).__init__(name, bases, dict_) # Avoid touching anything else than the base class. - if cls.__name__ != cls.__info__.get_name(): + if cls.__info__.get_g_type().pytype is not None: return; cls._setup_methods() @@ -157,7 +157,8 @@ class StructMeta(type, MetaClassHelper): super(StructMeta, cls).__init__(name, bases, dict_) # Avoid touching anything else than the base class. - if cls.__name__ != cls.__info__.get_name(): + g_type = cls.__info__.get_g_type() + if g_type != gobject.TYPE_INVALID and g_type.pytype is not None: return; cls._setup_fields() 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): |