Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 59128 invoked from network); 18 Jul 2008 13:41:49 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 Jul 2008 13:41:49 -0000 Received: (qmail 28688 invoked by uid 500); 18 Jul 2008 13:41:49 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 28653 invoked by uid 500); 18 Jul 2008 13:41:49 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 28644 invoked by uid 99); 18 Jul 2008 13:41:49 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Jul 2008 06:41:49 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Jul 2008 13:41:04 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 0BB7523889FE; Fri, 18 Jul 2008 06:40:59 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Fri, 18 Jul 2008 13:40:58 -0000 To: commits@jackrabbit.apache.org From: angela@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080718134059.0BB7523889FE@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 @@ * false 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)); + } + } }