Introduce nested tasks
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 28 Oct 2007 20:15:11 +0000 (20:15 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 28 Oct 2007 20:15:11 +0000 (20:15 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@670 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcCloseTestResultTask.java
org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java
org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java
org.argeo.slc/src/test/java/org/argeo/slc/example/ComplexExampleTestDef.java
org.argeo.slc/src/test/java/org/argeo/slc/example/ExampleTask.java
org.argeo.slc/src/test/java/org/argeo/slc/example/SimpleExampleTestDef.java
org.argeo.slc/src/test/slc/conf/testDefinitions.xml
org.argeo.slc/src/test/slc/root/Category1/SubCategory2/build.xml

index 1a5bc7b2f2b63361b17137afab1268330c4097d5..d91c5389804600247512c307eb4e36ee6fde846e 100644 (file)
@@ -1,20 +1,29 @@
 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
@@ -25,6 +34,5 @@ public class SlcCloseTestResultTask extends AbstractSpringTask {
        public void setReport(String report) {\r
                this.report = report;\r
        }\r
-       \r
-       \r
+\r
 }\r
index 9dd7610335181fee1e8341c5cee21be2515a1197..38345d7b6df862d31a69bd7aa5c6fb7b1813dbc7 100644 (file)
@@ -5,6 +5,10 @@ import java.io.FileWriter;
 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
@@ -12,10 +16,12 @@ import org.argeo.slc.core.test.TestResult;
 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
@@ -71,7 +77,17 @@ public class FullHtmlTreeReport implements TestReport {
 \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
@@ -121,4 +137,8 @@ public class FullHtmlTreeReport implements TestReport {
                this.reportDir = reportDir;\r
        }\r
 \r
+       public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
+               this.registry = registry;\r
+       }\r
+\r
 }\r
index 29f1c8d0616ff08407cd8b63c2a3957ed652d373..3c5be7305e3547c33683abcf59bbfe59898b5662 100644 (file)
@@ -4,6 +4,9 @@ import java.util.List;
 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
@@ -16,6 +19,7 @@ import org.argeo.slc.core.test.TestResultListener;
 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
@@ -23,6 +27,8 @@ public class TreeTestResult implements TestResult, StructureAware {
        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
@@ -78,12 +84,18 @@ public class TreeTestResult implements TestResult, StructureAware {
        }\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
index 14a6e08cb2bcf2053922b14377b672325ef5871b..2de24caaef9232d24f3a07a1454b4122fe4ca86b 100644 (file)
@@ -2,34 +2,60 @@ package org.argeo.slc.example;
 \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
index 09561607f98c5a93725970393ef56f026f6ac58b..7e8b61733603633cac72edc00bd06077b854641f 100644 (file)
@@ -1,8 +1,41 @@
 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
index 62eaef43c9028ecbfe6bddc264f9aeb9c030f9dc..768076d3288cb40afcd39132a3c966c3a230ad30 100644 (file)
@@ -34,7 +34,6 @@ public class SimpleExampleTestDef implements TestDefinition {
                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
index b0149b51257a8fcd145ba0ad08374cb26a69922d..31664daf06c2fb9d184275faeeb7f772264863bf 100644 (file)
@@ -7,4 +7,25 @@
                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
index 4e605f56cd1f92185336491061961c93fe07be67..900fa03ebf41bd8c04ebf81676375d226dcaad77 100644 (file)
@@ -1,28 +1,32 @@
 <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