diff options
Diffstat (limited to 'tests/samplebinding/bytearray_conversions.h')
-rw-r--r-- | tests/samplebinding/bytearray_conversions.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/tests/samplebinding/bytearray_conversions.h b/tests/samplebinding/bytearray_conversions.h index c37b28a99..0fd9a2b7d 100644 --- a/tests/samplebinding/bytearray_conversions.h +++ b/tests/samplebinding/bytearray_conversions.h @@ -8,17 +8,25 @@ inline bool Converter<ByteArray>::isConvertible(PyObject* pyObj) if (ValueTypeConverter<ByteArray>::isConvertible(pyObj)) return true; SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType<ByteArray>()); - return Shiboken::Converter<const char*>::checkType(pyObj) + + return Shiboken::Converter<const char*>::isConvertible(pyObj) + || PyBytes_Check(pyObj) || (ObjectType::isExternalConvertible(shiboType, pyObj)); } inline ByteArray Converter<ByteArray>::toCpp(PyObject* pyObj) { - if (pyObj == Py_None) + if (pyObj == Py_None) { return ByteArray(); - else if (PyObject_TypeCheck(pyObj, SbkType<ByteArray>())) + } else if (PyObject_TypeCheck(pyObj, SbkType<ByteArray>())) { return *Converter<ByteArray*>::toCpp(pyObj); - else if (PyBytes_Check(pyObj)) + } else if (PyBytes_Check(pyObj)) { return ByteArray(PyBytes_AS_STRING(pyObj), PyBytes_GET_SIZE(pyObj)); + } else if (PyUnicode_Check(pyObj)) { + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(pyObj)); + return ByteArray(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + } else if (Shiboken::String::check(pyObj)) { + return ByteArray(Shiboken::String::toCString(pyObj)); + } return ValueTypeConverter<ByteArray>::toCpp(pyObj); } inline PyObject* Converter<ByteArray>::toPython(const ByteArray& cppObj) |