rdonkin 2003/07/31 14:59:00
Modified: digester/src/java/org/apache/commons/digester RulesBase.java
digester/src/test/org/apache/commons/digester
RulesBaseTestCase.java
Log:
Added code that corrects paths when a user has accidentally added a / at the end of
a pattern.
Revision Changes Path
1.12 +11 -5
jakarta-commons/digester/src/java/org/apache/commons/digester/RulesBase.java
Index: RulesBase.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/RulesBase.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- RulesBase.java 2 Feb 2003 16:09:53 -0000 1.11
+++ RulesBase.java 31 Jul 2003 21:59:00 -0000 1.12
@@ -191,7 +191,13 @@
* @param rule Rule instance to be registered
*/
public void add(String pattern, Rule rule) {
-
+ // to help users who accidently add '/' to the end of their patterns
+ int patternLength = pattern.length();
+ if (patternLength>1 && pattern.endsWith("/")) {
+ pattern = pattern.substring(0, patternLength-1);
+ }
+
+
List list = (List) cache.get(pattern);
if (list == null) {
list = new ArrayList();
1.8 +29 -4
jakarta-commons/digester/src/test/org/apache/commons/digester/RulesBaseTestCase.java
Index: RulesBaseTestCase.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/digester/src/test/org/apache/commons/digester/RulesBaseTestCase.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- RulesBaseTestCase.java 2 Feb 2003 15:52:14 -0000 1.7
+++ RulesBaseTestCase.java 31 Jul 2003 21:59:00 -0000 1.8
@@ -329,4 +329,29 @@
digester.getRules().clear();
}
+
+ /** Tests the behaviour when a rule is added with a trailing slash*/
+ public void testTrailingSlash() {
+ // clear any existing rules
+ digester.getRules().clear();
+
+ assertEquals("Initial rules list is empty",
+ 0, digester.getRules().rules().size());
+
+ // Set up rules
+ digester.addRule("alpha/beta/gamma/", new TestRule("one"));
+ digester.addRule("alpha/beta/", new TestRule("two"));
+ digester.addRule("beta/gamma/alpha", new TestRule("three"));
+
+ // test that rules are returned in set order
+ List list = digester.getRules().match(null, "alpha/beta/gamma");
+
+ assertEquals("Testing number of matches", 1, list.size());
+
+ Iterator it = list.iterator();
+ assertEquals("Testing ordering (A)", "one", ((TestRule)
it.next()).getIdentifier());
+
+ // clean up
+ digester.getRules().clear();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]