diff options
| -rw-r--r-- | src/service/log.js | 16 | ||||
| -rw-r--r-- | test/service/logSpec.js | 35 |
2 files changed, 39 insertions, 12 deletions
diff --git a/src/service/log.js b/src/service/log.js index d338985a..d9d8994d 100644 --- a/src/service/log.js +++ b/src/service/log.js @@ -93,19 +93,23 @@ function $LogProvider(){ } function consoleLog(type) { - var console = $window.console || {}; - var logFn = console[type] || console.log || noop; + var console = $window.console || {}, + logFn = console[type] || console.log || noop; + if (logFn.apply) { return function() { var args = []; - forEach(arguments, function(arg){ + forEach(arguments, function(arg) { args.push(formatError(arg)); }); return logFn.apply(console, args); }; - } else { - // we are IE, in which case there is nothing we can do - return logFn; + } + + // we are IE which either doesn't have window.console => this is noop and we do nothing, + // or we are IE where console.log doesn't have apply so we log at least first 2 args + return function(arg1, arg2) { + logFn(arg1, arg2); } } }]; diff --git a/test/service/logSpec.js b/test/service/logSpec.js index 72ce6a5c..269057a2 100644 --- a/test/service/logSpec.js +++ b/test/service/logSpec.js @@ -1,17 +1,18 @@ 'use strict'; describe('$log', function() { - var $window; - var logger; + var $window, logger, log, warn, info, error; + - function log() { logger+= 'log;'; } - function warn() { logger+= 'warn;'; } - function info() { logger+= 'info;'; } - function error() { logger+= 'error;'; } beforeEach(module(function($provide){ $window = {}; logger = ''; + log = function() { logger+= 'log;'; }; + warn = function() { logger+= 'warn;'; }; + info = function() { logger+= 'info;'; }; + error = function() { logger+= 'error;'; }; + $provide.provider('$log', $LogProvider); $provide.value('$exceptionHandler', angular.mock.rethrow); $provide.value('$window', $window); @@ -58,6 +59,28 @@ describe('$log', function() { )); + it("should work in IE where console.error doesn't have apply method", inject( + function() { + log.apply = log.call = + warn.apply = warn.call = + info.apply = info.call = + error.apply = error.call = null; + + $window.console = {log: log, + warn: warn, + info: info, + error: error}; + }, + function($log) { + $log.log.apply($log); + $log.warn.apply($log); + $log.info.apply($log); + $log.error.apply($log); + expect(logger).toEqual('log;warn;info;error;'); + }) + ); + + describe('$log.error', function() { var e, $log, errorArgs; |
