1764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann/*******************************************************************************
2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
3764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann * All rights reserved. This program and the accompanying materials
4764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann * are made available under the terms of the Eclipse Public License v1.0
5764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann * which accompanies this distribution, and is available at
6764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann * http://www.eclipse.org/legal/epl-v10.html
7764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann *
8764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann * Contributors:
9764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann *    Marc R. Hoffmann - initial API and implementation
10764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann *
11764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann *******************************************************************************/
12764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannpackage org.jacoco.report.internal.html.page;
13764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
14764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport static org.junit.Assert.assertEquals;
15764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
16764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport java.io.IOException;
17764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport java.io.Reader;
18764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport java.util.Arrays;
19764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport java.util.Collections;
20764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
21764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.jacoco.core.analysis.IClassCoverage;
22764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.jacoco.core.analysis.IPackageCoverage;
23764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.jacoco.core.analysis.ISourceFileCoverage;
24764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.jacoco.core.internal.analysis.ClassCoverageImpl;
25764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.jacoco.core.internal.analysis.PackageCoverageImpl;
26764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.jacoco.core.internal.analysis.SourceFileCoverageImpl;
27764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.jacoco.report.ISourceFileLocator;
28764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.junit.Before;
29764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.junit.Test;
30764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannimport org.w3c.dom.Document;
31764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
32764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann/**
33764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann * Unit tests for {@link PackageSourcePage}.
34764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann */
35764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmannpublic class PackagePageTest extends PageTestBase {
36764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
37764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	private IPackageCoverage node;
38764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	private ISourceFileLocator sourceLocator;
39764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
40764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	private PackagePage page;
41764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
42764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	@Before
43764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	@Override
44764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	public void setup() throws Exception {
45764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		super.setup();
46764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		sourceLocator = new ISourceFileLocator() {
47764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
48764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann			public int getTabWidth() {
49764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				return 4;
50764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann			}
51764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
52764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann			public Reader getSourceFile(String packageName, String fileName)
53764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann					throws IOException {
54764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				return null;
55764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann			}
56764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		};
57764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	}
58764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
59764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	@Test
60764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	public void testContentsWithSource() throws Exception {
61764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		IClassCoverage class1 = new ClassCoverageImpl(
62f4622217085198f3ae42906934026961b29d1111Marc R. Hoffmann				"org/jacoco/example/Foo1", 0x1000, false);
63764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		IClassCoverage class2 = new ClassCoverageImpl(
64f4622217085198f3ae42906934026961b29d1111Marc R. Hoffmann				"org/jacoco/example/Foo2", 0x2000, false);
65764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		ISourceFileCoverage src1 = new SourceFileCoverageImpl("Src1.java",
66764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				"org/jacoco/example");
67764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		node = new PackageCoverageImpl("org/jacoco/example", Arrays.asList(
68764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				class1, class2), Arrays.asList(src1));
69764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
70764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		page = new PackagePage(node, null, sourceLocator, rootFolder, context);
71764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		page.render();
72764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
73764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		final Document doc = support.parse(output.getFile("index.html"));
74764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
75764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		// Expect "Source Files" links
76764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		assertEquals("index.source.html",
77764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				support.findStr(doc, "/html/body/div[1]/span[1]/a/@href"));
78764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		assertEquals("el_source",
79764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				support.findStr(doc, "/html/body/div[1]/span[1]/a/@class"));
80764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		assertEquals("Source Files",
81764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				support.findStr(doc, "/html/body/div[1]/span[1]/a"));
82764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		assertEquals("el_class", support.findStr(doc,
83764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				"/html/body/table[1]/tbody/tr[1]/td[1]/a/@class"));
84764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		assertEquals("Foo1",
85764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				support.findStr(doc, "/html/body/table[1]/tbody/tr[1]/td[1]/a"));
86764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		assertEquals("el_class", support.findStr(doc,
87764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				"/html/body/table[1]/tbody/tr[2]/td[1]/a/@class"));
88764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		assertEquals("Foo2",
89764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				support.findStr(doc, "/html/body/table[1]/tbody/tr[2]/td[1]/a"));
90764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
91764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		output.assertFile("index.source.html");
92764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	}
93764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
94764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	@Test
95764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	public void testContentsNoSource() throws Exception {
96764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		IClassCoverage class1 = new ClassCoverageImpl(
97f4622217085198f3ae42906934026961b29d1111Marc R. Hoffmann				"org/jacoco/example/Foo1", 0x1000, false);
98764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		IClassCoverage class2 = new ClassCoverageImpl(
99f4622217085198f3ae42906934026961b29d1111Marc R. Hoffmann				"org/jacoco/example/Foo2", 0x2000, false);
100764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		node = new PackageCoverageImpl("org/jacoco/example", Arrays.asList(
101764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				class1, class2), Collections.<ISourceFileCoverage> emptyList());
102764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
103764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		page = new PackagePage(node, null, sourceLocator, rootFolder, context);
104764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		page.render();
105764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
106764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		// Expect no "Source Files" link
107764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		final Document doc = support.parse(output.getFile("index.html"));
108764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		assertEquals("Sessions",
109764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann				support.findStr(doc, "/html/body/div[1]/span[1]/a"));
110764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
111764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		// Expect no source files page:
112764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann		output.assertNoFile("index.source.html");
113764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann	}
114764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann
115764ea21c9225e037a8d7cbb3a24626ee9c2a01ecMarc R. Hoffmann}
116