diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-10-30 17:11:00 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-10-30 17:11:00 -0300 |
commit | 684aa0235c757a614963deaa4337202b1bc6c997 (patch) | |
tree | 36c88e67d0ec1471a764aeebfc3a085140752914 /tests/samplebinding/reference_test.py | |
parent | 5c190b426be32749bb802c15ef2c980b057af658 (diff) |
added new test cases to check if a value-type object passed as reference to
regular, virtual and reimplemented virtual methods are being altered in place
Diffstat (limited to 'tests/samplebinding/reference_test.py')
-rwxr-xr-x | tests/samplebinding/reference_test.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/samplebinding/reference_test.py b/tests/samplebinding/reference_test.py index af1adee89..4157b3425 100755 --- a/tests/samplebinding/reference_test.py +++ b/tests/samplebinding/reference_test.py @@ -38,6 +38,7 @@ class ExtendedReference(Reference): self.uses_const_reference_virtual_called = False self.reference_inc = 1 self.const_reference_inc = 2 + self.multiplier = 333 def usesReferenceVirtual(self, ref, inc): self.uses_reference_virtual_called = True @@ -47,6 +48,10 @@ class ExtendedReference(Reference): self.uses_const_reference_virtual_called = True return ref.objId() + inc + self.const_reference_inc + def alterReferenceIdVirtual(self, ref): + ref.setObjId(ref.objId() * self.multiplier) + + class ReferenceTest(unittest.TestCase): '''Test case for methods that receive references to objects.''' @@ -62,6 +67,28 @@ class ReferenceTest(unittest.TestCase): r = Reference(objId) self.assertEqual(Reference.usesConstReference(r), objId) + def testModificationOfReference(self): + '''Tests if the identity of a reference argument is preserved when passing it to be altered in C++.''' + objId = 123 + r1 = Reference(objId) + r1.alterReferenceIdVirtual(r1) + self.assertEqual(r1.objId(), objId * Reference.multiplier()) + + def testModificationOfReferenceCallingAVirtualIndirectly(self): + '''Tests if the identity of a reference argument is preserved when passing it to be altered in C++ through a method that calls a virtual method.''' + objId = 123 + r1 = Reference(objId) + r1.callAlterReferenceIdVirtual(r1) + self.assertEqual(r1.objId(), objId * Reference.multiplier()) + + def testModificationOfReferenceCallingAReimplementedVirtualIndirectly(self): + '''Test if a Python override of a virtual method with a reference parameter called from C++ alters the argument properly.''' + objId = 123 + r = Reference(objId) + er = ExtendedReference() + result = er.callAlterReferenceIdVirtual(r) + self.assertEqual(r.objId(), objId * er.multiplier) + def testReimplementedVirtualMethodCallWithReferenceParameter(self): '''Test if a Python override of a virtual method with a reference parameter is correctly called from C++.''' inc = 9 |