12103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann/*******************************************************************************
2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
32103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann * All rights reserved. This program and the accompanying materials
42103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann * are made available under the terms of the Eclipse Public License v1.0
52103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann * which accompanies this distribution, and is available at
62103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann * http://www.eclipse.org/legal/epl-v10.html
72103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann *
82103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann * Contributors:
92103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann *    Marc R. Hoffmann - initial API and implementation
102103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann *
112103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann *******************************************************************************/
122103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmannpackage org.jacoco.report.html;
132103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
14ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmannimport static org.junit.Assert.assertEquals;
15ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmannimport static org.junit.Assert.assertSame;
1657225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmannimport static org.junit.Assert.assertTrue;
1757225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann
1857225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmannimport java.io.BufferedReader;
192103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmannimport java.io.IOException;
2057225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmannimport java.io.InputStreamReader;
21ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmannimport java.util.Locale;
222103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
23ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmannimport org.jacoco.report.ILanguageNames;
242103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmannimport org.jacoco.report.MemoryMultiReportOutput;
252103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmannimport org.jacoco.report.ReportStructureTestDriver;
26b952d27d3f7844321a85576ff9168835dd17f0eaMarc R. Hoffmannimport org.junit.After;
272103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmannimport org.junit.Before;
282103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmannimport org.junit.Test;
292103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
302103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann/**
312103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann * Unit tests for {@link HTMLFormatter}.
322103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann */
332103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmannpublic class HTMLFormatterTest {
342103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
352103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	private ReportStructureTestDriver driver;
362103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
372103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	private HTMLFormatter formatter;
382103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
392103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	private MemoryMultiReportOutput output;
402103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
412103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	@Before
422103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	public void setup() {
432103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		driver = new ReportStructureTestDriver();
442103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		formatter = new HTMLFormatter();
452103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		output = new MemoryMultiReportOutput();
462103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	}
472103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
48b952d27d3f7844321a85576ff9168835dd17f0eaMarc R. Hoffmann	@After
49b952d27d3f7844321a85576ff9168835dd17f0eaMarc R. Hoffmann	public void teardown() {
50b952d27d3f7844321a85576ff9168835dd17f0eaMarc R. Hoffmann		output.assertAllClosed();
51b952d27d3f7844321a85576ff9168835dd17f0eaMarc R. Hoffmann	}
52b952d27d3f7844321a85576ff9168835dd17f0eaMarc R. Hoffmann
532103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	@Test
54c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann	public void testStructureWithNestedGroups() throws IOException {
55c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann		driver.sendNestedGroups(formatter.createVisitor(output));
56c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann		output.assertFile("index.html");
57c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann		output.assertFile("group1/index.html");
58c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann		output.assertFile("group1/group/index.html");
59c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann		output.assertFile("group1/group/bundle/index.html");
60c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann		output.assertFile("bundle/index.html");
61c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann	}
62c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann
63c4613ac5c5d1475e920a4b6d78eac6577dab5882Marc R. Hoffmann	@Test
642103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	public void testStructureWithGroup() throws IOException {
6582c11be3dd19fc071f87fedc5782c11ca51a0732Marc R. Hoffmann		driver.sendGroup(formatter.createVisitor(output));
662103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		output.assertFile("index.html");
672103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		output.assertFile("bundle/index.html");
682103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		output.assertFile("bundle/org.jacoco.example/index.html");
692103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		output.assertFile("bundle/org.jacoco.example/FooClass.html");
702103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	}
712103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
722103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	@Test
732103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	public void testStructureWithBundleOnly() throws IOException {
7482c11be3dd19fc071f87fedc5782c11ca51a0732Marc R. Hoffmann		driver.sendBundle(formatter.createVisitor(output));
752103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		output.assertFile("index.html");
762103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		output.assertFile("org.jacoco.example/index.html");
772103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann		output.assertFile("org.jacoco.example/FooClass.html");
782103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann	}
792103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann
8057225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann	@Test
8157225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann	public void testDefaultEncoding() throws Exception {
8282c11be3dd19fc071f87fedc5782c11ca51a0732Marc R. Hoffmann		driver.sendBundle(formatter.createVisitor(output));
8357225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann		final BufferedReader reader = new BufferedReader(new InputStreamReader(
8457225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann				output.getFileAsStream("index.html"), "UTF-8"));
8557225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann		final String line = reader.readLine();
86ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		assertTrue(line,
87ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann				line.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\""));
8857225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann	}
8957225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann
9057225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann	@Test
9157225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann	public void testSetEncoding() throws Exception {
9257225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann		formatter.setOutputEncoding("UTF-16");
9382c11be3dd19fc071f87fedc5782c11ca51a0732Marc R. Hoffmann		driver.sendBundle(formatter.createVisitor(output));
9457225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann		final BufferedReader reader = new BufferedReader(new InputStreamReader(
9557225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann				output.getFileAsStream("index.html"), "UTF-16"));
9657225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann		final String line = reader.readLine();
97ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		assertTrue(line,
98ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann				line.startsWith("<?xml version=\"1.0\" encoding=\"UTF-16\""));
99ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	}
100ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann
101ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	@Test
102ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	public void testGetLanguageNames() throws Exception {
103ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		ILanguageNames names = new ILanguageNames() {
104ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann			public String getPackageName(String vmname) {
105ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann				return null;
106ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann			}
107ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann
108ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann			public String getQualifiedClassName(String vmname) {
109ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann				return null;
110ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann			}
111ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann
112ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann			public String getClassName(String vmname, String vmsignature,
113ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann					String vmsuperclass, String[] vminterfaces) {
114ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann				return null;
115ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann			}
116ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann
117ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann			public String getMethodName(String vmclassname,
118ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann					String vmmethodname, String vmdesc, String vmsignature) {
119ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann				return null;
120ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann			}
121ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann
12255fae171b754e20062fae7cdb2d5feae8ee54017Marc R. Hoffmann			public String getQualifiedMethodName(String vmclassname,
12355fae171b754e20062fae7cdb2d5feae8ee54017Marc R. Hoffmann					String vmmethodname, String vmdesc, String vmsignature) {
12455fae171b754e20062fae7cdb2d5feae8ee54017Marc R. Hoffmann				return null;
12555fae171b754e20062fae7cdb2d5feae8ee54017Marc R. Hoffmann			}
126ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		};
127ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		formatter.setLanguageNames(names);
128ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		assertSame(names, formatter.getLanguageNames());
12982c11be3dd19fc071f87fedc5782c11ca51a0732Marc R. Hoffmann		output.close();
130ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	}
131ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann
132ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	@Test
133ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	public void testGetFooterText() throws Exception {
134ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		formatter.setFooterText("Custom Footer");
135ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		assertEquals("Custom Footer", formatter.getFooterText());
13682c11be3dd19fc071f87fedc5782c11ca51a0732Marc R. Hoffmann		output.close();
137ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	}
138ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann
139ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	@Test
140ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann	public void testGetLocale() throws Exception {
141ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		formatter.setLocale(Locale.KOREAN);
142ae8c2a836703bf06c07bb3d8a981b5743c62b2efMarc R. Hoffmann		assertEquals(Locale.KOREAN, formatter.getLocale());
14382c11be3dd19fc071f87fedc5782c11ca51a0732Marc R. Hoffmann		output.close();
14457225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann	}
14557225d5996f653cf9dd7ef95a62d8829832d219aMarc R. Hoffmann
1462103737f1b78d1ae6a9be72fe6dbf85f56b3c585Marc R. Hoffmann}
147