org.jacoco.report.IReportVisitor Java Examples

The following examples show how to use org.jacoco.report.IReportVisitor. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ReproGuidance.java    From JQF with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void jacocoCheckpoint(File classFile, File csvDir) {
    int idx = nextFileIdx;
    csvDir.mkdirs();
    try {
        // Get exec data by dynamically calling RT.getAgent().getExecutionData()
        Class RT = Class.forName("org.jacoco.agent.rt.RT");
        Method getAgent = RT.getMethod("getAgent");
        Object agent = getAgent.invoke(null);
        Method dump = agent.getClass().getMethod("getExecutionData", boolean.class);
        byte[] execData = (byte[]) dump.invoke(agent, false);

        // Analyze exec data
        ExecFileLoader loader = new ExecFileLoader();
        loader.load(new ByteArrayInputStream(execData));
        final CoverageBuilder builder = new CoverageBuilder();
        Analyzer analyzer = new Analyzer(loader.getExecutionDataStore(), builder);
        analyzer.analyzeAll(classFile);

        // Generate CSV
        File csv = new File(csvDir, String.format("cov-%05d.csv", idx));
        try (FileOutputStream out = new FileOutputStream(csv)) {
            IReportVisitor coverageVisitor = new CSVFormatter().createVisitor(out);
            coverageVisitor.visitBundle(builder.getBundle("JQF"), null);
            coverageVisitor.visitEnd();
            out.flush();
        }


    } catch (Exception e) {
        System.err.println(e);
    }
}
 
Example #2
Source File: JacocoCoverageRunner.java    From bazel with Apache License 2.0 5 votes vote down vote up
@VisibleForTesting
void createReport(
    final IBundleCoverage bundleCoverage, final Map<String, BranchCoverageDetail> branchDetails)
    throws IOException {
  JacocoLCOVFormatter formatter = new JacocoLCOVFormatter(createPathsSet());
  final IReportVisitor visitor = formatter.createVisitor(reportFile, branchDetails);

  // Initialize the report with all of the execution and session information. At this point the
  // report doesn't know about the structure of the report being created.
  visitor.visitInfo(
      execFileLoader.getSessionInfoStore().getInfos(),
      execFileLoader.getExecutionDataStore().getContents());

  // Populate the report structure with the bundle coverage information.
  // Call visitGroup if you need groups in your report.

  // Note the API requires a sourceFileLocator because the HTML and XML formatters display a page
  // of code annotated with coverage information. Having the source files is not actually needed
  // for generating the lcov report...
  visitor.visitBundle(
      bundleCoverage,
      new ISourceFileLocator() {

        @Override
        public Reader getSourceFile(String packageName, String fileName) throws IOException {
          return null;
        }

        @Override
        public int getTabWidth() {
          return 0;
        }
      });

  // Signal end of structure information to allow report to write all information out
  visitor.visitEnd();
}
 
Example #3
Source File: JaCoCoReportAnalyzer.java    From tikione-jacocoverage with MIT License 5 votes vote down vote up
/**
 * Load a JaCoCo binary report and convert it to HTML.
 * <br/>See <a href="http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java">report generator example code</a>.
 *
 * @param jacocoexec the JaCoCo binary report.
 * @param reportdir the folder to store HTML report.
 * @param prjClassesDir the directory containing project's compiled classes.
 * @param prjSourcesDir the directory containing project's Java source files.
 * @param projectName the project's name.
 * @return the absolute path of HTML report's {@code index.html} file.
 * @throws FileNotFoundException if the JaCoCo binary report, compiled classes or Java sources files directory can't be found.
 * @throws IOException if an I/O error occurs.
 */
public static String toHtmlReport(File jacocoexec, File reportdir, File prjClassesDir, File prjSourcesDir, String projectName)
        throws FileNotFoundException,
               IOException {
    // Load the JaCoCo binary report.
    FileInputStream fis = new FileInputStream(jacocoexec);
    ExecutionDataStore executionDataStore = new ExecutionDataStore();
    SessionInfoStore sessionInfoStore = new SessionInfoStore();
    try {
        ExecutionDataReader executionDataReader = new ExecutionDataReader(fis);
        executionDataReader.setExecutionDataVisitor(executionDataStore);
        executionDataReader.setSessionInfoVisitor(sessionInfoStore);
        while (executionDataReader.read()) {
        }
    } finally {
        fis.close();
    }

    // Convert the binary report to HTML.
    CoverageBuilder coverageBuilder = new CoverageBuilder();
    Analyzer analyzer = new Analyzer(executionDataStore, coverageBuilder);
    analyzer.analyzeAll(prjClassesDir);
    IBundleCoverage bundleCoverage = coverageBuilder.getBundle("JaCoCoverage analysis of project \"" + projectName
            + "\" (powered by JaCoCo from EclEmma)");
    HTMLFormatter htmlformatter = new HTMLFormatter();
    IReportVisitor visitor = htmlformatter.createVisitor(new FileMultiReportOutput(reportdir));
    visitor.visitInfo(sessionInfoStore.getInfos(), executionDataStore.getContents());
    visitor.visitBundle(bundleCoverage, new DirectorySourceFileLocator(prjSourcesDir, DEF_ENCODING, 4));
    visitor.visitEnd();
    return new File(reportdir, "index.html").getAbsolutePath();
}
 
