diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qserialport/tst_qserialport.cpp | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/tests/auto/qserialport/tst_qserialport.cpp b/tests/auto/qserialport/tst_qserialport.cpp index f55dac76..84bb7a56 100644 --- a/tests/auto/qserialport/tst_qserialport.cpp +++ b/tests/auto/qserialport/tst_qserialport.cpp @@ -132,6 +132,8 @@ private slots: void readWriteWithDifferentBaudRate_data(); void readWriteWithDifferentBaudRate(); + void bindingsAndProperties(); + protected slots: void handleBytesWrittenAndExitLoopSlot(qint64 bytesWritten); void handleBytesWrittenAndExitLoopSlot2(qint64 bytesWritten); @@ -1284,5 +1286,149 @@ void tst_QSerialPort::readWriteWithDifferentBaudRate() } } +void tst_QSerialPort::bindingsAndProperties() +{ + QSerialPort sp; + + // -- data bits + + QProperty<QSerialPort::DataBits> dbProp(QSerialPort::DataBits::Data6); + QCOMPARE(dbProp.value(), QSerialPort::DataBits::Data6); + + sp.bindableDataBits().setBinding(Qt::makePropertyBinding(dbProp)); + QCOMPARE(sp.dataBits(), QSerialPort::DataBits::Data6); + + const QSignalSpy dataBitsChangedSpy(&sp, &QSerialPort::dataBitsChanged); + + dbProp = QSerialPort::DataBits::Data5; + QCOMPARE(sp.dataBits(), QSerialPort::DataBits::Data5); + QCOMPARE(dataBitsChangedSpy.count(), 1); + QCOMPARE(dataBitsChangedSpy.at(0).value(0).toInt(), QSerialPort::DataBits::Data5); + + dbProp.setBinding(sp.bindableDataBits().makeBinding()); + sp.setDataBits(QSerialPort::DataBits::Data8); + QCOMPARE(dbProp.value(), QSerialPort::DataBits::Data8); + + dbProp.setBinding([&] { return sp.dataBits(); }); + sp.setDataBits(QSerialPort::DataBits::Data7); + QCOMPARE(dbProp.value(), QSerialPort::DataBits::Data7); + + // -- parity + + QProperty<QSerialPort::Parity> parityProp(QSerialPort::Parity::SpaceParity); + QCOMPARE(parityProp.value(), QSerialPort::Parity::SpaceParity); + + sp.bindableParity().setBinding(Qt::makePropertyBinding(parityProp)); + QCOMPARE(sp.parity(), QSerialPort::Parity::SpaceParity); + + const QSignalSpy parityChangedSpy(&sp, &QSerialPort::parityChanged); + + parityProp = QSerialPort::Parity::EvenParity; + QCOMPARE(sp.parity(), QSerialPort::Parity::EvenParity); + QCOMPARE(parityChangedSpy.count(), 1); + QCOMPARE(parityChangedSpy.at(0).value(0).toInt(), QSerialPort::Parity::EvenParity); + + parityProp.setBinding(sp.bindableParity().makeBinding()); + sp.setParity(QSerialPort::Parity::NoParity); + QCOMPARE(parityProp.value(), QSerialPort::Parity::NoParity); + + parityProp.setBinding([&] { return sp.parity(); }); + sp.setParity(QSerialPort::Parity::OddParity); + QCOMPARE(parityProp.value(), QSerialPort::Parity::OddParity); + + // -- stop bits + + QProperty<QSerialPort::StopBits> sbProp(QSerialPort::StopBits::OneAndHalfStop); + QCOMPARE(sbProp.value(), QSerialPort::StopBits::OneAndHalfStop); + + sp.bindableStopBits().setBinding(Qt::makePropertyBinding(sbProp)); + QCOMPARE(sp.stopBits(), QSerialPort::StopBits::OneAndHalfStop); + + const QSignalSpy stopBitsChangedSpy(&sp, &QSerialPort::stopBitsChanged); + + sbProp = QSerialPort::StopBits::OneStop; + QCOMPARE(sp.stopBits(), QSerialPort::StopBits::OneStop); + QCOMPARE(stopBitsChangedSpy.count(), 1); + QCOMPARE(stopBitsChangedSpy.at(0).value(0).toInt(), QSerialPort::StopBits::OneStop); + + sbProp.setBinding(sp.bindableStopBits().makeBinding()); + sp.setStopBits(QSerialPort::StopBits::TwoStop); + QCOMPARE(sbProp.value(), QSerialPort::StopBits::TwoStop); + + sbProp.setBinding([&] { return sp.stopBits(); }); + sp.setStopBits(QSerialPort::StopBits::OneAndHalfStop); + QCOMPARE(sbProp.value(), QSerialPort::StopBits::OneAndHalfStop); + + // -- flow control + + QProperty<QSerialPort::FlowControl> fcProp(QSerialPort::FlowControl::HardwareControl); + QCOMPARE(fcProp.value(), QSerialPort::FlowControl::HardwareControl); + + sp.bindableFlowControl().setBinding(Qt::makePropertyBinding(fcProp)); + QCOMPARE(sp.flowControl(), QSerialPort::FlowControl::HardwareControl); + + const QSignalSpy flowControlChangedSpy(&sp, &QSerialPort::flowControlChanged); + + fcProp = QSerialPort::FlowControl::NoFlowControl; + QCOMPARE(sp.flowControl(), QSerialPort::FlowControl::NoFlowControl); + QCOMPARE(flowControlChangedSpy.count(), 1); + QCOMPARE(flowControlChangedSpy.at(0).value(0).toInt(), QSerialPort::FlowControl::NoFlowControl); + + fcProp.setBinding(sp.bindableFlowControl().makeBinding()); + sp.setFlowControl(QSerialPort::FlowControl::SoftwareControl); + QCOMPARE(fcProp.value(), QSerialPort::FlowControl::SoftwareControl); + + fcProp.setBinding([&] { return sp.flowControl(); }); + sp.setFlowControl(QSerialPort::FlowControl::NoFlowControl); + QCOMPARE(fcProp.value(), QSerialPort::FlowControl::NoFlowControl); + + // -- error + + QProperty<QSerialPort::SerialPortError> errorProp(QSerialPort::SerialPortError::PermissionError); + QCOMPARE(errorProp.value(), QSerialPort::SerialPortError::PermissionError); + + sp.bindableError().setBinding(Qt::makePropertyBinding(errorProp)); + QCOMPARE(sp.error(), QSerialPort::SerialPortError::NoError); + + const QSignalSpy errorChangedSpy(&sp, &QSerialPort::errorOccurred); + + // this shall not change the error, we do not have a public setter + errorProp = QSerialPort::SerialPortError::DeviceNotFoundError; + QCOMPARE(sp.error(), QSerialPort::SerialPortError::NoError); + QCOMPARE(errorChangedSpy.count(), 0); + + errorProp.setBinding(sp.bindableError().makeBinding()); + sp.clearError(); + QCOMPARE(errorProp.value(), QSerialPort::SerialPortError::NoError); + QCOMPARE(errorChangedSpy.count(), 1); + QCOMPARE(errorChangedSpy.at(0).value(0).toInt(), QSerialPort::SerialPortError::NoError); + + sp.setPortName(m_receiverPortName); + sp.open(QIODevice::ReadOnly); + + // -- break enabled + + QProperty<bool> beProp(false); + QCOMPARE(beProp.value(), false); + + sp.bindableIsBreakEnabled().setBinding(Qt::makePropertyBinding(beProp)); + QCOMPARE(sp.isBreakEnabled(), false); + + const QSignalSpy breakEnabledChangedSpy(&sp, &QSerialPort::breakEnabledChanged); + + beProp = true; + QCOMPARE(sp.isBreakEnabled(), true); + QCOMPARE(breakEnabledChangedSpy.count(), 1); + QCOMPARE(breakEnabledChangedSpy.at(0).value(0).toBool(), true); + + beProp.setBinding(sp.bindableIsBreakEnabled().makeBinding()); + sp.setBreakEnabled(false); + QCOMPARE(beProp.value(), false); + + beProp.setBinding([&] { return sp.isBreakEnabled(); }); + sp.setBreakEnabled(true); + QCOMPARE(beProp.value(), true); +} + QTEST_MAIN(tst_QSerialPort) #include "tst_qserialport.moc" |