89 lines
3.9 KiB
C#

using PkmnLib.Dynamic.Libraries;
using PkmnLib.Dynamic.Models;
using PkmnLib.Plugin.Gen7.Scripts.Moves;
using PkmnLib.Static;
using PkmnLib.Static.Libraries;
namespace PkmnLib.Plugin.Gen7.Tests.Scripts.Moves;
public class MultiAttackTests
{
public record TestCaseData(string? ItemName, string ExpectedTypeName)
{
public override string ToString() => $"MultiAttack {ItemName ?? "None"} => {ExpectedTypeName}";
}
public static IEnumerable<Func<TestCaseData>> ChangeMoveTypeData()
{
yield return () => new TestCaseData("bug_memory", "bug");
yield return () => new TestCaseData("dark_memory", "dark");
yield return () => new TestCaseData("dragon_memory", "dragon");
yield return () => new TestCaseData("electric_memory", "electric");
yield return () => new TestCaseData("fairy_memory", "fairy");
yield return () => new TestCaseData("fighting_memory", "fighting");
yield return () => new TestCaseData("fire_memory", "fire");
yield return () => new TestCaseData("flying_memory", "flying");
yield return () => new TestCaseData("ghost_memory", "ghost");
yield return () => new TestCaseData("grass_memory", "grass");
yield return () => new TestCaseData("ground_memory", "ground");
yield return () => new TestCaseData("ice_memory", "ice");
yield return () => new TestCaseData("poison_memory", "poison");
yield return () => new TestCaseData("psychic_memory", "psychic");
yield return () => new TestCaseData("rock_memory", "rock");
yield return () => new TestCaseData("steel_memory", "steel");
yield return () => new TestCaseData("water_memory", "water");
yield return () => new TestCaseData("something_random", "normal");
yield return () => new TestCaseData(null, "normal");
}
[Test, MethodDataSource(nameof(ChangeMoveTypeData))]
public async Task ChangeMoveType_UserHoldingMemoryItem_ChangeMoveType(TestCaseData test)
{
var typeLibrary = new TypeLibrary();
typeLibrary.RegisterType("normal");
typeLibrary.RegisterType("fighting");
typeLibrary.RegisterType("flying");
typeLibrary.RegisterType("poison");
typeLibrary.RegisterType("ground");
typeLibrary.RegisterType("rock");
typeLibrary.RegisterType("bug");
typeLibrary.RegisterType("ghost");
typeLibrary.RegisterType("steel");
typeLibrary.RegisterType("fire");
typeLibrary.RegisterType("water");
typeLibrary.RegisterType("grass");
typeLibrary.RegisterType("electric");
typeLibrary.RegisterType("psychic");
typeLibrary.RegisterType("ice");
typeLibrary.RegisterType("dragon");
typeLibrary.RegisterType("dark");
typeLibrary.RegisterType("fairy");
// Arrange
var move = new Mock<IExecutingMove>();
var target = new Mock<IPokemon>();
var user = new Mock<IPokemon>();
TypeIdentifier? typeIdentifier = new TypeIdentifier(1, "Normal");
var dynamicLibrary = new Mock<IDynamicLibrary>();
var staticLibrary = new Mock<IStaticLibrary>();
var item = new Mock<IItem>();
user.Setup(u => u.Library).Returns(dynamicLibrary.Object);
dynamicLibrary.Setup(d => d.StaticLibrary).Returns(staticLibrary.Object);
staticLibrary.Setup(s => s.Types).Returns(typeLibrary);
item.Setup(i => i.Name).Returns(test.ItemName!);
move.Setup(m => m.User).Returns(user.Object);
if (test.ItemName != null)
move.Setup(m => m.User.HeldItem).Returns(item.Object);
else
move.Setup(m => m.User.HeldItem).Returns((IItem?)null);
var multiAttack = new MultiAttack();
// Act
multiAttack.ChangeMoveType(move.Object, target.Object, 0, ref typeIdentifier);
// Assert
await Assert.That(typeIdentifier!.Value.Name).IsEqualTo(test.ExpectedTypeName);
}
}