You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2008/07/18 15:40:58 UTC

svn commit: r677905 - in /jackrabbit/trunk/jackrabbit-jcr-commons/src: main/java/org/apache/jackrabbit/util/Text.java test/java/org/apache/jackrabbit/util/TextTest.java

Author: angela
Date: Fri Jul 18 06:40:57 2008
New Revision: 677905

URL: http://svn.apache.org/viewvc?rev=677905&view=rev
Log:
JCR-1669: Text.isDescendant returns false if parent is '/'

Modified:
    jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java
    jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java

Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java?rev=677905&r1=677904&r2=677905&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java Fri Jul 18 06:40:57 2008
@@ -604,9 +604,9 @@
      *         <code>false</code> otherwise.
      */
     public static boolean isDescendant(String path, String descendant) {
-        return !path.equals(descendant) &&
-                descendant.startsWith(path) &&
-                descendant.charAt(path.length()) == '/';
+        String pattern = path.endsWith("/") ? path : path + "/";
+        return !pattern.equals(descendant) &&
+                descendant.startsWith(pattern);
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java?rev=677905&r1=677904&r2=677905&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java Fri Jul 18 06:40:57 2008
@@ -20,6 +20,10 @@
 import org.apache.jackrabbit.name.IllegalNameException;
 import org.apache.jackrabbit.name.NameFormat;
 
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+
 /**
  * Test cases for the Text utility class.
  */
@@ -62,4 +66,41 @@
         checkEscape("%/:[]*'\"|\t\r\n");
     }
 
+    public void testIsDescendant() {
+        String parent = "/";
+        List descendants = new ArrayList();
+        descendants.add("/a");
+        descendants.add("/a/b");
+        for (Iterator it = descendants.iterator(); it.hasNext();) {
+            String desc = it.next().toString();
+            assertTrue(desc + " must be descendant of " + parent, Text.isDescendant(parent, desc));
+        }
+        List nonDescendants = new ArrayList();
+        nonDescendants.add("/");
+        nonDescendants.add("a");
+        for (Iterator it = nonDescendants.iterator(); it.hasNext();) {
+            String nonDesc = it.next().toString();
+            assertFalse(nonDesc + " isn't a descendant of " + parent,Text.isDescendant(parent, nonDesc));
+        }
+
+        parent = "/a/b";
+        descendants = new ArrayList();
+        descendants.add("/a/b/c");
+        descendants.add("/a/b/c/");
+        for (Iterator it = descendants.iterator(); it.hasNext();) {
+            String desc = it.next().toString();
+            assertTrue(desc + " must be descendant of " + parent, Text.isDescendant(parent, desc));
+        }
+        nonDescendants = new ArrayList();
+        nonDescendants.add("/");
+        nonDescendants.add("/a");
+        nonDescendants.add("/a/b");
+        nonDescendants.add("/a/b/");
+        nonDescendants.add("/d");
+        nonDescendants.add("/d/b");
+        for (Iterator it = nonDescendants.iterator(); it.hasNext();) {
+            String nonDesc = it.next().toString();
+            assertFalse(nonDesc + " isn't a descendant of " + parent, Text.isDescendant(parent, nonDesc));
+        }
+    }
 }