From 1d46da77cf214f216b96c9fe338b7be65165d602 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Sun, 18 Jun 2017 12:06:37 -0700 Subject: [PATCH] Fix camera section showing on wrong commands Update unit tests to catch this --- src/MissionManager/MissionControllerTest.cc | 24 ++++++ src/MissionManager/MissionControllerTest.h | 5 +- src/MissionManager/PlanMasterController.cc | 1 + src/MissionManager/SimpleMissionItem.cc | 13 ++- src/MissionManager/UnitTest/SectionTest.plan | 119 +++++++++++++++++++++++++++ 5 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 src/MissionManager/UnitTest/SectionTest.plan diff --git a/src/MissionManager/MissionControllerTest.cc b/src/MissionManager/MissionControllerTest.cc index 13f9103..c1bcdfc 100644 --- a/src/MissionManager/MissionControllerTest.cc +++ b/src/MissionManager/MissionControllerTest.cc @@ -224,3 +224,27 @@ void MissionControllerTest::_testGimbalRecalc(void) QCOMPARE(visualItem->missionGimbalYaw(), 0.0); } } + +void MissionControllerTest::_testLoadJsonSectionAvailable(void) +{ + _initForFirmwareType(MAV_AUTOPILOT_PX4); + _masterController->loadFromFile(":/unittest/SectionTest.plan"); + + QmlObjectListModel* visualItems = _missionController->visualItems(); + QVERIFY(visualItems); + QCOMPARE(visualItems->count(), 5); + + // Check that only waypoint items have camera and speed sections + for (int i=1; icount(); i++) { + SimpleMissionItem* item = visualItems->value(i); + QVERIFY(item); + if ((int)item->command() == MAV_CMD_NAV_WAYPOINT) { + QCOMPARE(item->cameraSection()->available(), true); + QCOMPARE(item->speedSection()->available(), true); + } else { + QCOMPARE(item->cameraSection()->available(), false); + QCOMPARE(item->speedSection()->available(), false); + } + + } +} diff --git a/src/MissionManager/MissionControllerTest.h b/src/MissionManager/MissionControllerTest.h index b92d9d9..101c204 100644 --- a/src/MissionManager/MissionControllerTest.h +++ b/src/MissionManager/MissionControllerTest.h @@ -33,12 +33,13 @@ private slots: void cleanup(void); void _testGimbalRecalc(void); - -private: + void _testLoadJsonSectionAvailable(void); void _testEmptyVehicleAPM(void); void _testEmptyVehiclePX4(void); void _testAddWayppointAPM(void); void _testAddWayppointPX4(void); + +private: #if 0 void _testOfflineToOnlineAPM(void); void _testOfflineToOnlinePX4(void); diff --git a/src/MissionManager/PlanMasterController.cc b/src/MissionManager/PlanMasterController.cc index 4e68070..0d97b1f 100644 --- a/src/MissionManager/PlanMasterController.cc +++ b/src/MissionManager/PlanMasterController.cc @@ -246,6 +246,7 @@ void PlanMasterController::loadFromFile(const QString& filename) if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { errorString = file.errorString() + QStringLiteral(" ") + filename; + qgcApp()->showMessage(errorMessage.arg(errorString)); return; } diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc index 4372d55..4f14445 100644 --- a/src/MissionManager/SimpleMissionItem.cc +++ b/src/MissionManager/SimpleMissionItem.cc @@ -278,12 +278,20 @@ void SimpleMissionItem::save(QJsonArray& missionItems) bool SimpleMissionItem::load(QTextStream &loadStream) { - return _missionItem.load(loadStream); + bool success; + if ((success = _missionItem.load(loadStream))) { + _updateOptionalSections(); + } + return success; } bool SimpleMissionItem::load(const QJsonObject& json, int sequenceNumber, QString& errorString) { - return _missionItem.load(json, sequenceNumber, errorString); + bool success; + if ((success = _missionItem.load(json, sequenceNumber, errorString))) { + _updateOptionalSections(); + } + return success; } bool SimpleMissionItem::isStandaloneCoordinate(void) const @@ -755,6 +763,7 @@ void SimpleMissionItem::_updateOptionalSections(void) emit cameraSectionChanged(_cameraSection); emit speedSectionChanged(_speedSection); + emit lastSequenceNumberChanged(lastSequenceNumber()); } int SimpleMissionItem::lastSequenceNumber(void) const diff --git a/src/MissionManager/UnitTest/SectionTest.plan b/src/MissionManager/UnitTest/SectionTest.plan new file mode 100644 index 0000000..c98f6a3 --- /dev/null +++ b/src/MissionManager/UnitTest/SectionTest.plan @@ -0,0 +1,119 @@ +{ + "fileType": "Plan", + "geoFence": { + "polygon": [ + ], + "version": 1 + }, + "groundStation": "QGroundControl", + "mission": { + "cruiseSpeed": 15, + "firmwareType": 12, + "hoverSpeed": 5, + "items": [ + { + "autoContinue": true, + "command": 22, + "coordinate": [ + 47.63311996, + -122.090763, + 20 + ], + "doJumpId": 1, + "frame": 3, + "params": [ + 0, + 0, + 0, + null + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "coordinate": [ + 47.63369112, + -122.08925023, + 20 + ], + "doJumpId": 2, + "frame": 3, + "params": [ + 0, + 0, + 0, + null + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "coordinate": [ + 47.63345253, + -122.08725467, + 20 + ], + "doJumpId": 3, + "frame": 3, + "params": [ + 0, + 0, + 0, + null + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 205, + "coordinate": [ + 0, + 0, + 2 + ], + "doJumpId": 4, + "frame": 2, + "params": [ + 0, + 0, + 0, + 0 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "coordinate": [ + 47.63261386, + -122.08661094, + 20 + ], + "doJumpId": 5, + "frame": 3, + "params": [ + 0, + 0, + 0, + null + ], + "type": "SimpleItem" + } + ], + "plannedHomePosition": [ + 47.633389756176875, + -122.09076300000001, + 20 + ], + "vehicleType": 2, + "version": 2 + }, + "rallyPoints": { + "points": [ + ], + "version": 1 + }, + "version": 1 +}