view API/Factories/Xml/WarFoundryXmlFactoryUtilTest.cs @ 96:3c2c108a2f08

Re #253: Allow multiple data files in a single zip * Fix unit tests by unsubscribing at end of test no-open-ticket
author IBBoard <dev@ibboard.co.uk>
date Sat, 05 Mar 2011 19:53:25 +0000
parents b2517bb113d0
children 833f72be715a
line wrap: on
line source

//  This file (WarFoundryXmlFactoryUtilTest.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 System.Xml;
using System.Xml.Schema;
using IBBoard.IO;
using NUnit.Framework;
using NUnit.Framework.SyntaxHelpers;

namespace IBBoard.WarFoundry.API.Factories.Xml
{
	[TestFixture()]
	public class WarFoundryXmlFactoryUtilTest
	{
		[Test()]
		public void TestParsingExtendedDataFiles()
		{
			TestValidFileLoading("testdata/extended-data.racex");
			TestValidFileLoading("testdata/extended-data.systemx");
			TestValidFileLoading("testdata/extended-data.armyx");
		}
		
		[Test()]
		public void TestParsingValidArmyContainedID()
		{
			TestValidFileLoading("testdata/xml-factory-util/valid-contained-id.armyx");
		}
		
		private static void TestValidFileLoading(string path)
		{
			XmlElement document = SingleXmlObjectLoader.CreateDocumentElementFromFile(path);
			Assert.IsNotNull(document);
		}
		
		[Test()]
		public void TestArmyFileValidationFailsForDuplicateUnitID()
		{
			TestFileValidationFailure("testdata/xml-factory-util/duplicate-unit-id.armyx");
		}

		[Test()]
		public void TestArmyFileValidationFailsForInvalidContainedID()
		{
			TestFileValidationFailure("testdata/xml-factory-util/invalid-contained-id.armyx");
		}

		private void TestFileValidationFailure(string filePath)
		{			
			try
			{
				SingleXmlObjectLoader.CreateDocumentElementFromFile(filePath);
				Assert.Fail("Excepted exception not thrown");
			}
			catch (InvalidFileException ex)
			{
				Console.WriteLine(ex.Message);
				Exception innerException = ex.InnerException;
				Assert.That(innerException, Is.InstanceOfType(typeof(XmlSchemaValidationException)));
			}
		}
	}
}