package org.jvnet.hudson.plugins.purecoverage.parser;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import org.jvnet.hudson.plugins.purecoverage.CoverageParser;
import org.jvnet.hudson.plugins.purecoverage.domain.DirectoryCoverage;
import org.jvnet.hudson.plugins.purecoverage.domain.FileCoverage;
import org.jvnet.hudson.plugins.purecoverage.domain.FunctionCoverage;
import org.jvnet.hudson.plugins.purecoverage.domain.LineCoverage;
import org.jvnet.hudson.plugins.purecoverage.domain.ProjectCoverage;
public class PureCoverageParser implements CoverageParser {
public ProjectCoverage parse(File coverageReport) throws FileNotFoundException {
return parse(new FileReader(coverageReport));
}
public ProjectCoverage parse(Reader coverageReport) {
BufferedReader br = new BufferedReader(coverageReport);
ProjectCoverage projectCoverage = null;
DirectoryCoverage directoryCoverage = null;
FileCoverage fileCoverage = null;
try {
String line = null;
while((line = br.readLine()) != null) {
ParsingLine pLine = new ParsingLine(line);
if (pLine.startsWith("to\t")) {
LineCoverage c = pLine.coverageFromCells(3, 4);
projectCoverage = new ProjectCoverage(c);
} else if (pLine.startsWith("di\t")) {
String directoryName = pLine.stringAt(1);
LineCoverage c = pLine.coverageFromCells(4, 5);
directoryCoverage = new DirectoryCoverage(directoryName, c);
projectCoverage.addChild(directoryCoverage);
} else if (pLine.startsWith("fi\t")) {
String fileName = pLine.stringAt(1);
LineCoverage c = pLine.coverageFromCells(4, 5);
fileCoverage = new FileCoverage(fileName, c);
directoryCoverage.addChild(fileCoverage);
} else if (pLine.startsWith("fu\t")) {
String functionName = pLine.stringAt(1);
LineCoverage c = pLine.coverageFromCells(4, 5);
fileCoverage.addChild(new FunctionCoverage(functionName, c));
}
}
br.close();
} catch (IOException e) {
throw new RuntimeException("cannot parse file", e);
}
return projectCoverage;
}
}