This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.jcr-mock-1.1.10 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-jcr-mock.git
commit 422e276b70b8f096d355b5e0046a3416ebb738f2 Author: Julian Sedding <[email protected]> AuthorDate: Thu Dec 11 15:14:48 2014 +0000 SLING-4238 - Jcr Mock does not normalize paths git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/jcr-mock@1644669 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/sling/testing/mock/jcr/MockSession.java | 44 +++++++++++----------- .../sling/testing/mock/jcr/MockNodeTest.java | 5 ++- .../sling/testing/mock/jcr/MockSessionTest.java | 17 +++++++++ 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java b/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java index 1d491e7..2e7e062 100644 --- a/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java +++ b/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java @@ -71,7 +71,7 @@ class MockSession implements Session { @Override public Item getItem(final String absPath) throws RepositoryException { - ItemData itemData = this.items.get(absPath); + final ItemData itemData = getItemData(absPath); if (itemData != null) { if (itemData.isNode()) { return new MockNode(itemData, this); @@ -116,22 +116,12 @@ class MockSession implements Session { @Override public boolean nodeExists(final String absPath) throws RepositoryException { - try { - getNode(absPath); - return true; - } catch (PathNotFoundException ex) { - return false; - } + return itemExists(absPath) && getItemData(absPath).isNode(); } @Override public boolean propertyExists(final String absPath) throws RepositoryException { - try { - getProperty(absPath); - return true; - } catch (PathNotFoundException ex) { - return false; - } + return itemExists(absPath) && getItemData(absPath).isProperty(); } @Override @@ -141,7 +131,7 @@ class MockSession implements Session { @Override public Node getRootNode() throws RepositoryException { - return (Node)this.items.get("/").getItem(this); + return getNode("/"); } @Override @@ -152,24 +142,32 @@ class MockSession implements Session { /** * Add item * @param itemData item data - * @throws RepositoryException */ - void addItem(final ItemData itemData) throws RepositoryException { + void addItem(final ItemData itemData) { this.items.put(itemData.getPath(), itemData); } + private ItemData getItemData(final String absPath) { + final String normalizedPath = ResourceUtil.normalize(absPath); + return this.items.get(normalizedPath); + } + /** * Remove item incl. children - * @param path Item path + * @param absPath Item path */ - void removeItemWithChildren(final String path) { - List<String> pathsToRemove = new ArrayList<String>(); + private void removeItemWithChildren(final String absPath) throws RepositoryException { + if (!itemExists(absPath)) { + return; + } - // build regex pattern for node and all its children - Pattern pattern = Pattern.compile("^" + Pattern.quote(path) + "(/.+)?$"); + final ItemData parent = getItemData(absPath); + final String descendantPrefix = parent.getPath() + "/"; + final List<String> pathsToRemove = new ArrayList<String>(); + pathsToRemove.add(parent.getPath()); for (String itemPath : this.items.keySet()) { - if (pattern.matcher(itemPath).matches()) { + if (itemPath.startsWith(descendantPrefix)) { pathsToRemove.add(itemPath); } } @@ -201,7 +199,7 @@ class MockSession implements Session { @Override public boolean itemExists(final String absPath) throws RepositoryException { - return this.items.get(absPath) != null; + return getItemData(absPath) != null; } @Override diff --git a/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java b/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java index ef1bed3..b666f5f 100644 --- a/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java +++ b/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java @@ -53,12 +53,15 @@ public class MockNodeTest { @Test public void testGetNodes() throws RepositoryException { + final Node node111 = this.node11.addNode("node111"); + NodeIterator nodes = this.node1.getNodes(); assertEquals(1, nodes.getSize()); assertEquals(this.node11, nodes.nextNode()); assertTrue(this.node1.hasNodes()); - assertFalse(this.node11.hasNodes()); + assertTrue(this.node11.hasNodes()); + assertFalse(node111.hasNodes()); nodes = this.node1.getNodes("^node.*$"); assertEquals(1, nodes.getSize()); diff --git a/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java b/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java index c137894..99767dc 100644 --- a/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java +++ b/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java @@ -38,6 +38,7 @@ import org.junit.Before; import org.junit.Test; import com.google.common.collect.ImmutableSet; +import org.mockito.Mockito; public class MockSessionTest { @@ -231,4 +232,20 @@ public class MockSessionTest { this.session.checkPermission("/any/path", "anyActions"); } + @Test + public void testPathsAreNormalized() throws RepositoryException { + // 3.4.6 Passing Paths + // When a JCR path is passed as an argument to a JCR method it may be normalized + // or non-normalized and in standard or non-standard form. + + this.session.getRootNode().addNode("foo"); + assertTrue("Requesting node /foo/ should succeed", this.session.nodeExists("/foo/")); + assertTrue("Requesting item /foo/ should succeed", this.session.itemExists("/foo/")); + + this.session.getRootNode().addNode("bar/"); + assertTrue("Creating /bar/ should succeed", this.session.nodeExists("/bar")); + + this.session.removeItem("/foo/"); + assertFalse("Removing /foo/ should succeed", this.session.nodeExists("/foo")); + } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
