diff options
author | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2013-09-24 01:50:50 +0200 |
---|---|---|
committer | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2013-09-24 01:50:50 +0200 |
commit | cdb42efaf762d8ad062302b08937fe1d60b93c98 (patch) | |
tree | 4e8e0115146f6f980cf2a984762e14b120d6162e /org.jacoco.report/src/org | |
parent | 80e4ab959ee3e39cf56f757ce53c3deb1dbc5cd5 (diff) | |
download | platform_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')
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; |