1/******************************************************************************* 2 * Copyright (c) 2009, 2015 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 *******************************************************************************/ 12package org.jacoco.report; 13 14import java.io.IOException; 15import java.io.Reader; 16import java.util.Collection; 17import java.util.Collections; 18import java.util.List; 19 20import org.jacoco.core.analysis.IClassCoverage; 21import org.jacoco.core.analysis.IMethodCoverage; 22import org.jacoco.core.analysis.IPackageCoverage; 23import org.jacoco.core.analysis.ISourceFileCoverage; 24import org.jacoco.core.data.ExecutionData; 25import org.jacoco.core.data.SessionInfo; 26import org.jacoco.core.internal.analysis.BundleCoverageImpl; 27import org.jacoco.core.internal.analysis.ClassCoverageImpl; 28import org.jacoco.core.internal.analysis.CounterImpl; 29import org.jacoco.core.internal.analysis.MethodCoverageImpl; 30import org.jacoco.core.internal.analysis.PackageCoverageImpl; 31import 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 */ 37public 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, null, 78 "java/lang/Object", new String[0]); 79 classCoverageImpl.setSourceFileName("FooClass.java"); 80 classCoverageImpl.addMethod(methodCoverage); 81 classCoverage = classCoverageImpl; 82 83 final SourceFileCoverageImpl sourceFileCoverageImpl = new SourceFileCoverageImpl( 84 "FooClass.java", "org/jacoco/example"); 85 sourceFileCoverageImpl.increment(classCoverage); 86 sourceFileCoverage = sourceFileCoverageImpl; 87 88 packageCoverage = new PackageCoverageImpl("org/jacoco/example", 89 Collections.singleton(classCoverage), 90 Collections.singleton(sourceFileCoverage)); 91 bundleCoverage = new BundleCoverageImpl("bundle", 92 Collections.singleton(packageCoverage)); 93 } 94 95 public void sendNestedGroups(IReportVisitor reportVisitor) 96 throws IOException { 97 reportVisitor.visitInfo(sessions, executionData); 98 final IReportGroupVisitor report = reportVisitor.visitGroup("report"); 99 final IReportGroupVisitor group1 = report.visitGroup("group1"); 100 sendGroup(group1); 101 sendBundle(report); 102 reportVisitor.visitEnd(); 103 } 104 105 public void sendGroup(IReportVisitor reportVisitor) throws IOException { 106 reportVisitor.visitInfo(sessions, executionData); 107 final IReportGroupVisitor group = reportVisitor.visitGroup("group"); 108 sendBundle(group); 109 reportVisitor.visitEnd(); 110 } 111 112 public void sendGroup(IReportGroupVisitor groupVisitor) throws IOException { 113 final IReportGroupVisitor group = groupVisitor.visitGroup("group"); 114 sendBundle(group); 115 } 116 117 public void sendBundle(IReportVisitor reportVisitor) throws IOException { 118 reportVisitor.visitInfo(sessions, executionData); 119 reportVisitor.visitBundle(bundleCoverage, sourceFileLocator); 120 reportVisitor.visitEnd(); 121 } 122 123 public void sendBundle(IReportGroupVisitor groupVisitor) throws IOException { 124 groupVisitor.visitBundle(bundleCoverage, sourceFileLocator); 125 } 126 127} 128