diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2010-10-19 15:30:59 -0200 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2010-10-19 16:35:59 -0200 |
commit | 65022ffef62096033bcff49c4544640dac92f44e (patch) | |
tree | 3c18f989ea7aa8a972a316a07cac672f5899dfee | |
parent | e7f280f7451b3429fc1e1407225a6b9d27db1888 (diff) |
Fix bug#408 - "QIODevice.readData() and .readLineData() have output parameters in their signatures"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Marcelo Lira <marcelo.lira@openbossa.org>
-rw-r--r-- | PySide/QtCore/typesystem_core.xml | 40 | ||||
-rw-r--r-- | tests/QtCore/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/QtCore/bug_408.py | 28 |
3 files changed, 67 insertions, 2 deletions
diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml index a72abcec9..e9f5f318a 100644 --- a/PySide/QtCore/typesystem_core.xml +++ b/PySide/QtCore/typesystem_core.xml @@ -1767,8 +1767,6 @@ <modify-function signature="waitForBytesWritten(int)" allow-thread="yes"/> <modify-function signature="peek(char *,qint64)" remove="all"/> <modify-function signature="read(char *,qint64)" remove="all"/> -<!-- Needed by QNetworkReply class on QtNetwork module --> -<!-- <modify-function signature="readData(char *,qint64)" remove="all"/> --> <modify-function signature="readLine(char *,qint64)" remove="all"/> <modify-function signature="write(const char *,qint64)" remove="all"/> <modify-function signature="getChar(char *)"> @@ -1780,6 +1778,44 @@ <insert-template name="fix_char*" /> </inject-code> </modify-function> + <modify-function signature="readData(char *,qint64)"> + <inject-code class="target"> + QByteArray ba; + ba.resize(%2); + %CPPSELF.%FUNCTION_NAME(ba.data(), ba.size()); + %PYARG_0 = %CONVERTTOPYTHON[QByteArray](ba); + </inject-code> + <modify-argument index="1"> + <remove-argument /> + </modify-argument> + <modify-argument index="return"> + <replace-type modified-type="QByteArray"/> + <conversion-rule class="native"> + const QByteArray ba(%CONVERTTOCPP[QByteArray](%PYARG_0)); + memcpy(data, ba.data(), ba.size()); + long long %out = ba.size(); + </conversion-rule> + </modify-argument> + </modify-function> + <modify-function signature="readLineData(char *,qint64)"> + <inject-code class="target"> + QByteArray ba; + ba.resize(%2); + %CPPSELF.%FUNCTION_NAME(ba.data(), ba.size()); + %PYARG_0 = %CONVERTTOPYTHON[QByteArray](ba); + </inject-code> + <modify-argument index="1"> + <remove-argument /> + </modify-argument> + <modify-argument index="return"> + <replace-type modified-type="QByteArray"/> + <conversion-rule class="native"> + const QByteArray ba(%CONVERTTOCPP[QByteArray](%PYARG_0)); + memcpy(data, ba.data(), ba.size()); + long long %out = ba.size(); + </conversion-rule> + </modify-argument> + </modify-function> </object-type> <object-type name="QCryptographicHash"> <enum-type name="Algorithm"/> diff --git a/tests/QtCore/CMakeLists.txt b/tests/QtCore/CMakeLists.txt index 7225da0a8..36b8776f5 100644 --- a/tests/QtCore/CMakeLists.txt +++ b/tests/QtCore/CMakeLists.txt @@ -1,5 +1,6 @@ PYSIDE_TEST(bug_278_test.py) PYSIDE_TEST(bug_332.py) +PYSIDE_TEST(bug_408.py) PYSIDE_TEST(blocking_signals_test.py) PYSIDE_TEST(child_event_test.py) PYSIDE_TEST(deepcopy_test.py) diff --git a/tests/QtCore/bug_408.py b/tests/QtCore/bug_408.py new file mode 100644 index 000000000..5827e56d6 --- /dev/null +++ b/tests/QtCore/bug_408.py @@ -0,0 +1,28 @@ +import unittest + +from PySide.QtCore import * + +class MyDevice(QIODevice): + def __init__(self, txt): + QIODevice.__init__(self) + self.txt = txt + self.ptr = 0 + + def readData(self, size): + size = min(len(self.txt) - self.ptr, size) + retval = self.txt[self.ptr:size] + self.ptr += size + return retval + +class QIODeviceTest(unittest.TestCase): + + def testIt(self): + device = MyDevice("hello world\nhello again") + device.open(QIODevice.ReadOnly) + + s = QTextStream(device) + self.assertEqual(s.readLine(), "hello world") + self.assertEqual(s.readLine(), "hello again") + +if __name__ == '__main__': + unittest.main() |