// Copyright 2006 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.LoggerTest'); goog.setTestOnly('goog.debug.LoggerTest'); goog.require('goog.debug.LogManager'); goog.require('goog.debug.Logger'); goog.require('goog.testing.jsunit'); function getDebug(sb, logger, level) { var spacer = ''; if (level) { spacer = (new Array(level + 1)).join(' '); } sb[sb.length] = spacer; var name = logger.getName(); if (name) { sb[sb.length] = name; } else { sb[sb.length] = 'ROOT'; } sb[sb.length] = '\n'; var children = logger.getChildren(); for (var key in children) { getDebug(sb, children[key], level + 1); } } function testParents() { var l1 = goog.debug.Logger.getLogger('goog.test'); var l2 = goog.debug.Logger.getLogger('goog.bar'); var l3 = goog.debug.Logger.getLogger('goog.bar.foo'); var l4 = goog.debug.Logger.getLogger('goog.bar.baaz'); var rootLogger = goog.debug.LogManager.getRoot(); var googLogger = goog.debug.Logger.getLogger('goog'); assertEquals(rootLogger, googLogger.getParent()); assertEquals(googLogger, l1.getParent()); assertEquals(googLogger, l2.getParent()); assertEquals(l2, l3.getParent()); assertEquals(l2, l4.getParent()); } function testLogging() { var root = goog.debug.LogManager.getRoot(); var handler = new TestHandler(); var f = goog.bind(handler.onPublish, handler); root.addHandler(f); var l4 = goog.debug.Logger.getLogger('goog.bar.baaz'); l4.log(goog.debug.Logger.Level.WARNING, 'foo'); assertNotNull(handler.logRecord); assertEquals(goog.debug.Logger.Level.WARNING, handler.logRecord.getLevel()); assertEquals('foo', handler.logRecord.getMessage()); handler.logRecord = null; root.removeHandler(f); l4.log(goog.debug.Logger.Level.WARNING, 'foo'); assertNull(handler.logRecord); } function testFiltering() { var root = goog.debug.LogManager.getRoot(); var handler = new TestHandler(); var f = goog.bind(handler.onPublish, handler); root.addHandler(f); var l3 = goog.debug.Logger.getLogger('goog.bar.foo'); l3.setLevel(goog.debug.Logger.Level.WARNING); var l4 = goog.debug.Logger.getLogger('goog.bar.baaz'); l4.setLevel(goog.debug.Logger.Level.INFO); l4.log(goog.debug.Logger.Level.WARNING, 'foo'); assertNotNull(handler.logRecord); assertEquals(goog.debug.Logger.Level.WARNING, handler.logRecord.getLevel()); assertEquals('foo', handler.logRecord.getMessage()); handler.reset(); l3.log(goog.debug.Logger.Level.INFO, 'bar'); assertNull(handler.logRecord); l3.log(goog.debug.Logger.Level.WARNING, 'baaz'); assertNotNull(handler.logRecord); handler.reset(); l3.log(goog.debug.Logger.Level.SEVERE, 'baaz'); assertNotNull(handler.logRecord); } function testException() { var root = goog.debug.LogManager.getRoot(); var handler = new TestHandler(); var f = goog.bind(handler.onPublish, handler); root.addHandler(f); var logger = goog.debug.Logger.getLogger('goog.debug.logger_test'); var ex = Error('boo!'); logger.severe('hello', ex); assertNotNull(handler.logRecord); assertEquals(goog.debug.Logger.Level.SEVERE, handler.logRecord.getLevel()); assertEquals('hello', handler.logRecord.getMessage()); assertEquals(ex, handler.logRecord.getException()); assertEquals('boo!', handler.logRecord.getException().message); } function testMessageCallbacks() { var root = goog.debug.LogManager.getRoot(); var handler = new TestHandler(); var f = goog.bind(handler.onPublish, handler); root.addHandler(f); var l3 = goog.debug.Logger.getLogger('goog.bar.foo'); l3.setLevel(goog.debug.Logger.Level.WARNING); l3.log(goog.debug.Logger.Level.INFO, function() { throw "Message callback shouldn't be called when below logger's level!"; }); assertNull(handler.logRecord); l3.log(goog.debug.Logger.Level.WARNING, function() { return 'heya' }); assertNotNull(handler.logRecord); assertEquals(goog.debug.Logger.Level.WARNING, handler.logRecord.getLevel()); assertEquals('heya', handler.logRecord.getMessage()); } function testGetPredefinedLevel() { assertEquals( goog.debug.Logger.Level.OFF, goog.debug.Logger.Level.getPredefinedLevel('OFF')); assertEquals( goog.debug.Logger.Level.SHOUT, goog.debug.Logger.Level.getPredefinedLevel('SHOUT')); assertEquals( goog.debug.Logger.Level.SEVERE, goog.debug.Logger.Level.getPredefinedLevel('SEVERE')); assertEquals( goog.debug.Logger.Level.WARNING, goog.debug.Logger.Level.getPredefinedLevel('WARNING')); assertEquals( goog.debug.Logger.Level.INFO, goog.debug.Logger.Level.getPredefinedLevel('INFO')); assertEquals( goog.debug.Logger.Level.CONFIG, goog.debug.Logger.Level.getPredefinedLevel('CONFIG')); assertEquals( goog.debug.Logger.Level.FINE, goog.debug.Logger.Level.getPredefinedLevel('FINE')); assertEquals( goog.debug.Logger.Level.FINER, goog.debug.Logger.Level.getPredefinedLevel('FINER')); assertEquals( goog.debug.Logger.Level.FINEST, goog.debug.Logger.Level.getPredefinedLevel('FINEST')); assertEquals( goog.debug.Logger.Level.ALL, goog.debug.Logger.Level.getPredefinedLevel('ALL')); } function testGetPredefinedLevelByValue() { assertEquals( goog.debug.Logger.Level.OFF, goog.debug.Logger.Level.getPredefinedLevelByValue(Infinity)); assertEquals( goog.debug.Logger.Level.SHOUT, goog.debug.Logger.Level.getPredefinedLevelByValue(1300)); assertEquals( goog.debug.Logger.Level.SHOUT, goog.debug.Logger.Level.getPredefinedLevelByValue(1200)); assertEquals( goog.debug.Logger.Level.SEVERE, goog.debug.Logger.Level.getPredefinedLevelByValue(1150)); assertEquals( goog.debug.Logger.Level.SEVERE, goog.debug.Logger.Level.getPredefinedLevelByValue(1000)); assertEquals( goog.debug.Logger.Level.WARNING, goog.debug.Logger.Level.getPredefinedLevelByValue(900)); assertEquals( goog.debug.Logger.Level.INFO, goog.debug.Logger.Level.getPredefinedLevelByValue(800)); assertEquals( goog.debug.Logger.Level.CONFIG, goog.debug.Logger.Level.getPredefinedLevelByValue(701)); assertEquals( goog.debug.Logger.Level.CONFIG, goog.debug.Logger.Level.getPredefinedLevelByValue(700)); assertEquals( goog.debug.Logger.Level.FINE, goog.debug.Logger.Level.getPredefinedLevelByValue(500)); assertEquals( goog.debug.Logger.Level.FINER, goog.debug.Logger.Level.getPredefinedLevelByValue(400)); assertEquals( goog.debug.Logger.Level.FINEST, goog.debug.Logger.Level.getPredefinedLevelByValue(300)); assertEquals( goog.debug.Logger.Level.ALL, goog.debug.Logger.Level.getPredefinedLevelByValue(0)); assertNull(goog.debug.Logger.Level.getPredefinedLevelByValue(-1)); } function TestHandler() { this.logRecord = null; } TestHandler.prototype.onPublish = function(logRecord) { this.logRecord = logRecord; }; TestHandler.prototype.reset = function() { this.logRecord = null; }; function testGetLogRecord() { var name = 'test.get.log.record'; var level = 1; var msg = 'msg'; var logger = goog.debug.Logger.getLogger(name); var logRecord = logger.getLogRecord(level, msg); assertEquals(name, logRecord.getLoggerName()); assertEquals(level, logRecord.getLevel()); assertEquals(msg, logRecord.getMessage()); assertNull(logRecord.getException()); } function testGetLogRecordWithException() { var name = 'test.get.log.record'; var level = 1; var msg = 'msg'; var ex = Error('Hi'); var logger = goog.debug.Logger.getLogger(name); var logRecord = logger.getLogRecord(level, msg, ex); assertEquals(name, logRecord.getLoggerName()); assertEquals(level, logRecord.getLevel()); assertEquals(msg, logRecord.getMessage()); assertEquals(ex, logRecord.getException()); }