Simple logging api inspired by Python logging module
[fnpeditor.git] / src / fnpjs / logging / logging.test.js
1 define(function(require) {
2     
3 'use strict';
4 /* global describe, it, beforeEach */
5 var chai = require('libs/chai'),
6     logging = require('./logging.js'),
7     expect = chai.expect;
8
9
10 // Global log object for defining expectations
11 var log = {
12     _msgs: [],
13     clear: function() {
14         this._msgs = [];
15     },
16     append: function(msg) {
17         this._msgs.push(msg);
18     },
19     contains: function(msg) {
20         return this._msgs.indexOf(msg) !== -1;
21     },
22     getLast: function() {
23         return this._msgs.length ? this._msgs[this._msgs.length] : undefined;
24     },
25     isEmpty: function() {
26         return this._msgs.length === 0;
27     },
28     getMessages: function() {
29         return this._msgs;
30     }
31 };
32
33 // Loggin handler that just writes to the global logger object
34 var testLoggingHandler = function(msg) {
35     log.append(msg);
36 };
37
38 describe('Logging', function() {
39     
40
41     beforeEach(function() {
42         log.clear();
43         logging.clearConfig();
44     });
45
46     var setConfig = function(loggerLevel, handlerLevel) {
47         logging.setConfig({
48             handlers: {
49                 testHandler: {
50                     handler: testLoggingHandler,
51                     level: handlerLevel
52                 }
53             },
54             loggers: {
55                 '': {
56                     level: loggerLevel,
57                     handlers: ['testHandler']
58                 }
59             }
60         });
61     };
62
63     it('works with sample config', function() {
64         setConfig('debug', 'debug');
65         var logger = logging.getLogger('some.name');
66         logger.debug('debug msg');
67         expect(log.contains('debug msg')).to.equal(true);
68     });
69
70     it('filters level on loggers', function() {
71         setConfig('info', 'debug');
72         var logger = logging.getLogger('some.name');
73         logger.debug('debug msg');
74         expect(log.isEmpty()).to.equal(true, 'debug message filtered out');
75         logger.info('info msg');
76         expect(log.contains('info msg')).to.equal(true, 'info message passed');
77     });
78
79     it('filters level on handlers', function() {
80         setConfig('debug', 'info');
81         var logger = logging.getLogger('some.name');
82         logger.debug('debug msg');
83         expect(log.isEmpty()).to.equal(true, 'debug message filtered out');
84         logger.info('info msg');
85         expect(log.contains('info msg')).to.equal(true, 'info message passed');
86     });
87
88     it('propagates message to upper logger depending on the propagate flag', function() {
89         var config = {
90                 handlers: {
91                     testHandler: {
92                         handler: testLoggingHandler,
93                         level: 'debug'
94                     }
95                 },
96                 loggers: {
97                     '': {
98                         level: 'debug',
99                         handlers: ['testHandler']
100                     },
101                     'logger1': {
102                         level: 'debug',
103                         handlers: ['testHandler']
104                     }
105                 }
106             },
107             logger;
108
109         config.loggers.logger1.propagate = false;
110         logging.setConfig(config);
111
112         logger = logging.getLogger('logger1');
113
114         logger.debug('msg1');
115         expect(log.contains('msg1')).to.equal(true, 'first message logged');
116         expect(log.getMessages().length === 1).to.equal(true, 'logger didn\'t propagate its message');
117
118         log.clear();
119         config.loggers.logger1.propagate = true;
120         logging.setConfig(config);
121
122         logger.debug('msg2');
123         expect(log.contains('msg2')).to.equal(true, 'second message logged');
124         expect(log.getMessages().length === 2).to.equal(true, 'second message propagated to upper logger');
125     });
126 });
127
128 });