swift
Loading...
Searching...
No Matches
testdata.cpp
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
5
9#include "misc/fileutils.h"
10#include "misc/math/mathutils.h"
11#include "misc/network/server.h"
15#include "misc/variantlist.h"
16
17using namespace swift::misc::aviation;
18using namespace swift::misc::geo;
19using namespace swift::misc::math;
20using namespace swift::misc::network;
21using namespace swift::misc::physical_quantities;
22using namespace swift::misc::simulation;
23
25namespace swift::misc::test
26{
27 int randomIndex(int size) { return CMathUtils::randomInteger(0, size - 1); }
28
29 const CServer &CTestData::getTrafficServer()
30 {
31 static const CServer trafficServer("fooserver", "a foo server", "localhost", 1234,
32 CUser("112233", "Some real name", "email@xyz.com", "secret"), CFsdSetup(),
33 CEcosystem(CEcosystem::VATSIM));
34 return trafficServer;
35 }
36
37 const CVariantList &CTestData::getCVariantList()
38 {
39 static const CVariantList vl({ CVariant::fromValue(CLength(100, CLengthUnit::m())),
42 return vl;
43 }
44
45 CPropertyIndexVariantMap getCPropertyIndexVariantMapImpl()
46 {
47 CPropertyIndexVariantMap valueMap;
48 valueMap.addValue(1000, 111.222);
51 valueMap.addValue(4000, QDateTime::currentDateTime().addDays(1));
52 valueMap.addValue(5000, QString("foobar"));
53 return valueMap;
54 }
55
56 const CPropertyIndexVariantMap &CTestData::getCPropertyIndexVariantMap()
57 {
58 static const CPropertyIndexVariantMap valueMap(getCPropertyIndexVariantMapImpl());
59 return valueMap;
60 }
61
62 const CCoordinateGeodetic &CTestData::getCoordinateMunichTower()
63 {
64 static const CCoordinateGeodetic c =
65 CCoordinateGeodetic::fromWgs84("48° 21′ 13″ N", "11° 47′ 09″ E", { 1487, CLengthUnit::ft() });
66 return c;
67 }
68
69 const CCoordinateGeodetic &CTestData::getCoordinateFrankfurtTower()
70 {
71 static const CCoordinateGeodetic c =
72 CCoordinateGeodetic::fromWgs84("50° 1' 18.38″ N", "8° 33' 23.24″ E", { 355, CLengthUnit::ft() });
73 return c;
74 }
75
76 const CFlightPlan &CTestData::getFlightPlan()
77 {
78 static const CFlightPlanAircraftInfo info("T/A320/F");
79 static const CFlightPlan fp(
80 CCallsign("DAMBZ", CCallsign::Aircraft), info, "EDDF", "EDDM", "EDDN", QDateTime::currentDateTimeUtc(),
81 QDateTime::currentDateTime().addSecs(600), CTime(1.0, CTimeUnit::h()), CTime(2.0, CTimeUnit::h()),
82 CAltitude(10000, CAltitude::MeanSeaLevel, CLengthUnit::ft()), CSpeed(400, CSpeedUnit::kts()),
83 CFlightPlan::IFR, "DKB T104 ANORA", "Testing flight");
84 return fp;
85 }
86
87 const CAtcStation &CTestData::getMunichTower()
88 {
89 static const CAtcStation t(CCallsign("EDDM_TWR"), CUser("654321", "John Doe"),
91 CLength(50, CLengthUnit::km()), false);
92 return t;
93 }
94
95 const CAtcStation &CTestData::getFrankfurtTower()
96 {
97 static const CAtcStation t(CCallsign("EDDF_TWR"), CUser("654321", "Joe Bar"),
99 CLength(50, CLengthUnit::km()), true, QDateTime::currentDateTimeUtc().addSecs(2400));
100 return t;
101 }
102
103 const CAtcStation &CTestData::getMunichApproach()
104 {
105 static const CAtcStation t(CCallsign("eddm_app"), CUser("654321", "Jen Doe"),
107 CLength(100, CLengthUnit::km()), false);
108 return t;
109 }
110
111 const CAtcStationList &CTestData::getAtcStations()
112 {
113 static const CAtcStationList stations(
115 return stations;
116 }
117
118 const CAtcStation &CTestData::getRandomAtcStation()
119 {
120 static const int s = CTestData::getAtcStations().size();
121 return getAtcStations()[randomIndex(s)];
122 }
123
124 const CCallsignSet &CTestData::getPilotCallsigns()
125 {
126 static const CCallsignSet callsigns({ CCallsign("DEMBZ"), CCallsign("DLH123"), CCallsign("RYR635L"),
127 CCallsign("LGL974"), CCallsign("AUI129"), CCallsign("CLX756") });
128 return callsigns;
129 }
130
131 const CCallsign &CTestData::getRandomPilotCallsign()
132 {
133 static const QList<CCallsign> callsigns(CTestData::getPilotCallsigns().toQList());
134 return callsigns[randomIndex(callsigns.size())];
135 }
136
137 const CCallsignSet &CTestData::getControllerCallsigns()
138 {
139 static const CCallsignSet callsigns({ CCallsign("EDDM_TWR"), CCallsign("EDDM_APP"), CCallsign("EDDM_GND"),
140 CCallsign("EDDF_TWR"), CCallsign("EDDF_APP"), CCallsign("EDDF_GND") });
141 return callsigns;
142 }
143
145 {
146 static const QList<CCallsign> callsigns(CTestData::getControllerCallsigns().toQList());
147 return callsigns[randomIndex(callsigns.size())];
148 }
149
150 const CUserList &CTestData::getPilots()
151 {
152 static const QList<CCallsign> callsigns(CTestData::getPilotCallsigns().toQList());
153 static const CUserList pilots({
154 CUser("100100", "Joe Doe", callsigns[0]),
155 CUser("100101", "Jane Foo", callsigns[1]),
156 CUser("100200", "Frank Sky", callsigns[2]),
157 CUser("100300", "Richard F. Frings", callsigns[3]),
158 CUser("100301", "Torben Frey", callsigns[4]),
159 CUser("100400", "Kay Dòresn", callsigns[5]),
160 });
161 return pilots;
162 }
163
164 const CUser &CTestData::getRandomPilot()
165 {
166 static const int s = CTestData::getPilots().size();
167 return CTestData::getPilots()[randomIndex(s)];
168 }
169
170 const CUserList &CTestData::getControllers()
171 {
172 static const QList<CCallsign> callsigns(CTestData::getControllerCallsigns().toQList());
173 static const CUserList controllers({
174 CUser("300100", "Jeff Doe", callsigns[0]),
175 CUser("300101", "Foo Mister", callsigns[1]),
176 CUser("300200", "Sky Du", callsigns[2]),
177 CUser("300300", "F. Frings", callsigns[3]),
178 CUser("300301", "Ralf Smith", callsigns[4]),
179 CUser("300400", "Doreen Jump", callsigns[5]),
180 });
181 return controllers;
182 }
183
184 const CUser &CTestData::getRandomController()
185 {
186 static const int s = CTestData::getControllers().size();
187 return CTestData::getControllers()[randomIndex(s)];
188 }
189
190 CAircraftSituation getAircraftSituationAboveMunichTowerImpl()
191 {
192 CAircraftSituation situation(CTestData::getCoordinateMunichTower(),
193 CHeading(10, CHeading::True, CAngleUnit::deg()), CAngle(12, CAngleUnit::deg()),
194 CAngle(5, CAngleUnit::deg()), CSpeed(111, CSpeedUnit::km_h()));
195 situation.setAltitude({ 2500, CLengthUnit::ft() });
196 situation.setCallsign(CTestData::getRandomPilotCallsign());
197 return situation;
198 }
199
200 const CAircraftSituation &CTestData::getAircraftSituationAboveMunichTower()
201 {
202 static const CAircraftSituation situation(getAircraftSituationAboveMunichTowerImpl());
203 return situation;
204 }
205
206 CAircraftSituation getAircraftSituationAboveFrankfurtTowerImpl()
207 {
208 CAircraftSituation situation(CTestData::getCoordinateFrankfurtTower(),
209 CHeading(290, CHeading::True, CAngleUnit::deg()), CAngle(4, CAngleUnit::deg()),
210 CAngle(10, CAngleUnit::deg()), CSpeed(200, CSpeedUnit::km_h()));
211 situation.setAltitude({ 4000, CLengthUnit::ft() });
212 situation.setCallsign(CTestData::getRandomPilotCallsign());
213 return situation;
214 }
215
217 {
218 static const CAircraftSituation situation(getAircraftSituationAboveFrankfurtTowerImpl());
219 return situation;
220 }
221
222 const CAircraftIcaoCode &CTestData::getDBAircraftIcaoB737()
223 {
224 static const QString json =
226 static const CAircraftIcaoCode icao(CAircraftIcaoCode::fromJson(json));
227 Q_ASSERT(icao.hasValidDbKey());
228 return icao;
229 }
230
231 const CAircraftIcaoCode &CTestData::getDBAircraftIcaoC172()
232 {
233 static const QString json =
235 static const CAircraftIcaoCode icao(CAircraftIcaoCode::fromJson(json));
236 Q_ASSERT(icao.hasValidDbKey());
237 return icao;
238 }
239
240 const CAirlineIcaoCode &CTestData::getDbAirlineIcaoDLH()
241 {
242 static const QString json =
244 static const CAirlineIcaoCode icao(CAirlineIcaoCode::fromJson(json));
245 Q_ASSERT(icao.hasValidDbKey());
246 return icao;
247 }
248
249 const CAirlineIcaoCode &CTestData::getDbAirlineIcaoBAW()
250 {
251 static const QString json =
253 static const CAirlineIcaoCode icao(CAirlineIcaoCode::fromJson(json));
254 Q_ASSERT(icao.hasValidDbKey());
255 return icao;
256 }
257
259 {
260 static const QString json =
262 static const CLivery livery(CLivery::fromJson(json));
263 Q_ASSERT(livery.hasValidDbKey());
264 return livery;
265 }
266
268 {
269 static const QString json =
271 static const CAircraftModel model(CAircraftModel::fromDatabaseJson(json::jsonObjectFromString(json)));
272 Q_ASSERT(model.hasValidDbKey());
273 Q_ASSERT(!model.getModelString().isEmpty());
274 return model;
275 }
276
278 {
279 static const QString json =
281 static const CAircraftModel model(CAircraftModel::fromDatabaseJson(json::jsonObjectFromString(json)));
282 Q_ASSERT(model.hasValidDbKey());
283 Q_ASSERT(!model.getModelString().isEmpty());
284 return model;
285 }
286
287 CSimulatedAircraft getC172AircraftImpl()
288 {
289 CUser pilot = CTestData::getRandomPilot();
290 CSimulatedAircraft aircraft(pilot.getCallsign(), CTestData::getDbAircraftModelFsxA2AC172Skyhawk(), pilot,
292 CTransponder t = CTransponder(7000, CTransponder::ModeC);
293 aircraft.setTransponder(t);
294 aircraft.setCom1ActiveFrequency(CTestData::getRandomAtcStation().getFrequency());
295 aircraft.setCom2ActiveFrequency(CTestData::getRandomAtcStation().getFrequency());
296 return aircraft;
297 }
298
299 const CSimulatedAircraft &CTestData::getC172Aircraft()
300 {
301 static const CSimulatedAircraft aircraft(getC172AircraftImpl());
302 return aircraft;
303 }
304
305 CSimulatedAircraft getA320AircraftImpl()
306 {
307 CUser pilot = CTestData::getRandomPilot();
308 CSimulatedAircraft aircraft(pilot.getCallsign(), CTestData::getDbAircraftModelFsxAerosoftA320(), pilot,
310 const CTransponder t = CTransponder(7000, CTransponder::ModeC);
311 aircraft.setTransponder(t);
312 aircraft.setCom1ActiveFrequency(CTestData::getRandomAtcStation().getFrequency());
313 aircraft.setCom2ActiveFrequency(CTestData::getRandomAtcStation().getFrequency());
314 return aircraft;
315 }
316
317 const CSimulatedAircraft &CTestData::getA320Aircraft()
318 {
319 static const CSimulatedAircraft aircraft(getA320AircraftImpl());
320 return aircraft;
321 }
322} // namespace swift::misc::test
static CAngleUnit deg()
Degrees.
Definition units.h:276
static CFrequencyUnit MHz()
Megahertz.
Definition units.h:380
static QString readFileToString(const QString &fileNameAndPath)
Read file into string.
Definition fileutils.cpp:83
void addValue(const CPropertyIndex &index, const CVariant &value)
Add a value.
size_type size() const
Returns number of elements in the sequence.
Definition sequence.h:273
static const QString & testFilesDirectory()
Where test files are located.
static CVariant fromValue(T &&value)
Construct a variant from a value.
Definition variant.h:139
@ IFR
Instrument flight rules.
Definition flightplan.h:157
static CCoordinateGeodetic fromWgs84(const QString &latitudeWgs84, const QString &longitudeWgs84, const aviation::CAltitude &geodeticHeight={})
Coordinate by WGS84 position data.
static int randomInteger(int low, int high)
Random number between low and high.
Definition mathutils.cpp:77
const aviation::CCallsign & getCallsign() const
Get associated callsign.
Definition user.h:140
static CLengthUnit km()
Kilometer km.
Definition units.h:165
static CLengthUnit m()
Meter m.
Definition units.h:140
static CLengthUnit ft()
Foot ft.
Definition units.h:157
static CSpeedUnit km_h()
Kilometer/hour km/h.
Definition units.h:852
static CSpeedUnit m_s()
Meter/second m/s.
Definition units.h:808
static CSpeedUnit kts()
Knots.
Definition units.h:817
static CAircraftModel fromDatabaseJson(const QJsonObject &json, const QString &prefix=QString("mod_"))
From swift DB JSON.
static const swift::misc::network::CServer & getTrafficServer()
Traffic server (dummy).
static const swift::misc::aviation::CAtcStation & getRandomAtcStation()
Get ATC station.
static const swift::misc::simulation::CAircraftModel & getDbAircraftModelFsxAerosoftA320()
FSX aircraft model, an Airbus A320.
static const swift::misc::aviation::CAircraftIcaoCode & getDBAircraftIcaoC172()
C172 ICAO code (as from DB).
static const swift::misc::geo::CCoordinateGeodetic & getCoordinateMunichTower()
Munich tower coordinate.
static const swift::misc::aviation::CCallsign & getRandomControllerCallsign()
Get a random callsign (ATC).
static const swift::misc::aviation::CAtcStation & getMunichApproach()
Munich approach.
static const swift::misc::aviation::CAircraftSituation & getAircraftSituationAboveMunichTower()
Aircraft situation (Munich).
static const swift::misc::aviation::CCallsign & getRandomPilotCallsign()
Get a random callsign (aircraft).
static const swift::misc::aviation::CFlightPlan & getFlightPlan()
Prefilled flightplan from EDDM-EDDF.
static const swift::misc::network::CUser & getRandomPilot()
Get a random pilot user.
static const swift::misc::network::CUserList & getPilots()
Get a random pilot.
static const swift::misc::aviation::CAtcStation & getFrankfurtTower()
Frankfurt tower.
static const swift::misc::aviation::CAtcStation & getMunichTower()
Munich tower.
static const swift::misc::aviation::CAtcStationList & getAtcStations()
Tower stations.
static const swift::misc::aviation::CAirlineIcaoCode & getDbAirlineIcaoDLH()
DLH ICAO code (as from DB).
static const swift::misc::simulation::CAircraftModel & getDbAircraftModelFsxA2AC172Skyhawk()
FSX aircraft model, a C172 Skyhawk.
static const swift::misc::aviation::CAircraftIcaoCode & getDBAircraftIcaoB737()
B737 ICAO code (as from DB).
static const swift::misc::network::CUser & getRandomController()
Get a random controller user.
static const swift::misc::CVariantList & getCVariantList()
Get a variant list with various data.
static const swift::misc::aviation::CCallsignSet & getPilotCallsigns()
Get aircraft callsigns.
static const swift::misc::aviation::CCallsignSet & getControllerCallsigns()
Get controller callsigns.
static const swift::misc::network::CUserList & getControllers()
Get a random controller.
static const swift::misc::aviation::CLivery & getDbLiveryDLHStarAlliance()
Aircraft model.
static const swift::misc::CPropertyIndexVariantMap & getCPropertyIndexVariantMap()
Get a variant map.
static const swift::misc::simulation::CSimulatedAircraft & getC172Aircraft()
C172 simulated aircraft, a C172.
static const swift::misc::simulation::CSimulatedAircraft & getA320Aircraft()
A320 simulated aircraft, a A.
static const swift::misc::aviation::CAirlineIcaoCode & getDbAirlineIcaoBAW()
BAW ICAO code (as from DB).
static const swift::misc::geo::CCoordinateGeodetic & getCoordinateFrankfurtTower()
Frankfurt tower coordinate.
static const swift::misc::aviation::CAircraftSituation & getAircraftSituationAboveFrankfurtTower()
Aircraft situation (Frankfurt).
QJsonObject jsonObjectFromString(const QString &json, bool acceptCacheFormat)
JSON Object from string.
Definition json.cpp:419
Generate data for testing purposes.
Definition testdata.h:45
QDateTime currentDateTime()
QDateTime currentDateTimeUtc()