comparison API/Objects/Requirement/UnitRequiresAtLeastNUnitsRequirementTest.cs @ 221:c40cb2048fc3

Re #394: * Fix UnitRequiresNUnitsForMUnitsRequirementTests unit test so it actually does test the other value * Add tests to "requires at least N" requirement and factory to test alternatives (Rollcall's "-1,X|Y" notation)
author IBBoard <dev@ibboard.co.uk>
date Sat, 24 Mar 2012 20:34:42 +0000
parents 9bf34e88da89
children
comparison
equal deleted inserted replaced
220:0fa634c6391b 221:c40cb2048fc3
31 } 31 }
32 32
33 [Test()] 33 [Test()]
34 public void TestAddingUnitTypeWithNoUnitsAndTwoUnitTypesRequired() 34 public void TestAddingUnitTypeWithNoUnitsAndTwoUnitTypesRequired()
35 { 35 {
36 //Rollcall's "-1,X,-1,Y" requirement - unlimited once you have one of both
36 Army army = new Army(mockRace, "Test", 1000); 37 Army army = new Army(mockRace, "Test", 1000);
37 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); 38 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
38 req.AddUnitTypeRequirement(unitType2); 39 req.AddUnitTypeRequirement(unitType2);
39 req.AddUnitTypeRequirement(unitType3); 40 req.AddUnitTypeRequirement(unitType3);
40 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 1 × " + unitType2.Name + " (would have 0); 1 × " + unitType3.Name + " (would have 0)."); 41 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 1 × " + unitType2.Name + " (would have 0); 1 × " + unitType3.Name + " (would have 0).");
41 } 42 }
42 43
43 [Test()] 44 [Test()]
44 public void TestAddingUnitTypeWithOneUnitAndTwoUnitTypesRequired() 45 public void TestAddingUnitTypeWithOneUnitAndTwoUnitTypesRequired()
45 { 46 {
47 //Rollcall's "-1,X,-1,Y" requirement - unlimited once you have one of both
46 Army army = new Army(mockRace, "Test", 1000); 48 Army army = new Army(mockRace, "Test", 1000);
47 AddUnitOfTypeToArmy(unitType2, army); 49 AddUnitOfTypeToArmy(unitType2, army);
48 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); 50 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
49 req.AddUnitTypeRequirement(unitType2); 51 req.AddUnitTypeRequirement(unitType2);
50 req.AddUnitTypeRequirement(unitType3); 52 req.AddUnitTypeRequirement(unitType3);
52 } 54 }
53 55
54 [Test()] 56 [Test()]
55 public void TestAddingUnitTypeWithOtherOneUnitAndTwoUnitTypesRequired() 57 public void TestAddingUnitTypeWithOtherOneUnitAndTwoUnitTypesRequired()
56 { 58 {
59 //Rollcall's "-1,X,-1,Y" requirement - unlimited once you have one of both
57 Army army = new Army(mockRace, "Test", 1000); 60 Army army = new Army(mockRace, "Test", 1000);
58 AddUnitOfTypeToArmy(unitType3, army); 61 AddUnitOfTypeToArmy(unitType3, army);
59 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); 62 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
60 req.AddUnitTypeRequirement(unitType2); 63 req.AddUnitTypeRequirement(unitType2);
61 req.AddUnitTypeRequirement(unitType3); 64 req.AddUnitTypeRequirement(unitType3);
63 } 66 }
64 67
65 [Test()] 68 [Test()]
66 public void TestAddingUnitTypeWithBothUnitsAndTwoUnitTypesRequired() 69 public void TestAddingUnitTypeWithBothUnitsAndTwoUnitTypesRequired()
67 { 70 {
71 //Rollcall's "-1,X,-1,Y" requirement - unlimited once you have one of both
68 Army army = new Army(mockRace, "Test", 1000); 72 Army army = new Army(mockRace, "Test", 1000);
69 AddUnitOfTypeToArmy(unitType2, army); 73 AddUnitOfTypeToArmy(unitType2, army);
70 AddUnitOfTypeToArmy(unitType3, army); 74 AddUnitOfTypeToArmy(unitType3, army);
71 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); 75 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
72 req.AddUnitTypeRequirement(unitType2); 76 req.AddUnitTypeRequirement(unitType2);
134 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " (would have 1)."); 138 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " (would have 1).");
135 AddUnitOfTypeToArmy(unitType2, army); 139 AddUnitOfTypeToArmy(unitType2, army);
136 Assert_That__PassesAdding(req, unitType1, army); 140 Assert_That__PassesAdding(req, unitType1, army);
137 } 141 }
138 142
143 [Test]
144 public void TestAddingRequirementWithOR()
145 {
146 //Rollcall's "-1,X|Y" requirement - unlimited for one of either
147 Army army = new Army(mockRace, "Test", 1000);
148 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
149 req.AddUnitTypeRequirement(unitType2, unitType3);
150 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " (would have 0).");
151 AddUnitOfTypeToArmy(unitType2, army);
152 Assert_That__PassesAdding(req, unitType1, army);
153 }
154
155 [Test]
156 public void TestAddingRequirementWithORWithOtherUnit()
157 {
158 //Rollcall's "-1,X|Y" requirement - unlimited for one of either
159 Army army = new Army(mockRace, "Test", 1000);
160 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
161 req.AddUnitTypeRequirement(unitType2, unitType3);
162 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " (would have 0).");
163 AddUnitOfTypeToArmy(unitType3, army);
164 Assert_That__PassesAdding(req, unitType1, army);
165 }
166
167 [Test]
168 public void TestAddingRequirementWithORWithLimit()
169 {
170 Army army = new Army(mockRace, "Test", 1000);
171 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
172 req.AddUnitTypeRequirement(2, unitType2, unitType3);
173 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (would have 0).");
174 AddUnitOfTypeToArmy(unitType2, army);
175 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (would have 1).");
176 AddUnitOfTypeToArmy(unitType2, army);
177 Assert_That__PassesAdding(req, unitType1, army);
178 }
179
180 [Test]
181 public void TestAddingRequirementWithORWithLimitWithOtherUnit()
182 {
183 Army army = new Army(mockRace, "Test", 1000);
184 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
185 req.AddUnitTypeRequirement(2, unitType2, unitType3);
186 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (would have 0).");
187 AddUnitOfTypeToArmy(unitType3, army);
188 Assert_That__FailsAdding(req, unitType1, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (would have 1).");
189 AddUnitOfTypeToArmy(unitType3, army);
190 Assert_That__PassesAdding(req, unitType1, army);
191 }
192
139 [Test()] 193 [Test()]
140 public void TestValidatingWithNoUnitsAndOneUnitTypeRequired() 194 public void TestValidatingWithNoUnitsAndOneUnitTypeRequired()
141 { 195 {
142 Army army = new Army(mockRace, "Test", 1000); 196 Army army = new Army(mockRace, "Test", 1000);
143 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); 197 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
259 AddUnitOfTypeToArmy(unitType2, army); 313 AddUnitOfTypeToArmy(unitType2, army);
260 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1); 314 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
261 req.AddUnitTypeRequirement(unitType2, 2); 315 req.AddUnitTypeRequirement(unitType2, 2);
262 Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " (have 1)."); 316 Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " (have 1).");
263 AddUnitOfTypeToArmy(unitType2, army); 317 AddUnitOfTypeToArmy(unitType2, army);
318 Assert_That__ValidationPasses(req, army);
319 }
320
321 [Test]
322 public void TestRequirementWithOR()
323 {
324 //Rollcall's "-1,X|Y" requirement - unlimited for one of either
325 Army army = new Army(mockRace, "Test", 1000);
326 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
327 req.AddUnitTypeRequirement(unitType2, unitType3);
328 AddUnitOfTypeToArmy(unitType1, army);
329 Assert_That__ValidationFails(req, army, "Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " (have 0).");
330 AddUnitOfTypeToArmy(unitType2, army);
331 Assert_That__ValidationPasses(req, army);
332 }
333
334 [Test]
335 public void TestRequirementWithORWithOtherUnit()
336 {
337 //Rollcall's "-1,X|Y" requirement - unlimited for one of either
338 Army army = new Army(mockRace, "Test", 1000);
339 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
340 req.AddUnitTypeRequirement(unitType2, unitType3);
341 AddUnitOfTypeToArmy(unitType1, army);
342 Assert_That__ValidationFails(req, army, "Army must contain: 1 × " + unitType2.Name + " or " + unitType3.Name + " (have 0).");
343 AddUnitOfTypeToArmy(unitType3, army);
344 Assert_That__ValidationPasses(req, army);
345 }
346
347 [Test]
348 public void TestRequirementWithORWithLimit()
349 {
350 Army army = new Army(mockRace, "Test", 1000);
351 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
352 req.AddUnitTypeRequirement(2, unitType2, unitType3);
353 AddUnitOfTypeToArmy(unitType1, army);
354 Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (have 0).");
355 AddUnitOfTypeToArmy(unitType2, army);
356 Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (have 1).");
357 AddUnitOfTypeToArmy(unitType2, army);
358 Assert_That__ValidationPasses(req, army);
359 }
360
361 [Test]
362 public void TestRequirementWithORWithLimitWithOtherUnit()
363 {
364 Army army = new Army(mockRace, "Test", 1000);
365 UnitRequiresAtLeastNUnitsRequirement req = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
366 req.AddUnitTypeRequirement(2, unitType2, unitType3);
367 AddUnitOfTypeToArmy(unitType1, army);
368 Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (have 0).");
369 AddUnitOfTypeToArmy(unitType3, army);
370 Assert_That__ValidationFails(req, army, "Army must contain: 2 × " + unitType2.Name + " or " + unitType3.Name + " (have 1).");
371 AddUnitOfTypeToArmy(unitType3, army);
264 Assert_That__ValidationPasses(req, army); 372 Assert_That__ValidationPasses(req, army);
265 } 373 }
266 374
267 protected override UnitRequiresAtLeastNUnitsRequirement CreateRequirement(UnitType requirementOn) 375 protected override UnitRequiresAtLeastNUnitsRequirement CreateRequirement(UnitType requirementOn)
268 { 376 {