From 27eea93d6fa22ef3bd382f263bf2f637ab7abe4a Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Sun, 4 Dec 2011 12:30:15 -0500 Subject: [PATCH] Now setting mocked console in warn module for tests - Replacing console broken in newer versions of node/v8 - Replacing console.warn/log works fine, but is a poor choice for testing --- lib/warn.js | 25 ++++++++++++++++++- test/test-warn-handlers.js | 51 +++++++++----------------------------- test/test-warn-impl.js | 10 +++----- 3 files changed, 40 insertions(+), 46 deletions(-) diff --git a/lib/warn.js b/lib/warn.js index a5afdbe..c88c813 100644 --- a/lib/warn.js +++ b/lib/warn.js @@ -28,6 +28,16 @@ */ var _handler = null; +/** + * Console to use for logging + * + * This reference allows an alternative console to be used. Must contain warn() + * or log() methods. + * + * @type {Object} + */ +var _console = console; + /** * Permits wrapping an exception as a warning @@ -106,7 +116,7 @@ exports.handlers = { { var dest; - console && ( dest = console.warn || console.log ) && + _console && ( dest = _console.warn || _console.log ) && dest( 'Warning: ' + warning.message ); }, @@ -175,6 +185,19 @@ exports.handle = function( warning ) } +/** + * Sets active console + * + * @param {Object} console containing warn() or log() method + * + * @return {undefined} + */ +exports.setConsole = function( console ) +{ + _console = console; +}; + + // set the default handler _handler = exports.handlers.log; diff --git a/test/test-warn-handlers.js b/test/test-warn-handlers.js index cc73e80..c609c43 100644 --- a/test/test-warn-handlers.js +++ b/test/test-warn-handlers.js @@ -31,36 +31,15 @@ var common = require( './common' ), ; -/** - * Return the console object, without throwing errors if it does not exist - * - * @return {Object} console - */ -function backupConsole() -{ - // ensure that we don't throw errors if console is not defined - if ( typeof console !== 'undefined' ) - { - return console; - } - - return undefined; -} - - /** * The log warning handler should log warnings to the console */ ( function testLogWarningHandlerLogsMessageToConsole() { - var logged = false, - - // back up console ref - console_ = backupConsole() - ; + var logged = false; // mock console - console = { + warn.setConsole( { warn: function( message ) { assert.equal( ( 'Warning: ' + warning.message ), message, @@ -69,7 +48,7 @@ function backupConsole() logged = true; }, - }; + } ); // call handler with the warning warn.handlers.log( warning ); @@ -79,7 +58,7 @@ function backupConsole() ); // restore console - console = console_; + warn.setConsole( console ); } )(); @@ -90,17 +69,14 @@ function backupConsole() */ ( function testLogWarningHandlerHandlesMissingConsole() { - // back up console - var console_ = backupConsole(); - // destroy it - console = undefined; + warn.setConsole( undefined ); // attempt to log warn.handlers.log( warning ); // restore console - console = console_; + warn.setConsole( console ); } )(); @@ -111,16 +87,14 @@ function backupConsole() */ ( function testLogWarningHandlerWillFallBackToLogMethodIfWarnIsMissing() { - // back up and overwrite console to contain only log() - var console_ = backupConsole(), - given = ''; + var given = ''; - console = { + warn.setConsole( { log: function( message ) { given = message; } - }; + } ); // attempt to log warn.handlers.log( warning ); @@ -130,7 +104,7 @@ function backupConsole() ); // restore console - console = console_; + warn.setConsole( console ); } )(); @@ -166,14 +140,13 @@ function backupConsole() ( function testDismissWarningHandlerShouldDoNothing() { // destroy the console to ensure nothing is logged - var console_ = backupConsole(); - console = undefined; + warn.setConsole( undefined ); // don't catch anything, to ensure no errors occur and that no exceptions // are thrown warn.handlers.dismiss( warning ); // restore console - console = console_; + warn.setConsole( console ); } )(); diff --git a/test/test-warn-impl.js b/test/test-warn-impl.js index 7e714ae..6eef84e 100644 --- a/test/test-warn-impl.js +++ b/test/test-warn-impl.js @@ -35,17 +35,15 @@ var common = require( './common' ), */ ( function testDefaultHandlerIsLogger() { - // back up console object - var console_ = ( typeof console !== 'undefined' ) ? console : undefined, - called = false; + var called = false; // stub it - console = { + warn.setConsole( { warn: function() { called = true; }, - }; + } ); warn.handle( warn.Warning( Error( 'foo' ) ) ); @@ -54,7 +52,7 @@ var common = require( './common' ), ); // restore console - console = console_; + warn.setConsole( console ); } )();