X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=scripts%2Ftransform-coverage.js;fp=scripts%2Ftransform-coverage.js;h=a492f260aec2788817b6cf1ffe0632e8fced73fa;hb=ab847f3786353185f78163b02c276760a380e80c;hp=0000000000000000000000000000000000000000;hpb=2ef8997fe939afdfd7c2c09c393a3073897633bd;p=dygraphs.git diff --git a/scripts/transform-coverage.js b/scripts/transform-coverage.js new file mode 100755 index 0000000..a492f26 --- /dev/null +++ b/scripts/transform-coverage.js @@ -0,0 +1,78 @@ +#!/usr/bin/env node +/** + * This script applies a source map to LCOV data. If you have coverage data for + * a concatenated file, plus a source map, this will output LCOV data for your + * original source files. + * + * Usage: + * + * transform-coverage.js path/to/soure.map path/to/coverage.lcov > out.lcov + */ + +// TODO: make this a command line argument +var SOURCE = 'src/'; // only report files under this directory + +var assert = require('assert'), + fs = require('fs'), + lcovParse = require('lcov-parse'), + parseDataUri = require('parse-data-uri'), + sourcemap = require('source-map'); + +var sourcemapFile = process.argv[2]; +var lcovFile = process.argv[3]; + +var sourcemapData = fs.readFileSync(sourcemapFile).toString(); +var sourcemap = new sourcemap.SourceMapConsumer(sourcemapData); + +lcovParse(lcovFile, function(err, data) { + assert(!err); + // TODO: 0 --> the correct file + var lines = data[0].lines.details; + + var fileToCov = {}; // filename -> { line num -> hits } + + lines.forEach(function(line) { + var pos = sourcemap.originalPositionFor({line: line.line, column: 0}); + if (pos == null) { + return; + } + + var filename = pos.source; + + // Test coverage of node_modules is never interesting. + if (!filename || filename.indexOf('node_modules') >= 0) { + return; + } + + // Strip paths down to the source root. + var base = filename.indexOf(SOURCE); + if (base == -1) return; + filename = filename.slice(base); + + if (!fileToCov[filename]) fileToCov[filename] = []; + fileToCov[filename][pos.line] = line.hit; + }); + + // Other LCOV fields to translate: + // FN:2454 + // FNF:465 + // FNH:410 + // FNDA:1,(anonymous_1) + // LF:4570 + // LH:4002 + // BRDA:13,1,0,1 + // BRF:2213 + // BRH:1684 + + // Convert to LCOV format + for (var filename in fileToCov) { + var cov = fileToCov[filename] + console.log('SF:' + filename); + for (var i = 0; i < cov.length; i++) { + if (cov[i] != null) { + console.log('DA:' + i + ',' + cov[i]); + } + } + console.log('end_of_record'); + } +});