1
0
Fork 0

Add tests for isRoute FlightPlans

This commit is contained in:
James Turner 2022-01-14 15:19:37 +00:00
parent 9023a09739
commit 7ac03debf4
2 changed files with 163 additions and 3 deletions

View file

@ -255,9 +255,9 @@ void FlightplanTests::tearDown()
static FlightPlanRef makeTestFP(const std::string& depICAO, const std::string& depRunway,
const std::string& destICAO, const std::string& destRunway,
const std::string& waypoints)
const std::string& waypoints, bool asRoute = false)
{
FlightPlanRef f = FlightPlan::create();
FlightPlanRef f = asRoute ? FlightPlan::createRoute() : FlightPlan::create();
FGTestApi::setUp::populateFPWithoutNasal(f, depICAO, depRunway, destICAO, destRunway, waypoints);
return f;
}
@ -468,6 +468,71 @@ void FlightplanTests::testBasicAirways()
CPPUNIT_ASSERT_EQUAL("HASTE"s, path.at(1)->ident());
CPPUNIT_ASSERT_EQUAL("DEWIT"s, path.at(2)->ident());
CPPUNIT_ASSERT_EQUAL("FNT"s, path.at(3)->ident());
f->insertWayptsAtIndex(path, 0);
CPPUNIT_ASSERT_EQUAL(4, static_cast<int>(f->numLegs()));
CPPUNIT_ASSERT_EQUAL("DEWIT"s, f->legAtIndex(2)->waypoint()->ident());
CPPUNIT_ASSERT_EQUAL(static_cast<RouteBase*>(awy), f->legAtIndex(2)->waypoint()->owner());
}
void FlightplanTests::testViaInsertIntoFP()
{
Airway* awy = Airway::findByIdent("J547"s, Airway::HighLevel);
CPPUNIT_ASSERT_EQUAL(awy->ident(), "J547"s);
FGAirportRef kord = FGAirport::findByIdent("KORD"s);
FlightPlanRef f = FlightPlan::create();
f->setDeparture(kord);
CPPUNIT_ASSERT(awy->findEnroute("KITOK"s));
CPPUNIT_ASSERT(awy->findEnroute("LESUB"s));
auto wpt = awy->findEnroute("FNT"s);
CPPUNIT_ASSERT(wpt);
auto wptKUBBS = f->waypointFromString("KUBBS"s);
auto wptFNT = f->waypointFromString("FNT"s);
f->insertWayptAtIndex(wptKUBBS, -1);
CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(f->numLegs()));
Via* via = new Via(f, awy, wptFNT->source());
f->insertWayptAtIndex(via, -1);
CPPUNIT_ASSERT_EQUAL(5, static_cast<int>(f->numLegs()));
CPPUNIT_ASSERT_EQUAL("PMM"s, f->legAtIndex(1)->waypoint()->ident());
CPPUNIT_ASSERT_EQUAL(static_cast<RouteBase*>(awy), f->legAtIndex(1)->waypoint()->owner());
}
void FlightplanTests::testViaInsertIntoRoute()
{
Airway* awy = Airway::findByIdent("J547"s, Airway::HighLevel);
CPPUNIT_ASSERT_EQUAL(awy->ident(), "J547"s);
FGAirportRef kord = FGAirport::findByIdent("KORD"s);
FlightPlanRef f = FlightPlan::createRoute();
f->setDeparture(kord);
CPPUNIT_ASSERT(awy->findEnroute("KITOK"s));
CPPUNIT_ASSERT(awy->findEnroute("LESUB"s));
auto wpt = awy->findEnroute("FNT"s);
CPPUNIT_ASSERT(wpt);
auto wptKUBBS = f->waypointFromString("KUBBS"s);
auto wptFNT = f->waypointFromString("FNT"s);
f->insertWayptAtIndex(wptKUBBS, -1);
CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(f->numLegs()));
Via* via = new Via(f, awy, wptFNT->source());
f->insertWayptAtIndex(via, -1);
CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(f->numLegs()));
// clone and convert to active flight-plan; Vias
// should be expanded
FlightPlanRef activeFP = f->clone("ACT", true);
CPPUNIT_ASSERT_EQUAL(5, static_cast<int>(activeFP->numLegs()));
CPPUNIT_ASSERT_EQUAL("PMM"s, activeFP->legAtIndex(1)->waypoint()->ident());
CPPUNIT_ASSERT_EQUAL(static_cast<RouteBase*>(awy), activeFP->legAtIndex(1)->waypoint()->owner());
}
void FlightplanTests::testAirwayNetworkRoute()
@ -981,6 +1046,74 @@ void FlightplanTests::loadFGFPWithProcedureIdents()
CPPUNIT_ASSERT_EQUAL(f->starTransition()->ident(), "KUBAT"s);
}
void FlightplanTests::loadFGFPAsRoute()
{
static_factory = std::make_shared<TestFPDelegateFactory>();
FlightPlan::registerDelegateFactory(static_factory);
FlightPlanRef f = FlightPlan::createRoute();
SGPath fgfpPath = simgear::Dir::current().path() / "test_fgfp_as_route.fgfp"s;
{
sg_ofstream s(fgfpPath);
s << R"(<?xml version="1.0" encoding="UTF-8"?>
<PropertyList>
<version type="int">2</version>
<is-route>true</is-route>
<departure>
<airport type="string">EGLL</airport>
<runway type="string">27R</runway>
</departure>
<destination>
<airport type="string">EDDS</airport>
</destination>
<route>
<wp n="1">
<type type="string">navaid</type>
<ident type="string">BIG</ident>
<lat>51.33087500</lat>
<lon>000.03481100</lon>
</wp>
<wp n="2">
<type type="string">navaid</type>
<ident type="string">CLN</ident>
<lat> 51.84841700</lat>
<lon>001.14761100</lon>
</wp>
<wp n="3">
<type type="string">via</type>
<airway type="string">L620</airway>
<level>1</level>
<to type="string">BASNO</to>
<lat>52.114586</lat>
<lon>2.487947</lon>
</wp>
</route>
</PropertyList>
)";
}
auto ourDelegate = TestFPDelegateFactory::delegateForPlan(f);
CPPUNIT_ASSERT(!ourDelegate->didLoad);
CPPUNIT_ASSERT(f->load(fgfpPath));
CPPUNIT_ASSERT(f->isRoute());
CPPUNIT_ASSERT(ourDelegate->didLoad);
CPPUNIT_ASSERT(ourDelegate->sawArrivalChange);
CPPUNIT_ASSERT(ourDelegate->sawDepartureChange);
CPPUNIT_ASSERT_EQUAL(5, f->numLegs());
CPPUNIT_ASSERT_EQUAL("via"s, f->legAtIndex(3)->waypoint()->type());
auto actFP = f->clone("ACT", true);
CPPUNIT_ASSERT(!actFP->isRoute());
CPPUNIT_ASSERT(!actFP->isActive());
// check Via was expanded
CPPUNIT_ASSERT_EQUAL(8, actFP->numLegs());
}
void FlightplanTests::testCloningBasic()
{
FlightPlanRef fp1 = makeTestFP("EGCC"s, "23L"s, "EHAM"s, "24"s,
@ -1148,3 +1281,22 @@ void FlightplanTests::testBug2616()
fp1->activate();
CPPUNIT_ASSERT(fp1->isActive());
}
void FlightplanTests::testRoute()
{
FlightPlanRef fp1 = makeTestFP("EGKK"s, "08R"s, "EHAM"s, "18R"s,
"CLN VIA-L620/REDFA SPY"s, true);
CPPUNIT_ASSERT(fp1->isRoute());
CPPUNIT_ASSERT_EQUAL("via"s, fp1->legAtIndex(2)->waypoint()->type());
// activating a route should fail
fp1->activate();
CPPUNIT_ASSERT(!fp1->isActive());
// setting index should still work
fp1->setCurrentIndex(2);
CPPUNIT_ASSERT_EQUAL(2, fp1->currentIndex());
CPPUNIT_ASSERT(!fp1->isActive());
}

View file

@ -54,7 +54,11 @@ class FlightplanTests : public CppUnit::TestFixture
CPPUNIT_TEST(testCloningFGFP);
CPPUNIT_TEST(testCloningProcedures);
CPPUNIT_TEST(testBug2616);
CPPUNIT_TEST(testRoute);
CPPUNIT_TEST(testViaInsertIntoFP);
CPPUNIT_TEST(testViaInsertIntoRoute);
CPPUNIT_TEST(loadFGFPAsRoute);
// CPPUNIT_TEST(testParseICAORoute);
// CPPUNIT_TEST(testParseICANLowLevelRoute);
CPPUNIT_TEST_SUITE_END();
@ -92,6 +96,10 @@ public:
void testCloningFGFP();
void testCloningProcedures();
void testBug2616();
void testRoute();
void testViaInsertIntoFP();
void testViaInsertIntoRoute();
void loadFGFPAsRoute();
};
#endif // FG_FLIGHTPLAN_UNIT_TESTS_HXX