Return-Path: Delivered-To: apmail-activemq-commits-archive@www.apache.org Received: (qmail 29058 invoked from network); 24 Apr 2007 09:55:08 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 24 Apr 2007 09:55:08 -0000 Received: (qmail 55728 invoked by uid 500); 24 Apr 2007 09:55:15 -0000 Delivered-To: apmail-activemq-commits-archive@activemq.apache.org Received: (qmail 55702 invoked by uid 500); 24 Apr 2007 09:55:15 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 55693 invoked by uid 99); 24 Apr 2007 09:55:15 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 24 Apr 2007 02:55:15 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 24 Apr 2007 02:55:07 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id EA3101A9838; Tue, 24 Apr 2007 02:54:46 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r531854 - in /activemq/camel/trunk: camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/builder/xpath/ camel-core/src/main/java/org/apache/camel/component/m... Date: Tue, 24 Apr 2007 09:54:44 -0000 To: commits@activemq.apache.org From: jstrachan@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070424095446.EA3101A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jstrachan Date: Tue Apr 24 02:54:42 2007 New Revision: 531854 URL: http://svn.apache.org/viewvc?view=rev&rev=531854 Log: added the ability to add assertions to predicates for easier testing of routing rules; such as with the MockEndpoint Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/BinaryPredicateSupport.java (with props) activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/PredicateSupport.java (with props) Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicate.java activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xpath/XPathBuilder.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/converter/ObjectConverter.java activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java activemq/camel/trunk/camel-josql/src/main/java/org/apache/camel/builder/sql/SqlBuilder.java activemq/camel/trunk/camel-saxon/src/main/java/org/apache/camel/builder/saxon/XQueryBuilder.java activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicate.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicate.java?view=diff&rev=531854&r1=531853&r2=531854 ============================================================================== --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicate.java (original) +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicate.java Tue Apr 24 02:54:42 2007 @@ -31,4 +31,16 @@ * @return true if the predicate matches */ boolean matches(E exchange); + + /** + * Allows this predicate to be used nicely in testing to generate + * a nicely formatted exception and message if this predicate does not + * match for the given exchange. + * + * @param text the description to use in the exception message + * @param exchange the exchange to evaluate the expression on + * @throws AssertionError if the predicate does not match + */ + void assertMatches(String text, E exchange) throws AssertionError; + } Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java?view=diff&rev=531854&r1=531853&r2=531854 ============================================================================== --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java (original) +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java Tue Apr 24 02:54:42 2007 @@ -16,9 +16,12 @@ */ package org.apache.camel.builder; +import static org.apache.camel.util.ObjectHelper.compare; import org.apache.camel.Exchange; import org.apache.camel.Expression; import org.apache.camel.Predicate; +import org.apache.camel.impl.PredicateSupport; +import org.apache.camel.impl.BinaryPredicateSupport; import org.apache.camel.util.ObjectHelper; import static org.apache.camel.util.ObjectHelper.notNull; @@ -37,7 +40,7 @@ public static Predicate and(final Predicate left, final Predicate right) { notNull(left, "left"); notNull(right, "right"); - return new Predicate() { + return new PredicateSupport() { public boolean matches(E exchange) { return left.matches(exchange) && right.matches(exchange); } @@ -55,7 +58,7 @@ public static Predicate or(final Predicate left, final Predicate right) { notNull(left, "left"); notNull(right, "right"); - return new Predicate() { + return new PredicateSupport() { public boolean matches(E exchange) { return left.matches(exchange) || right.matches(exchange); } @@ -68,176 +71,122 @@ } public static Predicate isEqualTo(final Expression left, final Expression right) { - notNull(left, "left"); - notNull(right, "right"); + return new BinaryPredicateSupport(left, right) { - return new Predicate() { - public boolean matches(E exchange) { - Object value1 = left.evaluate(exchange); - Object value2 = right.evaluate(exchange); - return ObjectHelper.equals(value1, value2); + protected boolean matches(E exchange, Object leftValue, Object rightValue) { + return ObjectHelper.equals(leftValue, rightValue); } - @Override - public String toString() { - return left + " == " + right; + protected String getOperationText() { + return "=="; } }; } public static Predicate isNotEqualTo(final Expression left, final Expression right) { - notNull(left, "left"); - notNull(right, "right"); + return new BinaryPredicateSupport(left, right) { - return new Predicate() { - public boolean matches(E exchange) { - Object value1 = left.evaluate(exchange); - Object value2 = right.evaluate(exchange); - return !ObjectHelper.equals(value1, value2); + protected boolean matches(E exchange, Object leftValue, Object rightValue) { + return !ObjectHelper.equals(leftValue, rightValue); } - @Override - public String toString() { - return left + " != " + right; + protected String getOperationText() { + return "=="; } }; } public static Predicate isLessThan(final Expression left, final Expression right) { - notNull(left, "left"); - notNull(right, "right"); + return new BinaryPredicateSupport(left, right) { - return new Predicate() { - public boolean matches(E exchange) { - Object value1 = left.evaluate(exchange); - Object value2 = right.evaluate(exchange); - return ObjectHelper.compare(value1, value2) < 0; + protected boolean matches(E exchange, Object leftValue, Object rightValue) { + return compare(leftValue, rightValue) < 0; } - @Override - public String toString() { - return left + " < " + right; + protected String getOperationText() { + return "<"; } }; } public static Predicate isLessThanOrEqualTo(final Expression left, final Expression right) { - notNull(left, "left"); - notNull(right, "right"); + return new BinaryPredicateSupport(left, right) { - return new Predicate() { - public boolean matches(E exchange) { - Object value1 = left.evaluate(exchange); - Object value2 = right.evaluate(exchange); - return ObjectHelper.compare(value1, value2) <= 0; + protected boolean matches(E exchange, Object leftValue, Object rightValue) { + return compare(leftValue, rightValue) <= 0; } - @Override - public String toString() { - return left + " <= " + right; + protected String getOperationText() { + return "<="; } }; } public static Predicate isGreaterThan(final Expression left, final Expression right) { - notNull(left, "left"); - notNull(right, "right"); + return new BinaryPredicateSupport(left, right) { - return new Predicate() { - public boolean matches(E exchange) { - Object value1 = left.evaluate(exchange); - Object value2 = right.evaluate(exchange); - return ObjectHelper.compare(value1, value2) > 0; + protected boolean matches(E exchange, Object leftValue, Object rightValue) { + return compare(leftValue, rightValue) > 0; } - @Override - public String toString() { - return left + " > " + right; + protected String getOperationText() { + return ">"; } }; } public static Predicate isGreaterThanOrEqualTo(final Expression left, final Expression right) { - notNull(left, "left"); - notNull(right, "right"); + return new BinaryPredicateSupport(left, right) { - return new Predicate() { - public boolean matches(E exchange) { - Object value1 = left.evaluate(exchange); - Object value2 = right.evaluate(exchange); - return ObjectHelper.compare(value1, value2) >= 0; + protected boolean matches(E exchange, Object leftValue, Object rightValue) { + return compare(leftValue, rightValue) < 0; } - @Override - public String toString() { - return left + " >= " + right; + protected String getOperationText() { + return ">="; } }; } - public static Predicate isInstanceOf(final Expression expression, final Class type) { - notNull(expression, "expression"); - notNull(type, "type"); + public static Predicate contains(final Expression left, final Expression right) { + return new BinaryPredicateSupport(left, right) { - return new Predicate() { - public boolean matches(E exchange) { - Object value = expression.evaluate(exchange); - return type.isInstance(value); + protected boolean matches(E exchange, Object leftValue, Object rightValue) { + return ObjectHelper.contains(leftValue, rightValue); } - @Override - public String toString() { - return expression + " instanceof " + type.getName(); + protected String getOperationText() { + return "contains"; } }; } public static Predicate isNull(final Expression expression) { - notNull(expression, "expression"); - - return new Predicate() { - public boolean matches(E exchange) { - Object value = expression.evaluate(exchange); - return value == null; - } - - @Override - public String toString() { - return expression + " == null"; - } - }; + return isEqualTo(expression, (Expression) ExpressionBuilder.constantExpression(null)); } public static Predicate isNotNull(final Expression expression) { + return isNotEqualTo(expression, (Expression) ExpressionBuilder.constantExpression(null)); + } + + public static Predicate isInstanceOf(final Expression expression, final Class type) { notNull(expression, "expression"); + notNull(type, "type"); - return new Predicate() { + return new PredicateSupport() { public boolean matches(E exchange) { Object value = expression.evaluate(exchange); - return value != null; + return type.isInstance(value); } @Override public String toString() { - return expression + " != null"; - } - }; - } - - public static Predicate contains(final Expression left, final Expression right) { - notNull(left, "left"); - notNull(right, "right"); - - return new Predicate() { - public boolean matches(E exchange) { - Object value1 = left.evaluate(exchange); - Object value2 = right.evaluate(exchange); - return ObjectHelper.contains(value1, value2); + return expression + " instanceof " + type.getName(); } @Override - public String toString() { - return left + ".contains(" + right + ")"; + protected String assertionFailureMessage(E exchange) { + return super.assertionFailureMessage(exchange) + " for <" + expression.evaluate(exchange) + ">"; } }; } @@ -265,7 +214,7 @@ notNull(expression, "expression"); notNull(pattern, "pattern"); - return new Predicate() { + return new PredicateSupport() { public boolean matches(E exchange) { Object value = expression.evaluate(exchange); if (value != null) { @@ -279,6 +228,12 @@ public String toString() { return expression + ".matches(" + pattern + ")"; } + + @Override + protected String assertionFailureMessage(E exchange) { + return super.assertionFailureMessage(exchange) + " for <" + expression.evaluate(exchange) + ">"; + } + }; } Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xpath/XPathBuilder.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xpath/XPathBuilder.java?view=diff&rev=531854&r1=531853&r2=531854 ============================================================================== --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xpath/XPathBuilder.java (original) +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xpath/XPathBuilder.java Tue Apr 24 02:54:42 2007 @@ -17,6 +17,7 @@ */ package org.apache.camel.builder.xpath; +import static org.apache.camel.converter.ObjectConverter.toBoolean; import org.apache.camel.Exchange; import org.apache.camel.Expression; import org.apache.camel.Predicate; @@ -66,7 +67,15 @@ } public boolean matches(E exchange) { - return ObjectConverter.toBoolean(evaluateAs(exchange, XPathConstants.BOOLEAN)); + Object booleanResult = evaluateAs(exchange, XPathConstants.BOOLEAN); + return toBoolean(booleanResult); + } + + public void assertMatches(String text, E exchange) throws AssertionError { + Object booleanResult = evaluateAs(exchange, XPathConstants.BOOLEAN); + if (!toBoolean(booleanResult)) { + throw new AssertionError(this + " failed on " + exchange + " as returned <" + booleanResult + ">"); + } } public Object evaluate(E exchange) { 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=531854&r1=531853&r2=531854 ============================================================================== --- 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 Tue Apr 24 02:54:42 2007 @@ -117,8 +117,7 @@ protected Predicate onNewPredicate(Predicate predicate) { - //addPredicate(predicate); - predicates.add(predicate); + addPredicate(predicate); return predicate; } } Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/ObjectConverter.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/ObjectConverter.java?view=diff&rev=531854&r1=531853&r2=531854 ============================================================================== --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/ObjectConverter.java (original) +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/ObjectConverter.java Tue Apr 24 02:54:42 2007 @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.Collection; import java.util.Arrays; +import java.util.List; /** * Some core java.lang based @@ -66,4 +67,5 @@ } return false; } + } Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/BinaryPredicateSupport.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/BinaryPredicateSupport.java?view=auto&rev=531854 ============================================================================== --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/BinaryPredicateSupport.java (added) +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/BinaryPredicateSupport.java Tue Apr 24 02:54:42 2007 @@ -0,0 +1,70 @@ +/** + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.impl; + +import org.apache.camel.Predicate; +import org.apache.camel.Exchange; +import org.apache.camel.Expression; +import org.apache.camel.util.ObjectHelper; +import static org.apache.camel.util.ObjectHelper.notNull; + +/** + * A useful base class for {@link Predicate} implementations + * + * @version $Revision: 1.1 $ + */ +public abstract class BinaryPredicateSupport implements Predicate { + + private final Expression left; + private final Expression right; + + protected BinaryPredicateSupport(Expression left, Expression right) { + notNull(left, "left"); + notNull(right, "right"); + + this.left = left; + this.right = right; + } + + @Override + public String toString() { + return left + " " + getOperationText() + " " + right; + } + + public boolean matches(E exchange) { + Object leftValue = left.evaluate(exchange); + Object rightValue = right.evaluate(exchange); + return matches(exchange, leftValue, rightValue); + } + + public void assertMatches(String text, E exchange) { + Object leftValue = left.evaluate(exchange); + Object rightValue = right.evaluate(exchange); + if (!matches(exchange, leftValue, rightValue)) { + throw new AssertionError(assertionFailureMessage(exchange, leftValue, rightValue)); + } + } + + protected abstract boolean matches(E exchange, Object leftValue, Object rightValue); + + protected abstract String getOperationText(); + + protected String assertionFailureMessage(E exchange, Object leftValue, Object rightValue) { + return this + " failed on " + exchange + " with left value <" + leftValue + "> right value <" + rightValue + ">"; + } +} Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/BinaryPredicateSupport.java ------------------------------------------------------------------------------ svn:eol-style = native Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/PredicateSupport.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/PredicateSupport.java?view=auto&rev=531854 ============================================================================== --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/PredicateSupport.java (added) +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/PredicateSupport.java Tue Apr 24 02:54:42 2007 @@ -0,0 +1,39 @@ +/** + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.impl; + +import org.apache.camel.Predicate; +import org.apache.camel.Exchange; + +/** + * A useful base class for {@link Predicate} implementations + * + * @version $Revision: 1.1 $ + */ +public abstract class PredicateSupport implements Predicate { + + public void assertMatches(String text, E exchange) { + if (! matches(exchange)) { + throw new AssertionError(assertionFailureMessage(exchange)); + } + } + + protected String assertionFailureMessage(E exchange) { + return this + " failed on " + exchange; + } +} Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/PredicateSupport.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?view=diff&rev=531854&r1=531853&r2=531854 ============================================================================== --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original) +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Tue Apr 24 02:54:42 2007 @@ -133,6 +133,29 @@ } } + + /** + * Returns the predicate matching boolean on a {@link List} result set + * where if the first element is a boolean its value is used + * otherwise this method returns true if the collection is not empty + * + * @returns true if the first element is a boolean and its value is true or if the list is non empty + */ + public static boolean matches(List list) { + if (!list.isEmpty()) { + Object value = list.get(0); + if (value instanceof Boolean) { + Boolean flag = (Boolean) value; + return flag.booleanValue(); + } + else { + // lets assume non-empty results are true + return true; + } + } + return false; + } + public static boolean isNotNullOrBlank(String text) { return text != null && text.trim().length() > 0; } Modified: activemq/camel/trunk/camel-josql/src/main/java/org/apache/camel/builder/sql/SqlBuilder.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-josql/src/main/java/org/apache/camel/builder/sql/SqlBuilder.java?view=diff&rev=531854&r1=531853&r2=531854 ============================================================================== --- activemq/camel/trunk/camel-josql/src/main/java/org/apache/camel/builder/sql/SqlBuilder.java (original) +++ activemq/camel/trunk/camel-josql/src/main/java/org/apache/camel/builder/sql/SqlBuilder.java Tue Apr 24 02:54:42 2007 @@ -21,6 +21,7 @@ import org.apache.camel.Message; import org.apache.camel.Predicate; import org.apache.camel.RuntimeExpressionException; +import org.apache.camel.util.ObjectHelper; import org.josql.Query; import org.josql.QueryExecutionException; import org.josql.QueryParseException; @@ -51,18 +52,14 @@ public boolean matches(E exchange) { List list = evaluateQuery(exchange); - if (!list.isEmpty()) { - Object value = list.get(0); - if (value instanceof Boolean) { - Boolean flag = (Boolean) value; - return flag.booleanValue(); - } - else { - // lets assume non-empty results are true - return true; - } + return matches(exchange, list); + } + + public void assertMatches(String text, E exchange) throws AssertionError { + List list = evaluateQuery(exchange); + if (!matches(exchange, list)) { + throw new AssertionError(this + " failed on " + exchange + " as found " + list); } - return false; } // Builder API @@ -103,6 +100,10 @@ // Implementation methods //----------------------------------------------------------------------- + protected boolean matches(E exchange, List list) { + return ObjectHelper.matches(list); + } + protected List evaluateQuery(E exchange) { configureQuery(exchange); Message in = exchange.getIn(); Modified: activemq/camel/trunk/camel-saxon/src/main/java/org/apache/camel/builder/saxon/XQueryBuilder.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-saxon/src/main/java/org/apache/camel/builder/saxon/XQueryBuilder.java?view=diff&rev=531854&r1=531853&r2=531854 ============================================================================== --- activemq/camel/trunk/camel-saxon/src/main/java/org/apache/camel/builder/saxon/XQueryBuilder.java (original) +++ activemq/camel/trunk/camel-saxon/src/main/java/org/apache/camel/builder/saxon/XQueryBuilder.java Tue Apr 24 02:54:42 2007 @@ -27,6 +27,7 @@ import org.apache.camel.Expression; import org.apache.camel.Predicate; import org.apache.camel.RuntimeExpressionException; +import org.apache.camel.util.ObjectHelper; import org.apache.camel.converter.jaxp.BytesSource; import org.apache.camel.converter.jaxp.XmlConverter; import org.apache.camel.converter.jaxp.StringSource; @@ -61,6 +62,11 @@ private ResultFormat resultsFormat = ResultFormat.DOM; private Properties properties = new Properties(); + @Override + public String toString() { + return "XQuery[" + expression + "]"; + } + public Object evaluate(E exchange) { try { switch (resultsFormat) { @@ -123,14 +129,25 @@ public boolean matches(E exchange) { try { List list = evaluateAsList(exchange); - System.out.println("Found list: " + list); - return false; + return matches(exchange, list); } catch (Exception e) { throw new RuntimeExpressionException(e); } } + public void assertMatches(String text, E exchange) throws AssertionError { + try { + List list = evaluateAsList(exchange); + if (!matches(exchange, list)) { + throw new AssertionError(this + " failed on " + exchange + " as evaluated: " + list); + } + } + catch (Exception e) { + throw new AssertionError(e); + } + } + // Builder methods //------------------------------------------------------------------------- public static XQueryBuilder xquery(final String queryText) { @@ -307,5 +324,9 @@ protected void clearBuilderReferences() { staticQueryContext = null; configuration = null; + } + + protected boolean matches(E exchange, List results) { + return ObjectHelper.matches(results); } } Modified: activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java?view=diff&rev=531854&r1=531853&r2=531854 ============================================================================== --- activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java (original) +++ activemq/camel/trunk/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java Tue Apr 24 02:54:42 2007 @@ -70,7 +70,15 @@ } public boolean matches(E exchange) { - return ObjectConverter.toBoolean(evaluateScript(exchange)); + Object scriptValue = evaluateScript(exchange); + return matches(exchange, scriptValue); + } + + public void assertMatches(String text, E exchange) throws AssertionError { + Object scriptValue = evaluateScript(exchange); + if (!matches(exchange, scriptValue)) { + throw new AssertionError(this + " failed on " + exchange + " as script returned <" + scriptValue + ">"); + } } public void process(E exchange) { @@ -380,6 +388,11 @@ } } } + + protected boolean matches(E exchange, Object scriptValue) { + return ObjectConverter.toBoolean(scriptValue); + } + protected ScriptEngine createScriptEngine() { ScriptEngineManager manager = new ScriptEngineManager(); return manager.getEngineByName(scriptEngineName);