From 4cceba3b7897ff6d95d92ebc30d087cc6cddfabd Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Fri, 23 Oct 2015 14:35:22 -0700 Subject: [PATCH] Add MissionController unit test --- QGCApplication.pro | 4 + src/MissionManager/MissionController.cc | 7 + src/MissionManager/MissionControllerTest.cc | 185 ++++++++++++++++++++ src/MissionManager/MissionControllerTest.h | 78 +++++++++ src/MissionManager/MissionManagerTest.cc | 137 ++------------- src/MissionManager/MissionManagerTest.h | 55 +----- 6 files changed, 295 insertions(+), 171 deletions(-) create mode 100644 src/MissionManager/MissionControllerTest.cc create mode 100644 src/MissionManager/MissionControllerTest.h diff --git a/QGCApplication.pro b/QGCApplication.pro index 9bf7968ec..fe63a872e 100644 --- a/QGCApplication.pro +++ b/QGCApplication.pro @@ -454,6 +454,8 @@ HEADERS += \ src/FactSystem/FactSystemTestGeneric.h \ src/FactSystem/FactSystemTestPX4.h \ src/MissionItemTest.h \ + src/MissionManager/MissionControllerTest.h \ + src/MissionManager/MissionControllerManagerTest.h \ src/MissionManager/MissionManagerTest.h \ src/qgcunittest/FileDialogTest.h \ src/qgcunittest/FileManagerTest.h \ @@ -474,6 +476,8 @@ SOURCES += \ src/FactSystem/FactSystemTestGeneric.cc \ src/FactSystem/FactSystemTestPX4.cc \ src/MissionItemTest.cc \ + src/MissionManager/MissionControllerTest.cc \ + src/MissionManager/MissionControllerManagerTest.cc \ src/MissionManager/MissionManagerTest.cc \ src/qgcunittest/FileDialogTest.cc \ src/qgcunittest/FileManagerTest.cc \ diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 0e05c1799..c2af228ca 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -446,6 +446,13 @@ void MissionController::_activeVehicleChanged(Vehicle* activeVehicle) void MissionController::_activeVehicleHomePositionAvailableChanged(bool homePositionAvailable) { + MissionItem* homeItem = qobject_cast(_missionItems->get(0)); + + if (homePositionAvailable) { + homeItem->setCoordinate(_liveHomePosition); + } + homeItem->setHomePositionValid(homePositionAvailable); + _liveHomePositionAvailable = homePositionAvailable; emit liveHomePositionAvailableChanged(_liveHomePositionAvailable); } diff --git a/src/MissionManager/MissionControllerTest.cc b/src/MissionManager/MissionControllerTest.cc new file mode 100644 index 000000000..535d08d6e --- /dev/null +++ b/src/MissionManager/MissionControllerTest.cc @@ -0,0 +1,185 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2014 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL 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 General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +#include "MissionControllerTest.h" +#include "LinkManager.h" +#include "MultiVehicleManager.h" + +UT_REGISTER_TEST(MissionControllerTest) + +MissionControllerTest::MissionControllerTest(void) + : _missionController(NULL) +{ + +} + +void MissionControllerTest::cleanup(void) +{ + delete _missionController; + + MissionControllerManagerTest::cleanup(); +} + +void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType) +{ + MissionControllerManagerTest::_initForFirmwareType(firmwareType); + + _rgSignals[missionItemsChangedSignalIndex] = SIGNAL(missionItemsChanged()); + _rgSignals[waypointLinesChangedSignalIndex] = SIGNAL(waypointLinesChanged()); + _rgSignals[liveHomePositionAvailableChangedSignalIndex] = SIGNAL(liveHomePositionAvailableChanged(bool)); + _rgSignals[liveHomePositionChangedSignalIndex] = SIGNAL(liveHomePositionChanged(const QGeoCoordinate&)); + + _missionController = new MissionController(); + Q_CHECK_PTR(_missionController); + + _multiSpy = new MultiSignalSpy(); + Q_CHECK_PTR(_multiSpy); + QCOMPARE(_multiSpy->init(_missionController, _rgSignals, _cSignals), true); + + _missionController->start(false /* editMode */); + + // All signals should some through on start + QCOMPARE(_multiSpy->checkOnlySignalByMask(missionItemsChangedSignalMask | waypointLinesChangedSignalMask | liveHomePositionAvailableChangedSignalMask | liveHomePositionChangedSignalMask), true); + _multiSpy->clearAllSignals(); + + QmlObjectListModel* missionItems = _missionController->missionItems(); + QVERIFY(missionItems); + + // Empty vehicle only has home position + QCOMPARE(missionItems->count(), 1); + + // Home position should be in first slot + MissionItem* homeItem = qobject_cast(missionItems->get(0)); + QVERIFY(homeItem); + QCOMPARE(homeItem->homePosition(), true); + + // Home should have no children + QCOMPARE(homeItem->childItems()->count(), 0); + + // No waypoint lines + QmlObjectListModel* waypointLines = _missionController->waypointLines(); + QVERIFY(waypointLines); + QCOMPARE(waypointLines->count(), 0); + + // Should not have home position yet + QCOMPARE(_missionController->liveHomePositionAvailable(), false); + + // AutoSync should be off by default + QCOMPARE(_missionController->autoSync(), false); +} + +void MissionControllerTest::_testEmptyVehicleWorker(MAV_AUTOPILOT firmwareType) +{ + _initForFirmwareType(firmwareType); + + // FYI: A significant amount of empty vehicle testing is in _initForFirmwareType since that + // sets up an empty vehicle + + // APM stack doesn't support HOME_POSITION yet + bool expectedHomePositionValid = firmwareType == MAV_AUTOPILOT_PX4 ? true : false; + + QmlObjectListModel* missionItems = _missionController->missionItems(); + QVERIFY(missionItems); + MissionItem* homeItem = qobject_cast(missionItems->get(0)); + QVERIFY(homeItem); + + if (expectedHomePositionValid) { + // Wait for the home position to show up + + if (!_missionController->liveHomePositionAvailable()) { + QVERIFY(_multiSpy->waitForSignalByIndex(liveHomePositionChangedSignalIndex, 2000)); + + // Once the home position shows up we get a number of addititional signals + QCOMPARE(_multiSpy->checkOnlySignalsByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask | waypointLinesChangedSignalMask), true); + + // These should be signalled once + QCOMPARE(_multiSpy->checkSignalByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask), true); + + // Waypoint lines get spit out multiple tiems + QCOMPARE(_multiSpy->checkSignalByMask(waypointLinesChangedSignalMask), false); + + _multiSpy->clearAllSignals(); + } + } + + QCOMPARE(homeItem->homePositionValid(), expectedHomePositionValid); + QCOMPARE(_missionController->liveHomePositionAvailable(), expectedHomePositionValid); + QCOMPARE(_missionController->liveHomePosition().isValid(), expectedHomePositionValid); +} + +void MissionControllerTest::_testEmptyVehiclePX4(void) +{ + _testEmptyVehicleWorker(MAV_AUTOPILOT_PX4); +} + +void MissionControllerTest::_testEmptyVehicleAPM(void) +{ + _testEmptyVehicleWorker(MAV_AUTOPILOT_ARDUPILOTMEGA); +} + +void MissionControllerTest::_testAddWaypointWorker(MAV_AUTOPILOT firmwareType) +{ + _initForFirmwareType(firmwareType); + + QGeoCoordinate coordinate(37.803784, -122.462276); + + _missionController->addMissionItem(coordinate); + + QCOMPARE(_multiSpy->checkOnlySignalsByMask(waypointLinesChangedSignalMask), true); + + QmlObjectListModel* missionItems = _missionController->missionItems(); + QVERIFY(missionItems); + + QCOMPARE(missionItems->count(), 2); + + MissionItem* homeItem = qobject_cast(missionItems->get(0)); + MissionItem* item = qobject_cast(missionItems->get(1)); + QVERIFY(homeItem); + QVERIFY(item); + + QCOMPARE(item->command(), MavlinkQmlSingleton::MAV_CMD_NAV_TAKEOFF); + QCOMPARE(homeItem->childItems()->count(), 0); + QCOMPARE(item->childItems()->count(), 0); + + int expectedLineCount; + if (homeItem->homePositionValid()) { + expectedLineCount = 1; + } else { + expectedLineCount = 0; + } + + QmlObjectListModel* waypointLines = _missionController->waypointLines(); + QVERIFY(waypointLines); + QCOMPARE(waypointLines->count(), expectedLineCount); +} + +void MissionControllerTest::_testAddWayppointAPM(void) +{ + _testAddWaypointWorker(MAV_AUTOPILOT_ARDUPILOTMEGA); +} + + +void MissionControllerTest::_testAddWayppointPX4(void) +{ + _testAddWaypointWorker(MAV_AUTOPILOT_PX4); +} diff --git a/src/MissionManager/MissionControllerTest.h b/src/MissionManager/MissionControllerTest.h new file mode 100644 index 000000000..8ac9b6363 --- /dev/null +++ b/src/MissionManager/MissionControllerTest.h @@ -0,0 +1,78 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2015 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL 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 General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +#ifndef MissionControllerTest_H +#define MissionControllerTest_H + +#include "UnitTest.h" +#include "MockLink.h" +#include "MissionManager.h" +#include "MultiSignalSpy.h" +#include "MissionControllerManagerTest.h" +#include "MissionController.h" + +#include + +class MissionControllerTest : public MissionControllerManagerTest +{ + Q_OBJECT + +public: + MissionControllerTest(void); + +private slots: + void cleanup(void); + + void _testEmptyVehicleAPM(void); + void _testEmptyVehiclePX4(void); + void _testAddWayppointAPM(void); + void _testAddWayppointPX4(void); + +private: + void _initForFirmwareType(MAV_AUTOPILOT firmwareType); + void _testEmptyVehicleWorker(MAV_AUTOPILOT firmwareType); + void _testAddWaypointWorker(MAV_AUTOPILOT firmwareType); + + enum { + missionItemsChangedSignalIndex = 0, + waypointLinesChangedSignalIndex, + liveHomePositionAvailableChangedSignalIndex, + liveHomePositionChangedSignalIndex, + maxSignalIndex + }; + + enum { + missionItemsChangedSignalMask = 1 << missionItemsChangedSignalIndex, + waypointLinesChangedSignalMask = 1 << waypointLinesChangedSignalIndex, + liveHomePositionAvailableChangedSignalMask = 1 << liveHomePositionAvailableChangedSignalIndex, + liveHomePositionChangedSignalMask = 1 << liveHomePositionChangedSignalIndex, + }; + + MultiSignalSpy* _multiSpy; + static const size_t _cSignals = maxSignalIndex; + const char* _rgSignals[_cSignals]; + + MissionController* _missionController; +}; + +#endif diff --git a/src/MissionManager/MissionManagerTest.cc b/src/MissionManager/MissionManagerTest.cc index 5605dfb04..1f2d9937b 100644 --- a/src/MissionManager/MissionManagerTest.cc +++ b/src/MissionManager/MissionManagerTest.cc @@ -40,101 +40,10 @@ const MissionManagerTest::TestCase_t MissionManagerTest::_rgTestCases[] = { const size_t MissionManagerTest::_cTestCases = sizeof(_rgTestCases)/sizeof(_rgTestCases[0]); MissionManagerTest::MissionManagerTest(void) - : _mockLink(NULL) { } -void MissionManagerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType) -{ - UnitTest::init(); - - LinkManager* linkMgr = LinkManager::instance(); - Q_CHECK_PTR(linkMgr); - - _mockLink = new MockLink(); - Q_CHECK_PTR(_mockLink); - _mockLink->setFirmwareType(firmwareType); - LinkManager::instance()->_addLink(_mockLink); - - linkMgr->connectLink(_mockLink); - - // Wait for the Vehicle to work it's way through the various threads - - QSignalSpy spyVehicle(MultiVehicleManager::instance(), SIGNAL(activeVehicleChanged(Vehicle*))); - QCOMPARE(spyVehicle.wait(5000), true); - - // Wait for the Mission Manager to finish it's initial load - - _missionManager = MultiVehicleManager::instance()->activeVehicle()->missionManager(); - QVERIFY(_missionManager); - - _rgSignals[canEditChangedSignalIndex] = SIGNAL(canEditChanged(bool)); - _rgSignals[newMissionItemsAvailableSignalIndex] = SIGNAL(newMissionItemsAvailable(void)); - _rgSignals[inProgressChangedSignalIndex] = SIGNAL(inProgressChanged(bool)); - _rgSignals[errorSignalIndex] = SIGNAL(error(int, const QString&)); - - _multiSpy = new MultiSignalSpy(); - Q_CHECK_PTR(_multiSpy); - QCOMPARE(_multiSpy->init(_missionManager, _rgSignals, _cSignals), true); - - if (_missionManager->inProgress()) { - _multiSpy->waitForSignalByIndex(newMissionItemsAvailableSignalIndex, _signalWaitTime); - _multiSpy->waitForSignalByIndex(inProgressChangedSignalIndex, _signalWaitTime); - QCOMPARE(_multiSpy->checkSignalByMask(newMissionItemsAvailableSignalMask | inProgressChangedSignalMask), true); - QCOMPARE(_multiSpy->checkNoSignalByMask(canEditChangedSignalIndex), true); - } - - QVERIFY(!_missionManager->inProgress()); - QCOMPARE(_missionManager->missionItems()->count(), 0); - _multiSpy->clearAllSignals(); -} - -void MissionManagerTest::cleanup(void) -{ - delete _multiSpy; - _multiSpy = NULL; - - LinkManager::instance()->disconnectLink(_mockLink); - _mockLink = NULL; - QTest::qWait(1000); // Need to allow signals to move between threads - - UnitTest::cleanup(); -} - -/// Checks the state of the inProgress value and signal to match the specified value -void MissionManagerTest::_checkInProgressValues(bool inProgress) -{ - QCOMPARE(_missionManager->inProgress(), inProgress); - QSignalSpy* spy = _multiSpy->getSpyByIndex(inProgressChangedSignalIndex); - QList signalArgs = spy->takeFirst(); - QCOMPARE(signalArgs.count(), 1); - QCOMPARE(signalArgs[0].toBool(), inProgress); -} - -void MissionManagerTest::_readEmptyVehicleWorker(void) -{ - _missionManager->requestMissionItems(); - - // requestMissionItems should emit inProgressChanged signal before returning so no need to wait for it - QVERIFY(_missionManager->inProgress()); - QCOMPARE(_multiSpy->checkOnlySignalByMask(inProgressChangedSignalMask), true); - _checkInProgressValues(true); - - _multiSpy->clearAllSignals(); - - // Now wait for read sequence to complete. We should get both a newMissionItemsAvailable and a - // inProgressChanged signal to signal completion. - _multiSpy->waitForSignalByIndex(newMissionItemsAvailableSignalIndex, _signalWaitTime); - _multiSpy->waitForSignalByIndex(inProgressChangedSignalIndex, _signalWaitTime); - QCOMPARE(_multiSpy->checkOnlySignalByMask(newMissionItemsAvailableSignalMask | inProgressChangedSignalMask), true); - _checkInProgressValues(false); - - // Vehicle should have no items at this point - QCOMPARE(_missionManager->missionItems()->count(), 0); - QCOMPARE(_missionManager->canEdit(), true); -} - void MissionManagerTest::_writeItems(MockLinkMissionItemHandler::FailureMode_t failureMode, MissionManager::ErrorCode_t errorCode, bool failFirstTimeOnly) { _mockLink->setMissionItemFailureMode(failureMode, failFirstTimeOnly); @@ -181,18 +90,18 @@ void MissionManagerTest::_writeItems(MockLinkMissionItemHandler::FailureMode_t f // inProgressChanged // newMissionItemsAvailable QVERIFY(_missionManager->inProgress()); - QCOMPARE(_multiSpy->checkSignalByMask(inProgressChangedSignalMask | newMissionItemsAvailableSignalMask), true); + QCOMPARE(_multiSpyMissionManager->checkSignalByMask(inProgressChangedSignalMask | newMissionItemsAvailableSignalMask), true); _checkInProgressValues(true); - _multiSpy->clearAllSignals(); + _multiSpyMissionManager->clearAllSignals(); if (failureMode == MockLinkMissionItemHandler::FailNone) { // This should be clean run // Wait for write sequence to complete. We should get: // inProgressChanged(false) signal - _multiSpy->waitForSignalByIndex(inProgressChangedSignalIndex, _signalWaitTime); - QCOMPARE(_multiSpy->checkOnlySignalByMask(inProgressChangedSignalMask), true); + _multiSpyMissionManager->waitForSignalByIndex(inProgressChangedSignalIndex, _missionManagerSignalWaitTime); + QCOMPARE(_multiSpyMissionManager->checkOnlySignalByMask(inProgressChangedSignalMask), true); // Validate inProgressChanged signal value _checkInProgressValues(false); @@ -214,14 +123,14 @@ void MissionManagerTest::_writeItems(MockLinkMissionItemHandler::FailureMode_t f // Wait for write sequence to complete. We should get: // inProgressChanged(false) signal // error(errorCode, QString) signal - _multiSpy->waitForSignalByIndex(inProgressChangedSignalIndex, _signalWaitTime); - QCOMPARE(_multiSpy->checkSignalByMask(inProgressChangedSignalMask | errorSignalMask), true); + _multiSpyMissionManager->waitForSignalByIndex(inProgressChangedSignalIndex, _missionManagerSignalWaitTime); + QCOMPARE(_multiSpyMissionManager->checkSignalByMask(inProgressChangedSignalMask | errorSignalMask), true); // Validate inProgressChanged signal value _checkInProgressValues(false); // Validate error signal values - QSignalSpy* spy = _multiSpy->getSpyByIndex(errorSignalIndex); + QSignalSpy* spy = _multiSpyMissionManager->getSpyByIndex(errorSignalIndex); QList signalArgs = spy->takeFirst(); QCOMPARE(signalArgs.count(), 2); qDebug() << signalArgs[1].toString(); @@ -234,7 +143,7 @@ void MissionManagerTest::_writeItems(MockLinkMissionItemHandler::FailureMode_t f delete list; list = NULL; - _multiSpy->clearAllSignals(); + _multiSpyMissionManager->clearAllSignals(); } void MissionManagerTest::_roundTripItems(MockLinkMissionItemHandler::FailureMode_t failureMode, MissionManager::ErrorCode_t errorCode, bool failFirstTimeOnly) @@ -252,10 +161,10 @@ void MissionManagerTest::_roundTripItems(MockLinkMissionItemHandler::FailureMode // requestMissionItems should emit inProgressChanged signal before returning so no need to wait for it QVERIFY(_missionManager->inProgress()); - QCOMPARE(_multiSpy->checkOnlySignalByMask(inProgressChangedSignalMask), true); + QCOMPARE(_multiSpyMissionManager->checkOnlySignalByMask(inProgressChangedSignalMask), true); _checkInProgressValues(true); - _multiSpy->clearAllSignals(); + _multiSpyMissionManager->clearAllSignals(); if (failureMode == MockLinkMissionItemHandler::FailNone) { // This should be clean run @@ -263,9 +172,9 @@ void MissionManagerTest::_roundTripItems(MockLinkMissionItemHandler::FailureMode // Now wait for read sequence to complete. We should get: // inProgressChanged(false) signal to signal completion // newMissionItemsAvailable signal - _multiSpy->waitForSignalByIndex(inProgressChangedSignalIndex, _signalWaitTime); - QCOMPARE(_multiSpy->checkSignalByMask(newMissionItemsAvailableSignalMask | inProgressChangedSignalMask), true); - QCOMPARE(_multiSpy->checkNoSignalByMask(canEditChangedSignalMask), true); + _multiSpyMissionManager->waitForSignalByIndex(inProgressChangedSignalIndex, _missionManagerSignalWaitTime); + QCOMPARE(_multiSpyMissionManager->checkSignalByMask(newMissionItemsAvailableSignalMask | inProgressChangedSignalMask), true); + QCOMPARE(_multiSpyMissionManager->checkNoSignalByMask(canEditChangedSignalMask), true); _checkInProgressValues(false); } else { @@ -277,14 +186,14 @@ void MissionManagerTest::_roundTripItems(MockLinkMissionItemHandler::FailureMode // inProgressChanged(false) signal to signal completion // error(errorCode, QString) signal // newMissionItemsAvailable signal - _multiSpy->waitForSignalByIndex(inProgressChangedSignalIndex, _signalWaitTime); - QCOMPARE(_multiSpy->checkSignalByMask(newMissionItemsAvailableSignalMask | inProgressChangedSignalMask | errorSignalMask), true); + _multiSpyMissionManager->waitForSignalByIndex(inProgressChangedSignalIndex, _missionManagerSignalWaitTime); + QCOMPARE(_multiSpyMissionManager->checkSignalByMask(newMissionItemsAvailableSignalMask | inProgressChangedSignalMask | errorSignalMask), true); // Validate inProgressChanged signal value _checkInProgressValues(false); // Validate error signal values - QSignalSpy* spy = _multiSpy->getSpyByIndex(errorSignalIndex); + QSignalSpy* spy = _multiSpyMissionManager->getSpyByIndex(errorSignalIndex); QList signalArgs = spy->takeFirst(); QCOMPARE(signalArgs.count(), 2); qDebug() << signalArgs[1].toString(); @@ -293,7 +202,7 @@ void MissionManagerTest::_roundTripItems(MockLinkMissionItemHandler::FailureMode checkExpectedMessageBox(); } - _multiSpy->clearAllSignals(); + _multiSpyMissionManager->clearAllSignals(); // Validate returned items @@ -451,18 +360,6 @@ void MissionManagerTest::_testReadFailureHandlingWorker(void) } } -void MissionManagerTest::_testEmptyVehicleAPM(void) -{ - _initForFirmwareType(MAV_AUTOPILOT_ARDUPILOTMEGA); - _readEmptyVehicleWorker(); -} - -void MissionManagerTest::_testEmptyVehiclePX4(void) -{ - _initForFirmwareType(MAV_AUTOPILOT_ARDUPILOTMEGA); - _readEmptyVehicleWorker(); -} - void MissionManagerTest::_testWriteFailureHandlingAPM(void) { _initForFirmwareType(MAV_AUTOPILOT_ARDUPILOTMEGA); diff --git a/src/MissionManager/MissionManagerTest.h b/src/MissionManager/MissionManagerTest.h index 3fb7c3d81..1bc75ae5f 100644 --- a/src/MissionManager/MissionManagerTest.h +++ b/src/MissionManager/MissionManagerTest.h @@ -28,10 +28,11 @@ #include "MockLink.h" #include "MissionManager.h" #include "MultiSignalSpy.h" +#include "MissionControllerManagerTest.h" #include -class MissionManagerTest : public UnitTest +class MissionManagerTest : public MissionControllerManagerTest { Q_OBJECT @@ -39,67 +40,19 @@ public: MissionManagerTest(void); private slots: - void cleanup(void); - - void _testEmptyVehicleAPM(void); - void _testEmptyVehiclePX4(void); void _testWriteFailureHandlingAPM(void); void _testReadFailureHandlingAPM(void); void _testWriteFailureHandlingPX4(void); void _testReadFailureHandlingPX4(void); private: - void _initForFirmwareType(MAV_AUTOPILOT firmwareType); - void _checkInProgressValues(bool inProgress); void _roundTripItems(MockLinkMissionItemHandler::FailureMode_t failureMode, MissionManager::ErrorCode_t errorCode, bool failFirstTimeOnly); void _writeItems(MockLinkMissionItemHandler::FailureMode_t failureMode, MissionManager::ErrorCode_t errorCode, bool failFirstTimeOnly); void _testWriteFailureHandlingWorker(void); void _testReadFailureHandlingWorker(void); - void _readEmptyVehicleWorker(void); - - MockLink* _mockLink; - MissionManager* _missionManager; - enum { - canEditChangedSignalIndex = 0, - newMissionItemsAvailableSignalIndex, - inProgressChangedSignalIndex, - errorSignalIndex, - maxSignalIndex - }; - - enum { - canEditChangedSignalMask = 1 << canEditChangedSignalIndex, - newMissionItemsAvailableSignalMask = 1 << newMissionItemsAvailableSignalIndex, - inProgressChangedSignalMask = 1 << inProgressChangedSignalIndex, - errorSignalMask = 1 << errorSignalIndex, - }; - - MultiSignalSpy* _multiSpy; - static const size_t _cSignals = maxSignalIndex; - const char* _rgSignals[_cSignals]; - - typedef struct { - int sequenceNumber; - QGeoCoordinate coordinate; - int command; - double param1; - double param2; - double param3; - double param4; - bool autocontinue; - bool isCurrentItem; - int frame; - } ItemInfo_t; - - typedef struct { - const char* itemStream; - const ItemInfo_t expectedItem; - } TestCase_t; - - static const TestCase_t _rgTestCases[]; - static const size_t _cTestCases; - static const int _signalWaitTime = MissionManager::_ackTimeoutMilliseconds * MissionManager::_maxRetryCount * 2; + static const MissionControllerManagerTest::TestCase_t _rgTestCases[]; + static const size_t _cTestCases; }; #endif -- 2.22.0