From 702cd168e1af7ef854aad7091529e4ce6e9df833 Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Thu, 3 Feb 2011 18:04:16 -0200 Subject: Fix comparisson of QByteArray with Python strings that have zeroes inside. --- PySide/QtCore/qbytearray_conversions.h | 34 ++++++++++++++++++++++++++++++++++ PySide/QtCore/typesystem_core.xml | 14 ++++++++++++++ tests/QtCore/qbytearray_test.py | 1 + 3 files changed, 49 insertions(+) create mode 100644 PySide/QtCore/qbytearray_conversions.h diff --git a/PySide/QtCore/qbytearray_conversions.h b/PySide/QtCore/qbytearray_conversions.h new file mode 100644 index 000000000..daa16099f --- /dev/null +++ b/PySide/QtCore/qbytearray_conversions.h @@ -0,0 +1,34 @@ +namespace Shiboken { + +inline bool Converter::checkType(PyObject* pyObj) +{ + return ValueTypeConverter::checkType(pyObj); +} + +inline bool Converter::isConvertible(PyObject* pyObj) +{ + if (ValueTypeConverter::isConvertible(pyObj)) + return true; + SbkObjectType* shiboType = reinterpret_cast(SbkType< ::QByteArray >()); + return Shiboken::Converter::checkType(pyObj) + || (ObjectType::isExternalConvertible(shiboType, pyObj)); +} + +inline QByteArray Converter::toCpp(PyObject* pyObj) +{ + if (pyObj == Py_None) + return 0; + else if (PyObject_TypeCheck(pyObj, SbkType())) + return *Converter::toCpp(pyObj); + else if (PyString_Check(pyObj)) + return QByteArray(PyString_AS_STRING(pyObj), PyString_GET_SIZE(pyObj)); + else + return ValueTypeConverter::toCpp(pyObj); +} + +inline PyObject* Converter::toPython(const ::QByteArray& cppObj) +{ + return ValueTypeConverter::toPython(cppObj); +} + +} diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml index 4979b566a..beac5175f 100644 --- a/PySide/QtCore/typesystem_core.xml +++ b/PySide/QtCore/typesystem_core.xml @@ -1442,6 +1442,8 @@ + + @@ -1499,6 +1501,18 @@ + + + + + + + + + + + + diff --git a/tests/QtCore/qbytearray_test.py b/tests/QtCore/qbytearray_test.py index f031332d9..396545f4e 100644 --- a/tests/QtCore/qbytearray_test.py +++ b/tests/QtCore/qbytearray_test.py @@ -49,6 +49,7 @@ class QByteArrayData(unittest.TestCase): ba = QByteArray(s1) s2 = ba.data() self.assertEqual(s1, s2) + self.assertEqual(s1, ba) class QByteArrayOperatorAtSetter(unittest.TestCase): '''Test case for operator QByteArray[] - __setitem__''' -- cgit v1.2.3