From: Mathieu Baudier Date: Sun, 28 Oct 2007 20:15:11 +0000 (+0000) Subject: Introduce nested tasks X-Git-Tag: argeo-slc-2.1.7~3192 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=872809aa7f951e0cda4d6cf04d5af7b7066cbf88;p=gpl%2Fargeo-slc.git Introduce nested tasks git-svn-id: https://svn.argeo.org/slc/trunk@670 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcCloseTestResultTask.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcCloseTestResultTask.java index 1a5bc7b2f..d91c53898 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcCloseTestResultTask.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcCloseTestResultTask.java @@ -1,20 +1,29 @@ package org.argeo.slc.ant.test; -import org.argeo.slc.ant.spring.AbstractSpringTask; +import org.argeo.slc.ant.structure.SAwareTask; +import org.argeo.slc.core.structure.StructureAware; +import org.argeo.slc.core.structure.StructureRegistry; import org.argeo.slc.core.test.TestReport; import org.argeo.slc.core.test.TestResult; -public class SlcCloseTestResultTask extends AbstractSpringTask { +public class SlcCloseTestResultTask extends SAwareTask { private String result; private String report; - - public void execute(){ - TestResult testResult = (TestResult)getContext().getBean(result); - testResult.close(); - - if(report!=null){ - TestReport testReport = (TestReport)getContext().getBean(report); - testReport.generateTestReport(testResult); + + public void executeActions(String mode) { + if (!mode.equals(StructureRegistry.READ)) { + TestResult testResult = (TestResult) getContext().getBean(result); + testResult.close(); + + if (report != null) { + TestReport testReport = (TestReport) getContext().getBean( + report); + if (testReport instanceof StructureAware) { + ((StructureAware) testReport).notifyCurrentPath( + getRegistry(), null); + } + testReport.generateTestReport(testResult); + } } } @@ -25,6 +34,5 @@ public class SlcCloseTestResultTask extends AbstractSpringTask { public void setReport(String report) { this.report = report; } - - + } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java index 9dd761033..38345d7b6 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java @@ -5,6 +5,10 @@ import java.io.FileWriter; import java.io.IOException; import java.util.List; +import org.argeo.slc.core.structure.StructureAware; +import org.argeo.slc.core.structure.StructureElement; +import org.argeo.slc.core.structure.StructurePath; +import org.argeo.slc.core.structure.StructureRegistry; import org.argeo.slc.core.structure.tree.TreeSPath; import org.argeo.slc.core.test.SimpleResultPart; import org.argeo.slc.core.test.TestReport; @@ -12,10 +16,12 @@ import org.argeo.slc.core.test.TestResult; import org.argeo.slc.core.test.TestResultPart; import org.argeo.slc.dao.test.TestResultDao; -public class FullHtmlTreeReport implements TestReport { +public class FullHtmlTreeReport implements TestReport, StructureAware { private TestResultDao testResultDao; private File reportDir; + private StructureRegistry registry; + public void generateTestReport(TestResult testResult) { if (testResultDao == null) { TreeTestResult result = (TreeTestResult) testResult; @@ -71,7 +77,17 @@ public class FullHtmlTreeReport implements TestReport { buf.append("\n"); for (TreeSPath path : result.getResultParts().keySet()) { - buf.append("\n"); + buf.append("\n"); buf.append("
").append(path).append("
"); + buf.append(path); + StructureElement element = registry.getElement(path); + if (registry != null) { + if (element != null) { + buf.append("
"); + buf.append(element.getDescription()); + buf.append(""); + } + } + buf.append("
"); PartSubList subList = (PartSubList) result.getResultParts().get( path); @@ -121,4 +137,8 @@ public class FullHtmlTreeReport implements TestReport { this.reportDir = reportDir; } + public void notifyCurrentPath(StructureRegistry registry, StructurePath path) { + this.registry = registry; + } + } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java index 29f1c8d06..3c5be7305 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java @@ -4,6 +4,9 @@ import java.util.List; import java.util.SortedMap; import java.util.TreeMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.argeo.slc.core.SlcException; import org.argeo.slc.core.structure.StructureAware; import org.argeo.slc.core.structure.StructurePath; @@ -16,6 +19,7 @@ import org.argeo.slc.core.test.TestResultListener; import org.argeo.slc.core.test.TestResultPart; public class TreeTestResult implements TestResult, StructureAware { + private Log log = LogFactory.getLog(TreeTestResult.class); /** For ORM */ private Long tid; @@ -23,6 +27,8 @@ public class TreeTestResult implements TestResult, StructureAware { private List listeners; private TreeSPath currentPath; + + private boolean isClosed = false; private SortedMap resultParts = new TreeMap(); @@ -78,12 +84,18 @@ public class TreeTestResult implements TestResult, StructureAware { } public void close() { + if(isClosed){ + throw new SlcException("Test Result #"+getTestResultId()+" alredy closed."); + } + synchronized (listeners) { for (TestResultListener listener : listeners) { listener.close(); } listeners.clear(); } + isClosed = true; + log.info("Test Result #"+getTestResultId()+" closed."); } Long getTid() { diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/example/ComplexExampleTestDef.java b/org.argeo.slc/src/test/java/org/argeo/slc/example/ComplexExampleTestDef.java index 14a6e08cb..2de24caae 100644 --- a/org.argeo.slc/src/test/java/org/argeo/slc/example/ComplexExampleTestDef.java +++ b/org.argeo.slc/src/test/java/org/argeo/slc/example/ComplexExampleTestDef.java @@ -2,34 +2,60 @@ package org.argeo.slc.example; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.argeo.slc.core.structure.SimpleSElement; import org.argeo.slc.core.structure.StructureAware; -import org.argeo.slc.core.structure.StructureElement; import org.argeo.slc.core.structure.StructurePath; import org.argeo.slc.core.structure.StructureRegistry; +import org.argeo.slc.core.structure.tree.TreeSPath; import org.argeo.slc.core.test.TestDefinition; +import org.argeo.slc.core.test.TestResult; import org.argeo.slc.core.test.TestRun; public class ComplexExampleTestDef implements TestDefinition, StructureAware { - private List tasks; + private Log log = LogFactory.getLog(ComplexExampleTestDef.class); + + private List tasks; + private TreeSPath path; public void execute(TestRun testRun) { - // TODO Auto-generated method stub + log.info("Execute sequence of test definitions..."); - } + for (TestDefinition task : tasks) { + task.execute(testRun); - public void setTasks(List tasks) { - this.tasks = tasks; + // Reset current path in case it has been changed + TestResult result = testRun.getTestResult(); + if (result instanceof StructureAware) { + ((StructureAware) result).notifyCurrentPath(null, path); + } + + } } - public StructureElement getElement() { - // TODO Auto-generated method stub - return null; + public void setTasks(List tasks) { + this.tasks = tasks; } public void notifyCurrentPath(StructureRegistry registry, StructurePath path) { - // TODO Auto-generated method stub - + this.path = (TreeSPath) path; + + Integer count = 0; + for (TestDefinition task : tasks) { + String description = ""; + if (task instanceof ExampleTask) { + description = ((ExampleTask) task).getDescription(); + } + SimpleSElement element = new SimpleSElement(description); + TreeSPath taskPath = this.path.createChild(count.toString()); + registry.register(taskPath, element); + if (task instanceof StructureAware) { + ((StructureAware) task).notifyCurrentPath(registry, taskPath); + } + count++; + } } - } diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/example/ExampleTask.java b/org.argeo.slc/src/test/java/org/argeo/slc/example/ExampleTask.java index 09561607f..7e8b61733 100644 --- a/org.argeo.slc/src/test/java/org/argeo/slc/example/ExampleTask.java +++ b/org.argeo.slc/src/test/java/org/argeo/slc/example/ExampleTask.java @@ -1,8 +1,41 @@ package org.argeo.slc.example; -public class ExampleTask { +import org.argeo.slc.core.structure.StructureAware; +import org.argeo.slc.core.structure.StructurePath; +import org.argeo.slc.core.structure.StructureRegistry; +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.test.SimpleResultPart; +import org.argeo.slc.core.test.TestDefinition; +import org.argeo.slc.core.test.TestResult; +import org.argeo.slc.core.test.TestRun; - public void execute(){ +public class ExampleTask implements StructureAware,TestDefinition{ + private TreeSPath path; + private String description; + + public void execute(TestRun testRun){ + SimpleResultPart part = new SimpleResultPart(); + part.setStatus(SimpleResultPart.PASSED); + part.setMessage("Sub task executed"); + TestResult result = testRun.getTestResult(); + if(result instanceof StructureAware){ + ((StructureAware)result).notifyCurrentPath(null, path); + } + result.addResultPart(part); + } + + public void notifyCurrentPath(StructureRegistry registry, StructurePath path) { + this.path = (TreeSPath)path; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; } + + } diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/example/SimpleExampleTestDef.java b/org.argeo.slc/src/test/java/org/argeo/slc/example/SimpleExampleTestDef.java index 62eaef43c..768076d32 100644 --- a/org.argeo.slc/src/test/java/org/argeo/slc/example/SimpleExampleTestDef.java +++ b/org.argeo.slc/src/test/java/org/argeo/slc/example/SimpleExampleTestDef.java @@ -34,7 +34,6 @@ public class SimpleExampleTestDef implements TestDefinition { executePart.setMessage("Execute example appli"); try { // execute - log.info("Execute example appli..."); appli.filter(args); executePart.setStatus(SimpleResultPart.PASSED); diff --git a/org.argeo.slc/src/test/slc/conf/testDefinitions.xml b/org.argeo.slc/src/test/slc/conf/testDefinitions.xml index b0149b512..31664daf0 100644 --- a/org.argeo.slc/src/test/slc/conf/testDefinitions.xml +++ b/org.argeo.slc/src/test/slc/conf/testDefinitions.xml @@ -7,4 +7,25 @@ class="org.argeo.slc.example.SimpleExampleTestDef" scope="prototype"> + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc/src/test/slc/root/Category1/SubCategory2/build.xml b/org.argeo.slc/src/test/slc/root/Category1/SubCategory2/build.xml index 4e605f56c..900fa03eb 100644 --- a/org.argeo.slc/src/test/slc/root/Category1/SubCategory2/build.xml +++ b/org.argeo.slc/src/test/slc/root/Category1/SubCategory2/build.xml @@ -1,28 +1,32 @@ A Test project - + + - - - - + + - + - + + - + + + + + - + \ No newline at end of file