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/10/24 16:06:21 UTC

svn commit: r1535387 - /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java

Author: mduerig
Date: Thu Oct 24 14:06:21 2013
New Revision: 1535387

URL: http://svn.apache.org/r1535387
Log:
OAK-783: Reflect Move and Rename upon Root#commit
Test cases demonstrating the limitations documented in MoveDetector's class comment

Modified:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java?rev=1535387&r1=1535386&r2=1535387&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java Thu Oct 24 14:06:21 2013
@@ -42,7 +42,7 @@ public class MoveDetectorTest {
         test.setProperty("c", 3);
         test.child("x");
         test.child("y");
-        test.child("z");
+        test.child("z").child("zz");
         root = rootBuilder.getNodeState();
     }
 
@@ -81,12 +81,64 @@ public class MoveDetectorTest {
         assertTrue(findSingleMove.found());
     }
 
+    /**
+     * Moving a transiently added node doesn't generate a move event
+     * @throws CommitFailedException
+     */
+    @Test
+    public void moveAddedNode() throws CommitFailedException {
+        NodeBuilder rootBuilder = root.builder();
+        rootBuilder.getChildNode("test").setChildNode("added");
+        NodeState moved = move(rootBuilder, "/test/added", "/test/y/added").getNodeState();
+        AssertNoMove assertNoMove = new AssertNoMove();
+        MoveDetector moveDetector = new MoveDetector(assertNoMove);
+        CommitFailedException exception = EditorDiff.process(moveDetector, root, moved);
+        if (exception != null) {
+            throw exception;
+        }
+    }
+
+    /**
+     * Moving a node from a moved subtree doesn't generate a move event.
+     * @throws CommitFailedException
+     */
+    @Test
+    public void moveFromMovedSubtree() throws CommitFailedException {
+        NodeBuilder rootBuilder = root.builder();
+        move(rootBuilder, "/test/z", "/test/y/z");
+        NodeState moved = move(rootBuilder, "/test/y/z/zz", "/test/x/zz").getNodeState();
+        FindSingleMove findSingleMove = new FindSingleMove("/test/z", "/test/y/z");
+        MoveDetector moveDetector = new MoveDetector(findSingleMove);
+        CommitFailedException exception = EditorDiff.process(moveDetector, root, moved);
+        if (exception != null) {
+            throw exception;
+        }
+        assertTrue(findSingleMove.found());
+    }
+
+    /**
+     * Moving a node forth and back again should not generate a move event.
+     * @throws CommitFailedException
+     */
+    @Test
+    public void moveForthAndBack() throws CommitFailedException {
+        NodeBuilder rootBuilder = root.builder();
+        move(rootBuilder, "/test/x", "/test/y/xx");
+        NodeState moved = move(rootBuilder, "/test/y/xx", "/test/x").getNodeState();
+        AssertNoMove assertNoMove = new AssertNoMove();
+        MoveDetector moveDetector = new MoveDetector(assertNoMove);
+        CommitFailedException exception = EditorDiff.process(moveDetector, root, moved);
+        if (exception != null) {
+            throw exception;
+        }
+    }
+
     //------------------------------------------------------------< private >---
 
     private static NodeBuilder move(NodeBuilder builder, String source, String dest) {
         NodeBuilder sourceBuilder = getBuilder(builder, source);
         NodeBuilder destParentBuilder = getBuilder(builder, PathUtils.getParentPath(dest));
-        sourceBuilder.moveTo(destParentBuilder, PathUtils.getName(dest));
+        assertTrue(sourceBuilder.moveTo(destParentBuilder, PathUtils.getName(dest)));
         return builder;
     }
 
@@ -159,4 +211,46 @@ public class MoveDetectorTest {
         }
     }
 
+    private static class AssertNoMove implements MoveValidator {
+        @Override
+        public void move(String sourcePath, String destPath, NodeState moved) throws CommitFailedException {
+            throw new CommitFailedException("Test", 0, "There should be no move operation");
+        }
+
+        @Override
+        public void enter(NodeState before, NodeState after) throws CommitFailedException {
+        }
+
+        @Override
+        public void leave(NodeState before, NodeState after) throws CommitFailedException {
+        }
+
+        @Override
+        public void propertyAdded(PropertyState after) {
+        }
+
+        @Override
+        public void propertyChanged(PropertyState before, PropertyState after) {
+        }
+
+        @Override
+        public void propertyDeleted(PropertyState before) {
+        }
+
+        @Override
+        public MoveValidator childNodeAdded(String name, NodeState after) {
+            return null;
+        }
+
+        @Override
+        public MoveValidator childNodeChanged(String name, NodeState before, NodeState after) {
+            return this;
+        }
+
+        @Override
+        public MoveValidator childNodeDeleted(String name, NodeState before) {
+            return null;
+        }
+    }
+
 }