summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-10-14 14:07:32 +0200
committerFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-10-14 14:07:32 +0200
commit3bb682ea29ffaf72ff73e6eb57abdc5c59524e8a (patch)
tree4d8e828da7ea6115c6ffe26cec2d024bad60aa91 /tests
parent14fe584d2abb1ae0776f0973b245baa79d0468d2 (diff)
parent62dfdeb3642250bdb642dbf607a8c7b95e57835e (diff)
downloadqtserialport-3bb682ea29ffaf72ff73e6eb57abdc5c59524e8a.tar.gz
Merge remote-tracking branch 'origin/5.3' into 5.4
Change-Id: Id7e66059233e8d07ba44cad19048d9cddc68e250
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qserialport/tst_qserialport.cpp91
1 files changed, 84 insertions, 7 deletions
diff --git a/tests/auto/qserialport/tst_qserialport.cpp b/tests/auto/qserialport/tst_qserialport.cpp
index d296f6d..357cef8 100644
--- a/tests/auto/qserialport/tst_qserialport.cpp
+++ b/tests/auto/qserialport/tst_qserialport.cpp
@@ -107,6 +107,11 @@ private slots:
void asynchronousWriteByTimer_data();
void asynchronousWriteByTimer();
+#ifdef Q_OS_WIN
+ void readBufferOverflow();
+ void readAfterInputClear();
+#endif
+
protected slots:
void handleBytesWrittenAndExitLoopSlot(qint64 bytesWritten);
void handleBytesWrittenAndExitLoopSlot2(qint64 bytesWritten);
@@ -462,27 +467,27 @@ void tst_QSerialPort::twoStageSynchronousLoopback()
senderPort.waitForBytesWritten(waitMsecs);
QTest::qSleep(waitMsecs);
receiverPort.waitForReadyRead(waitMsecs);
- QCOMPARE(qint64(newlineArray.size()), receiverPort.bytesAvailable());
+ QCOMPARE(receiverPort.bytesAvailable(), qint64(newlineArray.size()));
receiverPort.write(receiverPort.readAll());
receiverPort.waitForBytesWritten(waitMsecs);
QTest::qSleep(waitMsecs);
senderPort.waitForReadyRead(waitMsecs);
- QCOMPARE(qint64(newlineArray.size()), receiverPort.bytesAvailable());
- QCOMPARE(newlineArray, senderPort.readAll());
+ QCOMPARE(senderPort.bytesAvailable(), qint64(newlineArray.size()));
+ QCOMPARE(senderPort.readAll(), newlineArray);
// second stage
senderPort.write(newlineArray);
senderPort.waitForBytesWritten(waitMsecs);
QTest::qSleep(waitMsecs);
receiverPort.waitForReadyRead(waitMsecs);
- QCOMPARE(qint64(newlineArray.size()), receiverPort.bytesAvailable());
+ QCOMPARE(receiverPort.bytesAvailable(), qint64(newlineArray.size()));
receiverPort.write(receiverPort.readAll());
receiverPort.waitForBytesWritten(waitMsecs);
QTest::qSleep(waitMsecs);
senderPort.waitForReadyRead(waitMsecs);
- QCOMPARE(qint64(newlineArray.size()), receiverPort.bytesAvailable());
- QCOMPARE(newlineArray, senderPort.readAll());
+ QCOMPARE(senderPort.bytesAvailable(), qint64(newlineArray.size()));
+ QCOMPARE(senderPort.readAll(), newlineArray);
}
void tst_QSerialPort::synchronousReadWrite()
@@ -508,7 +513,7 @@ void tst_QSerialPort::synchronousReadWrite()
while ((readData.size() < writeData.size()) && receiverPort.waitForReadyRead(100))
readData.append(receiverPort.readAll());
- QCOMPARE(writeData, readData);
+ QCOMPARE(readData, writeData);
}
class AsyncReader : public QObject
@@ -659,5 +664,77 @@ void tst_QSerialPort::asynchronousWriteByTimer()
QCOMPARE(receiverPort.readAll(), alphabetArray);
}
+#ifdef Q_OS_WIN
+void tst_QSerialPort::readBufferOverflow()
+{
+ 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));
+
+ QCOMPARE(senderPort.write(alphabetArray), qint64(alphabetArray.size()));
+ QVERIFY2(senderPort.waitForBytesWritten(100), "Waiting for bytes written failed");
+
+ QByteArray readData;
+ while (receiverPort.waitForReadyRead(100)) {
+ QVERIFY(receiverPort.bytesAvailable() > 0);
+ readData += receiverPort.readAll();
+ }
+
+ QCOMPARE(readData, alphabetArray);
+
+ // 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)
#include "tst_qserialport.moc"