/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit.coverage.reporting.pathCoverage; import java.io.*; import java.util.*; import javax.annotation.*; import mockit.coverage.*; import mockit.coverage.paths.*; public final class PathCoverageOutput { @Nonnull private final PrintWriter output; @Nonnull private final PathCoverageFormatter pathFormatter; @Nonnull private final Iterator<MethodCoverageData> nextMethod; // Helper fields: @Nullable private MethodCoverageData currentMethod; public PathCoverageOutput(@Nonnull PrintWriter output, @Nonnull Collection<MethodCoverageData> methods) { this.output = output; pathFormatter = new PathCoverageFormatter(output); nextMethod = methods.iterator(); moveToNextMethod(); } private void moveToNextMethod() { currentMethod = nextMethod.hasNext() ? nextMethod.next() : null; } public void writePathCoverageInfoIfLineStartsANewMethodOrConstructor(int lineNumber) { if (currentMethod != null && lineNumber == currentMethod.getFirstLineInBody()) { writePathCoverageInformationForMethod(currentMethod); moveToNextMethod(); } } private void writePathCoverageInformationForMethod(@Nonnull MethodCoverageData methodData) { List<Path> paths = methodData.getPaths(); if (paths.size() > 1) { writeHeaderForAllPaths(methodData); pathFormatter.writeInformationForEachPath(paths); writeFooterForAllPaths(); } } private void writeHeaderForAllPaths(@Nonnull MethodCoverageData methodData) { int coveredPaths = methodData.getCoveredPaths(); int totalPaths = methodData.getTotalPaths(); output.println(" <tr>"); output.write(" <td></td><td class='count'>"); output.print(methodData.getExecutionCount()); output.println("</td>"); output.println(" <td class='paths'>"); output.write(" <span style='cursor:default; background-color:#"); output.write(CoveragePercentage.percentageColor(coveredPaths, totalPaths)); output.write("' onclick='hidePath()'>Path coverage: "); output.print(coveredPaths); output.print('/'); output.print(totalPaths); output.println("</span>"); } private void writeFooterForAllPaths() { output.println(" </td>"); output.println(" </tr>"); } }