0
|
1 package jp.ac.u_ryukyu.ie.cr.jungle.core.impl.treeeditor;
|
|
2
|
|
3 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath;
|
|
4 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor;
|
|
5 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
|
|
6 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.logger.LoggingNode;
|
|
7 import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.AppendChildAt;
|
|
8 import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.PutAttribute;
|
|
9 import jp.ac.u_ryukyu.ie.cr.jungle.tests.util.TestUtil;
|
|
10 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode;
|
|
11 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultEvaluator;
|
|
12 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
|
|
13 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.Traversal;
|
|
14 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
|
|
15 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
|
|
16 import junit.framework.Assert;
|
|
17 import junit.framework.TestCase;
|
|
18
|
|
19 import java.nio.ByteBuffer;
|
|
20
|
|
21 public class DefaultTreeEditorTest extends TestCase {
|
|
22 public DefaultTreeEditor instance() {
|
|
23 DefaultTraverser traverser = new DefaultTraverser();
|
|
24 return new DefaultTreeEditor(traverser);
|
|
25 }
|
|
26
|
|
27 public void testEdittingDoesNotEffectToOtherTree() {
|
|
28 TreeNode root = TestUtil.createMockTree(3);
|
|
29 DefaultTreeEditor editor = new DefaultTreeEditor(new DefaultTraverser());
|
|
30 DefaultNodePath path = new DefaultNodePath().add(0).add(2);
|
|
31
|
|
32 TreeNode oldRoot = root;
|
|
33
|
|
34 DefaultTreeEditor currentEditor = editor;
|
|
35 String key = "path";
|
|
36
|
|
37
|
|
38 TreeNode currentRoot = root;
|
|
39 for (DefaultNodePath part : path.inits()) {
|
|
40 String str = part.toString();
|
|
41 ByteBuffer value = ByteBuffer.wrap(str.getBytes());
|
|
42 PutAttribute putAttribute = new PutAttribute(key, value);
|
|
43 Either<Error, LoggingNode> either = currentEditor.edit(currentRoot, part, putAttribute);
|
|
44 if (either.isA()) {
|
|
45 Assert.fail();
|
|
46 }
|
|
47 currentRoot = either.b().getWrap();
|
|
48 }
|
|
49
|
|
50 TreeNode newRoot = currentRoot;
|
|
51 DefaultTraverser traverser = new DefaultTraverser();
|
|
52
|
|
53 for (DefaultNodePath part : path.inits()) {
|
|
54 Either<Error, Traversal> either = traverser.traverse(newRoot, new DefaultEvaluator(part));
|
|
55 if (either.isA()) {
|
|
56 Assert.fail();
|
|
57 }
|
|
58 TreeNode target = either.b().destination();
|
|
59 String expected = part.toString();
|
|
60 String actual = new String(target.getAttributes().get(key).array());
|
|
61
|
|
62 Assert.assertEquals(expected, actual);
|
|
63 }
|
|
64 for (DefaultNodePath part : path.inits()) {
|
|
65 Either<Error, Traversal> either = traverser.traverse(oldRoot, new DefaultEvaluator(part));
|
|
66 if (either.isA()) {
|
|
67 Assert.fail();
|
|
68 }
|
|
69 TreeNode target = either.b().destination();
|
|
70 ByteBuffer actual = target.getAttributes().get(key);
|
|
71
|
|
72 Assert.assertNull(actual);
|
|
73 }
|
|
74
|
|
75 }
|
|
76
|
|
77 public void testEdit() {
|
|
78 DefaultTreeEditor instance = instance();
|
|
79 DefaultTreeNode node = new DefaultTreeNode();
|
|
80 DefaultNodePath path = new DefaultNodePath();
|
|
81
|
|
82 Either<Error, LoggingNode> either = instance.edit(node, path, new AppendChildAt(0));
|
|
83 if (either.isA()) {
|
|
84 Assert.fail();
|
|
85 }
|
|
86 TreeNode newRoot = either.b().getWrap();
|
|
87 Assert.assertEquals(1, newRoot.getChildren().size());
|
|
88 }
|
|
89 }
|