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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

namespace XFEEDToolBox.Test;

[TestFixture]
public class SessionMaintenanceExitTests
{
    [Test] public async Task AClosedPipeIsHarmlessOnlyAfterConfirmedMenuExit()
    {
        await SessionMaintenanceExit.ReleaseAfterExitAsync(()=>throw new InvalidDataException("Pipe closed with process"),()=>true);
        var refused=false;
        try{await SessionMaintenanceExit.ReleaseAfterExitAsync(()=>throw new InvalidDataException("Pipe closed before exit"),()=>false);}
        catch(InvalidDataException){refused=true;}
        Check.That(refused);
    }
    [Test] public void OnlyFreshStableOriginalMainMenuPermitsMaintenanceExit()
    {
        var now=DateTimeOffset.UtcNow;var frame=new NativeSessionFrame(1,now,"MainMenu","MainMenu",[]);
        SessionMaintenanceExit.RequireMainMenu(frame,now);
        foreach(var state in new[]{"InGame","Pause","ExitOptions","PrePauseMenu","SetupPlaySolo"})
            Check.Throws<InvalidOperationException>(()=>SessionMaintenanceExit.RequireMainMenu(frame with{State=state,NextState=state},now));
        Check.Throws<InvalidOperationException>(()=>SessionMaintenanceExit.RequireMainMenu(frame with{NextState="ContinueMenu"},now));
        Check.Throws<InvalidOperationException>(()=>SessionMaintenanceExit.RequireMainMenu(frame with{Sequence=0},now));
        Check.Throws<InvalidOperationException>(()=>SessionMaintenanceExit.RequireMainMenu(frame with{ObservedAt=now.AddMilliseconds(-351)},now));
        Check.Throws<InvalidOperationException>(()=>SessionMaintenanceExit.RequireMainMenu(frame with{ObservedAt=now.AddMilliseconds(101)},now));
    }
}