
Author: ceki Date: Thu Aug 7 15:37:26 2008 New Revision: 1740 Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/status/OnConsoleStatusListener.java logback/trunk/logback-core/src/test/input/joran/illformed.xml logback/trunk/logback-core/src/test/java/ch/qos/logback/core/status/TrivialStatusListener.java - copied, changed from r1739, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/TrivialStatusListener.java Removed: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/TrivialStatusListener.java Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/StatusPrinter.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/PackageTest.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialcConfiguratorTest.java Log: Relates to LBCLASSIC-59 LBCLASSIC-58 - Setting the logback.statusListenerClass system property to the name of a StatusListener class will automatically instantiate an instance of that class and register will the StatusManager currently in use by the logger context. By convention, SYSOUT represents a shorthand for ch.qos.logback.core.status.OnConsoleStatusListener - documentation to follow Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java Thu Aug 7 15:37:26 2008 @@ -59,6 +59,8 @@ public static void autoConfig(LoggerContext loggerContext, ClassLoader classLoader) throws JoranException { + StatusListenerConfigHelper.installIfAsked(loggerContext); + URL url = findConfigFileURLFromSystemProperties(classLoader); if (url == null) { url = Loader.getResource(TEST_AUTOCONFIG_FILE, classLoader); @@ -77,6 +79,7 @@ throws JoranException { ClassLoader tccl = Loader.getTCL(); autoConfig(loggerContext, tccl); - } + + } Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/status/OnConsoleStatusListener.java ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/status/OnConsoleStatusListener.java Thu Aug 7 15:37:26 2008 @@ -0,0 +1,12 @@ +package ch.qos.logback.core.status; + +import ch.qos.logback.core.util.StatusPrinter; + +public class OnConsoleStatusListener implements StatusListener { + + public void addStatusEvent(Status status) { + StringBuilder sb = new StringBuilder(); + StatusPrinter.buildStr(sb, "", status); + System.out.println(sb); + } +} Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/StatusPrinter.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/StatusPrinter.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/StatusPrinter.java Thu Aug 7 15:37:26 2008 @@ -79,7 +79,7 @@ } } - private static void buildStr(StringBuilder sb, String indentation, Status s) { + public static void buildStr(StringBuilder sb, String indentation, Status s) { String prefix; if (s.hasChildren()) { prefix = indentation + "+ "; Added: logback/trunk/logback-core/src/test/input/joran/illformed.xml ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/input/joran/illformed.xml Thu Aug 7 15:37:26 2008 @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<x> + <inc increment="1"> +</x> Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/PackageTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/PackageTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/PackageTest.java Thu Aug 7 15:37:26 2008 @@ -9,6 +9,7 @@ */ package ch.qos.logback.core.joran; +import junit.framework.JUnit4TestAdapter; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -18,7 +19,7 @@ public static Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(SkippingInInterpreterTest.class); - suite.addTestSuite(TrivialcConfiguratorTest.class); + suite.addTest(new JUnit4TestAdapter(TrivialcConfiguratorTest.class)); suite.addTest(ch.qos.logback.core.joran.action.PackageTest.suite()); suite.addTest(ch.qos.logback.core.joran.event.PackageTest.suite()); suite.addTest(ch.qos.logback.core.joran.spi.PackageTest.suite()); Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialcConfiguratorTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialcConfiguratorTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialcConfiguratorTest.java Thu Aug 7 15:37:26 2008 @@ -10,52 +10,81 @@ package ch.qos.logback.core.joran; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import java.util.HashMap; -import junit.framework.TestCase; +import org.junit.Test; + import ch.qos.logback.core.Context; import ch.qos.logback.core.ContextBase; import ch.qos.logback.core.joran.action.Action; import ch.qos.logback.core.joran.action.ext.IncAction; import ch.qos.logback.core.joran.spi.Pattern; +import ch.qos.logback.core.status.Status; +import ch.qos.logback.core.status.TrivialStatusListener; import ch.qos.logback.core.util.Constants; +import ch.qos.logback.core.util.StatusPrinter; -public class TrivialcConfiguratorTest extends TestCase { +public class TrivialcConfiguratorTest { Context context = new ContextBase(); - - public TrivialcConfiguratorTest(String arg0) { - super(arg0); - } - protected void setUp() throws Exception { - super.setUp(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - public void doTest(String filename) throws Exception { HashMap<Pattern, Action> rulesMap = new HashMap<Pattern, Action>(); rulesMap.put(new Pattern("x/inc"), new IncAction()); TrivialConfigurator gc = new TrivialConfigurator(rulesMap); - + gc.setContext(context); - gc.doConfigure(Constants.TEST_DIR_PREFIX - + "input/joran/"+ filename); + gc.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/" + filename); } - - public void test() throws Exception { + + @Test + public void smokeTezt() throws Exception { int oldBeginCount = IncAction.beginCount; int oldEndCount = IncAction.endCount; int oldErrorCount = IncAction.errorCount; doTest("inc.xml"); assertEquals(oldErrorCount, IncAction.errorCount); - assertEquals(oldBeginCount+1, IncAction.beginCount); - assertEquals(oldEndCount+1, IncAction.endCount); + assertEquals(oldBeginCount + 1, IncAction.beginCount); + assertEquals(oldEndCount + 1, IncAction.endCount); } + @Test + public void teztInexistentFile() { + TrivialStatusListener tsl = new TrivialStatusListener(); + String filename = "nothereBLAH.xml"; + context.getStatusManager().add(tsl); + try { + doTest(filename); + } catch (Exception e) { + } + assertTrue(tsl.list.size() + " should be greater than or equal to 1", + tsl.list.size() >= 1); + Status s0 = tsl.list.get(0); + assertTrue(s0.getMessage().startsWith("Could not open [" + filename + "]")); + } + + @Test + public void teztIllFormedXML() { + TrivialStatusListener tsl = new TrivialStatusListener(); + String filename = "illformed.xml"; + context.getStatusManager().add(tsl); + try { + doTest(filename); + } catch (Exception e) { + } + assertEquals(2, tsl.list.size()); + Status s0 = tsl.list.get(0); + assertTrue(s0.getMessage().startsWith( + "Parsing fatal error on line 5 and column 3")); + Status s1 = tsl.list.get(1); + assertTrue(s1 + .getMessage() + .startsWith( + "Problem parsing XML document. See previously reported errors. Abandoning all further processing.")); + } } Copied: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/status/TrivialStatusListener.java (from r1739, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/TrivialStatusListener.java) ============================================================================== --- /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/TrivialStatusListener.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/status/TrivialStatusListener.java Thu Aug 7 15:37:26 2008 @@ -1,4 +1,4 @@ -package ch.qos.logback.classic.joran; +package ch.qos.logback.core.status; import java.util.ArrayList; import java.util.List; @@ -8,7 +8,7 @@ public class TrivialStatusListener implements StatusListener { - List<Status> list = new ArrayList<Status>(); + public List<Status> list = new ArrayList<Status>(); public void addStatusEvent(Status status) { list.add(status);