svn commit: r1846 - in logback/trunk/logback-core/src/test: input/joran/skip java/ch/qos/logback/core/joran java/ch/qos/logback/core/joran/action/ext

Author: ceki Date: Sat Oct 18 21:09:55 2008 New Revision: 1846 Modified: logback/trunk/logback-core/src/test/input/joran/skip/badEnd2.xml logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadEndAction.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/HelloAction.java Log: LBCLASSIC-63 LBCORE-38 Test that Joran does continues processing in presence of errors and that it registers status messages Modified: logback/trunk/logback-core/src/test/input/joran/skip/badEnd2.xml ============================================================================== --- logback/trunk/logback-core/src/test/input/joran/skip/badEnd2.xml (original) +++ logback/trunk/logback-core/src/test/input/joran/skip/badEnd2.xml Sat Oct 18 21:09:55 2008 @@ -8,7 +8,7 @@ <badEnd type="ActionException"> <touch/> </badEnd> - <!-- should be skipped --> + <!-- should not be skipped --> <touch/> </isolate> Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java Sat Oct 18 21:09:55 2008 @@ -1,7 +1,7 @@ /** * Logback: the generic, reliable, fast and flexible logging framework. * - * Copyright (C) 1999-2006, QOS.ch + * Copyright (C) 1999-2008, QOS.ch * * This library is free software, you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free @@ -11,8 +11,10 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import java.util.HashMap; +import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -24,15 +26,18 @@ import ch.qos.logback.core.joran.action.Action; import ch.qos.logback.core.joran.action.NOPAction; import ch.qos.logback.core.joran.action.ext.BadBeginAction; +import ch.qos.logback.core.joran.action.ext.BadEndAction; import ch.qos.logback.core.joran.action.ext.HelloAction; import ch.qos.logback.core.joran.action.ext.TouchAction; +import ch.qos.logback.core.joran.spi.ActionException; import ch.qos.logback.core.joran.spi.Pattern; +import ch.qos.logback.core.status.Status; +import ch.qos.logback.core.status.StatusManager; import ch.qos.logback.core.util.Constants; -import ch.qos.logback.core.util.StatusPrinter; /** - * Test the way Interpreter skips elements in case of exceptions thrown by - * Actions. + * Test the way Interpreter skips child elements in case of exceptions thrown by + * Actions. It also tests addition of status messages in case of exceptions. * * @author Ceki Gulcu */ @@ -40,66 +45,67 @@ HashMap<Pattern, Action> rulesMap = new HashMap<Pattern, Action>(); Context context = new ContextBase(); + StatusManager sm = context.getStatusManager(); SAXParser createParser() throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); return spf.newSAXParser(); } - void doTest(String filename) throws Exception { + void doTest(String filename, Integer expectedInt, Class exceptionClass) + throws Exception { rulesMap.put(new Pattern("test"), new NOPAction()); rulesMap.put(new Pattern("test/badBegin"), new BadBeginAction()); rulesMap.put(new Pattern("test/badBegin/touch"), new TouchAction()); + rulesMap.put(new Pattern("test/badEnd"), new BadEndAction()); + rulesMap.put(new Pattern("test/badEnd/touch"), new TouchAction()); + rulesMap.put(new Pattern("test/hello"), new HelloAction()); + + rulesMap.put(new Pattern("test/isolate"), new NOPAction()); + rulesMap.put(new Pattern("test/isolate/badEnd"), new BadEndAction()); + rulesMap.put(new Pattern("test/isolate/badEnd/touch"), new TouchAction()); + rulesMap.put(new Pattern("test/isolate/touch"), new TouchAction()); rulesMap.put(new Pattern("test/hello"), new HelloAction()); TrivialConfigurator tc = new TrivialConfigurator(rulesMap); tc.setContext(context); - tc .doConfigure(Constants.TEST_DIR_PREFIX - + "input/joran/skip/"+filename); + tc.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/skip/" + filename); - String str = context.getProperty("hello"); + String str = context.getProperty(HelloAction.PROPERTY_KEY); assertEquals("Hello John Doe.", str); - Object i = (String) context.getObject(TouchAction.KEY); - assertNull(i); - - StatusPrinter.print(context); + Integer i = (Integer) context.getObject(TouchAction.KEY); + if (expectedInt == null) { + assertNull(i); + } else { + assertEquals(expectedInt, i); + } + + // check the existence of an ERROR status + List<Status> statusList = sm.getCopyOfStatusList(); + Status s0 = statusList.get(0); + assertEquals(Status.ERROR, s0.getLevel()); + assertTrue(s0.getThrowable().getClass() == exceptionClass); } - /** - * Tests that whenever an action throws a RuntimeException, processing of - * child elements is skipped. - */ @Test public void testSkippingRuntimeExInBadBegin() throws Exception { - doTest("badBegin1.xml"); + doTest("badBegin1.xml", null, IllegalStateException.class); } - /** - * Tests that whenever an action throws a RuntimeException, processing of - * child elements is skipped. - */ @Test public void testSkippingActionExInBadBegin() throws Exception { - doTest("badBegin2.xml"); + doTest("badBegin2.xml", null, ActionException.class); } - /** - * A RuntimeException thrown by the end() method of an action will be caught without - * further consequences (as there are no children). - */ @Test public void testSkippingRuntimeExInBadEnd() throws Exception { - doTest("badEnd1.xml"); + doTest("badEnd1.xml", new Integer(2), IllegalStateException.class); } - /** - * An ActionException thrown by the end() method of an action will be caught without - * further consequences (as there are no children). - */ @Test public void testSkippingActionExInBadEnd() throws Exception { - doTest("badEnd2.xml"); + doTest("badEnd2.xml", new Integer(2), ActionException.class); } } Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadEndAction.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadEndAction.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadEndAction.java Sat Oct 18 21:09:55 2008 @@ -22,7 +22,7 @@ public class BadEndAction extends Action { static String EXCEPTION_TYPE = "type"; - static final int RUNTIME_EDXCEPTION = 0; + static final int RUNTIME_EXCEPTION = 0; static final int ACTION_EXCEPTION = 1; int type; @@ -30,7 +30,7 @@ public void begin(InterpretationContext ec, String name, Attributes attributes) { String exType = attributes.getValue(EXCEPTION_TYPE); - type = RUNTIME_EDXCEPTION; + type = RUNTIME_EXCEPTION; if("ActionException".equals(exType)) { type = ACTION_EXCEPTION; } Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/HelloAction.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/HelloAction.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/HelloAction.java Sat Oct 18 21:09:55 2008 @@ -19,6 +19,8 @@ public class HelloAction extends Action { + static final public String PROPERTY_KEY = "name"; + public HelloAction() { } /** @@ -27,7 +29,7 @@ */ public void begin(InterpretationContext ec, String name, Attributes attributes) { String str = "Hello "+attributes.getValue("name")+"."; - ec.getContext().putProperty("hello", str); + ec.getContext().putProperty(PROPERTY_KEY, str); } /**
participants (1)
-
noreply.ceki@qos.ch