01: // Copyright 2005-2006. Release under the Canoo WebTest license
02: package com.canoo.webtest.self;
03:
04: import com.agical.rmock.extension.junit.RMockTestCase;
05: import org.apache.log4j.Appender;
06: import org.apache.log4j.Level;
07: import org.apache.log4j.Logger;
08:
09: import java.util.Enumeration;
10: import java.util.Iterator;
11: import java.util.LinkedList;
12: import java.util.List;
13:
14: /**
15: * Convenience class for webtest test cases which need to check log information.
16: *
17: * @author Marc Guillemot
18: * @author Denis N. Antonioli
19: */
20: public class LogCatchingTestCase extends RMockTestCase {
21: private BufferingAppender fSpoofAppender;
22: private Level fOldlevel;
23: private Logger fLogger;
24: private List fOldAppenders;
25:
26: protected void tearDownCatchLoggerMessages() {
27: fSpoofAppender.close();
28: fLogger.removeAppender(fSpoofAppender);
29:
30: for (Iterator iter = fOldAppenders.iterator(); iter.hasNext();) {
31: fLogger.addAppender((Appender) iter.next());
32: }
33: fLogger.setLevel(fOldlevel);
34: }
35:
36: protected void setUpCatchLoggerMessages() {
37: fSpoofAppender = new BufferingAppender();
38: fLogger = Logger.getRootLogger();
39:
40: fOldAppenders = new LinkedList();
41: for (Enumeration allAppenders = fLogger.getAllAppenders(); allAppenders
42: .hasMoreElements();) {
43: final Appender appender = (Appender) allAppenders
44: .nextElement();
45:
46: // remove without closing!
47: fLogger.removeAppender(appender);
48: fOldAppenders.add(appender);
49: }
50: fLogger.addAppender(fSpoofAppender);
51:
52: fOldlevel = fLogger.getLevel();
53: fLogger.setLevel(Level.ERROR);
54: }
55:
56: /**
57: * Gets the spoof appender configured in {@link #setUpCatchLoggerMessages()}
58: * to catch the log messages
59: *
60: * @return <code>null</code> if {@link #setUpCatchLoggerMessages()} was not called
61: */
62: protected BufferingAppender getSpoofAppender() {
63: return fSpoofAppender;
64: }
65:
66: }
|