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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class WindowsGameSessionLifetimeTests
{
    private static readonly GameSessionTarget Missing=new(int.MaxValue,1,"missing-game.exe","launcher",false);
    [Test]public async Task APidWhichDisappearsAfterTerminationIsAlreadyExited()
    {
        var driver=new WindowsGameSessionDriver(()=>new());
        Check.That(await driver.HasExitedAsync(Missing,default));
        Check.That(await driver.HasExitedAsync(Missing with{ProcessId=0,StartedUtcTicks=0},default));
        var typed=false;try{await driver.ValidateExitAsync(Missing,default);}catch(StartupClientExitedException){typed=true;}
        Check.That(typed);
    }
    [Test]public async Task AReusedPidIsTheEndOfTheOldInstanceAndCannotBeTerminated()
    {
        using var current=Process.GetCurrentProcess();var driver=new WindowsGameSessionDriver(()=>new());
        var target=new GameSessionTarget(current.Id,current.StartTime.ToUniversalTime().Ticks,current.MainModule!.FileName,"launcher",false);
        Check.That(!await driver.HasExitedAsync(target,default));
        var previous=target with{StartedUtcTicks=target.StartedUtcTicks-1};
        Check.That(await driver.HasExitedAsync(previous,default));
        var typed=false;try{await driver.TerminateAsync(previous,default);}catch(StartupClientExitedException){typed=true;}
        Check.That(typed&&!current.HasExited);
    }
    [Test]public async Task CancellationStillWinsEvenWhenTheRequestedProcessIsGone()
    {
        using var stop=new CancellationTokenSource();stop.Cancel();var driver=new WindowsGameSessionDriver(()=>new());var cancelled=false;
        try{await driver.HasExitedAsync(Missing,stop.Token);}catch(OperationCanceledException){cancelled=true;}
        Check.That(cancelled);
    }
}