view API/Objects/RaceTests.cs @ 227:d8cd6b259a9f

Re #359: Add "only contained" attribute to unit types * Test to make sure sub-units are removed from the army
author IBBoard <dev@ibboard.co.uk>
date Mon, 16 Apr 2012 20:45:45 +0100
parents 49480e1a8f90
children e173c5512067
line wrap: on
line source

// This file (RaceTests.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.SyntaxHelpers;
using IBBoard.WarFoundry.API.Objects.Requirement;
using System.Collections.Generic;
using IBBoard.NUnit;
using System.Reflection;
using IBBoard.WarFoundry.API.Factories;

namespace IBBoard.WarFoundry.API.Objects
{
	[TestFixture()]
	public class RaceTests : AbstractEqualityTest<Race>
	{
		[Test()]
		public void TestRaceWithNoUnitTypesHasNoRequirements()
		{
			Assert.That(new MockRace().GetRequirements(), Has.Count(0));
		}

		[Test()]
		public void TestRaceWithOneUnitTypeHasNoRequirements()
		{
			MockRace race = new MockRace();
			race.AddUnitType(new MockUnitType());
			Assert.That(race.GetRequirements(), Has.Count(0));
		}

		[Test()]
		public void TestRaceWithOneUnitTypeWithOneRequirementHasOneRequirement()
		{
			MockRace race = new MockRace();
			MockUnitType unitType = new MockUnitType();
			UnitRequiresAtLeastNUnitsRequirement unitRequirement = new UnitRequiresAtLeastNUnitsRequirement(unitType);
			unitType.AddRequirement(unitRequirement);
			race.AddUnitType(unitType);
			ICollection<IRequirement> raceRequirements = race.GetRequirements();
			Assert.That(raceRequirements, Has.Count(1));
			Assert.That(raceRequirements, Has.All.EqualTo(unitRequirement));
		}

		[Test()]
		public void TestRaceWithTwoUnitTypesWithMultipleRequirementsHasMultipleRequirements()
		{
			MockRace race = new MockRace();
			MockUnitType unitType1 = new MockUnitType("type1", "Type 1");
			UnitRequiresAtLeastNUnitsRequirement unitRequirement1 = new UnitRequiresAtLeastNUnitsRequirement(unitType1);
			unitType1.AddRequirement(unitRequirement1);
			UnitRequiresNoMoreThanNOfUnitTypeRequirement unitRequirement2 = new UnitRequiresNoMoreThanNOfUnitTypeRequirement(unitType1);
			unitType1.AddRequirement(unitRequirement2);
			race.AddUnitType(unitType1);
			MockUnitType unitType2 = new MockUnitType("type2", "Type 2");
			UnitRequiresAtLeastNUnitsRequirement unitRequirement3 = new UnitRequiresAtLeastNUnitsRequirement(unitType2);
			unitType2.AddRequirement(unitRequirement3);
			race.AddUnitType(unitType2);
			ICollection<IRequirement> raceRequirements = race.GetRequirements();
			Assert.That(raceRequirements, Has.Count(3));
			Assert.That(raceRequirements, Has.Member(unitRequirement1));
			Assert.That(raceRequirements, Has.Member(unitRequirement2));
			Assert.That(raceRequirements, Has.Member(unitRequirement3));
		}

		[Test()]
		public void TestContainedOnlyUnitsAreNotReturned()
		{
			MockRace race = new MockRace();
			MockUnitType unitType1 = new MockUnitType("type1", "Type 1");
			race.AddUnitType(unitType1);
			MockContainedUnitType unitType2 = new MockContainedUnitType("type2", "Type 2");
			race.AddUnitType(unitType2);
			unitType1.AddContainedUnitType(unitType2);
			Assert.That(race.GetUnitTypes(MockCategory.GetCategory()), Has.Length(1));
			Assert.That(race.GetUnitTypes(MockCategory.GetCategory()), Has.Member(unitType1));
		}

		public override Race GetObject ()
		{
			DummyWarFoundryFactory factory = new DummyWarFoundryFactory();
			GameSystem gameSystem = new GameSystem("system", "system", factory);
			return new Race("race", "race", gameSystem, factory);
		}

		public override Race GetSameObject ()
		{
			DummyWarFoundryFactory factory = new DummyWarFoundryFactory();
			GameSystem gameSystem = new GameSystem("system", "system", factory);
			return new Race("race", "race", gameSystem, factory);
		}

		public override Race GetDifferentObject ()
		{
			DummyWarFoundryFactory factory = new DummyWarFoundryFactory();
			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);
		}
	}
}