diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-08-27 01:01:06 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-08-27 01:01:06 -0300 |
commit | 5ba896641df413f496e634ff5953c4d516157173 (patch) | |
tree | 267486511cc45f0b71c31f4cacf847c3e882bb39 /tests | |
parent | 93d0d9b5e3178efb8e78fb1ec2c7a2b4ede02972 (diff) |
updated sample library Reference class and unit tests with cases
of virtual methods that receive C++ references
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libsample/reference.cpp | 24 | ||||
-rw-r--r-- | tests/libsample/reference.h | 6 | ||||
-rwxr-xr-x | tests/samplebinding/reference_test.py | 33 |
3 files changed, 63 insertions, 0 deletions
diff --git a/tests/libsample/reference.cpp b/tests/libsample/reference.cpp index fb3e78e49..6f1b51578 100644 --- a/tests/libsample/reference.cpp +++ b/tests/libsample/reference.cpp @@ -9,3 +9,27 @@ Reference::show() const cout << "Reference.objId: " << m_objId; } +int +Reference::usesReferenceVirtual(Reference& r, int inc) +{ + return r.m_objId + inc; +} + +int +Reference::usesConstReferenceVirtual(const Reference& r, int inc) +{ + return r.m_objId + inc; +} + +int +Reference::callUsesReferenceVirtual(Reference& r, int inc) +{ + return usesReferenceVirtual(r, inc); +} + +int +Reference::callUsesConstReferenceVirtual(const Reference& r, int inc) +{ + return usesConstReferenceVirtual(r, inc); +} + diff --git a/tests/libsample/reference.h b/tests/libsample/reference.h index bafd2492a..3fad0e084 100644 --- a/tests/libsample/reference.h +++ b/tests/libsample/reference.h @@ -14,6 +14,12 @@ public: static int usesReference(Reference& r) { return r.m_objId; } static int usesConstReference(const Reference& r) { return r.m_objId; } + virtual int usesReferenceVirtual(Reference& r, int inc); + virtual int usesConstReferenceVirtual(const Reference& r, int inc); + + int callUsesReferenceVirtual(Reference& r, int inc); + int callUsesConstReferenceVirtual(const Reference& r, int inc); + void show() const; private: diff --git a/tests/samplebinding/reference_test.py b/tests/samplebinding/reference_test.py index ed4c5cbc8..28e6feba4 100755 --- a/tests/samplebinding/reference_test.py +++ b/tests/samplebinding/reference_test.py @@ -7,6 +7,22 @@ import unittest from sample import Reference +class ExtendedReference(Reference): + def __init__(self): + Reference.__init__(self) + self.uses_reference_virtual_called = False + self.uses_const_reference_virtual_called = False + self.reference_inc = 1 + self.const_reference_inc = 2 + + def usesReferenceVirtual(self, ref, inc): + self.uses_reference_virtual_called = True + return ref.objId() + inc + self.reference_inc + + def usesConstReferenceVirtual(self, ref, inc): + self.uses_const_reference_virtual_called = True + return ref.objId() + inc + self.const_reference_inc + class ReferenceTest(unittest.TestCase): '''Test case for methods that receive references to objects.''' @@ -22,6 +38,23 @@ class ReferenceTest(unittest.TestCase): r = Reference(objId) self.assertEqual(Reference.usesConstReference(r), objId) + def testReimplementedVirtualMethodCallWithReferenceParameter(self): + '''Test if a Python override of a virtual method with a reference parameter is correctly called from C++.''' + inc = 9 + objId = 123 + r = Reference(objId) + er = ExtendedReference() + result = er.callUsesReferenceVirtual(r, inc) + self.assertEqual(result, objId + inc + er.reference_inc) + + def testReimplementedVirtualMethodCallWithConstReferenceParameter(self): + '''Test if a Python override of a virtual method with a const reference parameter is correctly called from C++.''' + inc = 9 + objId = 123 + r = Reference(objId) + er = ExtendedReference() + result = er.callUsesConstReferenceVirtual(r, inc) + self.assertEqual(result, objId + inc + er.const_reference_inc) if __name__ == '__main__': unittest.main() |