Enable suppressing adjudicator output in tests
This commit is contained in:
parent
9f52c78b40
commit
f18147f666
|
@ -1,5 +1,4 @@
|
||||||
using System.Text.RegularExpressions;
|
using MultiversalDiplomacy.Adjudicate;
|
||||||
|
|
||||||
using MultiversalDiplomacy.Model;
|
using MultiversalDiplomacy.Model;
|
||||||
|
|
||||||
namespace MultiversalDiplomacy.Script;
|
namespace MultiversalDiplomacy.Script;
|
||||||
|
@ -7,6 +6,7 @@ namespace MultiversalDiplomacy.Script;
|
||||||
public class AdjudicationQueryScriptHandler(
|
public class AdjudicationQueryScriptHandler(
|
||||||
Action<string> WriteLine,
|
Action<string> WriteLine,
|
||||||
World world,
|
World world,
|
||||||
|
IPhaseAdjudicator adjudicator,
|
||||||
bool strict = false)
|
bool strict = false)
|
||||||
: IScriptHandler
|
: IScriptHandler
|
||||||
{
|
{
|
||||||
|
@ -32,7 +32,7 @@ public class AdjudicationQueryScriptHandler(
|
||||||
{
|
{
|
||||||
case "---":
|
case "---":
|
||||||
WriteLine("Ready for orders");
|
WriteLine("Ready for orders");
|
||||||
return new GameScriptHandler(WriteLine, World, Strict);
|
return new GameScriptHandler(WriteLine, World, adjudicator, Strict);
|
||||||
|
|
||||||
case "assert" when args.Length == 1:
|
case "assert" when args.Length == 1:
|
||||||
WriteLine("Usage:");
|
WriteLine("Usage:");
|
||||||
|
|
|
@ -6,7 +6,12 @@ using MultiversalDiplomacy.Orders;
|
||||||
|
|
||||||
namespace MultiversalDiplomacy.Script;
|
namespace MultiversalDiplomacy.Script;
|
||||||
|
|
||||||
public class GameScriptHandler(Action<string> WriteLine, World world, bool strict = false) : IScriptHandler
|
public class GameScriptHandler(
|
||||||
|
Action<string> WriteLine,
|
||||||
|
World world,
|
||||||
|
IPhaseAdjudicator adjudicator,
|
||||||
|
bool strict = false)
|
||||||
|
: IScriptHandler
|
||||||
{
|
{
|
||||||
public string Prompt => "orders> ";
|
public string Prompt => "orders> ";
|
||||||
|
|
||||||
|
@ -32,7 +37,6 @@ public class GameScriptHandler(Action<string> WriteLine, World world, bool stric
|
||||||
// "---" submits the orders and allows queries about the outcome
|
// "---" submits the orders and allows queries about the outcome
|
||||||
if (input == "---") {
|
if (input == "---") {
|
||||||
WriteLine("Submitting orders for adjudication");
|
WriteLine("Submitting orders for adjudication");
|
||||||
var adjudicator = MovementPhaseAdjudicator.Instance;
|
|
||||||
var validation = adjudicator.ValidateOrders(World, Orders);
|
var validation = adjudicator.ValidateOrders(World, Orders);
|
||||||
var validOrders = validation
|
var validOrders = validation
|
||||||
.Where(v => v.Valid)
|
.Where(v => v.Valid)
|
||||||
|
@ -40,14 +44,13 @@ public class GameScriptHandler(Action<string> WriteLine, World world, bool stric
|
||||||
.ToList();
|
.ToList();
|
||||||
var adjudication = adjudicator.AdjudicateOrders(World, validOrders);
|
var adjudication = adjudicator.AdjudicateOrders(World, validOrders);
|
||||||
var newWorld = adjudicator.UpdateWorld(World, adjudication);
|
var newWorld = adjudicator.UpdateWorld(World, adjudication);
|
||||||
return new AdjudicationQueryScriptHandler(WriteLine, newWorld, Strict);
|
return new AdjudicationQueryScriptHandler(WriteLine, newWorld, adjudicator, Strict);
|
||||||
}
|
}
|
||||||
|
|
||||||
// "===" submits the orders and moves immediately to taking the next set of orders
|
// "===" submits the orders and moves immediately to taking the next set of orders
|
||||||
// i.e. it's "---" twice
|
// i.e. it's "---" twice
|
||||||
if (input == "===") {
|
if (input == "===") {
|
||||||
WriteLine("Submitting orders for adjudication");
|
WriteLine("Submitting orders for adjudication");
|
||||||
var adjudicator = MovementPhaseAdjudicator.Instance;
|
|
||||||
var validation = adjudicator.ValidateOrders(World, Orders);
|
var validation = adjudicator.ValidateOrders(World, Orders);
|
||||||
var validOrders = validation
|
var validOrders = validation
|
||||||
.Where(v => v.Valid)
|
.Where(v => v.Valid)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
using MultiversalDiplomacy.Adjudicate;
|
||||||
using MultiversalDiplomacy.Model;
|
using MultiversalDiplomacy.Model;
|
||||||
|
|
||||||
namespace MultiversalDiplomacy.Script;
|
namespace MultiversalDiplomacy.Script;
|
||||||
|
@ -49,7 +50,7 @@ public class ReplScriptHandler(Action<string> WriteLine) : IScriptHandler
|
||||||
}
|
}
|
||||||
World world = World.WithMap(Map.FromType(map));
|
World world = World.WithMap(Map.FromType(map));
|
||||||
WriteLine($"Created a new {map} game");
|
WriteLine($"Created a new {map} game");
|
||||||
return new SetupScriptHandler(WriteLine, world);
|
return new SetupScriptHandler(WriteLine, world, MovementPhaseAdjudicator.Instance);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
WriteLine($"Unrecognized command: \"{command}\"");
|
WriteLine($"Unrecognized command: \"{command}\"");
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
using MultiversalDiplomacy.Adjudicate;
|
||||||
using MultiversalDiplomacy.Model;
|
using MultiversalDiplomacy.Model;
|
||||||
|
|
||||||
namespace MultiversalDiplomacy.Script;
|
namespace MultiversalDiplomacy.Script;
|
||||||
|
@ -5,7 +6,12 @@ namespace MultiversalDiplomacy.Script;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A script handler for modifying a game before it begins.
|
/// A script handler for modifying a game before it begins.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SetupScriptHandler(Action<string> WriteLine, World world, bool strict = false) : IScriptHandler
|
public class SetupScriptHandler(
|
||||||
|
Action<string> WriteLine,
|
||||||
|
World world,
|
||||||
|
IPhaseAdjudicator adjudicator,
|
||||||
|
bool strict = false)
|
||||||
|
: IScriptHandler
|
||||||
{
|
{
|
||||||
public string Prompt => "setup> ";
|
public string Prompt => "setup> ";
|
||||||
|
|
||||||
|
@ -41,7 +47,7 @@ public class SetupScriptHandler(Action<string> WriteLine, World world, bool stri
|
||||||
case "---":
|
case "---":
|
||||||
WriteLine("Starting game");
|
WriteLine("Starting game");
|
||||||
WriteLine("Ready for orders");
|
WriteLine("Ready for orders");
|
||||||
return new GameScriptHandler(WriteLine, World, Strict);
|
return new GameScriptHandler(WriteLine, World, adjudicator, Strict);
|
||||||
|
|
||||||
case "list" when args.Length == 1:
|
case "list" when args.Length == 1:
|
||||||
WriteLine("usage:");
|
WriteLine("usage:");
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
using MultiversalDiplomacy.Adjudicate;
|
||||||
|
|
||||||
|
namespace MultiversalDiplomacyTests;
|
||||||
|
|
||||||
|
public static class Adjudicator
|
||||||
|
{
|
||||||
|
public static MovementPhaseAdjudicator MovementPhase { get; } = new MovementPhaseAdjudicator(NullLogger.Instance);
|
||||||
|
}
|
|
@ -3,6 +3,8 @@ using MultiversalDiplomacy.Model;
|
||||||
using MultiversalDiplomacy.Orders;
|
using MultiversalDiplomacy.Orders;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
using static MultiversalDiplomacyTests.Adjudicator;
|
||||||
|
|
||||||
namespace MultiversalDiplomacyTests;
|
namespace MultiversalDiplomacyTests;
|
||||||
|
|
||||||
public class DATC_A
|
public class DATC_A
|
||||||
|
@ -17,7 +19,7 @@ public class DATC_A
|
||||||
.Fleet("North Sea").MovesTo("Picardy").GetReference(out var order);
|
.Fleet("North Sea").MovesTo("Picardy").GetReference(out var order);
|
||||||
|
|
||||||
// Order should fail.
|
// Order should fail.
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(order, Is.Invalid(ValidationReason.UnreachableDestination));
|
Assert.That(order, Is.Invalid(ValidationReason.UnreachableDestination));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +61,7 @@ public class DATC_A
|
||||||
.Fleet("Kiel").MovesTo("Kiel").GetReference(out var order);
|
.Fleet("Kiel").MovesTo("Kiel").GetReference(out var order);
|
||||||
|
|
||||||
// Program should not crash.
|
// Program should not crash.
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(order, Is.Invalid(ValidationReason.DestinationMatchesOrigin));
|
Assert.That(order, Is.Invalid(ValidationReason.DestinationMatchesOrigin));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,14 +79,14 @@ public class DATC_A
|
||||||
.Army("Wales").Supports.Fleet("London").MoveTo("Yorkshire");
|
.Army("Wales").Supports.Fleet("London").MoveTo("Yorkshire");
|
||||||
|
|
||||||
// The move of the army in Yorkshire is illegal. This makes the support of Liverpool also illegal.
|
// The move of the army in Yorkshire is illegal. This makes the support of Liverpool also illegal.
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(orderLon, Is.Valid);
|
Assert.That(orderLon, Is.Valid);
|
||||||
Assert.That(orderNth, Is.Invalid(ValidationReason.DestinationMatchesOrigin));
|
Assert.That(orderNth, Is.Invalid(ValidationReason.DestinationMatchesOrigin));
|
||||||
Assert.That(orderYor, Is.Invalid(ValidationReason.DestinationMatchesOrigin));
|
Assert.That(orderYor, Is.Invalid(ValidationReason.DestinationMatchesOrigin));
|
||||||
var orderYorRepl = orderYor.GetReplacementReference<HoldOrder>();
|
var orderYorRepl = orderYor.GetReplacementReference<HoldOrder>();
|
||||||
|
|
||||||
// Without the support, the Germans have a stronger force. The army in London dislodges the army in Yorkshire.
|
// Without the support, the Germans have a stronger force. The army in London dislodges the army in Yorkshire.
|
||||||
setup.AdjudicateOrders(MovementPhaseAdjudicator.Instance);
|
setup.AdjudicateOrders(MovementPhase);
|
||||||
Assert.That(orderLon, Is.Victorious);
|
Assert.That(orderLon, Is.Victorious);
|
||||||
Assert.That(orderYorRepl, Is.Dislodged);
|
Assert.That(orderYorRepl, Is.Dislodged);
|
||||||
}
|
}
|
||||||
|
@ -98,7 +100,7 @@ public class DATC_A
|
||||||
.Fleet("London", powerName: "England").MovesTo("North Sea").GetReference(out var order);
|
.Fleet("London", powerName: "England").MovesTo("North Sea").GetReference(out var order);
|
||||||
|
|
||||||
// Order should fail.
|
// Order should fail.
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(order, Is.Invalid(ValidationReason.InvalidUnitForPower));
|
Assert.That(order, Is.Invalid(ValidationReason.InvalidUnitForPower));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +114,7 @@ public class DATC_A
|
||||||
.Fleet("North Sea").Convoys.Army("London").To("Belgium").GetReference(out var order);
|
.Fleet("North Sea").Convoys.Army("London").To("Belgium").GetReference(out var order);
|
||||||
|
|
||||||
// Move from London to Belgium should fail.
|
// Move from London to Belgium should fail.
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(order, Is.Invalid(ValidationReason.InvalidOrderTypeForUnit));
|
Assert.That(order, Is.Invalid(ValidationReason.InvalidOrderTypeForUnit));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,12 +129,12 @@ public class DATC_A
|
||||||
["Austria"]
|
["Austria"]
|
||||||
.Fleet("Trieste").Supports.Fleet("Trieste").Hold().GetReference(out var orderTri);
|
.Fleet("Trieste").Supports.Fleet("Trieste").Hold().GetReference(out var orderTri);
|
||||||
|
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(orderTri, Is.Invalid(ValidationReason.NoSelfSupport));
|
Assert.That(orderTri, Is.Invalid(ValidationReason.NoSelfSupport));
|
||||||
var orderTriRepl = orderTri.GetReplacementReference<HoldOrder>();
|
var orderTriRepl = orderTri.GetReplacementReference<HoldOrder>();
|
||||||
|
|
||||||
// The army in Trieste should be dislodged.
|
// The army in Trieste should be dislodged.
|
||||||
setup.AdjudicateOrders(MovementPhaseAdjudicator.Instance);
|
setup.AdjudicateOrders(MovementPhase);
|
||||||
Assert.That(orderTriRepl, Is.Dislodged);
|
Assert.That(orderTriRepl, Is.Dislodged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +147,7 @@ public class DATC_A
|
||||||
.Fleet("Rome").MovesTo("Venice").GetReference(out var order);
|
.Fleet("Rome").MovesTo("Venice").GetReference(out var order);
|
||||||
|
|
||||||
// Move fails. An army can go from Rome to Venice, but a fleet can not.
|
// Move fails. An army can go from Rome to Venice, but a fleet can not.
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(order, Is.Invalid(ValidationReason.UnreachableDestination));
|
Assert.That(order, Is.Invalid(ValidationReason.UnreachableDestination));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,13 +162,13 @@ public class DATC_A
|
||||||
.Army("Apulia").MovesTo("Venice")
|
.Army("Apulia").MovesTo("Venice")
|
||||||
.Fleet("Rome").Supports.Army("Apulia").MoveTo("Venice").GetReference(out var orderRom);
|
.Fleet("Rome").Supports.Army("Apulia").MoveTo("Venice").GetReference(out var orderRom);
|
||||||
|
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
|
|
||||||
// The support of Rome is illegal, because Venice can not be reached from Rome by a fleet.
|
// The support of Rome is illegal, because Venice can not be reached from Rome by a fleet.
|
||||||
Assert.That(orderRom, Is.Invalid(ValidationReason.UnreachableSupport));
|
Assert.That(orderRom, Is.Invalid(ValidationReason.UnreachableSupport));
|
||||||
|
|
||||||
// Venice is not dislodged.
|
// Venice is not dislodged.
|
||||||
setup.AdjudicateOrders(MovementPhaseAdjudicator.Instance);
|
setup.AdjudicateOrders(MovementPhase);
|
||||||
Assert.That(orderVen, Is.NotDislodged);
|
Assert.That(orderVen, Is.NotDislodged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,12 +182,12 @@ public class DATC_A
|
||||||
["Italy"]
|
["Italy"]
|
||||||
.Army("Venice").MovesTo("Tyrolia").GetReference(out var orderVen);
|
.Army("Venice").MovesTo("Tyrolia").GetReference(out var orderVen);
|
||||||
|
|
||||||
setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(orderVie, Is.Valid);
|
Assert.That(orderVie, Is.Valid);
|
||||||
Assert.That(orderVen, Is.Valid);
|
Assert.That(orderVen, Is.Valid);
|
||||||
|
|
||||||
// The two units bounce.
|
// The two units bounce.
|
||||||
var adjudications = setup.AdjudicateOrders(MovementPhaseAdjudicator.Instance);
|
var adjudications = setup.AdjudicateOrders(MovementPhase);
|
||||||
Assert.That(orderVie, Is.Repelled);
|
Assert.That(orderVie, Is.Repelled);
|
||||||
Assert.That(orderVie, Is.NotDislodged);
|
Assert.That(orderVie, Is.NotDislodged);
|
||||||
Assert.That(orderVen, Is.Repelled);
|
Assert.That(orderVen, Is.Repelled);
|
||||||
|
@ -204,12 +206,12 @@ public class DATC_A
|
||||||
["Italy"]
|
["Italy"]
|
||||||
.Army("Venice").MovesTo("Tyrolia").GetReference(out var orderVen);
|
.Army("Venice").MovesTo("Tyrolia").GetReference(out var orderVen);
|
||||||
|
|
||||||
var validations = setup.ValidateOrders(MovementPhaseAdjudicator.Instance);
|
var validations = setup.ValidateOrders(MovementPhase);
|
||||||
Assert.That(orderVie, Is.Valid);
|
Assert.That(orderVie, Is.Valid);
|
||||||
Assert.That(orderMun, Is.Valid);
|
Assert.That(orderMun, Is.Valid);
|
||||||
Assert.That(orderVen, Is.Valid);
|
Assert.That(orderVen, Is.Valid);
|
||||||
|
|
||||||
var adjudications = setup.AdjudicateOrders(MovementPhaseAdjudicator.Instance);
|
var adjudications = setup.AdjudicateOrders(MovementPhase);
|
||||||
// The three units bounce.
|
// The three units bounce.
|
||||||
Assert.That(orderVie, Is.Repelled);
|
Assert.That(orderVie, Is.Repelled);
|
||||||
Assert.That(orderVie, Is.NotDislodged);
|
Assert.That(orderVie, Is.NotDislodged);
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
using MultiversalDiplomacy.Adjudicate;
|
using MultiversalDiplomacy.Adjudicate;
|
||||||
using MultiversalDiplomacy.Adjudicate.Decision;
|
|
||||||
using MultiversalDiplomacy.Model;
|
using MultiversalDiplomacy.Model;
|
||||||
|
|
||||||
|
using static MultiversalDiplomacyTests.Adjudicator;
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace MultiversalDiplomacyTests;
|
namespace MultiversalDiplomacyTests;
|
||||||
|
@ -11,7 +12,7 @@ public class TimeTravelTest
|
||||||
[Test]
|
[Test]
|
||||||
public void MDATC_3_A_1_MoveIntoOwnPastForksTimeline()
|
public void MDATC_3_A_1_MoveIntoOwnPastForksTimeline()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
|
|
||||||
// Hold to move into the future, then move back into the past.
|
// Hold to move into the future, then move back into the past.
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
|
@ -57,7 +58,7 @@ public class TimeTravelTest
|
||||||
[Test]
|
[Test]
|
||||||
public void MDATC_3_A_2_SupportToRepelledPastMoveForksTimeline()
|
public void MDATC_3_A_2_SupportToRepelledPastMoveForksTimeline()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
|
|
||||||
// Fail to dislodge on the first turn, then support the move so it succeeds.
|
// Fail to dislodge on the first turn, then support the move so it succeeds.
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
|
@ -107,7 +108,7 @@ public class TimeTravelTest
|
||||||
[Test]
|
[Test]
|
||||||
public void MDATC_3_A_3_FailedMoveDoesNotForkTimeline()
|
public void MDATC_3_A_3_FailedMoveDoesNotForkTimeline()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
|
|
||||||
// Hold to create a future, then attempt to attack in the past.
|
// Hold to create a future, then attempt to attack in the past.
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
|
@ -147,7 +148,7 @@ public class TimeTravelTest
|
||||||
[Test]
|
[Test]
|
||||||
public void MDATC_3_A_4_SuperfluousSupportDoesNotForkTimeline()
|
public void MDATC_3_A_4_SuperfluousSupportDoesNotForkTimeline()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
|
|
||||||
// Move, then support the past move even though it succeeded already.
|
// Move, then support the past move even though it succeeded already.
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
|
@ -189,7 +190,7 @@ public class TimeTravelTest
|
||||||
[Test]
|
[Test]
|
||||||
public void MDATC_3_A_5_CrossTimelineSupportDoesNotForkHead()
|
public void MDATC_3_A_5_CrossTimelineSupportDoesNotForkHead()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
|
|
||||||
// London creates two timelines by moving into the past.
|
// London creates two timelines by moving into the past.
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
|
@ -242,7 +243,7 @@ public class TimeTravelTest
|
||||||
[Test]
|
[Test]
|
||||||
public void MDATC_3_A_6_CuttingCrossTimelineSupportDoesNotFork()
|
public void MDATC_3_A_6_CuttingCrossTimelineSupportDoesNotFork()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
|
|
||||||
// As above, only now London creates three timelines.
|
// As above, only now London creates three timelines.
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
using MultiversalDiplomacy.Adjudicate;
|
|
||||||
using MultiversalDiplomacy.Adjudicate.Decision;
|
using MultiversalDiplomacy.Adjudicate.Decision;
|
||||||
using MultiversalDiplomacy.Model;
|
using MultiversalDiplomacy.Model;
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
using static MultiversalDiplomacyTests.Adjudicator;
|
||||||
|
|
||||||
namespace MultiversalDiplomacyTests;
|
namespace MultiversalDiplomacyTests;
|
||||||
|
|
||||||
public class MovementAdjudicatorTest
|
public class MovementAdjudicatorTest
|
||||||
|
@ -11,7 +12,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Validation_ValidHold()
|
public void Validation_ValidHold()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Army("Mun").Holds().GetReference(out var order);
|
.Army("Mun").Holds().GetReference(out var order);
|
||||||
|
|
||||||
|
@ -24,7 +25,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Validation_ValidMove()
|
public void Validation_ValidMove()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Army("Mun").MovesTo("Tyr").GetReference(out var order);
|
.Army("Mun").MovesTo("Tyr").GetReference(out var order);
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Validation_ValidConvoy()
|
public void Validation_ValidConvoy()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Fleet("Nth").Convoys.Army("Hol").To("Lon").GetReference(out var order);
|
.Fleet("Nth").Convoys.Army("Hol").To("Lon").GetReference(out var order);
|
||||||
|
|
||||||
|
@ -50,7 +51,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Validation_ValidSupportHold()
|
public void Validation_ValidSupportHold()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Army("Mun").Supports.Army("Kie").Hold().GetReference(out var order);
|
.Army("Mun").Supports.Army("Kie").Hold().GetReference(out var order);
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Validation_ValidSupportMove()
|
public void Validation_ValidSupportMove()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Army("Mun").Supports.Army("Kie").MoveTo("Ber").GetReference(out var order);
|
.Army("Mun").Supports.Army("Kie").MoveTo("Ber").GetReference(out var order);
|
||||||
|
|
||||||
|
@ -76,12 +77,12 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Adjudication_Hold()
|
public void Adjudication_Hold()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Army("Mun").Holds().GetReference(out var order);
|
.Army("Mun").Holds().GetReference(out var order);
|
||||||
|
|
||||||
setup.ValidateOrders();
|
setup.ValidateOrders();
|
||||||
setup.AdjudicateOrders(MovementPhaseAdjudicator.Instance);
|
setup.AdjudicateOrders(MovementPhase);
|
||||||
|
|
||||||
var adjMun = order.Adjudications;
|
var adjMun = order.Adjudications;
|
||||||
Assert.That(adjMun.All(adj => adj.Resolved), Is.True);
|
Assert.That(adjMun.All(adj => adj.Resolved), Is.True);
|
||||||
|
@ -96,7 +97,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Adjudication_Move()
|
public void Adjudication_Move()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Army("Mun").MovesTo("Tyr").GetReference(out var order);
|
.Army("Mun").MovesTo("Tyr").GetReference(out var order);
|
||||||
|
|
||||||
|
@ -122,7 +123,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Adjudication_Support()
|
public void Adjudication_Support()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Army("Mun").MovesTo("Tyr").GetReference(out var move)
|
.Army("Mun").MovesTo("Tyr").GetReference(out var move)
|
||||||
.Army("Boh").Supports.Army("Mun").MoveTo("Tyr").GetReference(out var support);
|
.Army("Boh").Supports.Army("Mun").MoveTo("Tyr").GetReference(out var support);
|
||||||
|
@ -156,7 +157,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Update_SingleHold()
|
public void Update_SingleHold()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup["Germany"]
|
setup["Germany"]
|
||||||
.Army("Mun").Holds().GetReference(out var mun);
|
.Army("Mun").Holds().GetReference(out var mun);
|
||||||
|
|
||||||
|
@ -183,7 +184,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Update_DoubleHold()
|
public void Update_DoubleHold()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
.GetReference(out Season s1)
|
.GetReference(out Season s1)
|
||||||
["Germany"]
|
["Germany"]
|
||||||
|
@ -233,7 +234,7 @@ public class MovementAdjudicatorTest
|
||||||
[Test]
|
[Test]
|
||||||
public void Update_DoubleMove()
|
public void Update_DoubleMove()
|
||||||
{
|
{
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
.GetReference(out Season s1)
|
.GetReference(out Season s1)
|
||||||
["Germany"]
|
["Germany"]
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
using MultiversalDiplomacy.Adjudicate.Logging;
|
||||||
|
|
||||||
|
namespace MultiversalDiplomacyTests;
|
||||||
|
|
||||||
|
public class NullLogger : IAdjudicatorLogger
|
||||||
|
{
|
||||||
|
public static NullLogger Instance { get; } = new();
|
||||||
|
|
||||||
|
public void Log(int contextLevel, string message, params object[] args) {}
|
||||||
|
}
|
|
@ -12,6 +12,7 @@ public class ReplTest
|
||||||
new SetupScriptHandler(
|
new SetupScriptHandler(
|
||||||
(msg) => {/* discard*/},
|
(msg) => {/* discard*/},
|
||||||
World.WithStandardMap(),
|
World.WithStandardMap(),
|
||||||
|
Adjudicator.MovementPhase,
|
||||||
strict: true));
|
strict: true));
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
|
|
@ -25,6 +25,7 @@ public class ScriptTests
|
||||||
IScriptHandler? handler = new SetupScriptHandler(
|
IScriptHandler? handler = new SetupScriptHandler(
|
||||||
(msg) => {/* discard*/},
|
(msg) => {/* discard*/},
|
||||||
World.WithStandardMap(),
|
World.WithStandardMap(),
|
||||||
|
Adjudicator.MovementPhase,
|
||||||
strict: true);
|
strict: true);
|
||||||
foreach (string input in File.ReadAllLines(testScriptPath)) {
|
foreach (string input in File.ReadAllLines(testScriptPath)) {
|
||||||
line++;
|
line++;
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
using MultiversalDiplomacy.Adjudicate;
|
|
||||||
using MultiversalDiplomacy.Adjudicate.Decision;
|
using MultiversalDiplomacy.Adjudicate.Decision;
|
||||||
using MultiversalDiplomacy.Model;
|
using MultiversalDiplomacy.Model;
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
using static MultiversalDiplomacyTests.Adjudicator;
|
||||||
|
|
||||||
namespace MultiversalDiplomacyTests;
|
namespace MultiversalDiplomacyTests;
|
||||||
|
|
||||||
public class SerializationTest
|
public class SerializationTest
|
||||||
|
@ -74,7 +75,7 @@ public class SerializationTest
|
||||||
public void SerializeRoundTrip_MDATC_3_A_2()
|
public void SerializeRoundTrip_MDATC_3_A_2()
|
||||||
{
|
{
|
||||||
// Set up MDATC 3.A.2
|
// Set up MDATC 3.A.2
|
||||||
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhaseAdjudicator.Instance);
|
TestCaseBuilder setup = new(World.WithStandardMap(), MovementPhase);
|
||||||
setup[("a", 0)]
|
setup[("a", 0)]
|
||||||
.GetReference(out Season s0)
|
.GetReference(out Season s0)
|
||||||
["Germany"]
|
["Germany"]
|
||||||
|
@ -107,7 +108,7 @@ public class SerializationTest
|
||||||
});
|
});
|
||||||
|
|
||||||
// Resume the test case
|
// Resume the test case
|
||||||
setup = new(reserialized, MovementPhaseAdjudicator.Instance);
|
setup = new(reserialized, MovementPhase);
|
||||||
setup[("a", 1)]
|
setup[("a", 1)]
|
||||||
["Germany"]
|
["Germany"]
|
||||||
.Army("Mun").Supports.Army("Mun", season: s0).MoveTo("Tyr").GetReference(out var mun1)
|
.Army("Mun").Supports.Army("Mun", season: s0).MoveTo("Tyr").GetReference(out var mun1)
|
||||||
|
|
Loading…
Reference in New Issue