Socket
Socket
Sign inDemoInstall

lcov-result-merger

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lcov-result-merger - npm Package Compare versions

Comparing version 1.0.0 to 1.0.1

269

index.js

@@ -14,4 +14,4 @@ /**

var through2 = require('through2'),
File = require('vinyl');
var through2 = require('through2')
, File = require('vinyl');

@@ -21,5 +21,5 @@ /*

*/
function DA (lineNumber, hits) {
this.lineNumber = lineNumber;
this.hits = hits;
function DA(lineNumber, hits) {
this.lineNumber = lineNumber;
this.hits = hits;
}

@@ -30,7 +30,7 @@

*/
function BRDA (lineNumber, blockNumber, branchNumber, hits) {
this.lineNumber = lineNumber;
this.blockNumber = blockNumber;
this.branchNumber = branchNumber;
this.hits = hits;
function BRDA(lineNumber, blockNumber, branchNumber, hits) {
this.lineNumber = lineNumber;
this.blockNumber = blockNumber;
this.branchNumber = branchNumber;
this.hits = hits; // Always a string. See below.
}

@@ -42,5 +42,5 @@

function coverageFile(filename) {
this.filename = filename;
this.DARecords = [];
this.BRDARecords = [];
this.filename = filename;
this.DARecords = [];
this.BRDARecords = [];
}

@@ -52,8 +52,8 @@

function findDA(source, lineNumber) {
for (var i=0; i < source.length; i++) {
if (source[i].lineNumber === lineNumber) {
return source[i];
}
}
return null;
for (var i=0; i < source.length; i++) {
if (source[i].lineNumber === lineNumber) {
return source[i];
}
}
return null;
}

@@ -65,10 +65,10 @@

function findBRDA(source, blockNumber, branchNumber, lineNumber) {
for (var i=0; i < source.length; i++) {
if (source[i].blockNumber === blockNumber &&
source[i].branchNumber === branchNumber &&
source[i].lineNumber === lineNumber) {
return source[i];
}
}
return null;
for (var i=0; i < source.length; i++) {
if (source[i].blockNumber === blockNumber &&
source[i].branchNumber === branchNumber &&
source[i].lineNumber === lineNumber) {
return source[i];
}
}
return null;
}

@@ -80,8 +80,8 @@

function findCoverageFile(source, filename) {
for (var i=0; i < source.length; i++) {
if (source[i].filename === filename) {
return source[i];
}
}
return null;
for (var i=0; i < source.length; i++) {
if (source[i].filename === filename) {
return source[i];
}
}
return null;
}

@@ -93,65 +93,90 @@

function processFile(data, lcov) {
var lines = data.split('\n'),
currentFileName = '',
currentCoverageFile = null;
var lines = data.split('\n'),
currentFileName = '',
currentCoverageFile = null;
for(var i = 0, l = lines.length; i < l; i++) {
var line = lines[i];
if(line === 'end_of_record' || line === '') {
currentFileName = '';
currentCoverageFile = null;
continue;
}
function _numericHits(hits) {
if (hits === '-'){
return 0;
}
return parseInt(hits, 10);
}
var prefixSplit = line.split(':'),
prefix = prefixSplit[0];
function _mergedBRDAHits(existingBRDAHits, newBRDAHits) {
if(prefix === 'SF') {
currentFileName = prefixSplit[1];
currentCoverageFile = findCoverageFile(lcov, currentFileName);
if(currentCoverageFile) {
continue;
}
currentCoverageFile = new coverageFile(currentFileName);
lcov.push(currentCoverageFile);
continue;
}
// If we've never executed the branch code path in an existing coverage
// record and we've never executed it here either, then keep it as '-'
// (eg, never executed). If either of them is a number, then
// use the number value.
if(existingBRDA.hits !== '-' || hits !== '-') {
return _numericHits(existingBRDAHits) + _numericHits(newBRDAHits);
}
var numberSplit, lineNumber, hits;
return '-';
}
if(prefix === 'DA') {
numberSplit = prefixSplit[1].split(',');
lineNumber = parseInt(numberSplit[0], 10);
hits = parseInt(numberSplit[1], 10);
var existingDA = findDA(currentCoverageFile.DARecords, lineNumber);
if(existingDA) {
existingDA.hits += hits;
continue;
}
var newDA = new DA(lineNumber, hits);
currentCoverageFile.DARecords.push(newDA);
continue;
}
for(var i = 0, l = lines.length; i < l; i++) {
var line = lines[i];
if(line === 'end_of_record' || line === '') {
currentFileName = '';
currentCoverageFile = null;
continue;
}
if(prefix === 'BRDA') {
numberSplit = prefixSplit[1].split(',');
lineNumber = parseInt(numberSplit[0], 10);
var blockNumber = parseInt(numberSplit[1], 10),
branchNumber = parseInt(numberSplit[2], 10);
hits = parseInt(numberSplit[3], 10);
var existingBRDA = findBRDA(currentCoverageFile.BRDARecords,
blockNumber, branchNumber, lineNumber);
if(existingBRDA) {
existingBRDA.hits += hits;
continue;
}
var newBRDA = new BRDA(lineNumber, blockNumber, branchNumber, hits);
currentCoverageFile.BRDARecords.push(newBRDA);
continue;
}
// We could throw an error here, or, we could simply ignore it, since
// we're not interested.
// throw new Error('Unknown Prefix "' + prefix + '"');
}
return lcov;
var prefixSplit = line.split(':'),
prefix = prefixSplit[0];
if(prefix === 'SF') {
currentFileName = prefixSplit[1];
currentCoverageFile = findCoverageFile(lcov, currentFileName);
if(currentCoverageFile) {
continue;
}
currentCoverageFile = new coverageFile(currentFileName);
lcov.push(currentCoverageFile);
continue;
}
var numberSplit, lineNumber, hits;
if(prefix === 'DA') {
numberSplit = prefixSplit[1].split(',');
lineNumber = parseInt(numberSplit[0], 10);
hits = parseInt(numberSplit[1], 10);
var existingDA = findDA(currentCoverageFile.DARecords, lineNumber);
if(existingDA) {
existingDA.hits += hits;
continue;
}
var newDA = new DA(lineNumber, hits);
currentCoverageFile.DARecords.push(newDA);
continue;
}
if(prefix === 'BRDA') {
numberSplit = prefixSplit[1].split(',');
lineNumber = parseInt(numberSplit[0], 10);
var blockNumber = parseInt(numberSplit[1], 10),
branchNumber = parseInt(numberSplit[2], 10);
var existingBRDA = findBRDA(currentCoverageFile.BRDARecords,
blockNumber, branchNumber, lineNumber);
// Special case, hits might be a '-'. This means that the code block
// where the branch was contained was never executed at all (as opposed
// to the code being executed, but the branch not being taken). Keep
// it as a string and let _mergedBRDAHits work it out.
hits = numberSplit[3];
if (existingBRDA) {
existingBRDA.hits = _mergedBRDAHits(existingBRDA.hits, hits);
continue;
}
var newBRDA = new BRDA(lineNumber, blockNumber, branchNumber, hits);
currentCoverageFile.BRDARecords.push(newBRDA);
continue;
}
// We could throw an error here, or, we could simply ignore it, since
// we're not interested.
// throw new Error('Unknown Prefix "' + prefix + '"');
}
return lcov;
}

@@ -163,37 +188,37 @@

function createRecords(coverageFiles) {
return coverageFiles.map(function(coverageFile) {
var header = 'SF:' + coverageFile.filename + '\n';
var footer = 'end_of_record\n';
var body = coverageFile.DARecords.map(function(daRecord) {
return 'DA:' + daRecord.lineNumber + ',' +
daRecord.hits + '\n';
}).join('') + coverageFile.BRDARecords.map(function(brdaRecord) {
return 'BRDA:' + brdaRecord.lineNumber + ',' +
brdaRecord.blockNumber + ',' + brdaRecord.branchNumber + ',' +
brdaRecord.hits + '\n';
}).join('');
return header + body + footer;
}).join('');
return coverageFiles.map(function(coverageFile) {
var header = 'SF:' + coverageFile.filename + '\n';
var footer = 'end_of_record\n';
var body = coverageFile.DARecords.map(function(daRecord) {
return 'DA:' + daRecord.lineNumber + ',' +
daRecord.hits + '\n';
}).join('') + coverageFile.BRDARecords.map(function(brdaRecord) {
return 'BRDA:' + brdaRecord.lineNumber + ',' +
brdaRecord.blockNumber + ',' + brdaRecord.branchNumber + ',' +
brdaRecord.hits + '\n';
}).join('');
return header + body + footer;
}).join('');
}
module.exports = function() {
var coverageFiles = [];
return through2.obj(function process(file, encoding, callback) {
if (file.isNull()) {
callback();
return;
}
if (file.isStream()) {
throw new Error('Streaming not supported');
}
coverageFiles = processFile(file.contents.toString(), coverageFiles);
callback();
}, function flush() {
var file = new File({
path: 'lcov.info',
contents: new Buffer(createRecords(coverageFiles))
});
this.push(file);
this.emit('end');
});
var coverageFiles = [];
return through2.obj(function process(file, encoding, callback) {
if (file.isNull()) {
callback();
return;
}
if (file.isStream()) {
throw new Error('Streaming not supported');
}
coverageFiles = processFile(file.contents.toString(), coverageFiles);
callback();
}, function flush() {
var file = new File({
path: 'lcov.info',
contents: new Buffer(createRecords(coverageFiles))
});
this.push(file);
this.emit('end');
});
};
{
"name": "lcov-result-merger",
"version": "1.0.0",
"version": "1.0.1",
"description": "Merges multiple lcov results into one",

@@ -17,5 +17,5 @@ "main": "index.js",

"dependencies": {
"through2": "^0.5.1",
"vinyl": "^0.2.3",
"vinyl-fs": "^0.3.3"
"through2": "^0.6.3",
"vinyl": "^0.4.6",
"vinyl-fs": "^0.3.13"
},

@@ -43,10 +43,10 @@ "repository": {

"devDependencies": {
"chai": "^1.9.1",
"chai": "^1.10.0",
"chai-gulp-helpers": "^0.0.3",
"gulp": "^3.8.3",
"gulp-istanbul": "^0.2.0",
"gulp-jshint": "^1.6.3",
"gulp-mocha": "^0.4.1",
"jshint": "~2.1.11"
"gulp": "^3.8.10",
"gulp-istanbul": "^0.5.0",
"gulp-jshint": "^1.9.0",
"gulp-mocha": "^2.0.0",
"jshint": "^2.5.10"
}
}

@@ -18,3 +18,3 @@ # LCOV Result Merger

1. Generate LCOV Code Coverage into different files, e.g. `build/coverage/coverage_X.log`
2. Run `./node_modules/bin/lcov-result-merger 'build/coverage/coverage_*.log'`
2. Run `./node_modules/.bin/lcov-result-merger 'build/coverage/coverage_*.log'`
3. Use the stdout to pipe it to e.g. [Coveralls](http://coveralls.io)

@@ -25,4 +25,4 @@ 4. Done.

1. Generate LCOV Code Coverage into different files, e.g. `build/coverage/coverage_X.log`
2. Run `./node_modules/bin/lcov-result-merger 'build/coverage/coverage_*.log' 'target/coverage/coverage_merged.log'`
2. Run `./node_modules/.bin/lcov-result-merger 'build/coverage/coverage_*.log' 'target/coverage/coverage_merged.log'`
3. Done. Enjoy your merged file.
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc