Added by Kerry Lamb, last edited by Kerry Lamb on Jun 28, 2007  (view change)

Labels:

Enter labels to add to this page:
Wait Image 
Looking for a label? Just start typing.
using System;

using NUnit.Framework;

using UWash.CSPC.VPS.Util;

using UWash.CSPC.VPS.Business;

using UWash.CAA.Util;



namespace VPSTest

{



	[TestFixture]

	public class TestMoney

	{

		[Test (Description = "Test parsing of strings")]

		public void TestParse()

		{

			Money m;

			try

			{

				m = new Money("123.45");

				Assert.AreEqual(123, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(45,  m.Cents,   "Failed to parse from string: Cents value incorrect");

				Assert.AreEqual("123.45", m.ToString(), "Failed to parse from string: ToString() incorrect");

			}

			catch (FormatException e)

			{

				Assert.Fail("Failed: " + e.Message);

			}



			try

			{

				m = (Money) 12345;

				Assert.AreEqual(123, m.Dollars, "Failed to cast from int: Dollars value incorrect");

				Assert.AreEqual(45,  m.Cents,   "Failed to cast from int: Cents value incorrect");

				Assert.AreEqual("123.45", m.ToString(), "Failed to cast from int: ToString() incorrect");

			}

			catch (FormatException e)

			{

				Assert.Fail("Failed: " + e.Message);

			}



			try

			{

				m = new Money("-543.02");

				Assert.IsTrue(m.IsNegative, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(-543, m.Dollars);

				Assert.AreEqual(-2, m.Cents);

				Assert.AreEqual("-543.02", m.ToString());

			}

			catch (FormatException e)

			{

				Assert.Fail("Failed: " + e.Message);

			}



			try

			{

				m = new Money("123.45678");

				Assert.Fail("Failed to parse from string: 123.45678 is not a legal amount.");

			}

			catch (FormatException)

			{

				// Passed

			}



			try

			{

				m = new Money(".45678");

				Assert.Fail("Failed to parse from string: .45678 is not a legal amount.");

			}

			catch (FormatException)

			{

				// Passed

			}



			try

			{

				m = new Money(".1");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(10, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("+.1");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(10, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("-.1");

				Assert.IsTrue(m.IsNegative, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(-10, m.Cents, "Failed to parse from string: Cents value incorrect");

			}

			catch (FormatException e)

			{

				Assert.Fail("Failed: " + e.Message);

			}



			try

			{

				m = new Money("1");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(1, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(0, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("+1");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(1, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(0, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("-1");

				Assert.IsTrue(m.IsNegative, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(-1, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(0, m.Cents, "Failed to parse from string: Cents value incorrect");

			}

			catch (FormatException e)

			{

				Assert.Fail("Failed: " + e.Message);

			}



			try

			{

				m = new Money("1.");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(1, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(0, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("+1.");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(1, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(0, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("-1.");

				Assert.IsTrue(m.IsNegative, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(-1, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(0, m.Cents, "Failed to parse from string: Cents value incorrect");

			}

			catch (FormatException e)

			{

				Assert.Fail("Failed: " + e.Message);

			}



			try

			{

				m = new Money(".45");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(45, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("+.45");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(45, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("-.45");

				Assert.IsTrue(m.IsNegative, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(-45, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("0.45");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(45, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("+0.45");

				Assert.IsTrue(m.IsPositive, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(45, m.Cents, "Failed to parse from string: Cents value incorrect");

				m = new Money("-0.45");

				Assert.IsTrue(m.IsNegative, "Failed to parse from string: Amount sign is incorrect");

				Assert.AreEqual(0, m.Dollars, "Failed to parse from string: Dollars value incorrect");

				Assert.AreEqual(-45, m.Cents, "Failed to parse from string: Cents value incorrect");

			}

			catch (FormatException e)

			{

				Assert.Fail("Failed: " + e.Message);

			}

		}



		[Test (Description="ToString")]

		public void TestStringification()

		{

			Money m = (Money) 145;

			Assert.AreEqual("1.45", m.ToString(), "Positive amount: string represenation incorrect");



			m = (Money) 45;

			Assert.AreEqual("0.45", m.ToString(), "Positive amount less than $1: string represenation incorrect");



			m = (Money) (int) -145;

			Assert.AreEqual("-1.45", m.ToString(), "Negative amount: string represenation incorrect");



			m = (Money) (int) -45;

			Assert.AreEqual("-0.45", m.ToString(), "Negative amount less than $1: string representation incorrect");

		}



		[Test (Description="Comparisons")]

		public void TestCompare()

		{

			Money m11 = (Money) 11100;

			Money m12 = new Money("111.00");



			Money m21 = (Money) 22200;

			Money m22 = m11 * 2;



			Assert.IsTrue(m11 == m12, "== Operator: Equivalent objects not equal");

			Assert.IsTrue(m21 == m22, "== Operator: Equivalent objects not equal");



			Assert.IsFalse(m11 == m21, "== Operator: Non Equivalent objects are equal");

			Assert.IsFalse(m11 == m22, "== Operator: Non Equivalent objects are equal");

			Assert.IsFalse(m12 == m21, "== Operator: Non Equivalent objects are equal");

			Assert.IsFalse(m12 == m22, "== Operator: Non Equivalent objects are equal");



			Assert.IsTrue(m11 != m21, "!= Operator: Non-equivalent objects are equal");

			Assert.IsTrue(m12 != m21, "!= Operator: Non-equivalent objects are equal");



			Assert.IsTrue( m11 < m21, "< Operator: smaller object not less than larger object");

			Assert.IsFalse(m21 < m11, "< Operator: larger object is less than smaller object");



		}



		[Test (Description="Math Tests")]

		public void TestMath()

		{



			Money m0 = (Money) 0;

			Money m1 = (Money) 11100;

			Money m2 = (Money) 11;

			Money m4 = (Money) 12300;



			Money m3 = m1 + m2;

			Money m5 = m1 - m4;



			Assert.AreEqual("111.11", m3.ToString());

			Assert.AreEqual("111.00", ((Money)(m3 - m2)).ToString());

			Assert.AreEqual("333.00", ((Money)(m1 * 3)).ToString());

			Assert.IsTrue((Money) 1 == m4.percent(33.33f, Money.Round.Up) - m4.percent(33.33f, Money.Round.Down));

			Assert.IsTrue(m4 == m4.percent(50.0f, Money.Round.NearestCent) * 2);



			Assert.IsTrue(m1.IsPositive);

			Assert.IsFalse(m5.IsPositive);



			Assert.IsTrue(m5.IsNegative);

			Assert.IsFalse(m1.IsNegative);



			Assert.IsTrue(m0.IsZero);

			Assert.IsFalse(m5.IsZero);

			Assert.IsFalse(m1.IsZero);



		}



		public static void Main()

		{

			new TestMoney().RunAllTests();

		}



		public void RunAllTests()

		{

			TestParse();

			TestCompare();

			TestMath();

		}

	}

}