1d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann/******************************************************************************* 2d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors 3d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * All rights reserved. This program and the accompanying materials 4d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * are made available under the terms of the Eclipse Public License v1.0 5d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * which accompanies this distribution, and is available at 6d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * http://www.eclipse.org/legal/epl-v10.html 7d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * 8d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Contributors: 9d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Marc R. Hoffmann - initial API and implementation 10d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * 11d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann *******************************************************************************/ 12d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannpackage org.jacoco.cli.internal.commands; 13d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 14d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport static org.junit.Assert.assertTrue; 15d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 16d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport java.io.File; 17d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport java.io.FileOutputStream; 18d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 19d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport org.jacoco.cli.internal.CommandTestBase; 20d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport org.jacoco.core.data.ExecutionData; 21d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport org.jacoco.core.data.ExecutionDataWriter; 22d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport org.junit.Rule; 23d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport org.junit.Test; 24d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport org.junit.rules.TemporaryFolder; 25d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 26d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann/** 27d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Unit tests for {@link Report}. 28d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 29d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannpublic class ReportTest extends CommandTestBase { 30d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 31d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Rule 32d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann public TemporaryFolder tmp = new TemporaryFolder(); 33d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 34d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Test 3594ed743f66d67ddff24ccf9b83f120d3edd1f9d2Marc R. Hoffmann public void should_print_usage_when_no_options_are_given() 3694ed743f66d67ddff24ccf9b83f120d3edd1f9d2Marc R. Hoffmann throws Exception { 37d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann execute("report"); 38d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 39d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertFailure(); 40d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertContains("Option \"-classfiles\" is required", err); 41d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertContains( 42d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann "Usage: java -jar jacococli.jar report [<execfiles> ...]", err); 43d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 44d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 45d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Test 4694ed743f66d67ddff24ccf9b83f120d3edd1f9d2Marc R. Hoffmann public void should_print_number_of_analyzed_classes() throws Exception { 47d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann execute("report", "-classfiles", getClassPath()); 48d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 49d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertOk(); 50f2c89c4f098baddf9ec689a6d839c2d8a8120b84Marc R. Hoffmann assertContains("[INFO] Writing report with 14 classes.", out); 51d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 52d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 53d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Test 5494ed743f66d67ddff24ccf9b83f120d3edd1f9d2Marc R. Hoffmann public void should_print_warning_when_exec_data_does_not_match() 5594ed743f66d67ddff24ccf9b83f120d3edd1f9d2Marc R. Hoffmann throws Exception { 56d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann File exec = new File(tmp.getRoot(), "jacoco.exec"); 57d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann final FileOutputStream execout = new FileOutputStream(exec); 58d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann ExecutionDataWriter writer = new ExecutionDataWriter(execout); 59d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann // Add probably invalid id for this test class: 60d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann writer.visitClassExecution( 61d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann new ExecutionData(0x123, getClass().getName().replace('.', '/'), 62d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann new boolean[] { true })); 63d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann execout.close(); 64d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 65d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann execute("report", exec.getAbsolutePath(), "-classfiles", 66d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann getClassPath()); 67d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 68d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertOk(); 69d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertContains("[WARN] Some classes do not match with execution data.", 70d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann out); 71d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertContains( 72d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann "[WARN] For report generation the same class files must be used as at runtime.", 73d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann out); 74d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertContains( 75d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann "[WARN] Execution data for class org/jacoco/cli/internal/commands/ReportTest does not match.", 76d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann out); 77d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 78d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 79d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Test 8094ed743f66d67ddff24ccf9b83f120d3edd1f9d2Marc R. Hoffmann public void should_create_xml_report_when_xml_option_is_provided() 81d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann throws Exception { 82d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann File xml = new File(tmp.getRoot(), "coverage.xml"); 83d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 84d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann execute("report", "-classfiles", getClassPath(), "-xml", 85d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann xml.getAbsolutePath()); 86d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 87d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertOk(); 88d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertTrue(xml.isFile()); 89d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 90d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 91d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Test 9294ed743f66d67ddff24ccf9b83f120d3edd1f9d2Marc R. Hoffmann public void should_create_csv_report_when_csv_option_is_provided() 93d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann throws Exception { 94d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann File csv = new File(tmp.getRoot(), "coverage.csv"); 95d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 96d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann execute("report", "-classfiles", getClassPath(), "-csv", 97d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann csv.getAbsolutePath()); 98d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 99d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertOk(); 100d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertTrue(csv.isFile()); 101d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 102d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 103d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Test 10494ed743f66d67ddff24ccf9b83f120d3edd1f9d2Marc R. Hoffmann public void should_create_html_report_when_html_option_is_provided() 105d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann throws Exception { 106d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann File html = new File(tmp.getRoot(), "coverage"); 107d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 108d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann execute("report", "-classfiles", getClassPath(), "-sourcefiles", 109d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann "./src", "-html", html.getAbsolutePath()); 110d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 111d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertOk(); 112d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertTrue(html.isDirectory()); 113d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertTrue(new File(html, 114d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann "org.jacoco.cli.internal.commands/ReportTest.html").isFile()); 115d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertTrue(new File(html, 116d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann "org.jacoco.cli.internal.commands/ReportTest.java.html") 117d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann .isFile()); 118d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 119d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 1201b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann @Test 1211b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann public void should_use_all_values_when_multiple_classfiles_options_are_provided() 1221b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann throws Exception { 1231b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann File html = new File(tmp.getRoot(), "coverage"); 1241b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann 1251b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann final String c1 = getClassPath() 1261b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann + "/org/jacoco/cli/internal/commands/ReportTest.class"; 1271b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann final String c2 = getClassPath() 1281b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann + "/org/jacoco/cli/internal/commands/DumpTest.class"; 1291b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann 1301b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann execute("report", "-classfiles", c1, "-classfiles", c2, "-html", 1311b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann html.getAbsolutePath()); 1321b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann 1331b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann assertOk(); 1341b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann assertTrue(html.isDirectory()); 1351b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann assertTrue(new File(html, 1361b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann "org.jacoco.cli.internal.commands/ReportTest.html").isFile()); 1371b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann assertTrue( 1381b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann new File(html, "org.jacoco.cli.internal.commands/DumpTest.html") 1391b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann .isFile()); 1401b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann } 1411b2859f2e96d7d45c9f43d5a2e3bf91ff595488cMarc R. Hoffmann 142d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann} 143