You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/04/21 08:38:10 UTC

svn commit: r530987 - in /activemq/camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ main/java/org/apache/camel/component/mock/ test/java/org/apache/camel/processor/

Author: jstrachan
Date: Fri Apr 20 23:38:09 2007
New Revision: 530987

URL: http://svn.apache.org/viewvc?view=rev&rev=530987
Log:
added the ability to add assertions to individual messages using the DSL

Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/AssertionClause.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java?view=diff&rev=530987&r1=530986&r2=530987
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java Fri Apr 20 23:38:09 2007
@@ -44,57 +44,57 @@
     @Fluent
     public Predicate<E> isNotEqualTo(@FluentArg("value") Object value) {
         Expression<E> right = ExpressionBuilder.constantExpression(value);
-        return PredicateBuilder.isNotEqualTo(expression, right);
+        return onNewPredicate(PredicateBuilder.isNotEqualTo(expression, right));
     }
 
     @Fluent
     public Predicate<E> isEqualTo(@FluentArg("value") Object value) {
         Expression<E> right = ExpressionBuilder.constantExpression(value);
-        return PredicateBuilder.isEqualTo(expression, right);
+        return onNewPredicate(PredicateBuilder.isEqualTo(expression, right));
     }
 
     @Fluent
     public Predicate<E> isLessThan(@FluentArg("value") Object value) {
         Expression<E> right = ExpressionBuilder.constantExpression(value);
-        return PredicateBuilder.isLessThan(expression, right);
+        return onNewPredicate(PredicateBuilder.isLessThan(expression, right));
     }
 
     @Fluent
     public Predicate<E> isLessThanOrEqualTo(@FluentArg("value") Object value) {
         Expression<E> right = ExpressionBuilder.constantExpression(value);
-        return PredicateBuilder.isLessThanOrEqualTo(expression, right);
+        return onNewPredicate(PredicateBuilder.isLessThanOrEqualTo(expression, right));
     }
 
     @Fluent
     public Predicate<E> isGreaterThan(@FluentArg("value") Object value) {
         Expression<E> right = ExpressionBuilder.constantExpression(value);
-        return PredicateBuilder.isGreaterThan(expression, right);
+        return onNewPredicate(PredicateBuilder.isGreaterThan(expression, right));
     }
 
     @Fluent
     public Predicate<E> isGreaterThanOrEqualTo(@FluentArg("value") Object value) {
         Expression<E> right = ExpressionBuilder.constantExpression(value);
-        return PredicateBuilder.isGreaterThanOrEqualTo(expression, right);
+        return onNewPredicate(PredicateBuilder.isGreaterThanOrEqualTo(expression, right));
     }
 
     @Fluent
     public Predicate<E> isInstanceOf(@FluentArg("class") Class type) {
-        return PredicateBuilder.isInstanceOf(expression, type);
+        return onNewPredicate(PredicateBuilder.isInstanceOf(expression, type));
     }
 
     @Fluent
     public Predicate<E> matchesRegex(@FluentArg("regex") String regex) {
-        return PredicateBuilder.regex(expression, regex);
+        return onNewPredicate(PredicateBuilder.regex(expression, regex));
     }
 
     @Fluent
     public Predicate<E> isNull() {
-        return PredicateBuilder.isNull(expression);
+        return onNewPredicate(PredicateBuilder.isNull(expression));
     }
 
     @Fluent
     public Predicate<E> isNotNull() {
-        return PredicateBuilder.isNotNull(expression);
+        return onNewPredicate(PredicateBuilder.isNotNull(expression));
     }
 
     @Fluent
@@ -130,4 +130,11 @@
         return convertTo(String.class);
     }
 
+    /**
+     * A stategy method to allow derived classes to deal with the newly created predicate
+     * in different ways
+     */
+    protected Predicate<E> onNewPredicate(Predicate<E> predicate) {
+        return predicate;
+    }
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/AssertionClause.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/AssertionClause.java?view=diff&rev=530987&r1=530986&r2=530987
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/AssertionClause.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/AssertionClause.java Fri Apr 20 23:38:09 2007
@@ -19,12 +19,16 @@
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
+import org.apache.camel.Predicate;
 import static org.apache.camel.builder.ExpressionBuilder.bodyExpression;
 import static org.apache.camel.builder.ExpressionBuilder.headerExpression;
 import org.apache.camel.builder.Fluent;
 import org.apache.camel.builder.FluentArg;
 import org.apache.camel.builder.ValueBuilder;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * A builder of assertions on message exchanges
  *
