blob: 87935175a4b88067fe4bef078d36e308e0c25537 [file] [log] [blame]
/*
* User: anna
* Date: 16-Nov-2007
*/
package com.intellij.coverage.info;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.rt.coverage.data.ClassData;
import com.intellij.rt.coverage.data.LineCoverage;
import com.intellij.rt.coverage.data.LineData;
import com.intellij.rt.coverage.data.ProjectData;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class CoberturaLoaderUtil {
private static final Logger LOG = Logger.getInstance("#" + CoberturaLoaderUtil.class.getName());
private CoberturaLoaderUtil() {
}
public static ProjectData load(final File sessionDataFile) {
ProjectData projectInfo = new ProjectData();
DataInputStream dataFile = null;
try {
dataFile = new DataInputStream(new FileInputStream(sessionDataFile));
int classesCount = dataFile.read();
for (int i = 0; i < classesCount; i++) {
final String classFQName = dataFile.readUTF();
dataFile.readUTF(); //sourcefilename
final ClassData classData = projectInfo.getOrCreateClassData(classFQName);
final int numberOfLines = dataFile.read();
for (int l = 0; l < numberOfLines; l++) {
final int lineNumber = dataFile.read();
final LineData lineData = null; //todo classData.getOrCreateLine(lineNumber, dataFile.readUTF() + dataFile.readUTF());
long hits = dataFile.readLong();
final int jumpsNumber = dataFile.read();
int trueHits = 0;
int falseHits = 0;
int totalHits = 0;
for (int j = 0; j < jumpsNumber; j++) {
dataFile.read(); //jump number
totalHits++;
if (dataFile.readLong() > 0) trueHits++;
totalHits++;
if (dataFile.readLong() > 0) falseHits++;
}
int defaultHitsNumber = 0;
int branchHitNumber = 0;
final int switchNumber = dataFile.read();
for (int s = 0; s < switchNumber; s++) {
dataFile.read(); //switch number
dataFile.read(); //number of keys
long defaultHits = dataFile.readLong();
if (defaultHits > 0) defaultHitsNumber++;
int coveredSwitchBranches = 0;
final int switchBranchesNumber = dataFile.read();
for (int b = 0; b < switchBranchesNumber; b++) {
final long branchHit = dataFile.readLong();
if (branchHit > 0) coveredSwitchBranches ++;
}
if (coveredSwitchBranches == switchBranchesNumber) branchHitNumber++;
}
if (hits > 0) {
if (totalHits == trueHits + falseHits) {
if (defaultHitsNumber == switchNumber && branchHitNumber == switchNumber) {
lineData.setStatus(LineCoverage.FULL);
continue;
}
}
lineData.setStatus(LineCoverage.PARTIAL);
} else {
lineData.setStatus(LineCoverage.NONE);
}
}
}
}
catch (IOException e) {
LOG.info(e);
}
finally {
if (dataFile != null) {
try {
dataFile.close();
}
catch (IOException e) {
LOG.error(e);
}
}
}
return projectInfo;
}
/*public static List<TraceInfo> loadTestLines(final File testSessionFile, ProjectInfo projectInfo) {
final List<TraceInfo> result = new ArrayList<TraceInfo>();
DataInputStream dataFile = null;
try {
dataFile = new DataInputStream(new FileInputStream(testSessionFile));
final int count = dataFile.read();
for (int t = 0; t < count; t ++) {
final String className = dataFile.readUTF();
final int lineNumber = dataFile.read();
final ClassInfo classInfo = projectInfo.getClassInfo(className);
if (classInfo != null) {
final LineInfo lineInfo = classInfo.getLineInfo(lineNumber);
if (lineInfo != null) {
result.add(new TraceInfo(classInfo, lineInfo));
}
}
}
}
catch (IOException e) {
LOG.info(e);
}
finally {
if (dataFile != null) {
try {
dataFile.close();
}
catch (IOException e) {
LOG.error(e);
}
}
}
return result;
}*/
}