1
0
Fork 0

Double posinit test

Testcase for running posinit twice.

posinit sets various properties which it then reads, so there's
a possibility that it could write a value which causes unexpected
behaviour when run later.

Unclear if this should be a unit test or a system test, but it's
simple enough to be a unit test.
This commit is contained in:
Stuart Buchanan 2020-05-10 14:32:04 +01:00
parent f5b469aee0
commit 24c21bf876
2 changed files with 46 additions and 2 deletions

View file

@ -67,7 +67,6 @@ void PosInitTests::checkPosition(SGGeod expectedPos, float delta)
{
double dist = SGGeodesy::distanceM(globals->get_aircraft_position(),
expectedPos);
std::cerr << "Position distance " << dist << "\n";
CPPUNIT_ASSERT_MESSAGE("Unexpected Position", dist < delta);
}
@ -184,6 +183,7 @@ void PosInitTests::testAirportAndRunwayStartup()
checkClosestAirport(std::string("EDDF"));
checkPosition(FGAirport::getByIdent("EDDF")->geod(), 10000.0);
checkHeading(250.0);
}
void PosInitTests::testAirportAndParkingStartup()
@ -534,3 +534,42 @@ void PosInitTests::testCarrierStartup()
checkPosition(SGGeod::fromDeg(-122.6, 37.8), 100.0);
checkOnGround();
}
void PosInitTests::testAirportRepositionAirport()
{
{
Options* opts = Options::sharedInstance();
opts->setShouldLoadDefaultConfig(false);
const char* args[] = {"dummypath", "--airport=EDDF", "--runway=25C"};
opts->init(3, (char**) args, SGPath());
opts->processOptions();
}
std::cout << "Preset heading " << fgGetDouble("/sim/presets/heading-deg") << "\n";
CPPUNIT_ASSERT(fgGetBool("/sim/presets/airport-requested"));
CPPUNIT_ASSERT(fgGetBool("/sim/presets/runway-requested"));
checkRunway(std::string("25C"));
initPosition();
checkClosestAirport(std::string("EDDF"));
checkPosition(FGAirport::getByIdent("EDDF")->geod(), 10000.0);
checkHeading(250.0);
std::cout << "Preset heading " << fgGetDouble("/sim/presets/heading-deg") << "\n";
// Now re-position to KSFO runway
// Reset the Lat/Lon as these will be used in preference to the airport ID
fgSetDouble("/sim/presets/longitude-deg", -9990.00);
fgSetDouble("/sim/presets/latitude-deg", -9990.00);
fgSetString("/sim/presets/airport-id", "KHAF");
fgSetDouble("/sim/presets/heading-deg", 9990.00);
fgSetString("/sim/presets/runway", "12");
initPosition();
checkClosestAirport(std::string("KHAF"));
checkPosition(FGAirport::getByIdent("KHAF")->geod(), 5000.0);
checkHeading(137.0); // Lots of magnetic variation in SF Bay area!
checkOnGround();
}

View file

@ -55,13 +55,15 @@ class PosInitTests : public CppUnit::TestFixture
CPPUNIT_TEST(testLatLonStartup);
//CPPUNIT_TEST(testLatLonOffsetStartup); This is not yet supported.
// Carrier tests
// We are not able to test the carrier code thoroughly as it depends
// heavily on finalizePosition(), which requires that the carrier model
// itself be loaded into the scenegraph.
CPPUNIT_TEST(testCarrierStartup);
// Reposition tests
CPPUNIT_TEST(testAirportRepositionAirport);
CPPUNIT_TEST_SUITE_END();
public:
@ -97,6 +99,9 @@ public:
//Carrier tests
void testCarrierStartup();
//Reposition tests
void testAirportRepositionAirport();
private:
// Helper functions for tests. Return void as they use CPPUNIT_ASSERT
void checkAlt(float value);