Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 12 additions & 66 deletions lib/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,52 +2,14 @@ var fs = require('fs');
var async = require('async');
var path = require('path');
var merge = require('./merge');

function readAllFiles(filename, callback) {
fs.stat(filename, function (err, stat) {
if (err) {
return callback(err);
}
if (stat.isFile()) {
return fs.readFile(filename, function (err, data) {
if (err) {
return callback(err);
}
callback(null, [data]);
});
}

fs.readdir(filename, function (err, filenames) {
if (err) {
return callback(err);
}
filenames = filenames.filter(function (fname) { return !(/^\..*$/.test(fname)); });
filenames = filenames.map(function (fname) { return path.join(filename, fname); });
var results = [];
async.forEachSeries(
filenames,
function (filename, callback) {
readAllFiles(filename, function (err, datas) {
if (err) {
return callback(err);
}
results = results.concat(datas);
callback();
});
},
function (err) {
callback(err, results);
});
});
});
}
var fsutil = require('./fsutil');

function getFormatters(formatNameList) {
if (!(formatNameList instanceof Array)) {
formatNameList = [formatNameList];
}
return formatNameList.map(function (f) { return require('./format/' + f); });
}
};

function writeReports(data, formatters, write, callback) {
async.forEach(formatters, function (formatter, callback) {
Expand Down Expand Up @@ -117,31 +79,15 @@ exports.run = function (options, callback) {
});
process.stdin.resume();
} else {
var results = [];
async.forEachSeries(
files,
function (filename, callback) {
readAllFiles(filename, function (err, fileData) {
if (err) {
return callback(err);
}
results = results.concat(fileData);
callback();
});
},
function (err) {
if (err) {
console.error(err);
return process.exit(1);
}
results = results.map(function (buffer) {return mapper.map(buffer.toString()); });
var data = merge(results);
addJsMeterData(data, outputDir, function (err) {
if (err) {
return callback(err);
}
writeReports(data, formatters, options.write, callback);
});
});
var results = fsutil.readAllFiles(files);

results = results.map(function (buffer) {return mapper.map(buffer.toString()); });
var data = merge(results);
addJsMeterData(data, outputDir, function (err) {
if (err) {
return callback(err);
}
writeReports(data, formatters, options.write, callback);
});
}
};
12 changes: 10 additions & 2 deletions lib/covershot.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
var _ = require('underscore');
var path = require('path');
var fsutil = require('./fsutil');

exports.format = require('./format');
exports.map = require('./map');
Expand All @@ -14,7 +16,7 @@ function getReplacement(path) {
var length = replacements.length;

if (length === 0) {
return path.replace('/lib', '/lib-cov');
exports.replace('lib', 'lib-cov');
}

for (var i = 0; i < length; i++) {
Expand Down Expand Up @@ -76,7 +78,13 @@ var writeCoverage = exports.writeCoverage = function () {
mkdirp.sync(dir);
}

var json = JSON.stringify(mapper.map(coverage));
var files = fsutil.listAllFiles(_.pluck(replacements, 'replacement'))
files = _.map(files, function(file) {
var idx = file.indexOf('/') + 1;
return file.substring(idx);
})

var json = JSON.stringify(mapper.map(coverage, files));
fs.writeFileSync(filename, json);
};

Expand Down
40 changes: 40 additions & 0 deletions lib/fsutil.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
var _ = require('underscore')
var async = require('async');
var fs = require('fs');
var util = require('util');
var path = require('path');
Expand Down Expand Up @@ -92,3 +94,41 @@ exports.move = function move(src, dst, options, cb) {
fs.rename(src, dst, copyIfFailed);
});
};

exports.readAllFiles = function (fileDirs) {
return iterateThroughDirectories(fileDirs, true)
};

exports.listAllFiles = function (fileDirs) {
return iterateThroughDirectories(fileDirs, false)
}

function iterateThroughDirectories(fileDirs, shouldRead) {
var files = [];

_.each(fileDirs, function(directory) {
var results = visitFiles(directory, shouldRead);
files = files.concat(results);
})

return files;
}

function visitFiles(filename, shouldRead) {
if (fs.statSync(filename).isFile()) {
return shouldRead
? [fs.readFileSync(filename)]
: [filename];
}

var filenames = fs.readdirSync(filename);
filenames = filenames.filter(function (fname) { return !(/^\..*$/.test(fname)); });
filenames = filenames.map(function (fname) { return path.join(filename, fname); });
var results = [];

_.each(filenames, function(filename) {
results = results.concat(visitFiles(filename, shouldRead));
})

return results;
}
23 changes: 12 additions & 11 deletions lib/map/node-jscoverage.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
exports.map = function (coverageMap) {
var _ = require('underscore');

exports.map = function (coverageMap, files) {
var uncoveredSource = { 1: 0, source: ['File Not Covered'] }
var ret = {
files: [],
hits: 0,
Expand All @@ -7,15 +10,13 @@ exports.map = function (coverageMap) {
instrumentation: 'node-jscoverage'
};

for (var filename in coverageMap) {
if (coverageMap.hasOwnProperty(filename)) {
var data = coverage(filename, coverageMap[filename]);
ret.files.push(data);
ret.hits += data.hits;
ret.misses += data.misses;
ret.sloc += data.sloc;
}
}
_.each(files, function (filename) {
var data = coverage(filename, coverageMap[filename] || uncoveredSource);
ret.files.push(data);
ret.hits += data.hits;
ret.misses += data.misses;
ret.sloc += data.sloc;
})

ret.coverage = (ret.hits / ret.sloc) * 100;

Expand Down Expand Up @@ -46,7 +47,7 @@ function coverage(filename, data) {
ret.source[num] = { line: line, coverage: (data[num] === undefined ? '' : data[num]) };
});

ret.coverage = (ret.hits / ret.sloc) * 100;
ret.coverage = (ret.hits / ret.sloc) * 100 || 0;

return ret;
}
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
"optimist": "~0.3.1",
"async": "0.1.18",
"mkdirp": "~0.3.2",
"data2xml": "~0.4.0"
"data2xml": "~0.4.0",
"underscore": "1.4.3"
},
"devDependencies": {
"mocha": "~1.0.3",
Expand Down