Skip to content
Permalink
0.0.4
Go to file
 
 
Cannot retrieve contributors at this time
86 lines (77 sloc) 2.38 KB
/*!
* jscover - lib/jscover.js
* Copyright(c) 2012 fengmk2 <fengmk2@gmail.com>
* MIT Licensed
*/
"use strict";
/**
* Module dependencies.
*/
var exec = require('child_process').exec;
var path = require('path');
var ndir = require('ndir');
var fs = require('fs');
var root = path.dirname(__dirname);
var JSCoverPath = path.join(root, 'bin', 'JSCover-all.jar');
var JSCoverCommand = 'java -Dfile.encoding=UTF-8 -jar ' + JSCoverPath + ' -fs';
module.exports = function jscover(source, target, options, callback) {
options = options || [];
var tmpTarget = path.join(path.dirname(target), '__cov__', path.basename(target));
var cmd = JSCoverCommand;
if (options && options.length > 0) {
cmd += ' ' + options.join(' ');
}
cmd += ' --exclude=' + tmpTarget + ' --exclude=' + target;
cmd += ' ' + source + ' ' + tmpTarget;
var child = exec(cmd, function (err, stdout, stderr) {
var output = '';
if (stdout) {
output += stdout;
}
if (stderr) {
output += stderr;
if (!err) {
err = new Error(stderr);
err.name = 'JSCoverError';
}
}
if (err) {
return callback(err, output);
}
var success = !stdout && !stderr;
if (!success) {
return callback(null, output);
}
var jscoverageFiles = path.join(target, 'jscoverage*');
var mvCommand = 'rm -rf ' + target +
' && mv ' + tmpTarget + ' ' + target +
' && rm -rf ' + path.dirname(tmpTarget) + ' ' + jscoverageFiles + ' ' + path.join(target, '__cov__');
exec(mvCommand, function (err) {
if (err) {
return callback(err);
}
// add pedding scripts
var pedding =
"/* automatically generated by jscover - do not edit */\n\
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};\n";
ndir.walk(target, function onDir(dirpath, files) {
for (var i = 0; i < files.length; i++) {
var info = files[i];
if (info[1].isFile()) {
var filepath = info[0];
if (path.extname(filepath).toLowerCase() !== '.js') {
continue;
}
var content = fs.readFileSync(filepath, 'utf8');
fs.writeFileSync(filepath, pedding + content);
}
}
}, function end() {
callback();
}, function error(err, errPath) {
console.error('%s error: %s', errPath, err);
callback(err);
});
});
});
};
You can’t perform that action at this time.