Files
pilotclient/tests/blackcore/context/testcontext/testcontext.cpp
Lars Toenning 389431ccef refactor: Clean up setup file reader
Previously we already switch to loading the bootstrap file only from the
local file (ec42553910).
This removes the remaining parts of loading the bootstrap file from a
remote location.
This also updates the UI in case of parsing errors of the bootstrap.json.
2024-02-05 22:23:40 +01:00

117 lines
3.5 KiB
C++

// SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
//! \cond PRIVATE_TESTS
//! \file
//! \ingroup testblackcore
#include "blackcore/context/contextapplicationproxy.h"
#include "blackcore/context/contextaudioproxy.h"
#include "blackcore/context/contextnetworkproxy.h"
#include "blackcore/context/contextownaircraftproxy.h"
#include "blackcore/context/contextsimulatorproxy.h"
#include "blackcore/application.h"
#include "blackmisc/simulation/simulatedaircraftlist.h"
#include "blackmisc/dbusutils.h"
#include "test.h"
#include <QTest>
#ifdef Q_OS_WIN
# include "comdef.h"
#endif
using namespace BlackMisc;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Simulation;
using namespace BlackCore;
using namespace BlackCore::Context;
namespace BlackCoreTest
{
//! Context implementation classes tests
class CTestContext : public QObject
{
Q_OBJECT
private slots:
//! Init tests for context
void initTestCase();
//! Test the DBus signatures
void dBusSignatures();
};
void CTestContext::initTestCase()
{
// will cause asserts when signal connects fail
QDBusConnection connection = QDBusConnection::sessionBus();
if (!connection.isConnected())
{
QSKIP("Cannot connect session DBus, skip unit test");
return;
}
// CContextAudioProxy::unitTestRelaySignals() crashes in QAudioDeviceInfo::availableDevices(QAudio::AudioInput)
// discussion https://discordapp.com/channels/539048679160676382/623947987822837779/631940817669455903
// solved if unit test initializes a QGuiApplication
CContextAudioProxy::unitTestRelaySignals();
CContextNetworkProxy::unitTestRelaySignals();
CContextOwnAircraftProxy::unitTestRelaySignals();
CContextSimulatorProxy::unitTestRelaySignals();
}
void CTestContext::dBusSignatures()
{
const CAircraftModel model;
const CAircraftSituation situation;
const CSimulatedAircraft aircraft;
const CSimulatedAircraftList aircraftList;
constexpr int MaxSize = 220; // max size in dbus spec is 255
int s = CDBusUtils::dBusSignatureSize(model);
QVERIFY2(s < MaxSize, "CAircraftModel");
s = CDBusUtils::dBusSignatureSize(situation);
QVERIFY2(s < MaxSize, "CAircraftSituation");
s = CDBusUtils::dBusSignatureSize(aircraft);
QVERIFY2(s < MaxSize, "CSimulatedAircraft");
s = CDBusUtils::dBusSignatureSize(aircraftList);
QVERIFY2(s < MaxSize, "CSimulatedAircraftList");
}
} // ns
//! main
int main(int argc, char *argv[])
{
// QCoreApplication app(argc, argv);
// discussion https://discordapp.com/channels/539048679160676382/623947987822837779/631940817669455903
// QDeviceInfo crashes using QCoreApplication
#ifdef _WIN32
QGuiApplication app(argc, argv);
const HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
Q_UNUSED(hr)
#else
QCoreApplication app(argc, argv); // using QGuiApplication fails on Jenkins Linux, no display
#endif
BLACKTEST_INIT(BlackCoreTest::CTestContext)
CApplication a(CApplicationInfo::UnitTest);
a.addVatlibOptions();
const bool setup = a.parseAndLoadSetup();
if (!setup) { qWarning() << "No setup loaded"; }
int r = EXIT_FAILURE;
if (a.start())
{
r = QTest::qExec(&to, args);
}
a.gracefulShutdown();
return r;
}
#include "testcontext.moc"
//! \endcond