Title: [728] trunk/core/src/java/org/jbehave/core: [EK] Added UsingArrayMatchers; still needs to be included in UsingMatchers.
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

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:

http://xircles.codehaus.org/manage_email

Reply via email to