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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

namespace XFEEDToolBox.Test;
[TestFixture]
public sealed class NativeMenuExitSafetyTests
{
    private static readonly DateTimeOffset Now=DateTimeOffset.UtcNow;
    private static PlayerState Player=>new(){InGame=true,LoadGameAt=Now.AddMinutes(-1),CommanderId="F1",CurrentShipId=7,GameMode="Solo",CargoReliable=true,CargoCount=1200,Ships=[new(){ShipId=7,HullHealth=1}]};
    private static NativeSessionFrame Frame(string state="Pause",string? next=null)=>new(1,Now,state,next??state,[]);
    [Test]public void SafeMenusAndNormalLoadingAreNeverPermissionToTerminateAClient()
    {
        foreach(var state in new[]{"MainMenu","ContinueMenu","SetupPlaySolo","SetupPlayWithEveryone","PreMultiplayerWarnings","MultiplayerStart","MultiplayerLoad","EnteringLocation","SaveGameOnEnterLocation"})
            Check.That(!NativeMenuExitSafety.CanExitClient(Player,Player,Frame(state),Now));
        Check.That(!NativeMenuExitSafety.CanExitClient(Player,Player,Frame("Pause","MainMenu"),Now));
        Check.That(!NativeMenuExitSafety.CanExitClient(Player,Player with{LoadGameAt=Now},Frame("InGame"),Now));
        Check.That(NativeMenuExitSafety.CanExitClient(Player,Player,Frame(),Now));
    }
    [Test]public void DamageIdentityCargoThreatAndUnknownObservationsRetainTheirProtection()
    {
        foreach(var changed in new[]{Player with{CommanderId="Other"},Player with{CurrentShipId=8},Player with{GameMode="Open"},Player with{CargoCount=1199},Player with{CargoReliable=false},
            Player with{Ships=[new(){ShipId=7,HullHealth=.9}]},Player with{Navigation=Player.Navigation with{ExternalThreat=true}}})
            Check.That(!NativeMenuExitSafety.CanExitClient(Player,changed,Frame(),Now));
        Check.That(!NativeMenuExitSafety.CanExitClient(Player,Player,Frame() with{ObservedAt=Now.AddSeconds(-1)},Now));
        Check.That(!NativeMenuExitSafety.CanExitClient(Player,Player,Frame("Unknown"),Now));
        Check.That(!NativeMenuExitSafety.CanExitClient(Player,Player,Frame("Pause","Unknown"),Now));
    }
    [Test]public void WrappedProtocolAndHealthFailuresCannotAuthorizeAnAutomaticRestart()
    {
        foreach(var error in new Exception[]{new InvalidDataException("wrong menu identity"),new NotSupportedException("unverified menu"),new FlightHealthPauseException(),
            new IOException("transport wrapper",new InvalidDataException("wrong ship")),new TimeoutException("wrapper",new FlightThreatPauseException())})
            Check.That(!NativeMenuExitSafety.CanFallback(error,default));
        Check.That(NativeMenuExitSafety.CanFallback(new NativeMenuExitTimeoutException(),default));
    }
}