changeset 2:405baf327de2

Re #46: Add NUnit helper methods * Improve additional information message * Improve handling of mis-matched length arrays
author IBBoard <dev@ibboard.co.uk>
date Sat, 21 Aug 2010 14:53:48 +0000
parents 4dad6872ca5a
children ec154ad8dd7f
files Constraints/ArrayContainsConstraint.cs
diffstat 1 files changed, 32 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/Constraints/ArrayContainsConstraint.cs	Sat Aug 21 14:24:27 2010 +0000
+++ b/Constraints/ArrayContainsConstraint.cs	Sat Aug 21 14:53:48 2010 +0000
@@ -37,21 +37,22 @@
 			bool isMatch = true;
 			idx = NOT_FOUND;
 			
-			if (containedObjs.Length != array.Length)
+			int max = Math.Min(array.Length, containedObjs.Length);
+			
+			for (int i = 0; i < max; i++)
+			{
+				if (!EqualityChecker.AreEqual(containedObjs[i], array[i]))
+				{
+					isMatch = false;
+					idx = i;
+					break;
+				}
+			}
+
+			if (isMatch && containedObjs.Length != array.Length)
 			{
 				isMatch = false;
-			}
-			else
-			{
-				for (int i = 0; i < containedObjs.Length; i++)
-				{
-					if (!EqualityChecker.AreEqual(containedObjs[i], array[i]))
-					{
-						isMatch = false;
-						idx = i;
-						break;
-					}
-				}
+				idx = max;
 			}
 			
 			return isMatch;
@@ -67,6 +68,10 @@
 			{
 				writer.WriteExpectedValue(containedObjs[0]);
 			}
+			else if (idx >= containedObjs.Length)
+			{
+				writer.Write("End of array");
+			}
 			else
 			{
 				writer.WriteExpectedValue(containedObjs[idx]);
@@ -85,6 +90,10 @@
 			{
 				writer.WriteActualValue(actualArray[0]);
 			}
+			else if (idx >= actualArray.Length)
+			{
+				writer.Write("End of array");
+			}
 			else
 			{
 				writer.WriteActualValue(actualArray[idx]);
@@ -95,9 +104,17 @@
 		{
 			base.WriteMessageTo(writer);
 			
-			if (idx != NOT_FOUND)
+			if (idx >= containedObjs.Length)
+			{
+				writer.WriteMessageLine("Unexpected value at index {0}", idx);
+			}
+			else if (idx >= ((object[])actual).Length)
 			{
-				writer.WriteMessageLine("Incorrect value at {0}", idx);
+				writer.WriteMessageLine("Expected value at index {0}", idx);
+			}
+			else if (idx != NOT_FOUND)
+			{
+				writer.WriteMessageLine("Incorrect value at index {0}", idx);
 			}
 		}
 	}