diff src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java @ 0:44465893e8b8

first Commit
author Kazuma
date Wed, 30 Nov 2016 01:47:55 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java	Wed Nov 30 01:47:55 2016 +0900
@@ -0,0 +1,89 @@
+package jp.ac.u_ryukyu.ie.cr.jungle.core.impl.treeeditor;
+
+import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.logger.LoggingNode;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.AppendChildAt;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.PutAttribute;
+import jp.ac.u_ryukyu.ie.cr.jungle.tests.util.TestUtil;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode;
+import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultEvaluator;
+import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.jungle.traverser.Traversal;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import java.nio.ByteBuffer;
+
+public class DefaultTreeEditorTest extends TestCase {
+    public DefaultTreeEditor instance() {
+        DefaultTraverser traverser = new DefaultTraverser();
+        return new DefaultTreeEditor(traverser);
+    }
+
+    public void testEdittingDoesNotEffectToOtherTree() {
+        TreeNode root = TestUtil.createMockTree(3);
+        DefaultTreeEditor editor = new DefaultTreeEditor(new DefaultTraverser());
+        DefaultNodePath path = new DefaultNodePath().add(0).add(2);
+
+        TreeNode oldRoot = root;
+
+        DefaultTreeEditor currentEditor = editor;
+        String key = "path";
+
+
+        TreeNode currentRoot = root;
+        for (DefaultNodePath part : path.inits()) {
+            String str = part.toString();
+            ByteBuffer value = ByteBuffer.wrap(str.getBytes());
+            PutAttribute putAttribute = new PutAttribute(key, value);
+            Either<Error, LoggingNode> either = currentEditor.edit(currentRoot, part, putAttribute);
+            if (either.isA()) {
+                Assert.fail();
+            }
+            currentRoot = either.b().getWrap();
+        }
+
+        TreeNode newRoot = currentRoot;
+        DefaultTraverser traverser = new DefaultTraverser();
+
+        for (DefaultNodePath part : path.inits()) {
+            Either<Error, Traversal> either = traverser.traverse(newRoot, new DefaultEvaluator(part));
+            if (either.isA()) {
+                Assert.fail();
+            }
+            TreeNode target = either.b().destination();
+            String expected = part.toString();
+            String actual = new String(target.getAttributes().get(key).array());
+
+            Assert.assertEquals(expected, actual);
+        }
+        for (DefaultNodePath part :  path.inits()) {
+            Either<Error, Traversal> either = traverser.traverse(oldRoot, new DefaultEvaluator(part));
+            if (either.isA()) {
+                Assert.fail();
+            }
+            TreeNode target = either.b().destination();
+            ByteBuffer actual = target.getAttributes().get(key);
+
+            Assert.assertNull(actual);
+        }
+
+    }
+
+    public void testEdit() {
+        DefaultTreeEditor instance = instance();
+        DefaultTreeNode node = new DefaultTreeNode();
+        DefaultNodePath path = new DefaultNodePath();
+
+        Either<Error, LoggingNode> either = instance.edit(node, path, new AppendChildAt(0));
+        if (either.isA()) {
+            Assert.fail();
+        }
+        TreeNode newRoot = either.b().getWrap();
+        Assert.assertEquals(1, newRoot.getChildren().size());
+    }
+}