diff --git a/lib/logger.js b/lib/logger.js index f51f1500..a59a1178 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -10,15 +10,31 @@ 'use strict'; const chalk = require('chalk'); -let isVerbose = false; -let quiet = false; -let messages = { - debug: [], - warning: [], + +const messagesKeys = [ + 'debug', + 'recommendation', + 'warning', +]; +const defaultConfig = { + isVerbose: false, + quiet: false +}; + +let messages = {}; +let config = {}; + +const reset = function() { + messages = {}; + for (let messageKey of messagesKeys) { + messages[messageKey] = []; + } + config = Object.assign({}, defaultConfig); }; +reset(); function log(message) { - if (quiet) { + if (config.quiet) { return; } @@ -29,31 +45,36 @@ module.exports = { debug(message) { messages.debug.push(message); - if (isVerbose) { - log(`${chalk.bgBlack.white(' DEBUG ')} ${message}`); + if (config.isVerbose) { + log(`${chalk.bgBlack.white(' DEBUG ')} ${message}`); } }, - warning(message) { - messages.warning.push(message); + recommendation(message) { + messages.recommendation.push(message); - log(`${chalk.bgYellow.black(' WARNING ')} ${chalk.yellow(message)}`); + log(`${chalk.bgBlue.white(' RECOMMEND ')} ${message}`); }, - clearMessages() { - messages.debug = []; - messages.warning = []; + warning(message) { + messages.warning.push(message); + + log(`${chalk.bgYellow.black(' WARNING ')} ${chalk.yellow(message)}`); }, getMessages() { return messages; }, - quiet() { - quiet = true; + quiet(setQuiet = true) { + config.quiet = setQuiet; + }, + + verbose(setVerbose = true) { + config.isVerbose = setVerbose; }, - verbose() { - isVerbose = true; + reset() { + reset(); } }; diff --git a/test/config/validator.js b/test/config/validator.js index 8f4f8555..d86df458 100644 --- a/test/config/validator.js +++ b/test/config/validator.js @@ -15,8 +15,6 @@ const RuntimeConfig = require('../../lib/config/RuntimeConfig'); const validator = require('../../lib/config/validator'); const logger = require('../../lib/logger'); -logger.quiet(); - function createConfig() { const runtimeConfig = new RuntimeConfig(); runtimeConfig.context = __dirname; @@ -77,7 +75,8 @@ describe('The validator function', () => { config.addEntry('main', './main'); config.runtimeConfig.useDevServer = true; - logger.clearMessages(); + logger.reset(); + logger.quiet(); validator(config); expect(logger.getMessages().warning).to.have.lengthOf(1); diff --git a/test/logger.js b/test/logger.js new file mode 100644 index 00000000..c7716a73 --- /dev/null +++ b/test/logger.js @@ -0,0 +1,60 @@ +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +'use strict'; + +const expect = require('chai').expect; +require('../lib/context').runtimeConfig = {}; +const logger = require('../lib/logger'); + +describe('logger', () => { + beforeEach(() => { + logger.reset(); + }); + + afterEach(() => { + logger.reset(); + }); + + it('Smoke test for log methods', () => { + + const methods = [ + 'debug', + 'recommendation', + 'warning', + ]; + const testString = 'TEST MESSAGE'; + const expectedMessages = { + debug: [testString], + recommendation: [testString], + warning: [testString], + }; + + logger.quiet(); + logger.verbose(); + + for (let loggerMethod of methods) { + logger[loggerMethod](testString); + } + + // clone the object so the afterEach doesn't clear out before + // a failure message is shown + const actualMessages = Object.assign({}, logger.getMessages()); + expect(actualMessages).to.deep.equal(expectedMessages); + }); + + it('test reset()', () => { + logger.debug('DEBUG!'); + logger.reset(); + + const actualMessages = Object.assign({}, logger.getMessages()); + + expect(actualMessages.debug).to.have.lengthOf(0); + }); +});