diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-08-27 02:48:03 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-08-27 02:48:03 -0300 |
commit | 39dd735c9486a5808e26a4f07e19522cc904ddd9 (patch) | |
tree | 4717cba945fa41a30d563932a8e327ec58395100 /tests | |
parent | 560cd5ba22479d4b5067c171838a46a4e559e886 (diff) |
updated sample library with VirtualMethods class which contains
a case of a virtual method that is reimplemented in Python and
checked in the unit test
Reference class and unit tests with cases
of virtual methods that receive C++ references
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libsample/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/libsample/virtualmethods.cpp | 9 | ||||
-rw-r--r-- | tests/libsample/virtualmethods.h | 21 | ||||
-rw-r--r-- | tests/samplebinding/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/samplebinding/global.h | 1 | ||||
-rw-r--r-- | tests/samplebinding/typesystem_sample.xml | 1 | ||||
-rwxr-xr-x | tests/samplebinding/virtualmethods_test.py | 36 |
7 files changed, 70 insertions, 0 deletions
diff --git a/tests/libsample/CMakeLists.txt b/tests/libsample/CMakeLists.txt index 83c480776..0fe198ead 100644 --- a/tests/libsample/CMakeLists.txt +++ b/tests/libsample/CMakeLists.txt @@ -15,6 +15,7 @@ point.cpp reference.cpp samplenamespace.cpp size.cpp +virtualmethods.cpp ) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/tests/libsample/virtualmethods.cpp b/tests/libsample/virtualmethods.cpp new file mode 100644 index 000000000..a6df98d3b --- /dev/null +++ b/tests/libsample/virtualmethods.cpp @@ -0,0 +1,9 @@ +#include <string.h> +#include "virtualmethods.h" + +double +VirtualMethods::virtualMethod0(Point pt, int val, Complex cpx, bool b) +{ + return (pt.x() * pt.y() * val) + cpx.imag() + ((int) b); +} + diff --git a/tests/libsample/virtualmethods.h b/tests/libsample/virtualmethods.h new file mode 100644 index 000000000..49c12e6ed --- /dev/null +++ b/tests/libsample/virtualmethods.h @@ -0,0 +1,21 @@ +#ifndef VIRTUALMETHODS_H +#define VIRTUALMETHODS_H + +#include "point.h" +#include "complex.h" + +class VirtualMethods +{ +public: + VirtualMethods() {} + ~VirtualMethods() {} + + virtual double virtualMethod0(Point pt, int val, Complex cpx, bool b); + double callVirtualMethod0(Point pt, int val, Complex cpx, bool b) + { + return virtualMethod0(pt, val, cpx, b); + } +}; + +#endif // VIRTUALMETHODS_H + diff --git a/tests/samplebinding/CMakeLists.txt b/tests/samplebinding/CMakeLists.txt index cce45243d..f0c04188e 100644 --- a/tests/samplebinding/CMakeLists.txt +++ b/tests/samplebinding/CMakeLists.txt @@ -18,6 +18,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/sample/reference_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/sample_module_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/samplenamespace_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/sample/size_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/virtualmethods_wrapper.cpp ) add_custom_command(OUTPUT ${sample_SRC} diff --git a/tests/samplebinding/global.h b/tests/samplebinding/global.h index 57c13c27e..98fdd2144 100644 --- a/tests/samplebinding/global.h +++ b/tests/samplebinding/global.h @@ -12,4 +12,5 @@ #include "modifications.h" #include "implicitconv.h" #include "reference.h" +#include "virtualmethods.h" diff --git a/tests/samplebinding/typesystem_sample.xml b/tests/samplebinding/typesystem_sample.xml index b091373cc..071b2ea42 100644 --- a/tests/samplebinding/typesystem_sample.xml +++ b/tests/samplebinding/typesystem_sample.xml @@ -199,6 +199,7 @@ </object-type> <value-type name="Reference"/> + <value-type name="VirtualMethods"/> <value-type name="ImplicitConv"/> diff --git a/tests/samplebinding/virtualmethods_test.py b/tests/samplebinding/virtualmethods_test.py new file mode 100755 index 000000000..89ca83c8d --- /dev/null +++ b/tests/samplebinding/virtualmethods_test.py @@ -0,0 +1,36 @@ +#!/usr/bin/python + +'''Test cases for virtual methods.''' + +import sys +import unittest + +from sample import VirtualMethods, Point + +class ExtendedVirtualMethods(VirtualMethods): + def __init__(self): + VirtualMethods.__init__(self) + self.virtual_method0_called = False + + def virtualMethod0(self, pt, val, cpx, b): + self.virtual_method0_called = True + return VirtualMethods.virtualMethod0(self, pt, val, cpx, b) * -1.0 + +class VirtualMethodsTest(unittest.TestCase): + '''Test case for virtual methods''' + + def testReimplementedVirtualMethod0(self): + '''Test Python override of a virtual method with various different parameters is correctly called from C++.''' + vm = VirtualMethods() + evm = ExtendedVirtualMethods() + pt = Point(1.1, 2.2) + val = 4 + cpx = complex(3.3, 4.4) + b = True + result0 = vm.callVirtualMethod0(pt, val, cpx, b) + result1 = evm.callVirtualMethod0(pt, val, cpx, b) + self.assertEqual(result0 * -1.0, result1) + +if __name__ == '__main__': + unittest.main() + |