blob: a12d535f81370fa3a9ee968e1e6d740d54a64ba5 [file] [log] [blame]
/*
* Copyright 2007 Google Inc.
*
* 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.
*/
package com.google.gwt.dev.util.log;
import com.google.gwt.core.ext.TreeLogger;
import junit.framework.TestCase;
import java.io.PrintWriter;
import java.io.StringWriter;
/**
* Tests the <code>AbstractTreeLogger</code>.
*/
public class AbstractTreeLoggerTest extends TestCase {
/**
* Low-priority branch points don't actually show low-priority messages unless
* they (later) get a child that is loggable.
*/
public void testLazyBranchCommit() {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
PrintWriterTreeLogger logger = new PrintWriterTreeLogger(pw);
logger.setMaxDetail(TreeLogger.WARN);
final String tstDbgStr = "TEST-DEBUG-STRING";
final String tstErrStr = "TEST-ERROR-STRING";
// Emit something that's low-priority and wouldn't show up normally unless
// it had a higher-priority child log event.
TreeLogger branch = logger.branch(TreeLogger.DEBUG, tstDbgStr, null);
assertEquals(-1, sw.toString().indexOf(tstDbgStr));
// Emit something that's high-priority and will cause both to show up.
branch.log(TreeLogger.ERROR, tstErrStr, null);
// Make sure both are now there, in the right order.
int posTstDbgStr = sw.toString().indexOf(tstDbgStr);
int posTstErrStr = sw.toString().indexOf(tstErrStr);
assertTrue(posTstDbgStr != -1);
assertTrue(posTstErrStr != -1);
assertTrue(posTstDbgStr < posTstErrStr);
}
/**
* Low-priority branch points don't actually show low-priority messages unless
* they (later) get a child that is loggable.
*/
public void testLazyMultiBranchCommit() {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
PrintWriterTreeLogger logger = new PrintWriterTreeLogger(pw);
logger.setMaxDetail(TreeLogger.WARN);
final String tstDbg1Str = "TEST-DEBUG-STRING-1";
final String tstDbg2Str = "TEST-DEBUG-STRING-2";
final String tstErrStr = "TEST-ERROR-STRING";
// Emit something that's low-priority and wouldn't show up normally unless
// it had a higher-priority child log event.
TreeLogger branch = logger.branch(TreeLogger.DEBUG, tstDbg1Str, null);
assertEquals(-1, sw.toString().indexOf(tstDbg1Str));
// Emit something that's low-priority and wouldn't show up normally unless
// it had a higher-priority child log event.
branch = branch.branch(TreeLogger.DEBUG, tstDbg2Str, null);
assertEquals(-1, sw.toString().indexOf(tstDbg2Str));
// Emit something that's high-priority and will cause both to show up.
branch.log(TreeLogger.ERROR, tstErrStr, null);
// Make sure both are now there, in the right order.
int posTstDbg1Str = sw.toString().indexOf(tstDbg1Str);
int posTstDbg2Str = sw.toString().indexOf(tstDbg2Str);
int posTstErrStr = sw.toString().indexOf(tstErrStr);
assertTrue(posTstDbg1Str != -1);
assertTrue(posTstDbg2Str != -1);
assertTrue(posTstErrStr != -1);
assertTrue(posTstDbg1Str < posTstDbg2Str);
assertTrue(posTstDbg2Str < posTstErrStr);
}
/**
* We handle out-of-memory conditions specially in the logger to provide more
* useful log output. It does some slightly weird stuff like turning a regular
* log() into a branch(), so this test makes sure that doesn't break anything.
*/
public void testOutOfMemoryLoggerCommitOrderForLog() {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
PrintWriterTreeLogger logger = new PrintWriterTreeLogger(pw);
logger.setMaxDetail(TreeLogger.WARN);
final String tstDbgStr = "TEST-DEBUG-STRING";
final String tstErrStr = "TEST-ERROR-STRING";
// Emit something that's low-priority and wouldn't show up normally unless
// it had a higher-priority child log event.
TreeLogger branch = logger.branch(TreeLogger.DEBUG, tstDbgStr, null);
assertEquals(-1, sw.toString().indexOf(tstDbgStr));
// Emit something that's low-priority but that also has a OOM.
branch.log(TreeLogger.ERROR, tstErrStr, new OutOfMemoryError());
// Make sure both are now there, in the right order.
int posTstDbgStr = sw.toString().indexOf(tstDbgStr);
int posTstErrStr = sw.toString().indexOf(tstErrStr);
int posOutOfMemory = sw.toString().indexOf(
AbstractTreeLogger.OUT_OF_MEMORY_MSG);
assertTrue(posTstDbgStr != -1);
assertTrue(posTstErrStr != -1);
assertTrue(posOutOfMemory != -1);
assertTrue(posTstDbgStr < posTstErrStr);
assertTrue(posTstErrStr < posOutOfMemory);
}
/**
* We handle stack overflow conditions specially in the logger to provide more
* useful log output. It does some slightly weird stuff like turning a regular
* log() into a branch(), so this test makes sure that doesn't break anything.
*/
public void testStackOverflowLoggerCommitOrderForLog() {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
PrintWriterTreeLogger logger = new PrintWriterTreeLogger(pw);
logger.setMaxDetail(TreeLogger.WARN);
final String tstDbgStr = "TEST-DEBUG-STRING";
final String tstErrStr = "TEST-ERROR-STRING";
// Emit something that's low-priority and wouldn't show up normally unless
// it had a higher-priority child log event.
TreeLogger branch = logger.branch(TreeLogger.DEBUG, tstDbgStr, null);
assertEquals(-1, sw.toString().indexOf(tstDbgStr));
// Emit something that's low-priority but that also has a OOM.
branch.log(TreeLogger.ERROR, tstErrStr, new StackOverflowError());
// Make sure both are now there, in the right order.
int posTstDbgStr = sw.toString().indexOf(tstDbgStr);
int posTstErrStr = sw.toString().indexOf(tstErrStr);
int posOutOfMemory = sw.toString().indexOf(
AbstractTreeLogger.STACK_OVERFLOW_MSG);
assertTrue(posTstDbgStr != -1);
assertTrue(posTstErrStr != -1);
assertTrue(posOutOfMemory != -1);
assertTrue(posTstDbgStr < posTstErrStr);
assertTrue(posTstErrStr < posOutOfMemory);
}
}