2 var assert = require('assert')
3 , vows = require('vows')
4 , sandbox = require('sandboxed-module');
6 function makeTestAppender() {
8 configure: function(config, options) {
9 this.configureCalled = true;
11 this.options = options;
12 return this.appender();
14 appender: function() {
16 return function(logEvt) { self.logEvt = logEvt; };
21 vows.describe('log4js configure').addBatch({
23 'when specified by type': {
25 var testAppender = makeTestAppender(),
26 log4js = sandbox.require(
30 './appenders/cheese': testAppender
37 { type: "cheese", flavour: "gouda" }
44 'should load appender': function(testAppender) {
45 assert.ok(testAppender.configureCalled);
47 'should pass config to appender': function(testAppender) {
48 assert.equal(testAppender.config.flavour, 'gouda');
50 'should pass log4js options to appender': function(testAppender) {
51 assert.equal(testAppender.options.pants, 'yes');
54 'when core appender loaded via loadAppender': {
56 var testAppender = makeTestAppender(),
57 log4js = sandbox.require(
59 { requires: { './appenders/cheese': testAppender } }
62 log4js.loadAppender('cheese');
65 'should load appender from ../lib/appenders': function(log4js) {
66 assert.ok(log4js.appenders.cheese);
68 'should add appender configure function to appenderMakers' : function(log4js) {
69 assert.isFunction(log4js.appenderMakers.cheese);
72 'when appender in node_modules loaded via loadAppender': {
74 var testAppender = makeTestAppender(),
75 log4js = sandbox.require(
77 { requires: { 'some/other/external': testAppender } }
79 log4js.loadAppender('some/other/external');
82 'should load appender via require': function(log4js) {
83 assert.ok(log4js.appenders['some/other/external']);
85 'should add appender configure function to appenderMakers': function(log4js) {
86 assert.isFunction(log4js.appenderMakers['some/other/external']);
89 'when appender object loaded via loadAppender': {
91 var testAppender = makeTestAppender(),
92 log4js = sandbox.require('../lib/log4js');
94 log4js.loadAppender('some/other/external', testAppender);
97 'should load appender with provided object': function(log4js) {
98 assert.ok(log4js.appenders['some/other/external']);
100 'should add appender configure function to appenderMakers': function(log4js) {
101 assert.isFunction(log4js.appenderMakers['some/other/external']);
104 'when configuration file loaded via LOG4JS_CONFIG environment variable': {
106 process.env.LOG4JS_CONFIG = 'some/path/to/mylog4js.json';
108 modulePath = 'some/path/to/mylog4js.json',
112 config: { appenders: [ { type: 'console', layout: { type: 'messagePassThrough' } } ],
113 levels: { 'a-test' : 'INFO' } },
114 readdirSync: function(dir) {
115 return require('fs').readdirSync(dir);
117 readFileSync: function (file, encoding) {
119 assert.isString(file);
120 assert.equal(file, modulePath);
121 assert.equal(encoding, 'utf8');
122 return JSON.stringify(fakeFS.config);
124 statSync: function (path) {
125 pathsChecked.push(path);
126 if (path === modulePath) {
127 return { mtime: mtime };
129 throw new Error("no such file");
133 log4js = sandbox.require(
141 delete process.env.LOG4JS_CONFIG;
144 'should load the specified local configuration file' : function(fileRead) {
145 assert.equal(fileRead, 1);