in src/main/resources/static/coverage.js [226:297]
convertResponseJsonToCoverageRanges(responseJson) {
if (!responseJson.data) {
throw new Error('Invalid coverage lines response format. Expecting ' +
'"data" property');
}
const responseData = responseJson.data;
if (!responseData.files) {
throw new Error('Invalid coverage lines response format. Expecting ' +
'"files" property');
}
const responseFiles = responseData.files;
let coverageRanges = {};
for (var i = 0; i < responseFiles.length; i++) {
const responseFile = responseFiles[i];
if (!responseFile.path || !responseFile.lines) {
throw new Error('Invalid coverage lines response format. Expecting ' +
'"path" and "lines" properties');
}
coverageRanges[responseFile.path] = new Array();
const responseLines = responseFile.lines;
responseLines.sort((a, b) => (a.line > b.line)? 1 : -1);
let startLine = -1;
let endLine = -1;
let isCovered = null;
for (var j = 0; j < responseLines.length; j++) {
const responseLine = responseLines[j];
if (!responseLine.line || responseLine.count == null) {
throw new Error('Invalid coverage lines response format. ' +
'Expecting "line" and "count" properties');
}
if (startLine != -1 &&
responseLine.line == endLine + 1 &&
isCovered == (responseLine.count > 0)) {
endLine += 1;
continue;
}
if (startLine != -1) {
coverageRanges[responseFile.path].push({
side: 'right',
type: (isCovered? 'COVERED' : 'NOT_COVERED'),
code_range: {
start_line: startLine,
end_line: endLine,
}
});
}
startLine = responseLine.line;
endLine = startLine;
isCovered = (responseLine.count > 0);
}
if (startLine != -1) {
coverageRanges[responseFile.path].push({
side: 'right',
type: (isCovered? 'COVERED' : 'NOT_COVERED'),
code_range: {
start_line: startLine,
end_line: endLine,
}
});
}
}
return coverageRanges;
}