Author: skitching Date: Mon Mar 7 02:12:40 2005 New Revision: 156414 URL: http://svn.apache.org/viewcvs?view=rev&rev=156414 Log: * remove redundant code to clear object stack (this is done again in clear method) * ensure named stacks are cleared too. * add method peek(StackName, int n) for consistency
Thanks to Brian Hanafee for the suggestion (bugzilla #33873) Modified: jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java jakarta/commons/proper/digester/trunk/src/test/org/apache/commons/digester/DigesterTestCase.java Modified: jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java?view=diff&r1=156413&r2=156414 ============================================================================== --- jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java (original) +++ jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/Digester.java Mon Mar 7 02:12:40 2005 @@ -962,10 +962,6 @@ } } - while (getCount() > 1) { - pop(); - } - // Fire "finish" events for all defined rules Iterator rules = getRules().rules().iterator(); while (rules.hasNext()) { @@ -2419,6 +2415,7 @@ params.clear(); publicId = null; stack.clear(); + stacksByName.clear(); } @@ -2550,6 +2547,25 @@ * @since 1.6 */ public Object peek(String stackName) { + return peek(stackName, 0); + } + + /** + * <p>Gets the top object from the stack with the given name. + * This method does not remove the object from the stack. + * </p> + * <p><strong>Note:</strong> a stack is considered empty + * if no objects have been pushed onto it yet.</p> + * + * @param stackName the name of the stack to be peeked + * @param n Index of the desired element, where 0 is the top of the stack, + * 1 is the next element down, and so on. + * @return the specified <code>Object</code> on the stack. + * @throws EmptyStackException if the named stack is empty + * + * @since 1.6 + */ + public Object peek(String stackName, int n) { Object result = null; ArrayStack namedStack = (ArrayStack) stacksByName.get(stackName); if (namedStack == null ) { @@ -2560,7 +2576,7 @@ } else { - result = namedStack.peek(); + result = namedStack.peek(n); } return result; } Modified: jakarta/commons/proper/digester/trunk/src/test/org/apache/commons/digester/DigesterTestCase.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/trunk/src/test/org/apache/commons/digester/DigesterTestCase.java?view=diff&r1=156413&r2=156414 ============================================================================== --- jakarta/commons/proper/digester/trunk/src/test/org/apache/commons/digester/DigesterTestCase.java (original) +++ jakarta/commons/proper/digester/trunk/src/test/org/apache/commons/digester/DigesterTestCase.java Mon Mar 7 02:12:40 2005 @@ -393,6 +393,31 @@ assertEquals("Peeked value:", archimedesAveragePi, digester.peek(testStackName)); assertEquals("Popped value:", archimedesAveragePi, digester.pop(testStackName)); assertTrue("Stack ends empty:", digester.isEmpty(testStackName)); + + digester.push(testStackName, "1"); + digester.push(testStackName, "2"); + digester.push(testStackName, "3"); + + assertEquals("Peek#1", "1", digester.peek(testStackName, 2)); + assertEquals("Peek#2", "2", digester.peek(testStackName, 1)); + assertEquals("Peek#3", "3", digester.peek(testStackName, 0)); + assertEquals("Peek#3a", "3", digester.peek(testStackName)); + + try { + // peek beyond stack + digester.peek(testStackName, 3); + fail("Peek#4 failed to throw an exception."); + } catch(EmptyStackException ex) { + // ok, expected + } + + try { + // peek a nonexistent named stack + digester.peek("no.such.stack", 0); + fail("Peeking a non-existent stack failed to throw an exception."); + } catch(EmptyStackException ex) { + // ok, expected + } } /** Tests that values are stored independently */ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]