From ad6192d6f2a2740d6c2a644d8d30bb9f529de46b Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 18 Nov 2007 11:51:03 +0000 Subject: [PATCH] Improve reporting git-svn-id: https://svn.argeo.org/slc/trunk@717 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../slc/core/structure/tree/TreeSPath.java | 14 ++ .../test/tree/TreeTestResultPersister.java | 28 ++-- .../core/test/tree/htmlreport/ResultPage.java | 135 ++++++++++++++---- .../test/tree/htmlreport/ResultsList.java | 10 +- .../slc/core/test/tree/htmlreport/style.css | 75 +--------- 5 files changed, 154 insertions(+), 108 deletions(-) diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java index f28c843cf..2efeb1527 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java @@ -68,6 +68,7 @@ public class TreeSPath implements StructurePath, Comparable { path.name = name; return path; } + /** Parses a string to a path. */ public static TreeSPath parseToCreatePath(String path) { return parseToCreatePath(path, DEFAULT_SEPARATOR); @@ -117,6 +118,19 @@ public class TreeSPath implements StructurePath, Comparable { return root; } + /** Depth of this path. */ + public Integer depth() { + return depthImpl(this); + } + + private static int depthImpl(TreeSPath path) { + if (path.getParent() == null) { + return 1; + } else { + return depthImpl(path.getParent()) + 1; + } + } + @Override public String toString() { return getAsUniqueString(); diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java index 29c73d2ff..68c2ada69 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java @@ -31,17 +31,10 @@ public class TreeTestResultPersister extends AsynchronousTreeTestResultListener TreeSPath path = treeSPathDao.getOrCreate(partStruct.path); + StructureRegistry localRegistry = partStruct.result.getRegistry(); TreeSRegistry registry = getOrCreateTreeSRegistry(path); - if (registry.getElement(path) == null) { - StructureRegistry localRegistry = partStruct.result - .getRegistry(); - if (localRegistry != null) { - registry.register(path, localRegistry.getElement(path)); - } else { - registry.register(path, new SimpleSElement(path.getName())); - } - treeSRegistryDao.update(registry); - } + syncPath(registry, localRegistry, path); + treeSRegistryDao.update(registry); if (persistedResult == null) { persistedResult = new TreeTestResult(); @@ -118,4 +111,19 @@ public class TreeTestResultPersister extends AsynchronousTreeTestResultListener this.treeSRegistryDao = treeSRegistryDao; } + private void syncPath(TreeSRegistry registry, + StructureRegistry localRegistry, TreeSPath path) { + if (registry.getElement(path) == null) { + if (localRegistry != null) { + registry.register(path, localRegistry.getElement(path)); + } else { + registry.register(path, new SimpleSElement(path.getName())); + } + } + + if (path.getParent() != null) { + TreeSPath parent = treeSPathDao.getOrCreate(path.getParent()); + syncPath(registry, localRegistry, parent); + } + } } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java index c03a458e3..06bf7c30d 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java @@ -1,17 +1,27 @@ package org.argeo.slc.core.test.tree.htmlreport; -import java.io.FileWriter; import java.io.IOException; +import java.util.SortedMap; +import java.util.TreeMap; + +import javax.swing.tree.TreePath; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.slc.core.structure.StructureElement; 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.TestResultPart; +import org.argeo.slc.core.test.TestStatus; import org.argeo.slc.core.test.tree.PartSubList; import org.argeo.slc.core.test.tree.TreeTestResult; class ResultPage { + private final static Log log = LogFactory.getLog(ResultPage.class); + private final FullHtmlTreeReport report; private final TreeTestResult result; @@ -40,56 +50,133 @@ class ResultPage { buf.append("\n"); + // Header buf.append("

Result #").append(result.getTestResultId()).append( "

\n"); + buf.append(report.sdf.format(result.getCloseDate())); + + // TOC + generateToc(buf, registry); + + generatePartsList(buf, registry); + + buf.append(""); + buf.append(""); + + try { + FileUtils.writeStringToFile(report.getResultFile(result), buf + .toString()); + } catch (IOException e) { + log.error("Could not save result page.", e); + } + } - buf.append("\n"); + private void generateToc(StringBuffer buf, StructureRegistry registry) { + buf.append("

Overview

