Mercurial > repos > IBBoard.WarFoundry.API.Tests
changeset 139:3e4864e206ea
Re #140: Equality methods
* Add equality testing to RequiresNoMoreThanN requirement
* Add extra different races for testing more of equality method
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Tue, 26 Apr 2011 19:47:36 +0000 |
parents | 11faab6c712a |
children | 2ae80631ec9c |
files | API/Objects/RaceTests.cs API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirementTest.cs |
diffstat | 2 files changed, 195 insertions(+), 109 deletions(-) [+] |
line wrap: on
line diff
--- a/API/Objects/RaceTests.cs Tue Apr 26 19:14:34 2011 +0000 +++ b/API/Objects/RaceTests.cs Tue Apr 26 19:47:36 2011 +0000 @@ -129,6 +129,20 @@ GameSystem gameSystem = new GameSystem("system2", "another system", factory); return new Race("race2", "other race", gameSystem, factory); } + + public Race GetOtherDifferentObjectWithSubID() + { + DummyWarFoundryFactory factory = new DummyWarFoundryFactory(); + GameSystem gameSystem = new GameSystem("system", "system", factory); + return new Race("race", "subid", "race", gameSystem, factory); + } + + public Race GetOtherDifferentObjectWithGameSystem() + { + DummyWarFoundryFactory factory = new DummyWarFoundryFactory(); + GameSystem gameSystem = new GameSystem("system2", "system", factory); + return new Race("race", "race", gameSystem, factory); + } } }
--- a/API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirementTest.cs Tue Apr 26 19:14:34 2011 +0000 +++ b/API/Objects/Requirement/RequiresNoMoreThanNOfUnitTypeRequirementTest.cs Tue Apr 26 19:47:36 2011 +0000 @@ -1,120 +1,192 @@ -// This file (RequiresNoMoreThanNOfUnitTypeRequirementTest.cs) is a part of the IBBoard.WarFoundry.API.Tests project and is copyright 2011 IBBoard +// This file (RequiresNoMoreThanNOfUnitTypeRequirementTest.cs) is a part of the IBBoard.WarFoundry.API.Tests project and is copyright 2011 IBBoard // // 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. using System; -using NUnit.Framework; -using IBBoard.WarFoundry.API.Objects.Mock; +using NUnit.Framework; +using IBBoard.WarFoundry.API.Objects.Mock; using NUnit.Framework.SyntaxHelpers; +using System.Reflection; +using IBBoard.NUnit; +using IBBoard.WarFoundry.API.Factories; namespace IBBoard.WarFoundry.API.Objects.Requirement { [TestFixture()] - public class RequiresNoMoreThanNOfUnitTypeRequirementTest - { - private MockRace mockRace; - private UnitType unitType1; - private UnitType unitType2; - private UnitType unitType3; - - [TestFixtureSetUp()] - public void SetupRace() - { - mockRace = new MockRace(); - unitType1 = new MockUnitType("type1", "Unit Type 1"); - mockRace.AddUnitType(unitType1); - unitType2 = new MockUnitType("type2", "Unit Type 2"); - mockRace.AddUnitType(unitType2); - unitType3 = new MockUnitType("type3", "Unit Type 3"); - mockRace.AddUnitType(unitType3); - } - - [Test()] - public void TestAddingUnitWithNoUnitsAndOneUnitTypeRequiredIsAllowed() - { - Army army = new Army(mockRace, "Test", 1000); - Unit unit = CreateUnitOfType(unitType1, army); - RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(unitType2); - Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); - } - - [Test()] - public void TestAddingUnitWithOneUnitAndOneUnitTypeRequiredIsNotAllowed() - { - Army army = new Army(mockRace, "Test", 1000); - AddUnitOfTypeToArmy(unitType2, army); - Unit unit = CreateUnitOfType(unitType1, army); - RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(unitType2); - Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); - } - - [Test()] - public void TestAddingUnitTypeWithNoUnitsAndOneUnitTypeRequiredIsAllowed() - { - Army army = new Army(mockRace, "Test", 1000); - RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(unitType2); - Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); - } - - [Test()] - public void TestAddingUnitTypeWithOneUnitAndOneUnitTypeRequiredIsNotAllowed() - { - Army army = new Army(mockRace, "Test", 1000); - AddUnitOfTypeToArmy(unitType2, army); - RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(unitType2); - Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed)); - } - - [Test()] - public void TestAddingUnitTypeSetsLimit() - { - Army army = new Army(mockRace, "Test", 1000); - AddUnitOfTypeToArmy(unitType2, army); - RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); - req.AddUnitTypeRequirement(unitType2, 1); - Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); - } - - [Test()] - public void TestAddingUnitTypeSetsLimitForFailure() - { - Army army = new Army(mockRace, "Test", 1000); - AddUnitOfTypeToArmy(unitType2, army); - AddUnitOfTypeToArmy(unitType2, army); - RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); - req.AddUnitTypeRequirement(unitType2, 1); - Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed)); - } - - [Test()] - public void TestAddingUnitTypeDefaultsToNoMoreThanZero() - { - Army army = new Army(mockRace, "Test", 1000); - RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); - req.AddUnitTypeRequirement(unitType2); - Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); - AddUnitOfTypeToArmy(unitType2, army); - Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed)); - } - - [Test] - public void TestRequirementBecomesInvalidWhenProhibitedUnitsChange() - { - Army army = new Army(mockRace, "Test", 1000); - RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); - req.AddUnitTypeRequirement(unitType2); - Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); - AddUnitOfTypeToArmy(unitType2, army); - Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); - } - - private static void AddUnitOfTypeToArmy(UnitType unitType, Army army) - { - army.AddUnit(CreateUnitOfType(unitType, army)); - } - - private static Unit CreateUnitOfType(UnitType unitType, Army army) - { - return new Unit(unitType, army.GetCategory(unitType.MainCategory)); + public class RequiresNoMoreThanNOfUnitTypeRequirementTest : AbstractEqualityTest<RequiresNoMoreThanNOfUnitTypeRequirement> + { + //FIXME We shouldn't duplicate these tests, but it is broken at the moment + [Test] + public void TestEquality() + { + Assert.AreEqual(GetObject(), GetSameObject()); + Assert.AreEqual(GetSameObject(), GetObject()); + } + + [Test] + public void TestInequality() + { + Assert.AreNotEqual(GetObject(), GetDifferentObject()); + Assert.AreNotEqual(GetSameObject(), GetDifferentObject()); + Assert.AreNotEqual(GetDifferentObject(), GetObject()); + Assert.AreNotEqual(GetDifferentObject(), GetSameObject()); + } + + [Test] + public void TestReflexiveEquality() + { + Assert.AreEqual(GetObject(), GetObject()); + Assert.AreEqual(GetSameObject(), GetSameObject()); + Assert.AreEqual(GetDifferentObject(), GetDifferentObject()); + } + + [Test] + public void TestOtherInequality() + { + MethodInfo[] methodInfo = GetType().GetMethods(); + RequiresNoMoreThanNOfUnitTypeRequirement obj = GetObject(); + + foreach (MethodInfo method in methodInfo) + { + if (method.Name.StartsWith("GetOtherDifferent")) + { + RequiresAtLeastNUnitsRequirement otherObj = (RequiresAtLeastNUnitsRequirement)method.Invoke(this, new object[0]); + Assert.AreNotEqual(obj, otherObj, "Objects equal for "+method.Name); + Assert.AreNotEqual(otherObj, obj, "Objects equal for "+method.Name); + } + } + } + + + + + private MockRace mockRace; + private UnitType unitType1; + private UnitType unitType2; + private UnitType unitType3; + + [TestFixtureSetUp()] + public void SetupRace() + { + mockRace = new MockRace(); + unitType1 = new MockUnitType("type1", "Unit Type 1"); + mockRace.AddUnitType(unitType1); + unitType2 = new MockUnitType("type2", "Unit Type 2"); + mockRace.AddUnitType(unitType2); + unitType3 = new MockUnitType("type3", "Unit Type 3"); + mockRace.AddUnitType(unitType3); + } + + [Test()] + public void TestAddingUnitWithNoUnitsAndOneUnitTypeRequiredIsAllowed() + { + Army army = new Army(mockRace, "Test", 1000); + Unit unit = CreateUnitOfType(unitType1, army); + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(unitType2); + Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Passed)); + } + + [Test()] + public void TestAddingUnitWithOneUnitAndOneUnitTypeRequiredIsNotAllowed() + { + Army army = new Army(mockRace, "Test", 1000); + AddUnitOfTypeToArmy(unitType2, army); + Unit unit = CreateUnitOfType(unitType1, army); + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(unitType2); + Assert.That(req.AllowsAdding(unit, army), Is.EqualTo(Validation.Failed)); + } + + [Test()] + public void TestAddingUnitTypeWithNoUnitsAndOneUnitTypeRequiredIsAllowed() + { + Army army = new Army(mockRace, "Test", 1000); + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(unitType2); + Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); + } + + [Test()] + public void TestAddingUnitTypeWithOneUnitAndOneUnitTypeRequiredIsNotAllowed() + { + Army army = new Army(mockRace, "Test", 1000); + AddUnitOfTypeToArmy(unitType2, army); + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(unitType2); + Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed)); + } + + [Test()] + public void TestAddingUnitTypeSetsLimit() + { + Army army = new Army(mockRace, "Test", 1000); + AddUnitOfTypeToArmy(unitType2, army); + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); + req.AddUnitTypeRequirement(unitType2, 1); + Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); + } + + [Test()] + public void TestAddingUnitTypeSetsLimitForFailure() + { + Army army = new Army(mockRace, "Test", 1000); + AddUnitOfTypeToArmy(unitType2, army); + AddUnitOfTypeToArmy(unitType2, army); + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); + req.AddUnitTypeRequirement(unitType2, 1); + Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed)); + } + + [Test()] + public void TestAddingUnitTypeDefaultsToNoMoreThanZero() + { + Army army = new Army(mockRace, "Test", 1000); + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); + req.AddUnitTypeRequirement(unitType2); + Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Passed)); + AddUnitOfTypeToArmy(unitType2, army); + Assert.That(req.AllowsAdding(unitType1, army), Is.EqualTo(Validation.Failed)); + } + + [Test] + public void TestRequirementBecomesInvalidWhenProhibitedUnitsChange() + { + Army army = new Army(mockRace, "Test", 1000); + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); + req.AddUnitTypeRequirement(unitType2); + Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Passed)); + AddUnitOfTypeToArmy(unitType2, army); + Assert.That(req.ValidatesArmy(army), Is.EqualTo(Validation.Failed)); + } + + private static void AddUnitOfTypeToArmy(UnitType unitType, Army army) + { + army.AddUnit(CreateUnitOfType(unitType, army)); + } + + private static Unit CreateUnitOfType(UnitType unitType, Army army) + { + return new Unit(unitType, army.GetCategory(unitType.MainCategory)); + } + + public override RequiresNoMoreThanNOfUnitTypeRequirement GetObject () + { + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); + req.AddUnitTypeRequirement(unitType1, 2); + return req; + } + + public override RequiresNoMoreThanNOfUnitTypeRequirement GetSameObject () + { + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); + req.AddUnitTypeRequirement(unitType1, 2); + return req; + } + + public override RequiresNoMoreThanNOfUnitTypeRequirement GetDifferentObject () + { + RequiresNoMoreThanNOfUnitTypeRequirement req = new RequiresNoMoreThanNOfUnitTypeRequirement(); + DummyWarFoundryFactory factory = new DummyWarFoundryFactory(); + GameSystem gameSystem = new GameSystem("system", "system", factory); + Race race = new Race("race", "race", gameSystem, factory); + req.AddUnitTypeRequirement(new UnitType("id2", "Type 2", race), 2); + return req; } } }