UNPKG

arrange-act-assert

Version:

The lightweight "Act-Arrange-Assert" oriented testing framework

61 lines (60 loc) 1.93 kB
"use strict"; 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()); }