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