@@ -32,58 +36,90 @@
  */
 public abstract class AssertionClause<E extends Exchange> implements Runnable {
 
+    private List<Predicate<E>> predicates = new ArrayList<Predicate<E>>();
+
     // Builder methods
     //-------------------------------------------------------------------------
 
     /**
+     * Adds the given predicate to this assertion clause
+     */
+    public AssertionClause<E> predicate(Predicate<E> predicate) {
+        addPredicate(predicate);
+        return this;
+    }
+
+    /**
      * Returns a predicate and value builder for headers on an exchange
      */
     @Fluent
-    public ValueBuilder<E> header(@FluentArg("name") String name) {
+    public ValueBuilder<E> header(@FluentArg("name")String name) {
         Expression<E> expression = headerExpression(name);
-        return new ValueBuilder<E>(expression);
+        return new PredicateValueBuilder(expression);
     }
 
     /**
      * Returns a predicate and value builder for the inbound body on an exchange
      */
     @Fluent
-    public ValueBuilder<E> body() {
+    public PredicateValueBuilder body() {
         Expression<E> expression = bodyExpression();
-        return new ValueBuilder<E>(expression);
+        return new PredicateValueBuilder(expression);
     }
 
     /**
      * Returns a predicate and value builder for the inbound message body as a specific type
      */
     @Fluent
-    public <T> ValueBuilder<E> bodyAs(@FluentArg("class") Class<T> type) {
+    public <T> PredicateValueBuilder bodyAs(@FluentArg("class")Class<T> type) {
         Expression<E> expression = bodyExpression(type);
-        return new ValueBuilder<E>(expression);
+        return new PredicateValueBuilder(expression);
     }
 
     /**
      * Returns a predicate and value builder for the outbound body on an exchange
      */
     @Fluent
-    public ValueBuilder<E> outBody() {
+    public PredicateValueBuilder outBody() {
         Expression<E> expression = bodyExpression();
-        return new ValueBuilder<E>(expression);
+        return new PredicateValueBuilder(expression);
     }
 
     /**
      * Returns a predicate and value builder for the outbound message body as a specific type
      */
     @Fluent
-    public <T> ValueBuilder<E> outBody(@FluentArg("class") Class<T> type) {
+    public <T> PredicateValueBuilder outBody(@FluentArg("class")Class<T> type) {
         Expression<E> expression = bodyExpression(type);
-        return new ValueBuilder<E>(expression);
+        return new PredicateValueBuilder(expression);
     }
 
     /**
      * Performs any assertions on the given exchange
      */
-    protected void applyAssertionOn(int index, Exchange exchange) {
-        // TODO perform the predicate on the given exchange 
+    protected void applyAssertionOn(MockEndpoint endpoint, int index, E exchange) {
+        for (Predicate<E> predicate : predicates) {
+            if (!predicate.matches(exchange)) {
+                endpoint.fail("Message " + index + " failed Predicate " + predicate + " with " + exchange);
+            }
+        }
+    }
+
+    protected void addPredicate(Predicate<E> predicate) {
+        predicates.add(predicate);
+    }
+
+    protected class PredicateValueBuilder extends ValueBuilder<E> {
+
+        public PredicateValueBuilder(Expression<E> expression) {
+            super(expression);
+        }
+
+
+        protected Predicate<E> onNewPredicate(Predicate<E> predicate) {
+            //addPredicate(predicate);
+            predicates.add(predicate);
+            return predicate;
+        }
     }
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?view=diff&rev=530987&r1=530986&r2=530987
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java Fri Apr 20 23:38:09 2007
@@ -209,7 +209,7 @@
     public AssertionClause message(final int messageIndex) {
         AssertionClause clause = new AssertionClause() {
             public void run() {
-                applyAssertionOn(messageIndex, assertExchangeReceived(messageIndex));
+                applyAssertionOn(MockEndpoint.this, messageIndex, assertExchangeReceived(messageIndex));
             }
         };
         expects(clause);
@@ -219,7 +219,6 @@
     /**
      * Adds an assertion to all the received messages
      *
-     * @param messageIndex the number of the message
      * @return the assertion clause
      */
     public AssertionClause allMessages() {
@@ -228,7 +227,7 @@
                 List<Exchange> list = getExchangesReceived();
                 int index = 0;
                 for (Exchange exchange : list) {
-                    applyAssertionOn(index++, exchange);
+                    applyAssertionOn(MockEndpoint.this, index++, exchange);
                 }
             }
         };
@@ -242,7 +241,7 @@
     public Exchange assertExchangeReceived(int index) {
         int count = getReceivedCounter();
         assertTrue("Not enough messages received. Was: " + count, count > index);
-        return getExchangesReceived().get(count);
+        return getExchangesReceived().get(index);
     }
 
     // Properties

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java?view=diff&rev=530987&r1=530986&r2=530987
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java Fri Apr 20 23:38:09 2007
@@ -36,6 +36,8 @@
 
     public void testFirstFewAttemptsFail() throws Exception {
         successEndpoint.expectedBodiesReceived(body);
+        //successEndpoint.message(0).header(DeadLetterChannel.REDELIVERED).isEqualTo(true);
+        
         deadEndpoint.expectedMessageCount(0);
 
         send("direct:start", body);