/**************************************************************************** * * (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 "StructureScanComplexItemTest.h" #include "QGCApplication.h" StructureScanComplexItemTest::StructureScanComplexItemTest(void) : _offlineVehicle(nullptr) { _polyPoints << QGeoCoordinate(47.633550640000003, -122.08982199) << QGeoCoordinate(47.634129020000003, -122.08887249) << QGeoCoordinate(47.633619320000001, -122.08811074) << QGeoCoordinate(47.633189139999999, -122.08900124); } void StructureScanComplexItemTest::init(void) { UnitTest::init(); _rgSignals[dirtyChangedIndex] = SIGNAL(dirtyChanged(bool)); _offlineVehicle = new Vehicle(MAV_AUTOPILOT_PX4, MAV_TYPE_QUADROTOR, qgcApp()->toolbox()->firmwarePluginManager(), this); _structureScanItem = new StructureScanComplexItem(_offlineVehicle, false /* flyView */, QString() /* kmlFile */, this /* parent */); _structureScanItem->setDirty(false); _multiSpy = new MultiSignalSpy(); Q_CHECK_PTR(_multiSpy); QCOMPARE(_multiSpy->init(_structureScanItem, _rgSignals, _cSignals), true); } void StructureScanComplexItemTest::cleanup(void) { delete _structureScanItem; delete _offlineVehicle; } void StructureScanComplexItemTest::_testDirty(void) { QVERIFY(!_structureScanItem->dirty()); _structureScanItem->setDirty(false); QVERIFY(!_structureScanItem->dirty()); QVERIFY(_multiSpy->checkNoSignals()); _structureScanItem->setDirty(true); QVERIFY(_structureScanItem->dirty()); QVERIFY(_multiSpy->checkOnlySignalByMask(dirtyChangedMask)); QVERIFY(_multiSpy->pullBoolFromSignalIndex(dirtyChangedIndex)); _multiSpy->clearAllSignals(); _structureScanItem->setDirty(false); QVERIFY(!_structureScanItem->dirty()); QVERIFY(_multiSpy->checkOnlySignalByMask(dirtyChangedMask)); QVERIFY(!_multiSpy->pullBoolFromSignalIndex(dirtyChangedIndex)); _multiSpy->clearAllSignals(); // These facts should set dirty when changed QList rgFacts; rgFacts << _structureScanItem->entranceAlt() << _structureScanItem->layers(); for(Fact* fact: rgFacts) { qDebug() << fact->name(); QVERIFY(!_structureScanItem->dirty()); if (fact->typeIsBool()) { fact->setRawValue(!fact->rawValue().toBool()); } else { fact->setRawValue(fact->rawValue().toDouble() + 1); } QVERIFY(_multiSpy->checkSignalByMask(dirtyChangedMask)); QVERIFY(_multiSpy->pullBoolFromSignalIndex(dirtyChangedIndex)); _structureScanItem->setDirty(false); _multiSpy->clearAllSignals(); } rgFacts.clear(); } void StructureScanComplexItemTest::_initItem(void) { QGCMapPolygon* mapPolygon = _structureScanItem->structurePolygon(); for (int i=0; i<_polyPoints.count(); i++) { QGeoCoordinate& vertex = _polyPoints[i]; mapPolygon->appendVertex(vertex); } _structureScanItem->cameraCalc()->cameraName()->setRawValue(CameraCalc::manualCameraName()); _structureScanItem->layers()->setCookedValue(2); _structureScanItem->setDirty(false); _validateItem(_structureScanItem); } void StructureScanComplexItemTest::_validateItem(StructureScanComplexItem* item) { QGCMapPolygon* mapPolygon = item->structurePolygon(); for (int i=0; i<_polyPoints.count(); i++) { QGeoCoordinate& expectedVertex = _polyPoints[i]; QGeoCoordinate actualVertex = mapPolygon->vertexCoordinate(i); QCOMPARE(expectedVertex, actualVertex); } QVERIFY(_structureScanItem->cameraCalc()->isManualCamera()); QCOMPARE(item->layers()->cookedValue().toInt(), 2); } void StructureScanComplexItemTest::_testSaveLoad(void) { _initItem(); QJsonArray items; _structureScanItem->save(items); QString errorString; StructureScanComplexItem* newItem = new StructureScanComplexItem(_offlineVehicle, false /* flyView */, QString() /* kmlFile */, this /* parent */); QVERIFY(newItem->load(items[0].toObject(), 10, errorString)); QVERIFY(errorString.isEmpty()); _validateItem(newItem); newItem->deleteLater(); } void StructureScanComplexItemTest::_testItemCount(void) { QList items; _initItem(); _structureScanItem->appendMissionItems(items, this); QCOMPARE(items.count() - 1, _structureScanItem->lastSequenceNumber()); }