summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2014-10-03 13:21:17 +0400
committerDenis Shienkov <denis.shienkov@gmail.com>2014-10-03 13:32:01 +0200
commit9c88ad89801596e1d94acc4f32ff55c34118a66f (patch)
tree18f3150a0ab599b082f3b5813e833e0fe6886f4a /tests
parentac0422e8c9e74f2275129e3c7c69ef64299f07a9 (diff)
downloadqtserialport-9c88ad89801596e1d94acc4f32ff55c34118a66f.tar.gz
Restart of async reading when a QSP::clear() is called
The method QSP::clear() can stall reading in case of following situations: - at the moment when PurgeComm abort of previously started asynchronous reading operation - when a serial port is in hardware flow control mode - when a serial port has a limited read buffer size Therefore is necessary restart of asynchronous reading to enable of the read sequence. Change-Id: I7a722a1ee20ecba0dd631da96ca81d2937d7ca6b Reviewed-by: Robert Kurjata <rkurjata@gmail.com> Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qserialport/tst_qserialport.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/auto/qserialport/tst_qserialport.cpp b/tests/auto/qserialport/tst_qserialport.cpp
index 0fdde48..a7dc5f3 100644
--- a/tests/auto/qserialport/tst_qserialport.cpp
+++ b/tests/auto/qserialport/tst_qserialport.cpp
@@ -117,6 +117,7 @@ private slots:
#ifdef Q_OS_WIN
void readBufferOverflow();
+ void readAfterInputClear();
#endif
protected slots:
@@ -700,6 +701,47 @@ void tst_QSerialPort::readBufferOverflow()
// No more bytes available
QVERIFY(receiverPort.bytesAvailable() == 0);
}
+
+void tst_QSerialPort::readAfterInputClear()
+{
+ clearReceiver();
+
+ QSerialPort senderPort(m_senderPortName);
+ QVERIFY(senderPort.open(QSerialPort::WriteOnly));
+
+ QSerialPort receiverPort(m_receiverPortName);
+ QVERIFY(receiverPort.open(QSerialPort::ReadOnly));
+
+ const int readBufferSize = alphabetArray.size() / 2;
+ receiverPort.setReadBufferSize(readBufferSize);
+ QCOMPARE(receiverPort.readBufferSize(), qint64(readBufferSize));
+
+ const int waitMsecs = 100;
+
+ // First write more than read buffer size
+ QCOMPARE(senderPort.write(alphabetArray), qint64(alphabetArray.size()));
+ QVERIFY2(senderPort.waitForBytesWritten(waitMsecs), "Waiting for bytes written failed");
+
+ // Wait for first part of data into read buffer
+ while (receiverPort.waitForReadyRead(waitMsecs));
+ QCOMPARE(receiverPort.bytesAvailable(), qint64(readBufferSize));
+ // Wait for second part of data into driver's FIFO
+ QTest::qSleep(waitMsecs);
+
+ QVERIFY(receiverPort.clear(QSerialPort::Input));
+ QCOMPARE(receiverPort.bytesAvailable(), qint64(0));
+
+ // Second write less than read buffer size
+ QCOMPARE(senderPort.write(newlineArray), qint64(newlineArray.size()));
+ QVERIFY2(senderPort.waitForBytesWritten(waitMsecs), "Waiting for bytes written failed");
+
+ while (receiverPort.waitForReadyRead(waitMsecs));
+ QCOMPARE(receiverPort.bytesAvailable(), qint64(newlineArray.size()));
+ QCOMPARE(receiverPort.readAll(), newlineArray);
+
+ // No more bytes available
+ QVERIFY(receiverPort.bytesAvailable() == 0);
+}
#endif
QTEST_MAIN(tst_QSerialPort)