1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/*******************************************************************************
2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
3e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * All rights reserved. This program and the accompanying materials
4e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0
5e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * which accompanies this distribution, and is available at
6e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html
7e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *
8e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Contributors:
9e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *    Marc R. Hoffmann - initial API and implementation
10e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *
11e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *******************************************************************************/
12e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpackage org.jacoco.core.analysis;
13e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
14e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertEquals;
15e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertNotNull;
16e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertTrue;
17e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
18e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.Arrays;
19e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.Collection;
20e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.Collections;
21e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.HashMap;
22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.HashSet;
23e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.Map;
24e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.Set;
25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.internal.analysis.ClassCoverageImpl;
27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.internal.analysis.CounterImpl;
28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.internal.analysis.MethodCoverageImpl;
29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.junit.Before;
30e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.junit.Test;
31e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/**
33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Unit tests for {@link CoverageBuilder}.
34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */
35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic class CoverageBuilderTest {
36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private CoverageBuilder coverageBuilder;
38e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Before
40e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setup() {
41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		coverageBuilder = new CoverageBuilder();
42e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testCreateClassMissed() {
46e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final MethodCoverageImpl method = new MethodCoverageImpl("doit", "()V",
47e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				null);
48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 6);
49e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 7);
50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 8);
51e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.incrementMethodCounter();
5260c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(123L, false, "Sample", null, method);
53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final Collection<IClassCoverage> classes = coverageBuilder.getClasses();
55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, classes.size());
56e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		IClassCoverage c = classes.iterator().next();
57e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals("Sample", c.getName());
58e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, c.getClassCounter().getTotalCount());
59e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(0, c.getClassCounter().getCoveredCount());
60e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, c.getMethodCounter().getTotalCount());
61e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(0, c.getMethodCounter().getCoveredCount());
62e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(3, c.getLineCounter().getTotalCount());
63e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(0, c.getLineCounter().getCoveredCount());
64e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
65e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final Collection<IMethodCoverage> methods = c.getMethods();
66e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, methods.size());
67e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		IMethodCoverage m = methods.iterator().next();
68e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals("doit", m.getName());
69e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals("()V", m.getDesc());
70e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, m.getMethodCounter().getTotalCount());
71e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(0, m.getMethodCounter().getCoveredCount());
72e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(3, m.getLineCounter().getTotalCount());
73e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(0, m.getLineCounter().getCoveredCount());
74e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
75e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
76e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
77e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testCreateClassCovered() {
78e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final MethodCoverageImpl method = new MethodCoverageImpl("doit", "()V",
79e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				null);
80e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 6);
81e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 7);
82e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 8);
83e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.incrementMethodCounter();
8460c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(123L, false, "Sample", null, method);
85e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
86e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final Collection<IClassCoverage> classes = coverageBuilder.getClasses();
87e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, classes.size());
88e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		IClassCoverage c = classes.iterator().next();
89e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals("Sample", c.getName());
90e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, c.getClassCounter().getTotalCount());
91e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, c.getClassCounter().getCoveredCount());
92e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, c.getMethodCounter().getTotalCount());
93e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, c.getMethodCounter().getCoveredCount());
94e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(3, c.getLineCounter().getTotalCount());
95e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(3, c.getLineCounter().getCoveredCount());
96e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
97e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final Collection<IMethodCoverage> methods = c.getMethods();
98e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, methods.size());
99e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		IMethodCoverage m = methods.iterator().next();
100e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals("doit", m.getName());
101e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals("()V", m.getDesc());
102e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, m.getMethodCounter().getTotalCount());
103e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, m.getMethodCounter().getCoveredCount());
104e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(3, m.getLineCounter().getTotalCount());
105e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(3, m.getLineCounter().getCoveredCount());
106e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
107e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
108e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
109e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testIgnoreClassesWithoutCode() {
110e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final MethodCoverageImpl method = new MethodCoverageImpl("doit", "()V",
111e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				null);
11260c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(123L, false, "Sample", null, method);
113e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
114e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final Collection<IClassCoverage> classes = coverageBuilder.getClasses();
115e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertTrue(classes.isEmpty());
116e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
117e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
118e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test(expected = IllegalStateException.class)
119e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testDuplicateClassNameDifferent() {
120e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		MethodCoverageImpl method = new MethodCoverageImpl("doit", "()V", null);
121e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
12260c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(123L, false, "Sample", null, method);
123e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
124e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		// Add class with different id must fail:
125e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method = new MethodCoverageImpl("doit", "()V", null);
126e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
12760c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(345L, false, "Sample", null, method);
128e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
129e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
130e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
131e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testDuplicateClassNameIdentical() {
132e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		MethodCoverageImpl method = new MethodCoverageImpl("doit", "()V", null);
133e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
13460c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(123L, false, "Sample", null, method);
135e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
136e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		// Add class with same id:
137e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method = new MethodCoverageImpl("doit", "()V", null);
138e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
13960c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(123L, false, "Sample", null, method);
140e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
141e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		// Second add must be ignored:
142e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final Collection<IClassCoverage> classes = coverageBuilder.getClasses();
143e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, classes.size());
144e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
145e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
146e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
147e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testCreateSourceFile() {
148e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit",
149e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				"()V", null);
150e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
15160c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(123L, false, "Sample", "Sample.java", method1);
152e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
153e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit",
154e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				"()V", null);
155e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 6);
15660c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(234L, false, "Second", "Sample.java", method2);
157e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
158e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final Collection<ISourceFileCoverage> sourcefiles = coverageBuilder
159e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				.getSourceFiles();
160e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(1, sourcefiles.size());
161e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		ISourceFileCoverage s = sourcefiles.iterator().next();
162e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
163e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(2, s.getClassCounter().getTotalCount());
164e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(0, s.getClassCounter().getCoveredCount());
165e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
166e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
167e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	@Test
168f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail	public void testCreateSourceFileDuplicateClassNameIdentical() {
169f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit",
170f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail				"()V", null);
171f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
172f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		addClass(123L, false, "Sample", "Sample.java", method1);
173f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail
174f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit",
175f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail				"()V", null);
176f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
177f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		addClass(123L, false, "Sample", "Sample.java", method2);
178f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail
179f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		final Collection<ISourceFileCoverage> sourcefiles = coverageBuilder
180f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail				.getSourceFiles();
181f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		assertEquals(1, sourcefiles.size());
182f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		ISourceFileCoverage s = sourcefiles.iterator().next();
183f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail
184f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		assertEquals(1, s.getClassCounter().getTotalCount());
185f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail		assertEquals(0, s.getClassCounter().getCoveredCount());
186f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail	}
187f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail
188f2aef08a63e3867a7db781040950d8a54078fcf7Brett Kail	@Test
189e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void testGetBundle() {
190e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit",
191e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				"()V", null);
192e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
19360c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(1, false, "org/jacoco/examples/Sample1", null, method1);
194e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
195e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit",
196e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				"()V", null);
197e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 6);
19860c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(2, false, "org/jacoco/examples/Sample2", null, method2);
199e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
200e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final MethodCoverageImpl method3 = new MethodCoverageImpl("doit",
201e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				"()V", null);
202e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		method3.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 1);
20360c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(3, false, "Sample3", null, method3);
204e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
205e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		IBundleCoverage bundle = coverageBuilder.getBundle("testbundle");
206e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals("testbundle", bundle.getName());
207e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
208e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final Collection<IPackageCoverage> packages = bundle.getPackages();
209e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(2, packages.size());
210e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		Map<String, IPackageCoverage> packagesByName = new HashMap<String, IPackageCoverage>();
211e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		for (IPackageCoverage p : packages) {
212e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			packagesByName.put(p.getName(), p);
213e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		}
214e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
215e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		IPackageCoverage p1 = packagesByName.get("org/jacoco/examples");
216e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertNotNull(p1);
217e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(
218e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				new HashSet<String>(Arrays.asList(
219e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov						"org/jacoco/examples/Sample1",
220e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov						"org/jacoco/examples/Sample2")),
221e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				getNames(p1.getClasses()));
222e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
223e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		IPackageCoverage p2 = packagesByName.get("");
224e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertNotNull(p2);
225e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		assertEquals(Collections.singleton("Sample3"),
226e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				getNames(p2.getClasses()));
227e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
228e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
22960c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann	@Test
23060c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann	public void testGetNoMatchClasses() {
23160c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		MethodCoverageImpl m = new MethodCoverageImpl("doit", "()V", null);
23260c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		m.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 1);
23360c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(1, true, "Sample1", null, m);
23460c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann
23560c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		m = new MethodCoverageImpl("doit", "()V", null);
23660c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		m.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 2);
23760c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(2, true, "Sample2", null, m);
23860c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann
23960c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		m = new MethodCoverageImpl("doit", "()V", null);
24060c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		m.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
24160c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		addClass(3, false, "Sample3", null, m);
24260c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann
24360c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		final Set<String> actual = getNames(coverageBuilder.getNoMatchClasses());
24460c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		final Set<String> expected = new HashSet<String>(Arrays.asList(
24560c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann				"Sample1", "Sample2"));
24660c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann
24760c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann		assertEquals(expected, actual);
24860c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann	}
24960c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann
250e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private Set<String> getNames(Collection<? extends ICoverageNode> nodes) {
251e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		Set<String> result = new HashSet<String>();
252e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		for (ICoverageNode n : nodes) {
253e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			result.add(n.getName());
254e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		}
255e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		return result;
256e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
257e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
25860c33d63e75c1b0a5da9bd58be1f0b5434240220Marc R. Hoffmann	private void addClass(long id, boolean nomatch, String name, String source,
259e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			MethodCoverageImpl... methods) {
260e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		final ClassCoverageImpl coverage = new ClassCoverageImpl(name, id,
261f4622217085198f3ae42906934026961b29d1111Marc R. Hoffmann				nomatch);
262e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		coverage.setSourceFileName(source);
263e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		for (MethodCoverageImpl m : methods) {
264e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			coverage.addMethod(m);
265e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		}
266e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		coverageBuilder.visitCoverage(coverage);
267e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
268e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov}
269