# HG changeset patch # User IBBoard # Date 1282402428 0 # Node ID 405baf327de23040c35c0c9101640c2e6647aa52 # Parent 4dad6872ca5a9bb2a3c3fe6b1ca5298434d1b5ab Re #46: Add NUnit helper methods * Improve additional information message * Improve handling of mis-matched length arrays diff -r 4dad6872ca5a -r 405baf327de2 Constraints/ArrayContainsConstraint.cs --- 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); } } }