diff options
Diffstat (limited to 'test/ng/logSpec.js')
| -rw-r--r-- | test/ng/logSpec.js | 121 | 
1 files changed, 121 insertions, 0 deletions
diff --git a/test/ng/logSpec.js b/test/ng/logSpec.js new file mode 100644 index 00000000..269057a2 --- /dev/null +++ b/test/ng/logSpec.js @@ -0,0 +1,121 @@ +'use strict'; + +describe('$log', function() { +  var $window, logger, log, warn, info, 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); +  })); + +  it('should use console if present', inject( +    function(){ +      $window.console = {log: log, +                         warn: warn, +                         info: info, +                         error: error}; +    }, +    function($log) { +      $log.log(); +      $log.warn(); +      $log.info(); +      $log.error(); +      expect(logger).toEqual('log;warn;info;error;'); +    } +  )); + + +  it('should use console.log() if other not present', inject( +    function(){ +      $window.console = {log: log}; +    }, +    function($log) { +      $log.log(); +      $log.warn(); +      $log.info(); +      $log.error(); +      expect(logger).toEqual('log;log;log;log;'); +    } +  )); + + +  it('should use noop if no console', inject( +    function($log) { +      $log.log(); +      $log.warn(); +      $log.info(); +      $log.error(); +    } +  )); + + +  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; + +    beforeEach(function() { +      e = new Error(''); +      e.message = undefined; +      e.sourceURL = undefined; +      e.line = undefined; +      e.stack = undefined; + +      $log = new $LogProvider().$get[1]({console:{error:function() { +        errorArgs = [].slice.call(arguments, 0); +      }}}); +    }); + + +    it('should pass error if does not have trace', function() { +      $log.error('abc', e); +      expect(errorArgs).toEqual(['abc', e]); +    }); + + +    it('should print stack', function() { +      e.stack = 'stack'; +      $log.error('abc', e); +      expect(errorArgs).toEqual(['abc', 'stack']); +    }); + + +    it('should print line', function() { +      e.message = 'message'; +      e.sourceURL = 'sourceURL'; +      e.line = '123'; +      $log.error('abc', e); +      expect(errorArgs).toEqual(['abc', 'message\nsourceURL:123']); +    }); +  }); +});  | 
