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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

namespace XFEEDToolBox.Test;
[TestFixture]
public sealed class SavingSceneRecoveryTests
{
    [Test]public void OnlyTheFreshOriginalSavingTransitionCanRequestRecovery()
    {
        var now=DateTimeOffset.UtcNow;
        JsonElement Frame(string state="SaveGameOnEnterLocation",string next="InGame",int pid=42,string hash="build",long age=0,bool available=true)
            =>JsonSerializer.SerializeToElement(new{state,nextState=next,processId=pid,gameSha256=hash,observedAtUnixMilliseconds=now.ToUnixTimeMilliseconds()-age,available});
        Check.That(SavingSceneRecovery.Matches(Frame(),42,"build",now));
        foreach(var other in new[]{Frame(state:"InGame"),Frame(state:"PauseMenu"),Frame(state:"MainMenu"),Frame(next:"ExitToMainMenu"),Frame(pid:43),Frame(hash:"other"),Frame(age:501),Frame(age:-1),Frame(available:false),JsonSerializer.SerializeToElement(new{state="SaveGameOnEnterLocation"})})
            Check.That(!SavingSceneRecovery.Matches(other,42,"build",now));
    }
    [Test]public void TheRecoverySignalCannotBecomeAnOrdinaryTelemetryRetry()
    {
        var error=new SavingSceneRecoveryRequiredException(new FlightTelemetryUnavailableException("missing"));
        Check.That(!NavigationRecovery.CanRetry(error,default));
        Check.That(SavingSceneRecoveryRequiredException.Present(new InvalidOperationException("journey",error)));
        Check.That(!SavingSceneRecoveryRequiredException.Present(new OperationCanceledException()));
    }
}