XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public class NativeDockingObservationTests
{
    [Test]public void PhysicalDockingAndAnOriginalDutyRemainObservationOnlyWhenTheGrantHasTransitioned()
    {
        using var complete=System.Text.Json.JsonDocument.Parse("{\"verified\":true,\"clearanceGranted\":false,\"nativeDutyActive\":false,\"nativeLaunchActive\":false,\"nativeLaunchRequested\":false}");
        Check.That(NativeSystemFlightObservation.ObserveOriginalArrival(complete.RootElement,5));
        Check.That(NativeSystemFlightObservation.ObserveOriginalArrival(complete.RootElement,7));
        Check.That(!NativeSystemFlightObservation.ObserveOriginalArrival(complete.RootElement,3));
        using var active=System.Text.Json.JsonDocument.Parse("{\"verified\":true,\"clearanceGranted\":false,\"nativeDutyActive\":true}");
        Check.That(NativeSystemFlightObservation.ObserveOriginalArrival(active.RootElement,4));
        using var unverified=System.Text.Json.JsonDocument.Parse("{\"verified\":false,\"nativeDutyActive\":true}");
        Check.That(!NativeSystemFlightObservation.ObserveOriginalArrival(unverified.RootElement,5));
        using var launch=System.Text.Json.JsonDocument.Parse("{\"verified\":true,\"nativeDutyActive\":true,\"nativeLaunchActive\":true}");
        Check.That(!NativeSystemFlightObservation.ObserveOriginalArrival(launch.RootElement,5));
    }
    [Test] public void LaunchCancellationIncludesRequestsWhichHaveNotStartedTheirNativeDuty()
    {
        using var pending=System.Text.Json.JsonDocument.Parse("{\"nativeLaunchActive\":false,\"nativeLaunchRequested\":true}");
        using var active=System.Text.Json.JsonDocument.Parse("{\"nativeLaunchActive\":true,\"nativeLaunchRequested\":false}");
        using var complete=System.Text.Json.JsonDocument.Parse("{\"nativeLaunchActive\":false,\"nativeLaunchRequested\":false}");
        Check.That(NativeSystemFlightObservation.LaunchNeedsCancellation(pending.RootElement));
        Check.That(NativeSystemFlightObservation.LaunchNeedsCancellation(active.RootElement));
        Check.That(!NativeSystemFlightObservation.LaunchNeedsCancellation(complete.RootElement));
    }
    [Test] public void OriginalAssistDropRetainsAiOwnershipUntilItsDutyActuallyEnds()
    {
        Check.Equal(NativeAssistState.Engaged,NativeSystemFlightObservation.CruiseAssist(true,false,true,true,true));
        Check.Equal(LocalFlightMode.Transition,NativeSystemFlightObservation.Mode(false,true,5));
        Check.Equal(LocalFlightMode.Supercruise,NativeSystemFlightObservation.Mode(false,true,2));
        Check.Equal(LocalFlightMode.Transition,NativeSystemFlightObservation.Mode(false,false,2,true));
        Check.Equal(LocalFlightMode.Docked,NativeSystemFlightObservation.Mode(true,false,2,true));
        Check.Equal(NativeAssistState.Requested,NativeSystemFlightObservation.CruiseAssist(true,true,false,true,true));
        Check.Equal(NativeAssistState.Ready,NativeSystemFlightObservation.CruiseAssist(true,false,false,true,false));
    }
    [Test] public void OriginalDockingActivityEventIsOrderedAndDoesNotSurviveAnotherSession()
    {
        var projector=new NavigationProjector();var at=DateTimeOffset.UtcNow;
        void Apply(string name,int seconds,string track="")=>projector.Apply(Check.Event(new{timestamp=at.AddSeconds(seconds),@event=name,MusicTrack=track}));
        Apply("LoadGame",0);Apply("Music",2,"DockingComputer");Check.That(projector.State.DockingComputerActive);
        Apply("Music",1,"Exploration");Check.That(projector.State.DockingComputerActive);
        Apply("Music",3,"Exploration");Check.That(!projector.State.DockingComputerActive);
        Apply("Music",4,"DockingComputer");Apply("LoadGame",5);Check.That(!projector.State.DockingComputerActive);
        Apply("Music",4,"DockingComputer");Check.That(!projector.State.DockingComputerActive);
    }
    [Test] public void LaunchCompletionRequiresAnActualUndockedEventAndIgnoresOlderEvents()
    {
        var projector=new NavigationProjector();var at=DateTimeOffset.UtcNow;
        projector.Apply(Check.Event(new{timestamp=at,@event="DockingGranted"}));Check.That(projector.State.UndockedAt is null);
        projector.Apply(Check.Event(new{timestamp=at,@event="Undocked"}));projector.Apply(Check.Event(new{timestamp=at.AddSeconds(-1),@event="Undocked"}));
        Check.Equal(at,projector.State.UndockedAt);
    }
}