]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java
Introduce complex tree test definition
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / core / test / tree / FullHtmlTreeReport.java
1 package org.argeo.slc.core.test.tree;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.util.List;
7
8 import org.argeo.slc.core.structure.StructureAware;
9 import org.argeo.slc.core.structure.StructureElement;
10 import org.argeo.slc.core.structure.StructurePath;
11 import org.argeo.slc.core.structure.StructureRegistry;
12 import org.argeo.slc.core.structure.tree.TreeSPath;
13 import org.argeo.slc.core.test.SimpleResultPart;
14 import org.argeo.slc.core.test.TestReport;
15 import org.argeo.slc.core.test.TestResult;
16 import org.argeo.slc.core.test.TestResultPart;
17 import org.argeo.slc.dao.test.TestResultDao;
18
19 public class FullHtmlTreeReport implements TestReport, StructureAware {
20 private TestResultDao testResultDao;
21 private File reportDir;
22
23 private StructureRegistry registry;
24
25 public void generateTestReport(TestResult testResult) {
26 if (testResultDao == null) {
27 TreeTestResult result = (TreeTestResult) testResult;
28 generateResultPage(getResultFile(result), result);
29 } else {
30 if (reportDir.exists()) {
31 // clean
32 for (File file : reportDir.listFiles()) {
33 file.delete();
34 }
35 }
36 reportDir.mkdirs();
37
38 StringBuffer index = new StringBuffer("");
39 index
40 .append("<html><header><title>Results</title></header><body>\n<table border=1>\n");
41
42 List<TestResult> list = testResultDao.listTestResults();
43 for (TestResult testRes : list) {
44 TreeTestResult res = (TreeTestResult) testRes;
45
46 File file = getResultFile(res);
47 index.append("<tr><td><a href=\"").append(file.getName())
48 .append("\">");
49 index.append(res.getTestResultId()).append("</a></td></tr>\n");
50 generateResultPage(file, res);
51 }
52
53 index.append("</table>\n</body></html>");
54
55 try {
56 FileWriter writer = new FileWriter(reportDir.getPath()
57 + File.separator + "index.html");
58 writer.write(index.toString());
59 writer.close();
60 } catch (IOException e) {
61 e.printStackTrace();
62 }
63
64 }
65 }
66
67 protected void generateResultPage(File file, TreeTestResult result) {
68 StringBuffer buf = new StringBuffer("");
69 buf.append("<html>\n");
70 buf.append("<header><title>Result #").append(result.getTestResultId())
71 .append("</title></header>\n");
72
73 buf.append("<body>\n");
74
75 buf.append("<h1>Result #").append(result.getTestResultId()).append(
76 "</h1>\n");
77
78 buf.append("<table border=1>\n");
79 for (TreeSPath path : result.getResultParts().keySet()) {
80 buf.append("<tr><td>");
81 buf.append(path);
82 StructureElement element = registry.getElement(path);
83 if (registry != null) {
84 if (element != null) {
85 buf.append("<br/><b>");
86 buf.append(element.getDescription());
87 buf.append("</b>");
88 }
89 }
90 buf.append("</td>\n");
91 buf.append("<td>");
92 PartSubList subList = (PartSubList) result.getResultParts().get(
93 path);
94 buf.append("<table border=0>\n");
95 for (TestResultPart part : subList.getParts()) {
96 SimpleResultPart sPart = (SimpleResultPart) part;
97 String color = "yellow";
98 if (sPart.getStatus() == SimpleResultPart.PASSED) {
99 color = "green";
100 } else {
101 color = "red";
102 }
103 buf.append("<tr><td style=\"color:").append(color)
104 .append("\">");
105
106 buf.append(sPart.getMessage());
107 buf.append("</td></tr>\n");
108 }
109 buf.append("</table>\n");
110
111 buf.append("</td></tr>\n");
112 }
113 buf.append("</table>\n");
114
115 buf.append("</body>");
116 buf.append("</html>");
117
118 try {
119 FileWriter writer = new FileWriter(file);
120 writer.write(buf.toString());
121 writer.close();
122 } catch (IOException e) {
123 e.printStackTrace();
124 }
125 }
126
127 protected File getResultFile(TreeTestResult result) {
128 return new File(reportDir.getPath() + File.separator
129 + result.getTestResultId() + ".html");
130 }
131
132 public void setTestResultDao(TestResultDao testResultDao) {
133 this.testResultDao = testResultDao;
134 }
135
136 public void setReportDir(File reportDir) {
137 this.reportDir = reportDir;
138 }
139
140 public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {
141 this.registry = registry;
142 }
143
144 }