Mercurial > repos > IBBoard.WarFoundry.API.Tests
diff API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirementTest.cs @ 221:c40cb2048fc3
Re #394:
* Fix UnitRequiresNUnitsForMUnitsRequirementTests unit test so it actually does test the other value
* Add tests to "requires at least N" requirement and factory to test alternatives (Rollcall's "-1,X|Y" notation)
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 24 Mar 2012 20:34:42 +0000 |
parents | 9bf34e88da89 |
children |
line wrap: on
line diff
--- a/API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirementTest.cs Sat Mar 24 19:32:47 2012 +0000 +++ b/API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirementTest.cs Sat Mar 24 20:34:42 2012 +0000 @@ -33,6 +33,7 @@ [Test()] public void TestAddingUnitTypeWithNoUnitsAndTwoUnitTypesRequired() { + //Rollcall's "-1,X,-1,Y" requirement - unlimited once you have one of both Army army = new Army(mockRace, "Test", 1000); UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); req.AddUnitTypeRequirement(unitType2); @@ -43,6 +44,7 @@ [Test()] public void TestAddingUnitTypeWithOneUnitAndTwoUnitTypesRequired() { + //Rollcall's "-1,X,-1,Y" requirement - unlimited once you have one of both Army army = new Army(mockRace, "Test", 1000); AddUnitOfTypeToArmy(unitType2, army); UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); @@ -54,6 +56,7 @@ [Test()] public void TestAddingUnitTypeWithOtherOneUnitAndTwoUnitTypesRequired() { + //Rollcall's "-1,X,-1,Y" requirement - unlimited once you have one of both Army army = new Army(mockRace, "Test", 1000); AddUnitOfTypeToArmy(unitType3, army); UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); @@ -65,6 +68,7 @@ [Test()] public void TestAddingUnitTypeWithBothUnitsAndTwoUnitTypesRequired() { + //Rollcall's "-1,X,-1,Y" requirement - unlimited once you have one of both Army army = new Army(mockRace, "Test", 1000); AddUnitOfTypeToArmy(unitType2, army); AddUnitOfTypeToArmy(unitType3, army); @@ -136,6 +140,56 @@ Assert_That__PassesAdding(req, unitType1, army); } + [Test] + public void TestAddingRequirementWithOR() + { + //Rollcall's "-1,X|Y" requirement - unlimited for one of either + Army army = new Army(mockRace, "Test", 1000); + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); + req.AddUnitTypeRequirement(unitType2, unitType3); + Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " (would have 0)."); + AddUnitOfTypeToArmy(unitType2, army); + Assert_That__PassesAdding(req, unitType1, army); + } + + [Test] + public void TestAddingRequirementWithORWithOtherUnit() + { + //Rollcall's "-1,X|Y" requirement - unlimited for one of either + Army army = new Army(mockRace, "Test", 1000); + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); + req.AddUnitTypeRequirement(unitType2, unitType3); + Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " (would have 0)."); + AddUnitOfTypeToArmy(unitType3, army); + Assert_That__PassesAdding(req, unitType1, army); + } + + [Test] + public void TestAddingRequirementWithORWithLimit() + { + Army army = new Army(mockRace, "Test", 1000); + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); + req.AddUnitTypeRequirement(2, unitType2, unitType3); + Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (would have 0)."); + AddUnitOfTypeToArmy(unitType2, army); + Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (would have 1)."); + AddUnitOfTypeToArmy(unitType2, army); + Assert_That__PassesAdding(req, unitType1, army); + } + + [Test] + public void TestAddingRequirementWithORWithLimitWithOtherUnit() + { + Army army = new Army(mockRace, "Test", 1000); + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); + req.AddUnitTypeRequirement(2, unitType2, unitType3); + Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (would have 0)."); + AddUnitOfTypeToArmy(unitType3, army); + Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (would have 1)."); + AddUnitOfTypeToArmy(unitType3, army); + Assert_That__PassesAdding(req, unitType1, army); + } + [Test()] public void TestValidatingWithNoUnitsAndOneUnitTypeRequired() { @@ -264,6 +318,60 @@ Assert_That__ValidationPasses(req, army); } + [Test] + public void TestRequirementWithOR() + { + //Rollcall's "-1,X|Y" requirement - unlimited for one of either + Army army = new Army(mockRace, "Test", 1000); + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); + req.AddUnitTypeRequirement(unitType2, unitType3); + AddUnitOfTypeToArmy(unitType1, army); + Assert_That__ValidationFails(req, army, "Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " (have 0)."); + AddUnitOfTypeToArmy(unitType2, army); + Assert_That__ValidationPasses(req, army); + } + + [Test] + public void TestRequirementWithORWithOtherUnit() + { + //Rollcall's "-1,X|Y" requirement - unlimited for one of either + Army army = new Army(mockRace, "Test", 1000); + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); + req.AddUnitTypeRequirement(unitType2, unitType3); + AddUnitOfTypeToArmy(unitType1, army); + Assert_That__ValidationFails(req, army, "Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " (have 0)."); + AddUnitOfTypeToArmy(unitType3, army); + Assert_That__ValidationPasses(req, army); + } + + [Test] + public void TestRequirementWithORWithLimit() + { + Army army = new Army(mockRace, "Test", 1000); + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); + req.AddUnitTypeRequirement(2, unitType2, unitType3); + AddUnitOfTypeToArmy(unitType1, army); + Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (have 0)."); + AddUnitOfTypeToArmy(unitType2, army); + Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (have 1)."); + AddUnitOfTypeToArmy(unitType2, army); + Assert_That__ValidationPasses(req, army); + } + + [Test] + public void TestRequirementWithORWithLimitWithOtherUnit() + { + Army army = new Army(mockRace, "Test", 1000); + UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); + req.AddUnitTypeRequirement(2, unitType2, unitType3); + AddUnitOfTypeToArmy(unitType1, army); + Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (have 0)."); + AddUnitOfTypeToArmy(unitType3, army); + Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (have 1)."); + AddUnitOfTypeToArmy(unitType3, army); + Assert_That__ValidationPasses(req, army); + } + protected override UnitRequiresAtLeastNUnitsRequirement CreateRequirement(UnitType requirementOn) { return new UnitRequiresAtLeastNUnitsRequirement(requirementOn);