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 0.0.2 to 1.0.0

bin/lcov-result-merger.js

155

index.js

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

var glob = require('glob'),
fs = require('fs'),
path = require('path'),
cwd = process.cwd();
var through2 = require('through2'),
File = require('vinyl');

@@ -24,4 +22,4 @@ /*

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

@@ -33,6 +31,6 @@

function BRDA (lineNumber, blockNumber, branchNumber, hits) {
this.lineNumber = lineNumber
this.blockNumber = blockNumber
this.branchNumber = branchNumber
this.hits = hits
this.lineNumber = lineNumber;
this.blockNumber = blockNumber;
this.branchNumber = branchNumber;
this.hits = hits;
}

@@ -45,4 +43,4 @@

this.filename = filename;
this.DARecords = []
this.BRDARecords = []
this.DARecords = [];
this.BRDARecords = [];
}

@@ -67,5 +65,5 @@

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

@@ -119,6 +117,8 @@ }

var numberSplit, lineNumber, hits;
if(prefix === 'DA') {
var numberSplit = prefixSplit[1].split(','),
lineNumber = parseInt(numberSplit[0], 10),
hits = parseInt(numberSplit[1], 10);
numberSplit = prefixSplit[1].split(',');
lineNumber = parseInt(numberSplit[0], 10);
hits = parseInt(numberSplit[1], 10);
var existingDA = findDA(currentCoverageFile.DARecords, lineNumber);

@@ -135,8 +135,9 @@ if(existingDA) {

if(prefix === 'BRDA') {
var numberSplit = prefixSplit[1].split(','),
lineNumber = parseInt(numberSplit[0], 10),
blockNumber = parseInt(numberSplit[1], 10),
branchNumber = parseInt(numberSplit[2], 10),
hits = parseInt(numberSplit[3], 10);
var existingBRDA = findBRDA(currentCoverageFile.BRDARecords, blockNumber, branchNumber, lineNumber);
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) {

@@ -150,4 +151,5 @@ existingBRDA.hits += hits;

}
//We could throw an error here, or, we could simply ignore it, since we're not interested.
//throw new Error('Unknown Prefix "' + prefix + '"');
// We could throw an error here, or, we could simply ignore it, since
// we're not interested.
// throw new Error('Unknown Prefix "' + prefix + '"');
}

@@ -158,75 +160,40 @@ return lcov;

/*
* Helper function to write output to either file or stdout
* Creates LCOV records for given list of files.
*/
function writer(filePath, data) {
if (filePath) {
fs.appendFileSync(filePath, data);
} else {
process.stdout.write(data);
}
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('');
}
/*
* Read in the multiple lcov files and merge them into one output
*/
function mergeFiles(files, filePath) {
var lcov = [];
for(var i = 0, l = files.length; i < l; i++) {
var file = files[i],
data = fs.readFileSync(file);
lcov = processFile(data.toString(), lcov);
}
for (var fileIndex in lcov) {
var coverageFile = lcov[fileIndex];
writer(filePath, 'SF:' + coverageFile.filename + '\n');
for (var daIndex in coverageFile.DARecords) {
var daRecord = coverageFile.DARecords[daIndex];
writer(filePath, 'DA:' + daRecord.lineNumber + ',' + daRecord.hits + '\n');
module.exports = function() {
var coverageFiles = [];
return through2.obj(function process(file, encoding, callback) {
if (file.isNull()) {
callback();
return;
}
for (var brdaIndex in coverageFile.BRDARecords) {
var brdaRecord = coverageFile.BRDARecords[brdaIndex];
writer(filePath, 'BRDA:' + brdaRecord.lineNumber + ',' + brdaRecord.blockNumber + ','
+ brdaRecord.branchNumber + ',' + brdaRecord.hits + '\n');
if (file.isStream()) {
throw new Error('Streaming not supported');
}
writer(filePath, 'end_of_record\n');
}
}
/*
This will determine if the filepath is relative or absolute.
If relative, it will return the full absolute path based on CWD.
*/
function getFilePath(outputFile) {
if (outputFile) {
if (outputFile.match("^/") == "/") {
return outputFile;
} else {
return path.join(cwd, "/", outputFile);
}
}
return null;
}
module.exports = function() {
if (process.argv.length < 3) {
console.error("");
console.error("Usage: node lcov-result-merger 'pattern' ['output file']");
console.error("EX: node lcov-result-merger 'target/**/lcov.out' 'target/lcov-merged.out'");
console.error("");
process.exit(1);
}
var files = process.argv[2];
var outputFile = process.argv[3];
var filePath = getFilePath(outputFile);
if (filePath && fs.existsSync(filePath)) {
fs.unlinkSync(filePath);
}
var options = {};
glob(files, options, function(err, files) {
if(err) {
throw new Error(err);
}
mergeFiles(files, filePath);
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": "0.0.2",
"version": "1.0.0",
"description": "Merges multiple lcov results into one",
"main": "index.js",
"files": [
"index.js",
"bin"
],
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"test": "./node_modules/.bin/gulp test"
},
"bin": {
"lcov-result-merger": "./bin/lcov-result-merger"
"lcov-result-merger": "./bin/lcov-result-merger.js"
},
"dependencies": {
"glob": "~3.2.1"
"through2": "^0.5.1",
"vinyl": "^0.2.3",
"vinyl-fs": "^0.3.3"
},

@@ -30,6 +36,16 @@ "repository": {

"contributors": [
"M. Adam Kendall <akendall@devis.com>"
"M. Adam Kendall <akendall@devis.com>",
"Jussi Kalliokoski <jussi.kalliokoski@gmail.com>"
],
"license": "MIT",
"readmeFilename": "README.md"
"readmeFilename": "README.md",
"devDependencies": {
"chai": "^1.9.1",
"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"
}
}
# LCOV Result Merger
[![Build Status](https://travis-ci.org/mweibel/lcov-result-merger.png)](https://travis-ci.org/mweibel/lcov-result-merger)

@@ -3,0 +4,0 @@ When you have multiple test suites for the same application you still want to

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