diff --git a/tests/util/source-maps.js b/tests/util/source-maps.js index 8a1ee227085c..695ba91f6af7 100644 --- a/tests/util/source-maps.js +++ b/tests/util/source-maps.js @@ -27,15 +27,10 @@ export function parseSourceMaps(result) { */ function annotatedMappings(map) { const smc = new SourceMapConsumer(map) - const annotations = [] - - const lineAnnotations = {} + const annotations = {} smc.eachMapping((mapping) => { - // For each generated line: - // Find the first and last columns - // And join the line/column numbers from the original source for those - lineAnnotations[mapping.generatedLine] = lineAnnotations[mapping.generatedLine] || { + let annotation = (annotations[mapping.generatedLine] = annotations[mapping.generatedLine] || { ...mapping, original: { @@ -47,39 +42,38 @@ function annotatedMappings(map) { start: [mapping.generatedLine, mapping.generatedColumn], end: [mapping.generatedLine, mapping.generatedColumn], }, - } - - let annotation = lineAnnotations[mapping.generatedLine] + }) annotation.generated.end[0] = mapping.generatedLine annotation.generated.end[1] = mapping.generatedColumn annotation.original.end[0] = mapping.originalLine annotation.original.end[1] = mapping.originalColumn - - annotations.push( - `${mapping.originalLine}:${mapping.originalColumn} -> ${mapping.generatedLine}:${mapping.generatedColumn}` - ) }) - /** - * @param {object} range - * @param {[number, number]} range.start - * @param {[number, number]} range.end - */ - function format(range) { - if (range.start[0] === range.end[0]) { - if (range.start[1] === range.end[1]) { - return `${range.start[0]}:${range.start[1]}` - } + return Object.values(annotations).map((annotation) => { + return `${formatRange(annotation.original)} -> ${formatRange(annotation.generated)}` + }) +} - return `${range.start[0]}:${range.start[1]}-${range.end[1]}` +/** + * @param {object} range + * @param {[number, number]} range.start + * @param {[number, number]} range.end + */ +function formatRange(range) { + if (range.start[0] === range.end[0]) { + // This range is on the same line + // and the columns are the same + if (range.start[1] === range.end[1]) { + return `${range.start[0]}:${range.start[1]}` } - return `${range.start[0]}:${range.start[1]}-${range.end[0]}:${range.end[1]}` + // This range is on the same line + // but the columns are different + return `${range.start[0]}:${range.start[1]}-${range.end[1]}` } - return Object.values(lineAnnotations).map((annotation) => { - return `${format(annotation.original)} -> ${format(annotation.generated)}` - }) + // This range spans multiple lines + return `${range.start[0]}:${range.start[1]}-${range.end[0]}:${range.end[1]}` }