1 package org
.argeo
.slc
.core
.test
.tree
.htmlreport
;
3 import java
.io
.IOException
;
4 import java
.util
.SortedMap
;
5 import java
.util
.TreeMap
;
7 import javax
.swing
.tree
.TreePath
;
9 import org
.apache
.commons
.io
.FileUtils
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
13 import org
.argeo
.slc
.core
.structure
.StructureElement
;
14 import org
.argeo
.slc
.core
.structure
.StructureRegistry
;
15 import org
.argeo
.slc
.core
.structure
.tree
.TreeSPath
;
16 import org
.argeo
.slc
.core
.test
.SimpleResultPart
;
17 import org
.argeo
.slc
.core
.test
.TestResultPart
;
18 import org
.argeo
.slc
.core
.test
.TestStatus
;
19 import org
.argeo
.slc
.core
.test
.tree
.PartSubList
;
20 import org
.argeo
.slc
.core
.test
.tree
.TreeTestResult
;
23 private final static Log log
= LogFactory
.getLog(ResultPage
.class);
25 private final FullHtmlTreeReport report
;
26 private final TreeTestResult result
;
28 ResultPage(FullHtmlTreeReport report
, TreeTestResult result
) {
34 * Generates a result page for one test result
37 * file to which generate the HTML
41 protected void generate(StructureRegistry registry
) {
42 StringBuffer buf
= new StringBuffer("");
43 buf
.append("<html>\n");
44 buf
.append("<header>");
45 buf
.append("<title>Result #").append(result
.getTestResultId()).append(
48 .append("<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\"/>");
49 buf
.append("</header>\n");
51 buf
.append("<body>\n");
54 buf
.append("<h1>Result #").append(result
.getTestResultId()).append(
56 buf
.append(report
.sdf
.format(result
.getCloseDate()));
59 generateToc(buf
, registry
);
61 generatePartsList(buf
, registry
);
63 buf
.append("</body>");
64 buf
.append("</html>");
67 FileUtils
.writeStringToFile(report
.getResultFile(result
), buf
69 } catch (IOException e
) {
70 log
.error("Could not save result page.", e
);
74 private void generateToc(StringBuffer buf
, StructureRegistry registry
) {
75 buf
.append("<h2>Overview</h2>\n");
76 SortedMap
<TreeSPath
, Integer
> toc
= new TreeMap
<TreeSPath
, Integer
>();
77 for (TreeSPath path
: result
.getResultParts().keySet()) {
78 PartSubList subList
= (PartSubList
) result
.getResultParts().get(
80 boolean isFailed
= false;
81 for (TestResultPart part
: subList
.getParts()) {
82 if (!part
.getStatus().equals(TestStatus
.PASSED
)) {
87 fillToc(toc
, path
, isFailed
);
90 buf
.append("<table border=\"0\">\n");
91 for (TreeSPath path
: toc
.keySet()) {
92 boolean inResult
= result
.getResultParts().containsKey(path
);
93 boolean isFailed
= !toc
.get(path
).equals(TestStatus
.PASSED
);
95 buf
.append("<tr><td class=\"").append(
96 isFailed ?
"failed" : "passed").append("\">");
97 int depth
= path
.depth();
98 for (int i
= 0; i
< depth
; i
++) {
99 buf
.append(" ");
103 buf
.append("<a href=\"#").append(anchor(path
)).append(
104 "\" class=\"").append(isFailed ?
"failed" : "passed")
107 if (registry
!= null) {
108 StructureElement element
= registry
.getElement(path
);
109 if (element
!= null) {
110 buf
.append(element
.getDescription());
112 buf
.append(path
.getName());
116 buf
.append("</b></a>");
118 buf
.append("</td></tr>\n");
120 buf
.append("</table>\n");
121 buf
.append("<hr/>\n");
124 private void generatePartsList(StringBuffer buf
, StructureRegistry registry
) {
125 for (TreeSPath path
: result
.getResultParts().keySet()) {
127 buf
.append("<a name=\"").append(anchor(path
)).append("\"></a>");
129 String description
= path
.getName();
130 if (registry
!= null) {
131 StructureElement element
= registry
.getElement(path
);
132 if (element
!= null) {
133 description
= element
.getDescription();
136 buf
.append(description
);
139 PartSubList subList
= (PartSubList
) result
.getResultParts().get(
141 buf
.append("<table border=0>\n");
142 for (TestResultPart part
: subList
.getParts()) {
143 SimpleResultPart sPart
= (SimpleResultPart
) part
;
145 if (sPart
.getStatus().equals(SimpleResultPart
.PASSED
)) {
150 buf
.append("<tr><td class=\"").append(clss
).append("\">");
152 buf
.append(sPart
.getMessage());
153 buf
.append("</td></tr>\n");
155 buf
.append("</table>\n");
159 private void fillToc(SortedMap
<TreeSPath
, Integer
> toc
, TreeSPath path
,
162 toc
.put(path
, TestStatus
.FAILED
);
164 if (!toc
.containsKey(path
)) {
165 toc
.put(path
, TestStatus
.PASSED
);
169 if (path
.getParent() != null) {
170 fillToc(toc
, path
.getParent(), isFailed
);
174 private String
anchor(TreeSPath path
) {
175 return path
.getAsUniqueString().replace(path
.getSeparator(), '_');
178 private String
describedPath(TreePath path
, StructureRegistry registry
) {
179 StringBuffer buf
= new StringBuffer("");
180 return buf
.toString();