When starting at an airport, but not at parking or a runway, create
an empty AIFlightPlan, and ensure the AIManager code doesn’t choke on
empty FPs.
Add a unit-test which simulates the C172 tutorial reposition logic,
which is a little gnarly.
Capture the current behaviour of Increment/DecrementWaypoint in
AI flightplans, prior to making some simplifications. Especially try
to test the behaviour of the ‘increment and erase’ logic.
Avoid encoding test-data as strings, since this exceeds MSVC limits
on string literals, and tests don’t need to be relocatable anyway,
so we can just hard-code the source location into config.h
Overhaul how transitions are stored in FlightPlan XML, and how
they’re exposed to Nasal. Simplify the Nasal access by making
‘sid_trans’ and ‘star_trans’ writeable.
Extend the unit-tests a lot to cover this, both from C++ and also
from Nasal
As part of this, overhaul the ownership of FlightPlan delegate
factories, to make it safer (use ref-counting of the factories,
and allow the factory to customise delegate clean-up behaviour)
Where the plan does not contain departure / arrival WPs, fire the
corresponding delegate methods after load, to run the selection logic.
Also, add a ‘loaded’ delegate callback, to give delegates a chance to
perform validation and fix-up after all flight-plan loads.
Re-work how position-init and ATC-manager work together to do
parking assignment and fallback (when the parking is unavailable).
Improve the logic for the reposition case, and teach ATC-manager about
reposition explicitly.
When the parking is unavailable, explicitly fall back to best-runway
selection in finalizePosition.
Add many additional position-init tests, to cover all of this.
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.
Only the in-sim version works for now, the test-suite mode is not
implemented yet. Also the test API will evolve, but should stay close
to what CppUnit defines.
Run a test file by specifying a path to nasal-test : examples will be
added to FGData shortly.
When load a GPX route, run normal departure/arrival airport callbacks
on the delegates. (They are blocked for ‘native’ XML routes to avoid
losing SIDs and STARs)
https://sourceforge.net/p/flightgear/codetickets/2227/
To support FMS which delete ‘past’ waypoints, add some helpers:
- waypoints can be flagged as hidden, this property is exposed to Nasal
- currentWP() accepts an offset parameter, allowing FlightPlan indexing
to treat the current WP as index 0
- a ‘numRemainingWaypoints()’ function on flightPlan in Nasal, again
to range how many waypoints are left, starting from the current WP
Add some basic tests of these new features to the route-manager tests.