mockit.coverage.reporting.sourceFiles.FileCoverageReport Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jmockit Show documentation
Show all versions of jmockit Show documentation
JMockit is a Java toolkit for automated developer testing.
It contains mocking/faking APIs and a code coverage tool, supporting both JUnit and TestNG.
The mocking APIs allow all kinds of Java code, without testability restrictions, to be tested
in isolation from selected dependencies.
/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.coverage.reporting.sourceFiles;
import java.io.*;
import java.util.*;
import javax.annotation.*;
import mockit.coverage.*;
import mockit.coverage.data.*;
import mockit.coverage.dataItems.*;
import mockit.coverage.paths.*;
import mockit.coverage.reporting.*;
import mockit.coverage.reporting.dataCoverage.*;
import mockit.coverage.reporting.lineCoverage.*;
import mockit.coverage.reporting.parsing.*;
import mockit.coverage.reporting.pathCoverage.*;
/**
* Generates an HTML page containing line-by-line coverage information for a single source file.
*/
public final class FileCoverageReport
{
@Nonnull private final InputFile inputFile;
@Nonnull private final OutputFile output;
@Nonnull private final FileParser fileParser;
@Nonnull private final NeutralOutput neutralOutput;
@Nonnull private final LineCoverageOutput lineCoverage;
@Nullable private final PathCoverageOutput pathCoverage;
@Nullable private final DataCoverageOutput dataCoverage;
public FileCoverageReport(
@Nonnull String outputDir, @Nonnull InputFile inputFile, @Nonnull FileCoverageData fileData,
boolean withCallPoints)
throws IOException
{
this.inputFile = inputFile;
output = new OutputFile(outputDir, inputFile.filePath);
fileParser = new FileParser();
neutralOutput = new NeutralOutput(output);
lineCoverage = new LineCoverageOutput(output, fileData.getLineCoverageData(), withCallPoints);
pathCoverage = createPathCoverageOutput(fileData);
dataCoverage = createDataCoverageOutput(fileData);
}
@Nullable
private PathCoverageOutput createPathCoverageOutput(@Nonnull FileCoverageData fileData)
{
if (Metrics.PathCoverage.active) {
Collection methods = fileData.getMethods();
return methods.isEmpty() ? null : new PathCoverageOutput(output, methods);
}
return null;
}
@Nullable
private static DataCoverageOutput createDataCoverageOutput(@Nonnull FileCoverageData fileData)
{
if (Metrics.DataCoverage.active) {
PerFileDataCoverage dataCoverageInfo = fileData.dataCoverageInfo;
return dataCoverageInfo.hasFields() ? new DataCoverageOutput(dataCoverageInfo) : null;
}
return null;
}
public void generate() throws IOException
{
try {
writeHeader();
writeFormattedSourceLines();
writeFooter();
}
finally {
inputFile.close();
output.close();
}
}
private void writeHeader()
{
output.writeCommonHeader(inputFile.getSourceFileName());
output.println(" ");
output.println(" " + inputFile.getSourceFilePath() + " ");
}
private void writeFormattedSourceLines() throws IOException
{
LineParser lineParser = fileParser.lineParser;
String line;
while ((line = inputFile.nextLine()) != null) {
boolean lineWithCodeElements = fileParser.parseCurrentLine(line);
if (lineWithCodeElements) {
if (dataCoverage != null) {
dataCoverage.writeCoverageInfoIfLineStartsANewFieldDeclaration(fileParser);
}
if (pathCoverage != null) {
pathCoverage.writePathCoverageInfoIfLineStartsANewMethodOrConstructor(lineParser.getNumber());
}
}
if (!neutralOutput.writeLineWithoutCoverageInfo(lineParser)) {
writeOpeningOfNewLine(lineParser.getNumber());
if (!lineCoverage.writeLineWithCoverageInfo(lineParser)) {
writeLineWithoutCoverageInfo(lineParser.getInitialElement());
}
output.println(" ");
}
}
}
private void writeOpeningOfNewLine(int lineNumber)
{
output.println(" ");
output.write(" ");
output.print(lineNumber);
output.write(" ");
}
private void writeLineWithoutCoverageInfo(@Nonnull LineElement initialElement)
{
output.println(" ");
output.write(" " : "prettyprint'>");
output.write(initialElement.toString());
output.println("
");
}
private void writeFooter()
{
output.println("
");
output.writeCommonFooter();
}
}