diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index fd2927c56dcdb12caed402cc121d4f6a6d188384..eec8df795c809df081bac2f68da26ed837a58afd 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -398,6 +398,7 @@ DebugBuild { PX4FirmwarePlugin { PX4FirmwarePluginFactory { APMFirmwarePlugin { src/MissionManager/MissionControllerTest.h \ src/MissionManager/MissionItemTest.h \ src/MissionManager/MissionManagerTest.h \ + src/MissionManager/MissionSettingsTest.h \ src/MissionManager/PlanMasterControllerTest.h \ src/MissionManager/SectionTest.h \ src/MissionManager/SimpleMissionItemTest.h \ @@ -431,6 +432,7 @@ DebugBuild { PX4FirmwarePlugin { PX4FirmwarePluginFactory { APMFirmwarePlugin { src/MissionManager/MissionControllerTest.cc \ src/MissionManager/MissionItemTest.cc \ src/MissionManager/MissionManagerTest.cc \ + src/MissionManager/MissionSettingsTest.cc \ src/MissionManager/PlanMasterControllerTest.cc \ src/MissionManager/SectionTest.cc \ src/MissionManager/SimpleMissionItemTest.cc \ diff --git a/src/MissionManager/MissionSettingsItem.cc b/src/MissionManager/MissionSettingsItem.cc index 858b58faf233cbb5b3638c297e77d3431a7e2a35..e68c6a91f3379abd5e60d6cef124f5ebfb322e33 100644 --- a/src/MissionManager/MissionSettingsItem.cc +++ b/src/MissionManager/MissionSettingsItem.cc @@ -80,6 +80,10 @@ void MissionSettingsItem::setDirty(bool dirty) { if (_dirty != dirty) { _dirty = dirty; + if (!dirty) { + _cameraSection.setDirty(false); + _speedSection.setDirty(false); + } emit dirtyChanged(_dirty); } } diff --git a/src/MissionManager/MissionSettingsTest.cc b/src/MissionManager/MissionSettingsTest.cc new file mode 100644 index 0000000000000000000000000000000000000000..26b3a342e60a011209fb52b487ad4a0fea5c420f --- /dev/null +++ b/src/MissionManager/MissionSettingsTest.cc @@ -0,0 +1,64 @@ +/**************************************************************************** + * + * (c) 2009-2016 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +#include "MissionSettingsTest.h" +#include "QGCApplication.h" +#include "QGroundControlQmlGlobal.h" +#include "SettingsManager.h" + +MissionSettingsTest::MissionSettingsTest(void) + : _settingsItem(NULL) +{ + +} + +void MissionSettingsTest::init(void) +{ + VisualMissionItemTest::init(); + + _settingsItem = new MissionSettingsItem(_offlineVehicle, this); +} + +void MissionSettingsTest::cleanup(void) +{ + delete _settingsItem; + VisualMissionItemTest::cleanup(); +} + +void MissionSettingsTest::_testCameraSectionDirty(void) +{ + CameraSection* cameraSection = _settingsItem->cameraSection(); + + QVERIFY(!cameraSection->dirty()); + QVERIFY(!_settingsItem->dirty()); + + // Dirtying the camera section should also dirty the item + cameraSection->setDirty(true); + QVERIFY(_settingsItem->dirty()); + + // Clearing the dirty bit from the item should also clear the dirty bit on the camera section + _settingsItem->setDirty(false); + QVERIFY(!cameraSection->dirty()); +} + +void MissionSettingsTest::_testSpeedSectionDirty(void) +{ + SpeedSection* speedSection = _settingsItem->speedSection(); + + QVERIFY(!speedSection->dirty()); + QVERIFY(!_settingsItem->dirty()); + + // Dirtying the speed section should also dirty the item + speedSection->setDirty(true); + QVERIFY(_settingsItem->dirty()); + + // Clearing the dirty bit from the item should also clear the dirty bit on the camera section + _settingsItem->setDirty(false); + QVERIFY(!speedSection->dirty()); +} diff --git a/src/MissionManager/MissionSettingsTest.h b/src/MissionManager/MissionSettingsTest.h new file mode 100644 index 0000000000000000000000000000000000000000..5a06f75bb4bfcb7136e60ff2482ee6b9e2a00662 --- /dev/null +++ b/src/MissionManager/MissionSettingsTest.h @@ -0,0 +1,32 @@ +/**************************************************************************** + * + * (c) 2009-2016 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +#pragma once + +#include "VisualMissionItemTest.h" +#include "MissionSettingsItem.h" + +/// Unit test for SimpleMissionItem +class MissionSettingsTest : public VisualMissionItemTest +{ + Q_OBJECT + +public: + MissionSettingsTest(void); + + void init(void) override; + void cleanup(void) override; + +private slots: + void _testCameraSectionDirty(void); + void _testSpeedSectionDirty(void); + +private: + MissionSettingsItem* _settingsItem; +}; diff --git a/src/MissionManager/SimpleMissionItemTest.cc b/src/MissionManager/SimpleMissionItemTest.cc index 6d2f9bbfd0c911ccc457825c1ffd730e96f3ed59..67aa99a28b196f82431615c0e1ea67a17bb68e38 100644 --- a/src/MissionManager/SimpleMissionItemTest.cc +++ b/src/MissionManager/SimpleMissionItemTest.cc @@ -256,6 +256,38 @@ void SimpleMissionItemTest::_testSignals(void) QVERIFY(_spyVisualItem->checkSignalsByMask(commandNameChangedMask | dirtyChangedMask | coordinateChangedMask)); } +void SimpleMissionItemTest::_testCameraSectionDirty(void) +{ + CameraSection* cameraSection = _simpleItem->cameraSection(); + + QVERIFY(!cameraSection->dirty()); + QVERIFY(!_simpleItem->dirty()); + + // Dirtying the camera section should also dirty the item + cameraSection->setDirty(true); + QVERIFY(_simpleItem->dirty()); + + // Clearing the dirty bit from the item should also clear the dirty bit on the camera section + _simpleItem->setDirty(false); + QVERIFY(!cameraSection->dirty()); +} + +void SimpleMissionItemTest::_testSpeedSectionDirty(void) +{ + SpeedSection* speedSection = _simpleItem->speedSection(); + + QVERIFY(!speedSection->dirty()); + QVERIFY(!_simpleItem->dirty()); + + // Dirtying the speed section should also dirty the item + speedSection->setDirty(true); + QVERIFY(_simpleItem->dirty()); + + // Clearing the dirty bit from the item should also clear the dirty bit on the camera section + _simpleItem->setDirty(false); + QVERIFY(!speedSection->dirty()); +} + void SimpleMissionItemTest::_testCameraSection(void) { // No gimbal yaw to start with diff --git a/src/MissionManager/SimpleMissionItemTest.h b/src/MissionManager/SimpleMissionItemTest.h index 1572f2bece3c7af85b3ad199b877b12ad1bca0b6..fd062dd1f322ffa4a1f622431d4ae4442c07a42e 100644 --- a/src/MissionManager/SimpleMissionItemTest.h +++ b/src/MissionManager/SimpleMissionItemTest.h @@ -27,6 +27,8 @@ private slots: void _testSignals(void); void _testEditorFacts(void); void _testDefaultValues(void); + void _testCameraSectionDirty(void); + void _testSpeedSectionDirty(void); void _testCameraSection(void); void _testSpeedSection(void); diff --git a/src/qgcunittest/UnitTestList.cc b/src/qgcunittest/UnitTestList.cc index 3fc648abf29f5575033b31927e81f0abc7a4d085..a6445eaf531d086952431fbb60e5977a1ac6f395 100644 --- a/src/qgcunittest/UnitTestList.cc +++ b/src/qgcunittest/UnitTestList.cc @@ -36,6 +36,7 @@ #include "CameraSectionTest.h" #include "SpeedSectionTest.h" #include "PlanMasterControllerTest.h" +#include "MissionSettingsTest.h" UT_REGISTER_TEST(FactSystemTestGeneric) UT_REGISTER_TEST(FactSystemTestPX4) @@ -58,6 +59,7 @@ UT_REGISTER_TEST(SurveyMissionItemTest) UT_REGISTER_TEST(CameraSectionTest) UT_REGISTER_TEST(SpeedSectionTest) UT_REGISTER_TEST(PlanMasterControllerTest) +UT_REGISTER_TEST(MissionSettingsTest) // List of unit test which are currently disabled. // If disabling a new test, include reason in comment.