/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtSerialBus module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL3$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPLv3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or later as published by the Free ** Software Foundation and appearing in the file LICENSE.GPL included in ** the packaging of this file. Please review the following information to ** ensure the GNU General Public License version 2.0 requirements will be ** met: http://www.gnu.org/licenses/gpl-2.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include class tst_QModbusDataUnit : public QObject { Q_OBJECT public: explicit tst_QModbusDataUnit(); private slots: void constructors(); void setters(); void testAPI(); }; tst_QModbusDataUnit::tst_QModbusDataUnit() { } void tst_QModbusDataUnit::constructors() { QModbusDataUnit unit1(QModbusDataUnit::Coils); QCOMPARE(unit1.registerType(), QModbusDataUnit::Coils); QCOMPARE(unit1.startAddress(), 0); QCOMPARE(unit1.valueCount(), 0u); QVERIFY(unit1.values().isEmpty()); QModbusDataUnit coils(QModbusDataUnit::Coils, 15, 20); QCOMPARE(coils.registerType(), QModbusDataUnit::Coils); QCOMPARE(coils.startAddress(), 15); const auto values = coils.values(); QCOMPARE(values.size(), 20); QCOMPARE(values, QVector(20)); for (auto val : values) { QCOMPARE(val, quint16(0)); } QCOMPARE(coils.valueCount(), 20u); QModbusDataUnit unit2(QModbusDataUnit::HoldingRegisters, 3, QVector() << 9); QCOMPARE(unit2.registerType(), QModbusDataUnit::HoldingRegisters); QCOMPARE(unit2.startAddress(), 3); QCOMPARE(unit2.values().size(), 1); QCOMPARE(unit2.values().at(0), (quint16) 9); QCOMPARE(unit2.valueCount(), 1u); QVector data; data.append(5); data.append(6); data.append(7); QModbusDataUnit unit3(QModbusDataUnit::InputRegisters, 2, data); QCOMPARE(unit3.registerType(), QModbusDataUnit::InputRegisters); QCOMPARE(unit3.startAddress(), 2); QCOMPARE(unit3.values().size(), 3); QCOMPARE(unit3.values().at(0), (quint16) 5); QCOMPARE(unit3.values().at(1), (quint16) 6); QCOMPARE(unit3.values().at(2), (quint16) 7); QCOMPARE(unit3.valueCount(), 3u); } void tst_QModbusDataUnit::setters() { QModbusDataUnit unit(QModbusDataUnit::HoldingRegisters, 3, QVector() << 9); QCOMPARE(unit.valueCount(), 1u); unit.setRegisterType(QModbusDataUnit::InputRegisters); unit.setStartAddress(2); QVector data; data.append(9u); data.append(5u); unit.setValues(data); QCOMPARE(unit.registerType(), QModbusDataUnit::InputRegisters); QCOMPARE(unit.startAddress(), 2); QCOMPARE(unit.valueCount(), 2u); QCOMPARE(unit.values().size(), 2); QCOMPARE(unit.values().at(0), (quint16) 9); QCOMPARE(unit.values().at(1), (quint16) 5); //valueCount can be adjusted but values() stays the same unit.setValueCount(1); QCOMPARE(unit.valueCount(), 1u); QCOMPARE(unit.values().size(), 2); QCOMPARE(unit.values().at(0), (quint16) 9); QCOMPARE(unit.values().at(1), (quint16) 5); } void tst_QModbusDataUnit::testAPI() { { QModbusDataUnit unit; QCOMPARE(unit.isValid(), false); unit.setStartAddress(15); QCOMPARE(unit.isValid(), false); unit.setRegisterType(QModbusDataUnit::Coils); QCOMPARE(unit.isValid(), true); } { QModbusDataUnit unit; QCOMPARE(unit.isValid(), false); unit.setRegisterType(QModbusDataUnit::Coils); QCOMPARE(unit.isValid(), false); unit.setStartAddress(15); QCOMPARE(unit.isValid(), true); } QModbusDataUnit unit; QCOMPARE(unit.isValid(), false); QCOMPARE(unit.registerType(), QModbusDataUnit::Invalid); QCOMPARE(unit.startAddress(), -1); QCOMPARE(unit.valueCount(), 0u); QCOMPARE(unit.values(), QVector()); unit.setStartAddress(15); unit.setRegisterType(QModbusDataUnit::Coils); QCOMPARE(unit.isValid(), true); QCOMPARE(unit.values(), QVector()); unit.setValues(QVector {1, 2, 3, 4}); QCOMPARE(unit.values(), QVector({1, 2, 3, 4})); QCOMPARE(unit.valueCount(), 4u); unit.setValueCount(25); QCOMPARE(unit.valueCount(), 25u); QCOMPARE(unit.value(0), quint16(1)); unit.setValue(0, 25); QCOMPARE(unit.value(0), quint16(25)); } QTEST_MAIN(tst_QModbusDataUnit) #include "tst_qmodbusdataunit.moc"