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));
}
}
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));
}
}