227 lines
6.0 KiB
C#
227 lines
6.0 KiB
C#
using System.Threading;
|
|
using ClassicAssist.Shared;
|
|
using ClassicAssist.Data.Abilities;
|
|
using ClassicAssist.Data.Macros.Commands;
|
|
using ClassicAssist.UO.Objects;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
namespace ClassicAssist.Tests.MacroCommands
|
|
{
|
|
[TestClass]
|
|
public class AbilitiesCommandsTest
|
|
{
|
|
private readonly AutoResetEvent _are = new AutoResetEvent( false );
|
|
|
|
[TestMethod]
|
|
public void WillOnlySetPrimaryAbilityOnce()
|
|
{
|
|
AbilitiesManager manager = AbilitiesManager.GetInstance();
|
|
|
|
Engine.Player = new PlayerMobile( 0x01 );
|
|
|
|
Engine.InternalPacketSentEvent += ExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.SetAbility( "primary", "on" );
|
|
|
|
bool result = _are.WaitOne( 5000 );
|
|
|
|
if ( !result )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
|
|
Assert.AreEqual( AbilityType.Primary, manager.Enabled );
|
|
Assert.IsTrue( manager.IsPrimaryEnabled );
|
|
|
|
Engine.InternalPacketSentEvent -= ExpectAbilityPacket;
|
|
Engine.InternalPacketSentEvent += NotExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.SetAbility( "primary", "on" );
|
|
|
|
Engine.InternalPacketSentEvent -= NotExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.ClearAbility();
|
|
|
|
Engine.Player = null;
|
|
}
|
|
|
|
[TestMethod]
|
|
public void WillTogglePrimaryAbility()
|
|
{
|
|
AbilitiesManager manager = AbilitiesManager.GetInstance();
|
|
|
|
Engine.Player = new PlayerMobile( 0x01 );
|
|
|
|
Engine.InternalPacketSentEvent += ExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.SetAbility( "primary" );
|
|
|
|
bool result = _are.WaitOne( 5000 );
|
|
|
|
if ( !result )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
|
|
Assert.AreEqual( AbilityType.Primary, manager.Enabled );
|
|
Assert.IsTrue( manager.IsPrimaryEnabled );
|
|
|
|
AbilitiesCommands.SetAbility( "primary" );
|
|
|
|
result = _are.WaitOne( 5000 );
|
|
|
|
if ( !result )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
|
|
Assert.AreEqual( AbilityType.None, manager.Enabled );
|
|
Assert.IsFalse( manager.IsPrimaryEnabled );
|
|
|
|
Engine.InternalPacketSentEvent -= ExpectAbilityPacket;
|
|
|
|
Engine.Player = null;
|
|
}
|
|
|
|
[TestMethod]
|
|
public void WillOnlySetSecondaryAbilityOnce()
|
|
{
|
|
AbilitiesManager manager = AbilitiesManager.GetInstance();
|
|
|
|
Engine.Player = new PlayerMobile( 0x01 );
|
|
|
|
Engine.InternalPacketSentEvent += ExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.SetAbility( "secondary", "on" );
|
|
|
|
bool result = _are.WaitOne( 5000 );
|
|
|
|
if ( !result )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
|
|
Assert.AreEqual( AbilityType.Secondary, manager.Enabled );
|
|
Assert.IsTrue( manager.IsSecondaryEnabled );
|
|
|
|
Engine.InternalPacketSentEvent -= ExpectAbilityPacket;
|
|
Engine.InternalPacketSentEvent += NotExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.SetAbility( "secondary", "on" );
|
|
|
|
Engine.InternalPacketSentEvent -= NotExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.ClearAbility();
|
|
|
|
Engine.Player = null;
|
|
}
|
|
|
|
[TestMethod]
|
|
public void WillToggleSecondaryAbility()
|
|
{
|
|
AbilitiesManager manager = AbilitiesManager.GetInstance();
|
|
|
|
Engine.Player = new PlayerMobile( 0x01 );
|
|
|
|
Engine.InternalPacketSentEvent += ExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.SetAbility( "secondary" );
|
|
|
|
bool result = _are.WaitOne( 5000 );
|
|
|
|
if ( !result )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
|
|
Assert.AreEqual( AbilityType.Secondary, manager.Enabled );
|
|
Assert.IsTrue( manager.IsSecondaryEnabled );
|
|
|
|
AbilitiesCommands.SetAbility( "secondary" );
|
|
|
|
result = _are.WaitOne( 5000 );
|
|
|
|
if ( !result )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
|
|
Assert.AreEqual( AbilityType.None, manager.Enabled );
|
|
Assert.IsFalse( manager.IsSecondaryEnabled );
|
|
|
|
Engine.InternalPacketSentEvent -= ExpectAbilityPacket;
|
|
|
|
Engine.Player = null;
|
|
}
|
|
|
|
[TestMethod]
|
|
public void WillClearAbilities()
|
|
{
|
|
Engine.Player = new PlayerMobile( 0x01 );
|
|
|
|
AbilitiesManager manager = AbilitiesManager.GetInstance();
|
|
|
|
Engine.InternalPacketSentEvent += ExpectAbilityPacket;
|
|
|
|
manager.Enabled = AbilityType.Primary;
|
|
|
|
AbilitiesCommands.ClearAbility();
|
|
|
|
bool result = _are.WaitOne( 5000 );
|
|
|
|
if ( !result )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
|
|
Assert.AreEqual( AbilityType.None, manager.Enabled );
|
|
|
|
manager.Enabled = AbilityType.Secondary;
|
|
|
|
AbilitiesCommands.ClearAbility();
|
|
|
|
result = _are.WaitOne( 5000 );
|
|
|
|
if ( !result )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
|
|
Assert.AreEqual( AbilityType.None, manager.Enabled );
|
|
|
|
Engine.InternalPacketSentEvent -= ExpectAbilityPacket;
|
|
|
|
Engine.Player = null;
|
|
}
|
|
|
|
[TestMethod]
|
|
public void WontSetAbilitySetOff()
|
|
{
|
|
Engine.Player = new PlayerMobile( 0x01 );
|
|
|
|
Engine.InternalPacketSentEvent += NotExpectAbilityPacket;
|
|
|
|
AbilitiesCommands.SetAbility( "primary", "off" );
|
|
|
|
Assert.AreEqual( AbilityType.None, AbilitiesManager.GetInstance().Enabled );
|
|
|
|
Engine.Player = null;
|
|
}
|
|
|
|
private static void NotExpectAbilityPacket( byte[] data, int length )
|
|
{
|
|
if ( data[0] == 0xD7 && data[8] == 0x19 )
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
}
|
|
|
|
private void ExpectAbilityPacket( byte[] data, int length )
|
|
{
|
|
if ( data[0] == 0xD7 && data[8] == 0x19 )
|
|
{
|
|
_are.Set();
|
|
}
|
|
}
|
|
}
|
|
} |