UNPKG

coveraje

Version:

a simple javascript code coverage tool with browser frontend

113 lines (92 loc) 3.1 kB
/* coveraje - a simple javascript code coverage tool. default report format ------------ generates a condensed list of non-covered lines (per file) including source code and (first) occurence example output is { "file 1": [ { source: "source of line 1", line: 2, // the line number (starting at 1) pos: 4, // the position of the first uncovered part of the line (starting at 1) parts: 1 // part count (how many parts are uncovered in this line) }, // ... ] } Copyright (c) 2012 Wolfgang Kluge (klugesoftware.de, gehirnwindung.de) */ (function () { "use strict"; var reportHelper = require("../report").helper; var ret = {}; var linePosData = {}; function file_data(data, filename, file, options, isCovered) { var source = file.code, skippedLines = file.skippedLines; var lpd = linePosData[filename]; if (lpd == null) { lpd = linePosData[filename] = {}; } var uncoveredData = data.filter(function (val) { return !isCovered(val); }).map(function (val) { var li = reportHelper.lineInfoFromPosition(val.s, source); var lip = lpd[li.line]; var ret = { line: 1 + skippedLines + li.line, pos: 1 + li.pos, source: li.source, parts: 1 }; if (lip == null) { lpd[li.line] = ret; return ret; } else if (lip.pos > ret.pos) { lip.pos = ret.pos; } lip.parts = lip.parts + 1; return null; }).filter(function (val) { return val != null; }).sort(function (a, b) { if (a.line > b.line) { return 1; } else if (a.line < b.line) { return -1; } return 0; }); if (ret[filename] == null) { ret[filename] = uncoveredData; } else { ret[filename] = ret[filename] .concat(uncoveredData) .sort(function (a, b) { if (a.line > b.line) { return 1; } else if (a.line < b.line) { return -1; } return 0; }); } } function getResult(options) { linePosData.length = 0; return ret; } if (typeof exports !== "undefined" && exports) { exports.format = { file: { data: { visits: file_data, branches: file_data // "if"/"switch" statement is marked as uncovered } } }; exports.result = getResult; } }());