using NUnit.Framework; using MultiversalDiplomacy.Model; using MultiversalDiplomacy.Script; namespace MultiversalDiplomacyTests; public class ScriptTests { static IEnumerable DatcTestCases() { foreach (var path in Directory.EnumerateFiles("Scripts/DATC")) { yield return new TestCaseData(path) .SetName($"{{m}}({Path.GetFileNameWithoutExtension(path)})"); } } [TestCaseSource(nameof(DatcTestCases))] public void Test_DATC(string testScriptPath) { string filename = Path.GetFileName(testScriptPath); int line = 0; bool expectFailure = false; IScriptHandler handler = new SetupScriptHandler( (msg) => {/* discard */}, World.WithStandardMap(), Adjudicator.MovementPhase); foreach (string input in File.ReadAllLines(testScriptPath)) { line++; // Handle test directives if (input == "#test:skip") { Assert.Ignore($"Script {filename} skipped at line {line}"); } if (input == "#test:fails") { expectFailure = true; continue; } var result = handler.HandleInput(input); if (expectFailure && result.Success) throw new AssertionException( $"Script {filename} expected line {line} to fail, but it succeeded"); if (!expectFailure && !result.Success) throw new AssertionException( $"Script {filename} error at line {line}: {result.Message}"); if (result.NextHandler is null) throw new AssertionException( $"Script {filename} quit unexpectedly at line {line}: \"{input}\""); handler = result.NextHandler; expectFailure = false; } } }