Example #4
Source File: JaCoCoReportAnalyzer.java    From tikione-jacocoverage with MIT License 5 votes vote down vote up
/**
 * Load a JaCoCo binary report and convert it to XML.
 * <br/>See <a href="http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java">report generator example code</a>.
 *
 * @param jacocoexec the JaCoCo binary report.
 * @param xmlreport the XML file to generate.
 * @param prjClassesDir the directory containing project's compiled classes.
 * @param prjSourcesDir the directory containing project's Java source files.
 * @throws FileNotFoundException if the JaCoCo binary report, compiled classes or Java sources files directory can't be found.
 * @throws IOException if an I/O error occurs.
 */
public static void toXmlReport(File jacocoexec, File xmlreport, File prjClassesDir, File prjSourcesDir)
        throws FileNotFoundException,
               IOException {
    // Load the JaCoCo binary report.
    FileInputStream fis = new FileInputStream(jacocoexec);
    ExecutionDataStore executionDataStore = new ExecutionDataStore();
    SessionInfoStore sessionInfoStore = new SessionInfoStore();
    try {
        ExecutionDataReader executionDataReader = new ExecutionDataReader(fis);
        executionDataReader.setExecutionDataVisitor(executionDataStore);
        executionDataReader.setSessionInfoVisitor(sessionInfoStore);
        while (executionDataReader.read()) {
        }
    } finally {
        fis.close();
    }

    // Convert the binary report to XML.
    CoverageBuilder coverageBuilder = new CoverageBuilder();
    Analyzer analyzer = new Analyzer(executionDataStore, coverageBuilder);
    analyzer.analyzeAll(prjClassesDir);
    IBundleCoverage bundleCoverage = coverageBuilder.getBundle("JaCoCoverage analysis (powered by JaCoCo from EclEmma)");
    XMLFormatter xmlformatter = new XMLFormatter();
    xmlformatter.setOutputEncoding(DEF_ENCODING);
    IReportVisitor visitor = xmlformatter.createVisitor(new FileOutputStream(xmlreport));
    visitor.visitInfo(sessionInfoStore.getInfos(), executionDataStore.getContents());
    visitor.visitBundle(bundleCoverage, new DirectorySourceFileLocator(prjSourcesDir, DEF_ENCODING, 4));
    visitor.visitEnd();
}
 
Example #5
Source File: ReportGenerator.java    From buck with Apache License 2.0 4 votes vote down vote up
private void createReport(IBundleCoverage bundleCoverage) throws IOException {
  Set<String> unknownFormats = Sets.difference(reportFormats, KNOWN_REPORT_FORMATS);
  if (!unknownFormats.isEmpty()) {
    throw new RuntimeException("Unable to parse formats: " + String.join(",", reportFormats));
  }

  // Create a concrete report visitors based on some supplied
  // configuration. In this case we use the defaults
  List<IReportVisitor> visitors = new ArrayList<>();
  if (reportFormats.contains("csv")) {
    reportDirectory.mkdirs();
    CSVFormatter csvFormatter = new CSVFormatter();
    visitors.add(
        csvFormatter.createVisitor(
            new FileOutputStream(new File(reportDirectory, "coverage.csv"))));
  }

  if (reportFormats.contains("html")) {
    HTMLFormatter htmlFormatter = new HTMLFormatter();
    visitors.add(htmlFormatter.createVisitor(new FileMultiReportOutput(reportDirectory)));
  }

  if (reportFormats.contains("xml")) {
    reportDirectory.mkdirs();
    XMLFormatter xmlFormatter = new XMLFormatter();
    visitors.add(
        xmlFormatter.createVisitor(
            new FileOutputStream(new File(reportDirectory, "coverage.xml"))));
  }

  IReportVisitor visitor = new MultiReportVisitor(visitors);
  // Initialize the report with all of the execution and session
  // information. At this point the report doesn't know about the
  // structure of the report being created
  visitor.visitInfo(
      execFileLoader.getSessionInfoStore().getInfos(),
      execFileLoader.getExecutionDataStore().getContents());

  // Populate the report structure with the bundle coverage information.
  // Call visitGroup if you need groups in your report.
  visitor.visitBundle(bundleCoverage, createSourceFileLocator());

  // Signal end of structure information to allow report to write all
  // information out
  visitor.visitEnd();
}