# HG changeset patch # User IBBoard # Date 1324651942 0 # Node ID 43b571aa41245c0c4e8ceb627c483d741f616529 # Parent 6a0a0e228e3cc4efd836fc94dd6cc269215aa1bb Re #350: Add requirement to allow N of unit for specific other units * Add tests on factory for different combinations of additive and non-additive requirements diff -r 6a0a0e228e3c -r 43b571aa4124 API/Factories/Requirement/UnitRequiresNUnitsForMUnitsRequirementFactoryTest.cs --- a/API/Factories/Requirement/UnitRequiresNUnitsForMUnitsRequirementFactoryTest.cs Tue Dec 20 21:01:46 2011 +0000 +++ b/API/Factories/Requirement/UnitRequiresNUnitsForMUnitsRequirementFactoryTest.cs Fri Dec 23 14:52:22 2011 +0000 @@ -17,8 +17,10 @@ private static Race race; private static string typeID1 = "unit1"; private static string typeID2 = "unit2"; + private static string typeID3 = "unit3"; private static UnitType unitType1; private static UnitType unitType2; + private static UnitType unitType3; private static MockRaceFactory raceFactory = new MockRaceFactory(); [TestFixtureSetUp()] @@ -29,6 +31,8 @@ race.AddUnitType(unitType1); unitType2 = new UnitType(typeID2, "Unit 2", race); race.AddUnitType(unitType2); + unitType3 = new UnitType(typeID3, "Unit 3", race); + race.AddUnitType(unitType3); } [Test()] @@ -62,6 +66,19 @@ } [Test()] + public void TestCreatesCorrectRequirementForThreeIDs() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType1); + expectedReq.AddUnitTypeRequirement(unitType2); + expectedReq.AddUnitTypeRequirement(unitType3); + IRequirement req = factory.CreateRequirement(unitType, typeID1 + "|" + typeID2 + "|" + typeID3, raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] public void TestCreatesCorrectRequirementWithNumber() { UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); @@ -167,6 +184,17 @@ } [Test()] + public void TestCreatesCorrectTripleAdditiveRequirement() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType1, unitType2, unitType3); + IRequirement req = factory.CreateRequirement(unitType, typeID1 + ";" + typeID2 + ";" + typeID3, raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] public void TestCreatesCorrectAdditiveRequirementForTwoIDs() { UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); @@ -189,7 +217,7 @@ Assert.That(req, Is.EqualTo(expectedReq)); } - /*[Test()] + [Test()] public void TestCreatesCorrectAdditiveRequirementWithTwoNumbers() { UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); @@ -198,7 +226,7 @@ expectedReq.AddUnitTypeRequirement(2, 3, unitType1, unitType2); IRequirement req = factory.CreateRequirement(unitType, typeID1 + ";" + typeID2 + ":2;3", raceFactory); Assert.That(req, Is.EqualTo(expectedReq)); - }*/ + } [Test()] public void TestCreatesCorrectAdditiveRequirementForTwoIDsWithTwoNumbers() @@ -237,6 +265,150 @@ } [Test()] + public void TestCreatesCorrectRequirementForOneIDAndOneAdditive() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType1, unitType2); + expectedReq.AddUnitTypeRequirement(unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID1 + ";" + typeID2 + "|" + typeID2, raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDAndOneAdditiveInOtherOrder() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType2); + expectedReq.AddUnitTypeRequirement(unitType1, unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID2 + "|" + typeID1 + ";" + typeID2, raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDWithNumberAndOneAdditive() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType1, unitType2); + expectedReq.AddUnitTypeRequirement(unitType2, 3); + IRequirement req = factory.CreateRequirement(unitType, typeID1 + ";" + typeID2 + "|" + typeID2 + ":3", raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDWithNumberAndOneAdditiveInOtherOrder() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType2, 3); + expectedReq.AddUnitTypeRequirement(unitType1, unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID2 + ":3|" + typeID1 + ";" + typeID2, raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDAndOneAdditiveWithNumber() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(3, unitType1, unitType2); + expectedReq.AddUnitTypeRequirement(unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID1 + ";" + typeID2 + ":3|" + typeID2, raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDAndOneAdditiveWithNumberInOtherOrder() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType2); + expectedReq.AddUnitTypeRequirement(3, unitType1, unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID2 + "|" + typeID1 + ";" + typeID2 + ":3", raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDWithMinAndAllowedAndOneAdditive() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType1, unitType2); + expectedReq.AddUnitTypeRequirement(3, 2, unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID1 + ";" + typeID2 + "|" + typeID2 + ":3;2", raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDWithMinAndAllowedAndOneAdditiveInOtherOrder() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(3, 2, unitType2); + expectedReq.AddUnitTypeRequirement(unitType1, unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID2 + ":3;2|" + typeID1 + ";" + typeID2, raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDWithNumberAndOneAdditiveWithMinAndAllowed() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(3, 2, unitType1, unitType2); + expectedReq.AddUnitTypeRequirement(unitType2, 3); + IRequirement req = factory.CreateRequirement(unitType, typeID1 + ";" + typeID2 + ":3;2|" + typeID2 + ":3", raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDWithNumberAndOneAdditiveWithMinAndAllowedInOtherOrder() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType2, 3); + expectedReq.AddUnitTypeRequirement(3, 2, unitType1, unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID2 + ":3|" + typeID1 + ";" + typeID2 + ":3;2", raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDWithMinAndAllowedAndOneAdditiveWithNumber() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(3, unitType1, unitType2); + expectedReq.AddUnitTypeRequirement(unitType2, 3, 2); + IRequirement req = factory.CreateRequirement(unitType, typeID1 + ";" + typeID2 + ":3|" + typeID2 + ":3;2", raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] + public void TestCreatesCorrectRequirementForOneIDWithMinAndAllowedAndOneAdditiveWithNumberInOtherOrder() + { + UnitRequiresNUnitsForMUnitsRequirementFactory factory = new UnitRequiresNUnitsForMUnitsRequirementFactory(); + UnitType unitType = new UnitType("testUnit", "Test Unit", race); + RequiresNUnitsForMUnitsRequirement expectedReq = new RequiresNUnitsForMUnitsRequirement(unitType); + expectedReq.AddUnitTypeRequirement(unitType2, 3, 2); + expectedReq.AddUnitTypeRequirement(3, unitType1, unitType2); + IRequirement req = factory.CreateRequirement(unitType, typeID2 + ":3;2|" + typeID1 + ";" + typeID2 + ":3", raceFactory); + Assert.That(req, Is.EqualTo(expectedReq)); + } + + [Test()] [ExpectedException(typeof(InvalidRequirementException), ExpectedMessage="Invalid unit type 'fibble' for 'Requires N units for M units' requirement")] public void TestExceptionsForAdditiveRequirementWithInvalidID() {