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 sealed class ManualTakeoverKeyboardPolicyTests
{
    private const uint W=0x57,S=0x53,X=0x58;
    [Test]public void WRequiresStrictlyMoreThanOneContinuousSecond()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(W,true,100,true);
        Check.Equal("",policy.Evaluate(1099,true));Check.Equal("",policy.Evaluate(1100,true));
        Check.Equal("physical-key-W-held",policy.Evaluate(1101,true));
    }
    [Test]public void SRequiresStrictlyMoreThanOneContinuousSecond()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(S,true,300,true);
        Check.Equal("",policy.Evaluate(1299,true));Check.Equal("",policy.Evaluate(1300,true));
        Check.Equal("physical-key-S-held",policy.Evaluate(1301,true));
    }
    [Test]public void XTapRemainsRequestedAfterKeyUpUntilTheScopeIsReset()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(X,true,100,true);policy.Key(X,false,101,true);
        Check.Equal("physical-key-X",policy.Evaluate(101,true));Check.Equal("physical-key-X",policy.Evaluate(10000,true));
        policy.Key(0x41,true,10001,true);Check.Equal("physical-key-X",policy.Evaluate(10002,true));
    }
    [Test]public void ShortWAndSHoldsDoNotAccumulateAcrossPresses()
    {
        foreach(var key in new[]{W,S})
        {
            var policy=new ManualTakeoverKeyboardPolicy();
            policy.Key(key,true,100,true);policy.Key(key,false,1099,true);Check.Equal("",policy.Evaluate(5000,true));
            policy.Key(key,true,6000,true);Check.Equal("",policy.Evaluate(7000,true));
            policy.Key(key,false,7000,true);Check.Equal("",policy.Evaluate(9000,true));
        }
    }
    [Test]public void SwitchingWToSStartsAnIndependentHold()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(W,true,100,true);policy.Key(W,false,900,true);policy.Key(S,true,900,true);
        Check.Equal("",policy.Evaluate(1101,true));Check.Equal("",policy.Evaluate(1900,true));
        Check.Equal("physical-key-S-held",policy.Evaluate(1901,true));
    }
    [Test]public void KeyRepeatDoesNotRestartThePhysicalHoldClock()
    {
        foreach(var key in new[]{W,S})
        {
            var policy=new ManualTakeoverKeyboardPolicy();policy.Key(key,true,100,true);
            foreach(var at in new ulong[]{400,800,1000,1100})policy.Key(key,true,at,true);
            Check.Equal("",policy.Evaluate(1100,true));Check.Equal(key==W?"physical-key-W-held":"physical-key-S-held",policy.Evaluate(1101,true));
        }
    }
    [Test]public void OtherKeysAndMouseVirtualKeysNeverRequestTakeover()
    {
        var policy=new ManualTakeoverKeyboardPolicy();
        foreach(var key in new uint[]{0x41,0x44,0x51,0x45,0x20,0x1B,0x01,0x02,0x04,0x05,0x06})
        {policy.Key(key,true,100,true);Check.Equal("",policy.Evaluate(5000,true));policy.Key(key,false,5001,true);}
        Check.Equal("",policy.Evaluate(10000,true));
    }
    [Test]public void LosingFocusDuringEvaluationClearsHoldsAndLatchedX()
    {
        foreach(var key in new[]{W,S,X})
        {
            var policy=new ManualTakeoverKeyboardPolicy();policy.Key(key,true,100,true);
            Check.Equal("",policy.Evaluate(200,false));Check.Equal("",policy.Evaluate(10000,true));
        }
    }
    [Test]public void AnEventOutsideTheGameAlsoResetsThePreviousScopeState()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(X,true,100,true);policy.Key(X,false,110,true);
        policy.Key(0x41,true,200,false);Check.Equal("",policy.Evaluate(300,true));
        policy.Key(W,true,400,true);policy.Key(0x41,true,900,false);Check.Equal("",policy.Evaluate(5000,true));
    }
    [Test]public void InjectedWSTapsOrHoldsAndXCannotTriggerThePolicy()
    {
        foreach(var key in new[]{W,S,X})
        {
            var policy=new ManualTakeoverKeyboardPolicy();policy.Key(key,true,100,true,injected:true);
            Check.Equal("",policy.Evaluate(5000,true));policy.Key(key,false,5001,true,injected:true);
            Check.Equal("",policy.Evaluate(10000,true));
        }
    }
    [Test]public void InjectedEventsCannotEraseOrRestartARealPhysicalHold()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(W,true,100,true);
        policy.Key(W,false,300,true,injected:true);policy.Key(W,true,900,true,injected:true);
        Check.Equal("",policy.Evaluate(1100,true));Check.Equal("physical-key-W-held",policy.Evaluate(1101,true));
    }
    [Test]public void ResetClearsOldXAndHeldKeysBeforeANewControlScope()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(W,true,100,true);policy.Key(S,true,100,true);
        policy.Key(X,true,200,true);policy.Key(X,false,201,true);policy.Reset();
        Check.Equal("",policy.Evaluate(10000,true));
        policy.Key(S,true,11000,true);Check.Equal("",policy.Evaluate(12000,true));Check.Equal("physical-key-S-held",policy.Evaluate(12001,true));
    }
    [Test]public void XKeyUpWithoutAnObservedPhysicalPressDoesNotCreateAnIntent()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(X,false,100,true);Check.Equal("",policy.Evaluate(10000,true));
    }
    [Test]public void AClockBeforeThePressDoesNotUnderflowIntoTakeover()
    {
        var policy=new ManualTakeoverKeyboardPolicy();policy.Key(W,true,1000,true);
        Check.Equal("",policy.Evaluate(999,true));Check.Equal("",policy.Evaluate(2000,true));
        Check.Equal("physical-key-W-held",policy.Evaluate(2001,true));
    }
}