You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/08/30 13:46:19 UTC

[commons-logging] branch master updated: We don't use author tag, CVS/SVN tags or lots of whitespace

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-logging.git


The following commit(s) were added to refs/heads/master by this push:
     new 5f5affb  We don't use author tag, CVS/SVN tags or lots of whitespace
5f5affb is described below

commit 5f5affb46746c8ad07d7c8e42bf1df80335bf83f
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Aug 30 09:46:14 2022 -0400

    We don't use author tag, CVS/SVN tags or lots of whitespace
    
    Add a space before { when missing
---
 .../apache/commons/logging/AbstractLogTest.java    | 160 ++---
 .../org/apache/commons/logging/LoadTestCase.java   | 443 ++++++------
 .../logging/avalon/AvalonLoggerTestCase.java       |  88 ++-
 .../logging/jdk14/CustomConfigTestCase.java        | 795 ++++++++++-----------
 .../logging/jdk14/DefaultConfigTestCase.java       | 351 ++++-----
 .../apache/commons/logging/jdk14/TestHandler.java  | 126 ++--
 .../logging/simple/CustomConfigTestCase.java       |  39 -
 .../logging/simple/DefaultConfigTestCase.java      |  35 -
 8 files changed, 932 insertions(+), 1105 deletions(-)

diff --git a/src/test/java/org/apache/commons/logging/AbstractLogTest.java b/src/test/java/org/apache/commons/logging/AbstractLogTest.java
index 3ae0222..10c4f70 100644
--- a/src/test/java/org/apache/commons/logging/AbstractLogTest.java
+++ b/src/test/java/org/apache/commons/logging/AbstractLogTest.java
@@ -1,94 +1,66 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.logging;
-
-import junit.framework.TestCase;
-
-
-/**
-  * Generic tests that can be applied to any log adapter by
-  * subclassing this class and defining method getLogObject
-  * appropriately.
-  *
-  * @author Sean C. Sullivan
-  * @version $Revision$
-  */
-public abstract class AbstractLogTest extends TestCase {
-
-    public abstract Log getLogObject();
-
-    public void testLoggingWithNullParameters()
-    {
-        final Log log = this.getLogObject();
-
-        assertNotNull(log);
-
-
-        log.debug(null);
-
-        log.debug(null, null);
-
-        log.debug(log.getClass().getName() + ": debug statement");
-
-        log.debug(log.getClass().getName() + ": debug statement w/ null exception", new RuntimeException());
-
-
-        log.error(null);
-
-        log.error(null, null);
-
-        log.error(log.getClass().getName() + ": error statement");
-
-        log.error(log.getClass().getName() + ": error statement w/ null exception", new RuntimeException());
-
-
-        log.fatal(null);
-
-        log.fatal(null, null);
-
-        log.fatal(log.getClass().getName() + ": fatal statement");
-
-        log.fatal(log.getClass().getName() + ": fatal statement w/ null exception", new RuntimeException());
-
-
-        log.info(null);
-
-        log.info(null, null);
-
-        log.info(log.getClass().getName() + ": info statement");
-
-        log.info(log.getClass().getName() + ": info statement w/ null exception", new RuntimeException());
-
-
-        log.trace(null);
-
-        log.trace(null, null);
-
-        log.trace(log.getClass().getName() + ": trace statement");
-
-        log.trace(log.getClass().getName() + ": trace statement w/ null exception", new RuntimeException());
-
-
-        log.warn(null);
-
-        log.warn(null, null);
-
-        log.warn(log.getClass().getName() + ": warn statement");
-
-        log.warn(log.getClass().getName() + ": warn statement w/ null exception", new RuntimeException());
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.logging;
+
+import junit.framework.TestCase;
+
+
+/**
+  * Generic tests that can be applied to any log adapter by
+  * subclassing this class and defining method getLogObject
+  * appropriately.
+  */
+public abstract class AbstractLogTest extends TestCase {
+
+    public abstract Log getLogObject();
+
+    public void testLoggingWithNullParameters()
+    {
+        final Log log = this.getLogObject();
+        assertNotNull(log);
+
+        log.debug(null);
+        log.debug(null, null);
+        log.debug(log.getClass().getName() + ": debug statement");
+        log.debug(log.getClass().getName() + ": debug statement w/ null exception", new RuntimeException());
+
+        log.error(null);
+        log.error(null, null);
+        log.error(log.getClass().getName() + ": error statement");
+        log.error(log.getClass().getName() + ": error statement w/ null exception", new RuntimeException());
+
+        log.fatal(null);
+        log.fatal(null, null);
+        log.fatal(log.getClass().getName() + ": fatal statement");
+        log.fatal(log.getClass().getName() + ": fatal statement w/ null exception", new RuntimeException());
+
+        log.info(null);
+        log.info(null, null);
+        log.info(log.getClass().getName() + ": info statement");
+        log.info(log.getClass().getName() + ": info statement w/ null exception", new RuntimeException());
+
+        log.trace(null);
+        log.trace(null, null);
+        log.trace(log.getClass().getName() + ": trace statement");
+        log.trace(log.getClass().getName() + ": trace statement w/ null exception", new RuntimeException());
+
+        log.warn(null);
+        log.warn(null, null);
+        log.warn(log.getClass().getName() + ": warn statement");
+        log.warn(log.getClass().getName() + ": warn statement w/ null exception", new RuntimeException());
+    }
+}
diff --git a/src/test/java/org/apache/commons/logging/LoadTestCase.java b/src/test/java/org/apache/commons/logging/LoadTestCase.java
index 625b6c4..abbb227 100644
--- a/src/test/java/org/apache/commons/logging/LoadTestCase.java
+++ b/src/test/java/org/apache/commons/logging/LoadTestCase.java
@@ -1,227 +1,216 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.logging;
-
-import junit.framework.TestCase;
-
-/**
- * testcase to emulate container and application isolated from container
- * @author  baliuka
- */
-public class LoadTestCase extends TestCase{
-    //TODO: need some way to add service provider packages
-    static private String LOG_PCKG[] = {"org.apache.commons.logging",
-                                        "org.apache.commons.logging.impl"};
-
-    /**
-     * A custom classloader which "duplicates" logging classes available
-     * in the parent classloader into itself.
-     * <p>
-     * When asked to load a class that is in one of the LOG_PCKG packages,
-     * it loads the class itself (child-first). This class doesn't need
-     * to be set up with a classpath, as it simply uses the same classpath
-     * as the classloader that loaded it.
-     */
-    static class AppClassLoader extends ClassLoader{
-
-        java.util.Map classes = new java.util.HashMap();
-
-        AppClassLoader(final ClassLoader parent){
-            super(parent);
-        }
-
-        private Class def(final String name)throws ClassNotFoundException{
-
-            Class result = (Class)classes.get(name);
-            if(result != null){
-                return result;
-            }
-
-            try{
-
-                final ClassLoader cl = this.getClass().getClassLoader();
-                final String classFileName = name.replace('.','/') + ".class";
-                final java.io.InputStream is = cl.getResourceAsStream(classFileName);
-                final java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();
-
-                while(is.available() > 0){
-                    out.write(is.read());
-                }
-
-                final byte data [] = out.toByteArray();
-
-                result = super.defineClass(name, data, 0, data.length );
-                classes.put(name,result);
-
-                return result;
-
-            }catch(final java.io.IOException ioe){
-
-                throw new ClassNotFoundException( name + " caused by "
-                + ioe.getMessage() );
-            }
-
-
-        }
-
-        // not very trivial to emulate we must implement "findClass",
-        // but it will delegete to junit class loder first
-        @Override
-        public Class loadClass(final String name)throws ClassNotFoundException{
-
-            //isolates all logging classes, application in the same classloader too.
-            //filters exeptions to simlify handling in test
-            for (final String element : LOG_PCKG) {
-                if( name.startsWith( element ) &&
-                name.indexOf("Exception") == -1   ){
-                    return def(name);
-                }
-            }
-            return super.loadClass(name);
-        }
-
-    }
-
-
-    /**
-     * Call the static setAllowFlawedContext method on the specified class
-     * (expected to be a UserClass loaded via a custom classloader), passing
-     * it the specified state parameter.
-     */
-    private void setAllowFlawedContext(final Class c, final String state) throws Exception {
-        final Class[] params = {String.class};
-        final java.lang.reflect.Method m = c.getDeclaredMethod("setAllowFlawedContext", params);
-        m.invoke(null, state);
-    }
-
-    /**
-     * Test what happens when we play various classloader tricks like those
-     * that happen in web and j2ee containers.
-     * <p>
-     * Note that this test assumes that commons-logging.jar and log4j.jar
-     * are available via the system classpath.
-     */
-    public void testInContainer()throws Exception{
-
-        //problem can be in this step (broken app container or missconfiguration)
-        //1.  Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
-        //2.  Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-        // we expect this :
-        // 1. Thread.currentThread().setContextClassLoader(appLoader);
-        // 2. Thread.currentThread().setContextClassLoader(null);
-
-        // Context classloader is same as class calling into log
-        Class cls = reload();
-        Thread.currentThread().setContextClassLoader(cls.getClassLoader());
-        execute(cls);
-
-        // Context classloader is the "bootclassloader". This is technically
-        // bad, but LogFactoryImpl.ALLOW_FLAWED_CONTEXT defaults to true so
-        // this test should pass.
-        cls = reload();
-        Thread.currentThread().setContextClassLoader(null);
-        execute(cls);
-
-        // Context classloader is the "bootclassloader". This is same as above
-        // except that ALLOW_FLAWED_CONTEXT is set to false; an error should
-        // now be reported.
-        cls = reload();
-        Thread.currentThread().setContextClassLoader(null);
-        try {
-            setAllowFlawedContext(cls, "false");
-            execute(cls);
-            fail("Logging config succeeded when context classloader was null!");
-        } catch(final LogConfigurationException ex) {
-            // expected; the boot classloader doesn't *have* JCL available
-        }
-
-        // Context classloader is the system classloader.
-        //
-        // This is expected to cause problems, as LogFactoryImpl will attempt
-        // to use the system classloader to load the Log4JLogger class, which
-        // will then be unable to cast that object to the Log interface loaded
-        // via the child classloader. However as ALLOW_FLAWED_CONTEXT defaults
-        // to true this test should pass.
-        cls = reload();
-        Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
-        execute(cls);
-
-        // Context classloader is the system classloader. This is the same
-        // as above except that ALLOW_FLAWED_CONTEXT is set to false; an error
-        // should now be reported.
-        cls = reload();
-        Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
-        try {
-            setAllowFlawedContext(cls, "false");
-            execute(cls);
-            fail("Error: somehow downcast a Logger loaded via system classloader"
-                    + " to the Log interface loaded via a custom classloader");
-        } catch(final LogConfigurationException ex) {
-            // expected
-        }
-    }
-
-    /**
-     * Load class UserClass via a temporary classloader which is a child of
-     * the classloader used to load this test class.
-     */
-    private Class reload()throws Exception{
-
-        Class testObjCls = null;
-
-        final AppClassLoader appLoader = new AppClassLoader(
-                this.getClass().getClassLoader());
-        try{
-
-            testObjCls = appLoader.loadClass(UserClass.class.getName());
-
-        }catch(final ClassNotFoundException cnfe){
-            throw cnfe;
-        }catch(final Throwable t){
-            t.printStackTrace();
-            fail("AppClassLoader failed ");
-        }
-
-        assertSame("app isolated", testObjCls.getClassLoader(), appLoader);
-
-
-        return testObjCls;
-
-
-    }
-
-
-    private void execute(final Class cls)throws Exception{
-
-            cls.newInstance();
-
-    }
-
-    @Override
-    public void setUp() {
-        // save state before test starts so we can restore it when test ends
-        origContextClassLoader = Thread.currentThread().getContextClassLoader();
-    }
-
-    @Override
-    public void tearDown() {
-        // restore original state so a test can't stuff up later tests.
-        Thread.currentThread().setContextClassLoader(origContextClassLoader);
-    }
-
-    private ClassLoader origContextClassLoader;
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.logging;
+
+import junit.framework.TestCase;
+
+/**
+ * testcase to emulate container and application isolated from container
+ */
+public class LoadTestCase extends TestCase{
+    //TODO: need some way to add service provider packages
+    static private String LOG_PCKG[] = {"org.apache.commons.logging",
+                                        "org.apache.commons.logging.impl"};
+
+    /**
+     * A custom classloader which "duplicates" logging classes available
+     * in the parent classloader into itself.
+     * <p>
+     * When asked to load a class that is in one of the LOG_PCKG packages,
+     * it loads the class itself (child-first). This class doesn't need
+     * to be set up with a classpath, as it simply uses the same classpath
+     * as the classloader that loaded it.
+     */
+    static class AppClassLoader extends ClassLoader {
+
+        java.util.Map classes = new java.util.HashMap();
+
+        AppClassLoader(final ClassLoader parent) {
+            super(parent);
+        }
+
+        private Class def(final String name) throws ClassNotFoundException {
+
+            Class result = (Class) classes.get(name);
+            if (result != null) {
+                return result;
+            }
+
+            try {
+
+                final ClassLoader cl = this.getClass().getClassLoader();
+                final String classFileName = name.replace('.', '/') + ".class";
+                final java.io.InputStream is = cl.getResourceAsStream(classFileName);
+                final java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();
+
+                while (is.available() > 0) {
+                    out.write(is.read());
+                }
+
+                final byte data[] = out.toByteArray();
+
+                result = super.defineClass(name, data, 0, data.length);
+                classes.put(name, result);
+
+                return result;
+
+            } catch (final java.io.IOException ioe) {
+
+                throw new ClassNotFoundException(name + " caused by " + ioe.getMessage());
+            }
+
+        }
+
+        // not very trivial to emulate we must implement "findClass",
+        // but it will delegete to junit class loder first
+        @Override
+        public Class loadClass(final String name) throws ClassNotFoundException {
+
+            // isolates all logging classes, application in the same classloader too.
+            // filters exeptions to simlify handling in test
+            for (final String element : LOG_PCKG) {
+                if (name.startsWith(element) && name.indexOf("Exception") == -1) {
+                    return def(name);
+                }
+            }
+            return super.loadClass(name);
+        }
+
+    }
+
+
+    /**
+     * Call the static setAllowFlawedContext method on the specified class
+     * (expected to be a UserClass loaded via a custom classloader), passing
+     * it the specified state parameter.
+     */
+    private void setAllowFlawedContext(final Class c, final String state) throws Exception {
+        final Class[] params = {String.class};
+        final java.lang.reflect.Method m = c.getDeclaredMethod("setAllowFlawedContext", params);
+        m.invoke(null, state);
+    }
+
+    /**
+     * Test what happens when we play various classloader tricks like those
+     * that happen in web and j2ee containers.
+     * <p>
+     * Note that this test assumes that commons-logging.jar and log4j.jar
+     * are available via the system classpath.
+     */
+    public void testInContainer()throws Exception{
+
+        //problem can be in this step (broken app container or missconfiguration)
+        //1.  Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
+        //2.  Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+        // we expect this :
+        // 1. Thread.currentThread().setContextClassLoader(appLoader);
+        // 2. Thread.currentThread().setContextClassLoader(null);
+
+        // Context classloader is same as class calling into log
+        Class cls = reload();
+        Thread.currentThread().setContextClassLoader(cls.getClassLoader());
+        execute(cls);
+
+        // Context classloader is the "bootclassloader". This is technically
+        // bad, but LogFactoryImpl.ALLOW_FLAWED_CONTEXT defaults to true so
+        // this test should pass.
+        cls = reload();
+        Thread.currentThread().setContextClassLoader(null);
+        execute(cls);
+
+        // Context classloader is the "bootclassloader". This is same as above
+        // except that ALLOW_FLAWED_CONTEXT is set to false; an error should
+        // now be reported.
+        cls = reload();
+        Thread.currentThread().setContextClassLoader(null);
+        try {
+            setAllowFlawedContext(cls, "false");
+            execute(cls);
+            fail("Logging config succeeded when context classloader was null!");
+        } catch(final LogConfigurationException ex) {
+            // expected; the boot classloader doesn't *have* JCL available
+        }
+
+        // Context classloader is the system classloader.
+        //
+        // This is expected to cause problems, as LogFactoryImpl will attempt
+        // to use the system classloader to load the Log4JLogger class, which
+        // will then be unable to cast that object to the Log interface loaded
+        // via the child classloader. However as ALLOW_FLAWED_CONTEXT defaults
+        // to true this test should pass.
+        cls = reload();
+        Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
+        execute(cls);
+
+        // Context classloader is the system classloader. This is the same
+        // as above except that ALLOW_FLAWED_CONTEXT is set to false; an error
+        // should now be reported.
+        cls = reload();
+        Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
+        try {
+            setAllowFlawedContext(cls, "false");
+            execute(cls);
+            fail("Error: somehow downcast a Logger loaded via system classloader"
+                    + " to the Log interface loaded via a custom classloader");
+        } catch(final LogConfigurationException ex) {
+            // expected
+        }
+    }
+
+    /**
+     * Load class UserClass via a temporary classloader which is a child of
+     * the classloader used to load this test class.
+     */
+    private Class reload() throws Exception {
+        Class testObjCls = null;
+        final AppClassLoader appLoader = new AppClassLoader(this.getClass().getClassLoader());
+        try {
+
+            testObjCls = appLoader.loadClass(UserClass.class.getName());
+
+        } catch (final ClassNotFoundException cnfe) {
+            throw cnfe;
+        } catch (final Throwable t) {
+            t.printStackTrace();
+            fail("AppClassLoader failed ");
+        }
+
+        assertSame("app isolated", testObjCls.getClassLoader(), appLoader);
+
+        return testObjCls;
+
+    }
+
+
+    private void execute(final Class cls) throws Exception {
+        cls.newInstance();
+    }
+
+    @Override
+    public void setUp() {
+        // save state before test starts so we can restore it when test ends
+        origContextClassLoader = Thread.currentThread().getContextClassLoader();
+    }
+
+    @Override
+    public void tearDown() {
+        // restore original state so a test can't stuff up later tests.
+        Thread.currentThread().setContextClassLoader(origContextClassLoader);
+    }
+
+    private ClassLoader origContextClassLoader;
+}
diff --git a/src/test/java/org/apache/commons/logging/avalon/AvalonLoggerTestCase.java b/src/test/java/org/apache/commons/logging/avalon/AvalonLoggerTestCase.java
index c408d5a..bce0a85 100644
--- a/src/test/java/org/apache/commons/logging/avalon/AvalonLoggerTestCase.java
+++ b/src/test/java/org/apache/commons/logging/avalon/AvalonLoggerTestCase.java
@@ -1,45 +1,43 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.logging.avalon;
-
-import org.apache.avalon.framework.logger.NullLogger;
-import org.apache.commons.logging.impl.AvalonLogger;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.AbstractLogTest;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
- * @version $Revision$ $Date$
- */
-public class AvalonLoggerTestCase extends AbstractLogTest {
-
-    public static Test suite() {
-        final TestSuite suite = new TestSuite();
-        suite.addTestSuite(AvalonLoggerTestCase.class);
-        return suite;
-    }
-
-    @Override
-    public Log getLogObject() {
-        // Output does not seem to be used, so don't display it.
-        final Log log = new AvalonLogger(new NullLogger());
-        return log;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.logging.avalon;
+
+import org.apache.avalon.framework.logger.NullLogger;
+import org.apache.commons.logging.impl.AvalonLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.AbstractLogTest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ */
+public class AvalonLoggerTestCase extends AbstractLogTest {
+
+    public static Test suite() {
+        final TestSuite suite = new TestSuite();
+        suite.addTestSuite(AvalonLoggerTestCase.class);
+        return suite;
+    }
+
+    @Override
+    public Log getLogObject() {
+        // Output does not seem to be used, so don't display it.
+        final Log log = new AvalonLogger(new NullLogger());
+        return log;
+    }
+}
diff --git a/src/test/java/org/apache/commons/logging/jdk14/CustomConfigTestCase.java b/src/test/java/org/apache/commons/logging/jdk14/CustomConfigTestCase.java
index 72d6ca6..9d058e8 100644
--- a/src/test/java/org/apache/commons/logging/jdk14/CustomConfigTestCase.java
+++ b/src/test/java/org/apache/commons/logging/jdk14/CustomConfigTestCase.java
@@ -1,399 +1,396 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.logging.jdk14;
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.LogManager;
-import java.util.logging.LogRecord;
-import java.util.logging.Logger;
-
-import junit.framework.Test;
-
-import org.apache.commons.logging.DummyException;
-import org.apache.commons.logging.PathableClassLoader;
-import org.apache.commons.logging.PathableTestSuite;
-
-
-/**
- * <p>TestCase for JDK 1.4 logging when running on a JDK 1.4 system with
- * custom configuration, so that JDK 1.4 should be selected and an appropriate
- * logger configured per the configuration properties.</p>
- *
- * @author Craig R. McClanahan
- * @version $Revision$ $Date$
- */
-
-public class CustomConfigTestCase extends DefaultConfigTestCase {
-
-    protected static final String HANDLER_NAME = "org.apache.commons.logging.jdk14.TestHandler";
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Construct a new instance of this test case.</p>
-     *
-     * @param name Name of the test case
-     */
-    public CustomConfigTestCase(final String name) {
-        super(name);
-    }
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    /**
-     * <p>The customized {@code Handler} we will be using.</p>
-     */
-    protected TestHandler handler;
-
-
-    /**
-     * <p>The underlying {@code Handler}s we will be using.</p>
-     */
-    protected Handler handlers[];
-
-
-    /**
-     * <p>The underlying {@code Logger} we will be using.</p>
-     */
-    protected Logger logger;
-
-
-    /**
-     * <p>The underlying {@code LogManager} we will be using.</p>
-     */
-    protected LogManager manager;
-
-
-    /**
-     * <p>The message levels that should have been logged.</p>
-     */
-    protected Level testLevels[] =
-    { Level.FINE, Level.INFO, Level.WARNING, Level.SEVERE, Level.SEVERE };
-
-
-    /**
-     * <p>The message strings that should have been logged.</p>
-     */
-    protected String testMessages[] =
-    { "debug", "info", "warn", "error", "fatal" };
-
-
-    // ------------------------------------------- JUnit Infrastructure Methods
-
-
-    /**
-     * Given the name of a class that is somewhere in the classpath of the provided
-     * classloader, return the contents of the corresponding .class file.
-     */
-    protected static byte[] readClass(final String name, final ClassLoader srcCL) throws Exception {
-        final String resName = name.replace('.', '/') + ".class";
-        System.err.println("Trying to load resource [" + resName + "]");
-        final InputStream is = srcCL.getResourceAsStream(resName);
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        System.err.println("Reading resource [" + resName + "]");
-        final byte[] buf = new byte[1000];
-        for(;;) {
-            final int read = is.read(buf);
-            if (read <= 0) {
-                break;
-            }
-            baos.write(buf, 0, read);
-        }
-        is.close();
-        return baos.toByteArray();
-    }
-
-    /**
-     * Make a class available in the system classloader even when its classfile is
-     * not present in the classpath configured for that classloader. This only
-     * works for classes for which all dependencies are already loaded in
-     * that classloader.
-     */
-    protected static void loadTestHandler(final String className, final ClassLoader targetCL) {
-        try {
-            targetCL.loadClass(className);
-            // fail("Class already in target classloader");
-            return;
-        } catch(final ClassNotFoundException ex) {
-            // ok, go ahead and load it
-        }
-
-        try {
-            final ClassLoader srcCL = CustomConfigAPITestCase.class.getClassLoader();
-            final byte[] classData = readClass(className, srcCL);
-
-            final Class[] params = new Class[] { String.class, classData.getClass(), Integer.TYPE, Integer.TYPE };
-            final Method m = ClassLoader.class.getDeclaredMethod("defineClass", params);
-
-            final Object[] args = new Object[4];
-            args[0] = className;
-            args[1] = classData;
-            args[2] = new Integer(0);
-            args[3] = new Integer(classData.length);
-            m.setAccessible(true);
-            m.invoke(targetCL, args);
-        } catch(final Exception e) {
-            e.printStackTrace();
-            fail("Unable to load class " + className);
-        }
-    }
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    @Override
-    public void setUp() throws Exception {
-        setUpManager
-            ("org/apache/commons/logging/jdk14/CustomConfig.properties");
-        setUpLogger(this.getClass().getName());
-        setUpHandlers();
-        setUpFactory();
-        setUpLog(this.getClass().getName());
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() throws Exception {
-        final PathableClassLoader cl = new PathableClassLoader(null);
-        cl.useExplicitLoader("junit.", Test.class.getClassLoader());
-
-        // the TestHandler class must be accessable from the System classloader
-        // in order for java.util.logging.LogManager.readConfiguration to
-        // be able to instantiate it. And this test case must see the same
-        // class in order to be able to access its data. Yes this is ugly
-        // but the whole jdk14 API is a ******* mess anyway.
-        final ClassLoader scl = ClassLoader.getSystemClassLoader();
-        loadTestHandler(HANDLER_NAME, scl);
-        cl.useExplicitLoader(HANDLER_NAME, scl);
-        cl.addLogicalLib("commons-logging");
-        cl.addLogicalLib("testclasses");
-
-        final Class testClass = cl.loadClass(CustomConfigTestCase.class.getName());
-        return new PathableTestSuite(testClass, cl);
-    }
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    @Override
-    public void tearDown() {
-        super.tearDown();
-        handlers = null;
-        logger = null;
-        manager = null;
-    }
-
-
-    // ----------------------------------------------------------- Test Methods
-
-
-    // Test logging message strings with exceptions
-    public void testExceptionMessages() throws Exception {
-
-        logExceptionMessages();
-        checkLogRecords(true);
-
-    }
-
-
-    // Test logging plain message strings
-    public void testPlainMessages() throws Exception {
-
-        logPlainMessages();
-        checkLogRecords(false);
-
-    }
-
-
-    // Test pristine Handlers instances
-    public void testPristineHandlers() {
-
-        assertNotNull(handlers);
-        assertEquals(1, handlers.length);
-        assertTrue(handlers[0] instanceof TestHandler);
-        assertNotNull(handler);
-
-    }
-
-
-    // Test pristine Logger instance
-    public void testPristineLogger() {
-
-        assertNotNull("Logger exists", logger);
-        assertEquals("Logger name", this.getClass().getName(), logger.getName());
-
-        // Assert which logging levels have been enabled
-        assertTrue(logger.isLoggable(Level.SEVERE));
-        assertTrue(logger.isLoggable(Level.WARNING));
-        assertTrue(logger.isLoggable(Level.INFO));
-        assertTrue(logger.isLoggable(Level.CONFIG));
-        assertTrue(logger.isLoggable(Level.FINE));
-        assertFalse(logger.isLoggable(Level.FINER));
-        assertFalse(logger.isLoggable(Level.FINEST));
-
-    }
-
-
-    // Test Serializability of Log instance
-    @Override
-    public void testSerializable() throws Exception {
-
-        super.testSerializable();
-        testExceptionMessages();
-
-    }
-
-
-    // -------------------------------------------------------- Support Methods
-
-
-    // Check the log instance
-    @Override
-    protected void checkLog() {
-
-        assertNotNull("Log exists", log);
-        assertEquals("Log class",
-                     "org.apache.commons.logging.impl.Jdk14Logger",
-                     log.getClass().getName());
-
-        // Assert which logging levels have been enabled
-        assertTrue(log.isFatalEnabled());
-        assertTrue(log.isErrorEnabled());
-        assertTrue(log.isWarnEnabled());
-        assertTrue(log.isInfoEnabled());
-        assertTrue(log.isDebugEnabled());
-        assertFalse(log.isTraceEnabled());
-
-    }
-
-
-    // Check the recorded messages
-    protected void checkLogRecords(final boolean thrown) {
-        final Iterator records = handler.records();
-        for (int i = 0; i < testMessages.length; i++) {
-            assertTrue(records.hasNext());
-            final LogRecord record = (LogRecord) records.next();
-            assertEquals("LogRecord level",
-                         testLevels[i], record.getLevel());
-            assertEquals("LogRecord message",
-                         testMessages[i], record.getMessage());
-            assertTrue("LogRecord class",
-                         record.getSourceClassName().startsWith(
-                                 "org.apache.commons.logging.jdk14.CustomConfig"));
-            if (thrown) {
-                assertEquals("LogRecord method",
-                             "logExceptionMessages",
-                             record.getSourceMethodName());
-            } else {
-                assertEquals("LogRecord method",
-                             "logPlainMessages",
-                             record.getSourceMethodName());
-            }
-            if (thrown) {
-                assertNotNull("LogRecord thrown", record.getThrown());
-                assertTrue("LogRecord thrown type",
-                           record.getThrown() instanceof DummyException);
-            } else {
-                assertNull("LogRecord thrown",
-                           record.getThrown());
-            }
-        }
-        assertFalse(records.hasNext());
-        handler.flush();
-    }
-
-
-    // Log the messages with exceptions
-    protected void logExceptionMessages() {
-        final Throwable t = new DummyException();
-        log.trace("trace", t); // Should not actually get logged
-        log.debug("debug", t);
-        log.info("info", t);
-        log.warn("warn", t);
-        log.error("error", t);
-        log.fatal("fatal", t);
-    }
-
-
-    // Log the plain messages
-    protected void logPlainMessages() {
-        log.trace("trace"); // Should not actually get logged
-        log.debug("debug");
-        log.info("info");
-        log.warn("warn");
-        log.error("error");
-        log.fatal("fatal");
-    }
-
-
-    // Set up handlers instance
-    protected void setUpHandlers() throws Exception {
-        Logger parent = logger;
-        while (parent.getParent() != null) {
-            parent = parent.getParent();
-        }
-        handlers = parent.getHandlers();
-
-        // The CustomConfig.properties file explicitly defines one handler class
-        // to be attached to the root logger, so if it isn't there then
-        // something is badly wrong...
-        //
-        // Yes this testing is also done in testPristineHandlers but
-        // unfortunately:
-        //  * we need to set up the handlers variable here,
-        //  * we don't want that to be set up incorrectly, as that can
-        //    produce weird error messages in other tests, and
-        //  * we can't rely on testPristineHandlers being the first
-        //    test to run.
-        // so we need to test things here too.
-        assertNotNull("No Handlers defined for JDK14 logging", handlers);
-        assertEquals("Unexpected number of handlers for JDK14 logging", 1, handlers.length);
-        assertNotNull("Handler is null", handlers[0]);
-        assertTrue("Handler not of expected type", handlers[0] instanceof TestHandler);
-        handler = (TestHandler) handlers[0];
-    }
-
-
-    // Set up logger instance
-    protected void setUpLogger(final String name) throws Exception {
-        logger = Logger.getLogger(name);
-    }
-
-
-    // Set up LogManager instance
-    protected void setUpManager(final String config) throws Exception {
-        manager = LogManager.getLogManager();
-        final InputStream is =
-            this.getClass().getClassLoader().getResourceAsStream(config);
-        manager.readConfiguration(is);
-        is.close();
-    }
-
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.logging.jdk14;
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+import junit.framework.Test;
+
+import org.apache.commons.logging.DummyException;
+import org.apache.commons.logging.PathableClassLoader;
+import org.apache.commons.logging.PathableTestSuite;
+
+
+/**
+ * <p>TestCase for JDK 1.4 logging when running on a JDK 1.4 system with
+ * custom configuration, so that JDK 1.4 should be selected and an appropriate
+ * logger configured per the configuration properties.</p>
+ */
+
+public class CustomConfigTestCase extends DefaultConfigTestCase {
+
+    protected static final String HANDLER_NAME = "org.apache.commons.logging.jdk14.TestHandler";
+
+    // ----------------------------------------------------------- Constructors
+
+
+    /**
+     * <p>Construct a new instance of this test case.</p>
+     *
+     * @param name Name of the test case
+     */
+    public CustomConfigTestCase(final String name) {
+        super(name);
+    }
+
+
+    // ----------------------------------------------------- Instance Variables
+
+
+    /**
+     * <p>The customized {@code Handler} we will be using.</p>
+     */
+    protected TestHandler handler;
+
+
+    /**
+     * <p>The underlying {@code Handler}s we will be using.</p>
+     */
+    protected Handler handlers[];
+
+
+    /**
+     * <p>The underlying {@code Logger} we will be using.</p>
+     */
+    protected Logger logger;
+
+
+    /**
+     * <p>The underlying {@code LogManager} we will be using.</p>
+     */
+    protected LogManager manager;
+
+
+    /**
+     * <p>The message levels that should have been logged.</p>
+     */
+    protected Level testLevels[] =
+    { Level.FINE, Level.INFO, Level.WARNING, Level.SEVERE, Level.SEVERE };
+
+
+    /**
+     * <p>The message strings that should have been logged.</p>
+     */
+    protected String testMessages[] =
+    { "debug", "info", "warn", "error", "fatal" };
+
+
+    // ------------------------------------------- JUnit Infrastructure Methods
+
+
+    /**
+     * Given the name of a class that is somewhere in the classpath of the provided
+     * classloader, return the contents of the corresponding .class file.
+     */
+    protected static byte[] readClass(final String name, final ClassLoader srcCL) throws Exception {
+        final String resName = name.replace('.', '/') + ".class";
+        System.err.println("Trying to load resource [" + resName + "]");
+        final InputStream is = srcCL.getResourceAsStream(resName);
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        System.err.println("Reading resource [" + resName + "]");
+        final byte[] buf = new byte[1000];
+        for(;;) {
+            final int read = is.read(buf);
+            if (read <= 0) {
+                break;
+            }
+            baos.write(buf, 0, read);
+        }
+        is.close();
+        return baos.toByteArray();
+    }
+
+    /**
+     * Make a class available in the system classloader even when its classfile is
+     * not present in the classpath configured for that classloader. This only
+     * works for classes for which all dependencies are already loaded in
+     * that classloader.
+     */
+    protected static void loadTestHandler(final String className, final ClassLoader targetCL) {
+        try {
+            targetCL.loadClass(className);
+            // fail("Class already in target classloader");
+            return;
+        } catch(final ClassNotFoundException ex) {
+            // ok, go ahead and load it
+        }
+
+        try {
+            final ClassLoader srcCL = CustomConfigAPITestCase.class.getClassLoader();
+            final byte[] classData = readClass(className, srcCL);
+
+            final Class[] params = new Class[] { String.class, classData.getClass(), Integer.TYPE, Integer.TYPE };
+            final Method m = ClassLoader.class.getDeclaredMethod("defineClass", params);
+
+            final Object[] args = new Object[4];
+            args[0] = className;
+            args[1] = classData;
+            args[2] = new Integer(0);
+            args[3] = new Integer(classData.length);
+            m.setAccessible(true);
+            m.invoke(targetCL, args);
+        } catch(final Exception e) {
+            e.printStackTrace();
+            fail("Unable to load class " + className);
+        }
+    }
+
+    /**
+     * Set up instance variables required by this test case.
+     */
+    @Override
+    public void setUp() throws Exception {
+        setUpManager
+            ("org/apache/commons/logging/jdk14/CustomConfig.properties");
+        setUpLogger(this.getClass().getName());
+        setUpHandlers();
+        setUpFactory();
+        setUpLog(this.getClass().getName());
+    }
+
+
+    /**
+     * Return the tests included in this test suite.
+     */
+    public static Test suite() throws Exception {
+        final PathableClassLoader cl = new PathableClassLoader(null);
+        cl.useExplicitLoader("junit.", Test.class.getClassLoader());
+
+        // the TestHandler class must be accessable from the System classloader
+        // in order for java.util.logging.LogManager.readConfiguration to
+        // be able to instantiate it. And this test case must see the same
+        // class in order to be able to access its data. Yes this is ugly
+        // but the whole jdk14 API is a ******* mess anyway.
+        final ClassLoader scl = ClassLoader.getSystemClassLoader();
+        loadTestHandler(HANDLER_NAME, scl);
+        cl.useExplicitLoader(HANDLER_NAME, scl);
+        cl.addLogicalLib("commons-logging");
+        cl.addLogicalLib("testclasses");
+
+        final Class testClass = cl.loadClass(CustomConfigTestCase.class.getName());
+        return new PathableTestSuite(testClass, cl);
+    }
+
+    /**
+     * Tear down instance variables required by this test case.
+     */
+    @Override
+    public void tearDown() {
+        super.tearDown();
+        handlers = null;
+        logger = null;
+        manager = null;
+    }
+
+
+    // ----------------------------------------------------------- Test Methods
+
+
+    // Test logging message strings with exceptions
+    public void testExceptionMessages() throws Exception {
+
+        logExceptionMessages();
+        checkLogRecords(true);
+
+    }
+
+
+    // Test logging plain message strings
+    public void testPlainMessages() throws Exception {
+
+        logPlainMessages();
+        checkLogRecords(false);
+
+    }
+
+
+    // Test pristine Handlers instances
+    public void testPristineHandlers() {
+
+        assertNotNull(handlers);
+        assertEquals(1, handlers.length);
+        assertTrue(handlers[0] instanceof TestHandler);
+        assertNotNull(handler);
+
+    }
+
+
+    // Test pristine Logger instance
+    public void testPristineLogger() {
+
+        assertNotNull("Logger exists", logger);
+        assertEquals("Logger name", this.getClass().getName(), logger.getName());
+
+        // Assert which logging levels have been enabled
+        assertTrue(logger.isLoggable(Level.SEVERE));
+        assertTrue(logger.isLoggable(Level.WARNING));
+        assertTrue(logger.isLoggable(Level.INFO));
+        assertTrue(logger.isLoggable(Level.CONFIG));
+        assertTrue(logger.isLoggable(Level.FINE));
+        assertFalse(logger.isLoggable(Level.FINER));
+        assertFalse(logger.isLoggable(Level.FINEST));
+
+    }
+
+
+    // Test Serializability of Log instance
+    @Override
+    public void testSerializable() throws Exception {
+
+        super.testSerializable();
+        testExceptionMessages();
+
+    }
+
+
+    // -------------------------------------------------------- Support Methods
+
+
+    // Check the log instance
+    @Override
+    protected void checkLog() {
+
+        assertNotNull("Log exists", log);
+        assertEquals("Log class",
+                     "org.apache.commons.logging.impl.Jdk14Logger",
+                     log.getClass().getName());
+
+        // Assert which logging levels have been enabled
+        assertTrue(log.isFatalEnabled());
+        assertTrue(log.isErrorEnabled());
+        assertTrue(log.isWarnEnabled());
+        assertTrue(log.isInfoEnabled());
+        assertTrue(log.isDebugEnabled());
+        assertFalse(log.isTraceEnabled());
+
+    }
+
+
+    // Check the recorded messages
+    protected void checkLogRecords(final boolean thrown) {
+        final Iterator records = handler.records();
+        for (int i = 0; i < testMessages.length; i++) {
+            assertTrue(records.hasNext());
+            final LogRecord record = (LogRecord) records.next();
+            assertEquals("LogRecord level",
+                         testLevels[i], record.getLevel());
+            assertEquals("LogRecord message",
+                         testMessages[i], record.getMessage());
+            assertTrue("LogRecord class",
+                         record.getSourceClassName().startsWith(
+                                 "org.apache.commons.logging.jdk14.CustomConfig"));
+            if (thrown) {
+                assertEquals("LogRecord method",
+                             "logExceptionMessages",
+                             record.getSourceMethodName());
+            } else {
+                assertEquals("LogRecord method",
+                             "logPlainMessages",
+                             record.getSourceMethodName());
+            }
+            if (thrown) {
+                assertNotNull("LogRecord thrown", record.getThrown());
+                assertTrue("LogRecord thrown type",
+                           record.getThrown() instanceof DummyException);
+            } else {
+                assertNull("LogRecord thrown",
+                           record.getThrown());
+            }
+        }
+        assertFalse(records.hasNext());
+        handler.flush();
+    }
+
+
+    // Log the messages with exceptions
+    protected void logExceptionMessages() {
+        final Throwable t = new DummyException();
+        log.trace("trace", t); // Should not actually get logged
+        log.debug("debug", t);
+        log.info("info", t);
+        log.warn("warn", t);
+        log.error("error", t);
+        log.fatal("fatal", t);
+    }
+
+
+    // Log the plain messages
+    protected void logPlainMessages() {
+        log.trace("trace"); // Should not actually get logged
+        log.debug("debug");
+        log.info("info");
+        log.warn("warn");
+        log.error("error");
+        log.fatal("fatal");
+    }
+
+
+    // Set up handlers instance
+    protected void setUpHandlers() throws Exception {
+        Logger parent = logger;
+        while (parent.getParent() != null) {
+            parent = parent.getParent();
+        }
+        handlers = parent.getHandlers();
+
+        // The CustomConfig.properties file explicitly defines one handler class
+        // to be attached to the root logger, so if it isn't there then
+        // something is badly wrong...
+        //
+        // Yes this testing is also done in testPristineHandlers but
+        // unfortunately:
+        //  * we need to set up the handlers variable here,
+        //  * we don't want that to be set up incorrectly, as that can
+        //    produce weird error messages in other tests, and
+        //  * we can't rely on testPristineHandlers being the first
+        //    test to run.
+        // so we need to test things here too.
+        assertNotNull("No Handlers defined for JDK14 logging", handlers);
+        assertEquals("Unexpected number of handlers for JDK14 logging", 1, handlers.length);
+        assertNotNull("Handler is null", handlers[0]);
+        assertTrue("Handler not of expected type", handlers[0] instanceof TestHandler);
+        handler = (TestHandler) handlers[0];
+    }
+
+
+    // Set up logger instance
+    protected void setUpLogger(final String name) throws Exception {
+        logger = Logger.getLogger(name);
+    }
+
+
+    // Set up LogManager instance
+    protected void setUpManager(final String config) throws Exception {
+        manager = LogManager.getLogManager();
+        final InputStream is =
+            this.getClass().getClassLoader().getResourceAsStream(config);
+        manager.readConfiguration(is);
+        is.close();
+    }
+
+
+}
diff --git a/src/test/java/org/apache/commons/logging/jdk14/DefaultConfigTestCase.java b/src/test/java/org/apache/commons/logging/jdk14/DefaultConfigTestCase.java
index 4d0c633..05f9c4d 100644
--- a/src/test/java/org/apache/commons/logging/jdk14/DefaultConfigTestCase.java
+++ b/src/test/java/org/apache/commons/logging/jdk14/DefaultConfigTestCase.java
@@ -1,193 +1,158 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.logging.jdk14;
-
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.logging.PathableClassLoader;
-import org.apache.commons.logging.PathableTestSuite;
-
-
-/**
- * <p>TestCase for JDK 1.4 logging when running on a JDK 1.4 system with
- * zero configuration, and with Log4J not present (so JDK 1.4 logging
- * should be automatically configured.</p>
- *
- * @author Craig R. McClanahan
- * @version $Revision$ $Date$
- */
-
-public class DefaultConfigTestCase extends TestCase {
-
-
-    // ----------------------------------------------------------- Constructors
-
-
-    /**
-     * <p>Construct a new instance of this test case.</p>
-     *
-     * @param name Name of the test case
-     */
-    public DefaultConfigTestCase(final String name) {
-        super(name);
-    }
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    /**
-     * <p>The {@link LogFactory} implementation we have selected.</p>
-     */
-    protected LogFactory factory;
-
-
-    /**
-     * <p>The {@link Log} implementation we have selected.</p>
-     */
-    protected Log log;
-
-
-    // ------------------------------------------- JUnit Infrastructure Methods
-
-
-    /**
-     * Set up instance variables required by this test case.
-     */
-    @Override
-    public void setUp() throws Exception {
-        setUpFactory();
-        setUpLog("TestLogger");
-    }
-
-
-    /**
-     * Return the tests included in this test suite.
-     */
-    public static Test suite() throws Exception {
-        final PathableClassLoader loader = new PathableClassLoader(null);
-        loader.useExplicitLoader("junit.", Test.class.getClassLoader());
-        loader.addLogicalLib("testclasses");
-        loader.addLogicalLib("commons-logging");
-
-        final Class testClass = loader.loadClass(DefaultConfigTestCase.class.getName());
-        return new PathableTestSuite(testClass, loader);
-    }
-
-    /**
-     * Tear down instance variables required by this test case.
-     */
-    @Override
-    public void tearDown() {
-        log = null;
-        factory = null;
-        LogFactory.releaseAll();
-    }
-
-
-    // ----------------------------------------------------------- Test Methods
-
-
-    // Test pristine Log instance
-    public void testPristineLog() {
-
-        checkLog();
-
-    }
-
-
-    // Test pristine LogFactory instance
-    public void testPristineFactory() {
-
-        assertNotNull("LogFactory exists", factory);
-        assertEquals("LogFactory class",
-                     "org.apache.commons.logging.impl.LogFactoryImpl",
-                     factory.getClass().getName());
-
-        final String names[] = factory.getAttributeNames();
-        assertNotNull("Names exists", names);
-        assertEquals("Names empty", 0, names.length);
-
-    }
-
-
-    // Test Serializability of Log instance
-    public void testSerializable() throws Exception {
-
-        // Serialize and deserialize the instance
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final ObjectOutputStream oos = new ObjectOutputStream(baos);
-        oos.writeObject(log);
-        oos.close();
-        final ByteArrayInputStream bais =
-            new ByteArrayInputStream(baos.toByteArray());
-        final ObjectInputStream ois = new ObjectInputStream(bais);
-        log = (Log) ois.readObject();
-        ois.close();
-
-        // Check the characteristics of the resulting object
-        checkLog();
-
-    }
-
-
-    // -------------------------------------------------------- Support Methods
-
-
-
-    // Check the log instance
-    protected void checkLog() {
-
-        assertNotNull("Log exists", log);
-        assertEquals("Log class",
-                     "org.apache.commons.logging.impl.Jdk14Logger",
-                     log.getClass().getName());
-
-        // Can we call level checkers with no exceptions?
-        log.isDebugEnabled();
-        log.isErrorEnabled();
-        log.isFatalEnabled();
-        log.isInfoEnabled();
-        log.isTraceEnabled();
-        log.isWarnEnabled();
-
-    }
-
-
-    // Set up factory instance
-    protected void setUpFactory() throws Exception {
-        factory = LogFactory.getFactory();
-    }
-
-
-    // Set up log instance
-    protected void setUpLog(final String name) throws Exception {
-        log = LogFactory.getLog(name);
-    }
-
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.logging.jdk14;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.PathableClassLoader;
+import org.apache.commons.logging.PathableTestSuite;
+
+
+/**
+ * <p>TestCase for JDK 1.4 logging when running on a JDK 1.4 system with
+ * zero configuration, and with Log4J not present (so JDK 1.4 logging
+ * should be automatically configured.</p>
+ */
+public class DefaultConfigTestCase extends TestCase {
+
+    /**
+     * <p>Construct a new instance of this test case.</p>
+     *
+     * @param name Name of the test case
+     */
+    public DefaultConfigTestCase(final String name) {
+        super(name);
+    }
+
+    /**
+     * <p>The {@link LogFactory} implementation we have selected.</p>
+     */
+    protected LogFactory factory;
+
+    /**
+     * <p>The {@link Log} implementation we have selected.</p>
+     */
+    protected Log log;
+
+    /**
+     * Set up instance variables required by this test case.
+     */
+    @Override
+    public void setUp() throws Exception {
+        setUpFactory();
+        setUpLog("TestLogger");
+    }
+
+    /**
+     * Return the tests included in this test suite.
+     */
+    public static Test suite() throws Exception {
+        final PathableClassLoader loader = new PathableClassLoader(null);
+        loader.useExplicitLoader("junit.", Test.class.getClassLoader());
+        loader.addLogicalLib("testclasses");
+        loader.addLogicalLib("commons-logging");
+
+        final Class testClass = loader.loadClass(DefaultConfigTestCase.class.getName());
+        return new PathableTestSuite(testClass, loader);
+    }
+
+    /**
+     * Tear down instance variables required by this test case.
+     */
+    @Override
+    public void tearDown() {
+        log = null;
+        factory = null;
+        LogFactory.releaseAll();
+    }
+
+    // Test pristine Log instance
+    public void testPristineLog() {
+        checkLog();
+    }
+
+    // Test pristine LogFactory instance
+    public void testPristineFactory() {
+        assertNotNull("LogFactory exists", factory);
+        assertEquals("LogFactory class",
+                     "org.apache.commons.logging.impl.LogFactoryImpl",
+                     factory.getClass().getName());
+
+        final String names[] = factory.getAttributeNames();
+        assertNotNull("Names exists", names);
+        assertEquals("Names empty", 0, names.length);
+    }
+
+
+    // Test Serializability of Log instance
+    public void testSerializable() throws Exception {
+
+        // Serialize and deserialize the instance
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        final ObjectOutputStream oos = new ObjectOutputStream(baos);
+        oos.writeObject(log);
+        oos.close();
+        final ByteArrayInputStream bais =
+            new ByteArrayInputStream(baos.toByteArray());
+        final ObjectInputStream ois = new ObjectInputStream(bais);
+        log = (Log) ois.readObject();
+        ois.close();
+
+        // Check the characteristics of the resulting object
+        checkLog();
+
+    }
+
+    // Check the log instance
+    protected void checkLog() {
+
+        assertNotNull("Log exists", log);
+        assertEquals("Log class",
+                     "org.apache.commons.logging.impl.Jdk14Logger",
+                     log.getClass().getName());
+
+        // Can we call level checkers with no exceptions?
+        log.isDebugEnabled();
+        log.isErrorEnabled();
+        log.isFatalEnabled();
+        log.isInfoEnabled();
+        log.isTraceEnabled();
+        log.isWarnEnabled();
+
+    }
+
+    // Set up factory instance
+    protected void setUpFactory() throws Exception {
+        factory = LogFactory.getFactory();
+    }
+
+    // Set up log instance
+    protected void setUpLog(final String name) throws Exception {
+        log = LogFactory.getLog(name);
+    }
+
+}
diff --git a/src/test/java/org/apache/commons/logging/jdk14/TestHandler.java b/src/test/java/org/apache/commons/logging/jdk14/TestHandler.java
index b4184a1..4ec320c 100644
--- a/src/test/java/org/apache/commons/logging/jdk14/TestHandler.java
+++ b/src/test/java/org/apache/commons/logging/jdk14/TestHandler.java
@@ -1,73 +1,53 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.logging.jdk14;
-
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Handler;
-import java.util.logging.LogRecord;
-
-
-/**
- * <p>Test implementation of {@code java.util.logging.Handler}.</p>
- *
- * @author Craig R. McClanahan
- * @version $Revision$ $Date$
- */
-
-public class TestHandler extends Handler {
-
-
-
-    // ----------------------------------------------------- Instance Variables
-
-
-    // The set of logged records for this handler
-    private final List records = new ArrayList();
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    public Iterator records() {
-        return records.iterator();
-    }
-
-
-    // -------------------------------------------------------- Handler Methods
-
-
-    @Override
-    public void close() {
-    }
-
-
-    @Override
-    public void flush() {
-        records.clear();
-    }
-
-
-    @Override
-    public void publish(final LogRecord record) {
-        records.add(record);
-    }
-
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.logging.jdk14;
+
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+
+
+/**
+ * <p>Test implementation of {@code java.util.logging.Handler}.</p>
+ */
+public class TestHandler extends Handler {
+
+    // The set of logged records for this handler
+    private final List records = new ArrayList();
+
+    public Iterator records() {
+        return records.iterator();
+    }
+
+    @Override
+    public void close() {
+    }
+
+    @Override
+    public void flush() {
+        records.clear();
+    }
+
+    @Override
+    public void publish(final LogRecord record) {
+        records.add(record);
+    }
+
+}
diff --git a/src/test/java/org/apache/commons/logging/simple/CustomConfigTestCase.java b/src/test/java/org/apache/commons/logging/simple/CustomConfigTestCase.java
index 2143de3..cd7edef 100644
--- a/src/test/java/org/apache/commons/logging/simple/CustomConfigTestCase.java
+++ b/src/test/java/org/apache/commons/logging/simple/CustomConfigTestCase.java
@@ -34,22 +34,14 @@ import org.apache.commons.logging.impl.SimpleLog;
 /**
  * <p>TestCase for simple logging when running with custom configuration
  * properties.</p>
- *
- * @author Craig R. McClanahan
- * @version $Revision$ $Date$
  */
 public class CustomConfigTestCase extends DefaultConfigTestCase {
 
-
-    // ----------------------------------------------------- Instance Variables
-
-
     /**
      * <p>The expected log records.</p>
      */
     protected List expected;
 
-
     /**
      * <p>The message levels that should have been logged.</p>
      */
@@ -58,16 +50,12 @@ public class CustomConfigTestCase extends DefaultConfigTestCase {
     { Level.FINE, Level.INFO, Level.WARNING, Level.SEVERE, Level.SEVERE };
     */
 
-
     /**
      * <p>The message strings that should have been logged.</p>
      */
     protected String testMessages[] =
     { "debug", "info", "warn", "error", "fatal" };
 
-
-    // ------------------------------------------- JUnit Infrastructure Methods
-
     /**
      * Set system properties that will control the LogFactory/Log objects
      * when they are created. Subclasses can override this method to
@@ -95,7 +83,6 @@ public class CustomConfigTestCase extends DefaultConfigTestCase {
         setUpLog("DecoratedLogger");
     }
 
-
     /**
      * Return the tests included in this test suite.
      * <p>
@@ -129,46 +116,30 @@ public class CustomConfigTestCase extends DefaultConfigTestCase {
         expected = null;
     }
 
-
-    // ----------------------------------------------------------- Test Methods
-
-
     // Test logging message strings with exceptions
     public void testExceptionMessages() throws Exception {
-
         ((DecoratedSimpleLog) log).clearCache();
         logExceptionMessages();
         checkExpected();
-
     }
 
-
     // Test logging plain message strings
     public void testPlainMessages() throws Exception {
-
         ((DecoratedSimpleLog) log).clearCache();
         logPlainMessages();
         checkExpected();
-
     }
 
-
     // Test Serializability of standard instance
     @Override
     public void testSerializable() throws Exception {
-
         ((DecoratedSimpleLog) log).clearCache();
         logPlainMessages();
         super.testSerializable();
         logExceptionMessages();
         checkExpected();
-
     }
 
-
-    // -------------------------------------------------------- Support Methods
-
-
     // Check the decorated log instance
     @Override
     protected void checkDecorated() {
@@ -213,7 +184,6 @@ public class CustomConfigTestCase extends DefaultConfigTestCase {
 
     // Check the actual log records against the expected ones
     protected void checkExpected() {
-
         final List acts = ((DecoratedSimpleLog) log).getCache();
         final Iterator exps = expected.iterator();
         int n = 0;
@@ -224,22 +194,18 @@ public class CustomConfigTestCase extends DefaultConfigTestCase {
             assertEquals("Row " + n + " message", exp.message, act.message);
             assertEquals("Row " + n + " throwable", exp.t, act.t);
         }
-
     }
 
 
     // Check the standard log instance
     @Override
     protected void checkStandard() {
-
         checkDecorated();
-
     }
 
 
     // Log the messages with exceptions
     protected void logExceptionMessages() {
-
         // Generate log records
         final Throwable t = new DummyException();
         log.trace("trace", t); // Should not actually get logged
@@ -255,13 +221,11 @@ public class CustomConfigTestCase extends DefaultConfigTestCase {
         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_WARN, "warn", t));
         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_ERROR, "error", t));
         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_FATAL, "fatal", t));
-
     }
 
 
     // Log the plain messages
     protected void logPlainMessages() {
-
         // Generate log records
         log.trace("trace"); // Should not actually get logged
         log.debug("debug");
@@ -276,8 +240,5 @@ public class CustomConfigTestCase extends DefaultConfigTestCase {
         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_WARN, "warn", null));
         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_ERROR, "error", null));
         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_FATAL, "fatal", null));
-
     }
-
-
 }
diff --git a/src/test/java/org/apache/commons/logging/simple/DefaultConfigTestCase.java b/src/test/java/org/apache/commons/logging/simple/DefaultConfigTestCase.java
index bfccecf..682af46 100644
--- a/src/test/java/org/apache/commons/logging/simple/DefaultConfigTestCase.java
+++ b/src/test/java/org/apache/commons/logging/simple/DefaultConfigTestCase.java
@@ -36,32 +36,20 @@ import org.apache.commons.logging.impl.SimpleLog;
 /**
  * <p>TestCase for simple logging when running with zero configuration
  * other than selecting the SimpleLog implementation.</p>
- *
- * @author Craig R. McClanahan
- * @version $Revision$ $Date$
  */
 
 public class DefaultConfigTestCase extends TestCase {
 
-
-    // ----------------------------------------------------- Instance Variables
-
-
     /**
      * <p>The {@link LogFactory} implementation we have selected.</p>
      */
     protected LogFactory factory;
 
-
     /**
      * <p>The {@link Log} implementation we have selected.</p>
      */
     protected Log log;
 
-
-    // ------------------------------------------- JUnit Infrastructure Methods
-
-
     /**
      * Return the tests included in this test suite.
      * <p>
@@ -118,30 +106,19 @@ public class DefaultConfigTestCase extends TestCase {
         LogFactory.releaseAll();
     }
 
-
-    // ----------------------------------------------------------- Test Methods
-
-
     // Test pristine DecoratedSimpleLog instance
     public void testPristineDecorated() {
-
         setUpDecorated("DecoratedLogger");
         checkDecorated();
-
     }
 
-
     // Test pristine Log instance
     public void testPristineLog() {
-
         checkStandard();
-
     }
 
-
     // Test pristine LogFactory instance
     public void testPristineFactory() {
-
         assertNotNull("LogFactory exists", factory);
         assertEquals("LogFactory class",
                      "org.apache.commons.logging.impl.LogFactoryImpl",
@@ -150,10 +127,8 @@ public class DefaultConfigTestCase extends TestCase {
         final String names[] = factory.getAttributeNames();
         assertNotNull("Names exists", names);
         assertEquals("Names empty", 0, names.length);
-
     }
 
-
     // Test Serializability of standard instance
     public void testSerializable() throws Exception {
 
@@ -173,14 +148,8 @@ public class DefaultConfigTestCase extends TestCase {
 
     }
 
-
-    // -------------------------------------------------------- Support Methods
-
-
-
     // Check the decorated log instance
     protected void checkDecorated() {
-
         assertNotNull("Log exists", log);
         assertEquals("Log class",
                      "org.apache.commons.logging.simple.DecoratedSimpleLog",
@@ -204,13 +173,11 @@ public class DefaultConfigTestCase extends TestCase {
                      ((DecoratedSimpleLog) log).getLogName());
         assertFalse(((DecoratedSimpleLog) log).getShowDateTime());
         assertTrue(((DecoratedSimpleLog) log).getShowShortName());
-
     }
 
 
     // Check the standard log instance
     protected void checkStandard() {
-
         assertNotNull("Log exists", log);
         assertEquals("Log class",
                      "org.apache.commons.logging.impl.SimpleLog",
@@ -226,7 +193,6 @@ public class DefaultConfigTestCase extends TestCase {
 
         // Can we retrieve the current log level?
         assertEquals(SimpleLog.LOG_LEVEL_INFO, ((SimpleLog) log).getLevel());
-
     }
 
 
@@ -247,5 +213,4 @@ public class DefaultConfigTestCase extends TestCase {
         log = LogFactory.getLog(name);
     }
 
-
 }