diff src/treecms/test/AbstractForestTest.java @ 17:168deb591f21

commit
author shoshi
date Tue, 24 May 2011 00:33:12 +0900
parents bb9760760744
children c1e7ec6b3d44
line wrap: on
line diff
--- a/src/treecms/test/AbstractForestTest.java	Sat May 21 04:46:00 2011 +0900
+++ b/src/treecms/test/AbstractForestTest.java	Tue May 24 00:33:12 2011 +0900
@@ -1,11 +1,18 @@
 package treecms.test;
 
+import java.nio.ByteBuffer;
+import java.util.List;
+import java.util.Map;
 import junit.framework.Assert;
 import org.junit.Test;
 import treecms.api.Forest;
+import treecms.api.MonotonicTree;
+import treecms.api.MonotonicTreeNode;
 import treecms.api.NodeID;
 import treecms.api.SingleNode;
 import treecms.api.Tree;
+import treecms.api.TreeNode;
+import treecms.tree.util.NodeData;
 
 /**
  * Forest実装の基本的なテスト
@@ -13,69 +20,125 @@
  */
 public abstract class AbstractForestTest
 {
-	/**
-	 * 基本的なテストを実装するためにはこのメソッドでインスタンスを返す。
-	 * @return Forest
-	 */
 	public abstract Forest getInstance();
 	
-	/**
-	 * Node作成テスト 
-	 * 新しく作成されたNodeがnullでなければOK
-	 */
 	@Test
-	public void testCreateNode()
+	public void testCreate()
 	{
 		Forest forest = getInstance();
-		SingleNode newNode = forest.create();
-		Assert.assertNotNull(newNode);
+		
+		//正常にSingleNodeを作成できることを確認する(引数なし)
+		SingleNode test1 = forest.create();
+		Assert.assertNotNull(test1);
+		
+		//正常にSingleNodeを作成できることを確認する(引数あり)
+		NodeData<SingleNode> d = new NodeData<SingleNode>();
+		d.add(forest.create());
+		d.put(ByteBuffer.wrap("name".getBytes()),ByteBuffer.wrap("value".getBytes()));
+		SingleNode test2 = forest.create(d);
+		Assert.assertNotNull(test2);
+		
+		//指定したNodeData<SingleNode>が正しく継承されているか確認する
+		List<SingleNode> list1 = d.getList();
+		List<SingleNode> list2 = test2.getList();
+		Assert.assertEquals(true,list1.equals(list2));
+		
+		Map<ByteBuffer,ByteBuffer> map1 = d.asMap();
+		Map<ByteBuffer,ByteBuffer> map2 = test2.asMap();
+		Assert.assertEquals(true,map1.equals(map2));
 	}
 	
-	/**
-	 * Node取得テスト
-	 * 新しく作成されたNodeからNodeIDを取得し、ForestよりNodeを再取得する 
-	 */
 	@Test
-	public void testGetNode()
+	public void testGet()
 	{
 		Forest forest = getInstance();
 		SingleNode newNode = forest.create();
 		NodeID newID = newNode.getID();
 		
-		SingleNode node = forest.get(newID);
+		SingleNode test1 = forest.get(newID);
+		
+		//同じノードであることを確認する
+		Assert.assertEquals(newNode,test1);
 		
-		Assert.assertEquals(newNode,node);
+		//forest.get(NodeID _id)にnullが渡されたときNullPointerExceptionが発生する
+		try{
+			forest.get(null);
+			Assert.fail("no NullPointerException occurs when call forest.get(null)");
+		}catch(NullPointerException _e){
+		}
+	
+		//存在しないNodeIDが指定された場合はnullである
+		NodeID updated = newID.update();
+		SingleNode test2 = forest.get(updated);
+		Assert.assertNull(test2);
 	}
 	
-	/**
-	 * NodeのTip(最新版)の取得テスト
-	 * 新しく作成されたNodeのUUIDを抜き出し、Forestよりtipを取得する
-	 */
 	@Test
 	public void testGetTip()
 	{
 		Forest forest = getInstance();
+		
+		//SingleNodeを作成した時点で、最新版と比較し一致することを確認する
 		SingleNode newNode = forest.create();
 		NodeID newID = newNode.getID();
-		
 		SingleNode tip = forest.getTip(newID.getUUID());
 		
 		Assert.assertEquals(newNode,tip);
+		
+		//同じUUIDを持つSingleNodeを登録すると、最新版が更新される
+		NodeData<SingleNode> d = new NodeData<SingleNode>(tip,tip);
+		SingleNode test1 = forest.create(tip.getID().update(),d);
+		tip = forest.getTip(test1.getID().getUUID());
+		
+		Assert.assertEquals(test1,tip);
+		
+		//nullが渡された場合は、NullPointerExceptionが発生する
+		try{
+			forest.getTip(null);
+			Assert.fail("no NullPointerException occurs when call forest.getTip(null)");
+		}catch(NullPointerException _e){
+			//OK
+		}
 	}
 	
-	/**
-	 * NodeIDを更新したものを作成したとき、きちんと登録されているかテスト 
-	 */
 	@Test
-	public void updateTest()
+	public void testGetTree()
 	{
+		Forest f = getInstance();
 		
+		//同一のForestから作成されたSingleNodeから正しくTreeが作成できるか確認する。
+		SingleNode n = f.create();
+		Tree t = f.getTree(n);
+		Assert.assertNotNull(t);
+		
+		//作成したTreeからTreeNodeのルートが取得できる。
+		TreeNode root = t.getRoot();
+		Assert.assertNotNull(t.getRoot());
+		
+		//取得したTreeNodeから引数に指定したSingleNodeが取得できるか確認する
+		Assert.assertEquals(n,root.getNode());
 	}
 	
-	/**
-	 * MainTreeが取得できるかテストします。
-	 * MainTreeとは、コンテンツ全体を含むツリーです
-	 */
+	@Test
+	public void testGetMonotonicTree()
+	{
+		Forest f = getInstance();
+		SingleNode newNode = f.create();
+		
+		Tree newTree = f.getTree(newNode);
+		MonotonicTree newMonoTree = f.getMonotonicTree(newTree);
+		Assert.assertNotNull(newMonoTree);
+		
+		MonotonicTreeNode m = newMonoTree.getRoot();
+		Assert.assertNotNull(m);
+		SingleNode n = m.getNode();
+		Assert.assertEquals(true,n.equals(newNode));
+		
+		Tree t2 = newMonoTree.getTree();
+		Assert.assertNotNull(t2);
+		Assert.assertEquals(true,t2.equals(t2));
+	}
+	
 	@Test
 	public void testGetMainTree()
 	{