diff options
author | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2014-10-14 14:07:32 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2014-10-14 14:07:32 +0200 |
commit | 3bb682ea29ffaf72ff73e6eb57abdc5c59524e8a (patch) | |
tree | 4d8e828da7ea6115c6ffe26cec2d024bad60aa91 /tests/auto | |
parent | 14fe584d2abb1ae0776f0973b245baa79d0468d2 (diff) | |
parent | 62dfdeb3642250bdb642dbf607a8c7b95e57835e (diff) | |
download | qtserialport-3bb682ea29ffaf72ff73e6eb57abdc5c59524e8a.tar.gz |
Merge remote-tracking branch 'origin/5.3' into 5.4
Change-Id: Id7e66059233e8d07ba44cad19048d9cddc68e250
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qserialport/tst_qserialport.cpp | 91 |
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" |