Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java @ 49:e3a507fd57a4
modified TreeEditor and JungleTreeEditor (not done yet)
author | Shoshi TAMAKI |
---|---|
date | Fri, 08 Feb 2013 01:22:26 +0900 |
parents | fb00d7b147c8 |
children | 650fe2a0dccc |
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.TraversableNodeWrapper; 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.ClonableDefaultNode; 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() { ClonableDefaultNode root = TestUtil.createMockTree(3); DefaultTreeEditor editor = new DefaultTreeEditor(new DefaultTraverser()); DefaultNodePath path = new DefaultNodePath().add(0).add(2); ClonableDefaultNode oldRoot = root; DefaultTreeEditor currentEditor = editor; String key = "path"; ClonableDefaultNode currentRoot = root; for(DefaultNodePath part : path.inits()){ ByteBuffer value = ByteBuffer.wrap(part.toString().getBytes()); PutAttribute putAttribute = new PutAttribute(key,value); Either<Error,ClonableDefaultNode> either = currentEditor.edit(currentRoot,part,putAttribute); if(either.isA()){ Assert.fail(); } currentRoot = either.b(); } ClonableDefaultNode newRoot = currentRoot; DefaultTraverser traverser = new DefaultTraverser(); for(DefaultNodePath part : path.inits()){ Either<Error,Traversal<TraversableNodeWrapper<ClonableDefaultNode>>> either = traverser.traverse(new TraversableNodeWrapper<ClonableDefaultNode>(newRoot),new DefaultEvaluator(part)); if(either.isA()){ Assert.fail(); } ClonableDefaultNode target = either.b().destination().getWrapped(); 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<TraversableNodeWrapper<ClonableDefaultNode>>> either = traverser.traverse(new TraversableNodeWrapper<ClonableDefaultNode>(oldRoot),new DefaultEvaluator(part)); if(either.isA()){ Assert.fail(); } ClonableDefaultNode target = either.b().destination().getWrapped(); ByteBuffer actual = target.getAttributes().get(key); Assert.assertNull(actual); } } public void testEdit() { DefaultTreeEditor instance = instance(); ClonableDefaultNode node = new ClonableDefaultNode(); DefaultNodePath path = new DefaultNodePath(); Either<Error,ClonableDefaultNode> either = instance.edit(node,path,new AppendChildAt(0)); if(either.isA()){ Assert.fail(); } ClonableDefaultNode newRoot = either.b(); Assert.assertEquals(1,newRoot.getChildren().size()); } }