This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit b6e221f221f198ca16a11cac248e188225b5202b Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Thu Jun 11 17:40:24 2020 +0200 [CAMEL-11807] Add some support classes to camel-test-junit5 --- .../camel/test/junit5/ExchangeTestSupport.java | 59 ++++++++++++ .../camel/test/junit5/LanguageTestSupport.java | 101 +++++++++++++++++++++ 2 files changed, 160 insertions(+) diff --git a/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/ExchangeTestSupport.java b/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/ExchangeTestSupport.java new file mode 100644 index 0000000..38721ff --- /dev/null +++ b/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/ExchangeTestSupport.java @@ -0,0 +1,59 @@ +/* + * 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.test.junit5; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.support.DefaultExchange; +import org.junit.jupiter.api.BeforeEach; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * A base class for a test which requires a {@link org.apache.camel.CamelContext} and + * a populated {@link Exchange} + */ +public abstract class ExchangeTestSupport extends CamelTestSupport { + protected Exchange exchange; + + /** + * A factory method to create an Exchange implementation + */ + protected Exchange createExchange() { + return new DefaultExchange(context); + } + + /** + * A strategy method to populate an exchange with some example values for use + * by language plugins + */ + protected void populateExchange(Exchange exchange) { + Message in = exchange.getIn(); + in.setHeader("foo", "abc"); + in.setHeader("bar", 123); + in.setBody("<hello id='m123'>world!</hello>"); + } + + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); + exchange = createExchange(); + assertNotNull(exchange, "No exchange created!"); + populateExchange(exchange); + } +} diff --git a/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/LanguageTestSupport.java b/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/LanguageTestSupport.java new file mode 100644 index 0000000..2c4a551 --- /dev/null +++ b/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/LanguageTestSupport.java @@ -0,0 +1,101 @@ +/* + * 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.test.junit5; + +import org.apache.camel.Exchange; +import org.apache.camel.Expression; +import org.apache.camel.spi.Language; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * A useful base class for testing the language plugins in Camel + */ +public abstract class LanguageTestSupport extends ExchangeTestSupport { + + private static final Logger LOG = LoggerFactory.getLogger(LanguageTestSupport.class); + + protected abstract String getLanguageName(); + + /** + * Asserts that the given predicate expression evaluated on the current language and message + * exchange evaluates to true + */ + protected void assertPredicate(String expression) { + assertPredicate(exchange, expression, true); + } + + /** + * Asserts that the given predicate expression evaluated on the current language and message + * exchange evaluates to false + */ + protected void assertPredicateFails(String expression) { + assertPredicate(exchange, expression, false); + } + + /** + * Asserts that the given predicate expression evaluated on the current language and message + * exchange evaluates to the expected value + */ + protected void assertPredicate(String expression, boolean expected) { + assertPredicate(exchange, expression, expected); + } + + protected void assertPredicate(Exchange exchange, String expression, boolean expected) { + assertPredicate(getLanguageName(), expression, exchange, expected); + } + + + /** + * Asserts that this language expression evaluates to the given value on the given exchange + */ + protected void assertExpression(Exchange exchange, String expressionText, Object expectedValue) { + assertExpression(exchange, getLanguageName(), expressionText, expectedValue); + } + + /** + * Asserts that this language expression evaluates to the given value on the current exchange + */ + protected void assertExpression(String expressionText, Object expectedValue) { + assertExpression(exchange, expressionText, expectedValue); + } + + /** + * Asserts that the expression evaluates to one of the two given values + */ + protected void assertExpression(String expressionText, String expectedValue, String orThisExpectedValue) { + Language language = assertResolveLanguage(getLanguageName()); + + Expression expression = language.createExpression(expressionText); + assertNotNull(expression, "No Expression could be created for text: " + expressionText + " language: " + language); + + Object value; + if (expectedValue != null) { + value = expression.evaluate(exchange, expectedValue.getClass()); + } else { + value = expression.evaluate(exchange, Object.class); + } + LOG.debug("Evaluated expression: {} on exchange: {} result: {}", expression, exchange, value); + + assertTrue(expectedValue.equals(value) || orThisExpectedValue.equals(value), + "Expression: " + expression + " on Exchange: " + exchange); + } + +}