using System.Text.Json; using XFEEDToolBox.Core.Navigation; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public class NativeDockingHandoffTests { private static JsonElement Local(double throttle,bool controllerZero=true,bool sent=true)=>JsonSerializer.SerializeToElement(new{throttle,docking=new{throttleZero=controllerZero,zeroThrottleInputSent=sent}}); [Test]public void ControllerZeroReceiptCannotHideAnActualSeventyFivePercentInput() { Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(.75))); Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(.05))); Check.That(NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0))); } [Test]public void ActualZeroRequiresBothTheControllerStateAndOriginalInputReceipt() { Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0,false))); Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0,true,false))); Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(JsonSerializer.SerializeToElement(new{docking=new{throttleZero=true,zeroThrottleInputSent=true}}))); } [Test]public void LandingPolicyReleasesTheTemporaryOverlayBeforeRequestingOriginalZero() { var at=DateTimeOffset.UtcNow; var station=new SystemNavigationTarget(7,99,"Station",SystemTargetKind.Station,77); var frame=new SystemFlightFrame{Sequence=1,ObservedAt=at,GameSha256=new('a',64),LoadoutFingerprint="ship",ShipEntity=1,InGame=true,GeometryVerified=true,SystemAddress=7,SelectedTarget=station,ReferenceWorld=7, Position=new(0,0,-6000),TargetPosition=new(0,0,0),Forward=new(0,0,1),Up=new(0,1,0),TargetDistance=6000,Speed=200,Throttle=.75, MaximumNormalSpeed=300,MaximumCruiseSpeed=1e10,BrakingAcceleration=10,TranslationAcceleration=10,LegalApproachSpeed=100,AssistAlignmentDegrees=5,Mode=LocalFlightMode.Normal,Assists=new(false,true,false), DockingAssist=NativeAssistState.Ready,DockingAssistEnabled=true,Clearance=new(77,DockingPermission.Granted,1,at,at.AddSeconds(1))}; var decision=new SystemFlightNavigator().Decide(frame,station,at); Check.That(decision.Throttle==0);Check.That(decision.Actions.HasFlag(SystemNavigationAction.EnableDockingAssist)); Check.That(decision.Actions.HasFlag(SystemNavigationAction.ReleaseFlightAxes)); } }