aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java
blob: 66f2716b644347541470bbf87d72a1d1e8422a8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*******************************************************************************
 * Copyright (c) 2009, 2020 Mountainminds GmbH & Co. KG and Contributors
 * This program and the accompanying materials are made available under
 * the terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *    Marc R. Hoffmann - initial API and implementation
 *
 *******************************************************************************/
package org.jacoco.report;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.jacoco.core.analysis.IBundleCoverage;
import org.jacoco.core.analysis.IPackageCoverage;
import org.jacoco.core.data.ExecutionData;
import org.jacoco.core.data.SessionInfo;
import org.jacoco.core.internal.analysis.BundleCoverageImpl;
import org.junit.Test;

/**
 * Unit tests for {@link MultiReportVisitor}.
 */
public class MultiReportVisitorTest {

	private static class MockVisitor extends MockGroupVisitor
			implements IReportVisitor {

		MockVisitor() {
			super("Report");
		}

		private boolean visitInfosCalled = false;

		private boolean visitEndCalled = false;

		public void visitInfo(List<SessionInfo> sessionInfos,
				Collection<ExecutionData> executionData) throws IOException {
			visitInfosCalled = true;
		}

		public void visitEnd() throws IOException {
			visitEndCalled = true;
		}

		@Override
		public String toString() {
			assertTrue("visitInfos() has not been called", visitInfosCalled);
			assertTrue("visitEnd() has not been called", visitEndCalled);
			return super.toString();
		}

	}

	private static class MockGroupVisitor implements IReportGroupVisitor {

		private final String name;

		private final List<MockGroupVisitor> children = new ArrayList<MockGroupVisitor>();

		MockGroupVisitor(String name) {
			this.name = name;
		}

		public void visitBundle(IBundleCoverage bundle,
				ISourceFileLocator locator) throws IOException {
			children.add(new MockGroupVisitor(bundle.getName()));
		}

		public IReportGroupVisitor visitGroup(String name) throws IOException {
			MockGroupVisitor child = new MockGroupVisitor(name);
			children.add(child);
			return child;
		}

		@Override
		public String toString() {
			return name + children;
		}
	}

	private IBundleCoverage createBundle(String name) {
		final Collection<IPackageCoverage> packages = Collections.emptyList();
		return new BundleCoverageImpl(name, packages);
	}

	private static final String MOCK_REPORT = "Report[g1[b1[], b2[]], g2[]]";

	private void createMockReport(IReportVisitor visitor) throws IOException {
		final List<SessionInfo> sessions = Collections.emptyList();
		final List<ExecutionData> executionData = Collections.emptyList();
		visitor.visitInfo(sessions, executionData);
		IReportGroupVisitor g1 = visitor.visitGroup("g1");
		g1.visitBundle(createBundle("b1"), null);
		g1.visitBundle(createBundle("b2"), null);
		visitor.visitGroup("g2");
		visitor.visitEnd();
	}

	@Test
	public void testMockFormatter() throws IOException {
		MockVisitor visitor = new MockVisitor();
		createMockReport(visitor);
		assertEquals(MOCK_REPORT, visitor.toString());
	}

	@Test
	public void testMultiFormatter() throws IOException {
		IReportVisitor mock1 = new MockVisitor();
		IReportVisitor mock2 = new MockVisitor();
		IReportVisitor mock3 = new MockVisitor();
		List<IReportVisitor> visitors = Arrays.asList(mock1, mock2, mock3);
		MultiReportVisitor multi = new MultiReportVisitor(visitors);
		createMockReport(multi);
		assertEquals(MOCK_REPORT, mock1.toString());
		assertEquals(MOCK_REPORT, mock2.toString());
		assertEquals(MOCK_REPORT, mock3.toString());
	}
}