56 lines
1.8 KiB
C#
56 lines
1.8 KiB
C#
using NUnit.Framework;
|
|
|
|
using MultiversalDiplomacy.Model;
|
|
using MultiversalDiplomacy.Script;
|
|
|
|
namespace MultiversalDiplomacyTests;
|
|
|
|
public class ScriptTests
|
|
{
|
|
static IEnumerable<TestCaseData> 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;
|
|
}
|
|
}
|
|
}
|