annotate API/Objects/Requirement/UnitRequiresNParentModelsForMUnitsRequirementTests.cs @ 231:5e03b68dd214

Re #410: Create "N units per M models in parent unit" requirement * Add required usage of context objects * Add tests for new requirement * Add some extras to test unit type setup that the new requirement needs
author IBBoard <dev@ibboard.co.uk>
date Fri, 27 Jul 2012 20:33:40 +0100
parents
children fdebdeb52a40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
231
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 // This file (UnitRequiresNoMoreThanNUnitsPerMModelsInParentUnitRequirementTests.cs) is a part of the IBBoard.WarFoundry.API.Tests project and is copyright 2012 IBBoard
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 //
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 using System;
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 using NUnit.Framework;
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 using NUnit.Framework.SyntaxHelpers;
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 using IBBoard.WarFoundry.API.Objects.Requirement.Context;
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 namespace IBBoard.WarFoundry.API.Objects.Requirement
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 [TestFixture()]
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 public class UnitRequiresNParentModelsForMUnitsRequirementTests: AbstractUnitTypeUnitRequirementTest<UnitType, UnitRequiresNParentModelsForMUnitsRequirement>
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 [Test()]
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 public void TestAddingUnitTypeWithNoParentAndOneUnitTypeRequiredIsAllowed()
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 Army army = new Army(mockRace, "Test", 1000);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 UnitRequiresNParentModelsForMUnitsRequirement req = new UnitRequiresNParentModelsForMUnitsRequirement(unitType1);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 req.AddUnitTypeRequirement(unitType2);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 Assert_That__AddingNotApplicable(req, unitType1, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 [Test()]
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 public void TestAddingUnitTypeWithParentAndOneUnitTypeRequiredIsAllowed()
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 Army army = new Army(mockRace, "Test", 1000);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 Unit parent = AddUnitOfTypeToArmy(unitType2, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 UnitRequiresNParentModelsForMUnitsRequirement req = new UnitRequiresNParentModelsForMUnitsRequirement(unitType1);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 req.AddUnitTypeRequirement(unitType2);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 Assert_That__PassesAdding(req, unitType1, parent, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 [Test()]
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34 public void TestAddingUnitTypeWithWrongParentAndOneUnitTypeRequiredIsNotApplicable()
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 Army army = new Army(mockRace, "Test", 1000);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 Unit parent = AddUnitOfTypeToArmy(unitType2, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 UnitRequiresNParentModelsForMUnitsRequirement req = new UnitRequiresNParentModelsForMUnitsRequirement(unitType1);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 req.AddUnitTypeRequirement(unitType3);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 Assert_That__AddingNotApplicable(req, unitType1, parent, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
41 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43 [Test()]
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
44 public void TestAddingTooManyUnitTypesWithParentAndOneUnitTypeRequiredFails()
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46 Army army = new Army(mockRace, "Test", 1000);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 Unit parent = AddUnitOfTypeToArmy(unitType3, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
48 Unit firstChild = AddUnitOfTypeToArmy(unitType1, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 parent.AddContainedUnit(firstChild);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50 UnitRequiresNParentModelsForMUnitsRequirement req = new UnitRequiresNParentModelsForMUnitsRequirement(unitType1);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
51 req.AddUnitTypeRequirement(unitType3);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
52 Assert_That__FailsAdding(req, unitType1, parent, army, "Army can only contain 1 × " + unitType1.Name + " as a sub-unit of each " + unitType3.Name + ", would have 2");
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
53 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
54
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
55 protected override UnitRequiresNParentModelsForMUnitsRequirement CreateRequirement(UnitType requirementOn)
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
56 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
57 return new UnitRequiresNParentModelsForMUnitsRequirement(requirementOn);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
58 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
59
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
60 protected static void Assert_That__PassesAdding(AbstractUnitRequirement<UnitType> req, UnitType unitType, Unit parent, Army army)
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
61 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
62 AddingToParentContext ctx = new AddingToParentContext(parent);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
63 Assert.That(req.AllowsAdding(unitType, army, ctx), Is.EqualTo(Validation.Passed));
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
64 Assert.That(req.GetAllowsAddingMessage(unitType, army, ctx), Is.Empty);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
65 Unit unit = CreateUnitOfType(unitType, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
66 Assert.That(req.AllowsAdding(unit, army, ctx), Is.EqualTo(Validation.Passed));
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
67 Assert.That(req.GetAllowsAddingMessage(unit, army, ctx), Is.Empty);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
68 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
69
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
70 protected static void Assert_That__AddingNotApplicable(AbstractUnitRequirement<UnitType> req, UnitType unitType, Unit parent, Army army)
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
71 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
72 AddingToParentContext ctx = new AddingToParentContext(parent);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
73 Assert.That(req.AllowsAdding(unitType, army, ctx), Is.EqualTo(Validation.NotApplicable));
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
74 Assert.That(req.GetAllowsAddingMessage(unitType, army, ctx), Is.Empty);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
75 Unit unit = CreateUnitOfType(unitType, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
76 Assert.That(req.AllowsAdding(unit, army, ctx), Is.EqualTo(Validation.NotApplicable));
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
77 Assert.That(req.GetAllowsAddingMessage(unit, army, ctx), Is.Empty);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
78 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
79
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
80 protected static void Assert_That__FailsAdding(AbstractUnitRequirement<UnitType> req, UnitType unitType, Unit parent, Army army, string message)
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
81 {
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
82 AddingToParentContext ctx = new AddingToParentContext(parent);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
83 Assert.That(req.AllowsAdding(unitType, army, ctx), Is.EqualTo(Validation.Failed));
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
84 Assert.That(req.GetAllowsAddingMessage(unitType, army, ctx), Is.EqualTo(message));
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
85 Unit unit = CreateUnitOfType(unitType, army);
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
86 Assert.That(req.AllowsAdding(unit, army, ctx), Is.EqualTo(Validation.Failed));
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
87 Assert.That(req.GetAllowsAddingMessage(unit, army, ctx), Is.EqualTo(message));
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
88 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
89 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
90 }
5e03b68dd214 Re #410: Create "N units per M models in parent unit" requirement
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
91