aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/service/log.js16
-rw-r--r--test/service/logSpec.js35
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;