1   /*
2    * Copyright 2009 minuteFForts
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * the License at
7    * 
8    * http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
15   */
16  package com.minutefforts.test.util.logging;
17  
18  
19  import org.apache.log4j.Logger;
20  import static org.junit.Assert.*;
21  import org.junit.Before;
22  import org.junit.Test;
23  
24  import static com.minutefforts.test.util.logging.UnitTestAppender.*;
25  
26  /**
27   * Unit tests for class {@link UnitTestAppender}.
28   * 
29   * @author Hans-Joachim Belz
30   */
31  public class UnitTestAppenderTest {
32  
33    private Logger logger = Logger.getLogger(UnitTestAppenderTest.class);
34  
35  
36    /**
37     * Unit Test: Tests accessing unit test appenders in various ways.
38     */
39    @Test
40    public void appenderAccess() {
41  
42      // fetch default unit test appender via log4j and the static convenience method
43      UnitTestAppender unitTestAppender = (UnitTestAppender) Logger.getRootLogger().getAppender("unitTestAppender");
44      assertNotNull(unitTestAppender);
45      assertSame("These appenders should be the same.", unitTestAppender, getDefaultTestAppender());
46  
47      // fetch unit test appender with custom name
48      unitTestAppender = (UnitTestAppender) this.logger.getAppender("infoTestAppender");
49      assertNotNull(unitTestAppender);
50      assertSame("These appenders should be the same.", unitTestAppender, getTestAppender("infoTestAppender"));
51    }
52  
53  
54    /**
55     * Unit Test: Some basic logging operations with multiple appenders.
56     */
57    @Test
58    public void someSimpleLogging() {
59  
60      logger.debug("A debug message");
61      logger.info("An info message");
62  
63      assertEquals("INFO   [UnitTestAppenderTest] An info message \n", //
64          getTestAppender("infoTestAppender").getLogAsString());
65  
66      assertEquals("DEBUG  [UnitTestAppenderTest] A debug message \n" + //
67          "INFO   [UnitTestAppenderTest] An info message \n", //
68          getDefaultTestAppender().getLogAsString());
69  
70  
71      // -- uncomment this to have a look at the generated log statements
72      // System.out.println(getDefaultTestAppender().getLogAsString());
73      // System.out.println("-----------------\n");
74      // System.out.println(getTestAppender("infoTestAppender").getLogAsString());
75      // System.out.println("-----------------\n");
76    }
77  
78  
79    /**
80     * Unit Test: Exception logging.
81     */
82    @Test
83    public void exceptionLogging() {
84  
85      logger.debug("Next stop: Error!");
86      logger.error("An error message with an exception.", new NullPointerException("Only sissies test for null!"));
87  
88      assertEquals("DEBUG  [UnitTestAppenderTest] Next stop: Error! \n" + //
89          "ERROR  [UnitTestAppenderTest] An error message with an exception. \n" + //
90          "java.lang.NullPointerException: Only sissies test for null!\n", //
91          getDefaultTestAppender().getLogAsString());
92  
93      assertEquals("ERROR  [UnitTestAppenderTest] An error message with an exception. \n" + //
94          "java.lang.NullPointerException: Only sissies test for null!\n", //
95          getTestAppender("infoTestAppender").getLogAsString());
96  
97  
98      // -- uncomment this to have a look at the generated log statements
99      // System.out.println(getDefaultTestAppender().getLogAsString());
100     // System.out.println("-----------------\n");
101     // System.out.println(getTestAppender("infoTestAppender").getLogAsString());
102     // System.out.println("-----------------\n");
103   }
104 
105 
106   /**
107    * Setup method.
108    * 
109    * @throws java.lang.Exception If something is amiss.
110    */
111   @Before
112   public void setUp() throws Exception {
113 
114     // clear all unit test log appenders before every test execution
115     getDefaultTestAppender().clear();
116     getTestAppender("infoTestAppender").clear();
117   }
118 }