You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2013/04/25 15:47:16 UTC
svn commit: r1475767 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNodeState.java
test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
Author: mduerig
Date: Thu Apr 25 13:46:24 2013
New Revision: 1475767
URL: http://svn.apache.org/r1475767
Log:
OAK-781: Clarify / fix effects of MISSING_NODE as base state of NodeBuilder
isConnected should ignore non existing child nodes
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNodeState.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNodeState.java?rev=1475767&r1=1475766&r2=1475767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MutableNodeState.java Thu Apr 25 13:46:24 2013
@@ -211,7 +211,8 @@ class MutableNodeState extends AbstractN
boolean isConnected(String name) {
assert base != null;
- return nodes.get(name) != null ||
+ MutableNodeState node = nodes.get(name);
+ return node != null && node.exists() ||
!nodes.containsKey(name) && base.getChildNode(name).exists();
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java?rev=1475767&r1=1475766&r2=1475767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java Thu Apr 25 13:46:24 2013
@@ -32,6 +32,7 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
public class MemoryNodeBuilderTest {
@@ -260,6 +261,18 @@ public class MemoryNodeBuilderTest {
NodeBuilder rootBuilder = base.builder();
NodeBuilder any = rootBuilder.getChildNode("any");
assertFalse(any.isConnected());
+ try {
+ any.getChildNode("any");
+ fail();
+ } catch (IllegalStateException expected) {}
+ try {
+ any.exists();
+ fail();
+ } catch (IllegalStateException expected) {}
+ try {
+ any.setChildNode("any");
+ fail();
+ } catch (IllegalStateException expected) {}
}
@Test
@@ -335,6 +348,7 @@ public class MemoryNodeBuilderTest {
}
@Test
+ @Ignore("OAK-781")
public void modifyChildNodeOfNonExistingNode() {
NodeBuilder rootBuilder = EMPTY_NODE.builder();
@@ -433,6 +447,45 @@ public class MemoryNodeBuilderTest {
assertTrue(c.hasProperty("c2"));
}
+ @Test
+ @Ignore("OAK-781")
+ public void navigateNonExistingNode() {
+ NodeBuilder rootBuilder = EMPTY_NODE.builder();
+
+ // +"/a":{"b":{"c":{"c":"cValue"}}} where b.exists() == false
+ rootBuilder.child("a").setChildNode("b", createBC(false));
+
+ NodeState r = rootBuilder.getNodeState();
+ NodeState a = r.getChildNode("a");
+ NodeState b = a.getChildNode("b");
+ NodeState c = b.getChildNode("c");
+
+ assertTrue(a.exists());
+ assertFalse(b.exists());
+ assertTrue(c.exists());
+ assertTrue(c.hasProperty("c"));
+
+ NodeBuilder aBuilder = rootBuilder.getChildNode("a");
+ NodeBuilder bBuilder = aBuilder.getChildNode("b");
+ NodeBuilder cBuilder = bBuilder.getChildNode("c");
+
+ assertTrue(aBuilder.exists());
+ assertFalse(bBuilder.isConnected());
+ assertTrue(cBuilder.exists());
+
+ cBuilder.setProperty("c2", "c2Value");
+ r = rootBuilder.getNodeState();
+ a = r.getChildNode("a");
+ b = a.getChildNode("b");
+ c = b.getChildNode("c");
+
+ assertTrue(a.exists());
+ assertFalse(b.exists());
+ assertTrue(c.exists());
+ assertTrue(c.hasProperty("c"));
+ assertTrue(c.hasProperty("c2"));
+ }
+
private static NodeState createBC(final boolean exists) {
final NodeState C = new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE)
.setProperty("c", "cValue")