\n"); + SortedMap toc = new TreeMap(); for (TreeSPath path : result.getResultParts().keySet()) { - buf.append("\n"); - buf.append("\n"); } - buf.append("
"); - buf.append(path); + PartSubList subList = (PartSubList) result.getResultParts().get( + path); + boolean isFailed = false; + for (TestResultPart part : subList.getParts()) { + if (!part.getStatus().equals(TestStatus.PASSED)) { + isFailed = true; + break; + } + } + fillToc(toc, path, isFailed); + } + + buf.append("\n"); + for (TreeSPath path : toc.keySet()) { + boolean inResult = result.getResultParts().containsKey(path); + boolean isFailed = !toc.get(path).equals(TestStatus.PASSED); + + buf.append("\n"); + } + buf.append("
"); + int depth = path.depth(); + for (int i = 0; i < depth; i++) { + buf.append("      "); + } + + if (inResult) { + buf.append(""); + } if (registry != null) { StructureElement element = registry.getElement(path); if (element != null) { - buf.append("
"); buf.append(element.getDescription()); - buf.append(""); + } else { + buf.append(path.getName()); + } + } + if (inResult) { + buf.append("
"); + } + buf.append("
\n"); + buf.append("
\n"); + } + + private void generatePartsList(StringBuffer buf, StructureRegistry registry) { + for (TreeSPath path : result.getResultParts().keySet()) { + buf.append("

\n"); + buf.append(""); + buf.append("

"); + String description = path.getName(); + if (registry != null) { + StructureElement element = registry.getElement(path); + if (element != null) { + description = element.getDescription(); } } - buf.append("

"); + buf.append(description); + buf.append(""); + PartSubList subList = (PartSubList) result.getResultParts().get( path); buf.append("\n"); for (TestResultPart part : subList.getParts()) { SimpleResultPart sPart = (SimpleResultPart) part; - String color = "yellow"; + String clss = ""; if (sPart.getStatus().equals(SimpleResultPart.PASSED)) { - color = "green"; + clss = "passed"; } else { - color = "red"; + clss = "failed"; } - buf.append("\n"); } buf.append("
"); + buf.append("
"); buf.append(sPart.getMessage()); buf.append("
\n"); - - buf.append("
\n"); + } - buf.append(""); - buf.append(""); + private void fillToc(SortedMap toc, TreeSPath path, + boolean isFailed) { + if (isFailed) { + toc.put(path, TestStatus.FAILED); + } else { + if (!toc.containsKey(path)) { + toc.put(path, TestStatus.PASSED); + } + } - try { - FileWriter writer = new FileWriter(report.getResultFile(result)); - writer.write(buf.toString()); - writer.close(); - } catch (IOException e) { - e.printStackTrace(); + if (path.getParent() != null) { + fillToc(toc, path.getParent(), isFailed); } } + private String anchor(TreeSPath path) { + return path.getAsUniqueString().replace(path.getSeparator(), '_'); + } + + private String describedPath(TreePath path, StructureRegistry registry) { + StringBuffer buf = new StringBuffer(""); + return buf.toString(); + } } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultsList.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultsList.java index e191f5fb4..f2a751641 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultsList.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultsList.java @@ -24,7 +24,7 @@ class ResultsList { buf.append("\n"); buf.append("

Results

\n"); - buf.append("\n"); + buf.append("
\n"); } void addTestResult(TreeTestResult result) { @@ -32,17 +32,17 @@ class ResultsList { // Date buf.append("\n"); // Id and link - buf.append("\n"); - + buf.append("\n"); } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/style.css b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/style.css index d7e7730bc..26d5ae2bd 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/style.css +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/style.css @@ -65,87 +65,24 @@ td { text-align: left; } -/**************** Navigation ****************/ -td.nav1 { - padding: 5px 0px 0px 0px; - font-size: 12px; - font-weight: bold; -} - -td.nav2 { - padding: 0px 0px 0px 5px; - font-size: 12px; -} - -/**************** Forms ****************/ -input.submit { - border: solid 1px grey; - background-color: lightgrey; - align: right; -} - -input.submit:hover { - border: solid 1px #3399FF; - background-color: white; - color: #3399FF; -} - -input.std { - border: solid 1px lightgrey; - padding: 1px; - margin: 2px; +.passed { + color: green; } -.formError { +.failed { color: red; - padding: 1px; - margin: 2px; - font-weight: bold; } /**************** Pseudo classes ****************/ -a:link { - color: #0066CC; +a { text-decoration: none; } -a:visited { +a.nav { color: #0066CC; text-decoration: none; } a:hover { - color: #3399FF; - text-decoration: none; -} - -/************************* ID's *************************/ -#main { - position: absolute; - margin-left: 180px; - padding-top: 65px; -} - -#navigation { - position: absolute; - width: 150px; - height: 800px; - border-right: 1px solid #0066CC; - font-weight: normal; - margin-top: 60px; - margin-left: 10px; -} - -#banner { - position: absolute; - width: 400px; - height: 50px; -} - -#upperRight { - position: absolute; - top: 0; - right: 0; - margin-top: 20px; - margin-right: 10px; + text-decoration: underline; } \ No newline at end of file -- 2.39.2
"); Date closeDate = result.getCloseDate(); - if(closeDate == null){ + if (closeDate == null) { throw new SlcException("No close date"); } buf.append(report.sdf.format(closeDate)); buf.append(""); + buf.append("\" target=\"main\">#"); buf.append(result.getTestResultId()).append("