package org.argeo.slc.ant.test;\r
\r
-import org.argeo.slc.ant.spring.AbstractSpringTask;\r
+import org.argeo.slc.ant.structure.SAwareTask;\r
+import org.argeo.slc.core.structure.StructureAware;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
import org.argeo.slc.core.test.TestReport;\r
import org.argeo.slc.core.test.TestResult;\r
\r
-public class SlcCloseTestResultTask extends AbstractSpringTask {\r
+public class SlcCloseTestResultTask extends SAwareTask {\r
private String result;\r
private String report;\r
- \r
- public void execute(){\r
- TestResult testResult = (TestResult)getContext().getBean(result);\r
- testResult.close();\r
- \r
- if(report!=null){\r
- TestReport testReport = (TestReport)getContext().getBean(report);\r
- testReport.generateTestReport(testResult);\r
+\r
+ public void executeActions(String mode) {\r
+ if (!mode.equals(StructureRegistry.READ)) {\r
+ TestResult testResult = (TestResult) getContext().getBean(result);\r
+ testResult.close();\r
+\r
+ if (report != null) {\r
+ TestReport testReport = (TestReport) getContext().getBean(\r
+ report);\r
+ if (testReport instanceof StructureAware) {\r
+ ((StructureAware) testReport).notifyCurrentPath(\r
+ getRegistry(), null);\r
+ }\r
+ testReport.generateTestReport(testResult);\r
+ }\r
}\r
}\r
\r
public void setReport(String report) {\r
this.report = report;\r
}\r
- \r
- \r
+\r
}\r
import java.io.IOException;\r
import java.util.List;\r
\r
+import org.argeo.slc.core.structure.StructureAware;\r
+import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.StructurePath;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
import org.argeo.slc.core.test.SimpleResultPart;\r
import org.argeo.slc.core.test.TestReport;\r
import org.argeo.slc.core.test.TestResultPart;\r
import org.argeo.slc.dao.test.TestResultDao;\r
\r
-public class FullHtmlTreeReport implements TestReport {\r
+public class FullHtmlTreeReport implements TestReport, StructureAware {\r
private TestResultDao testResultDao;\r
private File reportDir;\r
\r
+ private StructureRegistry registry;\r
+\r
public void generateTestReport(TestResult testResult) {\r
if (testResultDao == null) {\r
TreeTestResult result = (TreeTestResult) testResult;\r
\r
buf.append("<table border=1>\n");\r
for (TreeSPath path : result.getResultParts().keySet()) {\r
- buf.append("<tr><td>").append(path).append("</td>\n");\r
+ buf.append("<tr><td>");\r
+ buf.append(path);\r
+ StructureElement element = registry.getElement(path);\r
+ if (registry != null) {\r
+ if (element != null) {\r
+ buf.append("<br/><b>");\r
+ buf.append(element.getDescription());\r
+ buf.append("</b>");\r
+ }\r
+ }\r
+ buf.append("</td>\n");\r
buf.append("<td>");\r
PartSubList subList = (PartSubList) result.getResultParts().get(\r
path);\r
this.reportDir = reportDir;\r
}\r
\r
+ public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
+ this.registry = registry;\r
+ }\r
+\r
}\r
import java.util.SortedMap;\r
import java.util.TreeMap;\r
\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
import org.argeo.slc.core.SlcException;\r
import org.argeo.slc.core.structure.StructureAware;\r
import org.argeo.slc.core.structure.StructurePath;\r
import org.argeo.slc.core.test.TestResultPart;\r
\r
public class TreeTestResult implements TestResult, StructureAware {\r
+ private Log log = LogFactory.getLog(TreeTestResult.class);\r
/** For ORM */\r
private Long tid;\r
\r
private List<TestResultListener> listeners;\r
\r
private TreeSPath currentPath;\r
+ \r
+ private boolean isClosed = false;\r
\r
private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
\r
}\r
\r
public void close() {\r
+ if(isClosed){\r
+ throw new SlcException("Test Result #"+getTestResultId()+" alredy closed.");\r
+ }\r
+ \r
synchronized (listeners) {\r
for (TestResultListener listener : listeners) {\r
listener.close();\r
}\r
listeners.clear();\r
}\r
+ isClosed = true;\r
+ log.info("Test Result #"+getTestResultId()+" closed.");\r
}\r
\r
Long getTid() {\r
\r
import java.util.List;\r
\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import org.argeo.slc.core.structure.SimpleSElement;\r
import org.argeo.slc.core.structure.StructureAware;\r
-import org.argeo.slc.core.structure.StructureElement;\r
import org.argeo.slc.core.structure.StructurePath;\r
import org.argeo.slc.core.structure.StructureRegistry;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\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
\r
public class ComplexExampleTestDef implements TestDefinition, StructureAware {\r
- private List<ExampleTask> tasks;\r
+ private Log log = LogFactory.getLog(ComplexExampleTestDef.class);\r
+\r
+ private List<TestDefinition> tasks;\r
+ private TreeSPath path;\r
\r
public void execute(TestRun testRun) {\r
- // TODO Auto-generated method stub\r
+ log.info("Execute sequence of test definitions...");\r
\r
- }\r
+ for (TestDefinition task : tasks) {\r
+ task.execute(testRun);\r
\r
- public void setTasks(List<ExampleTask> tasks) {\r
- this.tasks = tasks;\r
+ // Reset current path in case it has been changed\r
+ TestResult result = testRun.getTestResult();\r
+ if (result instanceof StructureAware) {\r
+ ((StructureAware) result).notifyCurrentPath(null, path);\r
+ }\r
+\r
+ }\r
}\r
\r
- public StructureElement getElement() {\r
- // TODO Auto-generated method stub\r
- return null;\r
+ public void setTasks(List<TestDefinition> tasks) {\r
+ this.tasks = tasks;\r
}\r
\r
public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
- // TODO Auto-generated method stub\r
- \r
+ this.path = (TreeSPath) path;\r
+\r
+ Integer count = 0;\r
+ for (TestDefinition task : tasks) {\r
+ String description = "";\r
+ if (task instanceof ExampleTask) {\r
+ description = ((ExampleTask) task).getDescription();\r
+ }\r
+ SimpleSElement element = new SimpleSElement(description);\r
+ TreeSPath taskPath = this.path.createChild(count.toString());\r
+ registry.register(taskPath, element);\r
+ if (task instanceof StructureAware) {\r
+ ((StructureAware) task).notifyCurrentPath(registry, taskPath);\r
+ }\r
+ count++;\r
+ }\r
}\r
\r
- \r
}\r
package org.argeo.slc.example;\r
\r
-public class ExampleTask {\r
+import org.argeo.slc.core.structure.StructureAware;\r
+import org.argeo.slc.core.structure.StructurePath;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.SimpleResultPart;\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
\r
- public void execute(){\r
+public class ExampleTask implements StructureAware,TestDefinition{\r
+ private TreeSPath path;\r
+ private String description;\r
+\r
+ public void execute(TestRun testRun){\r
+ SimpleResultPart part = new SimpleResultPart();\r
+ part.setStatus(SimpleResultPart.PASSED);\r
+ part.setMessage("Sub task executed");\r
\r
+ TestResult result = testRun.getTestResult();\r
+ if(result instanceof StructureAware){\r
+ ((StructureAware)result).notifyCurrentPath(null, path);\r
+ }\r
+ result.addResultPart(part);\r
+ }\r
+\r
+ public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
+ this.path = (TreeSPath)path; \r
+ }\r
+\r
+ public String getDescription() {\r
+ return description;\r
+ }\r
+\r
+ public void setDescription(String description) {\r
+ this.description = description;\r
}\r
+ \r
+ \r
}\r
executePart.setMessage("Execute example appli");\r
try {\r
// execute\r
- log.info("Execute example appli...");\r
appli.filter(args);\r
\r
executePart.setStatus(SimpleResultPart.PASSED);\r
class="org.argeo.slc.example.SimpleExampleTestDef"\r
scope="prototype">\r
</bean>\r
+\r
+ <bean id="complexExampleTestDef"\r
+ class="org.argeo.slc.example.ComplexExampleTestDef"\r
+ scope="prototype">\r
+ <property name="tasks">\r
+ <list>\r
+ <ref bean="dummyTask" />\r
+ <bean class="org.argeo.slc.example.ExampleTask">\r
+ <property name="description"\r
+ value="Another task (nested)" />\r
+ </bean>\r
+ <bean\r
+ class="org.argeo.slc.example.SimpleExampleTestDef" />\r
+ </list>\r
+ </property>\r
+ </bean>\r
+\r
+ <bean id="dummyTask" class="org.argeo.slc.example.ExampleTask">\r
+ <property name="description" value="A dummy task" />\r
+ </bean>\r
+\r
</beans>
\ No newline at end of file
<project default="test" name="testProject">\r
<description>A Test project</description>\r
\r
- <target name="test" depends="testSimple">\r
+ <target name="test" depends="testSimple,testComplex">\r
+ <slc.closeResult result="testResult" report="report" />\r
</target>\r
\r
- <target name="testSimple" description="A simple test">\r
- <echo message="${rootTest}"/>\r
- \r
- <slc.test>\r
+ <target name="testSimple" description="Simple tests">\r
+ <slc.test description="NATO">\r
<testDefinition bean="simpleExampleTestDef" />\r
<testData bean="testData.nato" />\r
</slc.test>\r
\r
- <slc.test>\r
+ <slc.test description="UN">\r
<testDefinition bean="simpleExampleTestDef" />\r
<testData bean="testData.un" />\r
</slc.test>\r
\r
- <slc.test>\r
+ <slc.test description="EU-reform">\r
<testDefinition bean="simpleExampleTestDef" />\r
<testData bean="testData.eu-reform" />\r
</slc.test>\r
+ </target>\r
\r
- <slc.closeResult result="testResult" report="report"/>\r
+ <target name="testComplex" description="A complex test">\r
+ <slc.test description="Complex test">\r
+ <testDefinition bean="complexExampleTestDef" />\r
+ <testData bean="testData.un" />\r
+ </slc.test>\r
</target>\r
- \r
+\r
</project>
\ No newline at end of file