diff options
Diffstat (limited to 'node_modules/winston/test/transports/console-test.js')
-rw-r--r-- | node_modules/winston/test/transports/console-test.js | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/node_modules/winston/test/transports/console-test.js b/node_modules/winston/test/transports/console-test.js new file mode 100644 index 0000000..de868b3 --- /dev/null +++ b/node_modules/winston/test/transports/console-test.js @@ -0,0 +1,202 @@ +/* + * console-test.js: Tests for instances of the Console transport + * + * (C) 2010 Charlie Robbins + * MIT LICENSE + * + */ + +var path = require('path'), + vows = require('vows'), + assert = require('assert'), + winston = require('../../lib/winston'), + helpers = require('../helpers'), + stdMocks = require('std-mocks'); + +var npmTransport = new (winston.transports.Console)(), + syslogTransport = new (winston.transports.Console)({ levels: winston.config.syslog.levels }), + alignTransport = new (winston.transports.Console)({ showLevel: true, align: true }), + defaultTransport = new (winston.transports.Console)(), + rawTransport = new (winston.transports.Console)({ level: 'verbose', raw: true }), + debugStdoutTransport = new (winston.transports.Console)({ debugStdout: true }), + stderrLevelsTransport = new (winston.transports.Console)({ stderrLevels: ['info', 'warn'] }), + customLevels = { + alpha: 0, + beta: 1, + gamma: 2, + delta: 3, + epsilon: 4, + }, + customLevelsAndStderrTransport = new (winston.transports.Console)({ + levels: customLevels, + stderrLevels: ['delta', 'epsilon'] + }), + noStderrTransport = new (winston.transports.Console)({ stderrLevels: [] }); + +vows.describe('winston/transports/console').addBatch({ + "An instance of the Console Transport": { + "with showLevel off": { + topic : function() { + npmTransport.showLevel = false; + stdMocks.use(); + npmTransport.log('info', 'Le message', { meta: true }, this.callback); + }, + "should not have level prepended": function () { + stdMocks.restore(); + var output = stdMocks.flush(), + line = output.stdout[0]; + + assert.equal(line, 'Le message meta=true\n'); + } + } + } +}).addBatch({ + "An instance of the Console Transport": { + "with showLevel on": { + topic : function() { + npmTransport.showLevel = true; + stdMocks.use(); + npmTransport.log('info', ''); + }, + "should have level prepended": function () { + stdMocks.restore(); + var output = stdMocks.flush(), + line = output.stdout[0]; + + assert.equal(line, 'info: \n'); + } + }, + } +}).addBatch({ + "An instance of the Console Transport": { + "with npm levels": { + "should have the proper methods defined": function () { + helpers.assertConsole(npmTransport); + }, + "the log() method": helpers.testNpmLevels(npmTransport, "should respond with true", function (ign, err, logged) { + assert.isNull(err); + assert.isTrue(logged); + }) + }, + "with syslog levels": { + "should have the proper methods defined": function () { + helpers.assertConsole(syslogTransport); + }, + "the log() method": helpers.testSyslogLevels(syslogTransport, "should respond with true", function (ign, err, logged) { + assert.isNull(err); + assert.isTrue(logged); + }) + }, + "with end-of-line": { + topic : function() { + npmTransport.eol = 'X'; + stdMocks.use(); + npmTransport.log('info', 'Le message', { meta: true }, this.callback); + }, + "should have end-of-line character appended": function () { + stdMocks.restore(); + var output = stdMocks.flush(), + line = output.stdout[0]; + console.dir(line); + + assert.equal(line, 'info: Le message meta=trueX'); + } + } + } +}).addBatch({ + "An instance of the Console Transport with the align option on": { + topic : function() { + stdMocks.use(); + alignTransport.log('info', ''); + }, + "should have logs aligned": function () { + stdMocks.restore(); + var output = stdMocks.flush(), + line = output.stdout[0]; + + assert.equal(line, 'info\011: \n'); + } + } +}).addBatch({ + "with align off": { + topic : function() { + alignTransport.align = false; + stdMocks.use(); + alignTransport.log('info', ''); + }, + "should not have logs aligned": function () { + stdMocks.restore(); + var output = stdMocks.flush(), + line = output.stdout[0]; + + assert.equal(line, 'info: \n'); + } + } +}).addBatch({ + 'An instance of a raw Console transport': { + 'logging to stdout': { + topic: function () { + stdMocks.use(); + rawTransport.log('verbose', 'hello there'); + }, 'should output json with message property': function () { + stdMocks.restore(); + var output = stdMocks.flush(); + assert.ok(output.stdout[0].indexOf('"message":"hello there"') > -1); + } + } + } +}).addBatch({ + "An instance of the Console Transport with no options": { + "should set stderrLevels to 'error' and 'debug' by default": helpers.assertStderrLevels( + defaultTransport, + ['error', 'debug'] + ), + "should log only 'error' and 'debug' to stderr": helpers.testLoggingToStreams( + winston.config.npm.levels, defaultTransport, ['debug', 'error'], stdMocks + ) + } +}).addBatch({ + "An instance of the Console Transport with debugStdout set": { + "should throw an Error if stderrLevels is set": helpers.assertOptionsThrow( + { debugStdout: true, stderrLevels: ['debug'] }, + "Error: Cannot set debugStdout and stderrLevels together" + ), + "should set stderrLevels to 'error' by default": helpers.assertStderrLevels( + debugStdoutTransport, + ['error'] + ), + "should log only the 'error' level to stderr": helpers.testLoggingToStreams( + winston.config.npm.levels, debugStdoutTransport, ['error'], stdMocks + ) + } +}).addBatch({ + "An instance of the Console Transport with stderrLevels set": { + "should throw an Error if stderrLevels is set but not an Array": helpers.assertOptionsThrow( + { debugStdout: false, stderrLevels: new String('Not an Array') }, + "Error: Cannot set stderrLevels to type other than Array" + ), + "should throw an Error if stderrLevels contains non-string elements": helpers.assertOptionsThrow( + { debugStdout: false, stderrLevels: ["good", /^invalid$/, "valid"] }, + "Error: Cannot have non-string elements in stderrLevels Array" + ), + "should correctly set stderrLevels": helpers.assertStderrLevels( + stderrLevelsTransport, + ['info', 'warn'] + ), + "should log only the levels in stderrLevels to stderr": helpers.testLoggingToStreams( + winston.config.npm.levels, stderrLevelsTransport, ['info', 'warn'], stdMocks + ) + } +}).addBatch({ + "An instance of the Console Transport with stderrLevels set to an empty array": { + "should log only to stdout, and not to stderr": helpers.testLoggingToStreams( + winston.config.npm.levels, noStderrTransport, [], stdMocks + ) + } +}).addBatch({ + "An instance of the Console Transport with custom levels and stderrLevels set": { + "should log only the levels in stderrLevels to stderr": helpers.testLoggingToStreams( + customLevels, customLevelsAndStderrTransport, ['delta', 'epsilon'], stdMocks + ) + } +}).export(module); |