1 // ================================================================================================
3 // TreeNodeのテストクラスソース。</summary>
5 // <copyright file="TreeNodeTest.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2011 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Models
14 using System.Collections.Generic;
15 using NUnit.Framework;
18 /// TreeNodeのテストクラスです。
21 public class TreeNodeTest
29 public void TestConstructor()
32 TreeNode<string> node = new TreeNode<string>();
33 Assert.IsNull(node.Value);
36 node = new TreeNode<string>("test string");
37 Assert.AreEqual("test string", node.Value);
48 public void TestValue()
51 TreeNode<string> node1 = new TreeNode<string>();
52 Assert.IsNull(node1.Value);
55 node1.Value = "test string";
56 Assert.AreEqual("test string", node1.Value);
59 TreeNode<DateTime> node2 = new TreeNode<DateTime>();
60 node2.Value = new DateTime(100L);
61 Assert.AreEqual(new DateTime(100L), node2.Value);
65 /// Parentプロパティテストケース。
67 /// <remarks>値についての確認はAdd()メソッド等の試験で実施。</remarks>
69 public void TestParent()
72 TreeNode<string> node = new TreeNode<string>();
73 Assert.IsNull(node.Parent);
77 /// Childrenプロパティテストケース。
79 /// <remarks>値についての確認はAdd()メソッド等の試験で実施。</remarks>
81 public void TestChildren()
84 TreeNode<string> node = new TreeNode<string>();
85 Assert.IsNotNull(node.Children);
86 Assert.AreEqual(0, node.Children.Count);
100 TreeNode<string> parent = new TreeNode<string>("parent string");
101 TreeNode<string> child1 = new TreeNode<string>("child1 string");
103 Assert.IsNull(parent.Parent);
104 Assert.AreEqual(1, parent.Children.Count);
105 Assert.AreSame(parent, child1.Parent);
106 Assert.AreEqual(0, child1.Children.Count);
107 Assert.AreSame(child1, parent.Children[0]);
110 TreeNode<string> child2 = new TreeNode<string>("child2 string");
112 Assert.AreEqual(2, parent.Children.Count);
113 Assert.AreSame(child1, parent.Children[0]);
114 Assert.AreSame(parent, child2.Parent);
115 Assert.AreEqual(0, child2.Children.Count);
116 Assert.AreSame(child2, parent.Children[1]);
120 /// Addメソッドテストケース 自分を設定。
123 [ExpectedException(typeof(InvalidOperationException))]
124 public void TestAddThis()
126 TreeNode<string> parent = new TreeNode<string>("parent string");
127 TreeNode<string> child = new TreeNode<string>("child string");
133 /// Addメソッドテストケース 親を設定。
136 [ExpectedException(typeof(InvalidOperationException))]
137 public void TestAddParent()
139 TreeNode<string> parent = new TreeNode<string>("parent string");
140 TreeNode<string> child = new TreeNode<string>("child string");
146 /// Addメソッドテストケース 祖先を設定。
149 [ExpectedException(typeof(InvalidOperationException))]
150 public void TestAddGrandparent()
152 TreeNode<string> grandparent = new TreeNode<string>("grandparent string");
153 TreeNode<string> parent = new TreeNode<string>("parent string");
154 TreeNode<string> child = new TreeNode<string>("child string");
155 grandparent.Add(parent);
157 child.Add(grandparent);
161 /// Removeメソッドテストケース。
167 TreeNode<string> parent = new TreeNode<string>("parent string");
168 TreeNode<string> child1 = new TreeNode<string>("child1 string");
169 TreeNode<string> child2 = new TreeNode<string>("child2 string");
170 TreeNode<string> child3 = new TreeNode<string>("child3 string");
174 Assert.AreEqual(3, parent.Children.Count);
175 Assert.AreSame(parent, child1.Parent);
176 Assert.AreSame(child1, parent.Children[0]);
179 Assert.IsTrue(parent.Remove(child1));
180 Assert.IsNull(child1.Parent);
181 Assert.AreEqual(2, parent.Children.Count);
182 Assert.AreSame(child2, parent.Children[0]);
184 // 削除済みのノードを削除しようとするとfalse
185 Assert.IsFalse(parent.Remove(child1));
186 Assert.AreEqual(2, parent.Children.Count);
189 Assert.IsTrue(parent.Remove(child3));
190 Assert.IsNull(child3.Parent);
191 Assert.AreEqual(1, parent.Children.Count);
192 Assert.AreSame(child2, parent.Children[0]);
196 /// GetEnumeratorメソッドテストケース。
199 public void TestGetEnumerator()
202 TreeNode<string> parent = new TreeNode<string>("parent string");
203 this.AreSameIEnumerator<TreeNode<string>>(parent.GetEnumerator(), parent);
206 TreeNode<string> child1 = new TreeNode<string>("child1 string");
207 TreeNode<string> child2 = new TreeNode<string>("child2 string");
210 this.AreSameIEnumerator<TreeNode<string>>(parent.GetEnumerator(), parent, child1, child2);
213 TreeNode<string> grandchild1 = new TreeNode<string>("grandchild1 string");
214 child1.Add(grandchild1);
215 this.AreSameIEnumerator<TreeNode<string>>(parent.GetEnumerator(), parent, child1, grandchild1, child2);
223 /// IEnumeratorが指定された値を返すかを検証する。
225 /// <typeparam name="T">IEnumeratorが返す型。</typeparam>
226 /// <param name="actual">検証するIEnumerator。</param>
227 /// <param name="expected">期待値。</param>
228 /// <remarks>値の数も含めて検証する。不一致は試験失敗。</remarks>
229 private void AreSameIEnumerator<T>(IEnumerator<T> actual, params T[] expected)
231 foreach (T obj in expected)
233 if (actual.MoveNext())
235 Assert.AreSame(obj, actual.Current);
239 Assert.Fail("actual < expected");
243 if (actual.MoveNext())
245 Assert.Fail("actual > expected");