You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/10/01 08:13:12 UTC

svn commit: r1003398 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ main/java/org/apache/camel/component/mock/ test/java/org/apache/camel/builder/xml/

Author: davsclaus
Date: Fri Oct  1 06:13:12 2010
New Revision: 1003398

URL: http://svn.apache.org/viewvc?rev=1003398&view=rev
Log:
CAMEL-3182: Easier to set predicates on mock endpoints.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XPathMockTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java?rev=1003398&r1=1003397&r2=1003398&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java Fri Oct  1 06:13:12 2010
@@ -47,8 +47,12 @@ public final class PredicateBuilder {
     public static Predicate toPredicate(final Expression expression) {
         return new Predicate() {
             public boolean matches(Exchange exchange) {
-                Object value = expression.evaluate(exchange, Object.class);
-                return ObjectHelper.evaluateValuePredicate(value);
+                if (expression instanceof Predicate) {
+                    return ((Predicate) expression).matches(exchange);
+                } else {
+                    Object value = expression.evaluate(exchange, Object.class);
+                    return ObjectHelper.evaluateValuePredicate(value);
+                }
             }
 
             @Override

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java?rev=1003398&r1=1003397&r2=1003398&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java Fri Oct  1 06:13:12 2010
@@ -56,10 +56,10 @@ public class ValueBuilder implements Exp
         return onNewPredicate(PredicateBuilder.toPredicate(expression));
     }
 
-    public Predicate matches() {
-        return onNewPredicate(PredicateBuilder.toPredicate(expression));
+    public ExpressionClause<Predicate> matches() {
+        return new ExpressionClause<Predicate>(onNewPredicate(PredicateBuilder.toPredicate(expression))); 
     }
-    
+
     public Predicate isNotEqualTo(Object value) {
         Expression right = asExpression(value);
         return onNewPredicate(PredicateBuilder.isNotEqualTo(expression, right));

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?rev=1003398&r1=1003397&r2=1003398&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java Fri Oct  1 06:13:12 2010
@@ -461,6 +461,23 @@ public class MockEndpoint extends Defaul
     }
 
     /**
+     * Sets an expectation that the given predicates matches the received messages by this endpoint
+     */
+    public void expectedMessagesMatches(Predicate... predicates) {
+        for (int i = 0; i < predicates.length; i++) {
+            final int messageIndex = i;
+            final Predicate predicate = predicates[i];
+            final AssertionClause clause = new AssertionClause() {
+                public void run() {
+                    addPredicate(predicate);
+                    applyAssertionOn(MockEndpoint.this, messageIndex, assertExchangeReceived(messageIndex));
+                }
+            };
+            expects(clause);
+        }
+    }
+
+    /**
      * Sets an expectation that the given body values are received by this endpoint
      */
     public void expectedBodiesReceived(Object... bodies) {

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XPathMockTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XPathMockTest.java?rev=1003398&r1=1003397&r2=1003398&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XPathMockTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XPathMockTest.java Fri Oct  1 06:13:12 2010
@@ -20,6 +20,7 @@ import org.apache.camel.ContextTestSuppo
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 
+import static org.apache.camel.builder.PredicateBuilder.not;
 import static org.apache.camel.builder.xml.XPathBuilder.xpath;
 
 /**
@@ -36,6 +37,53 @@ public class XPathMockTest extends Conte
         assertMockEndpointsSatisfied();
     }
 
+    public void testXPathMock2() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.message(0).body().matches().xpath("/foo/text() = 'Hello World'");
+
+        template.sendBody("direct:start", "<foo>Hello World</foo>");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testXPathMock3() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.message(0).predicate().xpath("/foo/text() = 'Hello World'");
+
+        template.sendBody("direct:start", "<foo>Hello World</foo>");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testXPathMockMatches() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMessagesMatches(xpath("/foo/text() = 'Hello World'"));
+
+        template.sendBody("direct:start", "<foo>Hello World</foo>");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testXPathMockMatchesTwo() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMessagesMatches(xpath("/foo/text() = 'Hello World'"), xpath("/foo/text() = 'Bye World'"));
+
+        template.sendBody("direct:start", "<foo>Hello World</foo>");
+        template.sendBody("direct:start", "<foo>Bye World</foo>");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testNonXPathMockMatches() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMessagesMatches(not(body().contains("Bye")), body().contains("World"));
+
+        template.sendBody("direct:start", "<foo>Hello World</foo>");
+        template.sendBody("direct:start", "<foo>Bye World</foo>");
+
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {