This is an automated email from the ASF dual-hosted git repository.
enorman pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-jcr-mock.git
The following commit(s) were added to refs/heads/master by this push:
new 4505a84 SLING-11804 Implement item#isSame support for JCR Mock (#14)
4505a84 is described below
commit 4505a84c425aeaed5a817ffdf3fb89a4e022099f
Author: Eric Norman <[email protected]>
AuthorDate: Thu Mar 16 16:27:04 2023 -0700
SLING-11804 Implement item#isSame support for JCR Mock (#14)
---
.../sling/testing/mock/jcr/AbstractItem.java | 22 ++++++-
.../sling/testing/mock/jcr/AbstractItemTest.java | 46 ++++++++++----
.../sling/testing/mock/jcr/MockNodeTest.java | 72 ++++++++++++++++------
.../sling/testing/mock/jcr/MockPropertyTest.java | 59 ++++++++++++++----
4 files changed, 152 insertions(+), 47 deletions(-)
diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java
b/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java
index 28b4616..563f613 100644
--- a/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java
+++ b/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java
@@ -18,6 +18,8 @@
*/
package org.apache.sling.testing.mock.jcr;
+import java.util.Objects;
+
import javax.jcr.Item;
import javax.jcr.ItemNotFoundException;
import javax.jcr.ItemVisitor;
@@ -113,7 +115,25 @@ abstract class AbstractItem implements Item {
@Override
public boolean isSame(final Item otherItem) throws RepositoryException {
- throw new UnsupportedOperationException();
+ boolean same = false;
+ // Both objects were acquired through Session objects that were
created by the same Repository object.
+ // Both objects were acquired through Session objects bound to the
same repository workspace.
+ if (Objects.equals(getSession().getRepository(),
otherItem.getSession().getRepository()) &&
+ Objects.equals(getSession().getWorkspace().getName(),
otherItem.getSession().getWorkspace().getName())) {
+ // The objects are either both Node objects or both Property
objects.
+ if (isNode() && otherItem.isNode()) {
+ // they are Node objects, they must have the same identifier.
+ if (Objects.equals(((Node)this).getIdentifier(),
((Node)otherItem).getIdentifier())) {
+ same = true;
+ }
+ } else if (!isNode() && !otherItem.isNode() &&
+ // Property objects must have identical names and isSame
is true of their parent nodes.
+ Objects.equals(getName(), otherItem.getName()) &&
+ getParent().isSame(otherItem.getParent())) {
+ same = true;
+ }
+ }
+ return same;
}
@Override
diff --git
a/src/test/java/org/apache/sling/testing/mock/jcr/AbstractItemTest.java
b/src/test/java/org/apache/sling/testing/mock/jcr/AbstractItemTest.java
index e7bd268..4e0e174 100644
--- a/src/test/java/org/apache/sling/testing/mock/jcr/AbstractItemTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/jcr/AbstractItemTest.java
@@ -21,6 +21,7 @@ package org.apache.sling.testing.mock.jcr;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
@@ -33,11 +34,11 @@ import org.junit.Test;
public abstract class AbstractItemTest {
- private Session session;
- private Node rootNode;
- private Node node1;
- private Property prop1;
- private Node node11;
+ protected Session session;
+ protected Node rootNode;
+ protected Node node1;
+ protected Property prop1;
+ protected Node node11;
@Before
public void setUp() throws RepositoryException {
@@ -56,16 +57,16 @@ public abstract class AbstractItemTest {
@Test
public void testGetParent() throws RepositoryException {
- assertSame(this.rootNode, this.node1.getParent());
- assertSame(this.node1, this.prop1.getParent());
- assertSame(this.node1, this.node11.getParent());
+ assertTrue(this.rootNode.isSame(this.node1.getParent()));
+ assertTrue(this.node1.isSame(this.prop1.getParent()));
+ assertTrue(this.node1.isSame(this.node11.getParent()));
}
@Test
public void testGetAncestor() throws RepositoryException {
- assertSame(this.node11, this.node11.getAncestor(0));
- assertSame(this.node1, this.node11.getAncestor(1));
- assertSame(this.rootNode, this.node11.getAncestor(2));
+ assertTrue(this.node11.isSame(this.node11.getAncestor(0)));
+ assertTrue(this.node1.isSame(this.node11.getAncestor(1)));
+ assertTrue(this.rootNode.isSame(this.node11.getAncestor(2)));
}
@Test(expected = ItemNotFoundException.class)
@@ -86,10 +87,29 @@ public abstract class AbstractItemTest {
}
@Test
- public void testModifiedNew() {
- // methods return always false
+ public void testModifiedNew() throws RepositoryException {
+ // new item is not 'modified' when 'new'
+ assertFalse(this.node1.isModified());
+ assertTrue(this.node1.isNew());
+
+ // save the pending changes
+ this.session.save();
assertFalse(this.node1.isModified());
assertFalse(this.node1.isNew());
+
+ // not-new node can now be 'modified' after changes
+ ((MockNode)this.node1).itemData.setIsChanged(true);
+ assertTrue(this.node1.isModified());
+ assertFalse(this.node1.isNew());
+ }
+
+ @Test
+ public void testIsSameForNodeComparedToProp() throws RepositoryException {
+ assertFalse(this.node1.isSame(this.prop1));
+ }
+ @Test
+ public void testIsSameForPropComparedToNode() throws RepositoryException {
+ assertFalse(this.prop1.isSame(this.node1));
}
}
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 7f57dba..3af6758 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
@@ -18,37 +18,34 @@
*/
package org.apache.sling.testing.mock.jcr;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import javax.jcr.*;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import org.apache.jackrabbit.JcrConstants;
import org.junit.Assert;
-import org.junit.Before;
import org.junit.Test;
-import static org.junit.Assert.*;
-
-public class MockNodeTest {
-
- private Session session;
- private Node rootNode;
- private Node node1;
- private Property prop1;
- private Node node11;
-
- @Before
- public void setUp() throws RepositoryException {
- this.session = MockJcr.newSession();
- this.rootNode = this.session.getRootNode();
- this.node1 = this.rootNode.addNode("node1");
- this.prop1 = this.node1.setProperty("prop1", "value1");
- this.node11 = this.node1.addNode("node11");
- }
+public class MockNodeTest extends AbstractItemTest {
@Test
public void testGetNodes() throws RepositoryException {
@@ -333,4 +330,39 @@ public class MockNodeTest {
node1.addMixin("mix:referenceable");
assertTrue(node1.isNodeType("mix:referenceable"));
}
+
+ @Test
+ public void testIsSameForNodeComparedToItself() throws RepositoryException
{
+ assertTrue(this.node1.isSame(this.node1));
+ }
+
+ @Test
+ public void testIsSameForNodeComparedToSameNode() throws
RepositoryException {
+ // a different object referencing the same node
+ Node node1ref = this.rootNode.getNode("node1");
+ assertTrue(this.node1.isSame(node1ref));
+ }
+
+ @Test
+ public void testIsSameForNodeComparedToDifferentNode() throws
RepositoryException {
+ assertFalse(this.node1.isSame(this.node11));
+ }
+
+ @Test
+ public void testIsSameForNodeFromDifferentRepository() throws
RepositoryException {
+ Repository otherRepository = MockJcr.newRepository();
+ Session otherSession = otherRepository.login();
+ Node otherNode1 = otherSession.getRootNode().addNode("node1");
+ assertFalse(this.node1.isSame(otherNode1));
+ }
+
+ @Test
+ public void testIsSameForNodeFromDifferentWorkspace() throws
RepositoryException {
+ Session otherSession = session.getRepository().login("otherWorkspace");
+ Node otherRootNode = otherSession.getRootNode();
+ Node otherNode1 = otherRootNode.addNode("node1");
+
+ assertFalse(this.node1.isSame(otherNode1));
+ }
+
}
diff --git
a/src/test/java/org/apache/sling/testing/mock/jcr/MockPropertyTest.java
b/src/test/java/org/apache/sling/testing/mock/jcr/MockPropertyTest.java
index 40a0b13..53e2a8b 100644
--- a/src/test/java/org/apache/sling/testing/mock/jcr/MockPropertyTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/jcr/MockPropertyTest.java
@@ -32,6 +32,7 @@ import java.util.Calendar;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.PropertyType;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
@@ -39,21 +40,9 @@ import javax.jcr.ValueFormatException;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.value.BinaryValue;
-import org.junit.Before;
import org.junit.Test;
-public class MockPropertyTest {
-
- private Session session;
- private Node rootNode;
- private Node node1;
-
- @Before
- public void setUp() throws RepositoryException {
- this.session = MockJcr.newSession();
- this.rootNode = this.session.getRootNode();
- this.node1 = this.rootNode.addNode("node1");
- }
+public class MockPropertyTest extends AbstractItemTest {
@Test
public void testRemove() throws RepositoryException {
@@ -404,4 +393,48 @@ public class MockPropertyTest {
assertEquals("value1", prop1.getValues()[0].getString());
}
+ @Test
+ public void testIsSameForPropComparedToItself() throws RepositoryException
{
+ assertTrue(this.prop1.isSame(this.prop1));
+ }
+
+ @Test
+ public void testIsSameForPropComparedToSameProp() throws
RepositoryException {
+ // a different object referencing the same property
+ Property prop1Ref = this.node1.getProperty("prop1");
+ assertTrue(this.prop1.isSame(prop1Ref));
+ }
+
+ @Test
+ public void testIsSameForPropComparedToDifferentPropFromSameParent()
throws RepositoryException {
+ Property prop2 = this.node1.setProperty("prop2", "value2");
+ assertFalse(this.prop1.isSame(prop2));
+ }
+
+ @Test
+ public void testIsSameForPropComparedToPropFromDifferentParent() throws
RepositoryException {
+ Property prop11 = this.node11.setProperty("prop1", "value1");
+ assertFalse(this.prop1.isSame(prop11));
+ }
+
+ @Test
+ public void testIsSameForPropFromDifferentRepository() throws
RepositoryException {
+ Repository otherRepository = MockJcr.newRepository();
+ Session otherSession = otherRepository.login();
+ Node otherNode1 = otherSession.getRootNode().addNode("node1");
+ Property otherProp1 = otherNode1.setProperty("prop1", "value1");
+
+ assertFalse(this.prop1.isSame(otherProp1));
+ }
+
+ @Test
+ public void testIsSameForPropFromDifferentWorkspace() throws
RepositoryException {
+ Session otherSession = session.getRepository().login("otherWorkspace");
+ Node otherRootNode = otherSession.getRootNode();
+ Node otherNode1 = otherRootNode.addNode("node1");
+ Property otherProp1 = otherNode1.setProperty("prop1", "value1");
+
+ assertFalse(this.prop1.isSame(otherProp1));
+ }
+
}