// Copyright 2011 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. goog.provide('goog.debug.ConsoleTest'); goog.setTestOnly('goog.debug.ConsoleTest'); goog.require('goog.debug.Console'); goog.require('goog.debug.LogRecord'); goog.require('goog.debug.Logger'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.recordFunction'); var debugConsole; var mockConsole; var loggerName1; var logRecord1; var loggerName2; var logRecord2; var loggerName3; var logRecord3; function setUp() { debugConsole = new goog.debug.Console(); // Set up a recorder for mockConsole.log mockConsole = {log: goog.testing.recordFunction()}; goog.debug.Console.console_ = mockConsole; // Test logger 1. loggerName1 = 'this.is.a.logger'; logRecord1 = new goog.debug.LogRecord( goog.debug.Logger.Level.INFO, 'this is a statement', loggerName1); // Test logger 2. loggerName2 = 'name.of.logger'; logRecord2 = new goog.debug.LogRecord( goog.debug.Logger.Level.WARNING, 'hey, this is a warning', loggerName2); // Test logger 3. loggerName3 = 'third.logger'; logRecord3 = new goog.debug.LogRecord( goog.debug.Logger.Level.SEVERE, 'seriously, this statement is serious', loggerName3); } function testLoggingWithSimpleConsole() { // Make sure all messages use the log function. logAtAllLevels('test message'); assertEquals(9, mockConsole.log.getCallCount()); } function testLoggingWithInfoSupported() { // Make sure the log function is the default when only 'info' is available. mockConsole['info'] = goog.testing.recordFunction(); logAtAllLevels('test message'); assertEquals(1, mockConsole.info.getCallCount()); assertEquals(8, mockConsole.log.getCallCount()); } function testLoggingWithErrorSupported() { // Make sure the log function is the default when only 'error' is available. mockConsole['error'] = goog.testing.recordFunction(); logAtAllLevels('test message'); assertEquals(1, mockConsole.error.getCallCount()); assertEquals(8, mockConsole.log.getCallCount()); } function testLoggingWithWarningSupported() { // Make sure the log function is the default when only 'warn' is available. mockConsole['warn'] = goog.testing.recordFunction(); logAtAllLevels('test message'); assertEquals(1, mockConsole.warn.getCallCount()); assertEquals(8, mockConsole.log.getCallCount()); } function testLoggingWithDebugSupported() { // Make sure the log function is the default when only 'debug' is available. mockConsole['debug'] = goog.testing.recordFunction(); logAtAllLevels('test message'); assertEquals(6, mockConsole.debug.getCallCount()); assertEquals(3, mockConsole.log.getCallCount()); } function testLoggingWithEverythingSupported() { mockConsole['info'] = goog.testing.recordFunction(); mockConsole['error'] = goog.testing.recordFunction(); mockConsole['warn'] = goog.testing.recordFunction(); mockConsole['debug'] = goog.testing.recordFunction(); logAtAllLevels('test message'); assertEquals(1, mockConsole.info.getCallCount()); assertEquals(1, mockConsole.error.getCallCount()); assertEquals(1, mockConsole.warn.getCallCount()); assertEquals(6, mockConsole.debug.getCallCount()); } function testAddLogRecordWithoutFilters() { // Make sure none are filtered. debugConsole.addLogRecord(logRecord1); assertEquals(1, mockConsole.log.getCallCount()); debugConsole.addLogRecord(logRecord2); assertEquals(2, mockConsole.log.getCallCount()); debugConsole.addLogRecord(logRecord3); assertEquals(3, mockConsole.log.getCallCount()); } function testAddLogRecordWithOneFilter() { // Filter #2 and make sure the filtering is correct for all records. debugConsole.addFilter(loggerName2); debugConsole.addLogRecord(logRecord1); assertEquals(1, mockConsole.log.getCallCount()); debugConsole.addLogRecord(logRecord2); assertEquals(1, mockConsole.log.getCallCount()); debugConsole.addLogRecord(logRecord3); assertEquals(2, mockConsole.log.getCallCount()); } function testAddLogRecordWithMoreThanOneFilter() { // Filter #1 and #3 and check. debugConsole.addFilter(loggerName1); debugConsole.addFilter(loggerName3); debugConsole.addLogRecord(logRecord1); assertEquals(0, mockConsole.log.getCallCount()); debugConsole.addLogRecord(logRecord2); assertEquals(1, mockConsole.log.getCallCount()); debugConsole.addLogRecord(logRecord3); assertEquals(1, mockConsole.log.getCallCount()); } function testAddLogRecordWithAddAndRemoveFilter() { debugConsole.addFilter(loggerName1); debugConsole.addFilter(loggerName2); debugConsole.removeFilter(loggerName1); debugConsole.removeFilter(loggerName2); debugConsole.addLogRecord(logRecord1); assertEquals(1, mockConsole.log.getCallCount()); debugConsole.addLogRecord(logRecord2); assertEquals(2, mockConsole.log.getCallCount()); debugConsole.addLogRecord(logRecord3); assertEquals(3, mockConsole.log.getCallCount()); } function testSetConsole() { var fakeConsole = {log: goog.testing.recordFunction()}; logAtLevel(goog.debug.Logger.Level.INFO, 'test message 1'); logAtAllLevels('test message 1'); assertEquals(0, fakeConsole.log.getCallCount()); goog.debug.Console.setConsole(fakeConsole); logAtLevel(goog.debug.Logger.Level.INFO, 'test message 2'); assertEquals(1, fakeConsole.log.getCallCount()); } /** * Logs the message at all log levels. * @param {string} message The message to log. */ function logAtAllLevels(message) { logAtLevel(goog.debug.Logger.Level.SHOUT, message); logAtLevel(goog.debug.Logger.Level.SEVERE, message); logAtLevel(goog.debug.Logger.Level.WARNING, message); logAtLevel(goog.debug.Logger.Level.INFO, message); logAtLevel(goog.debug.Logger.Level.CONFIG, message); logAtLevel(goog.debug.Logger.Level.FINE, message); logAtLevel(goog.debug.Logger.Level.FINER, message); logAtLevel(goog.debug.Logger.Level.FINEST, message); logAtLevel(goog.debug.Logger.Level.ALL, message); } /** * Adds a log record to the debug console. * @param {!goog.debug.Logger.Level} level The level at which to log. * @param {string} message The message to log. */ function logAtLevel(level, message) { debugConsole.addLogRecord( new goog.debug.LogRecord(level, message, loggerName1)); }