From b64c2001d14b8b1102af6b6029eb9c317e5d8008 Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Thu, 20 Oct 2011 19:56:48 -0200 Subject: Make converter branch work on a Python3.2 setup. --- tests/samplebinding/injectcode_test.py | 6 +- .../primitivestructpointer_conversions.h | 16 ++++- tests/samplebinding/typesystem_sample.xml | 78 +++++++++++++++++----- 3 files changed, 78 insertions(+), 22 deletions(-) (limited to 'tests/samplebinding') diff --git a/tests/samplebinding/injectcode_test.py b/tests/samplebinding/injectcode_test.py index a60ef914e..52585ec81 100644 --- a/tests/samplebinding/injectcode_test.py +++ b/tests/samplebinding/injectcode_test.py @@ -94,14 +94,12 @@ class InjectCodeTest(unittest.TestCase): '''When the sequence item is convertible to an integer -1 is returned, or -2 if its not convertible.''' ic = InjectCode() values = (1, 2, 3, 4, '5', 6.7) - print values result = ic.arrayMethod(values) - print result + fixedValues = [v for v in values if isinstance(v, int)]\ + [-1 for v in values if isinstance(v, float)]\ + [-2 for v in values if not isinstance(v, int) and not isinstance(v, float)] - print fixedValues - #self.assertEqual(result, sum(fixedValues)) + self.assertEqual(result, sum(fixedValues)) class IntArrayTest(unittest.TestCase): diff --git a/tests/samplebinding/primitivestructpointer_conversions.h b/tests/samplebinding/primitivestructpointer_conversions.h index 9e1d27678..c674215f3 100644 --- a/tests/samplebinding/primitivestructpointer_conversions.h +++ b/tests/samplebinding/primitivestructpointer_conversions.h @@ -9,7 +9,11 @@ struct Converter static bool isConvertible(PyObject* pyobj) { +#ifdef IS_PY3K + return PyCapsule_CheckExact(pyobj); +#else return PyCObject_Check(pyobj); +#endif } static inline PyObject* toPython(void* cppobj) @@ -19,12 +23,22 @@ struct Converter static PyObject* toPython(PrimitiveStructPtr cppobj) { +#ifdef IS_PY3K + return PyCapsule_New(cppobj, 0, 0); +#else return PyCObject_FromVoidPtr(cppobj, 0); +#endif } static PrimitiveStructPtr toCpp(PyObject* pyobj) { - return (PrimitiveStructPtr) PyCObject_AsVoidPtr(pyobj); + void* ptr; +#ifdef IS_PY3K + ptr = PyCapsule_GetPointer(pyobj, 0); +#else + ptr = PyCObject_AsVoidPtr(pyobj); +#endif + return (PrimitiveStructPtr) ptr; } }; } diff --git a/tests/samplebinding/typesystem_sample.xml b/tests/samplebinding/typesystem_sample.xml index f80801670..f823a1725 100644 --- a/tests/samplebinding/typesystem_sample.xml +++ b/tests/samplebinding/typesystem_sample.xml @@ -68,25 +68,61 @@ - return PyCObject_FromVoidPtr(%in, 0); + if (!%in) + Py_RETURN_NONE; + #ifdef IS_PY3K + return PyCapsule_New(%in, 0, 0); + #else + return PyCObject_FromVoidPtr(%in, 0); + #endif - - %out = (%OUTTYPE)PyCObject_AsVoidPtr(%in); + + %out = 0; + + + void* ptr; + #ifdef IS_PY3K + ptr = PyCapsule_GetPointer(%in, 0); + #else + ptr = PyCObject_AsVoidPtr(%in); + #endif + %out = *((%OUTTYPE*)ptr); + + static bool checkPyCapsuleOrPyCObject(PyObject* pyObj) + { + #ifdef IS_PY3K + return PyCapsule_CheckExact(pyObj); + #else + return PyCObject_Check(pyObj); + #endif + } + + - return PyCObject_FromVoidPtr(&%in, 0); + #ifdef IS_PY3K + return PyCapsule_New(&%in, 0, 0); + #else + return PyCObject_FromVoidPtr(&%in, 0); + #endif - - %out = *((%OUTTYPE*)PyCObject_AsVoidPtr(%in)); + + void* ptr; + #ifdef IS_PY3K + ptr = PyCapsule_GetPointer(%in, 0); + #else + ptr = PyCObject_AsVoidPtr(%in); + #endif + %out = *((%OUTTYPE*)ptr); @@ -118,10 +154,10 @@ - return PyString_FromStringAndSize(%in.cstring(), %in.size()); + return Shiboken::String::fromCString(%in.cstring(), %in.size()); - + const char* str = %CONVERTTOCPP[const char*](%in); %out = %OUTTYPE(str); @@ -1820,14 +1856,16 @@ %out = %OUTTYPE(); - - %out = %OUTTYPE(PyString_AS_STRING(%in), PyString_GET_SIZE(%in)); + + Py_ssize_t len; + const char* str = Shiboken::String::toCString(%in, &len); + %out = %OUTTYPE(str, len); - + @@ -1862,6 +1900,7 @@ + @@ -1909,12 +1948,17 @@ - ByteArray ba(((PyObject*)%PYSELF)->ob_type->tp_name); - ba += '('; - Shiboken::AutoDecRef contents(PyObject_Repr(PyBytes_FromStringAndSize(%CPPSELF.data(), %CPPSELF.size()))); - ba += PyBytes_AS_STRING(contents.object()); - ba += ")"; - %PYARG_0 = PyBytes_FromStringAndSize(ba.data(), ba.size()); + ByteArray b(((PyObject*)%PYSELF)->ob_type->tp_name); + PyObject* aux = Shiboken::String::fromStringAndSize(%CPPSELF.data(), %CPPSELF.size()); + if (PyUnicode_CheckExact(aux)) { + PyObject* tmp = PyUnicode_AsASCIIString(aux); + Py_DECREF(aux); + aux = tmp; + } + b += "('"; + b += ByteArray(PyBytes_AS_STRING(aux), PyBytes_GET_SIZE(aux)); + b += "')"; + %PYARG_0 = Shiboken::String::fromStringAndSize(b.data(), b.size()); -- cgit v1.2.3