travis-cov
Version:
Mocha/blanket coverage reporter for travis-ci.
68 lines (60 loc) • 1.88 kB
JavaScript
(typeof exports !== "undefined" ? exports : window).travisCov = (function(){
var main = {
check: function(cov,userOptions){
if (!cov){
return false;
}
var options = {
threshold: 50 //defaults to 50%
};
if (userOptions){
options.threshold = userOptions.threshold || options.threshold;
}
var totals =[];
for (var filename in cov) {
var data = cov[filename];
totals.push(this.reportFile( data,options));
}
var totalHits = 0;
var totalSloc = 0;
totals.forEach(function(elem){
totalHits += elem[0];
totalSloc += elem[1];
});
var globCoverage = (totalHits === 0 || totalSloc === 0) ?
0 : totalHits / totalSloc * 100;
console.log("Coverage: "+Math.floor(globCoverage)+"%");
if (globCoverage < options.threshold || isNaN(globCoverage)){
console.log("Code coverage below threshold: "+Math.floor(globCoverage)+ " < "+options.threshold);
if (typeof process !== "undefined"){
process.exit(1);
}
return false;
}else{
console.log("Coverage succeeded.");
}
return true;
},
reportFile: function( data,options) {
var ret = {
coverage: 0,
hits: 0,
misses: 0,
sloc: 0
};
data.source.forEach(function(line, num){
num++;
if (data[num] === 0) {
ret.misses++;
ret.sloc++;
} else if (data[num] !== undefined) {
ret.hits++;
ret.sloc++;
}
});
ret.coverage = ret.hits / ret.sloc * 100;
return [ret.hits,ret.sloc];
}
};
return main;
})();