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.logkit;
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
028 import org.apache.commons.logging.AbstractLogTest;
029 import org.apache.commons.logging.Log;
030 import org.apache.commons.logging.LogFactory;
031 import org.apache.commons.logging.PathableClassLoader;
032 import org.apache.commons.logging.PathableTestSuite;
033 import org.apache.commons.logging.impl.LogKitLogger;
034
035 /**
036 * Basic tests for Avalon LogKit logger adapter.
037 */
038
039 public class StandardTestCase extends AbstractLogTest {
040
041
042 // ----------------------------------------------------- Instance Variables
043
044
045 /**
046 * <p>The {@link LogFactory} implementation we have selected.</p>
047 */
048 protected LogFactory factory = null;
049
050
051 /**
052 * <p>The {@link Log} implementation we have selected.</p>
053 */
054 protected Log log = null;
055
056
057 // ------------------------------------------- JUnit Infrastructure Methods
058
059
060 /**
061 * Return the tests included in this test suite.
062 */
063 public static Test suite() throws Exception {
064 Class thisClass = StandardTestCase.class;
065
066 PathableClassLoader loader = new PathableClassLoader(null);
067 loader.useExplicitLoader("junit.", Test.class.getClassLoader());
068 loader.addLogicalLib("testclasses");
069 loader.addLogicalLib("commons-logging");
070 loader.addLogicalLib("logkit");
071
072 Class testClass = loader.loadClass(thisClass.getName());
073 return new PathableTestSuite(testClass, loader);
074 }
075
076 /**
077 * Set up instance variables required by this test case.
078 */
079 public void setUp() throws Exception {
080 LogFactory.releaseAll();
081
082 System.setProperty(
083 "org.apache.commons.logging.Log",
084 "org.apache.commons.logging.impl.LogKitLogger");
085
086 factory = LogFactory.getFactory();
087 log = LogFactory.getLog("TestLogger");
088 }
089
090 /**
091 * Tear down instance variables required by this test case.
092 */
093 public void tearDown() {
094 log = null;
095 factory = null;
096 LogFactory.releaseAll();
097 }
098
099 // ----------------------------------------------------------- Test Methods
100
101 /**
102 * Override the abstract method from the parent class so that the
103 * inherited tests can access the right Log object type.
104 */
105 public Log getLogObject()
106 {
107 return new LogKitLogger(this.getClass().getName());
108 }
109
110 // Test pristine LogFactory instance
111 public void testPristineFactory() {
112
113 assertNotNull("LogFactory exists", factory);
114 assertEquals("LogFactory class",
115 "org.apache.commons.logging.impl.LogFactoryImpl",
116 factory.getClass().getName());
117
118 String names[] = factory.getAttributeNames();
119 assertNotNull("Names exists", names);
120 assertEquals("Names empty", 0, names.length);
121 }
122
123 // Test pristine Log instance
124 public void testPristineLog() {
125 checkStandard();
126 }
127
128 // Test Serializability of standard instance
129 public void testSerializable() throws Exception {
130 checkStandard();
131
132 // Serialize and deserialize the instance
133 ByteArrayOutputStream baos = new ByteArrayOutputStream();
134 ObjectOutputStream oos = new ObjectOutputStream(baos);
135 oos.writeObject(log);
136 oos.close();
137 ByteArrayInputStream bais =
138 new ByteArrayInputStream(baos.toByteArray());
139 ObjectInputStream ois = new ObjectInputStream(bais);
140 log = (Log) ois.readObject();
141 ois.close();
142
143 checkStandard();
144 }
145
146
147 // -------------------------------------------------------- Support Methods
148
149 // Check the standard log instance
150 protected void checkStandard() {
151
152 assertNotNull("Log exists", log);
153 assertEquals("Log class",
154 "org.apache.commons.logging.impl.LogKitLogger",
155 log.getClass().getName());
156
157 // Can we call level checkers with no exceptions?
158 // Note that by default *everything* is enabled for LogKit
159 assertTrue(log.isTraceEnabled());
160 assertTrue(log.isDebugEnabled());
161 assertTrue(log.isInfoEnabled());
162 assertTrue(log.isWarnEnabled());
163 assertTrue(log.isErrorEnabled());
164 assertTrue(log.isFatalEnabled());
165 }
166 }