view API/Commands/EditArmyCommandTest.cs @ 180:ce40484ad921

Re #356: Exception caused by unit limits * Add test that triggers the stack overflow, based on example data file
author IBBoard <dev@ibboard.co.uk>
date Sun, 06 Nov 2011 19:47:18 +0000
parents b0b41bf8ad68
children
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using IBBoard.WarFoundry.API.Objects;
using IBBoard.WarFoundry.API.Objects.Mock;
using NUnit.Framework.SyntaxHelpers;

namespace IBBoard.WarFoundry.API.Commands
{
	[TestFixture]
	public class EditArmyCommandTest
	{
		[Test]
		public void TestChangingNameOnlyChangesName()
		{
			Army army = CreateArmy();
			EditArmyCommand cmd = new EditArmyCommand(army);
			string newName = "Something New";
			int maxSize = army.MaxPoints;
			cmd.NewName = newName;
			cmd.Execute();
			Assert.That(army.Name, Is.EqualTo(newName));
			Assert.That(army.MaxPoints, Is.EqualTo(maxSize));
		}

		[Test]
		public void TestUndoNameChangeGivesOldName()
		{
			Army army = CreateArmy();
			EditArmyCommand cmd = new EditArmyCommand(army);
			string oldName = army.Name;
			cmd.NewName = "Something New";
			cmd.Execute();
			cmd.Undo();
			Assert.That(army.Name, Is.EqualTo(oldName));
		}

		[Test]
		public void TestChangingSizeOnlyChangesSize()
		{
			Army army = CreateArmy();
			EditArmyCommand cmd = new EditArmyCommand(army);
			string oldName = army.Name;
			int maxSize = 1337;
			cmd.NewSize = maxSize;
			cmd.Execute();
			Assert.That(army.MaxPoints, Is.EqualTo(maxSize));
			Assert.That(army.Name, Is.EqualTo(oldName));
		}

		[Test]
		public void TestUndoSizeChangeGivesOldSize()
		{
			Army army = CreateArmy();
			EditArmyCommand cmd = new EditArmyCommand(army);
			int oldSize = army.MaxPoints;
			cmd.NewSize = 1337;
			cmd.Execute();
			cmd.Undo();
			Assert.That(army.MaxPoints, Is.EqualTo(oldSize));
		}

		[Test]
		public void TestChangingBothChangesBoth()
		{
			Army army = CreateArmy();
			EditArmyCommand cmd = new EditArmyCommand(army);
			string newName = "Something New";
			cmd.NewName = newName;
			int maxSize = 1337;
			cmd.NewSize = maxSize;
			cmd.Execute();
			Assert.That(army.MaxPoints, Is.EqualTo(maxSize));
			Assert.That(army.Name, Is.EqualTo(newName));
		}

		[Test]
		public void TestUndoChangeBothGivesOldValues()
		{
			Army army = CreateArmy();
			EditArmyCommand cmd = new EditArmyCommand(army);
			int oldSize = army.MaxPoints;
			string oldName = army.Name;
			cmd.NewName = "Something New";
			cmd.NewSize = 1337;
			cmd.Execute();
			cmd.Undo();
			Assert.That(army.MaxPoints, Is.EqualTo(oldSize));
			Assert.That(army.Name, Is.EqualTo(oldName));
		}

		[Test]
		public void TestCanExecuteRequiresArmyAndAtLeastOneValue()
		{
			EditArmyCommand cmd = new EditArmyCommand(null);
			Assert.That(cmd.CanExecute(), Is.False);
			Army army = CreateArmy();
			cmd = new EditArmyCommand(army);
			Assert.That(cmd.CanExecute(), Is.False);
			cmd.NewName = "NonNull";
			Assert.That(cmd.CanExecute(), Is.True);
			cmd.NewName = null;
			Assert.That(cmd.CanExecute(), Is.False);
			cmd.NewSize = 1000;
			Assert.That(cmd.CanExecute(), Is.True);
			cmd.NewSize = 0;
			Assert.That(cmd.CanExecute(), Is.False);
			cmd.NewSize = -1;
			Assert.That(cmd.CanExecute(), Is.False);
			cmd.NewSize = 1;
			Assert.That(cmd.CanExecute(), Is.True);
		}


		static Army CreateArmy()
		{
			return new Army(new MockRace(), "default name", 1000);
		}
	}
}