Based on unit test failure (clang):

* now ignore incomplete entities for airline/aircraft ICAOs from DB
* utility functions to find invalid designators
* adjusted unit test, avoid taking a random element
* and fixed 4 wrong ICAO entries in DB
This commit is contained in:
Klaus Basan
2017-04-07 18:52:05 +02:00
committed by Mathew Sutcliffe
parent 4bb29de652
commit 5c32a912f3
7 changed files with 71 additions and 8 deletions

View File

@@ -239,7 +239,7 @@ namespace BlackCore
} }
// normally read from special view which already filter incomplete // normally read from special view which already filter incomplete
const CAircraftIcaoCodeList codes = CAircraftIcaoCodeList::fromDatabaseJson(res, false); const CAircraftIcaoCodeList codes = CAircraftIcaoCodeList::fromDatabaseJson(res, true);
const int n = codes.size(); const int n = codes.size();
qint64 latestTimestamp = codes.latestTimestampMsecsSinceEpoch(); qint64 latestTimestamp = codes.latestTimestampMsecsSinceEpoch();
if (n > 0 && latestTimestamp < 0) if (n > 0 && latestTimestamp < 0)
@@ -266,7 +266,7 @@ namespace BlackCore
emit dataRead(CEntityFlags::AirlineIcaoEntity, CEntityFlags::ReadFailed, 0); emit dataRead(CEntityFlags::AirlineIcaoEntity, CEntityFlags::ReadFailed, 0);
return; return;
} }
const CAirlineIcaoCodeList codes = CAirlineIcaoCodeList::fromDatabaseJson(res, false); const CAirlineIcaoCodeList codes = CAirlineIcaoCodeList::fromDatabaseJson(res, true);
const int n = codes.size(); const int n = codes.size();
qint64 latestTimestamp = codes.latestTimestampMsecsSinceEpoch(); qint64 latestTimestamp = codes.latestTimestampMsecsSinceEpoch();
if (n > 0 && latestTimestamp < 0) if (n > 0 && latestTimestamp < 0)

View File

@@ -532,8 +532,8 @@ namespace BlackMisc
// Amphibian, Glider, Helicopter, Seaplane, Landplane, Tilt wing // Amphibian, Glider, Helicopter, Seaplane, Landplane, Tilt wing
static const QString validDescriptions = "AGHSLT"; static const QString validDescriptions = "AGHSLT";
// Electric, Jet, Piston, Turpoprop // Electric, Jet, Piston, Turpoprop, and - for no engine
static const QString validEngines = "EJPT"; static const QString validEngines = "EJPT-";
if (!validDescriptions.contains(combinedType[0])) { return false; } if (!validDescriptions.contains(combinedType[0])) { return false; }
if (!combinedType[1].isDigit()) { return false; } if (!combinedType[1].isDigit()) { return false; }

View File

