TreeNodeCollectionTest.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. using System;
  2. using System.Collections;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using NUnit.Framework;
  6. namespace MonoTests.System.Windows.Forms
  7. {
  8. [TestFixture]
  9. public class TreeNodeCollectionTest : TestHelper
  10. {
  11. [Test]
  12. public void Add()
  13. {
  14. ImageList imglist = null;
  15. TestHelper.RemoveWarning (imglist);
  16. TreeView tv = new TreeView();
  17. tv.Nodes.Add("text");
  18. Assert.AreEqual(1, tv.Nodes.Count, "#A1");
  19. Assert.AreEqual("text", tv.Nodes[0].Text, "#A2");
  20. #if NET_2_0
  21. Assert.AreEqual("", tv.Nodes[0].Name, "#A3");
  22. #endif
  23. tv.Nodes.Clear();
  24. tv.Nodes.Add(new TreeNode());
  25. Assert.AreEqual("", tv.Nodes[0].Text, "#B1");
  26. #if NET_2_0
  27. Assert.AreEqual("", tv.Nodes[0].Name, "#B2");
  28. #endif
  29. #if NET_2_0
  30. tv.Nodes.Clear();
  31. tv.Nodes.Add("key", "text");
  32. Assert.AreEqual("text", tv.Nodes[0].Text, "#C1");
  33. Assert.AreEqual("key", tv.Nodes[0].Name, "#C2");
  34. #endif
  35. #if NET_2_0
  36. tv.Nodes.Clear();
  37. imglist = new ImageList();
  38. imglist.Images.Add("image key", new Bitmap(16, 16));
  39. tv.Nodes.Add("key", "text", 0);
  40. Assert.AreEqual("text", tv.Nodes[0].Text, "#D1");
  41. Assert.AreEqual("key", tv.Nodes[0].Name, "#D2");
  42. Assert.AreEqual(0, tv.Nodes[0].ImageIndex, "#D3");
  43. Assert.AreEqual("", tv.Nodes[0].ImageKey, "#D4");
  44. #endif
  45. #if NET_2_0
  46. tv.Nodes.Clear();
  47. imglist = new ImageList();
  48. imglist.Images.Add("image key", new Bitmap(16, 16));
  49. tv.Nodes.Add("key", "text", "image key");
  50. Assert.AreEqual("text", tv.Nodes[0].Text, "#E1");
  51. Assert.AreEqual("key", tv.Nodes[0].Name, "#E2");
  52. Assert.AreEqual(-1, tv.Nodes[0].ImageIndex, "#E3");
  53. Assert.AreEqual("image key", tv.Nodes[0].ImageKey, "#E4");
  54. #endif
  55. #if NET_2_0
  56. tv.Nodes.Clear();
  57. imglist = new ImageList();
  58. imglist.Images.Add("image key", new Bitmap(16, 16));
  59. imglist.Images.Add("selected image key", new Bitmap(16, 16));
  60. tv.Nodes.Add("key", "text", 0, 1);
  61. Assert.AreEqual("text", tv.Nodes[0].Text, "#F1");
  62. Assert.AreEqual("key", tv.Nodes[0].Name, "#F2");
  63. Assert.AreEqual(0, tv.Nodes[0].ImageIndex, "#F3");
  64. Assert.AreEqual("", tv.Nodes[0].ImageKey, "#F4");
  65. Assert.AreEqual(1, tv.Nodes[0].SelectedImageIndex, "#F5");
  66. Assert.AreEqual("", tv.Nodes[0].SelectedImageKey, "#F6");
  67. #endif
  68. #if NET_2_0
  69. tv.Nodes.Clear();
  70. imglist = new ImageList();
  71. imglist.Images.Add("image key", new Bitmap(16, 16));
  72. imglist.Images.Add("selected image key", new Bitmap(16, 16));
  73. tv.Nodes.Add("key", "text", "image key", "selected image key");
  74. Assert.AreEqual("text", tv.Nodes[0].Text, "#G1");
  75. Assert.AreEqual("key", tv.Nodes[0].Name, "#G2");
  76. Assert.AreEqual(-1, tv.Nodes[0].ImageIndex, "#G3");
  77. Assert.AreEqual("image key", tv.Nodes[0].ImageKey, "#G4");
  78. Assert.AreEqual(-1, tv.Nodes[0].SelectedImageIndex, "#G5");
  79. Assert.AreEqual("selected image key", tv.Nodes[0].SelectedImageKey, "#G6");
  80. #endif
  81. #if NET_2_0
  82. tv.Nodes.Clear();
  83. tv.Nodes.Add("key", "text");
  84. tv.Nodes.Add("key", "text 2");
  85. Assert.AreEqual(2, tv.Nodes.Count, "#H1");
  86. Assert.AreEqual("text", tv.Nodes[0].Text, "#H1");
  87. Assert.AreEqual("key", tv.Nodes[0].Name, "#H2");
  88. Assert.AreEqual("text 2", tv.Nodes[1].Text, "#H1");
  89. Assert.AreEqual("key", tv.Nodes[1].Name, "#H2");
  90. Assert.IsTrue(tv.Nodes.ContainsKey("key"), "#I1");
  91. Assert.AreEqual(0, tv.Nodes.IndexOfKey("key"), "#I2");
  92. #endif
  93. }
  94. [Test]
  95. public void Add_Child_Null ()
  96. {
  97. TreeView tv = new TreeView ();
  98. try {
  99. tv.Nodes.Add ((TreeNode) null);
  100. Assert.Fail ("#1");
  101. } catch (ArgumentNullException ex) {
  102. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
  103. Assert.IsNull (ex.InnerException, "#3");
  104. Assert.IsNotNull (ex.Message, "#4");
  105. Assert.IsNotNull (ex.ParamName, "#5");
  106. Assert.AreEqual ("node", ex.ParamName, "#6");
  107. }
  108. }
  109. [Test]
  110. public void AddRange ()
  111. {
  112. TreeView tv = new TreeView ();
  113. TreeNode nodeA = new TreeNode ("A");
  114. TreeNode nodeB = new TreeNode ("B");
  115. TreeNode nodeC = new TreeNode ("C");
  116. TreeNode nodeD = new TreeNode ("D");
  117. tv.Nodes.AddRange (new TreeNode [] { nodeA, nodeB });
  118. Assert.AreEqual (2, tv.Nodes.Count, "#A1");
  119. Assert.AreSame (nodeA, tv.Nodes [0], "#A2");
  120. Assert.AreSame (nodeB, tv.Nodes [1], "#A3");
  121. tv.Nodes.AddRange (new TreeNode [] { nodeC });
  122. Assert.AreEqual (3, tv.Nodes.Count, "#B1");
  123. Assert.AreSame (nodeC, tv.Nodes [2], "#B2");
  124. }
  125. [Test]
  126. public void AddRange_Node_Null ()
  127. {
  128. TreeView tv = new TreeView ();
  129. TreeNode nodeA = new TreeNode ("A");
  130. TreeNode nodeB = new TreeNode ("B");
  131. try {
  132. tv.Nodes.AddRange (new TreeNode [] { nodeA, null, nodeB });
  133. Assert.Fail ("#1");
  134. } catch (ArgumentNullException ex) {
  135. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
  136. Assert.IsNull (ex.InnerException, "#3");
  137. Assert.IsNotNull (ex.Message, "#4");
  138. Assert.IsNotNull (ex.ParamName, "#5");
  139. Assert.AreEqual ("node", ex.ParamName, "#6");
  140. }
  141. }
  142. [Test]
  143. public void AddRange_Nodes_Null ()
  144. {
  145. TreeView tv = new TreeView ();
  146. try {
  147. tv.Nodes.AddRange ((TreeNode []) null);
  148. Assert.Fail ("#1");
  149. } catch (ArgumentNullException ex) {
  150. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
  151. Assert.IsNull (ex.InnerException, "#3");
  152. Assert.IsNotNull (ex.Message, "#4");
  153. Assert.IsNotNull (ex.ParamName, "#5");
  154. Assert.AreEqual ("nodes", ex.ParamName, "#6");
  155. }
  156. }
  157. [Test]
  158. public void Remove ()
  159. {
  160. TreeView tv = new TreeView ();
  161. TreeNode nodeA = tv.Nodes.Add ("A");
  162. TreeNode nodeB = tv.Nodes.Add ("B");
  163. TreeNode nodeC = tv.Nodes.Add ("C");
  164. Assert.AreEqual (3, tv.Nodes.Count, "#A1");
  165. Assert.AreSame (nodeA, tv.Nodes [0], "#A2");
  166. Assert.AreSame (nodeB, tv.Nodes [1], "#A3");
  167. Assert.AreSame (nodeC, tv.Nodes [2], "#A3");
  168. tv.Nodes.Remove (nodeB);
  169. Assert.AreEqual (2, tv.Nodes.Count, "#B1");
  170. Assert.AreSame (nodeA, tv.Nodes [0], "#B2");
  171. Assert.AreSame (nodeC, tv.Nodes [1], "#B3");
  172. tv.Nodes.Remove (nodeA);
  173. Assert.AreEqual (1, tv.Nodes.Count, "#C1");
  174. Assert.AreSame (nodeC, tv.Nodes [0], "#C2");
  175. tv.Nodes.Remove (nodeC);
  176. Assert.AreEqual (0, tv.Nodes.Count, "#D1");
  177. }
  178. [Test]
  179. #if ONLY_1_1
  180. [ExpectedException (typeof (NullReferenceException))]
  181. #endif
  182. public void Remove_NotInCollection ()
  183. {
  184. TreeView tv = new TreeView ();
  185. TreeNode nodeA = tv.Nodes.Add ("A");
  186. tv.Nodes.Remove (nodeA);
  187. tv.Nodes.Remove (nodeA);
  188. }
  189. [Test]
  190. [ExpectedException (typeof (NullReferenceException))]
  191. public void Remove_Null ()
  192. {
  193. TreeView tv = new TreeView ();
  194. tv.Nodes.Remove (null);
  195. }
  196. [Test]
  197. public void Enumerator_Reset ()
  198. {
  199. TreeView tv = new TreeView ();
  200. TreeNode nodeA = tv.Nodes.Add ("A");
  201. IEnumerator enumerator = tv.Nodes.GetEnumerator ();
  202. Assert.IsNull (enumerator.Current, "#A1");
  203. Assert.IsTrue (enumerator.MoveNext (), "#A2");
  204. Assert.IsNotNull (enumerator.Current, "#A3");
  205. Assert.AreSame (nodeA, enumerator.Current, "#A4");
  206. Assert.IsFalse (enumerator.MoveNext (), "#A5");
  207. enumerator.Reset ();
  208. Assert.IsNull (enumerator.Current, "#B1");
  209. Assert.IsTrue (enumerator.MoveNext (), "#B2");
  210. Assert.IsNotNull (enumerator.Current, "#B3");
  211. Assert.AreSame (nodeA, enumerator.Current, "#B4");
  212. Assert.IsFalse (enumerator.MoveNext (), "#B5");
  213. }
  214. [Test]
  215. public void Enumerator_MoveNext ()
  216. {
  217. TreeView tv = new TreeView ();
  218. TreeNode nodeA = tv.Nodes.Add ("A");
  219. TestHelper.RemoveWarning (nodeA);
  220. IEnumerator enumerator = tv.Nodes.GetEnumerator ();
  221. Assert.IsTrue (enumerator.MoveNext (), "#A1");
  222. Assert.IsFalse (enumerator.MoveNext (), "#A2");
  223. Assert.IsFalse (enumerator.MoveNext (), "#A3");
  224. tv = new TreeView ();
  225. enumerator = tv.Nodes.GetEnumerator ();
  226. Assert.IsFalse (enumerator.MoveNext (), "#B1");
  227. Assert.IsFalse (enumerator.MoveNext (), "#B2");
  228. }
  229. [Test]
  230. public void Enumerator_Current ()
  231. {
  232. TreeView tv = new TreeView ();
  233. TreeNode nodeA = tv.Nodes.Add ("A");
  234. TreeNode nodeB = tv.Nodes.Add ("B");
  235. IEnumerator enumerator = tv.Nodes.GetEnumerator ();
  236. Assert.IsNull (enumerator.Current, "#A1");
  237. enumerator.MoveNext ();
  238. Assert.IsNotNull (enumerator.Current, "#A2");
  239. Assert.AreSame (nodeA, enumerator.Current, "#A3");
  240. enumerator.MoveNext ();
  241. Assert.IsNotNull (enumerator.Current, "#A4");
  242. Assert.AreSame (nodeB, enumerator.Current, "#A5");
  243. enumerator.MoveNext ();
  244. Assert.IsNotNull (enumerator.Current, "#A6");
  245. Assert.AreSame (nodeB, enumerator.Current, "#A7");
  246. tv = new TreeView ();
  247. enumerator = tv.Nodes.GetEnumerator ();
  248. Assert.IsNull (enumerator.Current, "#B1");
  249. enumerator.MoveNext ();
  250. Assert.IsNull (enumerator.Current, "#B2");
  251. }
  252. [Test]
  253. public void IList_Indexer_Get ()
  254. {
  255. TreeView tv = new TreeView ();
  256. TreeNode nodeA = tv.Nodes.Add ("A");
  257. TreeNode nodeB = tv.Nodes.Add ("B");
  258. TreeNode nodeC = tv.Nodes.Add ("C");
  259. IList list = (IList) tv.Nodes;
  260. Assert.AreSame (nodeA, list [0], "#A1");
  261. Assert.AreSame (nodeB, list [1], "#A2");
  262. Assert.AreSame (nodeC, list [2], "#A3");
  263. try {
  264. object item = list [3];
  265. Assert.Fail ("#B1: " + item);
  266. } catch (ArgumentOutOfRangeException ex) {
  267. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
  268. Assert.IsNull (ex.ActualValue, "#B3");
  269. Assert.IsNull (ex.InnerException, "#B4");
  270. Assert.AreEqual ("index", ex.ParamName, "#B5");
  271. }
  272. try {
  273. object item = list [-1];
  274. Assert.Fail ("#C1: " + item);
  275. } catch (ArgumentOutOfRangeException ex) {
  276. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
  277. Assert.IsNull (ex.ActualValue, "#C3");
  278. Assert.IsNull (ex.InnerException, "#C4");
  279. Assert.AreEqual ("index", ex.ParamName, "#C5");
  280. }
  281. }
  282. [Test]
  283. public void IList_Indexer_Set ()
  284. {
  285. TreeView tv = new TreeView ();
  286. TreeNode nodeA = tv.Nodes.Add ("A");
  287. IList list = (IList) tv.Nodes;
  288. TreeNode nodeB = new TreeNode ("B");
  289. list [0] = nodeB;
  290. Assert.AreSame (nodeB, list [0], "#A1");
  291. try {
  292. list [1] = nodeA;
  293. Assert.Fail ("#B1");
  294. } catch (ArgumentOutOfRangeException ex) {
  295. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
  296. Assert.IsNull (ex.ActualValue, "#B3");
  297. Assert.IsNull (ex.InnerException, "#B4");
  298. #if NET_2_0
  299. Assert.AreEqual ("index", ex.ParamName, "#B5");
  300. #endif
  301. }
  302. try {
  303. list [-1] = nodeA;
  304. Assert.Fail ("#C1");
  305. } catch (ArgumentOutOfRangeException ex) {
  306. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
  307. Assert.IsNull (ex.ActualValue, "#C3");
  308. Assert.IsNull (ex.InnerException, "#C4");
  309. #if NET_2_0
  310. Assert.AreEqual ("index", ex.ParamName, "#C5");
  311. #endif
  312. }
  313. try {
  314. list [0] = "whatever";
  315. Assert.Fail ("#D1");
  316. } catch (ArgumentException ex) {
  317. // Parameter must be of type TreeNode
  318. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
  319. Assert.IsNull (ex.InnerException, "#D3");
  320. #if NET_2_0
  321. Assert.AreEqual ("value", ex.ParamName, "#D4");
  322. #endif
  323. }
  324. try {
  325. list [0] = null;
  326. Assert.Fail ("#E1");
  327. } catch (ArgumentException ex) {
  328. // Parameter must be of type TreeNode
  329. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");
  330. Assert.IsNull (ex.InnerException, "#E3");
  331. #if NET_2_0
  332. Assert.AreEqual ("value", ex.ParamName, "#E4");
  333. #endif
  334. }
  335. }
  336. #if NET_2_0
  337. [Test]
  338. public void ContainsKey ()
  339. {
  340. TreeView tv = new TreeView ();
  341. for (int i = 0; i < 10; i++) {
  342. TreeNode node = new TreeNode ();
  343. node.Name = i.ToString ();
  344. tv.Nodes.Add (node);
  345. }
  346. for (int i = 0; i < 10; i++)
  347. Assert.IsTrue (tv.Nodes.ContainsKey (i.ToString ()), "#CK1");
  348. Assert.AreEqual (false, tv.Nodes.ContainsKey ("42"), "#CK2");
  349. }
  350. [Test]
  351. public void IndexOfKey ()
  352. {
  353. TreeView tv = new TreeView ();
  354. for (int i = 0; i < 10; i++) {
  355. TreeNode node = new TreeNode ();
  356. node.Name = i.ToString ();
  357. tv.Nodes.Add (node);
  358. }
  359. for (int i = 0; i < 10; i++)
  360. Assert.AreEqual (tv.Nodes.IndexOfKey (i.ToString ()), i, "#KI1");
  361. Assert.AreEqual (-1, tv.Nodes.IndexOfKey ("42"), "#KI2");
  362. }
  363. #endif
  364. [Test]
  365. public void Bug408999 ()
  366. {
  367. TreeView tv = new TreeView ();
  368. for (int i = 0; i < 100; i++)
  369. tv.Nodes.Add (i.ToString ());
  370. tv.Nodes.RemoveAt (0);
  371. }
  372. }
  373. }