package org.argeo.slc.ant.test;\r
\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
import org.apache.tools.ant.BuildException;\r
\r
-import org.argeo.slc.ant.structure.SAwareArg;\r
+import org.argeo.slc.ant.SlcAntConfig;\r
+import org.argeo.slc.ant.spring.AbstractSpringArg;\r
import org.argeo.slc.ant.structure.SAwareTask;\r
import org.argeo.slc.core.deploy.DeployedSystem;\r
+import org.argeo.slc.core.structure.StructureAware;\r
import org.argeo.slc.core.test.TestData;\r
import org.argeo.slc.core.test.TestDefinition;\r
import org.argeo.slc.core.test.TestResult;\r
-import org.argeo.slc.core.test.TestRun;\r
+import org.argeo.slc.core.test.WritableTestRun;\r
\r
/** Ant task wrapping a test run. */\r
-public class SlcTestTask extends SAwareTask implements TestRun {\r
+public class SlcTestTask extends SAwareTask {\r
+ private Log log = LogFactory.getLog(SlcTestTask.class);\r
+\r
+ private String testRunBean = null;\r
\r
private TestDefinitionArg testDefinitionArg;\r
private TestDataArg testDataArg;\r
+ private DeployedSystemArg deployedSystemArg;\r
+ private TestResultArg testResultArg;\r
\r
@Override\r
public void executeActions(String mode) throws BuildException {\r
- TestDefinition testDefinition = testDefinitionArg.getTestDefinition();\r
- testDefinition.execute(this);\r
+ final String testRunBeanT;\r
+ if (testRunBean != null) {\r
+ testRunBeanT = testRunBean;\r
+ } else {\r
+ testRunBeanT = getProject().getUserProperty(\r
+ SlcAntConfig.DEFAULT_TEST_RUN_PROPERTY);\r
+ }\r
+ WritableTestRun testRun = (WritableTestRun) getContext().getBean(\r
+ testRunBeanT);\r
+\r
+ // set overridden references\r
+ if (testDataArg != null) {\r
+ testRun.setTestData(testDataArg.getTestData());\r
+ log.trace("Overrides test data");\r
+ }\r
+\r
+ if (testDefinitionArg != null) {\r
+ testRun.setTestDefinition(testDefinitionArg.getTestDefinition());\r
+ log.trace("Overrides test definition");\r
+ }\r
+\r
+ if (deployedSystemArg != null) {\r
+ testRun.setDeployedSystem(deployedSystemArg.getDeployedSystem());\r
+ log.trace("Overrides deployed system");\r
+ }\r
+\r
+ if (testResultArg != null) {\r
+ testRun.setTestResult(testResultArg.getTestResult());\r
+ log.trace("Overrides test result");\r
+ }\r
+\r
+ // notify path to test result\r
+ TestResult result = testRun.getTestResult();\r
+ if (result != null && result instanceof StructureAware) {\r
+ ((StructureAware) result).notifyCurrentPath(getRegistry(),\r
+ getPath());\r
+ }\r
+\r
+ testRun.execute();\r
+ }\r
+\r
+ /**\r
+ * The bean name of the test run to use. If not set the default is used.\r
+ * \r
+ * @see SlcAntConfig\r
+ */\r
+ public void setTestRun(String testRunBean) {\r
+ this.testRunBean = testRunBean;\r
}\r
\r
public TestDefinitionArg createTestDefinition() {\r
testDefinitionArg = new TestDefinitionArg();\r
- sAwareArgs.add(testDefinitionArg);\r
+ // only test definitions can add to path\r
+ addSAwareArg(testDefinitionArg);\r
return testDefinitionArg;\r
}\r
\r
public TestDataArg createTestData() {\r
testDataArg = new TestDataArg();\r
- sAwareArgs.add(testDataArg);\r
return testDataArg;\r
}\r
\r
- public DeployedSystem getDeployedSystem() {\r
- throw new RuntimeException("Not yet implemented.");\r
+ public DeployedSystemArg createDeployedSystem() {\r
+ deployedSystemArg = new DeployedSystemArg();\r
+ return deployedSystemArg;\r
}\r
\r
- public TestDefinition getTestDefinition() {\r
- return testDefinitionArg.getTestDefinition();\r
+ public TestResultArg createTestResult() {\r
+ testResultArg = new TestResultArg();\r
+ return testResultArg;\r
}\r
\r
- public TestData getTestData() {\r
- return testDataArg.getTestData();\r
+}\r
+\r
+class TestDefinitionArg extends AbstractSpringArg {\r
+ public TestDefinition getTestDefinition() {\r
+ return (TestDefinition) getBeanInstance();\r
}\r
+}\r
\r
- public TestResult getTestResult() {\r
- throw new RuntimeException("Not yet implemented.");\r
+class TestDataArg extends AbstractSpringArg {\r
+ public TestData getTestData() {\r
+ return (TestData) getBeanInstance();\r
}\r
\r
}\r
\r
-class TestDefinitionArg extends SAwareArg {\r
- private TestDefinition testDefinition;\r
-\r
- public TestDefinition getTestDefinition() {\r
- if (testDefinition == null) {\r
- // don't call Spring each time in order not to multi-instantiate\r
- // prototype\r
- testDefinition = (TestDefinition) getBeanInstance();\r
- }\r
- return testDefinition;\r
+class DeployedSystemArg extends AbstractSpringArg {\r
+ public DeployedSystem getDeployedSystem() {\r
+ return (DeployedSystem) getBeanInstance();\r
}\r
-}\r
\r
-class TestDataArg extends SAwareArg {\r
- private TestData testData;\r
+}\r
\r
- public TestData getTestData() {\r
- if (testData == null) {\r
- // don't call Spring each time in order not to multi-instantiate\r
- // prototype\r
- testData = (TestData) getBeanInstance();\r
- }\r
- return testData;\r
+class TestResultArg extends AbstractSpringArg {\r
+ public TestResult getTestResult() {\r
+ return (TestResult) getBeanInstance();\r
}\r
\r
}\r