1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */ 
17  
18  package org.apache.commons.logging.jdk14;
19  
20  
21  import java.io.ByteArrayInputStream;
22  import java.io.ByteArrayOutputStream;
23  import java.io.ObjectInputStream;
24  import java.io.ObjectOutputStream;
25  
26  import junit.framework.Test;
27  import junit.framework.TestCase;
28  import junit.framework.TestSuite;
29  
30  import org.apache.commons.logging.Log;
31  import org.apache.commons.logging.LogFactory;
32  import org.apache.commons.logging.PathableClassLoader;
33  import org.apache.commons.logging.PathableTestSuite;
34  
35  
36  /**
37   * <p>TestCase for JDK 1.4 logging when running on a JDK 1.4 system with
38   * zero configuration, and with Log4J not present (so JDK 1.4 logging
39   * should be automatically configured.</p>
40   *
41   * @author Craig R. McClanahan
42   * @version $Revision: 427808 $ $Date: 2006-08-02 02:08:20 +0200 (on, 02 aug 2006) $
43   */
44  
45  public class DefaultConfigTestCase extends TestCase {
46  
47  
48      // ----------------------------------------------------------- Constructors
49  
50  
51      /**
52       * <p>Construct a new instance of this test case.</p>
53       *
54       * @param name Name of the test case
55       */
56      public DefaultConfigTestCase(String name) {
57          super(name);
58      }
59  
60  
61      // ----------------------------------------------------- Instance Variables
62  
63  
64      /**
65       * <p>The {@link LogFactory} implementation we have selected.</p>
66       */
67      protected LogFactory factory = null;
68  
69  
70      /**
71       * <p>The {@link Log} implementation we have selected.</p>
72       */
73      protected Log log = null;
74  
75  
76      // ------------------------------------------- JUnit Infrastructure Methods
77  
78  
79      /**
80       * Set up instance variables required by this test case.
81       */
82      public void setUp() throws Exception {
83          setUpFactory();
84          setUpLog("TestLogger");
85      }
86  
87  
88      /**
89       * Return the tests included in this test suite.
90       */
91      public static Test suite() throws Exception {
92          PathableClassLoader loader = new PathableClassLoader(null);
93          loader.useExplicitLoader("junit.", Test.class.getClassLoader());
94          loader.addLogicalLib("testclasses");
95          loader.addLogicalLib("commons-logging");
96          
97          Class testClass = loader.loadClass(DefaultConfigTestCase.class.getName());
98          return new PathableTestSuite(testClass, loader);
99      }
100 
101     /**
102      * Tear down instance variables required by this test case.
103      */
104     public void tearDown() {
105         log = null;
106         factory = null;
107         LogFactory.releaseAll();
108     }
109 
110 
111     // ----------------------------------------------------------- Test Methods
112 
113 
114     // Test pristine Log instance
115     public void testPristineLog() {
116 
117         checkLog();
118 
119     }
120 
121 
122     // Test pristine LogFactory instance
123     public void testPristineFactory() {
124 
125         assertNotNull("LogFactory exists", factory);
126         assertEquals("LogFactory class",
127                      "org.apache.commons.logging.impl.LogFactoryImpl",
128                      factory.getClass().getName());
129 
130         String names[] = factory.getAttributeNames();
131         assertNotNull("Names exists", names);
132         assertEquals("Names empty", 0, names.length);
133 
134     }
135 
136 
137     // Test Serializability of Log instance
138     public void testSerializable() throws Exception {
139 
140         // Serialize and deserialize the instance
141         ByteArrayOutputStream baos = new ByteArrayOutputStream();
142         ObjectOutputStream oos = new ObjectOutputStream(baos);
143         oos.writeObject(log);
144         oos.close();
145         ByteArrayInputStream bais =
146             new ByteArrayInputStream(baos.toByteArray());
147         ObjectInputStream ois = new ObjectInputStream(bais);
148         log = (Log) ois.readObject();
149         ois.close();
150 
151         // Check the characteristics of the resulting object
152         checkLog();
153 
154     }
155 
156 
157     // -------------------------------------------------------- Support Methods
158 
159 
160 
161     // Check the log instance
162     protected void checkLog() {
163 
164         assertNotNull("Log exists", log);
165         assertEquals("Log class",
166                      "org.apache.commons.logging.impl.Jdk14Logger",
167                      log.getClass().getName());
168 
169         // Can we call level checkers with no exceptions?
170         log.isDebugEnabled();
171         log.isErrorEnabled();
172         log.isFatalEnabled();
173         log.isInfoEnabled();
174         log.isTraceEnabled();
175         log.isWarnEnabled();
176 
177     }
178 
179 
180     // Set up factory instance
181     protected void setUpFactory() throws Exception {
182         factory = LogFactory.getFactory();
183     }
184 
185 
186     // Set up log instance
187     protected void setUpLog(String name) throws Exception {
188         log = LogFactory.getLog(name);
189     }
190 
191 
192 }