package coverage; import java.util.Collections; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; /** * * Data structure to represent line coverage (old CLONE) * @author Jens Meinicke * */ public class Coverage2 { private final TreeMap<String, Set<Integer>> coverage; public Coverage2() { coverage = new TreeMap<>(); } public void setLineCovered(String fileName, Integer line) { final Set<Integer> fileCoverage; if (coverage.containsKey(fileName)) { fileCoverage = coverage.get(fileName); } else { fileCoverage = new TreeSet<>(); coverage.put(fileName, fileCoverage); } if (!fileCoverage.contains(line)) { fileCoverage.add(line); } } public void setLinesCovered(String fileName, Integer from, Integer to) { final Set<Integer> fileCoverage; if (coverage.containsKey(fileName)) { fileCoverage = coverage.get(fileName); } else { fileCoverage = new TreeSet<>(); coverage.put(fileName, fileCoverage); } for (int line = from; line <= to; line++) { // if (!fileCoverage.contains(line)) { fileCoverage.add(line); // } } } public boolean isLineCovered(String file, Integer line) { if (coverage.containsKey(file)) { final Set<Integer> fileCoverage = coverage.get(file); return fileCoverage.contains(line); } return false; } public Set<String> getFiles() { return coverage.keySet(); } public Set<Integer> getCoverage(String file) { if (coverage.containsKey(file)) { return coverage.get(file); } return Collections.emptySet(); } public void clear() { coverage.clear(); } @Override public String toString() { final StringBuilder builder = new StringBuilder(); for (Entry<String, Set<Integer>> fileCoverage : coverage.entrySet()) { builder.append("FILE: "); builder.append(fileCoverage.getKey()); builder.append("\n"); int from = Integer.MIN_VALUE; int current = Integer.MIN_VALUE; for (Integer line : fileCoverage.getValue()) { if (from == Integer.MIN_VALUE) { from = line; current = line; continue; } if (line <= current + 1) { current = line; continue; } if (from == current) { builder.append(current); builder.append("\n"); } else { builder.append(from); builder.append('-'); builder.append(current); builder.append("\n"); } from = line; current = line; } if (from == current) { builder.append(current); builder.append("\n"); } else { builder.append(from); builder.append('-'); builder.append(current); builder.append("\n"); } builder.append("---------------------\n"); } return builder.toString(); } @Override public boolean equals(Object obj) { if (obj instanceof Coverage2) { Coverage2 other = (Coverage2) obj; return coverage.equals(other.coverage); } return false; } @Override public int hashCode() { return coverage.hashCode(); } }