1   package org.naftulin.logwrapper;
2   
3   import java.util.logging.Handler;
4   import java.util.logging.LogRecord;
5   
6   import org.apache.log4j.AppenderSkeleton;
7   import org.apache.log4j.Category;
8   import org.apache.log4j.Level;
9   import org.apache.log4j.Logger;
10  import org.apache.log4j.spi.LoggingEvent;
11  import org.naftulin.logwrapper.JDKLogAdapter;
12  import org.naftulin.logwrapper.Log4JLogAdapter;
13  import org.naftulin.logwrapper.LogAdapter;
14  import org.naftulin.logwrapper.LogLevelAdaptor;
15  
16  import junit.framework.TestCase;
17  
18  public class LogAdapterTest extends TestCase {
19  	/***
20  	 * Tests log adapter class to instantiate a correct logger.
21  	 * Since log4j is in the class path, log4j log adapter should
22  	 * be instantiated.
23  	 */
24  	public void testLogAdapterGetLogger() {
25  		LogAdapter testAdapter = LogAdapter.getLogger(LogAdapterTest.class);
26  		assertNotNull("testAdapter", testAdapter);
27  		assertTrue("testAdapter instanceof Log4JLogAdapter", testAdapter instanceof Log4JLogAdapter);		
28  	}
29  	
30  	/***
31  	 * Tests that the correct log level is applied to the correct log category
32  	 */
33  	public void testLog4JLogAdapter() {
34  		Log4JLogAdapter log = new Log4JLogAdapter(this.getClass());
35  		Category rootCategory = Logger.getRoot();
36  		DummyLog4JAppender myTestAppender = new DummyLog4JAppender();
37  		rootCategory.addAppender(myTestAppender);
38  		
39  		log.log(LogLevelAdaptor.WARN, "test message");		
40  		assertNotNull("event", myTestAppender.event);
41  		assertEquals("log level", Level.WARN, myTestAppender.event.getLevel());
42  		assertEquals("loger name", this.getClass().getName(), myTestAppender.event.getLoggerName());
43  		
44  	}
45  	
46  	/***
47  	 * Tests that the correct log level is applied to the correct log category
48  	 */
49  	public void testJDKLogAdapter() {
50  		JDKLogAdapter log = new JDKLogAdapter(this.getClass());		
51  		java.util.logging.Logger rootLogger = java.util.logging.Logger.global;
52  		while(rootLogger.getParent() != null && rootLogger.getParent() != rootLogger) {
53  			rootLogger = rootLogger.getParent();
54  		}
55  		java.util.logging.Level prevLevel = rootLogger.getLevel();
56  		rootLogger.setLevel(java.util.logging.Level.FINEST);
57  		DummyJDKHadler myTestHandler = new DummyJDKHadler();
58  		rootLogger.addHandler(myTestHandler);
59  		
60  		
61  		//TODO make this test case work
62  		log.log(LogLevelAdaptor.WARN, "test message");		
63  		assertNotNull("record", myTestHandler.record);
64  		assertEquals("log level", java.util.logging.Level.WARNING, myTestHandler.record.getLevel());
65  		assertEquals("loger name", this.getClass().getName(), myTestHandler.record.getLoggerName());
66  		rootLogger.setLevel(prevLevel);
67  	}
68  }
69  
70  class DummyLog4JAppender extends AppenderSkeleton {
71  	LoggingEvent event = null;
72  	protected void append(LoggingEvent arg0) { event = arg0;}
73  	public void close() {}
74  	public boolean requiresLayout() { return false; }
75  };
76  
77  class DummyJDKHadler extends Handler {
78  	LogRecord record = null;
79  	public void publish(LogRecord arg0) { record = arg0; }
80  	public void flush() {}
81  	public void close() {}
82  };