@@ -34,6 +34,22 @@ namespace BlackMisc
}); });
} }
CAircraftIcaoCodeList CAircraftIcaoCodeList::findByValidDesignator() const
{
return this->findBy([](const CAircraftIcaoCode & code)
{
return code.hasValidDesignator();
});
}
CAircraftIcaoCodeList CAircraftIcaoCodeList::findByInvalidDesignator() const
{
return this->findBy([](const CAircraftIcaoCode & code)
{
return !code.hasValidDesignator();
});
}
CAircraftIcaoCodeList CAircraftIcaoCodeList::findByDesignatorOrIataCode(const QString &icaoOrIata) const CAircraftIcaoCodeList CAircraftIcaoCodeList::findByDesignatorOrIataCode(const QString &icaoOrIata) const
{ {
if (icaoOrIata.isEmpty()) { return CAircraftIcaoCodeList(); } if (icaoOrIata.isEmpty()) { return CAircraftIcaoCodeList(); }

View File

@@ -54,6 +54,12 @@ namespace BlackMisc
//! Find by family //! Find by family
CAircraftIcaoCodeList findByFamily(const QString &family) const; CAircraftIcaoCodeList findByFamily(const QString &family) const;
//! Ones with a valid designator
CAircraftIcaoCodeList findByValidDesignator() const;
//! Ones with an invalid designator
CAircraftIcaoCodeList findByInvalidDesignator() const;
//! Find by ICAO/IATA code //! Find by ICAO/IATA code
CAircraftIcaoCodeList findByDesignatorOrIataCode(const QString &icaoOrIata) const; CAircraftIcaoCodeList findByDesignatorOrIataCode(const QString &icaoOrIata) const;

View File

@@ -106,6 +106,22 @@ namespace BlackMisc
}); });
} }
CAirlineIcaoCodeList CAirlineIcaoCodeList::findByValidDesignator() const
{
return this->findBy([](const CAirlineIcaoCode & code)
{
return code.hasValidDesignator();
});
}
CAirlineIcaoCodeList CAirlineIcaoCodeList::findByInvalidDesignator() const
{
return this->findBy([](const CAirlineIcaoCode & code)
{
return !code.hasValidDesignator();
});
}
CAirlineIcaoCode CAirlineIcaoCodeList::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const CAirlineIcaoCode CAirlineIcaoCodeList::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const
{ {
if (icaoPattern.hasValidDbKey()) { return icaoPattern; } if (icaoPattern.hasValidDbKey()) { return icaoPattern; }

View File

@@ -74,6 +74,12 @@ namespace BlackMisc
//! Find by military flag //! Find by military flag
CAirlineIcaoCodeList findByMilitary(bool military) const; CAirlineIcaoCodeList findByMilitary(bool military) const;
//! The ones with a valid designator
CAirlineIcaoCodeList findByValidDesignator() const;
//! The ones with an invalid designator
CAirlineIcaoCodeList findByInvalidDesignator() const;
//! Best selection by given pattern //! Best selection by given pattern
CAirlineIcaoCode smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const; CAirlineIcaoCode smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const;

View File

@@ -81,10 +81,29 @@ namespace BlackCoreTest
QVERIFY2(this->m_icaoReader->getAircraftIcaoCodesCount() > 0, qUtf8Printable(m1)); QVERIFY2(this->m_icaoReader->getAircraftIcaoCodesCount() > 0, qUtf8Printable(m1));
QVERIFY2(this->m_icaoReader->getAirlineIcaoCodesCount() > 0, qUtf8Printable(m2)); QVERIFY2(this->m_icaoReader->getAirlineIcaoCodesCount() > 0, qUtf8Printable(m2));
const CAircraftIcaoCode aircraftIcao(this->m_icaoReader->getAircraftIcaoCodes().frontOrDefault()); // reader set to ignore incomplete ICAO data, so sizes must match
const CAirlineIcaoCode airlineIcao(this->m_icaoReader->getAirlineIcaoCodes().frontOrDefault()); const CAircraftIcaoCodeList aircraftIcaos = this->m_icaoReader->getAircraftIcaoCodes();
QVERIFY2(aircraftIcao.hasDesignator(), "Missing data for aircraft ICAO"); const CAirlineIcaoCodeList airlineIcaos = this->m_icaoReader->getAirlineIcaoCodes();
QVERIFY2(airlineIcao.hasValidDesignator(), "Missing data for airline ICAO"); const CAircraftIcaoCodeList aircraftIcaosValid(aircraftIcaos.findByValidDesignator());
const CAirlineIcaoCodeList airlineIcaosValid(airlineIcaos.findByValidDesignator());
const CAircraftIcaoCodeList aircraftIcaosInvalid(aircraftIcaos.findByInvalidDesignator());
const CAirlineIcaoCodeList airlineIcaosInvalid(airlineIcaos.findByInvalidDesignator());
const int aircraftValidSize = aircraftIcaosValid.size();
const int aircraftSize = aircraftIcaos.size();
const int airlineValidSize = airlineIcaosValid.size();
const int airlineSize = airlineIcaos.size();
if (!aircraftIcaosInvalid.isEmpty())
{
qDebug() << aircraftIcaosInvalid.toQString();
}
if (!airlineIcaosInvalid.isEmpty())
{
qDebug() << airlineIcaosInvalid.toQString();
}
QVERIFY2(aircraftValidSize == aircraftSize, "All aircraft ICAOs must be valid");
QVERIFY2(airlineValidSize == airlineSize, "Some airline ICAOs must be valid");
CApplication::processEventsFor(2500); // make sure events are processed CApplication::processEventsFor(2500); // make sure events are processed
} }