--- /dev/null
+package org.argeo.slc.core.execution;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.execution.ExecutionContext;
+import org.argeo.slc.execution.ExecutionFlow;
+import org.argeo.slc.runtime.test.SimpleTestResult;
+import org.argeo.slc.test.TestResultPart;
+import org.argeo.slc.test.TestStatus;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public abstract class AbstractExecutionFlowTestCase extends TestCase {
+
+ protected final Log log = LogFactory.getLog(getClass());
+
+ protected void logException(Throwable ex) {
+ log.info("Got Exception of class " + ex.getClass().toString()
+ + " with message '" + ex.getMessage() + "'.");
+ }
+
+ protected void validateTestResult(SimpleTestResult testResult) {
+ validateTestResult(testResult, TestStatus.PASSED);
+ }
+
+ protected void validateTestResult(SimpleTestResult testResult,
+ int expectedStatus) {
+ for (TestResultPart part : testResult.getParts()) {
+ if (part.getStatus() != expectedStatus) {
+ fail("Error found in TestResult: " + part.getMessage());
+ }
+ }
+ }
+
+ protected ConfigurableApplicationContext createApplicationContext(
+ String applicationContextSuffix) {
+ ConfigurableApplicationContext applicationContext = new ClassPathXmlApplicationContext(
+ inPackage(applicationContextSuffix));
+ // applicationContext.start();
+ return applicationContext;
+ }
+
+ protected void configureAndExecuteSlcFlow(String applicationContextSuffix,
+ String beanName) {
+ ConfigurableApplicationContext applicationContext = createApplicationContext(applicationContextSuffix);
+ ExecutionContext executionContext = (ExecutionContext) applicationContext
+ .getBean("executionContext");
+ ExecutionFlow executionFlow = (ExecutionFlow) applicationContext
+ .getBean(beanName);
+ if (executionFlow instanceof DefaultExecutionFlow)
+ ((DefaultExecutionFlow) executionFlow)
+ .setExecutionContext(executionContext);
+ try {
+ executionContext.beforeFlow(executionFlow);
+ executionFlow.run();
+ } finally {
+ executionContext.afterFlow(executionFlow);
+ }
+ applicationContext.close();
+ }
+
+ protected String inPackage(String suffix) {
+ String prefix = getClass().getPackage().getName().replace('.', '/');
+ return prefix + '/' + suffix;
+ }
+}