annotate Constraints/ArrayContainsConstraint.cs @ 1:4dad6872ca5a

Re #46: Add NUnit helper methods * First import of project * Add initial "Array contains" constraint to match Hamcrest "contains()" method
author IBBoard <dev@ibboard.co.uk>
date Sat, 21 Aug 2010 14:24:27 +0000
parents
children 405baf327de2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 // This file (Contain.cs) is a part of the IBBoard.NUnit project and is copyright 2010 IBBoard
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 //
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU LGPL, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 using System;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 using NUnit.Framework.Constraints;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 using NUnit.Framework;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 namespace IBBoard.NUnit.Constraints
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 /// <summary>
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 /// Requires a list of objects to appear in a given order from the start of an array
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 /// </summary>
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 public class ArrayContainsConstraint<T> : Constraint
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 private static readonly int NOT_FOUND = -1;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 private T[] containedObjs;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 private int idx = NOT_FOUND;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 public ArrayContainsConstraint(params T[] containedObjects)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 containedObjs = containedObjects;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 public override bool Matches(object actual)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 this.actual = actual;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 if (!(actual is Array))
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 throw new ArgumentException("The actual value must be an array");
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 return DoMatch((object[])this.actual);
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 private bool DoMatch(object[] array)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 bool isMatch = true;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 idx = NOT_FOUND;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 if (containedObjs.Length != array.Length)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
41 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42 isMatch = false;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
44 else
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46 for (int i = 0; i < containedObjs.Length; i++)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
48 if (!EqualityChecker.AreEqual(containedObjs[i], array[i]))
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50 isMatch = false;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
51 idx = i;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
52 break;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
53 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
54 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
55 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
56
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
57 return isMatch;
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
58 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
59
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
60 public override void WriteDescriptionTo(MessageWriter writer)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
61 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
62 if (containedObjs.Length == 0)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
63 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
64 writer.Write("Empty array");
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
65 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
66 else if (idx == NOT_FOUND)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
67 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
68 writer.WriteExpectedValue(containedObjs[0]);
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
69 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
70 else
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
71 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
72 writer.WriteExpectedValue(containedObjs[idx]);
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
73 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
74 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
75
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
76 public override void WriteActualValueTo(MessageWriter writer)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
77 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
78 object[] actualArray = ((object[])actual);
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
79
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
80 if (actualArray.Length == 0)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
81 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
82 writer.Write("Empty array");
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
83 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
84 else if (idx == NOT_FOUND)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
85 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
86 writer.WriteActualValue(actualArray[0]);
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
87 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
88 else
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
89 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
90 writer.WriteActualValue(actualArray[idx]);
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
91 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
92 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
93
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
94 public override void WriteMessageTo(MessageWriter writer)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
95 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
96 base.WriteMessageTo(writer);
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
97
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
98 if (idx != NOT_FOUND)
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
99 {
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
100 writer.WriteMessageLine("Incorrect value at {0}", idx);
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
101 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
102 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
103 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
104 }
4dad6872ca5a Re #46: Add NUnit helper methods
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
105