aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2009-08-27 02:48:03 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-08-27 02:48:03 -0300
commit39dd735c9486a5808e26a4f07e19522cc904ddd9 (patch)
tree4717cba945fa41a30d563932a8e327ec58395100 /tests
parent560cd5ba22479d4b5067c171838a46a4e559e886 (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.txt1
-rw-r--r--tests/libsample/virtualmethods.cpp9
-rw-r--r--tests/libsample/virtualmethods.h21
-rw-r--r--tests/samplebinding/CMakeLists.txt1
-rw-r--r--tests/samplebinding/global.h1
-rw-r--r--tests/samplebinding/typesystem_sample.xml1
-rwxr-xr-xtests/samplebinding/virtualmethods_test.py36
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()
+