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