Mercurial > repos > IBDev-IBBoard.WarFoundry.API.Tests
comparison API/Objects/Requirement/RequiresNUnitsForMObjectsRequirementTest.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 | |
children |
comparison
equal
deleted
inserted
replaced
207:27f163bf884a | 208:c323770e61c2 |
---|---|
1 // This file (UnitRequiresNUnitsForMObjectsRequirement.cs) is a part of the IBBoard.WarFoundry.API.Tests project and is copyright 2011 IBBoard | |
2 // | |
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. | |
4 using System; | |
5 using NUnit.Framework; | |
6 using IBBoard.WarFoundry.API.Objects.Mock; | |
7 using NUnit.Framework.SyntaxHelpers; | |
8 using System.Reflection; | |
9 using IBBoard.NUnit; | |
10 using IBBoard.WarFoundry.API.Factories; | |
11 | |
12 namespace IBBoard.WarFoundry.API.Objects.Requirement | |
13 { | |
14 public abstract class RequiresNUnitsForMObjectsRequirementTest : AbstractEqualityTest<RequiresNUnitsForMObjectsRequirement<UnitType>> | |
15 { | |
16 private MockRace mockRace; | |
17 private UnitType unitType1; | |
18 private UnitType unitType2; | |
19 private UnitType unitType3; | |
20 private UnitType unitType4; | |
21 | |
22 [TestFixtureSetUp()] | |
23 public void SetupRace() | |
24 { | |
25 mockRace = MockRace.GetMockRace(); | |
26 unitType1 = new MockUnitType("type1", "Unit Type 1"); | |
27 mockRace.AddUnitType(unitType1); | |
28 unitType2 = new MockUnitType("type2", "Unit Type 2"); | |
29 mockRace.AddUnitType(unitType2); | |
30 unitType3 = new MockUnitType("type3", "Unit Type 3"); | |
31 mockRace.AddUnitType(unitType3); | |
32 unitType4 = new MockUnitType("type4", "Unit Type 4"); | |
33 mockRace.AddUnitType(unitType4); | |
34 } | |
35 | |
36 [Test()] | |
37 public void TestAddingUnrelatedUnitWithNoUnitsAndOneUnitTypeRequiredIsNA() | |
38 { | |
39 Army army = new Army(mockRace, "Test", 1000); | |
40 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2); | |
41 Unit unit = CreateUnitOfType(unitType3, army); | |
42 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.NotApplicable)); | |
43 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
44 } | |
45 | |
46 [Test()] | |
47 public void TestAddingOneUnitWithOneUnitTypeRequiredAndOneUnitOfTypePasses() | |
48 { | |
49 Army army = new Army(mockRace, "Test", 1000); | |
50 AddUnitOfTypeToArmy(unitType2, army); | |
51 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2); | |
52 Unit unit = CreateUnitOfType(unitType1, army); | |
53 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
54 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
55 } | |
56 | |
57 [Test()] | |
58 public void TestAddingOneUnitWithOneUnitTypeRequiredAndNoUnitOfTypeFails() | |
59 { | |
60 Army army = new Army(mockRace, "Test", 1000); | |
61 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2); | |
62 Unit unit = CreateUnitOfType(unitType1, army); | |
63 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
64 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 1 × " + unitType1.Name + " (would have 0 for 1).")); | |
65 } | |
66 | |
67 [Test()] | |
68 public void TestAddingOneUnitWithTwoDifferentUnitTypesRequiredAndNoUnitOfOneTypeFails() | |
69 { | |
70 Army army = new Army(mockRace, "Test", 1000); | |
71 AddUnitOfTypeToArmy(unitType2, army); | |
72 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
73 req.AddUnitTypeRequirement(unitType2); | |
74 req.AddUnitTypeRequirement(unitType3); | |
75 Unit unit = CreateUnitOfType(unitType1, army); | |
76 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
77 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType3.Name + " for every 1 × " + unitType1.Name + " (would have 0 for 1).")); | |
78 } | |
79 | |
80 [Test()] | |
81 public void TestAddingTwoUnitsWithOneUnitTypeRequiredAndOneUnitOfTypeFails() | |
82 { | |
83 Army army = new Army(mockRace, "Test", 1000); | |
84 AddUnitOfTypeToArmy(unitType2, army); | |
85 AddUnitOfTypeToArmy(unitType1, army); | |
86 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2); | |
87 Unit unit = CreateUnitOfType(unitType1, army); | |
88 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
89 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 1 × " + unitType1.Name + " (would have 1 for 2).")); | |
90 } | |
91 | |
92 [Test()] | |
93 public void TestAddingTwoUnitsWithTwoOfUnitTypeAllowedForOneUnitTypeRequiredAndOneUnitOfTypePasses() | |
94 { | |
95 Army army = new Army(mockRace, "Test", 1000); | |
96 AddUnitOfTypeToArmy(unitType2, army); | |
97 AddUnitOfTypeToArmy(unitType1, army); | |
98 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
99 req.AddUnitTypeRequirement(unitType2, 1, 2); | |
100 Unit unit = CreateUnitOfType(unitType1, army); | |
101 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
102 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
103 } | |
104 | |
105 [Test()] | |
106 public void TestAddingTwoUnitsWithTwoAllowedAndOneAllowedForDifferentTypesFails() | |
107 { | |
108 Army army = new Army(mockRace, "Test", 1000); | |
109 AddUnitOfTypeToArmy(unitType2, army); | |
110 AddUnitOfTypeToArmy(unitType3, army); | |
111 AddUnitOfTypeToArmy(unitType1, army); | |
112 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
113 req.AddUnitTypeRequirement(unitType2, 1, 2); | |
114 req.AddUnitTypeRequirement(unitType3, 1, 1); | |
115 Unit unit = CreateUnitOfType(unitType1, army); | |
116 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
117 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType3.Name + " for every 1 × " + unitType1.Name + " (would have 1 for 2).")); | |
118 } | |
119 | |
120 [Test()] | |
121 public void TestAddingSecondUnitsWithOneAllowedForTwoTypesFails() | |
122 { | |
123 Army army = new Army(mockRace, "Test", 1000); | |
124 AddUnitOfTypeToArmy(unitType2, army); | |
125 AddUnitOfTypeToArmy(unitType3, army); | |
126 AddUnitOfTypeToArmy(unitType1, army); | |
127 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
128 req.AddUnitTypeRequirement(unitType2, 1, 1); | |
129 req.AddUnitTypeRequirement(unitType3, 1, 1); | |
130 Unit unit = CreateUnitOfType(unitType1, army); | |
131 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
132 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 1 × " + unitType1.Name + " (would have 1 for 2); 1 × " + unitType3.Name + " for every 1 × " + unitType1.Name + " (would have 1 for 2).")); | |
133 } | |
134 | |
135 [Test()] | |
136 public void TestAddingSecondUnitsWithOneAllowedForTwoTypesFails_ShorthandMethod() | |
137 { | |
138 Army army = new Army(mockRace, "Test", 1000); | |
139 AddUnitOfTypeToArmy(unitType2, army); | |
140 AddUnitOfTypeToArmy(unitType3, army); | |
141 AddUnitOfTypeToArmy(unitType1, army); | |
142 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2, unitType3); | |
143 Unit unit = CreateUnitOfType(unitType1, army); | |
144 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
145 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 1 × " + unitType1.Name + " (would have 1 for 2); 1 × " + unitType3.Name + " for every 1 × " + unitType1.Name + " (would have 1 for 2).")); | |
146 } | |
147 | |
148 [Test()] | |
149 public void TestAddingThreeUnitsWithTwoOfUnitTypeAllowedForOneUnitTypeRequiredAndOneUnitOfTypeFails() | |
150 { | |
151 Army army = new Army(mockRace, "Test", 1000); | |
152 AddUnitOfTypeToArmy(unitType2, army); | |
153 AddUnitOfTypeToArmy(unitType1, army); | |
154 AddUnitOfTypeToArmy(unitType1, army); | |
155 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
156 req.AddUnitTypeRequirement(unitType2, 1, 2); | |
157 Unit unit = CreateUnitOfType(unitType1, army); | |
158 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
159 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 2 × " + unitType1.Name + " (would have 1 for 3).")); | |
160 } | |
161 | |
162 [Test()] | |
163 public void TestAddingOneUnitWithThreeOfUnitTypeAllowedForTwoOfUnitTypeRequiredAndOneUnitOfTypeFails() | |
164 { | |
165 Army army = new Army(mockRace, "Test", 1000); | |
166 AddUnitOfTypeToArmy(unitType2, army); | |
167 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
168 req.AddUnitTypeRequirement(unitType2, 2, 3); | |
169 Unit unit = CreateUnitOfType(unitType1, army); | |
170 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
171 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 2 × " + unitType2.Name + " for every 3 × " + unitType1.Name + " (would have 1 for 1).")); | |
172 } | |
173 | |
174 [Test()] | |
175 public void TestAddingSecondUnitWithThreeOfUnitTypeAllowedForTwoOfUnitTypeRequiredAndOneUnitOfTypeFails() | |
176 { | |
177 Army army = new Army(mockRace, "Test", 1000); | |
178 AddUnitOfTypeToArmy(unitType2, army); | |
179 AddUnitOfTypeToArmy(unitType1, army); | |
180 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
181 req.AddUnitTypeRequirement(unitType2, 2, 3); | |
182 Unit unit = CreateUnitOfType(unitType1, army); | |
183 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
184 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 2 × " + unitType2.Name + " for every 3 × " + unitType1.Name + " (would have 1 for 2).")); | |
185 } | |
186 | |
187 [Test()] | |
188 public void TestAddingFourthUnitWithThreeOfUnitTypeAllowedForTwoOfUnitTypeRequiredAndThreeUnitsOfTypeFails() | |
189 { | |
190 Army army = new Army(mockRace, "Test", 1000); | |
191 AddUnitsOfTypeToArmy(3, unitType2, army); | |
192 AddUnitsOfTypeToArmy(3, unitType1, army); | |
193 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
194 req.AddUnitTypeRequirement(unitType2, 2, 3); | |
195 Unit unit = CreateUnitOfType(unitType1, army); | |
196 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
197 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 2 × " + unitType2.Name + " for every 3 × " + unitType1.Name + " (would have 3 for 4).")); | |
198 } | |
199 | |
200 [Test()] | |
201 public void TestAddingUnrelatedUnitWithNoUnitsAndTwoCombinedUnitTypesRequiredIsNA() | |
202 { | |
203 Army army = new Army(mockRace, "Test", 1000); | |
204 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
205 req.AddUnitTypeRequirement(unitType2, unitType3); | |
206 Unit unit = CreateUnitOfType(unitType4, army); | |
207 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.NotApplicable)); | |
208 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
209 } | |
210 | |
211 [Test()] | |
212 public void TestAddingOneUnitWithTwoUnitTypeComboRequiredAndUnitOfOneTypePasses() | |
213 { | |
214 Army army = new Army(mockRace, "Test", 1000); | |
215 AddUnitOfTypeToArmy(unitType2, army); | |
216 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
217 req.AddUnitTypeRequirement(unitType2, unitType3); | |
218 Unit unit = CreateUnitOfType(unitType1, army); | |
219 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
220 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
221 } | |
222 | |
223 [Test()] | |
224 public void TestAddingOneUnitWithTwoUnitTypeComboRequiredAndUnitOfOtherTypePasses() | |
225 { | |
226 Army army = new Army(mockRace, "Test", 1000); | |
227 AddUnitOfTypeToArmy(unitType3, army); | |
228 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
229 req.AddUnitTypeRequirement(unitType2, unitType3); | |
230 Unit unit = CreateUnitOfType(unitType1, army); | |
231 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
232 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
233 } | |
234 | |
235 [Test()] | |
236 public void TestAddingTwoUnitsWithTwoUnitTypeComboRequiredAndOneUnitOfBothTypesPasses() | |
237 { | |
238 Army army = new Army(mockRace, "Test", 1000); | |
239 AddUnitOfTypeToArmy(unitType3, army); | |
240 AddUnitOfTypeToArmy(unitType2, army); | |
241 AddUnitOfTypeToArmy(unitType1, army); | |
242 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
243 req.AddUnitTypeRequirement(unitType2, unitType3); | |
244 Unit unit = CreateUnitOfType(unitType1, army); | |
245 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
246 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
247 } | |
248 | |
249 [Test()] | |
250 public void TestAddingTwoUnitsWithTwoUnitTypeComboRequiredAndTwoUnitsOfOneTypePasses() | |
251 { | |
252 Army army = new Army(mockRace, "Test", 1000); | |
253 AddUnitOfTypeToArmy(unitType3, army); | |
254 AddUnitOfTypeToArmy(unitType3, army); | |
255 AddUnitOfTypeToArmy(unitType1, army); | |
256 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
257 req.AddUnitTypeRequirement(unitType2, unitType3); | |
258 Unit unit = CreateUnitOfType(unitType1, army); | |
259 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
260 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
261 } | |
262 | |
263 [Test()] | |
264 public void TestAddingTwoUnitsWithTwoUnitTypeComboRequiredAndTwoUnitsOfOtherTypePasses() | |
265 { | |
266 Army army = new Army(mockRace, "Test", 1000); | |
267 AddUnitOfTypeToArmy(unitType2, army); | |
268 AddUnitOfTypeToArmy(unitType2, army); | |
269 AddUnitOfTypeToArmy(unitType1, army); | |
270 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
271 req.AddUnitTypeRequirement(unitType2, unitType3); | |
272 Unit unit = CreateUnitOfType(unitType1, army); | |
273 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
274 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
275 } | |
276 | |
277 [Test()] | |
278 public void TestAddingThreeUnitsWithTwoUnitTypeComboRequiredAndOneUnitOfBothTypesFails() | |
279 { | |
280 Army army = new Army(mockRace, "Test", 1000); | |
281 AddUnitOfTypeToArmy(unitType3, army); | |
282 AddUnitOfTypeToArmy(unitType2, army); | |
283 AddUnitOfTypeToArmy(unitType1, army); | |
284 AddUnitOfTypeToArmy(unitType1, army); | |
285 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
286 req.AddUnitTypeRequirement(unitType2, unitType3); | |
287 Unit unit = CreateUnitOfType(unitType1, army); | |
288 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
289 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 1 × " + unitType1.Name + " (would have 2 for 3).")); | |
290 } | |
291 | |
292 [Test()] | |
293 public void TestAddingThreeUnitsWithTwoUnitTypeComboRequiredAndTwoUnitsOfOneTypeFails() | |
294 { | |
295 Army army = new Army(mockRace, "Test", 1000); | |
296 AddUnitOfTypeToArmy(unitType3, army); | |
297 AddUnitOfTypeToArmy(unitType3, army); | |
298 AddUnitOfTypeToArmy(unitType1, army); | |
299 AddUnitOfTypeToArmy(unitType1, army); | |
300 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
301 req.AddUnitTypeRequirement(unitType2, unitType3); | |
302 Unit unit = CreateUnitOfType(unitType1, army); | |
303 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
304 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 1 × " + unitType1.Name + " (would have 2 for 3).")); | |
305 } | |
306 | |
307 [Test()] | |
308 public void TestAddingThreeUnitsWithTwoUnitTypeComboRequiredAndTwoUnitsOfOtherTypeFails() | |
309 { | |
310 Army army = new Army(mockRace, "Test", 1000); | |
311 AddUnitOfTypeToArmy(unitType2, army); | |
312 AddUnitOfTypeToArmy(unitType2, army); | |
313 AddUnitOfTypeToArmy(unitType1, army); | |
314 AddUnitOfTypeToArmy(unitType1, army); | |
315 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
316 req.AddUnitTypeRequirement(unitType2, unitType3); | |
317 Unit unit = CreateUnitOfType(unitType1, army); | |
318 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
319 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 1 × " + unitType1.Name + " (would have 2 for 3).")); | |
320 } | |
321 | |
322 [Test()] | |
323 public void TestAddingUnrelatedUnitWithNoUnitsAndThreeForEachTwoCombinedUnitTypesRequiredIsNA() | |
324 { | |
325 Army army = new Army(mockRace, "Test", 1000); | |
326 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
327 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
328 Unit unit = CreateUnitOfType(unitType4, army); | |
329 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.NotApplicable)); | |
330 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
331 } | |
332 | |
333 [Test()] | |
334 public void TestAddingThirdUnitWithThreeForEachTwoUnitTypeComboRequiredAndUnitOfOneTypePasses() | |
335 { | |
336 Army army = new Army(mockRace, "Test", 1000); | |
337 AddUnitOfTypeToArmy(unitType2, army); | |
338 AddUnitsOfTypeToArmy(2, unitType1, army); | |
339 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
340 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
341 Unit unit = CreateUnitOfType(unitType1, army); | |
342 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
343 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
344 } | |
345 | |
346 [Test()] | |
347 public void TestAddingThirdUnitWithThreeForEachTwoUnitTypeComboRequiredAndUnitOfOtherTypePasses() | |
348 { | |
349 Army army = new Army(mockRace, "Test", 1000); | |
350 AddUnitOfTypeToArmy(unitType3, army); | |
351 AddUnitsOfTypeToArmy(2, unitType1, army); | |
352 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
353 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
354 Unit unit = CreateUnitOfType(unitType1, army); | |
355 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
356 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
357 } | |
358 | |
359 [Test()] | |
360 public void TestAddingSixthUnitWithThreeForEachTwoUnitTypeComboRequiredAndOneUnitOfBothTypesPasses() | |
361 { | |
362 Army army = new Army(mockRace, "Test", 1000); | |
363 AddUnitOfTypeToArmy(unitType3, army); | |
364 AddUnitOfTypeToArmy(unitType2, army); | |
365 AddUnitsOfTypeToArmy(5, unitType1, army); | |
366 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
367 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
368 Unit unit = CreateUnitOfType(unitType1, army); | |
369 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
370 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
371 } | |
372 | |
373 [Test()] | |
374 public void TestAddingSixthUnitWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOneTypePasses() | |
375 { | |
376 Army army = new Army(mockRace, "Test", 1000); | |
377 AddUnitsOfTypeToArmy(2, unitType3, army); | |
378 AddUnitsOfTypeToArmy(5, unitType1, army); | |
379 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
380 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
381 Unit unit = CreateUnitOfType(unitType1, army); | |
382 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
383 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
384 } | |
385 | |
386 [Test()] | |
387 public void TestAddingSixthUnitWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOtherTypePasses() | |
388 { | |
389 Army army = new Army(mockRace, "Test", 1000); | |
390 AddUnitsOfTypeToArmy(2, unitType2, army); | |
391 AddUnitsOfTypeToArmy(5, unitType1, army); | |
392 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
393 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
394 Unit unit = CreateUnitOfType(unitType1, army); | |
395 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); | |
396 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty); | |
397 } | |
398 | |
399 [Test()] | |
400 public void TestAddingSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndOneUnitOfBothTypesFails() | |
401 { | |
402 Army army = new Army(mockRace, "Test", 1000); | |
403 AddUnitOfTypeToArmy(unitType3, army); | |
404 AddUnitOfTypeToArmy(unitType2, army); | |
405 AddUnitsOfTypeToArmy(6, unitType1, army); | |
406 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
407 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
408 Unit unit = CreateUnitOfType(unitType1, army); | |
409 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
410 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 3 × " + unitType1.Name + " (would have 2 for 7).")); | |
411 } | |
412 | |
413 [Test()] | |
414 public void TestAddingSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOneTypeFails() | |
415 { | |
416 Army army = new Army(mockRace, "Test", 1000); | |
417 AddUnitsOfTypeToArmy(2, unitType3, army); | |
418 AddUnitsOfTypeToArmy(6, unitType1, army); | |
419 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
420 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
421 Unit unit = CreateUnitOfType(unitType1, army); | |
422 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
423 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 3 × " + unitType1.Name + " (would have 2 for 7).")); | |
424 } | |
425 | |
426 [Test()] | |
427 public void TestAddingSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOtherTypeFails() | |
428 { | |
429 Army army = new Army(mockRace, "Test", 1000); | |
430 AddUnitsOfTypeToArmy(2, unitType2, army); | |
431 AddUnitsOfTypeToArmy(6, unitType1, army); | |
432 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
433 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
434 Unit unit = CreateUnitOfType(unitType1, army); | |
435 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); | |
436 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 3 × " + unitType1.Name + " (would have 2 for 7).")); | |
437 } | |
438 | |
439 [Test()] | |
440 public void TestValidatingArmyWithNoUnitsAndOneUnitTypeRequiredIsNA() | |
441 { | |
442 Army army = new Army(mockRace, "Test", 1000); | |
443 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2); | |
444 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.NotApplicable)); | |
445 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
446 } | |
447 | |
448 [Test()] | |
449 public void TestValidatingArmyWithOneUnitTypeRequiredAndOneUnitOfTypePasses() | |
450 { | |
451 Army army = new Army(mockRace, "Test", 1000); | |
452 AddUnitOfTypeToArmy(unitType2, army); | |
453 AddUnitOfTypeToArmy(unitType1, army); | |
454 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2); | |
455 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); | |
456 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
457 } | |
458 | |
459 [Test()] | |
460 public void TestValidatingArmyWithOneUnitTypeRequiredAndNoUnitOfTypeFails() | |
461 { | |
462 Army army = new Army(mockRace, "Test", 1000); | |
463 AddUnitOfTypeToArmy(unitType1, army); | |
464 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2); | |
465 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
466 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 1 × " + unitType1.Name + " (have 0 for 1).")); | |
467 } | |
468 | |
469 [Test()] | |
470 public void TestValidatingArmyWithTwoDifferentUnitTypesRequiredAndNoUnitOfOneTypeFails() | |
471 { | |
472 Army army = new Army(mockRace, "Test", 1000); | |
473 AddUnitOfTypeToArmy(unitType2, army); | |
474 AddUnitOfTypeToArmy(unitType1, army); | |
475 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
476 req.AddUnitTypeRequirement(unitType2); | |
477 req.AddUnitTypeRequirement(unitType3); | |
478 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
479 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType3.Name + " for every 1 × " + unitType1.Name + " (have 0 for 1).")); | |
480 } | |
481 | |
482 [Test()] | |
483 public void TestValidatingArmyWithTwoUnitsAndOneUnitTypeRequiredAndOneUnitOfTypeFails() | |
484 { | |
485 Army army = new Army(mockRace, "Test", 1000); | |
486 AddUnitOfTypeToArmy(unitType2, army); | |
487 AddUnitOfTypeToArmy(unitType1, army); | |
488 AddUnitOfTypeToArmy(unitType1, army); | |
489 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2); | |
490 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
491 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 1 × " + unitType1.Name + " (have 1 for 2).")); | |
492 } | |
493 | |
494 [Test()] | |
495 public void TestValidatingArmyWithTwoUnitsAndTwoOfUnitTypeAllowedForOneUnitTypeRequiredAndOneUnitOfTypePasses() | |
496 { | |
497 Army army = new Army(mockRace, "Test", 1000); | |
498 AddUnitOfTypeToArmy(unitType2, army); | |
499 AddUnitOfTypeToArmy(unitType1, army); | |
500 AddUnitOfTypeToArmy(unitType1, army); | |
501 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
502 req.AddUnitTypeRequirement(unitType2, 1, 2); | |
503 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); | |
504 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
505 } | |
506 | |
507 [Test()] | |
508 public void TestValidatingArmyWithTwoUnitsWithTwoAllowedAndOneAllowedForDifferentTypesFails() | |
509 { | |
510 Army army = new Army(mockRace, "Test", 1000); | |
511 AddUnitOfTypeToArmy(unitType2, army); | |
512 AddUnitOfTypeToArmy(unitType3, army); | |
513 AddUnitOfTypeToArmy(unitType1, army); | |
514 AddUnitOfTypeToArmy(unitType1, army); | |
515 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
516 req.AddUnitTypeRequirement(unitType2, 1, 2); | |
517 req.AddUnitTypeRequirement(unitType3, 1, 1); | |
518 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
519 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType3.Name + " for every 1 × " + unitType1.Name + " (have 1 for 2).")); | |
520 } | |
521 | |
522 [Test()] | |
523 public void TestValidatingArmyWithTwoUnitsWithOneAllowedForTwoTypesFails() | |
524 { | |
525 Army army = new Army(mockRace, "Test", 1000); | |
526 AddUnitOfTypeToArmy(unitType2, army); | |
527 AddUnitOfTypeToArmy(unitType3, army); | |
528 AddUnitOfTypeToArmy(unitType1, army); | |
529 AddUnitOfTypeToArmy(unitType1, army); | |
530 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
531 req.AddUnitTypeRequirement(unitType2, 1, 1); | |
532 req.AddUnitTypeRequirement(unitType3, 1, 1); | |
533 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
534 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 1 × " + unitType1.Name + " (have 1 for 2); 1 × " + unitType3.Name + " for every 1 × " + unitType1.Name + " (have 1 for 2).")); | |
535 } | |
536 | |
537 [Test()] | |
538 public void TestValidatingArmyWithTwoUnitsWithOneAllowedForTwoTypesFails_ShorthandMethod() | |
539 { | |
540 Army army = new Army(mockRace, "Test", 1000); | |
541 AddUnitOfTypeToArmy(unitType2, army); | |
542 AddUnitOfTypeToArmy(unitType3, army); | |
543 AddUnitOfTypeToArmy(unitType1, army); | |
544 AddUnitOfTypeToArmy(unitType1, army); | |
545 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1, unitType2, unitType3); | |
546 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
547 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 1 × " + unitType1.Name + " (have 1 for 2); 1 × " + unitType3.Name + " for every 1 × " + unitType1.Name + " (have 1 for 2).")); | |
548 } | |
549 | |
550 [Test()] | |
551 public void TestValidatingArmyWithOneUnitWithThreeOfUnitTypeAllowedForTwoOfUnitTypeRequiredAndOneUnitOfTypeFails() | |
552 { | |
553 Army army = new Army(mockRace, "Test", 1000); | |
554 AddUnitOfTypeToArmy(unitType2, army); | |
555 AddUnitOfTypeToArmy(unitType1, army); | |
556 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
557 req.AddUnitTypeRequirement(unitType2, 2, 3); | |
558 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
559 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 2 × " + unitType2.Name + " for every 3 × " + unitType1.Name + " (have 1 for 1).")); | |
560 } | |
561 | |
562 [Test()] | |
563 public void TestValidatingArmyWithTwoUnitsWithThreeOfUnitTypeAllowedForTwoOfUnitTypeRequiredAndOneUnitOfTypeFails() | |
564 { | |
565 Army army = new Army(mockRace, "Test", 1000); | |
566 AddUnitOfTypeToArmy(unitType2, army); | |
567 AddUnitsOfTypeToArmy(2, unitType1, army); | |
568 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
569 req.AddUnitTypeRequirement(unitType2, 2, 3); | |
570 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
571 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 2 × " + unitType2.Name + " for every 3 × " + unitType1.Name + " (have 1 for 2).")); | |
572 } | |
573 | |
574 [Test()] | |
575 public void TestValidatingArmyWithFourUnitsWithThreeOfUnitTypeAllowedForTwoOfUnitTypeRequiredAndThreeUnitsOfTypeFails() | |
576 { | |
577 Army army = new Army(mockRace, "Test", 1000); | |
578 AddUnitsOfTypeToArmy(3, unitType2, army); | |
579 AddUnitsOfTypeToArmy(4, unitType1, army); | |
580 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
581 req.AddUnitTypeRequirement(unitType2, 2, 3); | |
582 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
583 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 2 × " + unitType2.Name + " for every 3 × " + unitType1.Name + " (have 3 for 4).")); | |
584 } | |
585 | |
586 [Test()] | |
587 public void TestValidatingArmyWithThreeUnitsAndTwoOfUnitTypeAllowedForOneUnitTypeRequiredAndOneUnitOfTypeFails() | |
588 { | |
589 Army army = new Army(mockRace, "Test", 1000); | |
590 AddUnitOfTypeToArmy(unitType2, army); | |
591 AddUnitOfTypeToArmy(unitType1, army); | |
592 AddUnitOfTypeToArmy(unitType1, army); | |
593 AddUnitOfTypeToArmy(unitType1, army); | |
594 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
595 req.AddUnitTypeRequirement(unitType2, 1, 2); | |
596 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
597 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " for every 2 × " + unitType1.Name + " (have 1 for 3).")); | |
598 } | |
599 | |
600 [Test()] | |
601 public void TestValidatingArmyWithNoUnitsAndThreeForEachTwoCombinedUnitTypesRequiredIsNA() | |
602 { | |
603 Army army = new Army(mockRace, "Test", 1000); | |
604 AddUnitOfTypeToArmy(unitType4, army); | |
605 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
606 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
607 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.NotApplicable)); | |
608 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
609 } | |
610 | |
611 [Test()] | |
612 public void TestValidatingArmyWithThreeUnitsWithThreeForEachTwoUnitTypeComboRequiredAndUnitOfOneTypePasses() | |
613 { | |
614 Army army = new Army(mockRace, "Test", 1000); | |
615 AddUnitOfTypeToArmy(unitType2, army); | |
616 AddUnitsOfTypeToArmy(3, unitType1, army); | |
617 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
618 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
619 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); | |
620 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
621 } | |
622 | |
623 [Test()] | |
624 public void TestValidatingArmyWithThreeUnitsWithThreeForEachTwoUnitTypeComboRequiredAndUnitOfOtherTypePasses() | |
625 { | |
626 Army army = new Army(mockRace, "Test", 1000); | |
627 AddUnitOfTypeToArmy(unitType3, army); | |
628 AddUnitsOfTypeToArmy(3, unitType1, army); | |
629 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
630 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
631 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); | |
632 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
633 } | |
634 | |
635 [Test()] | |
636 public void TestValidatingArmyWithSixUnitsWithThreeForEachTwoUnitTypeComboRequiredAndOneUnitOfBothTypesPasses() | |
637 { | |
638 Army army = new Army(mockRace, "Test", 1000); | |
639 AddUnitOfTypeToArmy(unitType3, army); | |
640 AddUnitOfTypeToArmy(unitType2, army); | |
641 AddUnitsOfTypeToArmy(6, unitType1, army); | |
642 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
643 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
644 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); | |
645 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
646 } | |
647 | |
648 [Test()] | |
649 public void TestValidatingArmyWithSixUnitsWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOneTypePasses() | |
650 { | |
651 Army army = new Army(mockRace, "Test", 1000); | |
652 AddUnitsOfTypeToArmy(2, unitType3, army); | |
653 AddUnitsOfTypeToArmy(6, unitType1, army); | |
654 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
655 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
656 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); | |
657 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
658 } | |
659 | |
660 [Test()] | |
661 public void TestValidatingArmyWithSixUnitsWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOtherTypePasses() | |
662 { | |
663 Army army = new Army(mockRace, "Test", 1000); | |
664 AddUnitsOfTypeToArmy(2, unitType2, army); | |
665 AddUnitsOfTypeToArmy(6, unitType1, army); | |
666 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
667 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
668 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); | |
669 Assert.That(req.GetValidationMessage(army), Is.Empty); | |
670 } | |
671 | |
672 [Test()] | |
673 public void TestValidatingArmyWithSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndOneUnitOfBothTypesFails() | |
674 { | |
675 Army army = new Army(mockRace, "Test", 1000); | |
676 AddUnitOfTypeToArmy(unitType3, army); | |
677 AddUnitOfTypeToArmy(unitType2, army); | |
678 AddUnitsOfTypeToArmy(7, unitType1, army); | |
679 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
680 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
681 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
682 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 3 × " + unitType1.Name + " (have 2 for 7).")); | |
683 } | |
684 | |
685 [Test()] | |
686 public void TestValidatingArmyWithSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOneTypeFails() | |
687 { | |
688 Army army = new Army(mockRace, "Test", 1000); | |
689 AddUnitsOfTypeToArmy(2, unitType3, army); | |
690 AddUnitsOfTypeToArmy(7, unitType1, army); | |
691 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
692 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
693 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
694 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 3 × " + unitType1.Name + " (have 2 for 7).")); | |
695 } | |
696 | |
697 [Test()] | |
698 public void TestValidatingArmyWithSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOtherTypeFails() | |
699 { | |
700 Army army = new Army(mockRace, "Test", 1000); | |
701 AddUnitsOfTypeToArmy(2, unitType2, army); | |
702 AddUnitsOfTypeToArmy(7, unitType1, army); | |
703 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType1); | |
704 req.AddUnitTypeRequirement(3, unitType2, unitType3); | |
705 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); | |
706 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " for every 3 × " + unitType1.Name + " (have 2 for 7).")); | |
707 } | |
708 | |
709 private static void AddUnitsOfTypeToArmy(int count, UnitType unitType, Army army) | |
710 { | |
711 for (int i = 0; i < count; i++) | |
712 { | |
713 AddUnitOfTypeToArmy(unitType, army); | |
714 } | |
715 } | |
716 | |
717 private static void AddUnitOfTypeToArmy(UnitType unitType, Army army) | |
718 { | |
719 army.AddUnit(CreateUnitOfType(unitType, army)); | |
720 } | |
721 | |
722 private static Unit CreateUnitOfType(UnitType unitType, Army army) | |
723 { | |
724 return new Unit(unitType, army.GetCategory(unitType.MainCategory)); | |
725 } | |
726 | |
727 public override RequiresNUnitsForMObjectsRequirement<UnitType> GetObject() | |
728 { | |
729 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType3); | |
730 req.AddUnitTypeRequirement(unitType1, 2, 3); | |
731 return req; | |
732 } | |
733 | |
734 public override RequiresNUnitsForMObjectsRequirement<UnitType> GetSameObject() | |
735 { | |
736 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType3); | |
737 req.AddUnitTypeRequirement(unitType1, 2, 3); | |
738 return req; | |
739 } | |
740 | |
741 public override RequiresNUnitsForMObjectsRequirement<UnitType> GetDifferentObject() | |
742 { | |
743 RequiresNUnitsForMObjectsRequirement<UnitType> req = CreateRequirement(unitType3); | |
744 DummyWarFoundryFactory factory = new DummyWarFoundryFactory(); | |
745 GameSystem gameSystem = new GameSystem("system", "system", factory); | |
746 Race race = new Race("race", "race", gameSystem, factory); | |
747 req.AddUnitTypeRequirement(new UnitType("id2", "Type 2", race), 2, 3); | |
748 return req; | |
749 } | |
750 | |
751 protected abstract RequiresNUnitsForMObjectsRequirement<UnitType> CreateRequirement(UnitType allowedType, params UnitType[] requiredUnitTypes); | |
752 } | |
753 } | |
754 |