aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/tests/samplebinding/voidholder_test.py
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2017-09-11 13:36:35 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2017-11-06 08:30:27 +0000
commit764498b3d033a1c947a40dc1b2237e81b674992b (patch)
tree9245056c6f5cbc9b85bf942d2b74dc9ca740627f /sources/shiboken2/tests/samplebinding/voidholder_test.py
parent8c9037dc83fbdbb0b9913961fbe7f84066630e18 (diff)
Implement proper void pointer (void*) support
This change introduces a new type into the shiboken2 module which is imported by calling "import PySide2.support.VoidPtr". The type takes care of conversions from / to void* values in function signatures. Creating an instance can be done by passing either a shiboken wrapped object, or an integer representing an address, or a python object that implements the buffer interface. For example, this is useful for passing numpy arrays to C OpenGL functions that take void* parameters. First you convert the array into a bytestring (using numpy.array.tobytes(), then you instantiate a VoidPtr from that bytestring, and finally you pass it along to a GL function. One corner case that is currently not supported is void** parameters. Change-Id: I01e291d6856cb6bd8b5175adc3ead6b728036535 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken2/tests/samplebinding/voidholder_test.py')
-rw-r--r--sources/shiboken2/tests/samplebinding/voidholder_test.py20
1 files changed, 10 insertions, 10 deletions
diff --git a/sources/shiboken2/tests/samplebinding/voidholder_test.py b/sources/shiboken2/tests/samplebinding/voidholder_test.py
index cb5cab6e5..6e841684b 100644
--- a/sources/shiboken2/tests/samplebinding/voidholder_test.py
+++ b/sources/shiboken2/tests/samplebinding/voidholder_test.py
@@ -34,21 +34,29 @@
import unittest
from sample import VoidHolder, Point
+import shiboken2 as shiboken
class VoidHolderTest(unittest.TestCase):
'''Test case for void pointer manipulation.'''
def testGetVoidPointerFromCppAndPutsOnVoidHolder(self):
- '''Passes a void pointer created in C++ and to kept by VoidHolder.'''
+ '''Passes a void pointer created in C++ to be kept by VoidHolder.'''
voidptr = VoidHolder.gimmeMeSomeVoidPointer()
voidholder = VoidHolder(voidptr)
self.assertEqual(voidptr, voidholder.voidPointer())
+ def testPassVoidPointerAsArgument(self):
+ '''Passes a void pointer created in C++ as an argument to a function.'''
+ voidptr = VoidHolder.gimmeMeSomeVoidPointer()
+ voidHolder = VoidHolder()
+ returnValue = voidHolder.takeVoidPointer(voidptr)
+ self.assertEqual(returnValue, voidptr)
+
def testPutRandomObjectInsideVoidHolder(self):
'''Passes a C++ pointer for an object created in Python to be kept by VoidHolder.'''
obj = Point(1, 2)
voidholder = VoidHolder(obj)
- self.assertEqual(obj, voidholder.voidPointer())
+ self.assertEqual(shiboken.getCppPointer(obj)[0], int(voidholder.voidPointer()))
def testGetNoneObjectFromVoidHolder(self):
'''A VoidHolder created without parameters returns a NULL pointer
@@ -56,14 +64,6 @@ class VoidHolderTest(unittest.TestCase):
voidholder = VoidHolder()
self.assertEqual(voidholder.voidPointer(), None)
- def testPutPythonObjectInsideVoidHolder(self):
- '''Passes a native Python object to be kept by VoidHolder.'''
- obj = 'Foo'
- voidholder = VoidHolder(obj)
- self.assertEqual(obj, voidholder.voidPointer())
-
-
-
if __name__ == '__main__':
unittest.main()