Commit 9c26a249 authored by Don Gagne's avatar Don Gagne

Merge pull request #2120 from DonLakeFlyer/HomeUT

Home Position unit testing for MissionController
parents 20f3f54c 43776e8f
...@@ -92,8 +92,5 @@ void MissionControllerManagerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareTy ...@@ -92,8 +92,5 @@ void MissionControllerManagerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareTy
void MissionControllerManagerTest::_checkInProgressValues(bool inProgress) void MissionControllerManagerTest::_checkInProgressValues(bool inProgress)
{ {
QCOMPARE(_missionManager->inProgress(), inProgress); QCOMPARE(_missionManager->inProgress(), inProgress);
QSignalSpy* spy = _multiSpyMissionManager->getSpyByIndex(inProgressChangedSignalIndex); QCOMPARE(_multiSpyMissionManager->pullBoolFromSignalIndex(inProgressChangedSignalIndex), inProgress);
QList<QVariant> signalArgs = spy->takeFirst();
QCOMPARE(signalArgs.count(), 1);
QCOMPARE(signalArgs[0].toBool(), inProgress);
} }
...@@ -28,7 +28,9 @@ ...@@ -28,7 +28,9 @@
UT_REGISTER_TEST(MissionControllerTest) UT_REGISTER_TEST(MissionControllerTest)
MissionControllerTest::MissionControllerTest(void) MissionControllerTest::MissionControllerTest(void)
: _missionController(NULL) : _multiSpyMissionController(NULL)
, _multiSpyMissionItem(NULL)
, _missionController(NULL)
{ {
} }
...@@ -38,6 +40,12 @@ void MissionControllerTest::cleanup(void) ...@@ -38,6 +40,12 @@ void MissionControllerTest::cleanup(void)
delete _missionController; delete _missionController;
_missionController = NULL; _missionController = NULL;
delete _multiSpyMissionController;
_multiSpyMissionController = NULL;
delete _multiSpyMissionItem;
_multiSpyMissionItem = NULL;
MissionControllerManagerTest::cleanup(); MissionControllerManagerTest::cleanup();
} }
...@@ -47,10 +55,20 @@ void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType) ...@@ -47,10 +55,20 @@ void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType)
MissionControllerManagerTest::_initForFirmwareType(firmwareType); MissionControllerManagerTest::_initForFirmwareType(firmwareType);
_rgSignals[missionItemsChangedSignalIndex] = SIGNAL(missionItemsChanged()); void coordinateChanged(const QGeoCoordinate& coordinate);
_rgSignals[waypointLinesChangedSignalIndex] = SIGNAL(waypointLinesChanged()); void headingDegreesChanged(double heading);
_rgSignals[liveHomePositionAvailableChangedSignalIndex] = SIGNAL(liveHomePositionAvailableChanged(bool)); void dirtyChanged(bool dirty);
_rgSignals[liveHomePositionChangedSignalIndex] = SIGNAL(liveHomePositionChanged(const QGeoCoordinate&)); 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) { if (!_missionController) {
startController = true; startController = true;
...@@ -58,17 +76,17 @@ void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType) ...@@ -58,17 +76,17 @@ void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType)
Q_CHECK_PTR(_missionController); Q_CHECK_PTR(_missionController);
} }
_multiSpy = new MultiSignalSpy(); _multiSpyMissionController = new MultiSignalSpy();
Q_CHECK_PTR(_multiSpy); Q_CHECK_PTR(_multiSpyMissionController);
QCOMPARE(_multiSpy->init(_missionController, _rgSignals, _cSignals), true); QCOMPARE(_multiSpyMissionController->init(_missionController, _rgMissionControllerSignals, _cMissionControllerSignals), true);
if (startController) { if (startController) {
_missionController->start(false /* editMode */); _missionController->start(false /* editMode */);
} }
// All signals should some through on start // All signals should some through on start
QCOMPARE(_multiSpy->checkOnlySignalsByMask(missionItemsChangedSignalMask | waypointLinesChangedSignalMask | liveHomePositionAvailableChangedSignalMask | liveHomePositionChangedSignalMask), true); QCOMPARE(_multiSpyMissionController->checkOnlySignalsByMask(missionItemsChangedSignalMask | waypointLinesChangedSignalMask | liveHomePositionAvailableChangedSignalMask | liveHomePositionChangedSignalMask), true);
_multiSpy->clearAllSignals(); _multiSpyMissionController->clearAllSignals();
QmlObjectListModel* missionItems = _missionController->missionItems(); QmlObjectListModel* missionItems = _missionController->missionItems();
QVERIFY(missionItems); QVERIFY(missionItems);
...@@ -76,10 +94,11 @@ void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType) ...@@ -76,10 +94,11 @@ void MissionControllerTest::_initForFirmwareType(MAV_AUTOPILOT firmwareType)
// Empty vehicle only has home position // Empty vehicle only has home position
QCOMPARE(missionItems->count(), 1); 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<MissionItem*>(missionItems->get(0)); MissionItem* homeItem = qobject_cast<MissionItem*>(missionItems->get(0));
QVERIFY(homeItem); QVERIFY(homeItem);
QCOMPARE(homeItem->homePosition(), true); QCOMPARE(homeItem->homePosition(), true);
QCOMPARE(homeItem->homePositionValid(), false);
// Home should have no children // Home should have no children
QCOMPARE(homeItem->childItems()->count(), 0); QCOMPARE(homeItem->childItems()->count(), 0);
...@@ -111,23 +130,31 @@ void MissionControllerTest::_testEmptyVehicleWorker(MAV_AUTOPILOT firmwareType) ...@@ -111,23 +130,31 @@ void MissionControllerTest::_testEmptyVehicleWorker(MAV_AUTOPILOT firmwareType)
MissionItem* homeItem = qobject_cast<MissionItem*>(missionItems->get(0)); MissionItem* homeItem = qobject_cast<MissionItem*>(missionItems->get(0));
QVERIFY(homeItem); QVERIFY(homeItem);
_setupMissionItemSignals(homeItem);
if (expectedHomePositionValid) { if (expectedHomePositionValid) {
// Wait for the home position to show up // Wait for the home position to show up
if (!_missionController->liveHomePositionAvailable()) { 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 if (!homeItem->homePositionValid()) {
QCOMPARE(_multiSpy->checkOnlySignalsByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask | waypointLinesChangedSignalMask), true); QVERIFY(_multiSpyMissionItem->waitForSignalByIndex(homePositionValidChangedSignalIndex, 2000));
QCOMPARE(_multiSpyMissionItem->pullBoolFromSignalIndex(homePositionValidChangedSignalIndex), true);
}
// These should be signalled once // Once the home position shows up we get a number of addititional signals
QCOMPARE(_multiSpy->checkSignalByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask), true);
// Waypoint lines get spit out multiple tiems QCOMPARE(_multiSpyMissionController->checkOnlySignalsByMask(liveHomePositionChangedSignalMask | liveHomePositionAvailableChangedSignalMask | waypointLinesChangedSignalMask), true);
QCOMPARE(_multiSpy->checkSignalByMask(waypointLinesChangedSignalMask), false); 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); QCOMPARE(homeItem->homePositionValid(), expectedHomePositionValid);
...@@ -153,7 +180,7 @@ void MissionControllerTest::_testAddWaypointWorker(MAV_AUTOPILOT firmwareType) ...@@ -153,7 +180,7 @@ void MissionControllerTest::_testAddWaypointWorker(MAV_AUTOPILOT firmwareType)
_missionController->addMissionItem(coordinate); _missionController->addMissionItem(coordinate);
QCOMPARE(_multiSpy->checkOnlySignalsByMask(waypointLinesChangedSignalMask), true); QCOMPARE(_multiSpyMissionController->checkOnlySignalsByMask(waypointLinesChangedSignalMask), true);
QmlObjectListModel* missionItems = _missionController->missionItems(); QmlObjectListModel* missionItems = _missionController->missionItems();
QVERIFY(missionItems); QVERIFY(missionItems);
...@@ -216,3 +243,12 @@ void MissionControllerTest::_testOfflineToOnlinePX4(void) ...@@ -216,3 +243,12 @@ void MissionControllerTest::_testOfflineToOnlinePX4(void)
{ {
_testOfflineToOnlineWorker(MAV_AUTOPILOT_PX4); _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);
}
...@@ -43,6 +43,10 @@ public: ...@@ -43,6 +43,10 @@ public:
private slots: private slots:
void cleanup(void); void cleanup(void);
void _testEmptyVehicleAPM(void);
void _testEmptyVehiclePX4(void);
void _testAddWayppointAPM(void);
void _testAddWayppointPX4(void);
void _testOfflineToOnlineAPM(void); void _testOfflineToOnlineAPM(void);
void _testOfflineToOnlinePX4(void); void _testOfflineToOnlinePX4(void);
...@@ -51,30 +55,46 @@ private: ...@@ -51,30 +55,46 @@ private:
void _testEmptyVehicleWorker(MAV_AUTOPILOT firmwareType); void _testEmptyVehicleWorker(MAV_AUTOPILOT firmwareType);
void _testAddWaypointWorker(MAV_AUTOPILOT firmwareType); void _testAddWaypointWorker(MAV_AUTOPILOT firmwareType);
void _testOfflineToOnlineWorker(MAV_AUTOPILOT firmwareType); void _testOfflineToOnlineWorker(MAV_AUTOPILOT firmwareType);
void _setupMissionItemSignals(MissionItem* item);
void _testEmptyVehicleAPM(void); // MissiomItems signals
void _testEmptyVehiclePX4(void);
void _testAddWayppointAPM(void); enum {
void _testAddWayppointPX4(void); coordinateChangedSignalIndex = 0,
homePositionValidChangedSignalIndex,
missionItemMaxSignalIndex
};
enum {
coordinateChangedSignalMask = 1 << coordinateChangedSignalIndex,
homePositionValidChangedSignalMask = 1 << homePositionValidChangedSignalIndex,
missionItemMaxSignalMask = 1 << missionItemMaxSignalIndex,
};
// MissionController signals
enum { enum {
missionItemsChangedSignalIndex = 0, missionItemsChangedSignalIndex = 0,
waypointLinesChangedSignalIndex, waypointLinesChangedSignalIndex,
liveHomePositionAvailableChangedSignalIndex, liveHomePositionAvailableChangedSignalIndex,
liveHomePositionChangedSignalIndex, liveHomePositionChangedSignalIndex,
maxSignalIndex missionControllerMaxSignalIndex
}; };
enum { enum {
missionItemsChangedSignalMask = 1 << missionItemsChangedSignalIndex, missionItemsChangedSignalMask = 1 << missionItemsChangedSignalIndex,
waypointLinesChangedSignalMask = 1 << waypointLinesChangedSignalIndex, waypointLinesChangedSignalMask = 1 << waypointLinesChangedSignalIndex,
liveHomePositionAvailableChangedSignalMask = 1 << liveHomePositionAvailableChangedSignalIndex, liveHomePositionAvailableChangedSignalMask = 1 << liveHomePositionAvailableChangedSignalIndex,
liveHomePositionChangedSignalMask = 1 << liveHomePositionChangedSignalIndex, liveHomePositionChangedSignalMask = 1 << liveHomePositionChangedSignalIndex,
}; };
MultiSignalSpy* _multiSpy; MultiSignalSpy* _multiSpyMissionController;
static const size_t _cSignals = maxSignalIndex; static const size_t _cMissionControllerSignals = missionControllerMaxSignalIndex;
const char* _rgSignals[_cSignals]; const char* _rgMissionControllerSignals[_cMissionControllerSignals];
MultiSignalSpy* _multiSpyMissionItem;
static const size_t _cMissionItemSignals = missionItemMaxSignalIndex;
const char* _rgMissionItemSignals[_cMissionItemSignals];
MissionController* _missionController; MissionController* _missionController;
}; };
......
...@@ -257,3 +257,9 @@ void MultiSignalSpy::_printSignalState(void) ...@@ -257,3 +257,9 @@ void MultiSignalSpy::_printSignalState(void)
qDebug() << "Signal index:" << i << "count:" << spy->count(); qDebug() << "Signal index:" << i << "count:" << spy->count();
} }
} }
bool MultiSignalSpy::pullBoolFromSignalIndex(quint16 index)
{
QSignalSpy* spy = getSpyByIndex(index);
return spy->value(0).value(0).toBool();
}
...@@ -71,6 +71,9 @@ public: ...@@ -71,6 +71,9 @@ public:
bool waitForSignalByIndex(quint16 index, int msec); bool waitForSignalByIndex(quint16 index, int msec);
QSignalSpy* getSpyByIndex(quint16 index); QSignalSpy* getSpyByIndex(quint16 index);
/// Returns the boolean value for a signal which has a single bool param
bool pullBoolFromSignalIndex(quint16 index);
private: private:
// QObject overrides // QObject overrides
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment