aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2010-10-19 15:30:59 -0200
committerHugo Parente Lima <hugo.pl@gmail.com>2010-10-19 16:35:59 -0200
commit65022ffef62096033bcff49c4544640dac92f44e (patch)
tree3c18f989ea7aa8a972a316a07cac672f5899dfee
parente7f280f7451b3429fc1e1407225a6b9d27db1888 (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.xml40
-rw-r--r--tests/QtCore/CMakeLists.txt1
-rw-r--r--tests/QtCore/bug_408.py28
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()