changeset 12:298786adcddc

Fixes #25: Add method for parsing enums from XML elements * Add unit tests for XmlToolsTests to test enum parsing
author IBBoard <dev@ibboard.co.uk>
date Mon, 30 Nov 2009 20:47:22 +0000
parents 37642712f632
children f6fd30d3b817
files IBBoard.Tests.csproj Xml/XmlToolsTests.cs
diffstat 2 files changed, 62 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/IBBoard.Tests.csproj	Fri Nov 06 19:57:44 2009 +0000
+++ b/IBBoard.Tests.csproj	Mon Nov 30 20:47:22 2009 +0000
@@ -34,16 +34,19 @@
     <Compile Include="Limits\AbstractLimitTest.cs" />
     <Compile Include="Limits\AbsoluteNumericLimitTest.cs" />
     <Compile Include="Limits\UnlimitedLimitTest.cs" />
+    <Compile Include="Xml\XmlToolsTests.cs" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="nunit.core, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
     <Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
+    <Reference Include="System.Xml" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
     <Folder Include="CustomMath\" />
     <Folder Include="Limits\" />
+    <Folder Include="Xml\" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\IBBoard\IBBoard.csproj">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Xml/XmlToolsTests.cs	Mon Nov 30 20:47:22 2009 +0000
@@ -0,0 +1,59 @@
+// This file (AbstractLimitTest.cs) is a part of the IBBoard.Tests project and is copyright 2009 IBBoard
+// 
+//  The file and the library/program it is in are licensed under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license.
+
+using System;
+using System.Xml;
+using NUnit.Framework;
+
+namespace IBBoard.Xml
+{
+	[TestFixture()]
+	public class XmlToolsTests
+	{
+		private enum TestEnum
+		{
+			ALPHA
+		}
+		
+		[Test()]
+		public void TestParsingOfValidEnumString ()
+		{
+			XmlElement elem = GetElement("ALPHA");
+			Assert.AreEqual(TestEnum.ALPHA, XmlTools.GetEnumValueFromAttribute<TestEnum>(elem, "enum"));
+		}
+
+		static XmlElement GetElement(string enumValue)
+		{
+			XmlDocument doc = new XmlDocument();
+			XmlElement elem = doc.CreateElement ("sample");
+			XmlAttribute attrib = doc.CreateAttribute ("enum");
+			attrib.Value = enumValue;
+			elem.Attributes.Append (attrib);
+			return elem;
+		}
+		
+		[Test()]
+		public void TestParsingOfValidEnumStringWithDifferentCase ()
+		{
+			XmlElement elem = GetElement("ALPHA");
+			Assert.AreEqual(TestEnum.ALPHA, XmlTools.GetEnumValueFromAttribute<TestEnum>(elem, "enum"));
+		}
+		
+		[Test()]
+		[ExpectedException(typeof(FormatException), ExpectedMessage="Attribute 'enum' of sample with ID  was not a valid TestEnum enum")]
+		public void TestParsingValidEnumStringWithInvalidValueThrowsException ()
+		{
+			XmlElement elem = GetElement("Omega");
+			XmlTools.GetEnumValueFromAttribute<TestEnum>(elem, "enum");
+		}
+		
+		[Test()]
+		[ExpectedException(typeof(FormatException), ExpectedMessage="Attribute 'enum' of sample with ID  was not a valid TestEnum enum")]
+		public void TestCaseSensitiveParsingOfValidValueInInvalidCaseThrowsException ()
+		{
+			XmlElement elem = GetElement("Alpha");
+			XmlTools.GetEnumValueFromAttribute<TestEnum>(elem, "enum", false);
+		}
+	}
+}