- Revision
- 728
- Author
- sirenian
- Date
- 2007-05-22 08:51:08 -0500 (Tue, 22 May 2007)
Log Message
[EK] Added UsingArrayMatchers; still needs to be included in UsingMatchers. Added 2.0 comment, uncommented some behaviours (oops).
Modified Paths
- trunk/core/src/behaviour/org/jbehave/core/matchers/UsingCollectionMatchersBehaviour.java
- trunk/core/src/java/org/jbehave/core/Ensure.java
Added Paths
Diff
Added: trunk/core/src/behaviour/org/jbehave/core/matchers/UsingArrayMatchersBehaviour.java (0 => 728)
--- trunk/core/src/behaviour/org/jbehave/core/matchers/UsingArrayMatchersBehaviour.java (rev 0) +++ trunk/core/src/behaviour/org/jbehave/core/matchers/UsingArrayMatchersBehaviour.java 2007-05-22 13:51:08 UTC (rev 728) @@ -0,0 +1,82 @@ +package org.jbehave.core.matchers; + +import org.jbehave.core.Ensure; +import org.jbehave.core.mock.Matcher; +import org.jbehave.core.mock.UsingMatchers.CustomMatcher; + +public class UsingArrayMatchersBehaviour { + + private Matcher eq(Object value) { + return UsingEqualityMatchers.eq(value); + } + + private Matcher not(Matcher matcher) { + return UsingLogicalMatchers.not(matcher); + } + + public void shouldProvideMatchersForCollectionsContainingAThing() { + Integer[] array = new Integer[] { Integer.valueOf(3) }; + + Ensure.that(array, UsingArrayMatchers.contains(Integer.valueOf(3))); + Ensure.that(array, UsingArrayMatchers.contains(eq(Integer.valueOf(3)))); + + Ensure.that(array, not(UsingArrayMatchers.contains(Integer.valueOf(5)))); + Ensure.that(array, UsingLogicalMatchers.not(UsingArrayMatchers.contains(eq(Integer.valueOf(5))))); + } + + public void shouldProvideMatchersForCollectionsContainingSomeThings() { + Integer[] array = new Integer[] { + Integer.valueOf(3), + Integer.valueOf(4), + Integer.valueOf(5)}; + + Ensure.that(array, UsingLogicalMatchers.not(UsingArrayMatchers.contains(Integer.valueOf(7)))); + Ensure.that(array, UsingArrayMatchers.contains(Integer.valueOf(3), Integer.valueOf(4))); + Ensure.that(array, UsingArrayMatchers.contains(Integer.valueOf(5), Integer.valueOf(4), Integer.valueOf(3))); + Ensure.that(array, UsingArrayMatchers.contains(new Object[] {Integer.valueOf(3)})); + + Ensure.that(array, not(UsingArrayMatchers.contains(eq(Integer.valueOf(7))))); + Ensure.that(array, UsingArrayMatchers.contains(eq(Integer.valueOf(3)), eq(Integer.valueOf(4)))); + Ensure.that(array, UsingArrayMatchers.contains(eq(Integer.valueOf(5)), eq(Integer.valueOf(4)), eq(Integer.valueOf(3)))); + Ensure.that(array, UsingArrayMatchers.contains(new Matcher[] {eq(Integer.valueOf(3))})); + } + + public void shouldProvideMatchersForCollectionsContainingOnlyThings() { + Integer[] array = new Integer[] { + Integer.valueOf(3), + Integer.valueOf(4), + Integer.valueOf(5)}; + + Ensure.that(array, UsingLogicalMatchers.not(UsingArrayMatchers.containsOnly(Integer.valueOf(3), Integer.valueOf(4)))); + Ensure.that(array, UsingArrayMatchers.containsOnly(Integer.valueOf(5), Integer.valueOf(4), Integer.valueOf(3))); + Ensure.that(array, UsingArrayMatchers.containsOnly(eq(Integer.valueOf(5)), eq(Integer.valueOf(4)), eq(Integer.valueOf(3)))); + } + + public void shouldProvideMatchersForCollectionsContainingThingsInOrder() { + Integer[] array = new Integer[] { + Integer.valueOf(3), + Integer.valueOf(4), + Integer.valueOf(5)}; + + Ensure.that(array, not(UsingArrayMatchers.containsInOrder(Integer.valueOf(3), Integer.valueOf(5), Integer.valueOf(4)))); + Ensure.that(array, UsingArrayMatchers.containsInOrder(Integer.valueOf(3), Integer.valueOf(4), Integer.valueOf(5))); + } + + public void shouldDescribeMatchersForCollections() { + Integer[] array = new Integer[] { Integer.valueOf(5), Integer.valueOf(6)}; + + CustomMatcher contains = UsingArrayMatchers.contains(Integer.valueOf(4), Integer.valueOf(5)); + CustomMatcher containsOnly = UsingArrayMatchers.containsOnly(Integer.valueOf(4), Integer.valueOf(5)); + CustomMatcher containsInOrder = UsingArrayMatchers.containsInOrder(Integer.valueOf(4), Integer.valueOf(5)); + + // Describe what we expected + Ensure.that(contains.toString(), eq("an array containing [equal to <4>, equal to <5>]")); + Ensure.that(containsOnly.toString(), eq("an array containing [equal to <4>, equal to <5>] and nothing else")); + Ensure.that(containsInOrder.toString(), eq("an array containing [equal to <4>, equal to <5>] and in order")); + + // Describe what we got + Ensure.that(contains.describe(array), eq("a " + Integer[].class.getSimpleName() + " containing [5, 6]")); + Ensure.that(containsOnly.describe(array), eq("a " + Integer[].class.getSimpleName() + " containing [5, 6]")); + Ensure.that(containsInOrder.describe(array), eq("a " + Integer[].class.getSimpleName() + " containing [5, 6]")); + } +}
Modified: trunk/core/src/behaviour/org/jbehave/core/matchers/UsingCollectionMatchersBehaviour.java (727 => 728)
--- trunk/core/src/behaviour/org/jbehave/core/matchers/UsingCollectionMatchersBehaviour.java 2007-05-20 17:55:12 UTC (rev 727) +++ trunk/core/src/behaviour/org/jbehave/core/matchers/UsingCollectionMatchersBehaviour.java 2007-05-22 13:51:08 UTC (rev 728) @@ -3,13 +3,10 @@ import java.util.ArrayList; import org.jbehave.core.Ensure; -import org.jbehave.core.exception.VerificationException; import org.jbehave.core.mock.Matcher; -import org.jbehave.core.mock.UsingMatchers; import org.jbehave.core.mock.UsingMatchers.CustomMatcher; public class UsingCollectionMatchersBehaviour { - private static final String NL = System.getProperty("line.separator"); private Matcher eq(Object value) { return UsingEqualityMatchers.eq(value); @@ -18,56 +15,56 @@ private Matcher not(Matcher matcher) { return UsingLogicalMatchers.not(matcher); } -// -// public void shouldProvideMatchersForCollectionsContainingAThing() { -// ArrayList list = new ArrayList(); -// list.add(Integer.valueOf(3)); -// -// Ensure.that(list, UsingCollectionMatchers.contains(Integer.valueOf(3))); -// Ensure.that(list, UsingCollectionMatchers.contains(eq(Integer.valueOf(3)))); -// -// Ensure.that(list, not(UsingCollectionMatchers.contains(Integer.valueOf(5)))); -// Ensure.that(list, UsingLogicalMatchers.not(UsingCollectionMatchers.contains(eq(Integer.valueOf(5))))); -// } -// -// public void shouldProvideMatchersForCollectionsContainingSomeThings() { -// ArrayList list = new ArrayList(); -// list.add(Integer.valueOf(3)); -// list.add(Integer.valueOf(4)); -// list.add(Integer.valueOf(5)); -// -// Ensure.that(list, UsingLogicalMatchers.not(UsingCollectionMatchers.contains(Integer.valueOf(7)))); -// Ensure.that(list, UsingCollectionMatchers.contains(Integer.valueOf(3), Integer.valueOf(4))); -// Ensure.that(list, UsingCollectionMatchers.contains(Integer.valueOf(5), Integer.valueOf(4), Integer.valueOf(3))); -// Ensure.that(list, UsingCollectionMatchers.contains(new Object[] {Integer.valueOf(3)})); -// -// Ensure.that(list, not(UsingCollectionMatchers.contains(eq(Integer.valueOf(7))))); -// Ensure.that(list, UsingCollectionMatchers.contains(eq(Integer.valueOf(3)), eq(Integer.valueOf(4)))); -// Ensure.that(list, UsingCollectionMatchers.contains(eq(Integer.valueOf(5)), eq(Integer.valueOf(4)), eq(Integer.valueOf(3)))); -// Ensure.that(list, UsingCollectionMatchers.contains(new Matcher[] {eq(Integer.valueOf(3))})); -// } -// -// public void shouldProvideMatchersForCollectionsContainingOnlyThings() { -// ArrayList list = new ArrayList(); -// list.add(Integer.valueOf(3)); -// list.add(Integer.valueOf(4)); -// list.add(Integer.valueOf(5)); -// -// Ensure.that(list, UsingLogicalMatchers.not(UsingCollectionMatchers.containsOnly(Integer.valueOf(3), Integer.valueOf(4)))); -// Ensure.that(list, UsingCollectionMatchers.containsOnly(Integer.valueOf(5), Integer.valueOf(4), Integer.valueOf(3))); -// Ensure.that(list, UsingCollectionMatchers.containsOnly(eq(Integer.valueOf(5)), eq(Integer.valueOf(4)), eq(Integer.valueOf(3)))); -// } -// -// public void shouldProvideMatchersForCollectionsContainingThingsInOrder() { -// ArrayList list = new ArrayList(); -// list.add(Integer.valueOf(3)); -// list.add(Integer.valueOf(4)); -// list.add(Integer.valueOf(5)); -// -// Ensure.that(list, not(UsingCollectionMatchers.containsInOrder(Integer.valueOf(3), Integer.valueOf(5), Integer.valueOf(4)))); -// Ensure.that(list, UsingCollectionMatchers.containsInOrder(Integer.valueOf(3), Integer.valueOf(4), Integer.valueOf(5))); -// } + public void shouldProvideMatchersForCollectionsContainingAThing() { + ArrayList list = new ArrayList(); + list.add(Integer.valueOf(3)); + + Ensure.that(list, UsingCollectionMatchers.contains(Integer.valueOf(3))); + Ensure.that(list, UsingCollectionMatchers.contains(eq(Integer.valueOf(3)))); + + Ensure.that(list, not(UsingCollectionMatchers.contains(Integer.valueOf(5)))); + Ensure.that(list, UsingLogicalMatchers.not(UsingCollectionMatchers.contains(eq(Integer.valueOf(5))))); + } + + public void shouldProvideMatchersForCollectionsContainingSomeThings() { + ArrayList list = new ArrayList(); + list.add(Integer.valueOf(3)); + list.add(Integer.valueOf(4)); + list.add(Integer.valueOf(5)); + + Ensure.that(list, UsingLogicalMatchers.not(UsingCollectionMatchers.contains(Integer.valueOf(7)))); + Ensure.that(list, UsingCollectionMatchers.contains(Integer.valueOf(3), Integer.valueOf(4))); + Ensure.that(list, UsingCollectionMatchers.contains(Integer.valueOf(5), Integer.valueOf(4), Integer.valueOf(3))); + Ensure.that(list, UsingCollectionMatchers.contains(new Object[] {Integer.valueOf(3)})); + + Ensure.that(list, not(UsingCollectionMatchers.contains(eq(Integer.valueOf(7))))); + Ensure.that(list, UsingCollectionMatchers.contains(eq(Integer.valueOf(3)), eq(Integer.valueOf(4)))); + Ensure.that(list, UsingCollectionMatchers.contains(eq(Integer.valueOf(5)), eq(Integer.valueOf(4)), eq(Integer.valueOf(3)))); + Ensure.that(list, UsingCollectionMatchers.contains(new Matcher[] {eq(Integer.valueOf(3))})); + } + + public void shouldProvideMatchersForCollectionsContainingOnlyThings() { + ArrayList list = new ArrayList(); + list.add(Integer.valueOf(3)); + list.add(Integer.valueOf(4)); + list.add(Integer.valueOf(5)); + + Ensure.that(list, UsingLogicalMatchers.not(UsingCollectionMatchers.containsOnly(Integer.valueOf(3), Integer.valueOf(4)))); + Ensure.that(list, UsingCollectionMatchers.containsOnly(Integer.valueOf(5), Integer.valueOf(4), Integer.valueOf(3))); + Ensure.that(list, UsingCollectionMatchers.containsOnly(eq(Integer.valueOf(5)), eq(Integer.valueOf(4)), eq(Integer.valueOf(3)))); + } + + public void shouldProvideMatchersForCollectionsContainingThingsInOrder() { + ArrayList list = new ArrayList(); + list.add(Integer.valueOf(3)); + list.add(Integer.valueOf(4)); + list.add(Integer.valueOf(5)); + + Ensure.that(list, not(UsingCollectionMatchers.containsInOrder(Integer.valueOf(3), Integer.valueOf(5), Integer.valueOf(4)))); + Ensure.that(list, UsingCollectionMatchers.containsInOrder(Integer.valueOf(3), Integer.valueOf(4), Integer.valueOf(5))); + } + public void shouldDescribeMatchersForCollections() { ArrayList list = new ArrayList(); list.add(Integer.valueOf(5));
Modified: trunk/core/src/java/org/jbehave/core/Ensure.java (727 => 728)
--- trunk/core/src/java/org/jbehave/core/Ensure.java 2007-05-20 17:55:12 UTC (rev 727) +++ trunk/core/src/java/org/jbehave/core/Ensure.java 2007-05-22 13:51:08 UTC (rev 728) @@ -120,6 +120,7 @@ that(exception, UsingEqualityMatchers.isNull()); } + /* TODO 2.0 remove deprecated Ensure methods. */ /** @deprecated use UsingMatchers or UsingEqualityMatchers.isA */ public static void instanceOf(Class type, Object instance) { that(instance, UsingEqualityMatchers.isA(type));
Added: trunk/core/src/java/org/jbehave/core/matchers/UsingArrayMatchers.java (0 => 728)
--- trunk/core/src/java/org/jbehave/core/matchers/UsingArrayMatchers.java (rev 0) +++ trunk/core/src/java/org/jbehave/core/matchers/UsingArrayMatchers.java 2007-05-22 13:51:08 UTC (rev 728) @@ -0,0 +1,210 @@ +package org.jbehave.core.matchers; + +import java.util.Arrays; + +import org.jbehave.core.mock.Matcher; +import org.jbehave.core.mock.UsingMatchers.CustomMatcher; + +public class UsingArrayMatchers { + + public static CustomMatcher isContainedIn(final Object[] array) { + return new CustomMatcher("is contained in " + array) { + public boolean matches(Object arg) { + return Arrays.asList(array).contains(arg); + } + }; + } + + public static CustomMatcher contains(final Matcher[] matchers) { + if (matchers.length == 0) { + return contains(UsingEqualityMatchers.nothing()); + } + + CustomMatcher matcher = containsA(matchers[0]); + for (int i = 1; i < matchers.length; i++) { + matcher = UsingLogicalMatchers.and(matcher, containsA(matchers[i])); + } + + return suitablyDescriptiveMatcher(matchers, matcher); + } + + private static CustomMatcher suitablyDescriptiveMatcher(final Matcher[] matchers, final CustomMatcher finalMatcher) { + return new CustomMatcher(""){ + public boolean matches(Object arg) { + return finalMatcher.matches(arg); + } + + public String describe(Object arg) { + Object[] array = (Object[]) arg; + StringBuffer buffer = new StringBuffer(); + buffer.append("a " + arg.getClass().getSimpleName() + " containing "); + describe(array, buffer); + return buffer.toString(); + } + + private void describe(Object[] array, StringBuffer buffer) { + buffer.append("["); + for (int i = 0; i < array.length; i++) { + buffer.append(array[i]); + if(i < array.length - 1) { + buffer.append(", "); + } + } + buffer.append("]"); + } + + public String toString() { + StringBuffer buffer = new StringBuffer(); + describe(matchers, buffer); + return "an array containing " + buffer; + } + }; + } + + + private static CustomMatcher containsA(final Matcher matcher) { + return new CustomMatcher("" + matcher) { + public boolean matches(Object arg) { + Object[] array = (Object[]) arg; + for (int i = 0; i < array.length; i++) { + if (matcher.matches(array[i])) { + return true; + } + } + return false; + } + }; + } + + + public static CustomMatcher contains(Matcher matcher) { + return contains(new Matcher[] {matcher}); + } + + + public static CustomMatcher contains(Object object) { + return contains(new Object[]{object}); + } + + + public static CustomMatcher contains(Object a, Object b) { + return contains(new Object[]{a, b}); + } + + public static CustomMatcher contains(Object a, Object b, Object c) { + return contains(new Object[]{a, b, c}); + } + + public static CustomMatcher contains(Matcher a, Matcher b) { + return contains(new Matcher[] {a, b}); + } + + public static CustomMatcher contains(Matcher a, Matcher b, Matcher c) { + return contains(new Matcher[] {a, b, c}); + } + + public static CustomMatcher contains(Object[] objects) { + return contains(allEq(objects)); + } + + public static CustomMatcher containsOnly(Object a) { + return containsOnly(new Object[] {a}); + } + + public static CustomMatcher containsOnly(Object a, Object b) { + return containsOnly(new Object[] {a, b}); + } + + public static CustomMatcher containsOnly(Object a, Object b, Object c) { + return containsOnly(new Object[] {a, b, c}); + } + + public static CustomMatcher containsOnly(Object[] objects) { + return containsOnly(allEq(objects)); + } + + public static CustomMatcher containsOnly(Matcher a) { + return containsOnly(new Matcher[] {a}); + } + + public static CustomMatcher containsOnly(Matcher a, Matcher b) { + return containsOnly(new Matcher[] {a, b}); + } + + public static CustomMatcher containsOnly(Matcher a, Matcher b, Matcher c) { + return containsOnly(new Matcher[] {a, b, c}); + } + + public static CustomMatcher containsOnly(final Matcher[] matchers) { + CustomMatcher lengthMatcher = new CustomMatcher("nothing else"){ + public boolean matches(Object arg) { + return ((Object[])arg).length == matchers.length; + }}; + + return contains(matchers).and(lengthMatcher); + } + + private static Matcher[] allEq(Object[] objects) { + Matcher[] matchers = new Matcher[objects.length]; + for (int i = 0; i < objects.length; i++) { + matchers[i] = UsingEqualityMatchers.eq(objects[i]); + } + return matchers; + } + + public static CustomMatcher containsInOrder(Object a) { + return containsInOrder(new Object[] {a}); + } + + public static CustomMatcher containsInOrder(Object a, Object b) { + return containsInOrder(new Object[] {a, b}); + } + + public static CustomMatcher containsInOrder(Object a, Object b, Object c) { + return containsInOrder(new Object[] {a, b, c}); + } + + public static CustomMatcher containsInOrder(Object[] objects) { + return containsInOrder(allEq(objects)); + } + + public static CustomMatcher containsInOrder(Matcher a) { + return containsInOrder(new Matcher[] {a}); + } + + public static CustomMatcher containsInOrder(Matcher a, Matcher b) { + return containsInOrder(new Matcher[] {a, b}); + } + + public static CustomMatcher containsInOrder(Matcher a, Matcher b, Matcher c) { + return containsInOrder(new Matcher[] {a, b, c}); + } + + public static CustomMatcher containsInOrder(final Matcher[] matchers) { + if (matchers.length == 0) { + return contains(UsingEqualityMatchers.nothing()); + } + + CustomMatcher aggregateMatcher = containsAt(matchers[0], 0); + + for (int i = 1; i < matchers.length; i++) { + aggregateMatcher = UsingLogicalMatchers.and(aggregateMatcher, containsAt(matchers[i], i)); + } + + Matcher inOrderDescription = new Matcher() { + public boolean matches(Object arg) { return true; } + public String toString() { return "in order"; } + }; + + return suitablyDescriptiveMatcher(matchers, aggregateMatcher).and(inOrderDescription); + } + + private static CustomMatcher containsAt(final Matcher matcher, final int i) { + return new CustomMatcher("" + matcher) { + public boolean matches(Object arg) { + Object[] array = (Object[]) arg; + return matcher.matches(array[i]); + } + }; + } +}
To unsubscribe from this list please visit:
