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;
+ }
+ }
+
}