view API/Factories/Xml/WarFoundryXmlSystemFactoryTest.cs @ 71:a2095a3685fc

Re #297: Move Categories over to key/keyref from ID/IDREF * Initial tests for system category handling
author IBBoard <dev@ibboard.co.uk>
date Wed, 07 Jul 2010 19:01:32 +0000
parents 90a9f13b9627
children 72479ca6feb4
line wrap: on
line source

//  This file (WarFoundryXmlSystemFactoryTest.cs) is a part of the IBBoard.WarFoundry.API.Tests project and is copyright 2010 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 System.IO;
using IBBoard.WarFoundry.API.Objects;
using NUnit.Framework.SyntaxHelpers;
using IBBoard.IO;
using System.Xml.Schema;

namespace IBBoard.WarFoundry.API.Factories.Xml
{
	[TestFixture()]
	public class WarFoundryXmlSystemFactoryTest
	{
		[Test()]
		public void TestGettingDefaultStatsIDFullyLoadsGameSystem()
		{
			GameSystem system = SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), new FileInfo("testdata/xml-system-factory/valid-default-stats-one-stats-set.systemx"));
			Assert.That(system.IsFullyLoaded, Is.False);
			string defaultStatsID = system.StandardSystemStatsID;
			Assert.That(defaultStatsID, Is.Not.Null);
			Assert.That(defaultStatsID, Is.Not.Empty);
			Assert.That(system.IsFullyLoaded, Is.True);
		}
		
		[Test()]
		public void TestValidDefaultStatsIDLoadsCorrectly()
		{
			GameSystem system = SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), new FileInfo("testdata/xml-system-factory/valid-default-stats-one-stats-set.systemx"));
			Assert.That(system.StandardSystemStatsID, Is.EqualTo("defaultStats"));
			Assert.That(system.SystemStats, Has.Length(1));
		}
		
		[Test()]
		public void TestValidDefaultStatsIDLoadsCorrectlyWithMultipleStatsSets()
		{
			GameSystem system = SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), new FileInfo("testdata/xml-system-factory/valid-default-stats-multiple-stats-set.systemx"));
			Assert.That(system.StandardSystemStatsID, Is.EqualTo("defaultStats"));
			Assert.That(system.SystemStats, Has.Length(2));
		}
		
		[Test()]
		public void TestIncorrectDefaultStatsIDErrors()
		{
			TestFileValidationFailure("testdata/xml-system-factory/invalid-default-stats.systemx");
		}
		
		[Test()]
		public void TestDuplicateStatsIDErrors()
		{
			TestFileValidationFailure("testdata/xml-system-factory/duplicate-stats-set-id.systemx");
		}
		
		[Test()]
		public void TestValidCategoriesLoadsCorrectly()
		{
			GameSystem system = SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), new FileInfo("testdata/xml-system-factory/valid-categories.systemx"));
			Assert.That(system.Categories, Has.Length(5));
		}	
		
		[Test()]
		public void TestDuplicateCategoryIDErrors()
		{
			TestFileValidationFailure("testdata/xml-system-factory/duplicate-category-ids.systemx");
		}
		
		private void TestFileValidationFailure(string filePath)
		{
			FileInfo systemFile = new FileInfo(filePath);
			
			try
			{
				SingleXmlObjectLoader.LoadGameSystemFromXML(WarFoundryXmlFactory.GetFactory(), systemFile);
				Assert.Fail("Excepted exception not thrown");
			}
			catch (InvalidFileException ex)
			{
				Console.WriteLine(ex.Message);
				Exception innerException = ex.InnerException;
				Assert.That(innerException, Is.InstanceOfType(typeof(XmlSchemaValidationException)));
			}
		}
	}
}