view API/Factories/Xml/WarFoundryXmlFactoryTests.cs @ 229:6ec46f3db2d4

Re #419: Remove assumptions of a file-based install * Test loading from resources
author IBBoard <dev@ibboard.co.uk>
date Wed, 11 Jul 2012 20:33:11 +0100
parents 7c21ca1482cb
children
line wrap: on
line source

using System;
using NUnit.Framework;
using System.IO;
using System.Collections.Generic;
using IBBoard.WarFoundry.API.Objects;
using NUnit.Framework.SyntaxHelpers;
using IBBoard.WarFoundry.API.Loading;

namespace IBBoard.WarFoundry.API.Factories.Xml
{
	[TestFixture()]
	public class WarFoundryXmlFactoryTests
	{
		[Test()]
		public void TestFactoryHandlesMultipleFilesWithOldNamesInOneSystemZip()
		{
			EventListeningWarFoundryLoader loader = new EventListeningWarFoundryLoader();
			WarFoundryLoader.SetDefault(loader);
			WarFoundryXmlFactory factory = WarFoundryXmlFactory.GetFactory();
			try
			{
				loader.RegisterFactory(factory);
				ICollection<IWarFoundryObject> objs = factory.CreateObjectsFromFile(new LoadableFileObject("testdata/multifile-zips/Test.system"));
				Assert.That(objs, Has.Count(2));
				int raceCount = 0;
				int systemCount = 0;
				
				foreach (IWarFoundryObject obj in objs)
				{
					if (obj is Race)
					{
						raceCount++;
					}
					else if (obj is GameSystem)
					{
						systemCount++;
					}
				}
				
				Assert.That(raceCount, Is.EqualTo(1));
				Assert.That(systemCount, Is.EqualTo(1));
			}
			finally
			{				
				loader.UnregisterFactory(factory);
			}
		}
			
		[Test()]
		public void TestFactoryHandlesMultipleFilesWithOldNamesInOneRaceZip()
		{
			EventListeningWarFoundryLoader loader = new EventListeningWarFoundryLoader();
			WarFoundryLoader.SetDefault(loader);
			WarFoundryXmlFactory factory = WarFoundryXmlFactory.GetFactory();
			loader.RegisterFactory(factory);
			try
			{
				ICollection<IWarFoundryObject> objs = factory.CreateObjectsFromFile(new LoadableFileObject("testdata/multifile-zips/Test.race"));
				Assert.That(objs, Has.Count(2));
				int raceCount = 0;
				int systemCount = 0;
				
				foreach (IWarFoundryObject obj in objs)
				{
					if (obj is Race)
					{
						raceCount++;
					}
					else if (obj is GameSystem)
					{
						systemCount++;
					}
				}
				
				Assert.That(raceCount, Is.EqualTo(1));
				Assert.That(systemCount, Is.EqualTo(1));
			}
			finally
			{				
				loader.UnregisterFactory(factory);
			}
		}
		
		[Test()]
		public void TestFactoryHandlesMultipleFilesWithMultipleNewNamesInOneSystemZip()
		{
			EventListeningWarFoundryLoader loader = new EventListeningWarFoundryLoader();
			WarFoundryLoader.SetDefault(loader);
			WarFoundryXmlFactory factory = WarFoundryXmlFactory.GetFactory();
			loader.RegisterFactory(factory);
			try
			{
				ICollection<IWarFoundryObject> objs = factory.CreateObjectsFromFile(new LoadableFileObject("testdata/multifile-zips/Multipack.system"));
				Assert.That(objs, Has.Count(4));
				int raceCount = 0;
				int systemCount = 0;
				
				foreach (IWarFoundryObject obj in objs)
				{
					if (obj is Race)
					{
						raceCount++;
					}
					else if (obj is GameSystem)
					{
						systemCount++;
					}
				}

				Assert.That(raceCount, Is.EqualTo(2));
				Assert.That(systemCount, Is.EqualTo(2));
			}
			finally
			{				
				loader.UnregisterFactory(factory);
			}
		}
		
		[Test()]
		public void TestLoadingRaceFromResource()
		{
			WarFoundryXmlFactory factory = WarFoundryXmlFactory.GetFactory();
			GameSystem system = new GameSystem("sample", "Sample System", factory);
			FixedGameSystemWarFoundryLoader fixedLoader = new FixedGameSystemWarFoundryLoader(system);
			WarFoundryLoader.SetDefault(fixedLoader);
			ICollection<IWarFoundryObject> objs = factory.CreateObjectsFromFile(new LoadableResourceObject(typeof(WarFoundryLoader).Assembly, "IBBoard.WarFoundry.data.Empire.race"));
			Assert.That(objs, Has.Count(1));
			IEnumerator<IWarFoundryObject> enumerator = objs.GetEnumerator();
			enumerator.MoveNext();
			Assert.That(enumerator.Current, Is.TypeOf(typeof(Race)));
		}
		
		[Test()]
		public void TestLoadingSystemFromResource()
		{
			WarFoundryXmlFactory factory = WarFoundryXmlFactory.GetFactory();
			ICollection<IWarFoundryObject> objs = factory.CreateObjectsFromFile(new LoadableResourceObject(typeof(WarFoundryLoader).Assembly, "IBBoard.WarFoundry.data.SampleSystem.system"));
			Assert.That(objs, Has.Count(1));
			IEnumerator<IWarFoundryObject> enumerator = objs.GetEnumerator();
			enumerator.MoveNext();
			Assert.That(enumerator.Current, Is.TypeOf(typeof(GameSystem)));
		}
	}
}