diff options
| -rw-r--r-- | lib/getOptions.js | 14 | ||||
| -rw-r--r-- | lib/logger.js | 3 | ||||
| -rw-r--r-- | lib/sendToCoveralls.js | 18 | ||||
| -rw-r--r-- | test/sendToCoveralls.js | 25 |
4 files changed, 45 insertions, 15 deletions
diff --git a/lib/getOptions.js b/lib/getOptions.js index 144d0ad..78f1bf3 100644 --- a/lib/getOptions.js +++ b/lib/getOptions.js @@ -129,15 +129,11 @@ var getOptions = function(cb, _userOptions){ getBaseOptions(function(err, options){ // try to get filepath from the command-line - if (process.argv[2]) { - if (~['-v', '--verbose'].indexOf(process.argv[2])) { - if (process.argv[3]) { - options.filepath = process.argv[3]; - } - } else { - options.filepath = process.argv[2]; - } - } + // look into all command line arguments from index 2 which don't start with - + var firstNonOptionArgument = process.argv.slice(2).filter(RegExp.prototype.test.bind(/^[^-]/))[0]; + + if (firstNonOptionArgument) + options.filepath = firstNonOptionArgument; // lodash or else would be better, but no need for the extra dependency for (var option in userOptions) { diff --git a/lib/logger.js b/lib/logger.js index 9c27e0b..a847a41 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -10,7 +10,8 @@ function getLogLevel(){ } function hasVerboseCommandLineOption(){ - return process.argv[2] && ~['-v', '--verbose'].indexOf(process.argv[2]); + // look into command line arguments starting from index 2 + return process.argv.slice(2).filter(RegExp.prototype.test.bind(/^(-v|--verbose)$/)).length > 0; } function hasDebugEnvVariable(){ diff --git a/lib/sendToCoveralls.js b/lib/sendToCoveralls.js index 38b37f7..f574997 100644 --- a/lib/sendToCoveralls.js +++ b/lib/sendToCoveralls.js @@ -8,9 +8,21 @@ var sendToCoveralls = function(obj, cb){ var str = JSON.stringify(obj); var url = urlBase + '/api/v1/jobs'; - request.post({url : url, form : { json : str}}, function(err, response, body){ - cb(err, response, body); - }); + + if (hasWriteToStdoutOption()) { + process.stdout.write(str); + cb(null, { statusCode: 200 }, ''); + } else { + request.post({url : url, form : { json : str}}, function(err, response, body){ + cb(err, response, body); + }); + } }; +function hasWriteToStdoutOption(){ + // look into command line arguments starting from index 2 + return process.argv.slice(2).filter(RegExp.prototype.test.bind(/^(-w|--write)$/)).length > 0; +} + + module.exports = sendToCoveralls; diff --git a/test/sendToCoveralls.js b/test/sendToCoveralls.js index f809319..eca6bef 100644 --- a/test/sendToCoveralls.js +++ b/test/sendToCoveralls.js @@ -1,6 +1,7 @@ var should = require('should'); var request = require('request'); var sinon = require('sinon-restore'); +var stream = require('stream'); var index = require('../index'); logger = require('log-driver')({level : false}); @@ -27,7 +28,7 @@ describe("sendToCoveralls", function(){ }); var obj = {"some":"obj"}; - index.sendToCoveralls(obj, function(err, response, body){ + index.sendToCoveralls(obj, function(err, response, body){ err.should.equal('err'); response.should.equal('response'); body.should.equal('body'); @@ -44,11 +45,31 @@ describe("sendToCoveralls", function(){ }); var obj = {"some":"obj"}; - index.sendToCoveralls(obj, function(err, response, body){ + index.sendToCoveralls(obj, function(err, response, body){ err.should.equal('err'); response.should.equal('response'); body.should.equal('body'); done(); }); }); + it ("writes output to stdout when --write is passed", function(done) { + var obj = {"some":"obj"}; + + // set up mock process.stdout.write temporarily + var origStdoutWrite = process.stdout.write; + process.stdout.write = function(string) { + if (string == JSON.stringify(obj)) { + process.stdout.write = origStdoutWrite; + return done(); + } + + origStdoutWrite.apply(this, arguments); + }; + + process.argv[2] = '--write'; + + index.sendToCoveralls(obj, function(err, response, body) { + response.statusCode.should.equal(200); + }); + }); }); |
