comparison API/Objects/Requirement/RequiresNUnitsForMUnitsRequirementTest.cs @ 198:6a54d1787fbe

Re #350: Add requirement to allow N of unit for specific other units * Add big stack of test methods to test additive requirements with allowed values other than one * Add helper method to reduce repetition (used in new code, but not yet in old code)
author IBBoard <dev@ibboard.co.uk>
date Thu, 15 Dec 2011 21:00:37 +0000
parents aa921248ffbf
children 925c37fa4feb
comparison
equal deleted inserted replaced
197:aa921248ffbf 198:6a54d1787fbe
281 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); 281 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed));
282 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).")); 282 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)."));
283 } 283 }
284 284
285 [Test()] 285 [Test()]
286 public void TestAddingUnrelatedUnitWithNoUnitsAndThreeForEachTwoCombinedUnitTypesRequiredIsNA()
287 {
288 Army army = new Army(mockRace, "Test", 1000);
289 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
290 req.AddUnitTypeRequirement(3, unitType2, unitType3);
291 Unit unit = CreateUnitOfType(unitType4, army);
292 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.NotApplicable));
293 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty);
294 }
295
296 [Test()]
297 public void TestAddingThirdUnitWithThreeForEachTwoUnitTypeComboRequiredAndUnitOfOneTypePasses()
298 {
299 Army army = new Army(mockRace, "Test", 1000);
300 AddUnitOfTypeToArmy(unitType2, army);
301 AddUnitsOfTypeToArmy(2, unitType1, army);
302 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
303 req.AddUnitTypeRequirement(3, unitType2, unitType3);
304 Unit unit = CreateUnitOfType(unitType1, army);
305 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed));
306 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty);
307 }
308
309 [Test()]
310 public void TestAddingThirdUnitWithThreeForEachTwoUnitTypeComboRequiredAndUnitOfOtherTypePasses()
311 {
312 Army army = new Army(mockRace, "Test", 1000);
313 AddUnitOfTypeToArmy(unitType3, army);
314 AddUnitsOfTypeToArmy(2, unitType1, army);
315 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
316 req.AddUnitTypeRequirement(3, unitType2, unitType3);
317 Unit unit = CreateUnitOfType(unitType1, army);
318 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed));
319 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty);
320 }
321
322 [Test()]
323 public void TestAddingSixthUnitWithThreeForEachTwoUnitTypeComboRequiredAndOneUnitOfBothTypesPasses()
324 {
325 Army army = new Army(mockRace, "Test", 1000);
326 AddUnitOfTypeToArmy(unitType3, army);
327 AddUnitOfTypeToArmy(unitType2, army);
328 AddUnitsOfTypeToArmy(5, unitType1, army);
329 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
330 req.AddUnitTypeRequirement(3, unitType2, unitType3);
331 Unit unit = CreateUnitOfType(unitType1, army);
332 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed));
333 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty);
334 }
335
336 [Test()]
337 public void TestAddingSixthUnitWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOneTypePasses()
338 {
339 Army army = new Army(mockRace, "Test", 1000);
340 AddUnitsOfTypeToArmy(2, unitType3, army);
341 AddUnitsOfTypeToArmy(5, unitType1, army);
342 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
343 req.AddUnitTypeRequirement(3, unitType2, unitType3);
344 Unit unit = CreateUnitOfType(unitType1, army);
345 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed));
346 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty);
347 }
348
349 [Test()]
350 public void TestAddingSixthUnitWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOtherTypePasses()
351 {
352 Army army = new Army(mockRace, "Test", 1000);
353 AddUnitsOfTypeToArmy(2, unitType2, army);
354 AddUnitsOfTypeToArmy(5, unitType1, army);
355 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
356 req.AddUnitTypeRequirement(3, unitType2, unitType3);
357 Unit unit = CreateUnitOfType(unitType1, army);
358 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed));
359 Assert.That(req.GetAllowsAddingMessage(unit.UnitType, army), Is.Empty);
360 }
361
362 [Test()]
363 public void TestAddingSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndOneUnitOfBothTypesFails()
364 {
365 Army army = new Army(mockRace, "Test", 1000);
366 AddUnitOfTypeToArmy(unitType3, army);
367 AddUnitOfTypeToArmy(unitType2, army);
368 AddUnitsOfTypeToArmy(6, unitType1, army);
369 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
370 req.AddUnitTypeRequirement(3, unitType2, unitType3);
371 Unit unit = CreateUnitOfType(unitType1, army);
372 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed));
373 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)."));
374 }
375
376 [Test()]
377 public void TestAddingSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOneTypeFails()
378 {
379 Army army = new Army(mockRace, "Test", 1000);
380 AddUnitsOfTypeToArmy(2, unitType3, army);
381 AddUnitsOfTypeToArmy(6, unitType1, army);
382 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
383 req.AddUnitTypeRequirement(3, unitType2, unitType3);
384 Unit unit = CreateUnitOfType(unitType1, army);
385 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed));
386 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)."));
387 }
388
389 [Test()]
390 public void TestAddingSevenUnitsWithThreeForEachTwoUnitTypeComboRequiredAndTwoUnitsOfOtherTypeFails()
391 {
392 Army army = new Army(mockRace, "Test", 1000);
393 AddUnitsOfTypeToArmy(2, unitType2, army);
394 AddUnitsOfTypeToArmy(6, unitType1, army);
395 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
396 req.AddUnitTypeRequirement(3, unitType2, unitType3);
397 Unit unit = CreateUnitOfType(unitType1, army);
398 Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed));
399 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)."));
400 }
401
402 [Test()]
286 public void TestValidatingArmyWithNoUnitsAndOneUnitTypeRequiredIsNA() 403 public void TestValidatingArmyWithNoUnitsAndOneUnitTypeRequiredIsNA()
287 { 404 {
288 Army army = new Army(mockRace, "Test", 1000); 405 Army army = new Army(mockRace, "Test", 1000);
289 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1, unitType2); 406 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1, unitType2);
290 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.NotApplicable)); 407 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.NotApplicable));
403 AddUnitOfTypeToArmy(unitType1, army); 520 AddUnitOfTypeToArmy(unitType1, army);
404 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1); 521 RequiresNUnitsForMUnitsRequirement req = new RequiresNUnitsForMUnitsRequirement(unitType1);
405 req.AddUnitTypeRequirement(unitType2, 1, 2); 522 req.AddUnitTypeRequirement(unitType2, 1, 2);
406 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); 523 Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed));
407 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 " + unitType2.Name + " for every 2 " + unitType1.Name + " (have 1 for 3).")); 524 Assert.That(req.GetValidationMessage(army), Is.EqualTo("Army must contain: 1 " + unitType2.Name + " for every 2 " + unitType1.Name + " (have 1 for 3)."));
525 }
526
527 private static void AddUnitsOfTypeToArmy(int count, UnitType unitType, Army army)
528 {
529 for (int i = 0; i < count; i++)
530 {
531 AddUnitOfTypeToArmy(unitType, army);
532 }
408 } 533 }
409 534
410 private static void AddUnitOfTypeToArmy(UnitType unitType, Army army) 535 private static void AddUnitOfTypeToArmy(UnitType unitType, Army army)
411 { 536 {
412 army.AddUnit(CreateUnitOfType(unitType, army)); 537 army.AddUnit(CreateUnitOfType(unitType, army));