view src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/Default/DefaultTreeEditorTest.java @ 329:2a0cb1f0ba4e

rename Error package
author kono
date Sat, 08 Jul 2017 21:05:55 +0900
parents f69b2a5a821d
children
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.jungle.core.treeeditor.Default;

import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.treeEditor.DefaultTreeEditor;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
import jp.ac.u_ryukyu.ie.cr.jungle.store.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.node.Default.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.jungleError.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> editEither = currentEditor.edit(currentRoot, part, putAttribute);
            if (editEither.isA()) {
                Assert.fail();
            }
            currentRoot = editEither.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());
    }
}