view src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java @ 81:715a9fbf02fc

remove <T> many source
author one
date Sun, 31 Aug 2014 07:46:30 +0900
parents 053c9b52a5b2
children fb1dc448ac8c
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.impl.treeeditor;

import java.nio.ByteBuffer;

import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.tests.util.TestUtil;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
import junit.framework.Assert;
import junit.framework.TestCase;

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()){
			ByteBuffer value = ByteBuffer.wrap(part.toString().getBytes());
			PutAttribute putAttribute = new PutAttribute(key,value);
			Either<Error,TreeNode> either = currentEditor.edit(currentRoot,part,putAttribute);
			if(either.isA()){
				Assert.fail();
			}
			currentRoot = either.b();
		}
		
		TreeNode newRoot = currentRoot;
		DefaultTraverser traverser = new DefaultTraverser();
		
		for(DefaultNodePath part : path.inits()){
			Either<Error,Traversal<TreeNode>> 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<TreeNode>> 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,TreeNode> either = instance.edit(node,path,new AppendChildAt(0));
		if(either.isA()){
			Assert.fail();
		}
		TreeNode newRoot = either.b();
		Assert.assertEquals(1,newRoot.getChildren().size());
	}
}