swift
testcontext.cpp
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
7 
8 #include <QTest>
9 
10 #include "test.h"
11 
12 #include "core/application.h"
18 #include "misc/dbusutils.h"
20 
21 #ifdef Q_OS_WIN
22 # include "comdef.h"
23 #endif
24 
25 using namespace swift::misc;
26 using namespace swift::misc::aviation;
27 using namespace swift::misc::simulation;
28 using namespace swift::core;
29 using namespace swift::core::context;
30 
31 namespace SwiftCoreTest
32 {
34  class CTestContext : public QObject
35  {
36  Q_OBJECT
37 
38  private slots:
40  void initTestCase();
41 
43  void dBusSignatures();
44  };
45 
46  void CTestContext::initTestCase()
47  {
48  // will cause asserts when signal connects fail
49  QDBusConnection connection = QDBusConnection::sessionBus();
50  if (!connection.isConnected())
51  {
52  QSKIP("Cannot connect session DBus, skip unit test");
53  return;
54  }
55 
56  // CContextAudioProxy::unitTestRelaySignals() crashes in QAudioDeviceInfo::availableDevices(QAudio::AudioInput)
57  // discussion https://discordapp.com/channels/539048679160676382/623947987822837779/631940817669455903
58  // solved if unit test initializes a QGuiApplication
59  CContextAudioProxy::unitTestRelaySignals();
60  CContextNetworkProxy::unitTestRelaySignals();
61  CContextOwnAircraftProxy::unitTestRelaySignals();
62  CContextSimulatorProxy::unitTestRelaySignals();
63  }
64 
65  void CTestContext::dBusSignatures()
66  {
67  const CAircraftModel model;
68  const CAircraftSituation situation;
69  const CSimulatedAircraft aircraft;
70  const CSimulatedAircraftList aircraftList;
71 
72  constexpr int MaxSize = 220; // max size in dbus spec is 255
73  int s = CDBusUtils::dBusSignatureSize(model);
74  QVERIFY2(s < MaxSize, "CAircraftModel");
75 
76  s = CDBusUtils::dBusSignatureSize(situation);
77  QVERIFY2(s < MaxSize, "CAircraftSituation");
78 
79  s = CDBusUtils::dBusSignatureSize(aircraft);
80  QVERIFY2(s < MaxSize, "CSimulatedAircraft");
81 
82  s = CDBusUtils::dBusSignatureSize(aircraftList);
83  QVERIFY2(s < MaxSize, "CSimulatedAircraftList");
84  }
85 } // namespace SwiftCoreTest
86 
88 int main(int argc, char *argv[])
89 {
90  // QCoreApplication app(argc, argv);
91  // discussion https://discordapp.com/channels/539048679160676382/623947987822837779/631940817669455903
92  // QDeviceInfo crashes using QCoreApplication
93 
94 #ifdef _WIN32
95  QGuiApplication app(argc, argv);
96  const HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
97  Q_UNUSED(hr)
98 #else
99  QCoreApplication app(argc, argv); // using QGuiApplication fails on Jenkins Linux, no display
100 #endif
101 
103  CApplication a(CApplicationInfo::UnitTest);
104  a.addNetworkOptions();
105  const bool setup = a.parseCommandLineArgsAndLoadSetup();
106  if (!setup) { qWarning() << "No setup loaded"; }
107  int r = EXIT_FAILURE;
108  if (a.start()) { r = QTest::qExec(&to, args); }
109  a.gracefulShutdown();
110  return r;
111 }
112 
113 #include "testcontext.moc"
114 
Context implementation classes tests.
Definition: testcontext.cpp:35
void addNetworkOptions()
Add the network options.
bool parseCommandLineArgsAndLoadSetup()
Combined function that does a startup check, parses the command line arguments and loads the setup.
virtual bool start()
Start services, if not yet parsed call CApplication::parse.
virtual void gracefulShutdown()
Graceful shutdown.
static int dBusSignatureSize(const ValueObj &obj)
Signature size for swift::misc::CValueObject.
Definition: dbusutils.h:34
Value object encapsulating information of an aircraft's situation.
Aircraft model (used by another pilot, my models on disk)
Definition: aircraftmodel.h:71
Comprehensive information of an aircraft.
Value object encapsulating a list of aircraft.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
Free functions in swift::misc.
#define SWIFTTEST_INIT(TestObject)
Implements a main() function that executes all tests in TestObject without instantiating a QApplicati...
Definition: test.h:18
int main(int argc, char *argv[])
main
Definition: testcontext.cpp:88