diff --git a/src/MissionManager/MissionControllerManagerTest.cc b/src/MissionManager/MissionControllerManagerTest.cc index a3791308d3d9755e9f808594c4fa9bc004b0efe3..ca3d00f5e88e04765a42099d17dee65430897aa7 100644 --- a/src/MissionManager/MissionControllerManagerTest.cc +++ b/src/MissionManager/MissionControllerManagerTest.cc @@ -92,8 +92,5 @@ void MissionControllerManagerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareTy void MissionControllerManagerTest::_checkInProgressValues(bool inProgress) { QCOMPARE(_missionManager->inProgress(), inProgress); - QSignalSpy* spy = _multiSpyMissionManager->getSpyByIndex(inProgressChangedSignalIndex); - QList signalArgs = spy->takeFirst(); - QCOMPARE(signalArgs.count(), 1); - QCOMPARE(signalArgs[0].toBool(), inProgress); + QCOMPARE(_multiSpyMissionManager->pullBoolFromSignalIndex(inProgressChangedSignalIndex), inProgress); } diff --git a/src/MissionManager/MissionControllerTest.cc b/src/MissionManager/MissionControllerTest.cc index 7cd925b5d87108a5e72bfb5c94f2ea0f4a2b61d9..3e8a43a77099205b260488eeee65e3322275e72e 100644 --- a/src/MissionManager/MissionControllerTest.cc +++ b/src/MissionManager/MissionControllerTest.cc @@ -28,7 +28,9 @@ UT_REGISTER_TEST(MissionControllerTest) MissionControllerTest::MissionControllerTest(void) - : _missionController(NULL) + : _multiSpyMissionController(NULL) + , _multiSpyMissionItem(NULL) + , _missionController(NULL) { } @@ -38,6 +40,12 @@ void MissionControllerTest::cleanup(void) delete _missionController; _missionController = NULL; + delete _multiSpyMissionController; + _multiSpyMissionController = NULL; + + delete _multiSpyMissionItem; + _multiSpyMissionItem = NULL; + MissionControllerManagerTest::cleanup(); } @@ -47,10 +55,20 @@ 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&)); + void coordinateChanged(const QGeoCoordinate& coordinate); + void headingDegreesChanged(double heading); + void dirtyChanged(bool dirty); + void homePositionValidChanged(bool homePostionValid); + + // MissionItem signals + _rgMissionItemSignals[coordinateChangedSignalIndex] = SIGNAL(coordinateChanged(const QGeoCoordinate&)); + _rgMissionItemSignals[homePositionValidChangedSignalIndex] = SIGNAL(homePositionValidChanged(bool)); + + // MissionController signals + _rgMissionControllerSignals[missionItemsChangedSignalIndex] = SIGNAL(missionItemsChanged()); + _rgMissionControllerSignals[waypointLinesChangedSignalIndex] = SIGNAL(waypointLinesChanged()); + _rgMissionControllerSignals[liveHomePositionAvailableChangedSignalIndex] = SIGNAL(liveHomePositionAvailableChanged(bool)); + _rgMissionControllerSignals[liveHomePositionChangedSignalIndex] = SIGNAL(liveHomePositionChanged(const QGeoCoordinate&)); if (!_missionController) { startController = true; @@ -58,17 +76,17 @@ void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType) Q_CHECK_PTR(_missionController); } - _multiSpy = new MultiSignalSpy(); - Q_CHECK_PTR(_multiSpy); - QCOMPARE(_multiSpy->init(_missionController, _rgSignals, _cSignals), true); + _multiSpyMissionController = new MultiSignalSpy(); + Q_CHECK_PTR(_multiSpyMissionController); + QCOMPARE(_multiSpyMissionController->init(_missionController, _rgMissionControllerSignals, _cMissionControllerSignals), true); if (startController) { _missionController->start(false /* editMode */); } // All signals should some through on start - QCOMPARE(_multiSpy->checkOnlySignalsByMask(missionItemsChangedSignalMask | waypointLinesChangedSignalMask | liveHomePositionAvailableChangedSignalMask | liveHomePositionChangedSignalMask), true); - _multiSpy->clearAllSignals(); + QCOMPARE(_multiSpyMissionController->checkOnlySignalsByMask(missionItemsChangedSignalMask | waypointLinesChangedSignalMask | liveHomePositionAvailableChangedSignalMask | liveHomePositionChangedSignalMask), true); + _multiSpyMissionController->clearAllSignals(); QmlObjectListModel* missionItems = _missionController->missionItems(); QVERIFY(missionItems); @@ -76,10 +94,11 @@ void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType) // Empty vehicle only has home position QCOMPARE(missionItems->count(), 1); - // Home position should be in first slot + // Home position should be in first slot, but not yet valid MissionItem* homeItem = qobject_cast(missionItems->get(0)); QVERIFY(homeItem); QCOMPARE(homeItem->homePosition(), true); + QCOMPARE(homeItem->homePositionValid(), false); // Home should have no children QCOMPARE(homeItem->childItems()->count(), 0); @@ -111,23 +130,31 @@ void MissionControllerTest::_testEmptyVehicleWorker(MAV_AUTOPILOT firmwareType) MissionItem* homeItem = qobject_cast(missionItems->get(0)); QVERIFY(homeItem); + _setupMissionItemSignals(homeItem); + if (expectedHomePositionValid) { // Wait for the home position to show up if (!_missionController->liveHomePositionAvailable()) { - QVERIFY(_multiSpy->waitForSignalByIndex(liveHomePositionChangedSignalIndex, 2000)); + QVERIFY(_multiSpyMissionController->waitForSignalByIndex(liveHomePositionAvailableChangedSignalIndex, 2000)); + QCOMPARE(_multiSpyMissionController->pullBoolFromSignalIndex(liveHomePositionAvailableChangedSignalIndex), true); + } - // Once the home position shows up we get a number of addititional signals - QCOMPARE(_multiSpy->checkOnlySignalsByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask | waypointLinesChangedSignalMask), true); + if (!homeItem->homePositionValid()) { + QVERIFY(_multiSpyMissionItem->waitForSignalByIndex(homePositionValidChangedSignalIndex, 2000)); + QCOMPARE(_multiSpyMissionItem->pullBoolFromSignalIndex(homePositionValidChangedSignalIndex), true); + } - // These should be signalled once - QCOMPARE(_multiSpy->checkSignalByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask), true); + // Once the home position shows up we get a number of addititional signals - // Waypoint lines get spit out multiple tiems - QCOMPARE(_multiSpy->checkSignalByMask(waypointLinesChangedSignalMask), false); + QCOMPARE(_multiSpyMissionController->checkOnlySignalsByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask | waypointLinesChangedSignalMask), true); + QCOMPARE(_multiSpyMissionController->checkSignalByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask), true); + QCOMPARE(_multiSpyMissionController->checkSignalByMask(waypointLinesChangedSignalMask), false); - _multiSpy->clearAllSignals(); - } + QCOMPARE(_multiSpyMissionItem->checkSignalByMask(homePositionValidChangedSignalMask), true); + + _multiSpyMissionController->clearAllSignals(); + _multiSpyMissionItem->clearAllSignals(); } QCOMPARE(homeItem->homePositionValid(), expectedHomePositionValid); @@ -153,7 +180,7 @@ void MissionControllerTest::_testAddWaypointWorker(MAV_AUTOPILOT firmwareType) _missionController->addMissionItem(coordinate); - QCOMPARE(_multiSpy->checkOnlySignalsByMask(waypointLinesChangedSignalMask), true); + QCOMPARE(_multiSpyMissionController->checkOnlySignalsByMask(waypointLinesChangedSignalMask), true); QmlObjectListModel* missionItems = _missionController->missionItems(); QVERIFY(missionItems); @@ -216,3 +243,12 @@ void MissionControllerTest::_testOfflineToOnlinePX4(void) { _testOfflineToOnlineWorker(MAV_AUTOPILOT_PX4); } + +void MissionControllerTest::_setupMissionItemSignals(MissionItem* item) +{ + delete _multiSpyMissionItem; + + _multiSpyMissionItem = new MultiSignalSpy(); + Q_CHECK_PTR(_multiSpyMissionItem); + QCOMPARE(_multiSpyMissionItem->init(item, _rgMissionItemSignals, _cMissionItemSignals), true); +} diff --git a/src/MissionManager/MissionControllerTest.h b/src/MissionManager/MissionControllerTest.h index 9d3043e900c706de4c3dcca3a243c1e941ab45f9..4b22108d418a93cee36c80e61a087f0a094a1878 100644 --- a/src/MissionManager/MissionControllerTest.h +++ b/src/MissionManager/MissionControllerTest.h @@ -43,6 +43,10 @@ public: private slots: void cleanup(void); + void _testEmptyVehicleAPM(void); + void _testEmptyVehiclePX4(void); + void _testAddWayppointAPM(void); + void _testAddWayppointPX4(void); void _testOfflineToOnlineAPM(void); void _testOfflineToOnlinePX4(void); @@ -51,30 +55,46 @@ private: void _testEmptyVehicleWorker(MAV_AUTOPILOT firmwareType); void _testAddWaypointWorker(MAV_AUTOPILOT firmwareType); void _testOfflineToOnlineWorker(MAV_AUTOPILOT firmwareType); + void _setupMissionItemSignals(MissionItem* item); - void _testEmptyVehicleAPM(void); - void _testEmptyVehiclePX4(void); - void _testAddWayppointAPM(void); - void _testAddWayppointPX4(void); + // MissiomItems signals + + enum { + coordinateChangedSignalIndex = 0, + homePositionValidChangedSignalIndex, + missionItemMaxSignalIndex + }; + + enum { + coordinateChangedSignalMask = 1 << coordinateChangedSignalIndex, + homePositionValidChangedSignalMask = 1 << homePositionValidChangedSignalIndex, + missionItemMaxSignalMask = 1 << missionItemMaxSignalIndex, + }; + + // MissionController signals enum { missionItemsChangedSignalIndex = 0, waypointLinesChangedSignalIndex, liveHomePositionAvailableChangedSignalIndex, liveHomePositionChangedSignalIndex, - maxSignalIndex + missionControllerMaxSignalIndex }; enum { missionItemsChangedSignalMask = 1 << missionItemsChangedSignalIndex, - waypointLinesChangedSignalMask = 1 << waypointLinesChangedSignalIndex, + waypointLinesChangedSignalMask = 1 << waypointLinesChangedSignalIndex, liveHomePositionAvailableChangedSignalMask = 1 << liveHomePositionAvailableChangedSignalIndex, liveHomePositionChangedSignalMask = 1 << liveHomePositionChangedSignalIndex, }; - MultiSignalSpy* _multiSpy; - static const size_t _cSignals = maxSignalIndex; - const char* _rgSignals[_cSignals]; + MultiSignalSpy* _multiSpyMissionController; + static const size_t _cMissionControllerSignals = missionControllerMaxSignalIndex; + const char* _rgMissionControllerSignals[_cMissionControllerSignals]; + + MultiSignalSpy* _multiSpyMissionItem; + static const size_t _cMissionItemSignals = missionItemMaxSignalIndex; + const char* _rgMissionItemSignals[_cMissionItemSignals]; MissionController* _missionController; }; diff --git a/src/qgcunittest/MultiSignalSpy.cc b/src/qgcunittest/MultiSignalSpy.cc index 955c33cda43b697ab08a677885eeaeaa5039a233..1e42e4407fbcd577ad939a01277ece12887fb05f 100644 --- a/src/qgcunittest/MultiSignalSpy.cc +++ b/src/qgcunittest/MultiSignalSpy.cc @@ -257,3 +257,9 @@ void MultiSignalSpy::_printSignalState(void) qDebug() << "Signal index:" << i << "count:" << spy->count(); } } + +bool MultiSignalSpy::pullBoolFromSignalIndex(quint16 index) +{ + QSignalSpy* spy = getSpyByIndex(index); + return spy->value(0).value(0).toBool(); +} diff --git a/src/qgcunittest/MultiSignalSpy.h b/src/qgcunittest/MultiSignalSpy.h index fc74c5848dd5929a94d63ff5ce66295fd9cabb62..aea49ca113144025aaa6683ec2dd4f3c76bca69d 100644 --- a/src/qgcunittest/MultiSignalSpy.h +++ b/src/qgcunittest/MultiSignalSpy.h @@ -71,6 +71,9 @@ public: bool waitForSignalByIndex(quint16 index, int msec); QSignalSpy* getSpyByIndex(quint16 index); + + /// Returns the boolean value for a signal which has a single bool param + bool pullBoolFromSignalIndex(quint16 index); private: // QObject overrides