From a713565d119c39bd31ec25926ded881d1f0b78b7 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Thu, 30 Jun 2016 09:32:39 +0300 Subject: Add tests for RTS and DTR signals Change-Id: I148339d731b77975ce56fa79a3ead485bbf02a87 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- tests/auto/qserialport/tst_qserialport.cpp | 81 ++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/tests/auto/qserialport/tst_qserialport.cpp b/tests/auto/qserialport/tst_qserialport.cpp index 24c0134..33a48fe 100644 --- a/tests/auto/qserialport/tst_qserialport.cpp +++ b/tests/auto/qserialport/tst_qserialport.cpp @@ -96,6 +96,9 @@ private slots: void flowControl_data(); void flowControl(); + void rts(); + void dtr(); + void flush(); void doubleFlush(); @@ -149,6 +152,7 @@ const QByteArray tst_QSerialPort::newlineArray("\n\r"); tst_QSerialPort::tst_QSerialPort() { + qRegisterMetaType("QSerialPort::SerialPortError"); } void tst_QSerialPort::initTestCase() @@ -468,6 +472,83 @@ void tst_QSerialPort::flowControl() } } +void tst_QSerialPort::rts() +{ + QSerialPort serialPort(m_senderPortName); + + QSignalSpy errorSpy(&serialPort, static_cast(&QSerialPort::error)); + QVERIFY(errorSpy.isValid()); + QSignalSpy rtsSpy(&serialPort, &QSerialPort::requestToSendChanged); + QVERIFY(rtsSpy.isValid()); + + QVERIFY(serialPort.open(QIODevice::ReadWrite)); + + // no flow control + QVERIFY(serialPort.setFlowControl(QSerialPort::NoFlowControl)); + const bool toggle1 = !serialPort.isRequestToSend(); + QVERIFY(serialPort.setRequestToSend(toggle1)); + QCOMPARE(serialPort.isRequestToSend(), toggle1); + + // software flow control + QVERIFY(serialPort.setFlowControl(QSerialPort::SoftwareControl)); + const bool toggle2 = !serialPort.isRequestToSend(); + QVERIFY(serialPort.setRequestToSend(toggle2)); + QCOMPARE(serialPort.isRequestToSend(), toggle2); + + // hardware flow control + QVERIFY(serialPort.setFlowControl(QSerialPort::HardwareControl)); + const bool toggle3 = !serialPort.isRequestToSend(); + QVERIFY(!serialPort.setRequestToSend(toggle3)); // not allowed + QCOMPARE(serialPort.isRequestToSend(), !toggle3); // same as before + QCOMPARE(serialPort.error(), QSerialPort::UnsupportedOperationError); + + QCOMPARE(errorSpy.count(), 2); + QCOMPARE(qvariant_cast(errorSpy.at(0).at(0)), QSerialPort::NoError); + QCOMPARE(qvariant_cast(errorSpy.at(1).at(0)), QSerialPort::UnsupportedOperationError); + + QCOMPARE(rtsSpy.count(), 2); + QCOMPARE(qvariant_cast(rtsSpy.at(0).at(0)), toggle1); + QCOMPARE(qvariant_cast(rtsSpy.at(1).at(0)), toggle2); +} + +void tst_QSerialPort::dtr() +{ + QSerialPort serialPort(m_senderPortName); + + QSignalSpy errorSpy(&serialPort, static_cast(&QSerialPort::error)); + QVERIFY(errorSpy.isValid()); + QSignalSpy dtrSpy(&serialPort, &QSerialPort::dataTerminalReadyChanged); + QVERIFY(dtrSpy.isValid()); + + QVERIFY(serialPort.open(QIODevice::ReadWrite)); + + // no flow control + QVERIFY(serialPort.setFlowControl(QSerialPort::NoFlowControl)); + const bool toggle1 = !serialPort.isDataTerminalReady(); + QVERIFY(serialPort.setDataTerminalReady(toggle1)); + QCOMPARE(serialPort.isDataTerminalReady(), toggle1); + + // software flow control + QVERIFY(serialPort.setFlowControl(QSerialPort::SoftwareControl)); + const bool toggle2 = !serialPort.isDataTerminalReady(); + QVERIFY(serialPort.setDataTerminalReady(toggle2)); + QCOMPARE(serialPort.isDataTerminalReady(), toggle2); + + // hardware flow control + QVERIFY(serialPort.setFlowControl(QSerialPort::HardwareControl)); + const bool toggle3 = !serialPort.isDataTerminalReady(); + QVERIFY(serialPort.setDataTerminalReady(toggle3)); + QCOMPARE(serialPort.isDataTerminalReady(), toggle3); + + QCOMPARE(errorSpy.count(), 1); + QCOMPARE(qvariant_cast(errorSpy.at(0).at(0)), QSerialPort::NoError); + + QCOMPARE(dtrSpy.count(), 3); + QCOMPARE(qvariant_cast(dtrSpy.at(0).at(0)), toggle1); + QCOMPARE(qvariant_cast(dtrSpy.at(1).at(0)), toggle2); + QCOMPARE(qvariant_cast(dtrSpy.at(2).at(0)), toggle3); +} + void tst_QSerialPort::handleBytesWrittenAndExitLoopSlot(qint64 bytesWritten) { QCOMPARE(bytesWritten, qint64(alphabetArray.size() + newlineArray.size())); -- cgit v1.2.1