22 changed files with 1757 additions and 190 deletions
@ -0,0 +1,871 @@
@@ -0,0 +1,871 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#include "CameraSectionTest.h" |
||||
|
||||
CameraSectionTest::CameraSectionTest(void) |
||||
: _spyCamera(NULL) |
||||
, _spySection(NULL) |
||||
, _cameraSection(NULL) |
||||
, _validGimbalItem(NULL) |
||||
, _validDistanceItem(NULL) |
||||
, _validTimeItem(NULL) |
||||
, _validStartVideoItem(NULL) |
||||
, _validStopVideoItem(NULL) |
||||
, _validStopDistanceItem(NULL) |
||||
, _validStopTimeItem(NULL) |
||||
{ |
||||
|
||||
} |
||||
|
||||
void CameraSectionTest::init(void) |
||||
{ |
||||
SectionTest::init(); |
||||
|
||||
rgCameraSignals[specifyGimbalChangedIndex] = SIGNAL(specifyGimbalChanged(bool)); |
||||
rgCameraSignals[specifiedGimbalYawChangedIndex] = SIGNAL(specifiedGimbalYawChanged(double)); |
||||
|
||||
_cameraSection = _simpleItem->cameraSection(); |
||||
_createSpy(_cameraSection, &_spyCamera); |
||||
QVERIFY(_spyCamera); |
||||
SectionTest::_createSpy(_cameraSection, &_spySection); |
||||
QVERIFY(_spySection); |
||||
|
||||
_validGimbalItem = new SimpleMissionItem(_offlineVehicle, |
||||
MissionItem(0, MAV_CMD_DO_MOUNT_CONTROL, MAV_FRAME_MISSION, 10.1234, 0, 20.1234, 0, 0, 0, MAV_MOUNT_MODE_MAVLINK_TARGETING, true, false), |
||||
this); |
||||
_validTimeItem = new SimpleMissionItem(_offlineVehicle, |
||||
MissionItem(0, MAV_CMD_IMAGE_START_CAPTURE, MAV_FRAME_MISSION, 48, 0,-1, 0, 0, 0, 0, true, false), |
||||
this); |
||||
_validDistanceItem = new SimpleMissionItem(_offlineVehicle, |
||||
MissionItem(0, MAV_CMD_DO_SET_CAM_TRIGG_DIST, MAV_FRAME_MISSION, 72, 0, 0, 0, 0, 0, 0, true, false), |
||||
this); |
||||
_validStartVideoItem = new SimpleMissionItem(_offlineVehicle, |
||||
MissionItem(0, MAV_CMD_VIDEO_START_CAPTURE, MAV_FRAME_MISSION, 0, -1, -1, 0, 0, 0, 0, true, false), |
||||
this); |
||||
_validStopVideoItem = new SimpleMissionItem(_offlineVehicle, |
||||
MissionItem(0, MAV_CMD_VIDEO_STOP_CAPTURE, MAV_FRAME_MISSION, 0, 0, 0, 0, 0, 0, 0, true, false), |
||||
this); |
||||
_validStopDistanceItem = new SimpleMissionItem(_offlineVehicle, |
||||
MissionItem(0, MAV_CMD_DO_SET_CAM_TRIGG_DIST, MAV_FRAME_MISSION, 0, 0, 0, 0, 0, 0, 0, true, false), |
||||
this); |
||||
_validStopTimeItem = new SimpleMissionItem(_offlineVehicle, |
||||
MissionItem(1, MAV_CMD_IMAGE_STOP_CAPTURE, MAV_FRAME_MISSION, 0, 0, 0, 0, 0, 0, 0, true, false), |
||||
this); |
||||
} |
||||
|
||||
void CameraSectionTest::cleanup(void) |
||||
{ |
||||
delete _spyCamera; |
||||
delete _spySection; |
||||
delete _validGimbalItem; |
||||
delete _validDistanceItem; |
||||
delete _validTimeItem; |
||||
delete _validStartVideoItem; |
||||
delete _validStopVideoItem; |
||||
delete _validStopDistanceItem; |
||||
delete _validStopTimeItem; |
||||
SectionTest::cleanup(); |
||||
} |
||||
|
||||
void CameraSectionTest::_createSpy(CameraSection* cameraSection, MultiSignalSpy** cameraSpy) |
||||
{ |
||||
*cameraSpy = NULL; |
||||
MultiSignalSpy* spy = new MultiSignalSpy(); |
||||
QCOMPARE(spy->init(cameraSection, rgCameraSignals, cCameraSignals), true); |
||||
*cameraSpy = spy; |
||||
} |
||||
|
||||
void CameraSectionTest::_testDirty(void) |
||||
{ |
||||
// Check for dirty not signalled if same value
|
||||
_cameraSection->setSpecifyGimbal(_cameraSection->specifyGimbal()); |
||||
QVERIFY(_spySection->checkNoSignals()); |
||||
QCOMPARE(_cameraSection->dirty(), false); |
||||
_cameraSection->gimbalPitch()->setRawValue(_cameraSection->gimbalPitch()->rawValue()); |
||||
QVERIFY(_spySection->checkNoSignals()); |
||||
QCOMPARE(_cameraSection->dirty(), false); |
||||
_cameraSection->gimbalYaw()->setRawValue(_cameraSection->gimbalPitch()->rawValue()); |
||||
QVERIFY(_spySection->checkNoSignals()); |
||||
QCOMPARE(_cameraSection->dirty(), false); |
||||
_cameraSection->cameraAction()->setRawValue(_cameraSection->cameraAction()->rawValue()); |
||||
QVERIFY(_spySection->checkNoSignals()); |
||||
QCOMPARE(_cameraSection->dirty(), false); |
||||
_cameraSection->cameraPhotoIntervalTime()->setRawValue(_cameraSection->cameraPhotoIntervalTime()->rawValue()); |
||||
QVERIFY(_spySection->checkNoSignals()); |
||||
QCOMPARE(_cameraSection->dirty(), false); |
||||
_cameraSection->cameraPhotoIntervalDistance()->setRawValue(_cameraSection->cameraPhotoIntervalDistance()->rawValue()); |
||||
QVERIFY(_spySection->checkNoSignals()); |
||||
QCOMPARE(_cameraSection->dirty(), false); |
||||
|
||||
// Check for no duplicate dirty signalling on change
|
||||
_cameraSection->setSpecifyGimbal(!_cameraSection->specifyGimbal()); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), true); |
||||
QCOMPARE(_cameraSection->dirty(), true); |
||||
_spySection->clearAllSignals(); |
||||
_cameraSection->setSpecifyGimbal(!_cameraSection->specifyGimbal()); |
||||
QVERIFY(_spySection->checkNoSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_cameraSection->dirty(), true); |
||||
_spySection->clearAllSignals(); |
||||
|
||||
// Check that the dirty bit can be cleared
|
||||
_cameraSection->setDirty(false); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), false); |
||||
QCOMPARE(_cameraSection->dirty(), false); |
||||
_spySection->clearAllSignals(); |
||||
|
||||
// Check the remaining items that should set dirty bit
|
||||
_cameraSection->gimbalPitch()->setRawValue(_cameraSection->gimbalPitch()->rawValue().toDouble() + 1); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), true); |
||||
QCOMPARE(_cameraSection->dirty(), true); |
||||
_cameraSection->setDirty(false); |
||||
_spySection->clearAllSignals(); |
||||
_cameraSection->gimbalYaw()->setRawValue(_cameraSection->gimbalPitch()->rawValue().toDouble() + 1); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), true); |
||||
QCOMPARE(_cameraSection->dirty(), true); |
||||
_cameraSection->setDirty(false); |
||||
_spySection->clearAllSignals(); |
||||
_cameraSection->cameraAction()->setRawValue(_cameraSection->cameraAction()->rawValue().toInt() + 1); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), true); |
||||
QCOMPARE(_cameraSection->dirty(), true); |
||||
_cameraSection->setDirty(false); |
||||
_spySection->clearAllSignals(); |
||||
_cameraSection->cameraPhotoIntervalTime()->setRawValue(_cameraSection->cameraPhotoIntervalTime()->rawValue().toInt() + 1); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), true); |
||||
QCOMPARE(_cameraSection->dirty(), true); |
||||
_cameraSection->setDirty(false); |
||||
_spySection->clearAllSignals(); |
||||
_cameraSection->cameraPhotoIntervalDistance()->setRawValue(_cameraSection->cameraPhotoIntervalDistance()->rawValue().toDouble() + 1); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), true); |
||||
QCOMPARE(_cameraSection->dirty(), true); |
||||
_cameraSection->setDirty(false); |
||||
_spySection->clearAllSignals(); |
||||
} |
||||
|
||||
void CameraSectionTest::_testSettingsAvailable(void) |
||||
{ |
||||
// No settings specified to start
|
||||
QVERIFY(_cameraSection->cameraAction()->rawValue().toInt() == CameraSection::CameraActionNone); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), false); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
|
||||
// Check correct reaction to specifyGimbal on/off
|
||||
|
||||
_cameraSection->setSpecifyGimbal(true); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), true); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QVERIFY(_spyCamera->checkSignalByMask(specifyGimbalChangedMask)); |
||||
QCOMPARE(_spyCamera->pullBoolFromSignalIndex(specifyGimbalChangedIndex), true); |
||||
QVERIFY(_spySection->checkSignalByMask(settingsSpecifiedChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(settingsSpecifiedChangedIndex), true); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
|
||||
_cameraSection->setSpecifyGimbal(false); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), false); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
QVERIFY(_spyCamera->checkSignalByMask(specifyGimbalChangedMask)); |
||||
QCOMPARE(_spyCamera->pullBoolFromSignalIndex(specifyGimbalChangedIndex), false); |
||||
QVERIFY(_spySection->checkSignalByMask(settingsSpecifiedChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(settingsSpecifiedChangedIndex), false); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
|
||||
// Check correct reaction to cameraAction on/off
|
||||
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::TakePhotosIntervalTime); |
||||
QVERIFY(_cameraSection->cameraAction()->rawValue().toInt() == CameraSection::TakePhotosIntervalTime); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QVERIFY(_spySection->checkSignalByMask(settingsSpecifiedChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(settingsSpecifiedChangedIndex), true); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::CameraActionNone); |
||||
QVERIFY(_cameraSection->cameraAction()->rawValue().toInt() == CameraSection::CameraActionNone); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
QVERIFY(_spySection->checkSignalByMask(settingsSpecifiedChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(settingsSpecifiedChangedIndex), false); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
|
||||
// Check that there is not multiple signalling of settingsSpecified
|
||||
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::TakePhotosIntervalTime); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::TakePhotosIntervalTime); |
||||
_cameraSection->setSpecifyGimbal(true); |
||||
QVERIFY(_spySection->checkSignalByMask(settingsSpecifiedChangedMask)); |
||||
} |
||||
|
||||
void CameraSectionTest::_checkAvailable(void) |
||||
{ |
||||
MissionItem missionItem(1, // sequence number
|
||||
MAV_CMD_NAV_TAKEOFF, |
||||
MAV_FRAME_GLOBAL_RELATIVE_ALT, |
||||
10.1234567, // param 1-7
|
||||
20.1234567, |
||||
30.1234567, |
||||
40.1234567, |
||||
50.1234567, |
||||
60.1234567, |
||||
70.1234567, |
||||
true, // autoContinue
|
||||
false); // isCurrentItem
|
||||
SimpleMissionItem* item = new SimpleMissionItem(_offlineVehicle, missionItem); |
||||
QVERIFY(item->cameraSection()); |
||||
QCOMPARE(item->cameraSection()->available(), false); |
||||
} |
||||
|
||||
|
||||
void CameraSectionTest::_testItemCount(void) |
||||
{ |
||||
// No settings specified to start
|
||||
QCOMPARE(_cameraSection->itemCount(), 0); |
||||
|
||||
// Check specifyGimbal
|
||||
|
||||
_cameraSection->setSpecifyGimbal(true); |
||||
QCOMPARE(_cameraSection->itemCount(), 1); |
||||
QVERIFY(_spySection->checkSignalByMask(itemCountChangedMask)); |
||||
QCOMPARE(_spySection->pullIntFromSignalIndex(itemCountChangedIndex), 1); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
|
||||
_cameraSection->setSpecifyGimbal(false); |
||||
QCOMPARE(_cameraSection->itemCount(), 0); |
||||
QVERIFY(_spySection->checkSignalByMask(itemCountChangedMask)); |
||||
QCOMPARE(_spySection->pullIntFromSignalIndex(itemCountChangedIndex), 0); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
|
||||
// Check camera actions
|
||||
|
||||
QList<int> rgCameraActions; |
||||
rgCameraActions << CameraSection::TakePhotosIntervalTime << CameraSection::TakePhotoIntervalDistance << CameraSection::StopTakingPhotos << CameraSection::TakeVideo << CameraSection::StopTakingVideo; |
||||
foreach(int cameraAction, rgCameraActions) { |
||||
qDebug() << "camera action" << cameraAction; |
||||
|
||||
// Reset
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::CameraActionNone); |
||||
QCOMPARE(_cameraSection->itemCount(), 0); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
|
||||
// Set to new action
|
||||
_cameraSection->cameraAction()->setRawValue(cameraAction); |
||||
QCOMPARE(_cameraSection->itemCount(), 1); |
||||
QVERIFY(_spySection->checkSignalByMask(itemCountChangedMask)); |
||||
QCOMPARE(_spySection->pullIntFromSignalIndex(itemCountChangedIndex), 1); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
} |
||||
|
||||
// Reset
|
||||
_cameraSection->setSpecifyGimbal(false); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::CameraActionNone); |
||||
QCOMPARE(_cameraSection->itemCount(), 0); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
|
||||
// Check both camera action and gimbal set
|
||||
_cameraSection->setSpecifyGimbal(true); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::TakePhotosIntervalTime); |
||||
QCOMPARE(_cameraSection->itemCount(), 2); |
||||
QVERIFY(_spySection->checkSignalsByMask(itemCountChangedMask)); |
||||
QCOMPARE(_spySection->pullIntFromSignalIndex(itemCountChangedIndex), 2); |
||||
_spySection->clearAllSignals(); |
||||
_spyCamera->clearAllSignals(); |
||||
} |
||||
|
||||
|
||||
void CameraSectionTest::_testAppendSectionItems(void) |
||||
{ |
||||
int seqNum = 0; |
||||
QList<MissionItem*> rgMissionItems; |
||||
|
||||
// No settings specified to start
|
||||
QCOMPARE(_cameraSection->itemCount(), 0); |
||||
_cameraSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 0); |
||||
QCOMPARE(seqNum, 0); |
||||
rgMissionItems.clear(); |
||||
|
||||
// Test specifyGimbal
|
||||
|
||||
_cameraSection->setSpecifyGimbal(true); |
||||
_cameraSection->gimbalPitch()->setRawValue(_validGimbalItem->missionItem().param1()); |
||||
_cameraSection->gimbalYaw()->setRawValue(_validGimbalItem->missionItem().param3()); |
||||
_cameraSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 1); |
||||
QCOMPARE(seqNum, 1); |
||||
_missionItemsEqual(*rgMissionItems[0], _validGimbalItem->missionItem()); |
||||
_cameraSection->setSpecifyGimbal(false); |
||||
rgMissionItems.clear(); |
||||
seqNum = 0; |
||||
|
||||
// Test camera actions
|
||||
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::TakePhotosIntervalTime); |
||||
_cameraSection->cameraPhotoIntervalTime()->setRawValue(_validTimeItem->missionItem().param1()); |
||||
_cameraSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 1); |
||||
QCOMPARE(seqNum, 1); |
||||
_missionItemsEqual(*rgMissionItems[0], _validTimeItem->missionItem()); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::CameraActionNone); |
||||
rgMissionItems.clear(); |
||||
seqNum = 0; |
||||
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::TakePhotoIntervalDistance); |
||||
_cameraSection->cameraPhotoIntervalDistance()->setRawValue(_validDistanceItem->missionItem().param1()); |
||||
_cameraSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 1); |
||||
QCOMPARE(seqNum, 1); |
||||
_missionItemsEqual(*rgMissionItems[0], _validDistanceItem->missionItem()); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::CameraActionNone); |
||||
rgMissionItems.clear(); |
||||
seqNum = 0; |
||||
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::TakeVideo); |
||||
_cameraSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 1); |
||||
QCOMPARE(seqNum, 1); |
||||
_missionItemsEqual(*rgMissionItems[0], _validStartVideoItem->missionItem()); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::CameraActionNone); |
||||
rgMissionItems.clear(); |
||||
seqNum = 0; |
||||
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::StopTakingVideo); |
||||
_cameraSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 1); |
||||
QCOMPARE(seqNum, 1); |
||||
_missionItemsEqual(*rgMissionItems[0], _validStopVideoItem->missionItem()); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::CameraActionNone); |
||||
rgMissionItems.clear(); |
||||
seqNum = 0; |
||||
|
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::StopTakingPhotos); |
||||
_cameraSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 2); |
||||
QCOMPARE(seqNum, 2); |
||||
_missionItemsEqual(*rgMissionItems[0], _validStopDistanceItem->missionItem()); |
||||
_missionItemsEqual(*rgMissionItems[1], _validStopTimeItem->missionItem()); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::CameraActionNone); |
||||
rgMissionItems.clear(); |
||||
seqNum = 0; |
||||
|
||||
// Test both
|
||||
_cameraSection->setSpecifyGimbal(true); |
||||
_cameraSection->gimbalPitch()->setRawValue(_validGimbalItem->missionItem().param1()); |
||||
_cameraSection->gimbalYaw()->setRawValue(_validGimbalItem->missionItem().param3()); |
||||
_cameraSection->cameraAction()->setRawValue(CameraSection::TakePhotosIntervalTime); |
||||
_cameraSection->cameraPhotoIntervalTime()->setRawValue(_validTimeItem->missionItem().param1()); |
||||
_cameraSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 2); |
||||
QCOMPARE(seqNum, 2); |
||||
_missionItemsEqual(*rgMissionItems[0], _validGimbalItem->missionItem()); |
||||
_missionItemsEqual(*rgMissionItems[1], _validTimeItem->missionItem()); |
||||
_cameraSection->setSpecifyGimbal(false); |
||||
rgMissionItems.clear(); |
||||
seqNum = 0; |
||||
} |
||||
|
||||
void CameraSectionTest::_testScanForGimbalSection(void) |
||||
{ |
||||
QCOMPARE(_cameraSection->available(), true); |
||||
|
||||
int scanIndex = 0; |
||||
QmlObjectListModel visualItems; |
||||
|
||||
_commonScanTest(_cameraSection); |
||||
|
||||
// Check for a scan success
|
||||
|
||||
SimpleMissionItem* newValidGimbalItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
newValidGimbalItem->missionItem() = _validGimbalItem->missionItem(); |
||||
visualItems.append(newValidGimbalItem); |
||||
scanIndex = 0; |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), true); |
||||
QCOMPARE(visualItems.count(), 0); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), true); |
||||
QCOMPARE(_cameraSection->gimbalPitch()->rawValue().toDouble(), _validGimbalItem->missionItem().param1()); |
||||
QCOMPARE(_cameraSection->gimbalYaw()->rawValue().toDouble(), _validGimbalItem->missionItem().param3()); |
||||
_cameraSection->setSpecifyGimbal(false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
#if 0 |
||||
MAV_CMD_DO_MOUNT_CONTROL |
||||
Mission Param #1 pitch (WIP: DEPRECATED: or lat in degrees) depending on mount mode. |
||||
Mission Param #2 roll (WIP: DEPRECATED: or lon in degrees) depending on mount mode. |
||||
Mission Param #3 yaw (WIP: DEPRECATED: or alt in meters) depending on mount mode. |
||||
Mission Param #4 WIP: alt in meters depending on mount mode. |
||||
Mission Param #5 WIP: latitude in degrees * 1E7, set if appropriate mount mode. |
||||
Mission Param #6 WIP: longitude in degrees * 1E7, set if appropriate mount mode. |
||||
Mission Param #7 MAV_MOUNT_MODE enum value |
||||
#endif |
||||
|
||||
// Gimbal command but incorrect settings
|
||||
|
||||
SimpleMissionItem invalidSimpleItem(_offlineVehicle, _validGimbalItem->missionItem()); |
||||
invalidSimpleItem.missionItem().setParam2(10); // roll is not supported
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), false); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validGimbalItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam4(10); // alt is not supported
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), false); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validGimbalItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam5(10); // lat is not supported
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), false); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validGimbalItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam6(10); // lon is not supported
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), false); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validGimbalItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam7(MAV_MOUNT_MODE_RETRACT); // Only MAV_MOUNT_MODE_MAVLINK_TARGETING supported
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), false); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
} |
||||
|
||||
void CameraSectionTest::_testScanForPhotoIntervalTimeSection(void) |
||||
{ |
||||
QCOMPARE(_cameraSection->available(), true); |
||||
|
||||
int scanIndex = 0; |
||||
QmlObjectListModel visualItems; |
||||
|
||||
_commonScanTest(_cameraSection); |
||||
|
||||
#if 0 |
||||
MAV_CMD_IMAGE_START_CAPTURE Start image capture sequence. Sends CAMERA_IMAGE_CAPTURED after each capture. |
||||
Mission Param #1 Duration between two consecutive pictures (in seconds) |
||||
Mission Param #2 Number of images to capture total - 0 for unlimited capture |
||||
Mission Param #3 Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc), set to 0 if param 4/5 are used, set to -1 for highest resolution possible. |
||||
Mission Param #4 WIP: Resolution horizontal in pixels |
||||
Mission Param #5 WIP: Resolution horizontal in pixels |
||||
Mission Param #6 WIP: Camera ID // Check for a scan success
|
||||
#endif |
||||
|
||||
SimpleMissionItem* newValidTimeItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
newValidTimeItem->missionItem() = _validTimeItem->missionItem(); |
||||
visualItems.append(newValidTimeItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), true); |
||||
QCOMPARE(visualItems.count(), 0); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QCOMPARE(_cameraSection->cameraAction()->rawValue().toInt(), (int)CameraSection::TakePhotosIntervalTime); |
||||
QCOMPARE(_cameraSection->cameraPhotoIntervalTime()->rawValue().toInt(), (int)_validTimeItem->missionItem().param1()); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
// Image start command but incorrect settings
|
||||
|
||||
SimpleMissionItem invalidSimpleItem(_offlineVehicle, _validTimeItem->missionItem()); |
||||
invalidSimpleItem.missionItem().setParam2(10); // must be unlimited
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validTimeItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam3(1.3); // must be -1
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validTimeItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam4(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validTimeItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam5(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validTimeItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam6(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validTimeItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam7(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
} |
||||
|
||||
void CameraSectionTest::_testScanForPhotoIntervalDistanceSection(void) |
||||
{ |
||||
QCOMPARE(_cameraSection->available(), true); |
||||
|
||||
int scanIndex = 0; |
||||
QmlObjectListModel visualItems; |
||||
|
||||
_commonScanTest(_cameraSection); |
||||
|
||||
#if 0 |
||||
MAV_CMD_DO_SET_CAM_TRIGG_DIST Mission command to set CAM_TRIGG_DIST for this flight |
||||
Mission Param #1 Camera trigger distance (meters) |
||||
Mission Param #2 Empty |
||||
Mission Param #3 Empty |
||||
Mission Param #4 Empty |
||||
Mission Param #5 Empty |
||||
Mission Param #6 Empty |
||||
Mission Param #7 Empty |
||||
#endif |
||||
|
||||
SimpleMissionItem* newValidDistanceItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
newValidDistanceItem->missionItem() = _validDistanceItem->missionItem(); |
||||
visualItems.append(newValidDistanceItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), true); |
||||
QCOMPARE(visualItems.count(), 0); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QCOMPARE(_cameraSection->cameraAction()->rawValue().toInt(), (int)CameraSection::TakePhotoIntervalDistance); |
||||
QCOMPARE(_cameraSection->cameraPhotoIntervalDistance()->rawValue().toInt(), (int)_validDistanceItem->missionItem().param1()); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
// Trigger distance command but incorrect settings
|
||||
|
||||
SimpleMissionItem invalidSimpleItem(_offlineVehicle, _validDistanceItem->missionItem()); |
||||
invalidSimpleItem.missionItem().setParam1(-1); // must be >= 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validDistanceItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam2(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validDistanceItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam3(1); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validDistanceItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam4(100); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validDistanceItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam5(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validDistanceItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam6(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validDistanceItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam7(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
} |
||||
|
||||
void CameraSectionTest::_testScanForStartVideoSection(void) |
||||
{ |
||||
QCOMPARE(_cameraSection->available(), true); |
||||
|
||||
int scanIndex = 0; |
||||
QmlObjectListModel visualItems; |
||||
|
||||
_commonScanTest(_cameraSection); |
||||
|
||||
#if 0 |
||||
MAV_CMD_VIDEO_STOP_CAPTURE Stop the current video capture (recording) |
||||
Mission Param #1 WIP: Camera ID |
||||
Mission Param #2 Reserved |
||||
Mission Param #3 Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc), set to 0 if param 4/5 are used, set to -1 for highest resolution possible. |
||||
Mission Param #4 WIP: Resolution horizontal in pixels |
||||
Mission Param #5 WIP: Resolution horizontal in pixels |
||||
Mission Param #6 WIP: Frequency CAMERA_CAPTURE_STATUS messages should be sent while recording (0 for no messages, otherwise time in Hz) |
||||
#endif |
||||
|
||||
SimpleMissionItem* newValidStartVideoItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
newValidStartVideoItem->missionItem() = _validStartVideoItem->missionItem(); |
||||
visualItems.append(newValidStartVideoItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), true); |
||||
QCOMPARE(visualItems.count(), 0); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QCOMPARE(_cameraSection->cameraAction()->rawValue().toInt(), (int)CameraSection::TakeVideo); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
// Trigger distance command but incorrect settings
|
||||
|
||||
SimpleMissionItem invalidSimpleItem(_offlineVehicle, _validStartVideoItem->missionItem()); |
||||
invalidSimpleItem.missionItem().setParam1(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStartVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam2(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStartVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam3(1); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStartVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam4(100); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStartVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam5(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStartVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam6(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStartVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam7(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
} |
||||
|
||||
void CameraSectionTest::_testScanForStopVideoSection(void) |
||||
{ |
||||
QCOMPARE(_cameraSection->available(), true); |
||||
|
||||
int scanIndex = 0; |
||||
QmlObjectListModel visualItems; |
||||
|
||||
_commonScanTest(_cameraSection); |
||||
|
||||
#if 0 |
||||
MAV_CMD_VIDEO_STOP_CAPTURE Stop the current video capture (recording) |
||||
Mission Param #1 WIP: Camera ID |
||||
#endif |
||||
|
||||
SimpleMissionItem* newValidStopVideoItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
newValidStopVideoItem->missionItem() = _validStopVideoItem->missionItem(); |
||||
visualItems.append(newValidStopVideoItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), true); |
||||
QCOMPARE(visualItems.count(), 0); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QCOMPARE(_cameraSection->cameraAction()->rawValue().toInt(), (int)CameraSection::StopTakingVideo); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
// Trigger distance command but incorrect settings
|
||||
|
||||
SimpleMissionItem invalidSimpleItem(_offlineVehicle, _validStopVideoItem->missionItem()); |
||||
invalidSimpleItem.missionItem().setParam1(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStopVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam2(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStopVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam3(1); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStopVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam4(100); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStopVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam5(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStopVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam6(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
|
||||
invalidSimpleItem.missionItem() = _validStopVideoItem->missionItem(); |
||||
invalidSimpleItem.missionItem().setParam7(10); // must be 0
|
||||
visualItems.append(&invalidSimpleItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
} |
||||
|
||||
void CameraSectionTest::_testScanForStopImageSection(void) |
||||
{ |
||||
QCOMPARE(_cameraSection->available(), true); |
||||
|
||||
int scanIndex = 0; |
||||
QmlObjectListModel visualItems; |
||||
|
||||
_commonScanTest(_cameraSection); |
||||
|
||||
SimpleMissionItem* newValidStopDistanceItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
SimpleMissionItem* newValidStopTimeItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
newValidStopDistanceItem->missionItem() = _validStopDistanceItem->missionItem(); |
||||
newValidStopTimeItem->missionItem() = _validStopTimeItem->missionItem(); |
||||
visualItems.append(newValidStopDistanceItem); |
||||
visualItems.append(newValidStopTimeItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), true); |
||||
QCOMPARE(visualItems.count(), 0); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QCOMPARE(_cameraSection->cameraAction()->rawValue().toInt(), (int)CameraSection::StopTakingPhotos); |
||||
visualItems.clear(); |
||||
|
||||
// Out of order commands
|
||||
|
||||
SimpleMissionItem validStopDistanceItem(_offlineVehicle); |
||||
SimpleMissionItem validStopTimeItem(_offlineVehicle); |
||||
validStopDistanceItem.missionItem() = _validStopDistanceItem->missionItem(); |
||||
validStopTimeItem.missionItem() = _validStopTimeItem->missionItem(); |
||||
visualItems.append(&validStopTimeItem); |
||||
visualItems.append(&validStopDistanceItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 2); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
} |
||||
|
||||
void CameraSectionTest::_testScanForFullSection(void) |
||||
{ |
||||
QCOMPARE(_cameraSection->available(), true); |
||||
|
||||
int scanIndex = 0; |
||||
QmlObjectListModel visualItems; |
||||
|
||||
_commonScanTest(_cameraSection); |
||||
|
||||
SimpleMissionItem* newValidGimbalItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
SimpleMissionItem* newValidDistanceItem = new SimpleMissionItem(_offlineVehicle, this); |
||||
newValidGimbalItem->missionItem() = _validGimbalItem->missionItem(); |
||||
newValidDistanceItem->missionItem() = _validDistanceItem->missionItem(); |
||||
visualItems.append(newValidGimbalItem); |
||||
visualItems.append(newValidDistanceItem); |
||||
QCOMPARE(_cameraSection->scanForSection(&visualItems, scanIndex), true); |
||||
QCOMPARE(visualItems.count(), 0); |
||||
QCOMPARE(_cameraSection->settingsSpecified(), true); |
||||
QCOMPARE(_cameraSection->specifyGimbal(), true); |
||||
QCOMPARE(_cameraSection->cameraAction()->rawValue().toInt(), (int)CameraSection::TakePhotoIntervalDistance); |
||||
QCOMPARE(_cameraSection->gimbalPitch()->rawValue().toDouble(), _validGimbalItem->missionItem().param1()); |
||||
QCOMPARE(_cameraSection->gimbalYaw()->rawValue().toDouble(), _validGimbalItem->missionItem().param3()); |
||||
QCOMPARE(_cameraSection->cameraPhotoIntervalDistance()->rawValue().toInt(), (int)_validDistanceItem->missionItem().param1()); |
||||
visualItems.clear(); |
||||
} |
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "SectionTest.h" |
||||
#include "CameraSection.h" |
||||
|
||||
/// Unit test for CameraSection
|
||||
class CameraSectionTest : public SectionTest |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
CameraSectionTest(void); |
||||
|
||||
void init(void) override; |
||||
void cleanup(void) override; |
||||
|
||||
private slots: |
||||
void _testDirty(void); |
||||
void _testSettingsAvailable(void); |
||||
void _checkAvailable(void); |
||||
void _testItemCount(void); |
||||
void _testAppendSectionItems(void); |
||||
void _testScanForGimbalSection(void); |
||||
void _testScanForPhotoIntervalTimeSection(void); |
||||
void _testScanForPhotoIntervalDistanceSection(void); |
||||
void _testScanForStartVideoSection(void); |
||||
void _testScanForStopVideoSection(void); |
||||
void _testScanForStopImageSection(void); |
||||
void _testScanForFullSection(void); |
||||
|
||||
private: |
||||
void _createSpy(CameraSection* cameraSection, MultiSignalSpy** cameraSpy); |
||||
|
||||
enum { |
||||
specifyGimbalChangedIndex = 0, |
||||
specifiedGimbalYawChangedIndex, |
||||
maxSignalIndex, |
||||
}; |
||||
|
||||
enum { |
||||
specifyGimbalChangedMask = 1 << specifyGimbalChangedIndex, |
||||
specifiedGimbalYawChangedMask = 1 << specifiedGimbalYawChangedIndex |
||||
}; |
||||
|
||||
static const size_t cCameraSignals = maxSignalIndex; |
||||
const char* rgCameraSignals[cCameraSignals]; |
||||
|
||||
MultiSignalSpy* _spyCamera; |
||||
MultiSignalSpy* _spySection; |
||||
CameraSection* _cameraSection; |
||||
SimpleMissionItem* _validGimbalItem; |
||||
SimpleMissionItem* _validDistanceItem; |
||||
SimpleMissionItem* _validTimeItem; |
||||
SimpleMissionItem* _validStartVideoItem; |
||||
SimpleMissionItem* _validStopVideoItem; |
||||
SimpleMissionItem* _validStopDistanceItem; |
||||
SimpleMissionItem* _validStopTimeItem; |
||||
}; |
@ -0,0 +1,101 @@
@@ -0,0 +1,101 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#include "SectionTest.h" |
||||
#include "SurveyMissionItem.h" |
||||
|
||||
SectionTest::SectionTest(void) |
||||
: _simpleItem(NULL) |
||||
{ |
||||
|
||||
} |
||||
|
||||
void SectionTest::init(void) |
||||
{ |
||||
VisualMissionItemTest::init(); |
||||
|
||||
rgSectionSignals[availableChangedIndex] = SIGNAL(availableChanged(bool)); |
||||
rgSectionSignals[settingsSpecifiedChangedIndex] = SIGNAL(settingsSpecifiedChanged(bool)); |
||||
rgSectionSignals[dirtyChangedIndex] = SIGNAL(dirtyChanged(bool)); |
||||
rgSectionSignals[itemCountChangedIndex] = SIGNAL(itemCountChanged(int)); |
||||
|
||||
MissionItem missionItem(1, // sequence number
|
||||
MAV_CMD_NAV_WAYPOINT, |
||||
MAV_FRAME_GLOBAL_RELATIVE_ALT, |
||||
10.1234567, // param 1-7
|
||||
20.1234567, |
||||
30.1234567, |
||||
40.1234567, |
||||
50.1234567, |
||||
60.1234567, |
||||
70.1234567, |
||||
true, // autoContinue
|
||||
false); // isCurrentItem
|
||||
_simpleItem = new SimpleMissionItem(_offlineVehicle, missionItem); |
||||
} |
||||
|
||||
void SectionTest::cleanup(void) |
||||
{ |
||||
delete _simpleItem; |
||||
VisualMissionItemTest::cleanup(); |
||||
} |
||||
|
||||
void SectionTest::_createSpy(Section* section, MultiSignalSpy** sectionSpy) |
||||
{ |
||||
*sectionSpy = NULL; |
||||
MultiSignalSpy* spy = new MultiSignalSpy(); |
||||
QCOMPARE(spy->init(section, rgSectionSignals, cSectionSignals), true); |
||||
*sectionSpy = spy; |
||||
} |
||||
|
||||
void SectionTest::_missionItemsEqual(MissionItem& item1, MissionItem& item2) |
||||
{ |
||||
QCOMPARE(item1.command(), item2.command()); |
||||
QCOMPARE(item1.frame(), item2.frame()); |
||||
QCOMPARE(item1.autoContinue(), item2.autoContinue()); |
||||
QCOMPARE(item1.param1(), item2.param1()); |
||||
QCOMPARE(item1.param2(), item2.param2()); |
||||
QCOMPARE(item1.param3(), item2.param3()); |
||||
QCOMPARE(item1.param4(), item2.param4()); |
||||
QCOMPARE(item1.param5(), item2.param5()); |
||||
QCOMPARE(item1.param6(), item2.param6()); |
||||
QCOMPARE(item1.param7(), item2.param7()); |
||||
} |
||||
|
||||
void SectionTest::_commonScanTest(Section* section) |
||||
{ |
||||
QCOMPARE(section->available(), true); |
||||
|
||||
QmlObjectListModel emptyVisualItems; |
||||
|
||||
QmlObjectListModel waypointVisualItems; |
||||
MissionItem waypointItem(0, MAV_CMD_NAV_WAYPOINT, MAV_FRAME_GLOBAL_RELATIVE_ALT, 0, 0, 0, 0, 0, 0, 0, true, false); |
||||
SimpleMissionItem simpleItem(_offlineVehicle, waypointItem); |
||||
waypointVisualItems.append(&simpleItem); |
||||
waypointVisualItems.append(&simpleItem); |
||||
waypointVisualItems.append(&simpleItem); |
||||
|
||||
QmlObjectListModel complexVisualItems; |
||||
SurveyMissionItem surveyItem(_offlineVehicle); |
||||
complexVisualItems.append(&surveyItem); |
||||
|
||||
// This tests the common cases which should not lead to scan succeess
|
||||
|
||||
int scanIndex = 0; |
||||
QCOMPARE(section->scanForSection(&emptyVisualItems, scanIndex), false); |
||||
QCOMPARE(scanIndex, 0); |
||||
|
||||
scanIndex = 0; |
||||
QCOMPARE(section->scanForSection(&waypointVisualItems, scanIndex), false); |
||||
QCOMPARE(scanIndex, 0); |
||||
|
||||
scanIndex = 0; |
||||
QCOMPARE(section->scanForSection(&complexVisualItems, scanIndex), false); |
||||
QCOMPARE(scanIndex, 0); |
||||
} |
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* 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 "SimpleMissionItemTest.h" |
||||
|
||||
/// Unit test for Sections
|
||||
class SectionTest : public VisualMissionItemTest |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
SectionTest(void); |
||||
|
||||
void init(void) override; |
||||
void cleanup(void) override; |
||||
|
||||
protected: |
||||
void _createSpy(Section* section, MultiSignalSpy** sectionSpy); |
||||
void _missionItemsEqual(MissionItem& item1, MissionItem& item2); |
||||
void _commonScanTest(Section* section); |
||||
|
||||
enum { |
||||
availableChangedIndex = 0, |
||||
settingsSpecifiedChangedIndex, |
||||
dirtyChangedIndex, |
||||
itemCountChangedIndex, |
||||
maxSignalIndex, |
||||
}; |
||||
|
||||
enum { |
||||
availableChangedMask = 1 << availableChangedIndex, |
||||
settingsSpecifiedChangedMask = 1 << settingsSpecifiedChangedIndex, |
||||
dirtyChangedMask = 1 << dirtyChangedIndex, |
||||
itemCountChangedMask = 1 << itemCountChangedIndex |
||||
}; |
||||
|
||||
static const size_t cSectionSignals = maxSignalIndex; |
||||
const char* rgSectionSignals[cSectionSignals]; |
||||
|
||||
SimpleMissionItem* _simpleItem; |
||||
}; |
@ -0,0 +1,266 @@
@@ -0,0 +1,266 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#include "SpeedSectionTest.h" |
||||
|
||||
SpeedSectionTest::SpeedSectionTest(void) |
||||
: _spySpeed(NULL) |
||||
, _spySection(NULL) |
||||
, _speedSection(NULL) |
||||
{ |
||||
|
||||
} |
||||
|
||||
void SpeedSectionTest::init(void) |
||||
{ |
||||
SectionTest::init(); |
||||
|
||||
rgSpeedSignals[specifyFlightSpeedChangedIndex] = SIGNAL(specifyFlightSpeedChanged(bool)); |
||||
|
||||
_speedSection = _simpleItem->speedSection(); |
||||
_createSpy(_speedSection, &_spySpeed); |
||||
QVERIFY(_spySpeed); |
||||
SectionTest::_createSpy(_speedSection, &_spySection); |
||||
QVERIFY(_spySection); |
||||
} |
||||
|
||||
void SpeedSectionTest::cleanup(void) |
||||
{ |
||||
delete _spySpeed; |
||||
delete _spySection; |
||||
SectionTest::cleanup(); |
||||
} |
||||
|
||||
void SpeedSectionTest::_createSpy(SpeedSection* speedSection, MultiSignalSpy** speedSpy) |
||||
{ |
||||
*speedSpy = NULL; |
||||
MultiSignalSpy* spy = new MultiSignalSpy(); |
||||
QCOMPARE(spy->init(speedSection, rgSpeedSignals, cSpeedSignals), true); |
||||
*speedSpy = spy; |
||||
} |
||||
|
||||
void SpeedSectionTest::_testDirty(void) |
||||
{ |
||||
// Check for dirty not signalled if same value
|
||||
_speedSection->setSpecifyFlightSpeed(_speedSection->specifyFlightSpeed()); |
||||
QVERIFY(_spySection->checkNoSignals()); |
||||
QCOMPARE(_speedSection->dirty(), false); |
||||
_speedSection->flightSpeed()->setRawValue(_speedSection->flightSpeed()->rawValue()); |
||||
QVERIFY(_spySection->checkNoSignals()); |
||||
QCOMPARE(_speedSection->dirty(), false); |
||||
|
||||
// Check for no duplicate dirty signalling on change
|
||||
_speedSection->setSpecifyFlightSpeed(!_speedSection->specifyFlightSpeed()); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), true); |
||||
QCOMPARE(_speedSection->dirty(), true); |
||||
_spySection->clearAllSignals(); |
||||
_speedSection->setSpecifyFlightSpeed(!_speedSection->specifyFlightSpeed()); |
||||
QVERIFY(_spySection->checkNoSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_speedSection->dirty(), true); |
||||
_spySection->clearAllSignals(); |
||||
|
||||
// Check that the dirty bit can be cleared
|
||||
_speedSection->setDirty(false); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), false); |
||||
QCOMPARE(_speedSection->dirty(), false); |
||||
_spySection->clearAllSignals(); |
||||
|
||||
// Check the remaining items that should set dirty bit
|
||||
_speedSection->flightSpeed()->setRawValue(_speedSection->flightSpeed()->rawValue().toDouble() + 1); |
||||
QVERIFY(_spySection->checkSignalByMask(dirtyChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(dirtyChangedIndex), true); |
||||
QCOMPARE(_speedSection->dirty(), true); |
||||
} |
||||
|
||||
void SpeedSectionTest::_testSettingsAvailable(void) |
||||
{ |
||||
// No settings specified to start
|
||||
QCOMPARE(_speedSection->specifyFlightSpeed(), false); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
|
||||
// Check correct reaction to specifyFlightSpeed on/off
|
||||
|
||||
_speedSection->setSpecifyFlightSpeed(true); |
||||
QCOMPARE(_speedSection->specifyFlightSpeed(), true); |
||||
QCOMPARE(_speedSection->settingsSpecified(), true); |
||||
QVERIFY(_spySpeed->checkSignalByMask(specifyFlightSpeedChangedMask)); |
||||
QCOMPARE(_spySpeed->pullBoolFromSignalIndex(specifyFlightSpeedChangedIndex), true); |
||||
QVERIFY(_spySection->checkSignalByMask(settingsSpecifiedChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(settingsSpecifiedChangedIndex), true); |
||||
_spySection->clearAllSignals(); |
||||
_spySpeed->clearAllSignals(); |
||||
|
||||
_speedSection->setSpecifyFlightSpeed(false); |
||||
QCOMPARE(_speedSection->specifyFlightSpeed(), false); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
QVERIFY(_spySpeed->checkSignalByMask(specifyFlightSpeedChangedMask)); |
||||
QCOMPARE(_spySpeed->pullBoolFromSignalIndex(specifyFlightSpeedChangedIndex), false); |
||||
QVERIFY(_spySection->checkSignalByMask(settingsSpecifiedChangedMask)); |
||||
QCOMPARE(_spySection->pullBoolFromSignalIndex(settingsSpecifiedChangedIndex), false); |
||||
_spySection->clearAllSignals(); |
||||
_spySpeed->clearAllSignals(); |
||||
} |
||||
|
||||
void SpeedSectionTest::_checkAvailable(void) |
||||
{ |
||||
MissionItem missionItem(1, // sequence number
|
||||
MAV_CMD_NAV_TAKEOFF, |
||||
MAV_FRAME_GLOBAL_RELATIVE_ALT, |
||||
10.1234567, // param 1-7
|
||||
20.1234567, |
||||
30.1234567, |
||||
40.1234567, |
||||
50.1234567, |
||||
60.1234567, |
||||
70.1234567, |
||||
true, // autoContinue
|
||||
false); // isCurrentItem
|
||||
SimpleMissionItem* item = new SimpleMissionItem(_offlineVehicle, missionItem); |
||||
QVERIFY(item->speedSection()); |
||||
QCOMPARE(item->speedSection()->available(), false); |
||||
} |
||||
|
||||
void SpeedSectionTest::_testItemCount(void) |
||||
{ |
||||
// No settings specified to start
|
||||
QCOMPARE(_speedSection->itemCount(), 0); |
||||
|
||||
_speedSection->setSpecifyFlightSpeed(true); |
||||
QCOMPARE(_speedSection->itemCount(), 1); |
||||
QVERIFY(_spySection->checkSignalByMask(itemCountChangedMask)); |
||||
QCOMPARE(_spySection->pullIntFromSignalIndex(itemCountChangedIndex), 1); |
||||
_spySection->clearAllSignals(); |
||||
_spySpeed->clearAllSignals(); |
||||
|
||||
_speedSection->setSpecifyFlightSpeed(false); |
||||
QCOMPARE(_speedSection->itemCount(), 0); |
||||
QVERIFY(_spySection->checkSignalByMask(itemCountChangedMask)); |
||||
QCOMPARE(_spySection->pullIntFromSignalIndex(itemCountChangedIndex), 0); |
||||
_spySection->clearAllSignals(); |
||||
_spySpeed->clearAllSignals(); |
||||
} |
||||
|
||||
void SpeedSectionTest::_testAppendSectionItems(void) |
||||
{ |
||||
int seqNum = 0; |
||||
QList<MissionItem*> rgMissionItems; |
||||
|
||||
// No settings specified to start
|
||||
QCOMPARE(_speedSection->itemCount(), 0); |
||||
|
||||
_speedSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 0); |
||||
QCOMPARE(seqNum, 0); |
||||
rgMissionItems.clear(); |
||||
|
||||
_speedSection->setSpecifyFlightSpeed(true); |
||||
_speedSection->appendSectionItems(rgMissionItems, this, seqNum); |
||||
QCOMPARE(rgMissionItems.count(), 1); |
||||
QCOMPARE(seqNum, 1); |
||||
MissionItem expectedSpeedItem(0, MAV_CMD_DO_CHANGE_SPEED, MAV_FRAME_MISSION, _offlineVehicle->multiRotor() ? 1 : 0, _speedSection->flightSpeed()->rawValue().toDouble(), -1, 0, 0, 0, 0, true, false); |
||||
_missionItemsEqual(*rgMissionItems[0], expectedSpeedItem); |
||||
} |
||||
|
||||
void SpeedSectionTest::_testScanForSection(void) |
||||
{ |
||||
QCOMPARE(_speedSection->available(), true); |
||||
|
||||
int scanIndex = 0; |
||||
QmlObjectListModel visualItems; |
||||
|
||||
_commonScanTest(_speedSection); |
||||
|
||||
// Check for a scan success
|
||||
|
||||
double flightSpeed = 10.123456; |
||||
MissionItem validSpeedItem(0, MAV_CMD_DO_CHANGE_SPEED, MAV_FRAME_MISSION, _offlineVehicle->multiRotor() ? 1 : 0, flightSpeed, -1, 0, 0, 0, 0, true, false); |
||||
SimpleMissionItem simpleItem(_offlineVehicle, validSpeedItem); |
||||
MissionItem& simpleMissionItem = simpleItem.missionItem(); |
||||
visualItems.append(&simpleItem); |
||||
scanIndex = 0; |
||||
QCOMPARE(_speedSection->scanForSection(&visualItems, scanIndex), true); |
||||
QCOMPARE(visualItems.count(), 0); |
||||
QCOMPARE(_speedSection->settingsSpecified(), true); |
||||
QCOMPARE(_speedSection->specifyFlightSpeed(), true); |
||||
QCOMPARE(_speedSection->flightSpeed()->rawValue().toDouble(), flightSpeed); |
||||
_speedSection->setSpecifyFlightSpeed(false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
// Flight speed command but incorrect settings
|
||||
|
||||
simpleMissionItem = validSpeedItem; |
||||
simpleMissionItem.setParam1(_offlineVehicle->multiRotor() ? 0 : 1); |
||||
visualItems.append(&simpleItem); |
||||
QCOMPARE(_speedSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
simpleMissionItem = validSpeedItem; |
||||
simpleMissionItem.setParam3(50); |
||||
visualItems.append(&simpleItem); |
||||
QCOMPARE(_speedSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
simpleMissionItem = validSpeedItem; |
||||
simpleMissionItem.setParam4(1); |
||||
visualItems.append(&simpleItem); |
||||
QCOMPARE(_speedSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
simpleMissionItem = validSpeedItem; |
||||
simpleMissionItem.setParam5(1); |
||||
visualItems.append(&simpleItem); |
||||
QCOMPARE(_speedSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
simpleMissionItem = validSpeedItem; |
||||
simpleMissionItem.setParam6(1); |
||||
visualItems.append(&simpleItem); |
||||
QCOMPARE(_speedSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
simpleMissionItem = validSpeedItem; |
||||
simpleMissionItem.setParam7(1); |
||||
visualItems.append(&simpleItem); |
||||
QCOMPARE(_speedSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 1); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
|
||||
// Valid item in wrong position
|
||||
QmlObjectListModel waypointVisualItems; |
||||
MissionItem waypointMissionItem(0, MAV_CMD_NAV_WAYPOINT, MAV_FRAME_GLOBAL_RELATIVE_ALT, 0, 0, 0, 0, 0, 0, 0, true, false); |
||||
SimpleMissionItem simpleWaypointItem(_offlineVehicle, waypointMissionItem); |
||||
simpleMissionItem = validSpeedItem; |
||||
visualItems.append(&simpleWaypointItem); |
||||
visualItems.append(&simpleMissionItem); |
||||
QCOMPARE(_speedSection->scanForSection(&visualItems, scanIndex), false); |
||||
QCOMPARE(visualItems.count(), 2); |
||||
QCOMPARE(_speedSection->settingsSpecified(), false); |
||||
visualItems.clear(); |
||||
scanIndex = 0; |
||||
} |
@ -0,0 +1,52 @@
@@ -0,0 +1,52 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "SectionTest.h" |
||||
#include "SpeedSection.h" |
||||
|
||||
/// Unit test for CameraSection
|
||||
class SpeedSectionTest : public SectionTest |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
SpeedSectionTest(void); |
||||
|
||||
void init(void) override; |
||||
void cleanup(void) override; |
||||
|
||||
private slots: |
||||
void _testDirty(void); |
||||
void _testSettingsAvailable(void); |
||||
void _checkAvailable(void); |
||||
void _testItemCount(void); |
||||
void _testAppendSectionItems(void); |
||||
void _testScanForSection(void); |
||||
|
||||
private: |
||||
void _createSpy(SpeedSection* speedSection, MultiSignalSpy** speedSpy); |
||||
|
||||
enum { |
||||
specifyFlightSpeedChangedIndex = 0, |
||||
maxSignalIndex, |
||||
}; |
||||
|
||||
enum { |
||||
specifyFlightSpeedChangedMask = 1 << specifyFlightSpeedChangedIndex |
||||
}; |
||||
|
||||
static const size_t cSpeedSignals = maxSignalIndex; |
||||
const char* rgSpeedSignals[cSpeedSignals]; |
||||
|
||||
MultiSignalSpy* _spySpeed; |
||||
MultiSignalSpy* _spySection; |
||||
SpeedSection* _speedSection; |
||||
}; |
@ -0,0 +1,58 @@
@@ -0,0 +1,58 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#include "VisualMissionItemTest.h" |
||||
#include "SimpleMissionItem.h" |
||||
#include "QGCApplication.h" |
||||
|
||||
VisualMissionItemTest::VisualMissionItemTest(void) |
||||
: _offlineVehicle(NULL) |
||||
{ |
||||
|
||||
} |
||||
|
||||
void VisualMissionItemTest::init(void) |
||||
{ |
||||
UnitTest::init(); |
||||
_offlineVehicle = new Vehicle(MAV_AUTOPILOT_PX4, |
||||
MAV_TYPE_QUADROTOR, |
||||
qgcApp()->toolbox()->firmwarePluginManager(), |
||||
this); |
||||
|
||||
rgVisualItemSignals[altDifferenceChangedIndex] = SIGNAL(altDifferenceChanged(double)); |
||||
rgVisualItemSignals[altPercentChangedIndex] = SIGNAL(altPercentChanged(double)); |
||||
rgVisualItemSignals[azimuthChangedIndex] = SIGNAL(azimuthChanged(double)); |
||||
rgVisualItemSignals[commandDescriptionChangedIndex] = SIGNAL(commandDescriptionChanged()); |
||||
rgVisualItemSignals[commandNameChangedIndex] = SIGNAL(commandNameChanged()); |
||||
rgVisualItemSignals[abbreviationChangedIndex] = SIGNAL(abbreviationChanged()); |
||||
rgVisualItemSignals[coordinateChangedIndex] = SIGNAL(coordinateChanged(const QGeoCoordinate&)); |
||||
rgVisualItemSignals[exitCoordinateChangedIndex] = SIGNAL(exitCoordinateChanged(const QGeoCoordinate&)); |
||||
rgVisualItemSignals[dirtyChangedIndex] = SIGNAL(dirtyChanged(bool)); |
||||
rgVisualItemSignals[distanceChangedIndex] = SIGNAL(distanceChanged(double)); |
||||
rgVisualItemSignals[isCurrentItemChangedIndex] = SIGNAL(isCurrentItemChanged(bool)); |
||||
rgVisualItemSignals[sequenceNumberChangedIndex] = SIGNAL(sequenceNumberChanged(int)); |
||||
rgVisualItemSignals[isSimpleItemChangedIndex] = SIGNAL(isSimpleItemChanged(bool)); |
||||
rgVisualItemSignals[specifiesCoordinateChangedIndex] = SIGNAL(specifiesCoordinateChanged()); |
||||
rgVisualItemSignals[isStandaloneCoordinateChangedIndex] = SIGNAL(isStandaloneCoordinateChanged()); |
||||
rgVisualItemSignals[specifiesAltitudeOnlyChangedIndex] = SIGNAL(specifiesAltitudeOnlyChanged()); |
||||
rgVisualItemSignals[specifiedFlightSpeedChangedIndex] = SIGNAL(specifiedFlightSpeedChanged()); |
||||
rgVisualItemSignals[specifiedGimbalYawChangedIndex] = SIGNAL(specifiedGimbalYawChanged()); |
||||
rgVisualItemSignals[lastSequenceNumberChangedIndex] = SIGNAL(lastSequenceNumberChanged(int)); |
||||
rgVisualItemSignals[missionGimbalYawChangedIndex] = SIGNAL(missionGimbalYawChanged(double)); |
||||
rgVisualItemSignals[missionVehicleYawChangedIndex] = SIGNAL(missionVehicleYawChanged(double)); |
||||
rgVisualItemSignals[coordinateHasRelativeAltitudeChangedIndex] = SIGNAL(coordinateHasRelativeAltitudeChanged(bool)); |
||||
rgVisualItemSignals[exitCoordinateHasRelativeAltitudeChangedIndex] = SIGNAL(exitCoordinateHasRelativeAltitudeChanged(bool)); |
||||
rgVisualItemSignals[exitCoordinateSameAsEntryChangedIndex] = SIGNAL(exitCoordinateSameAsEntryChanged(bool)); |
||||
} |
||||
|
||||
void VisualMissionItemTest::cleanup(void) |
||||
{ |
||||
delete _offlineVehicle; |
||||
UnitTest::cleanup(); |
||||
} |
@ -0,0 +1,89 @@
@@ -0,0 +1,89 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "UnitTest.h" |
||||
#include "TCPLink.h" |
||||
#include "MultiSignalSpy.h" |
||||
|
||||
#include <QGeoCoordinate> |
||||
|
||||
/// Unit test for SimpleMissionItem
|
||||
class VisualMissionItemTest : public UnitTest |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
VisualMissionItemTest(void); |
||||
|
||||
void init(void) override; |
||||
void cleanup(void) override; |
||||
|
||||
protected: |
||||
enum { |
||||
altDifferenceChangedIndex = 0, |
||||
altPercentChangedIndex, |
||||
azimuthChangedIndex, |
||||
commandDescriptionChangedIndex, |
||||
commandNameChangedIndex, |
||||
abbreviationChangedIndex, |
||||
coordinateChangedIndex, |
||||
exitCoordinateChangedIndex, |
||||
dirtyChangedIndex, |
||||
distanceChangedIndex, |
||||
isCurrentItemChangedIndex, |
||||
sequenceNumberChangedIndex, |
||||
isSimpleItemChangedIndex, |
||||
specifiesCoordinateChangedIndex, |
||||
isStandaloneCoordinateChangedIndex, |
||||
specifiesAltitudeOnlyChangedIndex, |
||||
specifiedFlightSpeedChangedIndex, |
||||
specifiedGimbalYawChangedIndex, |
||||
lastSequenceNumberChangedIndex, |
||||
missionGimbalYawChangedIndex, |
||||
missionVehicleYawChangedIndex, |
||||
coordinateHasRelativeAltitudeChangedIndex, |
||||
exitCoordinateHasRelativeAltitudeChangedIndex, |
||||
exitCoordinateSameAsEntryChangedIndex, |
||||
maxSignalIndex, |
||||
}; |
||||
|
||||
enum { |
||||
altDifferenceChangedMask = 1 << altDifferenceChangedIndex, |
||||
altPercentChangedMask = 1 << altPercentChangedIndex, |
||||
azimuthChangedMask = 1 << azimuthChangedIndex, |
||||
commandDescriptionChangedMask = 1 << commandDescriptionChangedIndex, |
||||
commandNameChangedMask = 1 << commandNameChangedIndex, |
||||
abbreviationChangedMask = 1 << abbreviationChangedIndex, |
||||
coordinateChangedMask = 1 << coordinateChangedIndex, |
||||
exitCoordinateChangedMask = 1 << exitCoordinateChangedIndex, |
||||
dirtyChangedMask = 1 << dirtyChangedIndex, |
||||
distanceChangedMask = 1 << distanceChangedIndex, |
||||
isCurrentItemChangedMask = 1 << isCurrentItemChangedIndex, |
||||
sequenceNumberChangedMask = 1 << sequenceNumberChangedIndex, |
||||
isSimpleItemChangedMask = 1 << isSimpleItemChangedIndex, |
||||
specifiesCoordinateChangedMask = 1 << specifiesCoordinateChangedIndex, |
||||
isStandaloneCoordinateChangedMask = 1 << isStandaloneCoordinateChangedIndex, |
||||
specifiesAltitudeOnlyChangedMask = 1 << specifiesAltitudeOnlyChangedIndex, |
||||
specifiedFlightSpeedChangedMask = 1 << specifiedFlightSpeedChangedIndex, |
||||
specifiedGimbalYawChangedMask = 1 << specifiedGimbalYawChangedIndex, |
||||
lastSequenceNumberChangedMask = 1 << lastSequenceNumberChangedIndex, |
||||
missionGimbalYawChangedMask = 1 << missionGimbalYawChangedIndex, |
||||
missionVehicleYawChangedMask = 1 << missionVehicleYawChangedIndex, |
||||
coordinateHasRelativeAltitudeChangedMask = 1 << coordinateHasRelativeAltitudeChangedIndex, |
||||
exitCoordinateHasRelativeAltitudeChangedMask = 1 << exitCoordinateHasRelativeAltitudeChangedIndex, |
||||
exitCoordinateSameAsEntryChangedMask = 1 << exitCoordinateSameAsEntryChangedIndex, |
||||
}; |
||||
|
||||
static const size_t cVisualItemSignals = maxSignalIndex; |
||||
const char* rgVisualItemSignals[cVisualItemSignals]; |
||||
|
||||
Vehicle* _offlineVehicle; |
||||
}; |
Loading…
Reference in new issue