From a06f59723a8d3a212ee38dd58855bacde1cf179e Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 14 Feb 2018 04:06:47 +0100 Subject: [PATCH] Ref T251, unit test for gnd flag sending --- src/blackmisc/aviation/aircraftenginelist.cpp | 10 +++ src/blackmisc/aviation/aircraftenginelist.h | 3 + src/blackmisc/json.cpp | 33 +++++---- src/blackmisc/json.h | 6 +- tests/blackmisc/testaircraftparts.cpp | 67 +++++++++++++++++++ tests/blackmisc/testaircraftparts.h | 43 ++++++++++++ tests/blackmisc/testblackmiscmain.cpp | 5 ++ 7 files changed, 154 insertions(+), 13 deletions(-) create mode 100644 tests/blackmisc/testaircraftparts.cpp create mode 100644 tests/blackmisc/testaircraftparts.h diff --git a/src/blackmisc/aviation/aircraftenginelist.cpp b/src/blackmisc/aviation/aircraftenginelist.cpp index 3c456fbbe..7d05e0f7b 100644 --- a/src/blackmisc/aviation/aircraftenginelist.cpp +++ b/src/blackmisc/aviation/aircraftenginelist.cpp @@ -43,6 +43,16 @@ namespace BlackMisc return this->getEngine(engineNumber).isOn(); } + void CAircraftEngineList::initEngines(int engineNumber, bool on) + { + this->clear(); + for (int e = 0; e < engineNumber; e++) + { + const CAircraftEngine engine(e + 1, on); + this->push_back(engine); + } + } + bool CAircraftEngineList::isAnyEngineOn() const { return this->contains(&CAircraftEngine::isOn, true); diff --git a/src/blackmisc/aviation/aircraftenginelist.h b/src/blackmisc/aviation/aircraftenginelist.h index 2a6a5f4fc..6eacf9226 100644 --- a/src/blackmisc/aviation/aircraftenginelist.h +++ b/src/blackmisc/aviation/aircraftenginelist.h @@ -53,6 +53,9 @@ namespace BlackMisc //! Engine number 1..x on? bool isEngineOn(int engineNumber) const; + //! Init some engines + void initEngines(int engineNumber, bool on); + //! Is any engine on? bool isAnyEngineOn() const; diff --git a/src/blackmisc/json.cpp b/src/blackmisc/json.cpp index aa462ac07..ac744e6fe 100644 --- a/src/blackmisc/json.cpp +++ b/src/blackmisc/json.cpp @@ -16,6 +16,8 @@ #include #include +using namespace BlackMisc; + class QPixmap; const QJsonValue &operator >>(const QJsonValue &json, int &value) @@ -308,74 +310,74 @@ QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(value.second); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(value.second); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(static_cast(value.second)); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(value.second); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(static_cast(value.second)); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(value.second); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(QJsonArray::fromStringList(value.second)); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(value.second); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(value.second); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { json[value.first] = QJsonValue(value.second.toString()); return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { QString pm(BlackMisc::pixmapToPngHexString(value.second)); json[value.first] = pm; return json; } -QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) { QString pm(BlackMisc::bytesToHexString(value.second)); json[value.first] = pm; @@ -393,6 +395,13 @@ namespace BlackMisc return acceptCacheFormat ? Json::swiftDataObjectValue(jsonDoc.object()) : jsonDoc.object(); } + QString stringFromJsonObject(const QJsonObject &jsonObject, QJsonDocument::JsonFormat format) + { + const QJsonDocument doc(jsonObject); + const QString strJson(doc.toJson(format)); + return strJson; + } + QJsonArray jsonArrayFromString(const QString &json) { if (json.isEmpty()) { return QJsonArray();} diff --git a/src/blackmisc/json.h b/src/blackmisc/json.h index 0a12b1f11..9bcee26c0 100644 --- a/src/blackmisc/json.h +++ b/src/blackmisc/json.h @@ -239,6 +239,10 @@ namespace BlackMisc //! \ingroup JSON BLACKMISC_EXPORT QJsonObject jsonObjectFromString(const QString &json, bool acceptCacheFormat = false); + //! JSON Object from string + //! \ingroup JSON + BLACKMISC_EXPORT QString stringFromJsonObject(const QJsonObject &jsonObject, QJsonDocument::JsonFormat format = QJsonDocument::Indented); + //! JSON Array from string //! \ingroup JSON BLACKMISC_EXPORT QJsonArray jsonArrayFromString(const QString &json); @@ -444,7 +448,7 @@ namespace BlackMisc #define BLACKMISC_DECLARE_USING_MIXIN_JSON(DERIVED) \ using ::BlackMisc::Mixin::JsonByMetaClass::toJson; \ using ::BlackMisc::Mixin::JsonByMetaClass::convertFromJson; - } // Mixin + } // Mixin ns } // guard #endif // guard diff --git a/tests/blackmisc/testaircraftparts.cpp b/tests/blackmisc/testaircraftparts.cpp new file mode 100644 index 000000000..4b9c557df --- /dev/null +++ b/tests/blackmisc/testaircraftparts.cpp @@ -0,0 +1,67 @@ +/* Copyright (C) 2018 + * swift Project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \cond PRIVATE_TESTS + +/*! + * \file + * \ingroup testblackmisc + */ + +#include "testaircraftparts.h" +#include "blackmisc/aviation/aircraftparts.h" +#include "blackmisc/json.h" +#include +#include + +using namespace BlackMisc::Aviation; +using namespace BlackMisc::Json; + +namespace BlackMiscTest +{ + void CTestAircraftParts::groundFlag() + { + const CAircraftParts ap1 = this->testParts1(); + CAircraftParts ap2(ap1); + const QJsonObject ap1Json = ap1.toJson(); + QJsonObject ap2Json = ap2.toJson(); + QJsonObject deltaJson12 = getIncrementalObject(ap1Json, ap2Json); + QJsonObject deltaJson21 = getIncrementalObject(ap2Json, ap1Json); + QVERIFY2(deltaJson12.isEmpty(), "Values shall be the same"); + QVERIFY2(deltaJson21.isEmpty(), "Values shall be the same"); + + ap2.setOnGround(false); + ap2Json = ap2.toJson(); + deltaJson12 = getIncrementalObject(ap1Json, ap2Json); + deltaJson21 = getIncrementalObject(ap2Json, ap1Json); + + QVERIFY2(deltaJson12.keys().size() == 1, "Values shall be 1"); + QVERIFY2(deltaJson21.keys().size() == 1, "Values shall be 1"); + bool deltaGnd = deltaJson12.value("on_ground").toBool(true); + QVERIFY2(deltaGnd == false, "Values shall be false"); + deltaGnd = deltaJson21.value("on_ground").toBool(false); + QVERIFY2(deltaGnd == true, "Values shall be false"); + + // const QString json1 = stringFromJsonObject(deltaJson12); + // const QString json2 = stringFromJsonObject(deltaJson21); + } + + CAircraftParts CTestAircraftParts::testParts1() const + { + CAircraftLights lights; + lights.allLightsOn(); + CAircraftEngineList engines; + engines.initEngines(4, true); + const bool onGround = true; + CAircraftParts ap(lights, true, 0, false, engines, onGround); + return ap; + } +} // ns + +//! \endcond diff --git a/tests/blackmisc/testaircraftparts.h b/tests/blackmisc/testaircraftparts.h new file mode 100644 index 000000000..739078cbb --- /dev/null +++ b/tests/blackmisc/testaircraftparts.h @@ -0,0 +1,43 @@ +/* Copyright (C) 2018 + * swift project community / contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#ifndef BLACKMISCTEST_TESTAIRCRAFTPARTS_H +#define BLACKMISCTEST_TESTAIRCRAFTPARTS_H + +//! \cond PRIVATE_TESTS +//! \file +//! \ingroup testblackmisc + +#include "blackmisc/aviation/aircraftparts.h" +#include + +namespace BlackMiscTest +{ + //! Geo classes tests + class CTestAircraftParts : public QObject + { + Q_OBJECT + + public: + //! Standard test case constructor + explicit CTestAircraftParts(QObject *parent = nullptr) : QObject(parent) {} + + private slots: + //! Test ground flag + void groundFlag(); + + private: + //! Test parts + BlackMisc::Aviation::CAircraftParts testParts1() const; + }; +} // namespace + +//! \endcond + +#endif // guard diff --git a/tests/blackmisc/testblackmiscmain.cpp b/tests/blackmisc/testblackmiscmain.cpp index d509faff3..d5f48d410 100644 --- a/tests/blackmisc/testblackmiscmain.cpp +++ b/tests/blackmisc/testblackmiscmain.cpp @@ -17,6 +17,7 @@ #include "testdbus.h" #include "testflightplan.h" #include "testgeo.h" +#include "testaircraftparts.h" #include "testicon.h" #include "testidentifier.h" #include "testinput.h" @@ -58,6 +59,10 @@ namespace BlackMiscTest CTestPropertyIndex piTests; status |= test.exec(&piTests, "blackmisc_propertyindex"); } + { + CTestAircraftParts apTests; + status |= test.exec(&apTests, "blackmisc_aircraftParts"); + } { CTestGeo geoTests; status |= test.exec(&geoTests, "blackmisc_geo");