1 /******************************************************************************* 2 * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * Marc R. Hoffmann - initial API and implementation 10 * 11 *******************************************************************************/ 12 package org.jacoco.report; 13 14 import java.io.IOException; 15 import java.io.Reader; 16 import java.util.Collection; 17 import java.util.Collections; 18 import java.util.List; 19 20 import org.jacoco.core.analysis.IClassCoverage; 21 import org.jacoco.core.analysis.IMethodCoverage; 22 import org.jacoco.core.analysis.IPackageCoverage; 23 import org.jacoco.core.analysis.ISourceFileCoverage; 24 import org.jacoco.core.data.ExecutionData; 25 import org.jacoco.core.data.SessionInfo; 26 import org.jacoco.core.internal.analysis.BundleCoverageImpl; 27 import org.jacoco.core.internal.analysis.ClassCoverageImpl; 28 import org.jacoco.core.internal.analysis.CounterImpl; 29 import org.jacoco.core.internal.analysis.MethodCoverageImpl; 30 import org.jacoco.core.internal.analysis.PackageCoverageImpl; 31 import org.jacoco.core.internal.analysis.SourceFileCoverageImpl; 32 33 /** 34 * Creates a simple hierarchy of coverage nodes and feeds it into 35 * {@link IReportVisitor} instances. 36 */ 37 public class ReportStructureTestDriver { 38 39 private final List<SessionInfo> sessions = Collections.emptyList(); 40 41 private final Collection<ExecutionData> executionData = Collections 42 .emptyList(); 43 44 public final ISourceFileLocator sourceFileLocator = new ISourceFileLocator() { 45 46 public Reader getSourceFile(String packageName, String fileName) 47 throws IOException { 48 return null; 49 } 50 51 public int getTabWidth() { 52 return 4; 53 } 54 }; 55 56 private final IMethodCoverage methodCoverage; 57 58 private final IClassCoverage classCoverage; 59 60 private final ISourceFileCoverage sourceFileCoverage; 61 62 private final IPackageCoverage packageCoverage; 63 64 private final BundleCoverageImpl bundleCoverage; 65 66 public ReportStructureTestDriver() { 67 final MethodCoverageImpl m = new MethodCoverageImpl("fooMethod", "()V", 68 null); 69 m.increment(CounterImpl.getInstance(3, 5), CounterImpl.COUNTER_0_0, 1); 70 m.increment(CounterImpl.getInstance(3, 5), 71 CounterImpl.getInstance(1, 2), 2); 72 m.increment(CounterImpl.getInstance(4, 5), CounterImpl.COUNTER_0_0, 3); 73 m.incrementMethodCounter(); 74 methodCoverage = m; 75 76 final ClassCoverageImpl classCoverageImpl = new ClassCoverageImpl( 77 "org/jacoco/example/FooClass", 1001, false); 78 classCoverageImpl.setSourceFileName("FooClass.java"); 79 classCoverageImpl.addMethod(methodCoverage); 80 classCoverage = classCoverageImpl; 81 82 final SourceFileCoverageImpl sourceFileCoverageImpl = new SourceFileCoverageImpl( 83 "FooClass.java", "org/jacoco/example"); 84 sourceFileCoverageImpl.increment(classCoverage); 85 sourceFileCoverage = sourceFileCoverageImpl; 86 87 packageCoverage = new PackageCoverageImpl("org/jacoco/example", 88 Collections.singleton(classCoverage), 89 Collections.singleton(sourceFileCoverage)); 90 bundleCoverage = new BundleCoverageImpl("bundle", 91 Collections.singleton(packageCoverage)); 92 } 93 94 public void sendNestedGroups(IReportVisitor reportVisitor) 95 throws IOException { 96 reportVisitor.visitInfo(sessions, executionData); 97 final IReportGroupVisitor report = reportVisitor.visitGroup("report"); 98 final IReportGroupVisitor group1 = report.visitGroup("group1"); 99 sendGroup(group1); 100 sendBundle(report); 101 reportVisitor.visitEnd(); 102 } 103 104 public void sendGroup(IReportVisitor reportVisitor) throws IOException { 105 reportVisitor.visitInfo(sessions, executionData); 106 final IReportGroupVisitor group = reportVisitor.visitGroup("group"); 107 sendBundle(group); 108 reportVisitor.visitEnd(); 109 } 110 111 public void sendGroup(IReportGroupVisitor groupVisitor) throws IOException { 112 final IReportGroupVisitor group = groupVisitor.visitGroup("group"); 113 sendBundle(group); 114 } 115 116 public void sendBundle(IReportVisitor reportVisitor) throws IOException { 117 reportVisitor.visitInfo(sessions, executionData); 118 reportVisitor.visitBundle(bundleCoverage, sourceFileLocator); 119 reportVisitor.visitEnd(); 120 } 121 122 public void sendBundle(IReportGroupVisitor groupVisitor) throws IOException { 123 groupVisitor.visitBundle(bundleCoverage, sourceFileLocator); 124 } 125 126 } 127