40 lines
1.3 KiB
C#
40 lines
1.3 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)
|
|
{
|
|
Assert.Ignore("Script tests postponed until parsing tests are done");
|
|
string filename = Path.GetFileName(testScriptPath);
|
|
int line = 0;
|
|
IScriptHandler handler = new SetupScriptHandler(
|
|
(msg) => {/* discard */},
|
|
World.WithStandardMap(),
|
|
Adjudicator.MovementPhase);
|
|
foreach (string input in File.ReadAllLines(testScriptPath)) {
|
|
line++;
|
|
var result = handler.HandleInput(input);
|
|
if (!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;
|
|
}
|
|
}
|
|
}
|