001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     * 
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */ 
017    
018    package org.apache.commons.logging.jdk14;
019    
020    
021    import java.io.ByteArrayInputStream;
022    import java.io.ByteArrayOutputStream;
023    import java.io.ObjectInputStream;
024    import java.io.ObjectOutputStream;
025    
026    import junit.framework.Test;
027    import junit.framework.TestCase;
028    import junit.framework.TestSuite;
029    
030    import org.apache.commons.logging.Log;
031    import org.apache.commons.logging.LogFactory;
032    import org.apache.commons.logging.PathableClassLoader;
033    import org.apache.commons.logging.PathableTestSuite;
034    
035    
036    /**
037     * <p>TestCase for JDK 1.4 logging when running on a JDK 1.4 system with
038     * zero configuration, and with Log4J not present (so JDK 1.4 logging
039     * should be automatically configured.</p>
040     *
041     * @author Craig R. McClanahan
042     * @version $Revision: 427808 $ $Date: 2006-08-02 02:08:20 +0200 (on, 02 aug 2006) $
043     */
044    
045    public class DefaultConfigTestCase extends TestCase {
046    
047    
048        // ----------------------------------------------------------- Constructors
049    
050    
051        /**
052         * <p>Construct a new instance of this test case.</p>
053         *
054         * @param name Name of the test case
055         */
056        public DefaultConfigTestCase(String name) {
057            super(name);
058        }
059    
060    
061        // ----------------------------------------------------- Instance Variables
062    
063    
064        /**
065         * <p>The {@link LogFactory} implementation we have selected.</p>
066         */
067        protected LogFactory factory = null;
068    
069    
070        /**
071         * <p>The {@link Log} implementation we have selected.</p>
072         */
073        protected Log log = null;
074    
075    
076        // ------------------------------------------- JUnit Infrastructure Methods
077    
078    
079        /**
080         * Set up instance variables required by this test case.
081         */
082        public void setUp() throws Exception {
083            setUpFactory();
084            setUpLog("TestLogger");
085        }
086    
087    
088        /**
089         * Return the tests included in this test suite.
090         */
091        public static Test suite() throws Exception {
092            PathableClassLoader loader = new PathableClassLoader(null);
093            loader.useExplicitLoader("junit.", Test.class.getClassLoader());
094            loader.addLogicalLib("testclasses");
095            loader.addLogicalLib("commons-logging");
096            
097            Class testClass = loader.loadClass(DefaultConfigTestCase.class.getName());
098            return new PathableTestSuite(testClass, loader);
099        }
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    }