using PkmnLib.Dynamic.Libraries;
using PkmnLib.Dynamic.ScriptHandling;
using PkmnLib.Static.Moves;
using PkmnLib.Tests.Integration;
namespace PkmnLib.Tests.DataTests;
public class MoveDataTests
{
public record TestCaseData(IDynamicLibrary Library, IMoveData Move)
{
///
public override string ToString() => Move.Name + " has valid scripts";
}
public static IEnumerable AllMovesHaveValidScriptsData()
{
var library = LibraryHelpers.LoadLibrary();
var moveLibrary = library.StaticLibrary.Moves;
foreach (var move in moveLibrary)
{
if (move.SecondaryEffect == null)
continue;
yield return new TestCaseData(library, move);
}
}
[Test, MethodDataSource(nameof(AllMovesHaveValidScriptsData))]
public async Task AllMoveEffectsHaveValidScripts(TestCaseData test)
{
if (test.Move.SecondaryEffect == null)
return;
var scriptName = test.Move.SecondaryEffect.Name;
try
{
await Assert.That(test.Library.ScriptResolver.TryResolve(ScriptCategory.Move, scriptName,
test.Move.SecondaryEffect.Parameters, out var script)).IsTrue();
}
catch (Exception e)
{
throw new AggregateException($"Failed to resolve script for move {test.Move.Name} with effect {scriptName}",
e);
}
}
}