aboutsummaryrefslogtreecommitdiffstats
path: root/tests/samplebinding/reference_test.py
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2009-10-30 17:11:00 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-10-30 17:11:00 -0300
commit684aa0235c757a614963deaa4337202b1bc6c997 (patch)
tree36c88e67d0ec1471a764aeebfc3a085140752914 /tests/samplebinding/reference_test.py
parent5c190b426be32749bb802c15ef2c980b057af658 (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-xtests/samplebinding/reference_test.py27
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