// Copyright 2005-2006. Release under the Canoo WebTest license
package com.canoo.webtest.self;
import com.agical.rmock.extension.junit.RMockTestCase;
import org.apache.log4j.Appender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/**
* Convenience class for webtest test cases which need to check log information.
*
* @author Marc Guillemot
* @author Denis N. Antonioli
*/
public class LogCatchingTestCase extends RMockTestCase {
private BufferingAppender fSpoofAppender;
private Level fOldlevel;
private Logger fLogger;
private List fOldAppenders;
protected void tearDownCatchLoggerMessages() {
fSpoofAppender.close();
fLogger.removeAppender(fSpoofAppender);
for (Iterator iter = fOldAppenders.iterator(); iter.hasNext();) {
fLogger.addAppender((Appender) iter.next());
}
fLogger.setLevel(fOldlevel);
}
protected void setUpCatchLoggerMessages() {
fSpoofAppender = new BufferingAppender();
fLogger = Logger.getRootLogger();
fOldAppenders = new LinkedList();
for (Enumeration allAppenders = fLogger.getAllAppenders(); allAppenders.hasMoreElements();) {
final Appender appender = (Appender) allAppenders.nextElement();
// remove without closing!
fLogger.removeAppender(appender);
fOldAppenders.add(appender);
}
fLogger.addAppender(fSpoofAppender);
fOldlevel = fLogger.getLevel();
fLogger.setLevel(Level.ERROR);
}
/**
* Gets the spoof appender configured in {@link #setUpCatchLoggerMessages()}
* to catch the log messages
*
* @return <code>null</code> if {@link #setUpCatchLoggerMessages()} was not called
*/
protected BufferingAppender getSpoofAppender() {
return fSpoofAppender;
}
}