/* * Unofficial Qt Serial Port Library * * Copyright (c) 2010 Inbiza Systems Inc. All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see * * author labs@inbiza.com */ #include #include "qserialportunittest.h" void QSerialPortUnitTest::initTestCase() { using namespace TNX; serialPortInvalid_ = new QSerialPort("/dev/invaliddevicename"); QString validSerPortName; { QString filePath = "../serport"; if ( !QFile::exists(filePath) ) filePath = "../../serport"; QFile serportName(filePath); if ( !serportName.open(QIODevice::ReadOnly) ) QFAIL("Cannot locate the file containing the serial port name that will be used for unit testing. Quitting."); validSerPortName = serportName.read(256); } QPortSettings portSettings; serialPortValid_ = new TNX::QSerialPort(validSerPortName.trimmed(), portSettings); } void QSerialPortUnitTest::cleanupTestCase() { delete serialPortInvalid_; delete serialPortValid_; } void QSerialPortUnitTest::init() { QVERIFY( !serialPortInvalid_->open() ); QVERIFY( serialPortValid_->open() ); } void QSerialPortUnitTest::cleanup() { serialPortInvalid_->close(); serialPortValid_->close(); } void QSerialPortUnitTest::test_portSettings() { using namespace TNX; QPortSettings portSettings; portSettings.setBaudRate(QPortSettings::BAUDR_115200); QCOMPARE( portSettings.baudRate(), QPortSettings::BAUDR_115200); portSettings.setDataBits(QPortSettings::DB_5); QCOMPARE( portSettings.dataBits(), QPortSettings::DB_5); portSettings.setDataBits(QPortSettings::DB_6); QCOMPARE( portSettings.dataBits(), QPortSettings::DB_6); portSettings.setDataBits(QPortSettings::DB_7); QCOMPARE( portSettings.dataBits(), QPortSettings::DB_7); portSettings.setDataBits(QPortSettings::DB_8); QCOMPARE( portSettings.dataBits(), QPortSettings::DB_8); portSettings.setFlowControl(QPortSettings::FLOW_HARDWARE); QCOMPARE( portSettings.flowControl(), QPortSettings::FLOW_HARDWARE); portSettings.setFlowControl(QPortSettings::FLOW_OFF); QCOMPARE( portSettings.flowControl(), QPortSettings::FLOW_OFF); portSettings.setFlowControl(QPortSettings::FLOW_XONXOFF); QCOMPARE( portSettings.flowControl(), QPortSettings::FLOW_XONXOFF); portSettings.setParity(QPortSettings::PAR_EVEN); QCOMPARE( portSettings.parity(), QPortSettings::PAR_EVEN); portSettings.setParity(QPortSettings::PAR_NONE); QCOMPARE( portSettings.parity(), QPortSettings::PAR_NONE); portSettings.setParity(QPortSettings::PAR_ODD); QCOMPARE( portSettings.parity(), QPortSettings::PAR_ODD); portSettings.setParity(QPortSettings::PAR_SPACE); QCOMPARE( portSettings.parity(), QPortSettings::PAR_SPACE); portSettings.setStopBits(QPortSettings::STOP_1); QCOMPARE( portSettings.stopBits(), QPortSettings::STOP_1); portSettings.setStopBits(QPortSettings::STOP_2); QCOMPARE( portSettings.stopBits(), QPortSettings::STOP_2); } void QSerialPortUnitTest::test_invalidport_signals() { using namespace TNX; QCOMPARE( serialPortInvalid_->dcd(), QSerialPort::Signal_Unknown ); QCOMPARE( serialPortInvalid_->cts(), QSerialPort::Signal_Unknown ); QCOMPARE( serialPortInvalid_->dsr(), QSerialPort::Signal_Unknown ); QCOMPARE( serialPortInvalid_->ri(), QSerialPort::Signal_Unknown ); QVERIFY( !serialPortInvalid_->setDtr() ); QVERIFY( !serialPortInvalid_->setRts() ); } void QSerialPortUnitTest::test_validport_signals() { using namespace TNX; QCOMPARE( serialPortInvalid_->dcd(), QSerialPort::Signal_Unknown ); QCOMPARE( serialPortInvalid_->cts(), QSerialPort::Signal_Unknown ); QCOMPARE( serialPortInvalid_->dsr(), QSerialPort::Signal_Unknown ); QCOMPARE( serialPortInvalid_->ri(), QSerialPort::Signal_Unknown ); QVERIFY( !serialPortInvalid_->setDtr() ); QVERIFY( !serialPortInvalid_->setRts() ); } void QSerialPortUnitTest::test_validport_set_portSettings() { using namespace TNX; QPortSettings portSettings; // #1 #if defined(Q_OS_WIN) portSettings.setBaudRate(QPortSettings::BAUDR_110); #else portSettings.setBaudRate(QPortSettings::BAUDR_150); #endif portSettings.setDataBits(QPortSettings::DB_7); portSettings.setFlowControl(QPortSettings::FLOW_XONXOFF); portSettings.setParity(QPortSettings::PAR_ODD); portSettings.setStopBits(QPortSettings::STOP_1); QVERIFY( serialPortValid_->setPortSettings(portSettings) ); #if defined(Q_OS_WIN) QCOMPARE( serialPortValid_->baudRate(), QPortSettings::BAUDR_110 ); #else QCOMPARE( serialPortValid_->baudRate(), QPortSettings::BAUDR_150 ); #endif QCOMPARE( serialPortValid_->dataBits(), QPortSettings::DB_7 ); QCOMPARE( serialPortValid_->flowControl(), QPortSettings::FLOW_XONXOFF ); QCOMPARE( serialPortValid_->parity(), QPortSettings::PAR_ODD ); QCOMPARE( serialPortValid_->stopBits(), QPortSettings::STOP_1 ); // #2 portSettings.setBaudRate(QPortSettings::BAUDR_115200); portSettings.setDataBits(QPortSettings::DB_7); portSettings.setFlowControl(QPortSettings::FLOW_OFF); portSettings.setParity(QPortSettings::PAR_EVEN); portSettings.setStopBits(QPortSettings::STOP_2); QVERIFY( serialPortValid_->setPortSettings(portSettings) ); QCOMPARE( serialPortValid_->baudRate(), QPortSettings::BAUDR_115200 ); QCOMPARE( serialPortValid_->dataBits(), QPortSettings::DB_7 ); QCOMPARE( serialPortValid_->flowControl(), QPortSettings::FLOW_OFF ); QCOMPARE( serialPortValid_->parity(), QPortSettings::PAR_EVEN ); QCOMPARE( serialPortValid_->stopBits(), QPortSettings::STOP_2 ); // #3 portSettings.setBaudRate(QPortSettings::BAUDR_300); portSettings.setDataBits(QPortSettings::DB_8); portSettings.setFlowControl(QPortSettings::FLOW_HARDWARE); portSettings.setParity(QPortSettings::PAR_NONE); portSettings.setStopBits(QPortSettings::STOP_1); QVERIFY( serialPortValid_->setPortSettings(portSettings) ); QCOMPARE( serialPortValid_->baudRate(), QPortSettings::BAUDR_300 ); QCOMPARE( serialPortValid_->dataBits(), QPortSettings::DB_8 ); #if !defined(Q_OS_MAC) QCOMPARE( serialPortValid_->flowControl(), QPortSettings::FLOW_HARDWARE ); #endif QCOMPARE( serialPortValid_->parity(), QPortSettings::PAR_NONE ); QCOMPARE( serialPortValid_->stopBits(), QPortSettings::STOP_1 ); // #4 portSettings.setBaudRate(QPortSettings::BAUDR_38400); portSettings.setDataBits(QPortSettings::DB_5); portSettings.setFlowControl(QPortSettings::FLOW_OFF); portSettings.setParity(QPortSettings::PAR_EVEN); portSettings.setStopBits(QPortSettings::STOP_2); #if defined(Q_OS_WIN) QVERIFY( !serialPortValid_->setPortSettings(portSettings) ); #else QVERIFY( serialPortValid_->setPortSettings(portSettings) ); QCOMPARE( serialPortValid_->baudRate(), QPortSettings::BAUDR_38400 ); QCOMPARE( serialPortValid_->dataBits(), QPortSettings::DB_5 ); QCOMPARE( serialPortValid_->flowControl(), QPortSettings::FLOW_OFF ); QCOMPARE( serialPortValid_->parity(), QPortSettings::PAR_EVEN ); QCOMPARE( serialPortValid_->stopBits(), QPortSettings::STOP_2 ); #endif } void QSerialPortUnitTest::test_invalidport_set_portSettings() { using namespace TNX; QPortSettings portSettings; // #1 #if defined(Q_OS_WIN) portSettings.setBaudRate(QPortSettings::BAUDR_110); #else portSettings.setBaudRate(QPortSettings::BAUDR_150); #endif portSettings.setDataBits(QPortSettings::DB_6); portSettings.setFlowControl(QPortSettings::FLOW_XONXOFF); portSettings.setParity(QPortSettings::PAR_ODD); portSettings.setStopBits(QPortSettings::STOP_2); QVERIFY( serialPortInvalid_->setPortSettings(portSettings) ); #if defined(Q_OS_WIN) QCOMPARE( serialPortInvalid_->baudRate(), QPortSettings::BAUDR_110 ); #else QCOMPARE( serialPortInvalid_->baudRate(), QPortSettings::BAUDR_150 ); #endif QCOMPARE( serialPortInvalid_->dataBits(), QPortSettings::DB_6 ); QCOMPARE( serialPortInvalid_->flowControl(), QPortSettings::FLOW_XONXOFF ); QCOMPARE( serialPortInvalid_->parity(), QPortSettings::PAR_ODD ); QCOMPARE( serialPortInvalid_->stopBits(), QPortSettings::STOP_2 ); // #2 portSettings.setBaudRate(QPortSettings::BAUDR_115200); portSettings.setDataBits(QPortSettings::DB_7); portSettings.setFlowControl(QPortSettings::FLOW_OFF); portSettings.setParity(QPortSettings::PAR_EVEN); portSettings.setStopBits(QPortSettings::STOP_1); QVERIFY( serialPortInvalid_->setPortSettings(portSettings) ); QCOMPARE( serialPortInvalid_->baudRate(), QPortSettings::BAUDR_115200 ); QCOMPARE( serialPortInvalid_->dataBits(), QPortSettings::DB_7 ); QCOMPARE( serialPortInvalid_->flowControl(), QPortSettings::FLOW_OFF ); QCOMPARE( serialPortInvalid_->parity(), QPortSettings::PAR_EVEN ); QCOMPARE( serialPortInvalid_->stopBits(), QPortSettings::STOP_1 ); // #3 portSettings.setBaudRate(QPortSettings::BAUDR_300); portSettings.setDataBits(QPortSettings::DB_8); portSettings.setFlowControl(QPortSettings::FLOW_HARDWARE); portSettings.setParity(QPortSettings::PAR_NONE); portSettings.setStopBits(QPortSettings::STOP_1); QVERIFY( serialPortInvalid_->setPortSettings(portSettings) ); QCOMPARE( serialPortInvalid_->baudRate(), QPortSettings::BAUDR_300 ); QCOMPARE( serialPortInvalid_->dataBits(), QPortSettings::DB_8 ); QCOMPARE( serialPortInvalid_->flowControl(), QPortSettings::FLOW_HARDWARE ); QCOMPARE( serialPortInvalid_->parity(), QPortSettings::PAR_NONE ); QCOMPARE( serialPortInvalid_->stopBits(), QPortSettings::STOP_1 ); // #4 portSettings.setBaudRate(QPortSettings::BAUDR_38400); portSettings.setDataBits(QPortSettings::DB_5); portSettings.setFlowControl(QPortSettings::FLOW_OFF); portSettings.setParity(QPortSettings::PAR_EVEN); portSettings.setStopBits(QPortSettings::STOP_2); QVERIFY( serialPortInvalid_->setPortSettings(portSettings) ); QCOMPARE( serialPortInvalid_->baudRate(), QPortSettings::BAUDR_38400 ); QCOMPARE( serialPortInvalid_->dataBits(), QPortSettings::DB_5 ); QCOMPARE( serialPortInvalid_->flowControl(), QPortSettings::FLOW_OFF ); QCOMPARE( serialPortInvalid_->parity(), QPortSettings::PAR_EVEN ); QCOMPARE( serialPortInvalid_->stopBits(), QPortSettings::STOP_2 ); } void QSerialPortUnitTest::test_validport_set_commtimeouts() { using namespace TNX; // Mac OSX doesn't allow us to set anything higher than 255 CommTimeouts commtimeouts; #if !defined(Q_OS_WIN) commtimeouts.PosixVMIN = 0; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortValid_->commTimeouts().PosixVMIN, 0 ); commtimeouts.PosixVMIN = 255; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortValid_->commTimeouts().PosixVMIN, 255 ); commtimeouts.PosixVMIN = 128; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortValid_->commTimeouts().PosixVMIN, 128 ); commtimeouts.PosixVTIME = 0; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortValid_->commTimeouts().PosixVTIME, 0 ); commtimeouts.PosixVTIME = 255; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortValid_->commTimeouts().PosixVTIME, 255 ); commtimeouts.PosixVTIME = 128; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortValid_->commTimeouts().PosixVTIME, 128 ); #else commtimeouts.Win32ReadIntervalTimeout = 0; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadIntervalTimeout, (DWORD)0 ); commtimeouts.Win32ReadIntervalTimeout = 1000; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadIntervalTimeout, (DWORD)1000 ); commtimeouts.Win32ReadIntervalTimeout = -1; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadIntervalTimeout, (DWORD)-1 ); // commtimeouts.Win32ReadTotalTimeoutConstant = 0; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadTotalTimeoutConstant, (DWORD)0 ); commtimeouts.Win32ReadTotalTimeoutConstant = 1000; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadTotalTimeoutConstant, (DWORD)1000 ); commtimeouts.Win32ReadTotalTimeoutConstant = -1; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadTotalTimeoutConstant, (DWORD)-1 ); // commtimeouts.Win32ReadTotalTimeoutMultiplier = 0; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadTotalTimeoutMultiplier, (DWORD)0 ); commtimeouts.Win32ReadTotalTimeoutMultiplier = 1000; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadTotalTimeoutMultiplier, (DWORD)1000 ); commtimeouts.Win32ReadTotalTimeoutMultiplier = -1; //QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); //QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32ReadTotalTimeoutMultiplier, (DWORD)-1 ); QVERIFY( !serialPortValid_->setCommTimeouts(commtimeouts) ); // Reset the read timout values commtimeouts.Win32ReadTotalTimeoutMultiplier = 0; commtimeouts.Win32ReadTotalTimeoutConstant = 0; commtimeouts.Win32ReadIntervalTimeout = 0; // commtimeouts.Win32WriteTotalTimeoutConstant = 0; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32WriteTotalTimeoutConstant, (DWORD)0 ); commtimeouts.Win32WriteTotalTimeoutConstant = 1000; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32WriteTotalTimeoutConstant, (DWORD)1000 ); commtimeouts.Win32WriteTotalTimeoutConstant = -1; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32WriteTotalTimeoutConstant, (DWORD)-1 ); // commtimeouts.Win32WriteTotalTimeoutMultiplier = 0; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32WriteTotalTimeoutMultiplier, (DWORD)0 ); commtimeouts.Win32WriteTotalTimeoutMultiplier = 1000; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32WriteTotalTimeoutMultiplier, (DWORD)1000 ); commtimeouts.Win32WriteTotalTimeoutMultiplier = -1; QCOMPARE( serialPortValid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortValid_->commTimeouts().Win32WriteTotalTimeoutMultiplier, (DWORD)-1 ); #endif serialPortValid_->setReadNotifyThreshold(5); QCOMPARE( serialPortValid_->readNotifyThreshold(), 5 ); serialPortValid_->setReadNotifyThreshold(0); QCOMPARE( serialPortValid_->readNotifyThreshold(), 1 ); serialPortValid_->setReadNotifyThreshold(-1); QCOMPARE( serialPortValid_->readNotifyThreshold(), 1 ); serialPortValid_->setReadNotifyThreshold(9999); QCOMPARE( serialPortValid_->readNotifyThreshold(), 1024 ); } void QSerialPortUnitTest::test_invalidport_set_commtimeouts() { using namespace TNX; CommTimeouts commtimeouts; #if !defined(Q_OS_WIN) commtimeouts.PosixVMIN = 0; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortInvalid_->commTimeouts().PosixVMIN, 0 ); commtimeouts.PosixVMIN = 255; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortInvalid_->commTimeouts().PosixVMIN, 255 ); commtimeouts.PosixVMIN = 128; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortInvalid_->commTimeouts().PosixVMIN, 128 ); commtimeouts.PosixVTIME = 0; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortInvalid_->commTimeouts().PosixVTIME, 0 ); commtimeouts.PosixVTIME = 255; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortInvalid_->commTimeouts().PosixVTIME, 255 ); commtimeouts.PosixVTIME = 128; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (int)serialPortInvalid_->commTimeouts().PosixVTIME, 128 ); #else commtimeouts.Win32ReadIntervalTimeout = 0; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadIntervalTimeout, (DWORD)0 ); commtimeouts.Win32ReadIntervalTimeout = 1000; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadIntervalTimeout, (DWORD)1000 ); commtimeouts.Win32ReadIntervalTimeout = -1; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadIntervalTimeout, (DWORD)-1 ); // commtimeouts.Win32ReadTotalTimeoutConstant = 0; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadTotalTimeoutConstant, (DWORD)0 ); commtimeouts.Win32ReadTotalTimeoutConstant = 1000; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadTotalTimeoutConstant, (DWORD)1000 ); commtimeouts.Win32ReadTotalTimeoutConstant = -1; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadTotalTimeoutConstant, (DWORD)-1 ); // commtimeouts.Win32ReadTotalTimeoutMultiplier = 0; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadTotalTimeoutMultiplier, (DWORD)0 ); commtimeouts.Win32ReadTotalTimeoutMultiplier = 1000; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadTotalTimeoutMultiplier, (DWORD)1000 ); commtimeouts.Win32ReadTotalTimeoutMultiplier = -1; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32ReadTotalTimeoutMultiplier, (DWORD)-1 ); // commtimeouts.Win32WriteTotalTimeoutConstant = 0; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32WriteTotalTimeoutConstant, (DWORD)0 ); commtimeouts.Win32WriteTotalTimeoutConstant = 1000; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32WriteTotalTimeoutConstant, (DWORD)1000 ); commtimeouts.Win32WriteTotalTimeoutConstant = -1; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32WriteTotalTimeoutConstant, (DWORD)-1 ); // commtimeouts.Win32WriteTotalTimeoutMultiplier = 0; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32WriteTotalTimeoutMultiplier, (DWORD)0 ); commtimeouts.Win32WriteTotalTimeoutMultiplier = 1000; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32WriteTotalTimeoutMultiplier, (DWORD)1000 ); commtimeouts.Win32WriteTotalTimeoutMultiplier = -1; QCOMPARE( serialPortInvalid_->setCommTimeouts(commtimeouts), true ); QCOMPARE( (DWORD)serialPortInvalid_->commTimeouts().Win32WriteTotalTimeoutMultiplier, (DWORD)-1 ); #endif serialPortInvalid_->setReadNotifyThreshold(5); QCOMPARE( serialPortInvalid_->readNotifyThreshold(), 5 ); serialPortInvalid_->setReadNotifyThreshold(0); QCOMPARE( serialPortInvalid_->readNotifyThreshold(), 1 ); serialPortInvalid_->setReadNotifyThreshold(-1); QCOMPARE( serialPortInvalid_->readNotifyThreshold(), 1 ); serialPortInvalid_->setReadNotifyThreshold(9999); QCOMPARE( serialPortInvalid_->readNotifyThreshold(), 1024 ); } void QSerialPortUnitTest::test_validport_readWrite() { using namespace TNX; char data[1024]; CommTimeouts commTimeouts; commTimeouts.PosixVMIN = 0; commTimeouts.PosixVTIME = 0; commTimeouts.Win32ReadIntervalTimeout = CommTimeouts::NoTimeout; commTimeouts.Win32ReadTotalTimeoutMultiplier = 0; commTimeouts.Win32ReadTotalTimeoutConstant = 0; QVERIFY( serialPortValid_->setCommTimeouts(commTimeouts) ); QCOMPARE( (int)serialPortValid_->read(data, 1024LL), 0 ); // when VMIN is set Mac OSX doesn't timeout read operation //TODO: hmm LInux behaves the same way too.. Investigate!! // commTimeouts.PosixVMIN = 1; // commTimeouts.PosixVTIME = 1; // commTimeouts.Win32ReadIntervalTimeout = 75; // commTimeouts.Win32ReadTotalTimeoutMultiplier = 0; // commTimeouts.Win32ReadTotalTimeoutConstant = 200; // QVERIFY( serialPortValid_->setCommTimeouts(commTimeouts) ); // QCOMPARE( (int)serialPortValid_->read(data, 1024LL), 0 ); commTimeouts.PosixVMIN = 0; commTimeouts.PosixVTIME = 10; commTimeouts.Win32ReadIntervalTimeout = 75; commTimeouts.Win32ReadTotalTimeoutMultiplier = 0; commTimeouts.Win32ReadTotalTimeoutConstant = 200; QVERIFY( serialPortValid_->setCommTimeouts(commTimeouts) ); QCOMPARE( (int)serialPortValid_->read(data, 1024LL), 0 ); } void QSerialPortUnitTest::test_invalidport_readWrite() { using namespace TNX; char data[1024]; CommTimeouts commTimeouts; commTimeouts.PosixVMIN = 0; commTimeouts.PosixVTIME = 0; commTimeouts.Win32ReadIntervalTimeout = CommTimeouts::NoTimeout; commTimeouts.Win32ReadTotalTimeoutMultiplier = 0; commTimeouts.Win32ReadTotalTimeoutConstant = 0; QVERIFY( serialPortValid_->setCommTimeouts(commTimeouts) ); QCOMPARE( (int)serialPortInvalid_->read(data, 1024LL), -1 ); } QTEST_MAIN(QSerialPortUnitTest)