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]