From 3c588e61fa7f8dedc8513aaf9639d72a97e1f312 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 7 Feb 2017 18:55:50 +0100 Subject: [PATCH] refs #875, moved classes for DBus unit tests and samples to BlackCore::Test --- samples/blackmiscdbus/testservice.cpp | 411 ------------------ samples/blackmiscdbus/testservice.h | 217 --------- .../blackmiscdbus/testserviceinterface.cpp | 25 -- samples/blackmiscdbus/testserviceinterface.h | 373 ---------------- src/blackcore/blackcore.pro | 2 + src/blackcore/test/testservice.cpp | 366 ++++++++++++++++ src/blackcore/test/testservice.h | 241 ++++++++++ src/blackcore/test/testserviceinterface.cpp | 185 ++++++++ src/blackcore/test/testserviceinterface.h | 405 +++++++++++++++++ src/blackcore/test/testutils.cpp | 208 +++++++++ src/blackcore/test/testutils.h | 74 ++++ tests/blackcore/testdbus.cpp | 57 +++ 12 files changed, 1538 insertions(+), 1026 deletions(-) delete mode 100644 samples/blackmiscdbus/testservice.cpp delete mode 100644 samples/blackmiscdbus/testservice.h delete mode 100644 samples/blackmiscdbus/testserviceinterface.cpp delete mode 100644 samples/blackmiscdbus/testserviceinterface.h create mode 100644 src/blackcore/test/testservice.cpp create mode 100644 src/blackcore/test/testservice.h create mode 100644 src/blackcore/test/testserviceinterface.cpp create mode 100644 src/blackcore/test/testserviceinterface.h create mode 100644 src/blackcore/test/testutils.cpp create mode 100644 src/blackcore/test/testutils.h create mode 100644 tests/blackcore/testdbus.cpp diff --git a/samples/blackmiscdbus/testservice.cpp b/samples/blackmiscdbus/testservice.cpp deleted file mode 100644 index 9d70e0747..000000000 --- a/samples/blackmiscdbus/testservice.cpp +++ /dev/null @@ -1,411 +0,0 @@ -/* Copyright (C) 2013 - * 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. - */ - -//! \file -//! \ingroup sampleblackmiscdbus - -#include "testservice.h" -#include "servicetool.h" -#include "blackmisc/aviation/callsign.h" -#include "blackmisc/aviation/comsystem.h" -#include "blackmisc/aviation/track.h" -#include "blackmisc/dbus.h" -#include "blackmisc/pq/frequency.h" -#include "blackmisc/pq/units.h" -#include "blackmisc/stringutils.h" - -#include -#include -#include -#include -#include -#include - -using namespace BlackMisc; -using namespace BlackMisc::Aviation; -using namespace BlackMisc::Simulation; -using namespace BlackMisc::Simulation::FsCommon; -using namespace BlackMisc::Geo; -using namespace BlackMisc::PhysicalQuantities; -using namespace BlackMisc::Network; - -namespace BlackSample -{ - const QString Testservice::InterfaceName = QString(BLACKSAMPLE_TESTSERVICE_INTERFACENAME); - const QString Testservice::ObjectPath = QString(BLACKSAMPLE_TESTSERVICE_OBJECTPATH); - - /* - * Constructor - */ - Testservice::Testservice(QObject *parent) : QObject(parent) - { - // void - } - - /* - * Slot to receive messages - */ - void Testservice::receiveStringMessage(const QString &message) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received message:" << message; - } - - /* - * Receive variant - */ - void Testservice::receiveVariant(const CVariant &variant) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received variant:" << variant; - } - - /* - * Receive speed - */ - void Testservice::receiveSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received speed:" << speed; - } - - /* - * Ping speed - */ - BlackMisc::PhysicalQuantities::CSpeed Testservice::pingSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed) - { - return speed; - } - - /* - * Get speed - */ - BlackMisc::PhysicalQuantities::CSpeed Testservice::getSpeed() const - { - return BlackMisc::PhysicalQuantities::CSpeed(666, BlackMisc::PhysicalQuantities::CSpeedUnit::km_h()); - } - - /* - * Station - */ - CAtcStation Testservice::getAtcStation() const - { - CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21′ 13″ N", "11° 47′ 09″ E", { 1487, CLengthUnit::ft() }); // Munich - CAtcStation station(CCallsign("eddm_twr"), CUser("654321", "client"), - CFrequency(118.7, CFrequencyUnit::MHz()), - geoPos, CLength(50, CLengthUnit::km())); - return station; - } - - /* - * Receive COM unit - */ - void Testservice::receiveComUnit(const CComSystem &comUnit) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received COM:" << comUnit; - } - - /* - * Receive altitude - */ - void Testservice::receiveAltitude(const CAltitude &altitude) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received altitude:" << altitude; - } - - /* - * Receive a list - */ - void Testservice::receiveList(const QList &list) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received list:" << list; - } - - /* - * Receive a geo position - */ - void Testservice::receiveGeoPosition(const BlackMisc::Geo::CCoordinateGeodetic &geo) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received geo data:" << geo; - } - - /* - * Receive transponder - */ - void Testservice::receiveTransponder(const CTransponder &transponder) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received transponder:" << transponder; - } - - /* - * Receive track - */ - void Testservice::receiveTrack(const CTrack &track) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received track:" << track; - } - - /* - * Receive a length - */ - void Testservice::receiveLength(const BlackMisc::PhysicalQuantities::CLength &length) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received length:" << length; - } - - /* - * Receive lengths - */ - void Testservice::receiveLengthsQvl(const QVariantList &lengthsVariantList) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << lengthsVariantList; - foreach (QVariant lv, lengthsVariantList) - { - BlackMisc::PhysicalQuantities::CLength l; - lv.value() >> l; - qDebug() << " Received length in list:" << l; - } - } - - /* - * Receive lengths - */ - void Testservice::receiveLengthsQl(const QList &lengthsList) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received " << lengthsList; - foreach (QVariant lv, lengthsList) - { - BlackMisc::PhysicalQuantities::CLength l; - lv.value() >> l; - qDebug() << " Received length in list:" << l; - } - } - - /* - * Receive callsign - */ - void Testservice::receiveCallsign(const CCallsign &callsign) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received callsign:" << callsign; - } - - /* - * Receive ATC list - */ - void Testservice::receiveAtcStationList(const CAtcStationList &atcStationList) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received ATC list:" << atcStationList; - } - - /* - * Receive value map - */ - void Testservice::receiveValueMap(const BlackMisc::CPropertyIndexVariantMap &valueMap) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received value map:" << valueMap; - } - - /* - * Receive callsign - */ - void Testservice::receiveAtcStation(const CAtcStation &station) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "Received ATC station:" << station; - } - - /* - * Object paths - */ - QList Testservice::getObjectPaths(int number) const - { - QList paths; - for (int i = 0; i < number; i++) - { - paths.append(QDBusObjectPath(BLACKSAMPLE_TESTSERVICE_OBJECTPATH)); - } - return paths; - } - - /* - * Get ATC station list - */ - CAtcStationList Testservice::getAtcStationList(int number) const - { - return CAtcStationList(ServiceTool::getStations(number)); - } - - /* - * Get aircraft entries - */ - CAircraftCfgEntriesList Testservice::getAircraftCfgEntriesList(int number) const - { - return CAircraftCfgEntriesList(ServiceTool::getAircraftCfgEntries(number)); - } - - /* - * Ping ATC list - */ - CAtcStationList Testservice::pingAtcStationList(const CAtcStationList &atcStationList) const - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping ATCs:" << atcStationList; - return atcStationList; - } - - /* - * Ping aircraft - */ - CSimulatedAircraftList Testservice::pingAircraftList(const CSimulatedAircraftList &aircraftList) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping aircrafts:" << aircraftList; - return aircraftList; - } - - /* - * Ping aircraft parts - */ - CAircraftParts Testservice::pingAircraftParts(const CAircraftParts &aircraftParts) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping aircrafts parts:" << aircraftParts; - return aircraftParts; - } - - /* - * Ping aircraft lights - */ - CAircraftLights Testservice::pingAircraftLights(const CAircraftLights &aircraftLights) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping aircrafts lights:" << aircraftLights; - return aircraftLights; - } - - /* - * Ping simulated aircraft - */ - CSimulatedAircraft Testservice::pingSimulatedAircraft(const CSimulatedAircraft &aircraft) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping simulated aircraft:" << aircraft; - return aircraft; - } - - /* - * Ping airports - */ - CAirportList Testservice::pingAirportList(const CAirportList &airportList) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping airports:" << airportList; - return airportList; - } - - /* - * Ping property index - */ - CPropertyIndex Testservice::pingPropertyIndex(const CPropertyIndex &properties) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping properties:" << properties; - return properties; - } - - /* - * Ping index variant map - */ - CPropertyIndexVariantMap Testservice::pingIndexVariantMap(const CPropertyIndexVariantMap &indexVariantMap) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping properties:" << indexVariantMap; - return indexVariantMap; - } - - /* - * NW client - */ - CClient Testservice::pingClient(const CClient &client) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping client:" << client; - return client; - } - - /* - * NW clients - */ - CClientList Testservice::pingClientList(const CClientList &clientList) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping clients:" << clientList; - return clientList; - } - - /* - * Ping altitude - */ - CAltitude Testservice::pingAltitude(const CAltitude &altitude) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping alt:" << altitude; - return altitude; - } - - /* - * Ping user - */ - CUser Testservice::pingUser(const CUser &user) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping user:" << user; - return user; - } - - /* - * Ping situation - */ - CAircraftSituation Testservice::pingSituation(const CAircraftSituation &situation) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping situation:" << situation; - return situation; - } - - /* - * Ping transponder - */ - CTransponder Testservice::pingTransponder(const CTransponder &transponder) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping transponder:" << transponder; - return transponder; - } - - /* - * Ping ATC station - */ - CAtcStation Testservice::pingAtcStation(const CAtcStation &station) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping ATC:" << station; - return station; - } - - /* - * Ping ICAO data - */ - CAircraftIcaoCode Testservice::pingAircraftIcaoData(const CAircraftIcaoCode &icao) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping ICAO data:" << icao; - return icao; - } - - /* - * Ping info - */ - CSimulatorPluginInfo Testservice::pingPluginInfo(const CSimulatorPluginInfo &info) - { - qDebug() << "Pid:" << ServiceTool::getPid() << "info:" << info; - return info; - } - - /* - * Ping variant - */ - BlackMisc::CVariant Testservice::pingCVariant(const BlackMisc::Network::CClient &client) - { - // we receive as QVariant, but return as CVariant! - qDebug() << "Pid:" << ServiceTool::getPid() << "client sent back as CVariant:" << client.toQString(); - return BlackMisc::CVariant::fromValue(client); - } - -} // namespace diff --git a/samples/blackmiscdbus/testservice.h b/samples/blackmiscdbus/testservice.h deleted file mode 100644 index 0a62d32b9..000000000 --- a/samples/blackmiscdbus/testservice.h +++ /dev/null @@ -1,217 +0,0 @@ -/* Copyright (C) 2013 - * 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. - */ - -//! \file -//! \ingroup sampleblackmiscdbus - -#ifndef BLACKSAMPLE_TESTSERVICE_H -#define BLACKSAMPLE_TESTSERVICE_H - -// clash with struct interface in objbase.h used to happen -#pragma push_macro("interface") -#undef interface - -#include "blackmisc/aviation/aircrafticaocode.h" -#include "blackmisc/aviation/aircraftsituation.h" -#include "blackmisc/aviation/airportlist.h" -#include "blackmisc/aviation/altitude.h" -#include "blackmisc/aviation/atcstation.h" -#include "blackmisc/aviation/atcstationlist.h" -#include "blackmisc/aviation/transponder.h" -#include "blackmisc/geo/coordinategeodetic.h" -#include "blackmisc/network/client.h" -#include "blackmisc/network/clientlist.h" -#include "blackmisc/network/user.h" -#include "blackmisc/pq/length.h" -#include "blackmisc/pq/speed.h" -#include "blackmisc/propertyindex.h" -#include "blackmisc/propertyindexvariantmap.h" -#include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" -#include "blackmisc/simulation/simulatedaircraft.h" -#include "blackmisc/simulation/simulatedaircraftlist.h" -#include "blackmisc/simulation/simulatorplugininfo.h" -#include "blackmisc/variant.h" - -#include -#include -#include -#include - -class QDBusObjectPath; -class QVariant; - -namespace BlackMisc -{ - namespace Aviation - { - class CCallsign; - class CComSystem; - class CTrack; - } -} - -//! DBus interface for test service -#define BLACKSAMPLE_TESTSERVICE_INTERFACENAME "blackmisctest.testservice" - -//! DBus object path for test service -#define BLACKSAMPLE_TESTSERVICE_OBJECTPATH "/ts" - -namespace BlackSample -{ - //! Testservice for PQ / CValueObject DBus tests - class Testservice : public QObject - { - Q_OBJECT - Q_CLASSINFO("D-Bus Interface", BLACKSAMPLE_TESTSERVICE_INTERFACENAME) - - // For some reasons the interface name in the XML is not set correctly - // to the above name - - signals: - //! Send string message - void sendStringMessage(const QString &message); - - public slots: - //! Receive string message - void receiveStringMessage(const QString &message); - - //! Receive a QVariant - void receiveVariant(const BlackMisc::CVariant &variant); - - //! Receive speed - void receiveSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed); - - //! Receive com unit - void receiveComUnit(const BlackMisc::Aviation::CComSystem &comUnit); - - //! Receive altitude - void receiveAltitude(const BlackMisc::Aviation::CAltitude &altitude); - - //! Receive list - void receiveList(const QList &list); - - //! Receive a geo position - void receiveGeoPosition(const BlackMisc::Geo::CCoordinateGeodetic &geo) const; - - //! Receive transponder - void receiveTransponder(const BlackMisc::Aviation::CTransponder &transponder) const; - - //! Receive track - void receiveTrack(const BlackMisc::Aviation::CTrack &track) const; - - //! Receive a length - void receiveLength(const BlackMisc::PhysicalQuantities::CLength &length) const; - - //! Receive lengths - void receiveLengthsQl(const QList &lengthsList) const; - - //! Receive lengths - void receiveLengthsQvl(const QVariantList &lengthsVariantList) const; - - //! Receive ATC station - void receiveAtcStation(const BlackMisc::Aviation::CAtcStation &station) const; - - //! Receive callsign - void receiveCallsign(const BlackMisc::Aviation::CCallsign &callsign) const; - - //! Receive ATC list - void receiveAtcStationList(const BlackMisc::Aviation::CAtcStationList &atcStationList) const; - - //! Receive an value map - void receiveValueMap(const BlackMisc::CPropertyIndexVariantMap &valueMap) const; - - //! Ping speed - BlackMisc::PhysicalQuantities::CSpeed pingSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed); - - //! Ping altitude - BlackMisc::Aviation::CAltitude pingAltitude(const BlackMisc::Aviation::CAltitude &altitude); - - //! Ping user - BlackMisc::Network::CUser pingUser(const BlackMisc::Network::CUser &user); - - //! Ping situation - BlackMisc::Aviation::CAircraftSituation pingSituation(const BlackMisc::Aviation::CAircraftSituation &situation); - - //! Ping ATC station - BlackMisc::Aviation::CAtcStation pingAtcStation(const BlackMisc::Aviation::CAtcStation &station); - - //! Ping transponder - BlackMisc::Aviation::CTransponder pingTransponder(const BlackMisc::Aviation::CTransponder &transponder); - - //! Ping aircraft lights - BlackMisc::Aviation::CAircraftLights pingAircraftLights(const BlackMisc::Aviation::CAircraftLights &aircraftLights); - - //! Ping parts - BlackMisc::Aviation::CAircraftParts pingAircraftParts(const BlackMisc::Aviation::CAircraftParts &aircraftParts); - - //! Ping simulated aircraft - BlackMisc::Simulation::CSimulatedAircraft pingSimulatedAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - - //! Ping ATC list - BlackMisc::Aviation::CAtcStationList pingAtcStationList(const BlackMisc::Aviation::CAtcStationList &atcStationList) const; - - //! Ping aircraft list - BlackMisc::Simulation::CSimulatedAircraftList pingAircraftList(const BlackMisc::Simulation::CSimulatedAircraftList &aircraftList); - - //! Ping airports list - BlackMisc::Aviation::CAirportList pingAirportList(const BlackMisc::Aviation::CAirportList &airportList); - - //! Ping property index - BlackMisc::CPropertyIndex pingPropertyIndex(const BlackMisc::CPropertyIndex &properties); - - //! Ping index variant map - BlackMisc::CPropertyIndexVariantMap pingIndexVariantMap(const BlackMisc::CPropertyIndexVariantMap &indexVariantMap); - - //! Ping client - BlackMisc::Network::CClient pingClient(const BlackMisc::Network::CClient &client); - - //! Ping NW clients list - BlackMisc::Network::CClientList pingClientList(const BlackMisc::Network::CClientList &clientList); - - //! Ping plugin info - BlackMisc::Simulation::CSimulatorPluginInfo pingPluginInfo(const BlackMisc::Simulation::CSimulatorPluginInfo &info); - - //! Ping ICAO data object - BlackMisc::Aviation::CAircraftIcaoCode pingAircraftIcaoData(const BlackMisc::Aviation::CAircraftIcaoCode &icao); - - //! Ping CVariant - BlackMisc::CVariant pingCVariant(const BlackMisc::Network::CClient &client); - - //! Get speed - BlackMisc::PhysicalQuantities::CSpeed getSpeed() const; - - //! Get station - BlackMisc::Aviation::CAtcStation getAtcStation() const; - - //! Return n ATC stations - BlackMisc::Aviation::CAtcStationList getAtcStationList(int number) const; - - //! Return n aircraft cfg entries - BlackMisc::Simulation::FsCommon::CAircraftCfgEntriesList getAircraftCfgEntriesList(int number) const; - - //! Get object paths - QList getObjectPaths(int number) const; - - public: - //! DBus interface name - static const QString InterfaceName; - - //! DBus object path - static const QString ObjectPath; - - //! Constructor - explicit Testservice(QObject *parent = nullptr); - - private: - BlackMisc::Aviation::CAtcStationList m_someAtcStations; - }; -} // namespace - -#pragma pop_macro("interface") -#endif // guard diff --git a/samples/blackmiscdbus/testserviceinterface.cpp b/samples/blackmiscdbus/testserviceinterface.cpp deleted file mode 100644 index 8bb6f2eac..000000000 --- a/samples/blackmiscdbus/testserviceinterface.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2013 - * 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. - */ - -//! \file -//! \ingroup sampleblackmiscdbus - -#include "testserviceinterface.h" - -class QDBusConnection; - -namespace BlackSample -{ - TestServiceInterface::TestServiceInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) - : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) - {} - - TestServiceInterface::~TestServiceInterface() - {} -} diff --git a/samples/blackmiscdbus/testserviceinterface.h b/samples/blackmiscdbus/testserviceinterface.h deleted file mode 100644 index fee42833d..000000000 --- a/samples/blackmiscdbus/testserviceinterface.h +++ /dev/null @@ -1,373 +0,0 @@ -/* Copyright (C) 2013 - * 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. - */ - -//! \file -//! \ingroup sampleblackmiscdbus - -#ifndef BLACKSAMPLE_TESTSERVICE_INTERFACE_H -#define BLACKSAMPLE_TESTSERVICE_INTERFACE_H - -#include "blackmisc/aviation/aircrafticaocode.h" -#include "blackmisc/aviation/aircraftsituation.h" -#include "blackmisc/aviation/airportlist.h" -#include "blackmisc/aviation/altitude.h" -#include "blackmisc/aviation/atcstation.h" -#include "blackmisc/aviation/atcstationlist.h" -#include "blackmisc/aviation/callsign.h" -#include "blackmisc/aviation/comsystem.h" -#include "blackmisc/aviation/track.h" -#include "blackmisc/aviation/transponder.h" -#include "blackmisc/geo/coordinategeodetic.h" -#include "blackmisc/network/client.h" -#include "blackmisc/network/clientlist.h" -#include "blackmisc/network/user.h" -#include "blackmisc/pq/length.h" -#include "blackmisc/pq/speed.h" -#include "blackmisc/propertyindex.h" -#include "blackmisc/propertyindexvariantmap.h" -#include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" -#include "blackmisc/simulation/simulatedaircraft.h" -#include "blackmisc/simulation/simulatedaircraftlist.h" -#include "blackmisc/simulation/simulatorplugininfo.h" -#include "blackmisc/variantlist.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -class QDBusConnection; -class QDBusObjectPath; -class QDBusVariant; - -namespace BlackMisc -{ - class CVariant; - namespace Simulation { namespace FsCommon { class CAircraftCfgEntriesList; } } -} - -namespace BlackSample -{ - //! Proxy class for interface blackmisctest.testservice - class TestServiceInterface: public QDBusAbstractInterface - { - Q_OBJECT - - public: - //! Interface name - static inline const char *staticInterfaceName() { return "blackmisctest.testservice"; } - - public: - //! Constructor - TestServiceInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); - - //! Destructor - virtual ~TestServiceInterface(); - - public Q_SLOTS: - //! DBus calls - //! @{ - inline QDBusPendingReply getAtcStation() - { - QList argumentList; - return asyncCallWithArgumentList(QLatin1String("getAtcStation"), argumentList); - } - - inline QDBusPendingReply getAircraftCfgEntriesList(int number) - { - QList argumentList; - argumentList << QVariant::fromValue(number); - return asyncCallWithArgumentList(QLatin1String("getAircraftCfgEntriesList"), argumentList); - } - - inline QDBusPendingReply getAtcStationList(int number) - { - QList argumentList; - argumentList << QVariant::fromValue(number); - return asyncCallWithArgumentList(QLatin1String("getAtcStationList"), argumentList); - } - - inline QDBusPendingReply > getObjectPaths(int number) - { - QList argumentList; - argumentList << QVariant::fromValue(number); - return asyncCallWithArgumentList(QLatin1String("getObjectPaths"), argumentList); - } - - inline QDBusPendingReply getSpeed() - { - QList argumentList; - return asyncCallWithArgumentList(QLatin1String("getSpeed"), argumentList); - } - - inline QDBusPendingReply pingAltitude(BlackMisc::Aviation::CAltitude altitude) - { - QList argumentList; - argumentList << QVariant::fromValue(altitude); - return asyncCallWithArgumentList(QLatin1String("pingAltitude"), argumentList); - } - - inline QDBusPendingReply pingSituation(BlackMisc::Aviation::CAircraftSituation situation) - { - QList argumentList; - argumentList << QVariant::fromValue(situation); - return asyncCallWithArgumentList(QLatin1String("pingSituation"), argumentList); - } - - inline QDBusPendingReply pingUser(BlackMisc::Network::CUser user) - { - QList argumentList; - argumentList << QVariant::fromValue(user); - return asyncCallWithArgumentList(QLatin1String("pingUser"), argumentList); - } - - inline QDBusPendingReply pingTransponder(BlackMisc::Aviation::CTransponder transponder) - { - QList argumentList; - argumentList << QVariant::fromValue(transponder); - return asyncCallWithArgumentList(QLatin1String("pingTransponder"), argumentList); - } - - inline QDBusPendingReply pingAtcStation(BlackMisc::Aviation::CAtcStation station) - { - QList argumentList; - argumentList << QVariant::fromValue(station); - return asyncCallWithArgumentList(QLatin1String("pingAtcStation"), argumentList); - } - - inline QDBusPendingReply pingAircraftIcaoData(BlackMisc::Aviation::CAircraftIcaoCode icaoData) - { - QList argumentList; - argumentList << QVariant::fromValue(icaoData); - return asyncCallWithArgumentList(QLatin1String("pingAircraftIcaoData"), argumentList); - } - - inline QDBusPendingReply pingAircraftLights(BlackMisc::Aviation::CAircraftLights lights) - { - QList argumentList; - argumentList << QVariant::fromValue(lights); - return asyncCallWithArgumentList(QLatin1String("pingAircraftLights"), argumentList); - } - - inline QDBusPendingReply pingAircraftParts(BlackMisc::Aviation::CAircraftParts parts) - { - QList argumentList; - argumentList << QVariant::fromValue(parts); - return asyncCallWithArgumentList(QLatin1String("pingAircraftParts"), argumentList); - } - - inline QDBusPendingReply pingAircraftEngine(BlackMisc::Aviation::CAircraftEngine engine) - { - QList argumentList; - argumentList << QVariant::fromValue(engine); - return asyncCallWithArgumentList(QLatin1String("pingAircraftEngine"), argumentList); - } - - inline QDBusPendingReply pingSimulatedAircraft(BlackMisc::Simulation::CSimulatedAircraft aircraft) - { - QList argumentList; - argumentList << QVariant::fromValue(aircraft); - return asyncCallWithArgumentList(QLatin1String("pingSimulatedAircraft"), argumentList); - } - - inline QDBusPendingReply pingPluginInfo(BlackMisc::Simulation::CSimulatorPluginInfo info) - { - QList argumentList; - argumentList << QVariant::fromValue(info); - return asyncCallWithArgumentList(QLatin1String("pingPluginInfo"), argumentList); - } - - inline QDBusPendingReply pingAtcStationList(BlackMisc::Aviation::CAtcStationList atcStationList) - { - QList argumentList; - argumentList << QVariant::fromValue(atcStationList); - return asyncCallWithArgumentList(QLatin1String("pingAtcStationList"), argumentList); - } - - inline QDBusPendingReply pingSpeed(BlackMisc::PhysicalQuantities::CSpeed speed) - { - QList argumentList; - argumentList << QVariant::fromValue(speed); - return asyncCallWithArgumentList(QLatin1String("pingSpeed"), argumentList); - } - - inline QDBusPendingReply pingAircraftList(BlackMisc::Simulation::CSimulatedAircraftList aircraftList) - { - QList argumentList; - argumentList << QVariant::fromValue(aircraftList); - return asyncCallWithArgumentList(QLatin1String("pingAircraftList"), argumentList); - } - - inline QDBusPendingReply pingAirportList(BlackMisc::Aviation::CAirportList airportList) - { - QList argumentList; - argumentList << QVariant::fromValue(airportList); - return asyncCallWithArgumentList(QLatin1String("pingAirportList"), argumentList); - } - - inline QDBusPendingReply pingClientList(BlackMisc::Network::CClientList clientList) - { - QList argumentList; - argumentList << QVariant::fromValue(clientList); - return asyncCallWithArgumentList(QLatin1String("pingClientList"), argumentList); - } - - inline QDBusPendingReply pingClient(BlackMisc::Network::CClient client) - { - QList argumentList; - argumentList << QVariant::fromValue(client); - return asyncCallWithArgumentList(QLatin1String("pingClient"), argumentList); - } - - inline QDBusPendingReply pingCVariant(BlackMisc::Network::CClient client) - { - QList argumentList; - argumentList << QVariant::fromValue(client); - return asyncCallWithArgumentList(QLatin1String("pingCVariant"), argumentList); - } - - inline QDBusPendingReply pingPropertyIndex(BlackMisc::CPropertyIndex index) - { - QList argumentList; - argumentList << QVariant::fromValue(index); - return asyncCallWithArgumentList(QLatin1String("pingPropertyIndex"), argumentList); - } - - inline QDBusPendingReply pingIndexVariantMap(BlackMisc::CPropertyIndexVariantMap indexVariantMap) - { - QList argumentList; - argumentList << QVariant::fromValue(indexVariantMap); - return asyncCallWithArgumentList(QLatin1String("pingIndexVariantMap"), argumentList); - } - - inline QDBusPendingReply receiveAltitude(BlackMisc::Aviation::CAltitude altitude) - { - QList argumentList; - argumentList << QVariant::fromValue(altitude); - return asyncCallWithArgumentList(QLatin1String("receiveAltitude"), argumentList); - } - - inline QDBusPendingReply<> receiveAtcStation(BlackMisc::Aviation::CAtcStation station) - { - QList argumentList; - argumentList << QVariant::fromValue(station); - return asyncCallWithArgumentList(QLatin1String("receiveAtcStation"), argumentList); - } - - inline QDBusPendingReply<> receiveAtcStationList(BlackMisc::Aviation::CAtcStationList AtcStationList) - { - QList argumentList; - argumentList << QVariant::fromValue(AtcStationList); - return asyncCallWithArgumentList(QLatin1String("receiveAtcStationList"), argumentList); - } - - inline QDBusPendingReply<> receiveCallsign(BlackMisc::Aviation::CCallsign callsign) - { - QList argumentList; - argumentList << QVariant::fromValue(callsign); - return asyncCallWithArgumentList(QLatin1String("receiveCallsign"), argumentList); - } - - inline QDBusPendingReply<> receiveComUnit(BlackMisc::Aviation::CComSystem comUnit) - { - QList argumentList; - argumentList << QVariant::fromValue(comUnit); - return asyncCallWithArgumentList(QLatin1String("receiveComUnit"), argumentList); - } - - inline QDBusPendingReply<> receiveGeoPosition(BlackMisc::Geo::CCoordinateGeodetic geo) - { - QList argumentList; - argumentList << QVariant::fromValue(geo); - return asyncCallWithArgumentList(QLatin1String("receiveGeoPosition"), argumentList); - } - - inline QDBusPendingReply<> receiveLength(BlackMisc::PhysicalQuantities::CLength length) - { - QList argumentList; - argumentList << QVariant::fromValue(length); - return asyncCallWithArgumentList(QLatin1String("receiveLength"), argumentList); - } - - inline QDBusPendingReply<> receiveLengthsQl(const BlackMisc::CVariantList &lengthsList) - { - QList argumentList; - argumentList << QVariant::fromValue(lengthsList); - return asyncCallWithArgumentList(QLatin1String("receiveLengthsQl"), argumentList); - } - - inline QDBusPendingReply<> receiveLengthsQvl(const BlackMisc::CVariantList &lengthsVariantList) - { - QList argumentList; - argumentList << QVariant::fromValue(lengthsVariantList); - return asyncCallWithArgumentList(QLatin1String("receiveLengthsQvl"), argumentList); - } - - inline QDBusPendingReply<> receiveList(const QList &list) - { - QList argumentList; - argumentList << QVariant::fromValue(list); - return asyncCallWithArgumentList(QLatin1String("receiveList"), argumentList); - } - - inline QDBusPendingReply<> receiveSpeed(BlackMisc::PhysicalQuantities::CSpeed speed) - { - QList argumentList; - argumentList << QVariant::fromValue(speed); - return asyncCallWithArgumentList(QLatin1String("receiveSpeed"), argumentList); - } - - inline QDBusPendingReply<> receiveStringMessage(const QString &message) - { - QList argumentList; - argumentList << QVariant::fromValue(message); - return asyncCallWithArgumentList(QLatin1String("receiveStringMessage"), argumentList); - } - - inline QDBusPendingReply<> receiveTrack(BlackMisc::Aviation::CTrack track) - { - QList argumentList; - argumentList << QVariant::fromValue(track); - return asyncCallWithArgumentList(QLatin1String("receiveTrack"), argumentList); - } - - inline QDBusPendingReply<> receiveTransponder(BlackMisc::Aviation::CTransponder transponder) - { - QList argumentList; - argumentList << QVariant::fromValue(transponder); - return asyncCallWithArgumentList(QLatin1String("receiveTransponder"), argumentList); - } - - inline QDBusPendingReply<> receiveValueMap(BlackMisc::CPropertyIndexVariantMap valueMap) - { - QList argumentList; - argumentList << QVariant::fromValue(valueMap); - return asyncCallWithArgumentList(QLatin1String("receiveValueMap"), argumentList); - } - - inline QDBusPendingReply<> receiveVariant(const QDBusVariant &variant, int localMetyType) - { - QList argumentList; - argumentList << QVariant::fromValue(variant) << QVariant::fromValue(localMetyType); - return asyncCallWithArgumentList(QLatin1String("receiveVariant"), argumentList); - } - //! @} - - - Q_SIGNALS: - //! send message - void sendStringMessage(const QString &message); - }; -} // namespace - -#endif diff --git a/src/blackcore/blackcore.pro b/src/blackcore/blackcore.pro index 9efabce67..b5c253b3e 100644 --- a/src/blackcore/blackcore.pro +++ b/src/blackcore/blackcore.pro @@ -28,12 +28,14 @@ HEADERS += $$PWD/audio/*.h HEADERS += $$PWD/context/*.h HEADERS += $$PWD/data/*.h HEADERS += $$PWD/db/*.h +HEADERS += $$PWD/test/*.h HEADERS += $$PWD/vatsim/*.h SOURCES += *.cpp SOURCES += $$PWD/context/*.cpp SOURCES += $$PWD/data/*.cpp SOURCES += $$PWD/db/*.cpp +SOURCES += $$PWD/test/*.cpp SOURCES += $$PWD/vatsim/*.cpp LIBS *= -lvatlib diff --git a/src/blackcore/test/testservice.cpp b/src/blackcore/test/testservice.cpp new file mode 100644 index 000000000..888940278 --- /dev/null +++ b/src/blackcore/test/testservice.cpp @@ -0,0 +1,366 @@ +/* Copyright (C) 2013 + * 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. + */ + +#include "testservice.h" +#include "testutils.h" +#include "blackmisc/aviation/callsign.h" +#include "blackmisc/aviation/comsystem.h" +#include "blackmisc/aviation/track.h" +#include "blackmisc/dbus.h" +#include "blackmisc/pq/frequency.h" +#include "blackmisc/pq/units.h" +#include "blackmisc/stringutils.h" + +#include +#include +#include +#include +#include +#include +#include + +using namespace BlackMisc; +using namespace BlackMisc::Aviation; +using namespace BlackMisc::Simulation; +using namespace BlackMisc::Simulation::FsCommon; +using namespace BlackMisc::Geo; +using namespace BlackMisc::PhysicalQuantities; +using namespace BlackMisc::Network; + +namespace BlackCore +{ + namespace Test + { + CTestService::CTestService(QObject *parent) : QObject(parent) + { } + + CTestService::CTestService(bool verbose, QObject *parent) : + QObject(parent), m_verbose(verbose) + { } + + bool CTestService::canRegisterTestService(QDBusConnection &connection) + { + const bool r = connection.registerService(CTestService::InterfaceName()); + if (r) + { + connection.unregisterService(CTestService::InterfaceName()); + } + return r; + } + + const QString &CTestService::InterfaceName() + { + static const QString i(BLACKSAMPLE_TESTSERVICE_INTERFACENAME); + return i; + } + + const QString &CTestService::ObjectPath() + { + static const QString p("/ts"); + return p; + } + + CTestService *CTestService::registerTestService(QDBusConnection &connection, bool verbose, QObject *parent) + { + CTestService *pTestService = new CTestService(verbose, parent); // just a QObject with signals / slots and Q_CLASSINFO("D-Bus Interface", some service name) + if (!connection.registerService(CTestService::InterfaceName())) + { + QDBusError error = connection.lastError(); + err() << error.message(); + err() << "Started dbus-daemon.exe --session (Windows)?" << endl; + err() << "Created directory session.d (e.g. ../Qt/5.8.0/qtbase/etc/dbus-1/session.d)?" << endl; + qFatal("Could not register service!"); + } + + if (!connection.registerObject(CTestService::ObjectPath(), pTestService, QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAdaptors)) + { + qFatal("Could not register service object!"); + } + + out() << "Registration running as pid: " << CTestService::getPid() << endl; + if (pTestService) { out() << "Service registered" << endl; } + + QString service; // service not needed + if (connection.connect(service, CTestService::ObjectPath(), CTestService::InterfaceName(), + "sendStringMessage", pTestService, SLOT(receiveStringMessage(const QString &)))) + { + out() << "Connected object with bus sendStringMessage" << endl; + } + else + { + qFatal("Cannot connect service with DBus"); + } + return pTestService; + } + + bool CTestService::unRegisterTestService(QDBusConnection &connection) + { + return connection.unregisterService(CTestService::InterfaceName()); + } + + QTextStream &CTestService::out() + { + static QTextStream out(stdout); + return out; + } + + QTextStream &CTestService::err() + { + static QTextStream err(stderr); + return err; + } + + void CTestService::receiveStringMessage(const QString &message) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received message: " << message << endl; + } + + void CTestService::receiveVariant(const CVariant &variant) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received variant: " << variant << endl; + } + + void CTestService::receiveSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received speed: " << speed << endl; + } + + void CTestService::receiveComUnit(const CComSystem &comUnit) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received COM: " << comUnit << endl; + } + + void CTestService::receiveAltitude(const CAltitude &altitude) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received altitude: " << altitude << endl; + } + + void CTestService::receiveList(const QList &list) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received list: " << list.size() << endl; + } + + void CTestService::receiveGeoPosition(const BlackMisc::Geo::CCoordinateGeodetic &geo) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received geo data: " << geo << endl; + } + + void CTestService::receiveTransponder(const CTransponder &transponder) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received transponder: " << transponder << endl; + } + + void CTestService::receiveTrack(const CTrack &track) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received track: " << track << endl; + } + + void CTestService::receiveLength(const BlackMisc::PhysicalQuantities::CLength &length) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received length: " << length << endl; + } + + void CTestService::receiveLengthsQvl(const QVariantList &lengthsVariantList) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " " << lengthsVariantList.size() << endl; + foreach (QVariant lv, lengthsVariantList) + { + BlackMisc::PhysicalQuantities::CLength l; + lv.value() >> l; + if (m_verbose) out() << " Received length in list: " << l << endl; + } + } + + void CTestService::receiveLengthsQl(const QList &lengthsList) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received " << lengthsList.size() << endl; + foreach (QVariant lv, lengthsList) + { + BlackMisc::PhysicalQuantities::CLength l; + lv.value() >> l; + if (m_verbose) out() << " Received length in list: " << l << endl; + } + } + + void CTestService::receiveCallsign(const CCallsign &callsign) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received callsign: " << callsign << endl; + } + + void CTestService::receiveAtcStationList(const CAtcStationList &atcStationList) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received ATC list: " << atcStationList << endl; + } + + void CTestService::receiveValueMap(const BlackMisc::CPropertyIndexVariantMap &valueMap) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received value map: " << valueMap << endl; + } + + void CTestService::receiveAtcStation(const CAtcStation &station) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received ATC station: " << station << endl; + } + + CAtcStationList CTestService::pingAtcStationList(const CAtcStationList &atcStationList) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping ATCs: " << atcStationList << endl; + return atcStationList; + } + + CSimulatedAircraftList CTestService::pingAircraftList(const CSimulatedAircraftList &aircraftList) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping aircraft: " << aircraftList << endl; + return aircraftList; + } + + CAircraftParts CTestService::pingAircraftParts(const CAircraftParts &aircraftParts) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping aircraft parts: " << aircraftParts << endl; + return aircraftParts; + } + + CAircraftEngine CTestService::pingAircraftEngine(const CAircraftEngine &aircraftEngine) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping aircraft engine: " << aircraftEngine << endl; + return aircraftEngine; + } + + CAircraftModel CTestService::pingAircraftModel(const CAircraftModel &aircraftModel) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping aircraft model: " << aircraftModel << endl; + return aircraftModel; + } + + CAircraftModelList CTestService::pingAircraftModelList(const CAircraftModelList &aircraftModels) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping aircraft modellist: " << aircraftModels << endl; + return aircraftModels; + } + + CAircraftLights CTestService::pingAircraftLights(const CAircraftLights &aircraftLights) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping aircraft lights: " << aircraftLights << endl; + return aircraftLights; + } + + CSimulatedAircraft CTestService::pingSimulatedAircraft(const CSimulatedAircraft &aircraft) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping simulated aircraft: " << aircraft << endl; + return aircraft; + } + + CAirportList CTestService::pingAirportList(const CAirportList &airportList) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping airports: " << airportList << endl; + return airportList; + } + + CPropertyIndex CTestService::pingPropertyIndex(const CPropertyIndex &properties) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping properties: " << properties << endl; + return properties; + } + + CPropertyIndexVariantMap CTestService::pingIndexVariantMap(const CPropertyIndexVariantMap &indexVariantMap) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping properties: " << indexVariantMap << endl; + return indexVariantMap; + } + + CClient CTestService::pingClient(const CClient &client) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping client: " << client << endl; + return client; + } + + CClientList CTestService::pingClientList(const CClientList &clientList) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping clients: " << clientList << endl; + return clientList; + } + + CSpeed CTestService::pingSpeed(const CSpeed &speed) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping speed: " << speed << endl; + return speed; + } + + CAltitude CTestService::pingAltitude(const CAltitude &altitude) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping alt: " << altitude << endl; + return altitude; + } + + CUser CTestService::pingUser(const CUser &user) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping user: " << user << endl; + return user; + } + + CAircraftSituation CTestService::pingSituation(const CAircraftSituation &situation) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping situation: " << situation << endl; + return situation; + } + + CTransponder CTestService::pingTransponder(const CTransponder &transponder) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping transponder: " << transponder << endl; + return transponder; + } + + CAtcStation CTestService::pingAtcStation(const CAtcStation &station) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping ATC: " << station << endl; + return station; + } + + CAircraftIcaoCode CTestService::pingAircraftIcaoData(const CAircraftIcaoCode &icao) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping ICAO data: " << icao << endl; + return icao; + } + + CSimulatorPluginInfo CTestService::pingPluginInfo(const CSimulatorPluginInfo &info) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " info: " << info << endl; + return info; + } + + BlackMisc::CVariant CTestService::pingCVariant(const CVariant &variant) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " client sent back as CVariant: " << variant.toQString() << endl; + return variant; + } + + CAtcStationList CTestService::getAtcStationList(int n) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " getAtcStationList" << endl; + return CTestUtils::getStations(n); + } + + CAircraftCfgEntriesList CTestService::getAircraftCfgEntriesList(int n) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " getAircraftCfgEntriesList" << endl; + return CTestUtils::getAircraftCfgEntries(n); + } + + QList CTestService::getObjectPaths(int n) const + { + if (m_verbose) out() << "Pid: " << CTestService::getPid() << " getObjectPaths" << endl; + QList paths; + for (int i = 0; i < n; i++) + { + paths.append(QDBusObjectPath(ObjectPath())); + } + return paths; + } + } // ns +} // ns diff --git a/src/blackcore/test/testservice.h b/src/blackcore/test/testservice.h new file mode 100644 index 000000000..ab943a6bd --- /dev/null +++ b/src/blackcore/test/testservice.h @@ -0,0 +1,241 @@ +/* Copyright (C) 2013 + * 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. + */ + +//! \file + +#ifndef BLACKCORE_TEST_TESTSERVICE_H +#define BLACKCORE_TEST_TESTSERVICE_H + +// clash with struct interface in objbase.h used to happen +#pragma push_macro("interface") +#undef interface + +#include "blackcore/blackcoreexport.h" +#include "blackmisc/aviation/aircrafticaocode.h" +#include "blackmisc/aviation/aircraftsituation.h" +#include "blackmisc/aviation/airportlist.h" +#include "blackmisc/aviation/altitude.h" +#include "blackmisc/aviation/atcstation.h" +#include "blackmisc/aviation/atcstationlist.h" +#include "blackmisc/aviation/transponder.h" +#include "blackmisc/geo/coordinategeodetic.h" +#include "blackmisc/network/client.h" +#include "blackmisc/network/clientlist.h" +#include "blackmisc/network/user.h" +#include "blackmisc/pq/length.h" +#include "blackmisc/pq/speed.h" +#include "blackmisc/propertyindex.h" +#include "blackmisc/propertyindexvariantmap.h" +#include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" +#include "blackmisc/simulation/simulatedaircraft.h" +#include "blackmisc/simulation/simulatedaircraftlist.h" +#include "blackmisc/simulation/simulatorplugininfo.h" +#include "blackmisc/variant.h" + +#include +#include +#include +#include +#include +#include +#include + +class QDBusObjectPath; +class QVariant; + +namespace BlackMisc +{ + namespace Aviation + { + class CCallsign; + class CComSystem; + class CTrack; + } +} + +//! DBus interface for test service +#define BLACKSAMPLE_TESTSERVICE_INTERFACENAME "blackcore.test" + +namespace BlackCore +{ + namespace Test + { + //! Testservice for PQ / CValueObject DBus tests. This part is the callee. + //! \remark corresponds with BlackCore::Test::TestServiceInterface + class BLACKCORE_EXPORT CTestService : public QObject + { + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", BLACKSAMPLE_TESTSERVICE_INTERFACENAME) + + // For some reasons the interface name in the XML is not set correctly + // to the above name + + public: + //! Constructor + explicit CTestService(QObject *parent = nullptr); + + //! Constructor + explicit CTestService(bool verbose, QObject *parent = nullptr); + + //! Can the testservice be registered? + static bool canRegisterTestService(QDBusConnection &connection); + + //! Register testservice with connection + static CTestService *registerTestService(QDBusConnection &connection, bool verbose, QObject *parent = nullptr); + + //! Can the testservice be registered? + static bool unRegisterTestService(QDBusConnection &connection); + + //! Process id + static qint64 getPid() { return QCoreApplication::applicationPid(); } + + //! DBus interface name + static const QString &InterfaceName(); + + //! DBus object path + static const QString &ObjectPath(); + + signals: + //! Send string message + void sendStringMessage(const QString &message); + + public slots: + //! Receive string message + void receiveStringMessage(const QString &message) const; + + //! Receive a QVariant + void receiveVariant(const BlackMisc::CVariant &variant) const; + + //! Receive speed + void receiveSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed) const; + + //! Receive com unit + void receiveComUnit(const BlackMisc::Aviation::CComSystem &comUnit) const; + + //! Receive altitude + void receiveAltitude(const BlackMisc::Aviation::CAltitude &altitude) const; + + //! Receive list + void receiveList(const QList &list) const; + + //! Receive a geo position + void receiveGeoPosition(const BlackMisc::Geo::CCoordinateGeodetic &geo) const; + + //! Receive transponder + void receiveTransponder(const BlackMisc::Aviation::CTransponder &transponder) const; + + //! Receive track + void receiveTrack(const BlackMisc::Aviation::CTrack &track) const; + + //! Receive a length + void receiveLength(const BlackMisc::PhysicalQuantities::CLength &length) const; + + //! Receive lengths + void receiveLengthsQl(const QList &lengthsList) const; + + //! Receive lengths + void receiveLengthsQvl(const QVariantList &lengthsVariantList) const; + + //! Receive ATC station + void receiveAtcStation(const BlackMisc::Aviation::CAtcStation &station) const; + + //! Receive callsign + void receiveCallsign(const BlackMisc::Aviation::CCallsign &callsign) const; + + //! Receive ATC list + void receiveAtcStationList(const BlackMisc::Aviation::CAtcStationList &atcStationList) const; + + //! Receive an value map + void receiveValueMap(const BlackMisc::CPropertyIndexVariantMap &valueMap) const; + + //! Ping speed + BlackMisc::PhysicalQuantities::CSpeed pingSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed) const; + + //! Ping altitude + BlackMisc::Aviation::CAltitude pingAltitude(const BlackMisc::Aviation::CAltitude &altitude) const; + + //! Ping user + BlackMisc::Network::CUser pingUser(const BlackMisc::Network::CUser &user) const; + + //! Ping situation + BlackMisc::Aviation::CAircraftSituation pingSituation(const BlackMisc::Aviation::CAircraftSituation &situation) const; + + //! Ping ATC station + BlackMisc::Aviation::CAtcStation pingAtcStation(const BlackMisc::Aviation::CAtcStation &station) const; + + //! Ping transponder + BlackMisc::Aviation::CTransponder pingTransponder(const BlackMisc::Aviation::CTransponder &transponder) const; + + //! Ping aircraft lights + BlackMisc::Aviation::CAircraftLights pingAircraftLights(const BlackMisc::Aviation::CAircraftLights &aircraftLights) const; + + //! Ping parts + BlackMisc::Aviation::CAircraftParts pingAircraftParts(const BlackMisc::Aviation::CAircraftParts &aircraftParts) const; + + //! Ping engine + BlackMisc::Aviation::CAircraftEngine pingAircraftEngine(const BlackMisc::Aviation::CAircraftEngine &aircraftEngine) const; + + //! Ping model + BlackMisc::Simulation::CAircraftModel pingAircraftModel(const BlackMisc::Simulation::CAircraftModel &aircraftModel) const; + + //! Ping model + BlackMisc::Simulation::CAircraftModelList pingAircraftModelList(const BlackMisc::Simulation::CAircraftModelList &aircraftModels) const; + + //! Ping simulated aircraft + BlackMisc::Simulation::CSimulatedAircraft pingSimulatedAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) const; + + //! Ping ATC list + BlackMisc::Aviation::CAtcStationList pingAtcStationList(const BlackMisc::Aviation::CAtcStationList &atcStationList) const; + + //! Ping aircraft list + BlackMisc::Simulation::CSimulatedAircraftList pingAircraftList(const BlackMisc::Simulation::CSimulatedAircraftList &aircraftList) const; + + //! Ping airports list + BlackMisc::Aviation::CAirportList pingAirportList(const BlackMisc::Aviation::CAirportList &airportList) const; + + //! Ping property index + BlackMisc::CPropertyIndex pingPropertyIndex(const BlackMisc::CPropertyIndex &properties) const; + + //! Ping index variant map + BlackMisc::CPropertyIndexVariantMap pingIndexVariantMap(const BlackMisc::CPropertyIndexVariantMap &indexVariantMap) const; + + //! Ping client + BlackMisc::Network::CClient pingClient(const BlackMisc::Network::CClient &client) const; + + //! Ping NW clients list + BlackMisc::Network::CClientList pingClientList(const BlackMisc::Network::CClientList &clientList) const; + + //! Ping plugin info + BlackMisc::Simulation::CSimulatorPluginInfo pingPluginInfo(const BlackMisc::Simulation::CSimulatorPluginInfo &info) const; + + //! Ping ICAO data object + BlackMisc::Aviation::CAircraftIcaoCode pingAircraftIcaoData(const BlackMisc::Aviation::CAircraftIcaoCode &icao) const; + + //! Ping CVariant + BlackMisc::CVariant pingCVariant(const BlackMisc::CVariant &variant) const; + + //! Return stations via DBus + BlackMisc::Aviation::CAtcStationList getAtcStationList(int n) const; + + //! Return stations via DBus + BlackMisc::Simulation::FsCommon::CAircraftCfgEntriesList getAircraftCfgEntriesList(int n) const; + + //! Return paths via DBus + QList getObjectPaths(int n) const; + + private: + static QTextStream &out(); + static QTextStream &err(); + bool m_verbose = true; + }; + } // ns +} // ns + +#pragma pop_macro("interface") +#endif // guard diff --git a/src/blackcore/test/testserviceinterface.cpp b/src/blackcore/test/testserviceinterface.cpp new file mode 100644 index 000000000..53c927f9a --- /dev/null +++ b/src/blackcore/test/testserviceinterface.cpp @@ -0,0 +1,185 @@ +/* Copyright (C) 2013 + * 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. + */ + +#include "testserviceinterface.h" +#include "testservice.h" +#include "testutils.h" +#include + +class QDBusConnection; + +using namespace BlackMisc; +using namespace BlackMisc::Aviation; +using namespace BlackMisc::Simulation; +using namespace BlackMisc::Geo; +using namespace BlackMisc::Network; +using namespace BlackMisc::PhysicalQuantities; + +namespace BlackCore +{ + namespace Test + { + ITestServiceInterface::ITestServiceInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) + : QDBusAbstractInterface(service, path, ITestServiceInterface::InterfaceName(), connection, parent) + {} + + ITestServiceInterface::~ITestServiceInterface() + {} + + int ITestServiceInterface::pingTests(ITestServiceInterface &testServiceInterface, bool verbose) + { + int errors = 0; + bool ok = false; + QTextStream out(stdout); + + const CPropertyIndex pi({ 1000, 2000, 3000, 4000, 5000}); // numbers >= global index + const CPropertyIndex piPing = testServiceInterface.pingPropertyIndex(pi); + ok = pingCompare(pi, piPing, out, verbose, errors); + if (verbose) { out << "Pinged property index via interface" << errorInfo(ok) << endl; } + + CPropertyIndexVariantMap ivm; + ivm.addValue(1000, "one"); + ivm.addValue(2000, "two"); + ivm.addValue(3000, "three"); + const CPropertyIndexVariantMap ivmPing = testServiceInterface.pingIndexVariantMap(ivm); + ok = pingCompare(ivm, ivmPing, out, verbose, errors); + if (verbose) { out << "Pinged variant map via interface" << errorInfo(ok) << endl; } + + const CSimulatorPluginInfo pluginInfo("fsx", "FSX Simulator", "FSX", "Flight Simulator X", true); + const CSimulatorPluginInfo pluginInfoPing = testServiceInterface.pingPluginInfo(pluginInfo); + ok = pingCompare(pluginInfo, pluginInfoPing, out, verbose, errors); + if (verbose) { out << "Pinged info via interface" << errorInfo(ok) << endl; } + + const CSpeed speedNotNull(22, CSpeedUnit::m_s()); + const CSpeed speedNull = CSpeed(0, CSpeedUnit::nullUnit()); + + const CSpeed speedNotNullPing = testServiceInterface.pingSpeed(speedNotNull); + ok = pingCompare(speedNotNull, speedNotNullPing, out, verbose, errors); + if (verbose) { out << "Pinged not null speed via interface" << errorInfo(ok) << endl; } + + const CSpeed speedNullPing = testServiceInterface.pingSpeed(speedNull); + ok = pingCompare(speedNull, speedNullPing, out, verbose, errors); + if (verbose) { out << "Pinged null speed via interface" << errorInfo(ok) << endl; } + + const CAtcStation station = CTestUtils::getAtcStation(); + const CAtcStation stationPing = testServiceInterface.pingAtcStation(station); + ok = pingCompare(station, stationPing, out, verbose, errors); + if (verbose) { out << "Pinged ATC station via interface" << errorInfo(ok) << endl; } + + const CAircraftIcaoCode icaoData("B737", "L2J"); + const CAircraftIcaoCode icaoDataPing = testServiceInterface.pingAircraftIcaoData(icaoData); + ok = pingCompare(icaoData, icaoDataPing, out, verbose, errors); + if (verbose) { out << "Pinged ICAO data via interface" << errorInfo(ok) << endl; } + + const CUser user("223344", "Ping Me User"); + const CUser userPing = testServiceInterface.pingUser(user); + ok = pingCompare(user, userPing, out, verbose, errors); + if (verbose) { out << "Pinged user via interface" << errorInfo(ok) << endl; } + + // EDDF: 50° 2′ 0″ N, 8° 34′ 14″ E, 2000m MSL + const CCoordinateGeodetic coordinate = CCoordinateGeodetic::fromWgs84("50° 2′ 1″ 23 N", "8° 34′ 14″ E", { 2000, CLengthUnit::m() }); + const CAircraftSituation situation = CAircraftSituation("DAMBZ", coordinate); + const CAircraftSituation situationPing = testServiceInterface.pingSituation(situation); + ok = pingCompare(situation, situationPing, out, verbose, errors); + if (verbose) { out << "Pinged situation via interface" << errorInfo(ok) << endl; } + + const CTransponder transponder(1234, "C"); + const CTransponder transponderPing = testServiceInterface.pingTransponder(transponder); + ok = pingCompare(transponder, transponderPing, out, verbose, errors); + if (verbose) { out << "Pinged transponder via interface" << errorInfo(ok) << endl; } + + const CAircraftLights lights(true, false, true, false, true, false); + const CAircraftLights lightsPing = testServiceInterface.pingAircraftLights(lights); + ok = pingCompare(lights, lightsPing, out, verbose, errors); + if (verbose) { out << "Pinged lights via interface" << errorInfo(ok) << endl; } + + const CAircraftEngine engine(2, false); + const CAircraftEngine enginePing = testServiceInterface.pingAircraftEngine(engine); + ok = pingCompare(engine, enginePing, out, verbose, errors); + if (verbose) { out << "Pinged engine via interface" << errorInfo(ok) << endl; } + + const CAircraftEngineList engines({engine}); + const CAircraftParts parts(lights, true, 11, true, engines, true); + const CAircraftParts partsPing = testServiceInterface.pingAircraftParts(parts); + ok = pingCompare(parts, partsPing, out, verbose, errors); + if (verbose) { out << "Pinged engine via interface" << errorInfo(ok) << endl; } + + const CAircraftModel model("foobar", CAircraftModel::TypeManuallySet); + const CAircraftModel modelPing = testServiceInterface.pingAircraftModel(model); + ok = pingCompare(model, modelPing, out, verbose, errors); + if (verbose) { out << "Pinged model via interface" << errorInfo(ok) << endl; } + + const CAircraftModel model2("mymodel", CAircraftModel::TypeFSInnData); + const CAircraftModelList models({ model, model2}); + const CAircraftModelList modelsPing = testServiceInterface.pingAircraftModelList(models); + ok = pingCompare(models, modelsPing, out, verbose, errors); + if (verbose) { out << "Pinged model list via interface" << errorInfo(ok) << endl; } + + const CCallsign callsign("DEMBZ"); + CSimulatedAircraft aircraft(callsign, CUser("123456", "Joe Pilot"), situation); + aircraft.setTransponder(transponder); + aircraft.setModel(model); + aircraft.setNetworkModel(model2); + const CSimulatedAircraft aircraftPing = testServiceInterface.pingSimulatedAircraft(aircraft); + ok = pingCompare(aircraft, aircraftPing, out, verbose, errors); + pingCompare(aircraft.getModel(), aircraftPing.getModel(), out, verbose, errors); + pingCompare(aircraft.getNetworkModel(), aircraftPing.getNetworkModel(), out, verbose, errors); + if (verbose) { out << "Pinged simulated aircraft via interface" << errorInfo(ok) << endl; } + + CAtcStationList atcStationList; + atcStationList.push_back(station); + atcStationList.push_back(station); + atcStationList.push_back(station); + CAtcStationList atcStationListPing = testServiceInterface.pingAtcStationList(atcStationList); + ok = pingCompare(atcStationList, atcStationListPing, out, verbose, errors); + if (verbose) { out << "Pinged ATC station list via interface" << errorInfo(ok) << endl; } + + const CAirportList airportList = CTestUtils::getAirports(10); + const CAirportList airportListPing = testServiceInterface.pingAirportList(airportList); + ok = pingCompare(airportList, airportListPing, out, verbose, errors); + if (verbose) { out << "Pinged airports list via interface" << errorInfo(ok) << endl; } + + const CClientList clients = CTestUtils::getClients(10); + const CClient client = clients.front(); + const CClient clientPing = testServiceInterface.pingClient(client); + ok = pingCompare(client, clientPing, out, verbose, errors); + if (verbose) { out << "Pinged client list via interface" << errorInfo(ok) << endl; } + + const CClientList clientsPing = testServiceInterface.pingClientList(clients); + ok = pingCompare(clients, clientsPing, out, verbose, errors); + if (verbose) { out << "Pinged client list via interface" << errorInfo(ok) << endl; } + + const CVariant cv = CVariant::fromValue(clients); + const CVariant cvPing = testServiceInterface.pingCVariant(cv); + ok = pingCompare(cv.value(), cvPing.value(), out, verbose, errors); + if (verbose) { out << "Pinged CVariant(clients) list via interface" << errorInfo(ok) << endl; } + + const CVariant cv2 = CVariant::fromValue(aircraft); + const CVariant cvPing2 = testServiceInterface.pingCVariant(cv2); + ok = pingCompare(cv2.value(), cvPing2.value(), out, verbose, errors); + if (verbose) { out << "Pinged CVariant(aircraft) list via interface" << errorInfo(ok) << endl; } + + // end + return errors; + } + + const char *ITestServiceInterface::InterfaceName() + { + static const QByteArray in(CTestService::InterfaceName().toLatin1()); + return in.constData(); + } + + const QString &ITestServiceInterface::errorInfo(bool ok) + { + static const QString sOk(": ok"); + static const QString sError(": !! ERROR !!"); + return ok ? sOk : sError; + } + } // ns +} // ns diff --git a/src/blackcore/test/testserviceinterface.h b/src/blackcore/test/testserviceinterface.h new file mode 100644 index 000000000..419f53a6d --- /dev/null +++ b/src/blackcore/test/testserviceinterface.h @@ -0,0 +1,405 @@ +/* Copyright (C) 2013 + * 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. + */ + +//! \file + +#ifndef BLACKCORE_TEST_TESTSERVICEINTERFACE_H +#define BLACKCORE_TEST_TESTSERVICEINTERFACE_H + +#include "blackcore/blackcoreexport.h" +#include "blackmisc/aviation/aircrafticaocode.h" +#include "blackmisc/aviation/aircraftsituation.h" +#include "blackmisc/aviation/airportlist.h" +#include "blackmisc/aviation/altitude.h" +#include "blackmisc/aviation/atcstation.h" +#include "blackmisc/aviation/atcstationlist.h" +#include "blackmisc/aviation/callsign.h" +#include "blackmisc/aviation/comsystem.h" +#include "blackmisc/aviation/track.h" +#include "blackmisc/aviation/transponder.h" +#include "blackmisc/geo/coordinategeodetic.h" +#include "blackmisc/network/client.h" +#include "blackmisc/network/clientlist.h" +#include "blackmisc/network/user.h" +#include "blackmisc/pq/length.h" +#include "blackmisc/pq/speed.h" +#include "blackmisc/propertyindex.h" +#include "blackmisc/propertyindexvariantmap.h" +#include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" +#include "blackmisc/simulation/simulatedaircraft.h" +#include "blackmisc/simulation/simulatedaircraftlist.h" +#include "blackmisc/simulation/simulatorplugininfo.h" +#include "blackmisc/variantlist.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QDBusConnection; +class QDBusObjectPath; +class QDBusVariant; + +namespace BlackMisc +{ + class CVariant; + namespace Simulation { namespace FsCommon { class CAircraftCfgEntriesList; } } +} + +namespace BlackCore +{ + namespace Test + { + //! Proxy class for BlackCore::Test::TestService. This part is the caller. + class BLACKCORE_EXPORT ITestServiceInterface: public QDBusAbstractInterface + { + Q_OBJECT + + public: + //! Constructor + ITestServiceInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr); + + //! Destructor + virtual ~ITestServiceInterface(); + + //! Ping via DBus, tests object marshalling/unmarshalling + static int pingTests(ITestServiceInterface &testServiceInterface, bool verbose); + + //! DBus calls + //! @{ + inline QDBusPendingReply getAtcStation() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("getAtcStation"), argumentList); + } + + inline QDBusPendingReply getAircraftCfgEntriesList(int number) + { + QList argumentList; + argumentList << QVariant::fromValue(number); + return asyncCallWithArgumentList(QLatin1String("getAircraftCfgEntriesList"), argumentList); + } + + inline QDBusPendingReply getAtcStationList(int number) + { + QList argumentList; + argumentList << QVariant::fromValue(number); + return asyncCallWithArgumentList(QLatin1String("getAtcStationList"), argumentList); + } + + inline QDBusPendingReply> getObjectPaths(int number) + { + QList argumentList; + argumentList << QVariant::fromValue(number); + return asyncCallWithArgumentList(QLatin1String("getObjectPaths"), argumentList); + } + + inline QDBusPendingReply getSpeed() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("getSpeed"), argumentList); + } + + inline QDBusPendingReply pingAltitude(const BlackMisc::Aviation::CAltitude &altitude) + { + QList argumentList; + argumentList << QVariant::fromValue(altitude); + return asyncCallWithArgumentList(QLatin1String("pingAltitude"), argumentList); + } + + inline QDBusPendingReply pingSituation(const BlackMisc::Aviation::CAircraftSituation &situation) + { + QList argumentList; + argumentList << QVariant::fromValue(situation); + return asyncCallWithArgumentList(QLatin1String("pingSituation"), argumentList); + } + + inline QDBusPendingReply pingUser(const BlackMisc::Network::CUser &user) + { + QList argumentList; + argumentList << QVariant::fromValue(user); + return asyncCallWithArgumentList(QLatin1String("pingUser"), argumentList); + } + + inline QDBusPendingReply pingTransponder(const BlackMisc::Aviation::CTransponder &transponder) + { + QList argumentList; + argumentList << QVariant::fromValue(transponder); + return asyncCallWithArgumentList(QLatin1String("pingTransponder"), argumentList); + } + + inline QDBusPendingReply pingAtcStation(const BlackMisc::Aviation::CAtcStation &station) + { + QList argumentList; + argumentList << QVariant::fromValue(station); + return asyncCallWithArgumentList(QLatin1String("pingAtcStation"), argumentList); + } + + inline QDBusPendingReply pingAircraftIcaoData(const BlackMisc::Aviation::CAircraftIcaoCode &icaoData) + { + QList argumentList; + argumentList << QVariant::fromValue(icaoData); + return asyncCallWithArgumentList(QLatin1String("pingAircraftIcaoData"), argumentList); + } + + inline QDBusPendingReply pingAircraftLights(const BlackMisc::Aviation::CAircraftLights &lights) + { + QList argumentList; + argumentList << QVariant::fromValue(lights); + return asyncCallWithArgumentList(QLatin1String("pingAircraftLights"), argumentList); + } + + inline QDBusPendingReply pingAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts) + { + QList argumentList; + argumentList << QVariant::fromValue(parts); + return asyncCallWithArgumentList(QLatin1String("pingAircraftParts"), argumentList); + } + + inline QDBusPendingReply pingAircraftEngine(const BlackMisc::Aviation::CAircraftEngine &engine) + { + QList argumentList; + argumentList << QVariant::fromValue(engine); + return asyncCallWithArgumentList(QLatin1String("pingAircraftEngine"), argumentList); + } + + inline QDBusPendingReply pingAircraftModel(const BlackMisc::Simulation::CAircraftModel &model) + { + QList argumentList; + argumentList << QVariant::fromValue(model); + return asyncCallWithArgumentList(QLatin1String("pingAircraftModel"), argumentList); + } + + inline QDBusPendingReply pingAircraftModelList(const BlackMisc::Simulation::CAircraftModelList &model) + { + QList argumentList; + argumentList << QVariant::fromValue(model); + return asyncCallWithArgumentList(QLatin1String("pingAircraftModelList"), argumentList); + } + + inline QDBusPendingReply pingSimulatedAircraft(BlackMisc::Simulation::CSimulatedAircraft aircraft) + { + QList argumentList; + argumentList << QVariant::fromValue(aircraft); + return asyncCallWithArgumentList(QLatin1String("pingSimulatedAircraft"), argumentList); + } + + inline QDBusPendingReply pingPluginInfo(BlackMisc::Simulation::CSimulatorPluginInfo info) + { + QList argumentList; + argumentList << QVariant::fromValue(info); + return asyncCallWithArgumentList(QLatin1String("pingPluginInfo"), argumentList); + } + + inline QDBusPendingReply pingAtcStationList(BlackMisc::Aviation::CAtcStationList atcStationList) + { + QList argumentList; + argumentList << QVariant::fromValue(atcStationList); + return asyncCallWithArgumentList(QLatin1String("pingAtcStationList"), argumentList); + } + + inline QDBusPendingReply pingSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed) + { + QList argumentList; + argumentList << QVariant::fromValue(speed); + return asyncCallWithArgumentList(QLatin1String("pingSpeed"), argumentList); + } + + inline QDBusPendingReply pingAircraftList(const BlackMisc::Simulation::CSimulatedAircraftList &aircraftList) + { + QList argumentList; + argumentList << QVariant::fromValue(aircraftList); + return asyncCallWithArgumentList(QLatin1String("pingAircraftList"), argumentList); + } + + inline QDBusPendingReply pingAirportList(const BlackMisc::Aviation::CAirportList &airportList) + { + QList argumentList; + argumentList << QVariant::fromValue(airportList); + return asyncCallWithArgumentList(QLatin1String("pingAirportList"), argumentList); + } + + inline QDBusPendingReply pingClientList(const BlackMisc::Network::CClientList &clientList) + { + QList argumentList; + argumentList << QVariant::fromValue(clientList); + return asyncCallWithArgumentList(QLatin1String("pingClientList"), argumentList); + } + + inline QDBusPendingReply pingClient(const BlackMisc::Network::CClient &client) + { + QList argumentList; + argumentList << QVariant::fromValue(client); + return asyncCallWithArgumentList(QLatin1String("pingClient"), argumentList); + } + + inline QDBusPendingReply pingCVariant(const BlackMisc::CVariant &variant) + { + QList argumentList; + argumentList << QVariant::fromValue(variant); + return asyncCallWithArgumentList(QLatin1String("pingCVariant"), argumentList); + } + + inline QDBusPendingReply pingPropertyIndex(const BlackMisc::CPropertyIndex &index) + { + QList argumentList; + argumentList << QVariant::fromValue(index); + return asyncCallWithArgumentList(QLatin1String("pingPropertyIndex"), argumentList); + } + + inline QDBusPendingReply pingIndexVariantMap(BlackMisc::CPropertyIndexVariantMap indexVariantMap) + { + QList argumentList; + argumentList << QVariant::fromValue(indexVariantMap); + return asyncCallWithArgumentList(QLatin1String("pingIndexVariantMap"), argumentList); + } + + inline QDBusPendingReply receiveAltitude(const BlackMisc::Aviation::CAltitude &altitude) + { + QList argumentList; + argumentList << QVariant::fromValue(altitude); + return asyncCallWithArgumentList(QLatin1String("receiveAltitude"), argumentList); + } + + inline QDBusPendingReply<> receiveAtcStation(const BlackMisc::Aviation::CAtcStation &station) + { + QList argumentList; + argumentList << QVariant::fromValue(station); + return asyncCallWithArgumentList(QLatin1String("receiveAtcStation"), argumentList); + } + + inline QDBusPendingReply<> receiveAtcStationList(const BlackMisc::Aviation::CAtcStationList &atcStationList) + { + QList argumentList; + argumentList << QVariant::fromValue(atcStationList); + return asyncCallWithArgumentList(QLatin1String("receiveAtcStationList"), argumentList); + } + + inline QDBusPendingReply<> receiveCallsign(const BlackMisc::Aviation::CCallsign &callsign) + { + QList argumentList; + argumentList << QVariant::fromValue(callsign); + return asyncCallWithArgumentList(QLatin1String("receiveCallsign"), argumentList); + } + + inline QDBusPendingReply<> receiveComUnit(const BlackMisc::Aviation::CComSystem &comUnit) + { + QList argumentList; + argumentList << QVariant::fromValue(comUnit); + return asyncCallWithArgumentList(QLatin1String("receiveComUnit"), argumentList); + } + + inline QDBusPendingReply<> receiveGeoPosition(const BlackMisc::Geo::CCoordinateGeodetic &geo) + { + QList argumentList; + argumentList << QVariant::fromValue(geo); + return asyncCallWithArgumentList(QLatin1String("receiveGeoPosition"), argumentList); + } + + inline QDBusPendingReply<> receiveLength(const BlackMisc::PhysicalQuantities::CLength &length) + { + QList argumentList; + argumentList << QVariant::fromValue(length); + return asyncCallWithArgumentList(QLatin1String("receiveLength"), argumentList); + } + + inline QDBusPendingReply<> receiveLengthsQl(const BlackMisc::CVariantList &lengthsList) + { + QList argumentList; + argumentList << QVariant::fromValue(lengthsList); + return asyncCallWithArgumentList(QLatin1String("receiveLengthsQl"), argumentList); + } + + inline QDBusPendingReply<> receiveLengthsQvl(const BlackMisc::CVariantList &lengthsVariantList) + { + QList argumentList; + argumentList << QVariant::fromValue(lengthsVariantList); + return asyncCallWithArgumentList(QLatin1String("receiveLengthsQvl"), argumentList); + } + + inline QDBusPendingReply<> receiveList(const QList &list) + { + QList argumentList; + argumentList << QVariant::fromValue(list); + return asyncCallWithArgumentList(QLatin1String("receiveList"), argumentList); + } + + inline QDBusPendingReply<> receiveSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed) + { + QList argumentList; + argumentList << QVariant::fromValue(speed); + return asyncCallWithArgumentList(QLatin1String("receiveSpeed"), argumentList); + } + + inline QDBusPendingReply<> receiveStringMessage(const QString &message) + { + QList argumentList; + argumentList << QVariant::fromValue(message); + return asyncCallWithArgumentList(QLatin1String("receiveStringMessage"), argumentList); + } + + inline QDBusPendingReply<> receiveTrack(BlackMisc::Aviation::CTrack track) + { + QList argumentList; + argumentList << QVariant::fromValue(track); + return asyncCallWithArgumentList(QLatin1String("receiveTrack"), argumentList); + } + + inline QDBusPendingReply<> receiveTransponder(const BlackMisc::Aviation::CTransponder &transponder) + { + QList argumentList; + argumentList << QVariant::fromValue(transponder); + return asyncCallWithArgumentList(QLatin1String("receiveTransponder"), argumentList); + } + + inline QDBusPendingReply<> receiveValueMap(const BlackMisc::CPropertyIndexVariantMap &valueMap) + { + QList argumentList; + argumentList << QVariant::fromValue(valueMap); + return asyncCallWithArgumentList(QLatin1String("receiveValueMap"), argumentList); + } + + inline QDBusPendingReply<> receiveVariant(const QDBusVariant &variant, int localMetyType) + { + QList argumentList; + argumentList << QVariant::fromValue(variant) << QVariant::fromValue(localMetyType); + return asyncCallWithArgumentList(QLatin1String("receiveVariant"), argumentList); + } + //! @} + + signals: + //! send message + void sendStringMessage(const QString &message); + + private: + //! Interface name + static const char *InterfaceName(); + + //! Compare objects and output info + template + static bool pingCompare(const ValueObject &in, const ValueObject &out, QTextStream &ts, bool verbose, int &errors) + { + const bool equal = (in == out); + if (!equal) { errors++; } + if (equal && !verbose) { return true; } + ts << "I: " << in.toQString() << endl << "O: " << out.toQString() << endl; + return equal; + } + + //! Error info string + static const QString &errorInfo(bool ok); + }; + } // ns +} // ns +#endif diff --git a/src/blackcore/test/testutils.cpp b/src/blackcore/test/testutils.cpp new file mode 100644 index 000000000..ecd2c8e90 --- /dev/null +++ b/src/blackcore/test/testutils.cpp @@ -0,0 +1,208 @@ +/* Copyright (C) 2013 + * 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. + */ + +//! \file + +#include "testutils.h" +#include "blackmisc/simulation/simulatedaircraftlist.h" +#include +#include +#include +#include + +using namespace BlackMisc; +using namespace BlackMisc::Aviation; +using namespace BlackMisc::Geo; +using namespace BlackMisc::Network; +using namespace BlackMisc::PhysicalQuantities; +using namespace BlackMisc::Simulation; +using namespace BlackMisc::Simulation::FsCommon; + +namespace BlackCore +{ + namespace Test + { + QString CTestUtils::getQDBusArgumentSignature(const QDBusArgument &arg, int level) + { + arg.beginArray(); + QVariant qv; + const QString indent(level * 2, ' '); + QString out; + + while (!arg.atEnd()) + { + const QString type = CTestUtils::dbusTypeAsString(arg.currentType()); + const QString signature = arg.currentSignature(); + qv = arg.asVariant(); // this advances in the stream + if (qv.canConvert()) + { + out += indent % type % QLatin1Literal("signature ") % signature % QLatin1Char('\n'); + out += CTestUtils::getQDBusArgumentSignature(qv.value(), level + 1) % QLatin1Char('\n'); + } + else + { + out += indent % QLatin1Literal("type: ") % type % QLatin1Literal("signature ") % signature % QLatin1Literal(" value ") % qv.toString() % QLatin1Char('\n'); + } + } + arg.endArray(); + return out; + } + + QString CTestUtils::dbusTypeAsString(QDBusArgument::ElementType type) + { + switch (type) + { + case QDBusArgument::BasicType: return QLatin1Literal("BasicType"); + case QDBusArgument::VariantType: return QLatin1Literal("VariantType"); + case QDBusArgument::ArrayType: return QLatin1Literal("ArrayType"); + case QDBusArgument::StructureType: return QLatin1Literal("StructureType"); + case QDBusArgument::MapType: return QLatin1Literal("MapType"); + case QDBusArgument::MapEntryType: return QLatin1Literal("MapEntryType"); + case QDBusArgument::UnknownType: + default: + return QLatin1Literal("Unknown type"); + } + } + + void CTestUtils::showDBusSignatures(QTextStream &out) + { + const CCallsign cs; + const CLength l; + const CAircraftIcaoCode icao; + const CAircraftModel model; + const CCountry country; + const CAirportIcaoCode airportIcao; + const CLivery livery; + const CAirport airport; + const CSimulatedAircraft aircraft; + const CSimulatedAircraftList aircraftList; + const CVariant var; + QString s; + s = CTestUtils::dBusSignature(cs); + out << "CCallsign" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(l); + out << "CLength" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(icao); + out << "CAircraftIcaoCode" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(airportIcao); + out << "CAirportIcaoCode" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(livery); + out << "CLivery" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(country); + out << "CCountry" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(airport); + out << "CAirport" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(model); + out << "CAircraftModel" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(aircraft); + out << "CSimulatedAircraft" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(aircraftList); + out << "CSimulatedAircraftList" << " size: " << s.size() << " sig: " << s << endl; + s = CTestUtils::dBusSignature(var); + out << "CVariant" << " size: " << s.size() << " sig: " << s << endl; + } + + CCallsign CTestUtils::getRandomAtcCallsign() + { + static QList callsigns; + if (callsigns.isEmpty()) + { + callsigns << CCallsign("EDDM_TWR"); + callsigns << CCallsign("EDDM_APP"); + callsigns << CCallsign("EDDM_GND"); + callsigns << CCallsign("EDDF_TWR"); + callsigns << CCallsign("EDDF_APP"); + callsigns << CCallsign("EDDF_GND"); + } + int i = (rand() % (callsigns.size())); + CCallsign cs = callsigns.at(i); + return cs; + } + + CAtcStation CTestUtils::getAtcStation() + { + const CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21′ 13″ N", "11° 47′ 09″ E", { 1487, CLengthUnit::ft() }); // Munich + const CAtcStation station(CCallsign("eddm_twr"), CUser("654321", "client"), + CFrequency(118.7, CFrequencyUnit::MHz()), + geoPos, CLength(50, CLengthUnit::km())); + return station; + } + + CSpeed CTestUtils::getSpeed() + { + return CSpeed(666, CSpeedUnit::km_h()); + } + + CAtcStationList CTestUtils::getStations(int number) + { + BlackMisc::Aviation::CAtcStationList list; + for (int i = 0; i < number; i++) + { + BlackMisc::Aviation::CAtcStation s; + s.setCallsign(QString::number(i)); + s.setFrequency(BlackMisc::PhysicalQuantities::CFrequency(i, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz())); + s.setController(CUser(QString::number(i), "FooBar", "", "")); + s.setOnline(i % 2 == 0 ? true : false); + s.setPosition(CCoordinateGeodetic(i, i, i)); + list.push_back(s); + } + return list; + } + + CAircraftCfgEntriesList CTestUtils::getAircraftCfgEntries(int number) + { + CAircraftCfgEntriesList list; + for (int i = 0; i < number; i++) + { + CAircraftCfgEntries e; + e.setAtcModel("atc model"); + e.setAtcParkingCode(QString::number(i)); + e.setIndex(i); + e.setFileName("this will be the file path and pretty long"); + e.setTitle("I am the aircraft title foobar"); + e.setAtcType("B737"); + list.push_back(e); + } + return list; + } + + CAirportList CTestUtils::getAirports(int number) + { + BlackMisc::Aviation::CAirportList list; + for (int i = 0; i < number; i++) + { + const char cc = 65 + (i % 26); + QString icao = QString("EXX%1").arg(QLatin1Char(cc)); + BlackMisc::Aviation::CAirport a(icao); + a.setPosition(CCoordinateGeodetic(i, i, i)); + list.push_back(a); + } + return list; + } + + CClientList CTestUtils::getClients(int number) + { + BlackMisc::Network::CClientList list; + for (int i = 0; i < number; i++) + { + CCallsign cs(QString("DXX%1").arg(i)); + QString rn = QString("Joe Doe%1").arg(i); + CUser user(QString::number(i), rn, cs); + user.setCallsign(cs); + CClient client(user); + client.setCapability(true, CClient::FsdWithInterimPositions); + client.setCapability(true, CClient::FsdWithIcaoCodes); + const QString myFooModel = QString("fooModel %1").arg(i); + client.setQueriedModelString(myFooModel); + list.push_back(client); + } + return list; + } + } // ns +} // ns diff --git a/src/blackcore/test/testutils.h b/src/blackcore/test/testutils.h new file mode 100644 index 000000000..ca868ac4f --- /dev/null +++ b/src/blackcore/test/testutils.h @@ -0,0 +1,74 @@ +/* Copyright (C) 2013 + * 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. + */ + +//! \file + +#ifndef BLACKCORE_TEST_TESTUTILS_H +#define BLACKCORE_TEST_TESTUTILS_H + +#include "blackcore/blackcoreexport.h" +#include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" +#include "blackmisc/aviation/atcstationlist.h" +#include "blackmisc/aviation/airportlist.h" +#include "blackmisc/network/clientlist.h" +#include + +namespace BlackCore +{ + namespace Test + { + //! Utils for UNIT tests / samples + class BLACKCORE_EXPORT CTestUtils + { + public: + //! Get QDBusArgument signature (formatted) + static QString getQDBusArgumentSignature(const QDBusArgument &arg, int level = 0); + + //! Signature for BlackMisc::CValueObject + template + static QString dBusSignature(const ValueObj &obj) + { + QDBusArgument arg; + obj.marshallToDbus(arg); + return arg.currentSignature(); + } + + //! Type as string + static QString dbusTypeAsString(QDBusArgument::ElementType type); + + //! Show some (important) DBus signatures + static void showDBusSignatures(QTextStream &out); + + // ----------------- some test data -------------------- + + //! Get a random callsign + static BlackMisc::Aviation::CCallsign getRandomAtcCallsign(); + + //! Get ATC station + static BlackMisc::Aviation::CAtcStation getAtcStation(); + + //! Get speed + static BlackMisc::PhysicalQuantities::CSpeed getSpeed(); + + //! Get ATC stations + static BlackMisc::Aviation::CAtcStationList getStations(int number); + + //! Get aircraft cfg entries + static BlackMisc::Simulation::FsCommon::CAircraftCfgEntriesList getAircraftCfgEntries(int number); + + //! Get airports + static BlackMisc::Aviation::CAirportList getAirports(int number); + + //! Get clients + static BlackMisc::Network::CClientList getClients(int number); + }; + } // ns +} // ns + +#endif // guard diff --git a/tests/blackcore/testdbus.cpp b/tests/blackcore/testdbus.cpp new file mode 100644 index 000000000..87831a4fa --- /dev/null +++ b/tests/blackcore/testdbus.cpp @@ -0,0 +1,57 @@ +/* Copyright (C) 2017 + * 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 testblackcore + */ + +#include "testdbus.h" +#include "blackmisc/simulation/simulatedaircraftlist.h" +#include "blackcore/test/testutils.h" +#include "blackcore/test/testservice.h" +#include "blackcore/test/testserviceinterface.h" +#include +#include + +using namespace BlackMisc::Simulation; +using namespace BlackCore::Test; + +namespace BlackCoreTest +{ + void CTestDBus::marshallUnmarshall() + { + ITestServiceInterface testServiceInterface(CTestService::InterfaceName(), CTestService::ObjectPath(), QDBusConnection::sessionBus()); + int errors = ITestServiceInterface::pingTests(testServiceInterface, false); + QVERIFY2(errors == 0, "DBus Ping tests fail"); + } + + void CTestDBus::signatureSize() + { + constexpr int max = 255; + QString s; + + // normally CSimulatedAircraftList is expected to be the biggest one + const CAircraftModel model; + s = CTestUtils::dBusSignature(model); + QVERIFY2(s.length() <= max, "Signature CAircraftModel"); + + const CSimulatedAircraft aircraft; + s = CTestUtils::dBusSignature(aircraft); + QVERIFY2(s.length() <= max, "Signature CSimulatedAircraft"); + + const CSimulatedAircraftList al; + s = CTestUtils::dBusSignature(al); + QVERIFY2(s.length() <= max, "Signature CSimulatedAircraftList"); + } +} + +//! \endcond