arrange-act-assert
Version:
The lightweight "Act-Arrange-Assert" oriented testing framework
61 lines (60 loc) • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = merge;
function mergeRanges(rangeA, rangeB) {
const result = [];
const allRanges = [...rangeA, ...rangeB];
const boundaries = new Set();
for (const range of allRanges) {
boundaries.add(range.start);
boundaries.add(range.end);
}
const sortedPoints = Array.from(boundaries).sort((a, b) => a - b);
for (let i = 0; i < sortedPoints.length - 1; i++) {
const segStart = sortedPoints[i];
const segEnd = sortedPoints[i + 1];
let count = 0;
for (const range of allRanges) {
if (range.start < segEnd && range.end > segStart) {
count += range.count;
}
}
if (count > 0) {
result.push({ start: segStart, end: segEnd, count });
}
}
return result;
}
function mergeLines(linesA, linesB) {
while (linesA.length < linesB.length) {
linesA.push(linesB[linesA.length]);
}
const maxLines = Math.min(linesA.length, linesB.length);
for (let i = 0; i < maxLines; i++) {
const lineA = linesA[i];
const lineB = linesB[i];
if (lineB.length > lineA.length) {
lineA.length = lineB.length;
}
lineA.ranges = mergeRanges(lineA.ranges, lineB.ranges);
}
return linesA;
}
function merge(coverage) {
const files = new Map();
for (const entries of coverage) {
for (const entry of entries) {
const oldEntry = files.get(entry.file);
if (oldEntry) {
if (entry.error && !oldEntry.error) {
oldEntry.error = entry.error;
}
oldEntry.lines = mergeLines(oldEntry.lines, entry.lines);
}
else {
files.set(entry.file, entry);
}
}
}
return Array.from(files.values());
}