blob: 4a941ccfc6ee0064988607a275203fb616c0b2f5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
package org.jacoco.cli.internal.commands;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileOutputStream;
import org.jacoco.cli.internal.CommandTestBase;
import org.jacoco.core.data.ExecutionData;
import org.jacoco.core.data.ExecutionDataWriter;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
/**
* Unit tests for {@link Report}.
*/
public class ReportTest extends CommandTestBase {
@Rule
public TemporaryFolder tmp = new TemporaryFolder();
@Test
public void should_print_usage_when_no_options_are_given()
throws Exception {
execute("report");
assertFailure();
assertContains("Option \"--classfiles\" is required", err);
assertContains(
"Usage: java -jar jacococli.jar report [<execfiles> ...]", err);
}
@Test
public void should_print_warning_when_no_exec_files_are_provided()
throws Exception {
execute("report", "--classfiles", getClassPath());
assertOk();
assertContains("[WARN] No execution data files provided.", out);
}
@Test
public void should_print_number_of_analyzed_classes() throws Exception {
execute("report", "--classfiles", getClassPath());
assertOk();
assertContains("[INFO] Analyzing 14 classes.", out);
}
@Test
public void should_print_warning_when_exec_data_does_not_match()
throws Exception {
File exec = new File(tmp.getRoot(), "jacoco.exec");
final FileOutputStream execout = new FileOutputStream(exec);
ExecutionDataWriter writer = new ExecutionDataWriter(execout);
// Add probably invalid id for this test class:
writer.visitClassExecution(
new ExecutionData(0x123, getClass().getName().replace('.', '/'),
new boolean[] { true }));
execout.close();
execute("report", exec.getAbsolutePath(), "--classfiles",
getClassPath());
assertOk();
assertContains("[WARN] Some classes do not match with execution data.",
out);
assertContains(
"[WARN] For report generation the same class files must be used as at runtime.",
out);
assertContains(
"[WARN] Execution data for class org/jacoco/cli/internal/commands/ReportTest does not match.",
out);
}
@Test
public void should_create_xml_report_when_xml_option_is_provided()
throws Exception {
File xml = new File(tmp.getRoot(), "coverage.xml");
execute("report", "--classfiles", getClassPath(), "--xml",
xml.getAbsolutePath());
assertOk();
assertTrue(xml.isFile());
}
@Test
public void should_create_csv_report_when_csv_option_is_provided()
throws Exception {
File csv = new File(tmp.getRoot(), "coverage.csv");
execute("report", "--classfiles", getClassPath(), "--csv",
csv.getAbsolutePath());
assertOk();
assertTrue(csv.isFile());
}
@Test
public void should_create_html_report_when_html_option_is_provided()
throws Exception {
File html = new File(tmp.getRoot(), "coverage");
execute("report", "--classfiles", getClassPath(), "--sourcefiles",
"./src", "--html", html.getAbsolutePath());
assertOk();
assertTrue(html.isDirectory());
assertTrue(new File(html,
"org.jacoco.cli.internal.commands/ReportTest.html").isFile());
assertTrue(new File(html,
"org.jacoco.cli.internal.commands/ReportTest.java.html")
.isFile());
}
@Test
public void should_use_all_values_when_multiple_classfiles_options_are_provided()
throws Exception {
File html = new File(tmp.getRoot(), "coverage");
final String c1 = getClassPath()
+ "/org/jacoco/cli/internal/commands/ReportTest.class";
final String c2 = getClassPath()
+ "/org/jacoco/cli/internal/commands/DumpTest.class";
execute("report", "--classfiles", c1, "--classfiles", c2, "--html",
html.getAbsolutePath());
assertOk();
assertTrue(html.isDirectory());
assertTrue(new File(html,
"org.jacoco.cli.internal.commands/ReportTest.html").isFile());
assertTrue(
new File(html, "org.jacoco.cli.internal.commands/DumpTest.html")
.isFile());
}
}