comparison API/Objects/Requirement/RequiresAtLeastNUnitsRequirementTest.cs @ 208:c323770e61c2

Re #379: Fix validation of requirements to check for unit * Rename classes in tests to match API changes * Alter tests to match new API (all classes require at least one UnitType that they're relevant to now)
author IBBoard <dev@ibboard.co.uk>
date Wed, 22 Feb 2012 20:48:40 +0000
parents 0762766bd3f2
children
comparison
equal deleted inserted replaced
207:27f163bf884a 208:c323770e61c2
10 using IBBoard.WarFoundry.API.Factories; 10 using IBBoard.WarFoundry.API.Factories;
11 11
12 namespace IBBoard.WarFoundry.API.Objects.Requirement 12 namespace IBBoard.WarFoundry.API.Objects.Requirement
13 { 13 {
14 [TestFixture()] 14 [TestFixture()]
15 public class RequiresAtLeastNUnitsRequirementTest : AbstractEqualityTest<RequiresAtLeastNUnitsRequirement> 15 public class RequiresAtLeastNUnitsRequirementTest : AbstractEqualityTest<RequiresAtLeastNUnitsRequirement<UnitType>>
16 { 16 {
17 private MockRace mockRace; 17 private MockRace mockRace;
18 private UnitType allowedUnitType;
18 private UnitType unitType1; 19 private UnitType unitType1;
19 private UnitType unitType2; 20 private UnitType unitType2;
20 private UnitType unitType3; 21 private UnitType unitType3;
21 22
22 [TestFixtureSetUp()] 23 [TestFixtureSetUp()]
23 public void SetupRace() 24 public void SetupRace()
24 { 25 {
25 mockRace = new MockRace(); 26 mockRace = new MockRace();
27 allowedUnitType = new MockUnitType("allowed", "Allowed Type");
28 mockRace.AddUnitType(allowedUnitType);
26 unitType1 = new MockUnitType("type1", "Unit Type 1"); 29 unitType1 = new MockUnitType("type1", "Unit Type 1");
27 mockRace.AddUnitType(unitType1); 30 mockRace.AddUnitType(unitType1);
28 unitType2 = new MockUnitType("type2", "Unit Type 2"); 31 unitType2 = new MockUnitType("type2", "Unit Type 2");
29 mockRace.AddUnitType(unitType2); 32 mockRace.AddUnitType(unitType2);
30 unitType3 = new MockUnitType("type3", "Unit Type 3"); 33 unitType3 = new MockUnitType("type3", "Unit Type 3");
34 [Test()] 37 [Test()]
35 public void TestAddingUnrelatedUnitWithNoUnitsAndOneUnitTypeRequired() 38 public void TestAddingUnrelatedUnitWithNoUnitsAndOneUnitTypeRequired()
36 { 39 {
37 Army army = new Army(mockRace, "Test", 1000); 40 Army army = new Army(mockRace, "Test", 1000);
38 Unit unit = CreateUnitOfType(unitType1, army); 41 Unit unit = CreateUnitOfType(unitType1, army);
39 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType2); 42 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType2);
40 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.NotApplicable)); 43 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.NotApplicable));
41 } 44 }
42 45
43 [Test()] 46 [Test()]
44 public void TestAddingOneUnitWithOneUnitTypeRequired() 47 public void TestAddingOneUnitWithOneUnitTypeRequired()
45 { 48 {
46 Army army = new Army(mockRace, "Test", 1000); 49 Army army = new Army(mockRace, "Test", 1000);
47 Unit unit = CreateUnitOfType(unitType1, army); 50 Unit unit = CreateUnitOfType(unitType1, army);
48 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType1); 51 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType1);
49 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); 52 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed));
50 } 53 }
51 54
52 [Test()] 55 [Test()]
53 public void TestAddingUnitWithOneUnitAndTwoOfUnitTypeRequired() 56 public void TestAddingUnitWithOneUnitAndTwoOfUnitTypeRequired()
54 { 57 {
55 Army army = new Army(mockRace, "Test", 1000); 58 Army army = new Army(mockRace, "Test", 1000);
56 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 59 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
57 req.AddUnitTypeRequirement(unitType1, 2); 60 req.AddUnitTypeRequirement(unitType1, 2);
58 AddUnitOfTypeToArmy(unitType1, army); 61 AddUnitOfTypeToArmy(unitType1, army);
59 Unit unit = CreateUnitOfType(unitType1, army); 62 Unit unit = CreateUnitOfType(unitType1, army);
60 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); 63 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed));
61 } 64 }
62 65
63 [Test()] 66 [Test()]
64 public void TestAddingUnrelatedUnitTypeWithNoUnitsAndOneUnitTypeRequired() 67 public void TestAddingUnrelatedUnitTypeWithNoUnitsAndOneUnitTypeRequired()
65 { 68 {
66 Army army = new Army(mockRace, "Test", 1000); 69 Army army = new Army(mockRace, "Test", 1000);
67 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType2); 70 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType2);
68 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.NotApplicable)); 71 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.NotApplicable));
69 } 72 }
70 73
71 [Test()] 74 [Test()]
72 public void TestAddingUnitTypeWithNoUnitsAndOneUnitTypeRequired() 75 public void TestAddingUnitTypeWithNoUnitsAndOneUnitTypeRequired()
73 { 76 {
74 Army army = new Army(mockRace, "Test", 1000); 77 Army army = new Army(mockRace, "Test", 1000);
75 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType1); 78 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType1);
76 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); 79 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed));
77 } 80 }
78 81
79 [Test()] 82 [Test()]
80 public void TestAddingUnitTypeWithOneUnitAndOneUnitTypeRequired() 83 public void TestAddingUnitTypeWithOneUnitAndOneUnitTypeRequired()
81 { 84 {
82 Army army = new Army(mockRace, "Test", 1000); 85 Army army = new Army(mockRace, "Test", 1000);
83 AddUnitOfTypeToArmy(unitType1, army); 86 AddUnitOfTypeToArmy(unitType1, army);
84 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType1); 87 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType1);
85 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); 88 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed));
86 } 89 }
87 90
88 [Test()] 91 [Test()]
89 public void TestAddingUnitTypeWithNoUnitsAndTwoUnitTypesRequired() 92 public void TestAddingUnitTypeWithNoUnitsAndTwoUnitTypesRequired()
90 { 93 {
91 Army army = new Army(mockRace, "Test", 1000); 94 Army army = new Army(mockRace, "Test", 1000);
92 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType2, unitType3); 95 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType2, unitType3);
93 Assert.That(req.AllowsAdding(unitType2, army), Is.EqualTo(Validation.Failed)); 96 Assert.That(req.AllowsAdding(unitType2, army), Is.EqualTo(Validation.Failed));
94 } 97 }
95 98
96 [Test()] 99 [Test()]
97 public void TestAddingUnitTypeWithOneUnitAndTwoUnitTypesRequired() 100 public void TestAddingUnitTypeWithOneUnitAndTwoUnitTypesRequired()
98 { 101 {
99 Army army = new Army(mockRace, "Test", 1000); 102 Army army = new Army(mockRace, "Test", 1000);
100 AddUnitOfTypeToArmy(unitType3, army); 103 AddUnitOfTypeToArmy(unitType3, army);
101 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType2, unitType3); 104 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType2, unitType3);
102 Assert.That(req.AllowsAdding(unitType2, army), Is.EqualTo(Validation.Passed)); 105 Assert.That(req.AllowsAdding(unitType2, army), Is.EqualTo(Validation.Passed));
103 } 106 }
104 107
105 [Test()] 108 [Test()]
106 public void TestAddingUnitTypeWithBothUnitsAndTwoUnitTypesRequired() 109 public void TestAddingUnitTypeWithBothUnitsAndTwoUnitTypesRequired()
107 { 110 {
108 Army army = new Army(mockRace, "Test", 1000); 111 Army army = new Army(mockRace, "Test", 1000);
109 AddUnitOfTypeToArmy(unitType2, army); 112 AddUnitOfTypeToArmy(unitType2, army);
110 AddUnitOfTypeToArmy(unitType3, army); 113 AddUnitOfTypeToArmy(unitType3, army);
111 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType2, unitType3); 114 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType2, unitType3);
112 Assert.That(req.AllowsAdding(unitType2, army), Is.EqualTo(Validation.Passed)); 115 Assert.That(req.AllowsAdding(unitType2, army), Is.EqualTo(Validation.Passed));
113 } 116 }
114 117
115 [Test()] 118 [Test()]
116 public void TestAddingOneOfUnitTypeWithTwoOfOneUnitTypeRequired() 119 public void TestAddingOneOfUnitTypeWithTwoOfOneUnitTypeRequired()
117 { 120 {
118 Army army = new Army(mockRace, "Test", 1000); 121 Army army = new Army(mockRace, "Test", 1000);
119 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 122 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
120 req.AddUnitTypeRequirement(unitType1, 2); 123 req.AddUnitTypeRequirement(unitType1, 2);
121 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed)); 124 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed));
122 } 125 }
123 126
124 [Test()] 127 [Test()]
125 public void TestAddingOneUnitTypeWithOneUnitAndTwoOfOneUnitTypeRequired() 128 public void TestAddingOneUnitTypeWithOneUnitAndTwoOfOneUnitTypeRequired()
126 { 129 {
127 Army army = new Army(mockRace, "Test", 1000); 130 Army army = new Army(mockRace, "Test", 1000);
128 AddUnitOfTypeToArmy(unitType1, army); 131 AddUnitOfTypeToArmy(unitType1, army);
129 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 132 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
130 req.AddUnitTypeRequirement(unitType1, 2); 133 req.AddUnitTypeRequirement(unitType1, 2);
131 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); 134 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed));
132 } 135 }
133 136
134 [Test()] 137 [Test()]
135 public void TestAddingUnitTypeRequirementWithNoNumberDefaultsToHavingOne() 138 public void TestAddingUnitTypeRequirementWithNoNumberDefaultsToHavingOne()
136 { 139 {
137 Army army = new Army(mockRace, "Test", 1000); 140 Army army = new Army(mockRace, "Test", 1000);
138 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 141 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
139 req.AddUnitTypeRequirement(unitType1); 142 req.AddUnitTypeRequirement(unitType1);
140 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); 143 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed));
141 } 144 }
142 145
143 [Test()] 146 [Test()]
144 public void TestValidityOfArmyWithNoUnitsAndOneUnitTypeRequired() 147 public void TestValidityOfArmyWithNoUnitsAndOneUnitTypeRequired()
145 { 148 {
146 Army army = new Army(mockRace, "Test", 1000); 149 Army army = new Army(mockRace, "Test", 1000);
147 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType1); 150 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType1);
148 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); 151 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed));
149 } 152 }
150 153
151 [Test()] 154 [Test()]
152 public void TestValidityOfArmyWithOneUnitAndOneUnitTypeRequired() 155 public void TestValidityOfArmyWithOneUnitAndOneUnitTypeRequired()
153 { 156 {
154 Army army = new Army(mockRace, "Test", 1000); 157 Army army = new Army(mockRace, "Test", 1000);
155 AddUnitOfTypeToArmy(unitType1, army); 158 AddUnitOfTypeToArmy(unitType1, army);
156 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType1); 159 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType1);
157 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); 160 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed));
158 } 161 }
159 162
160 [Test] 163 [Test]
161 public void TestAddingMinNumberUnitTypePassesRequirement() 164 public void TestAddingMinNumberUnitTypePassesRequirement()
162 { 165 {
163 Army army = new Army(mockRace, "Test", 1000); 166 Army army = new Army(mockRace, "Test", 1000);
164 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 167 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
165 req.AddUnitTypeRequirement(unitType1, 2); 168 req.AddUnitTypeRequirement(unitType1, 2);
166 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed)); 169 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed));
167 AddUnitOfTypeToArmy(unitType1, army); 170 AddUnitOfTypeToArmy(unitType1, army);
168 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); 171 Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed));
169 } 172 }
171 [Test] 174 [Test]
172 public void TestValidationMessageIsBlankForPass() 175 public void TestValidationMessageIsBlankForPass()
173 { 176 {
174 Army army = new Army(mockRace, "Test", 1000); 177 Army army = new Army(mockRace, "Test", 1000);
175 AddUnitOfTypeToArmy(unitType1, army); 178 AddUnitOfTypeToArmy(unitType1, army);
176 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType1); 179 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType1);
177 Assert.That(req.GetValidationMessage(army), Is.Empty); 180 Assert.That(req.GetValidationMessage(army), Is.Empty);
178 } 181 }
179 182
180 [Test] 183 [Test]
181 public void TestValidationMessageIsCorrectForFailWithOneUnitRequired() 184 public void TestValidationMessageIsCorrectForFailWithOneUnitRequired()
182 { 185 {
183 Army army = new Army(mockRace, "Test", 1000); 186 Army army = new Army(mockRace, "Test", 1000);
184 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType1); 187 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType1);
185 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (have 0).")); 188 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (have 0)."));
186 } 189 }
187 190
188 [Test] 191 [Test]
189 public void TestValidationMessageIsCorrectForFailWithTwoOfOneUnitRequired() 192 public void TestValidationMessageIsCorrectForFailWithTwoOfOneUnitRequired()
190 { 193 {
191 Army army = new Army(mockRace, "Test", 1000); 194 Army army = new Army(mockRace, "Test", 1000);
192 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 195 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
193 req.AddUnitTypeRequirement(unitType1, 2); 196 req.AddUnitTypeRequirement(unitType1, 2);
194 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 2 × " + unitType1.Name + " (have 0).")); 197 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 2 × " + unitType1.Name + " (have 0)."));
195 } 198 }
196 199
197 [Test] 200 [Test]
198 public void TestValidationMessageIsCorrectForFailWithTwoUnitsRequired() 201 public void TestValidationMessageIsCorrectForFailWithTwoUnitsRequired()
199 { 202 {
200 Army army = new Army(mockRace, "Test", 1000); 203 Army army = new Army(mockRace, "Test", 1000);
201 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 204 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
202 req.AddUnitTypeRequirement(unitType1); 205 req.AddUnitTypeRequirement(unitType1);
203 req.AddUnitTypeRequirement(unitType2); 206 req.AddUnitTypeRequirement(unitType2);
204 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (have 0); 1 × " + unitType2.Name + " (have 0).")); 207 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (have 0); 1 × " + unitType2.Name + " (have 0)."));
205 } 208 }
206 209
207 [Test] 210 [Test]
208 public void TestValidationMessageIsCorrectForFailWithTwoUnitsRequiredWithOneUnit() 211 public void TestValidationMessageIsCorrectForFailWithTwoUnitsRequiredWithOneUnit()
209 { 212 {
210 Army army = new Army(mockRace, "Test", 1000); 213 Army army = new Army(mockRace, "Test", 1000);
211 AddUnitOfTypeToArmy(unitType1, army); 214 AddUnitOfTypeToArmy(unitType1, army);
212 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 215 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
213 req.AddUnitTypeRequirement(unitType1); 216 req.AddUnitTypeRequirement(unitType1);
214 req.AddUnitTypeRequirement(unitType2); 217 req.AddUnitTypeRequirement(unitType2);
215 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " (have 0).")); 218 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " (have 0)."));
216 } 219 }
217 220
218 [Test] 221 [Test]
219 public void TestValidationMessageIsCorrectForFailWithTwoUnitsRequiredWithOtherUnit() 222 public void TestValidationMessageIsCorrectForFailWithTwoUnitsRequiredWithOtherUnit()
220 { 223 {
221 Army army = new Army(mockRace, "Test", 1000); 224 Army army = new Army(mockRace, "Test", 1000);
222 AddUnitOfTypeToArmy(unitType2, army); 225 AddUnitOfTypeToArmy(unitType2, army);
223 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 226 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
224 req.AddUnitTypeRequirement(unitType1); 227 req.AddUnitTypeRequirement(unitType1);
225 req.AddUnitTypeRequirement(unitType2); 228 req.AddUnitTypeRequirement(unitType2);
226 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (have 0).")); 229 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (have 0)."));
227 } 230 }
228 231
229 [Test] 232 [Test]
230 public void TestAllowsAddingMessageIsBlankForPass() 233 public void TestAllowsAddingMessageIsBlankForPass()
231 { 234 {
232 Army army = new Army(mockRace, "Test", 1000); 235 Army army = new Army(mockRace, "Test", 1000);
233 AddUnitOfTypeToArmy(unitType1, army); 236 AddUnitOfTypeToArmy(unitType1, army);
234 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(unitType1); 237 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType, unitType1);
235 Assert.That(req.GetAllowsAddingMessage(unitType1, army), Is.Empty); 238 Assert.That(req.GetAllowsAddingMessage(unitType1, army), Is.Empty);
236 } 239 }
237 240
238 [Test] 241 [Test]
239 public void TestAllowsAddingMessageIsCorrectForFailWithTwoOfOneUnitRequired() 242 public void TestAllowsAddingMessageIsCorrectForFailWithTwoOfOneUnitRequired()
240 { 243 {
241 Army army = new Army(mockRace, "Test", 1000); 244 Army army = new Army(mockRace, "Test", 1000);
242 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 245 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
243 req.AddUnitTypeRequirement(unitType1, 2); 246 req.AddUnitTypeRequirement(unitType1, 2);
244 Assert.That(req.GetAllowsAddingMessage(unitType1, army), Is.EqualTo("Army must contain: 2 × " + unitType1.Name + " (would have 1).")); 247 Assert.That(req.GetAllowsAddingMessage(unitType1, army), Is.EqualTo("Army must contain: 2 × " + unitType1.Name + " (would have 1)."));
245 } 248 }
246 249
247 [Test] 250 [Test]
248 public void TestAllowsAddingMessageIsCorrectForFailWithTwoUnitsRequired() 251 public void TestAllowsAddingMessageIsCorrectForFailWithTwoUnitsRequired()
249 { 252 {
250 Army army = new Army(mockRace, "Test", 1000); 253 Army army = new Army(mockRace, "Test", 1000);
251 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 254 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
252 req.AddUnitTypeRequirement(unitType1); 255 req.AddUnitTypeRequirement(unitType1);
253 req.AddUnitTypeRequirement(unitType2); 256 req.AddUnitTypeRequirement(unitType2);
254 Assert.That(req.GetAllowsAddingMessage(unitType1, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " (would have 0).")); 257 Assert.That(req.GetAllowsAddingMessage(unitType1, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " (would have 0)."));
255 } 258 }
256 259
257 [Test] 260 [Test]
258 public void TestAllowsAddingMessageIsCorrectForFailWithTwoUnitsRequiredOtherUnit() 261 public void TestAllowsAddingMessageIsCorrectForFailWithTwoUnitsRequiredOtherUnit()
259 { 262 {
260 Army army = new Army(mockRace, "Test", 1000); 263 Army army = new Army(mockRace, "Test", 1000);
261 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 264 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
262 req.AddUnitTypeRequirement(unitType1); 265 req.AddUnitTypeRequirement(unitType1);
263 req.AddUnitTypeRequirement(unitType2); 266 req.AddUnitTypeRequirement(unitType2);
264 Assert.That(req.GetAllowsAddingMessage(unitType2, army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (would have 0).")); 267 Assert.That(req.GetAllowsAddingMessage(unitType2, army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (would have 0)."));
265 } 268 }
266 269
267 [Test] 270 [Test]
268 public void TestAllowsAddingMessageIsCorrectForFailWithTwoUnitsRequiredWithOneUnit() 271 public void TestAllowsAddingMessageIsCorrectForFailWithTwoUnitsRequiredWithOneUnit()
269 { 272 {
270 Army army = new Army(mockRace, "Test", 1000); 273 Army army = new Army(mockRace, "Test", 1000);
271 AddUnitOfTypeToArmy(unitType1, army); 274 AddUnitOfTypeToArmy(unitType1, army);
272 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 275 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
273 req.AddUnitTypeRequirement(unitType1); 276 req.AddUnitTypeRequirement(unitType1);
274 req.AddUnitTypeRequirement(unitType2); 277 req.AddUnitTypeRequirement(unitType2);
275 Assert.That(req.GetAllowsAddingMessage(unitType1, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " (would have 0).")); 278 Assert.That(req.GetAllowsAddingMessage(unitType1, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " (would have 0)."));
276 } 279 }
277 280
278 [Test] 281 [Test]
279 public void TestAllowsAddingMessageIsCorrectForFailWithTwoUnitsRequiredWithOtherUnit() 282 public void TestAllowsAddingMessageIsCorrectForFailWithTwoUnitsRequiredWithOtherUnit()
280 { 283 {
281 Army army = new Army(mockRace, "Test", 1000); 284 Army army = new Army(mockRace, "Test", 1000);
282 AddUnitOfTypeToArmy(unitType2, army); 285 AddUnitOfTypeToArmy(unitType2, army);
283 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 286 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
284 req.AddUnitTypeRequirement(unitType1); 287 req.AddUnitTypeRequirement(unitType1);
285 req.AddUnitTypeRequirement(unitType2); 288 req.AddUnitTypeRequirement(unitType2);
286 Assert.That(req.GetAllowsAddingMessage(unitType2, army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (would have 0).")); 289 Assert.That(req.GetAllowsAddingMessage(unitType2, army), Is.EqualTo("Army must contain: 1 × " + unitType1.Name + " (would have 0)."));
287 } 290 }
288 291
294 private static Unit CreateUnitOfType(UnitType unitType, Army army) 297 private static Unit CreateUnitOfType(UnitType unitType, Army army)
295 { 298 {
296 return new Unit(unitType, army.GetCategory(unitType.MainCategory)); 299 return new Unit(unitType, army.GetCategory(unitType.MainCategory));
297 } 300 }
298 301
299 public override RequiresAtLeastNUnitsRequirement GetObject () 302 public override RequiresAtLeastNUnitsRequirement<UnitType> GetObject()
300 { 303 {
301 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 304 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
302 req.AddUnitTypeRequirement(unitType1, 2); 305 req.AddUnitTypeRequirement(unitType1, 2);
303 return req; 306 return req;
304 } 307 }
305 308
306 public override RequiresAtLeastNUnitsRequirement GetSameObject () 309 public override RequiresAtLeastNUnitsRequirement<UnitType> GetSameObject()
307 { 310 {
308 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 311 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
309 req.AddUnitTypeRequirement(unitType1, 2); 312 req.AddUnitTypeRequirement(unitType1, 2);
310 return req; 313 return req;
311 } 314 }
312 315
313 public override RequiresAtLeastNUnitsRequirement GetDifferentObject () 316 public override RequiresAtLeastNUnitsRequirement<UnitType> GetDifferentObject()
314 { 317 {
315 RequiresAtLeastNUnitsRequirement req = new RequiresAtLeastNUnitsRequirement(); 318 RequiresAtLeastNUnitsRequirement<UnitType> req = new RequiresAtLeastNUnitsRequirement<UnitType>(allowedUnitType);
316 DummyWarFoundryFactory factory = new DummyWarFoundryFactory(); 319 DummyWarFoundryFactory factory = new DummyWarFoundryFactory();
317 GameSystem gameSystem = new GameSystem("system", "system", factory); 320 GameSystem gameSystem = new GameSystem("system", "system", factory);
318 Race race = new Race("race", "race", gameSystem, factory); 321 Race race = new Race("race", "race", gameSystem, factory);
319 req.AddUnitTypeRequirement(new UnitType("id2", "Type 2", race), 2); 322 req.AddUnitTypeRequirement(new UnitType("id2", "Type 2", race), 2);
320 return req; 323 return req;