Index: unittests/tst_canbus.cpp =================================================================== diff -u -re02b2d465b145702dc41965b2e7da154857eea75 -r44a85c96ab55e424866ec4cca0270aa218355f82 --- unittests/tst_canbus.cpp (.../tst_canbus.cpp) (revision e02b2d465b145702dc41965b2e7da154857eea75) +++ unittests/tst_canbus.cpp (.../tst_canbus.cpp) (revision 44a85c96ab55e424866ec4cca0270aa218355f82) @@ -1,25 +1,31 @@ /*! - * + * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. - * copyright - * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, - * IN PART OR IN WHOLE, - * WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. - * - * file tst_canbus.cpp - * date 11/21/2019 - * author Behrouz NematiPour - * + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file tst_canbus.cpp + * \author (last) Behrouz NemaiPour + * \date (last) 23-Jun-2020 + * \author (original) Behrouz NematiPour + * \date (original) 19-Dec-2019 + * */ #include "tst_canbus.h" // Project #include "caninterface.h" #include "frameinterface.h" -#include "messagedispatcher.h" using namespace Can; +/*! + * \brief tst_canbus::tst_canbus + * \details Constructor + * \param parent - QObject parent owner object. + * Qt handles the children destruction by their parent objects life-cycle. + */ tst_canbus::tst_canbus(QObject *parent) : QObject(parent) { } void tst_canbus::initTestCase() @@ -33,6 +39,7 @@ void tst_canbus::init() { _emited = false; + _Logger.init(); } void tst_canbus::tst_CanInterface_Connect_Error_Interface() @@ -63,23 +70,10 @@ _MessageDispatcher .init(); _MessageDispatcher .enableConsoleOut(true); - connect(&_MessageDispatcher, &MessageDispatcher::didFrameTransmit, [=](Can::Can_Id vCanId , const QByteArray &vPayload) { - _emited = true; - QCOMPARE(Format::toHexString(vPayload), _expected); - }); - connect(&_MessageDispatcher, &MessageDispatcher::didActionReceive, [=](Gui::GuiActionType vAction , const QVariantList &vData ) { - _emited = true; - QVERIFY(vAction == _action); - for (int i = 0; i < vData.length(); i++) { - if (! strcmp(vData[i].typeName(), "float")) { - float f1 = vData[i].toFloat(); - float f2 = _data[i].toFloat(); - QVERIFY(Types::floatCompare(f1, f2)); - } else { - QVERIFY(vData[i] == _data[i]); - } - } - }); + connect(&_MessageDispatcher , SIGNAL(didFrameTransmit(Can_Id , const QByteArray &)), + this , SLOT( onFrameTransmit(Can_Id , const QByteArray &))); + connect(&_MessageDispatcher , SIGNAL(didActionReceive(GuiActionType , const QVariantList &)), + this , SLOT( onActionReceive(GuiActionType , const QVariantList &))); } void tst_canbus::tst_FrameInterface_ReInit() @@ -90,52 +84,61 @@ void tst_canbus::tst_FrameInterface_ActionTransmit_KeepAlive() { - _expected = "A5.07.00.00.E3.00.00.00"; + _expected = "A5.01.00.07.00.00.30.00"; _MessageDispatcher.onActionTransmit(Gui::GuiActionType::KeepAlive, {}); QVERIFY(_emited); } void tst_canbus::tst_FrameInterface_TransmitFrame_LongerData() { _expected = QByteArray("123456789"); - _FrameInterface.transmitFrame(Can_Id::eChlid_HD, _expected); + _FrameInterface.transmitFrame(Can_Id::eChlid_HD_UI, _expected); QVERIFY( ! _emited ); //there is no signal call - Code Coverage only : Error : "Payload can't be larger than 8 bytes" } void tst_canbus::tst_FrameInterface_ActionTransmit_PowerOff_Accepted() { - _expected = "A5.01.00.01.01.5E.00.00"; + _expected = "A5.02.00.01.00.01.01.F0"; QVariantList mData {static_cast(Gui::GuiActionData::Accepted)}; _MessageDispatcher.onActionTransmit(Gui::GuiActionType::PowerOff, mData); QVERIFY(_emited); } void tst_canbus::tst_FrameInterface_ActionTransmit_PowerOff_Rejected() { - _expected = "A5.01.00.01.02.0D.00.00"; + _expected = "A5.03.00.01.00.01.02.F4"; QVariantList mData {static_cast(Gui::GuiActionData::Rejected)}; _MessageDispatcher.onActionTransmit(Gui::GuiActionType::PowerOff, mData); QVERIFY(_emited); } void tst_canbus::tst_FrameInterface_ActionTransmit_PowerOff() { - _expected = "A5.01.00.01.00.6F.00.00"; + _expected = "A5.04.00.01.00.01.00.02"; QVariantList mData {static_cast(Gui::GuiActionData::NoData)}; _MessageDispatcher.onActionTransmit(Gui::GuiActionType::PowerOff, mData); QVERIFY(_emited); } -void tst_canbus::tst_FrameInterface_ActionTransmit_LongFF() +void tst_canbus::tst_FrameInterface_ActionTransmit_Raw() { // An example of longest data transmission by Gui::GuiActionType::String // which can be as long as 255 byte. - _expected = "A5.FF.FF.03.41.42.43.EF"; - QVariantList mData {"ABC"}; + _expected = "A5.05.00.FF.FE.01.41.18"; + // A + QVariantList mData {"A"}; _MessageDispatcher.onActionTransmit(Gui::GuiActionType::String, mData); QVERIFY(_emited); } +void tst_canbus::tst_FrameInterface_ActionTransmit_ShortPayload() +{ + _expected = "A5.06.00.01.00.00.00.00"; + QVariantList mData {}; + _MessageDispatcher.onActionTransmit(Gui::GuiActionType::PowerOff, mData); + QVERIFY(! _emited); // not emitted due to short payload len +} + void tst_canbus::tst_FrameInterface_ActionTransmit_Unknown() { _expected = ""; @@ -149,8 +152,8 @@ _data = {0}; QCanBusFrame mFrame; QString mPayload; - mFrame.setFrameId(Can_Id::eChlid_HD); - mPayload = "A5.01.00.01.00.6F.00.00"; + mFrame.setFrameId(Can_Id::eChlid_HD_UI); + mPayload = "A5.01.00.01.00.01.00.38"; mFrame.setPayload(QByteArray::fromHex(mPayload.remove(QLatin1Char('.')).toLatin1())); emit _CanInterface.didFrameReceive(mFrame); QVERIFY(_emited); @@ -162,8 +165,8 @@ _data = {1}; QCanBusFrame mFrame; QString mPayload; - mFrame.setFrameId(Can_Id::eChlid_HD); - mPayload = "A5.01.00.01.01.5E.00.00"; + mFrame.setFrameId(Can_Id::eChlid_HD_UI); + mPayload = "A5.02.00.01.00.01.01.F0"; mFrame.setPayload(QByteArray::fromHex(mPayload.remove(QLatin1Char('.')).toLatin1())); emit _CanInterface.didFrameReceive(mFrame); QVERIFY(_emited); @@ -176,7 +179,7 @@ QCanBusFrame mFrame; QString mPayload; mFrame.setFrameId(Can_Id::eChlid_HD_DG); - mPayload = "A5.01.00.01.01.5E.00.00"; + mPayload = "A5.03.00.01.00.01.01.XX"; mFrame.setPayload(QByteArray::fromHex(mPayload.remove(QLatin1Char('.')).toLatin1())); emit _CanInterface.didFrameReceive(mFrame); QVERIFY( ! _emited ); // should not be emitted due to not listening channel @@ -201,7 +204,7 @@ _data = {0}; QCanBusFrame mFrame; QString mPayload; - mFrame.setFrameId(Can_Id::eChlid_HD); + mFrame.setFrameId(Can_Id::eChlid_HD_UI); mPayload = "A5.01.00.01.00.66.00.00"; mFrame.setPayload(QByteArray::fromHex(mPayload.remove(QLatin1Char('.')).toLatin1())); emit _CanInterface.didFrameReceive(mFrame); @@ -214,11 +217,11 @@ _data = {0}; QCanBusFrame mFrame; QString mPayload; - mFrame.setFrameId(Can_Id::eChlid_HD); + mFrame.setFrameId(Can_Id::eChlid_HD_UI); mPayload = "A5.01.00.01.00.6F"; mFrame.setPayload(QByteArray::fromHex(mPayload.remove(QLatin1Char('.')).toLatin1())); emit _CanInterface.didFrameReceive(mFrame); - QVERIFY(_emited); // Should not emit due to crc error + QVERIFY( ! _emited); // Should not emit due to frame length less than 8 } void tst_canbus::tst_FrameInterface_FrameReceived_LongFrame_Error() @@ -227,11 +230,11 @@ _data = {0}; QCanBusFrame mFrame; QString mPayload; - mFrame.setFrameId(Can_Id::eChlid_HD); - mPayload = "A5.01.00.01.00.6F.FF.FF.FF"; + mFrame.setFrameId(Can_Id::eChlid_HD_UI); + mPayload = "A5.04.00.01.00.01.00.6F.FF.FF"; mFrame.setPayload(QByteArray::fromHex(mPayload.remove(QLatin1Char('.')).toLatin1())); emit _CanInterface.didFrameReceive(mFrame); - QVERIFY(_emited); // Should not emit due to crc error + QVERIFY( ! _emited); // Should not emit due to crc error } void tst_canbus::tst_FrameInterface_FrameReceived_LongFrame_BloodFlow() @@ -241,17 +244,17 @@ QCanBusFrame mFrame; mFrame.setFrameId(Can_Id::eChlid_HD_Sync); QStringList mPayloadList { - "a5.05.00.1c.70.fe.ff.ff" , - "00.c0.c6.c3.9a.99.d1.c1" , - "00.00.fa.c4.00.50.fa.c4" , - "00.30.22.44.00.00.7a.42" , - "c4.00.00.00.00.00.00.00" , + "a5.0a.00.05.00.1c.70.fe" , + "ff.ff.00.c0.c6.c3.9a.99" , + "d1.c1.00.00.fa.c4.00.50" , + "fa.c4.00.30.22.44.00.00" , + "7a.42.fb.00.00.00.00.00" , }; for ( QString payload : mPayloadList ) { mFrame.setPayload(QByteArray::fromHex(payload.remove(QLatin1Char('.')).toLatin1())); emit _CanInterface.didFrameReceive(mFrame); } - QVERIFY(_emited); // Should not emit due to crc error + QVERIFY(_emited); } void tst_canbus::tst_FrameInterface_FrameReceived_LongFrame_BloodFlow_LessData() @@ -285,9 +288,10 @@ QCanBusFrame mFrame; mFrame.setFrameId(Can_Id::eChlid_HD_Alarm); QStringList mPayloadList { - "a5.02.00.12.02.00.00.00" , - "0a.00.00.00.3c.00.00.00" , - "1e.00.00.00.12.03.bb.00" , + "a5.0b.00.02.00.12.02.00" , + "00.00.0a.00.00.00.3c.00" , + "00.00.1e.00.00.00.12.03" , + "20.00.00.00.00.00.00.00" , }; for ( QString payload : mPayloadList ) { mFrame.setPayload(QByteArray::fromHex(payload.remove(QLatin1Char('.')).toLatin1())); @@ -318,6 +322,16 @@ QVERIFY( ! _emited ); // Should not emit due to - ERROR : "Incorrect data for Message ID (HD) '0x0200'" } +void tst_canbus::tst_FrameInterface_FrameReceived_removeHead_EmptyList() +{ + FrameInterface frame; + frame.init(); + QVERIFY(frame._txFrameList.isEmpty()); + frame.removeHead(); + // if the code doesn't work and calls the removeFirst of and empty list it will assert. + QVERIFY(true); +} + void tst_canbus::cleanup() { } @@ -328,3 +342,25 @@ QString mTr = tr("Disconnected"); QCOMPARE(_CanInterface.status().left(mTr.length()), mTr); } + +void tst_canbus::onFrameTransmit(Can_Id vCan_Id, const QByteArray &vPayload) +{ + Q_UNUSED(vCan_Id) + _emited = true; + QCOMPARE(Format::toHexString(vPayload), _expected); +} + +void tst_canbus::onActionReceive(Gui::GuiActionType vAction, const QVariantList &vData) +{ + _emited = true; + QVERIFY(vAction == _action); + for (int i = 0; i < vData.length(); i++) { + if (! strcmp(vData[i].typeName(), "float")) { + float f1 = vData[i].toFloat(); + float f2 = _data[i].toFloat(); + QVERIFY(Types::floatCompare(f1, f2)); + } else { + QVERIFY(vData[i] == _data[i]); + } + } +}