From 7bc6f1512b1febc026d81917f33b1ea90d23fe24 Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Wed, 2 Jun 2010 07:57:07 -0300 Subject: Fixes code generation for classes with private destructors. This fix is specific for the cases when the "protected hack" is turned off. Also added some tests. --- tests/libsample/privatedtor.h | 3 +++ tests/samplebinding/protected_test.py | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) (limited to 'tests') diff --git a/tests/libsample/privatedtor.h b/tests/libsample/privatedtor.h index 2c206b263..73f7f4d84 100644 --- a/tests/libsample/privatedtor.h +++ b/tests/libsample/privatedtor.h @@ -52,6 +52,9 @@ public: return m_instanciations; } +protected: + int protectedInstanceCalls() { return m_instanciations; } + private: int m_instanciations; diff --git a/tests/samplebinding/protected_test.py b/tests/samplebinding/protected_test.py index efb0bedbf..fa477c42c 100755 --- a/tests/samplebinding/protected_test.py +++ b/tests/samplebinding/protected_test.py @@ -31,6 +31,7 @@ import unittest from sample import ProtectedNonPolymorphic, ProtectedVirtualDestructor from sample import ProtectedPolymorphic, ProtectedPolymorphicDaughter, ProtectedPolymorphicGrandDaughter from sample import ProtectedEnumClass +from sample import PrivateDtor from sample import Point class ExtendedProtectedPolymorphic(ProtectedPolymorphic): @@ -242,6 +243,22 @@ class ProtectedEnumTest(unittest.TestCase): self.assertEqual(obj.callPublicEnumMethod(ProtectedEnumClass.PublicItem1), ProtectedEnumClass.PublicItem0) +class PrivateDtorProtectedMethodTest(unittest.TestCase): + '''Test cases for classes with private destructors and protected methods.''' + + def testProtectedMethod(self): + '''Calls protected method of a class with a private destructor.''' + obj = PrivateDtor.instance() + + self.assertEqual(type(obj), PrivateDtor) + self.assertEqual(obj.instanceCalls(), 1) + self.assertEqual(obj.instanceCalls(), obj.protectedInstanceCalls()) + + obj = PrivateDtor.instance() + self.assertEqual(obj.instanceCalls(), 2) + self.assertEqual(obj.instanceCalls(), obj.protectedInstanceCalls()) + + if __name__ == '__main__': unittest.main() -- cgit v1.2.3