aboutsummaryrefslogtreecommitdiffstats
path: root/org.jacoco.report/src/org/jacoco
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2013-09-24 01:50:50 +0200
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2013-09-24 01:50:50 +0200
commitcdb42efaf762d8ad062302b08937fe1d60b93c98 (patch)
tree4e8e0115146f6f980cf2a984762e14b120d6162e /org.jacoco.report/src/org/jacoco
parent80e4ab959ee3e39cf56f757ce53c3deb1dbc5cd5 (diff)
downloadplatform_external_jacoco-cdb42efaf762d8ad062302b08937fe1d60b93c98.tar.gz
platform_external_jacoco-cdb42efaf762d8ad062302b08937fe1d60b93c98.tar.bz2
platform_external_jacoco-cdb42efaf762d8ad062302b08937fe1d60b93c98.zip
Add additional package page to HTML report listing source files instead
of classes.
Diffstat (limited to 'org.jacoco.report/src/org/jacoco')
-rw-r--r--org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java49
-rw-r--r--org.jacoco.report/src/org/jacoco/report/internal/html/page/PackageSourcePage.java122
-rw-r--r--org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java12
-rw-r--r--org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFileItem.java48
-rw-r--r--org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java3
-rw-r--r--org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css7
6 files changed, 209 insertions, 32 deletions
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java
index e74244f5..f374846a 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java
@@ -12,17 +12,15 @@
package org.jacoco.report.internal.html.page;
import java.io.IOException;
-import java.io.Reader;
-import java.util.HashMap;
-import java.util.Map;
import org.jacoco.core.analysis.IClassCoverage;
import org.jacoco.core.analysis.IPackageCoverage;
-import org.jacoco.core.analysis.ISourceFileCoverage;
import org.jacoco.report.ISourceFileLocator;
import org.jacoco.report.internal.ReportOutputFolder;
+import org.jacoco.report.internal.html.HTMLElement;
import org.jacoco.report.internal.html.IHTMLReportContext;
import org.jacoco.report.internal.html.ILinkable;
+import org.jacoco.report.internal.html.resources.Styles;
/**
* Page showing coverage information for a Java package. The page contains a
@@ -30,7 +28,7 @@ import org.jacoco.report.internal.html.ILinkable;
*/
public class PackagePage extends TablePage<IPackageCoverage> {
- private final ISourceFileLocator locator;
+ private final PackageSourcePage packageSourcePage;
/**
* Creates a new visitor in the given context.
@@ -50,39 +48,23 @@ public class PackagePage extends TablePage<IPackageCoverage> {
final ISourceFileLocator locator, final ReportOutputFolder folder,
final IHTMLReportContext context) {
super(node, parent, folder, context);
- this.locator = locator;
+ packageSourcePage = new PackageSourcePage(node, parent, locator,
+ folder, context, this);
}
@Override
public void render() throws IOException {
- final Map<String, ILinkable> sourceFiles = renderSourceFiles();
- renderClasses(sourceFiles);
+ packageSourcePage.render();
+ renderClasses();
super.render();
}
- private final Map<String, ILinkable> renderSourceFiles() throws IOException {
- final Map<String, ILinkable> sourceFiles = new HashMap<String, ILinkable>();
- final String packagename = getNode().getName();
- for (final ISourceFileCoverage s : getNode().getSourceFiles()) {
- final String sourcename = s.getName();
- final Reader reader = locator
- .getSourceFile(packagename, sourcename);
- if (reader != null) {
- final SourceFilePage sourcePage = new SourceFilePage(s, reader,
- locator.getTabWidth(), this, folder, context);
- sourcePage.render();
- sourceFiles.put(sourcename, sourcePage);
- }
-
- }
- return sourceFiles;
- }
-
- private void renderClasses(final Map<String, ILinkable> sourceFiles)
- throws IOException {
+ private void renderClasses() throws IOException {
for (final IClassCoverage c : getNode().getClasses()) {
- final ClassPage page = new ClassPage(c, this, sourceFiles.get(c
- .getSourceFileName()), folder, context);
+ final ILinkable sourceFilePage = packageSourcePage
+ .getSourceFilePage(c.getSourceFileName());
+ final ClassPage page = new ClassPage(c, this, sourceFilePage,
+ folder, context);
page.render();
addItem(page);
}
@@ -103,4 +85,11 @@ public class PackagePage extends TablePage<IPackageCoverage> {
return context.getLanguageNames().getPackageName(getNode().getName());
}
+ @Override
+ protected void infoLinks(final HTMLElement span) throws IOException {
+ final String link = packageSourcePage.getLink(folder);
+ span.a(link, Styles.EL_SOURCE).text("Source Files");
+ super.infoLinks(span);
+ }
+
}
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackageSourcePage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackageSourcePage.java
new file mode 100644
index 00000000..cbd9f4fe
--- /dev/null
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackageSourcePage.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2013 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Marc R. Hoffmann - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.report.internal.html.page;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jacoco.core.analysis.IPackageCoverage;
+import org.jacoco.core.analysis.ISourceFileCoverage;
+import org.jacoco.report.ISourceFileLocator;
+import org.jacoco.report.internal.ReportOutputFolder;
+import org.jacoco.report.internal.html.HTMLElement;
+import org.jacoco.report.internal.html.IHTMLReportContext;
+import org.jacoco.report.internal.html.ILinkable;
+import org.jacoco.report.internal.html.resources.Styles;
+
+/**
+ * Page showing coverage information for a Java package. The page contains a
+ * table with all classes of the package.
+ */
+public class PackageSourcePage extends TablePage<IPackageCoverage> {
+
+ private final ISourceFileLocator locator;
+ private Map<String, ILinkable> sourceFilePages;
+ private final ILinkable packagePage;
+
+ /**
+ * Creates a new visitor in the given context.
+ *
+ * @param node
+ * coverage data for this package
+ * @param parent
+ * optional hierarchical parent
+ * @param locator
+ * source locator
+ * @param folder
+ * base folder to create this page in
+ * @param context
+ * settings context
+ * @param packagePage
+ * page listing the classes of this package
+ */
+ public PackageSourcePage(final IPackageCoverage node,
+ final ReportPage parent, final ISourceFileLocator locator,
+ final ReportOutputFolder folder, final IHTMLReportContext context,
+ final ILinkable packagePage) {
+ super(node, parent, folder, context);
+ this.locator = locator;
+ this.packagePage = packagePage;
+ }
+
+ @Override
+ public void render() throws IOException {
+ sourceFilePages = renderSourceFilePages();
+ super.render();
+ }
+
+ /**
+ * Returns the link to the source file page of the source file with the
+ * given name. If no source file was located, <code>null</code> is
+ * returned..
+ */
+ ILinkable getSourceFilePage(final String name) {
+ return sourceFilePages.get(name);
+ }
+
+ private final Map<String, ILinkable> renderSourceFilePages()
+ throws IOException {
+ final Map<String, ILinkable> sourceFiles = new HashMap<String, ILinkable>();
+ final String packagename = getNode().getName();
+ for (final ISourceFileCoverage s : getNode().getSourceFiles()) {
+ final String sourcename = s.getName();
+ final Reader reader = locator
+ .getSourceFile(packagename, sourcename);
+ if (reader == null) {
+ addItem(new SourceFileItem(s));
+ } else {
+ final SourceFilePage sourcePage = new SourceFilePage(s, reader,
+ locator.getTabWidth(), this, folder, context);
+ sourcePage.render();
+ sourceFiles.put(sourcename, sourcePage);
+ addItem(sourcePage);
+ }
+
+ }
+ return sourceFiles;
+ }
+
+ @Override
+ protected String getOnload() {
+ return "initialSort(['breadcrumb', 'coveragetable'])";
+ }
+
+ @Override
+ protected String getFileName() {
+ return "index.source.html";
+ }
+
+ @Override
+ public String getLinkLabel() {
+ return context.getLanguageNames().getPackageName(getNode().getName());
+ }
+
+ @Override
+ protected void infoLinks(final HTMLElement span) throws IOException {
+ final String link = packagePage.getLink(folder);
+ span.a(link, Styles.EL_CLASS).text("Classes");
+ super.infoLinks(span);
+ }
+
+}
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java
index a993e1ce..ccdb39ed 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java
@@ -102,7 +102,7 @@ public abstract class ReportPage implements ILinkable {
body.attr("onload", getOnload());
final HTMLElement navigation = body.div(Styles.BREADCRUMB);
navigation.attr("id", "breadcrumb");
- infoLinks(navigation.span(Styles.RIGHT));
+ infoLinks(navigation.span(Styles.INFO));
breadcrumb(navigation, folder);
body.h1().text(getLinkLabel());
content(body);
@@ -118,7 +118,15 @@ public abstract class ReportPage implements ILinkable {
return null;
}
- private void infoLinks(final HTMLElement span) throws IOException {
+ /**
+ * Inserts additional links on the top right corner.
+ *
+ * @param span
+ * parent element
+ * @throws IOException
+ * in case of IO problems with the report writer
+ */
+ protected void infoLinks(final HTMLElement span) throws IOException {
span.a(context.getSessionsPage(), folder);
}
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFileItem.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFileItem.java
new file mode 100644
index 00000000..e706aa05
--- /dev/null
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFileItem.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2013 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Marc R. Hoffmann - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.report.internal.html.page;
+
+import org.jacoco.core.analysis.ICoverageNode;
+import org.jacoco.core.analysis.ISourceFileCoverage;
+import org.jacoco.report.internal.ReportOutputFolder;
+import org.jacoco.report.internal.html.resources.Styles;
+import org.jacoco.report.internal.html.table.ITableItem;
+
+/**
+ * Table items representing a source file which cannot be linked.
+ *
+ */
+final class SourceFileItem implements ITableItem {
+
+ private final ICoverageNode node;
+
+ SourceFileItem(final ISourceFileCoverage node) {
+ this.node = node;
+ }
+
+ public String getLinkLabel() {
+ return node.getName();
+ }
+
+ public String getLinkStyle() {
+ return Styles.EL_SOURCE;
+ }
+
+ public String getLink(final ReportOutputFolder base) {
+ return null;
+ }
+
+ public ICoverageNode getNode() {
+ return node;
+ }
+
+}
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java
index 8899e87e..f2a9a94c 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java
@@ -19,6 +19,9 @@ public final class Styles {
/** Breadcrumb bar */
public static final String BREADCRUMB = "breadcrumb";
+ /** Info links within the Breadcrumb bar */
+ public static final String INFO = "info";
+
/** Footer */
public static final String FOOTER = "footer";
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css
index b726f252..08eba792 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css
@@ -13,6 +13,13 @@ h1 {
padding:2px 4px 2px 4px;
}
+.breadcrumb .info {
+ float:right;
+}
+
+.breadcrumb .info a {
+ margin-left:8px;
+}
.el_report {
padding-left:18px;