TreeViewTest.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  1. using System;
  2. using System.Collections;
  3. using System.Drawing;
  4. using System.Globalization;
  5. using System.Windows.Forms;
  6. using NUnit.Framework;
  7. namespace MonoTests.System.Windows.Forms
  8. {
  9. [TestFixture]
  10. public class TreeViewTest : TestHelper
  11. {
  12. [Test] // bug #80620
  13. public void ClientRectangle_Borders ()
  14. {
  15. TreeView tv = new TreeView ();
  16. tv.CreateControl ();
  17. Assert.AreEqual (tv.ClientRectangle, new TreeView ().ClientRectangle);
  18. }
  19. [Test]
  20. public void CollapseAll_NoNodes ()
  21. {
  22. TreeView tv = new TreeView ();
  23. tv.CollapseAll ();
  24. }
  25. [Test]
  26. public void DefaultCtor ()
  27. {
  28. TreeView tv = new TreeView ();
  29. Assert.AreEqual (121, tv.Width, "#1");
  30. Assert.AreEqual (97, tv.Height, "#2");
  31. Assert.IsTrue (tv.Scrollable, "#3");
  32. Assert.AreEqual (tv.SelectedNode, null, "#4");
  33. }
  34. #if NET_2_0
  35. [Test] // bug #81424
  36. public void DoubleBuffered ()
  37. {
  38. MockTreeView tv = new MockTreeView ();
  39. Assert.IsFalse (tv.IsDoubleBuffered, "#A1");
  40. Assert.IsTrue (tv.GetControlStyle (ControlStyles.AllPaintingInWmPaint), "#A2");
  41. Assert.IsFalse (tv.GetControlStyle (ControlStyles.DoubleBuffer), "#A3");
  42. Assert.IsFalse (tv.GetControlStyle (ControlStyles.OptimizedDoubleBuffer), "#A4");
  43. Assert.IsFalse (tv.GetControlStyle (ControlStyles.UserPaint), "#A5");
  44. Assert.IsFalse (tv.GetControlStyle (ControlStyles.StandardClick), "#A6");
  45. tv.IsDoubleBuffered = true;
  46. Assert.IsTrue (tv.IsDoubleBuffered, "#B1");
  47. Assert.IsTrue (tv.GetControlStyle (ControlStyles.AllPaintingInWmPaint), "#B2");
  48. Assert.IsFalse (tv.GetControlStyle (ControlStyles.DoubleBuffer), "#B3");
  49. Assert.IsTrue (tv.GetControlStyle (ControlStyles.OptimizedDoubleBuffer), "#B4");
  50. Assert.IsFalse (tv.GetControlStyle (ControlStyles.UserPaint), "#B5");
  51. }
  52. #endif
  53. [Test]
  54. public void SimpleShowTest ()
  55. {
  56. Form f = new Form ();
  57. f.ShowInTaskbar = false;
  58. TreeView tv = new TreeView ();
  59. //tv.BorderStyle = BorderStyle.FixedSingle;
  60. tv.Location = new Point (20, 20);
  61. //tv.Text = "adssssss";
  62. f.Controls.Add (tv);
  63. f.Show ();
  64. f.Dispose ();
  65. }
  66. [Test]
  67. public void NodeAddIndex ()
  68. {
  69. TreeView tv = new TreeView ();
  70. TreeNode tn1 = new TreeNode ("blah");
  71. TreeNode tn2 = new TreeNode ("blah2");
  72. TreeNode tn3 = new TreeNode ("blah3");
  73. Assert.AreEqual (0, tv.Nodes.Add (tn1), "A1");
  74. Assert.AreEqual (1, tv.Nodes.Add (tn2), "A2");
  75. Assert.AreEqual (2, tv.Nodes.Add (tn3), "A3");
  76. }
  77. [Test]
  78. public void NodesCopyToTest ()
  79. {
  80. TreeView tv = new TreeView();
  81. TreeNode one = new TreeNode ("one");
  82. TreeNode two = new TreeNode ("two");
  83. TreeNode three = new TreeNode ("three");
  84. tv.Nodes.Add (one);
  85. tv.Nodes.Add (two);
  86. tv.Nodes.Add (three);
  87. ArrayList al = new ArrayList (tv.Nodes);
  88. Assert.AreEqual (al [0], tv.Nodes [0], "A1");
  89. Assert.AreEqual (al [1], tv.Nodes [1], "A2");
  90. Assert.AreEqual (al [2], tv.Nodes [2], "A3");
  91. }
  92. [Test]
  93. public void ExpandAll_Flat_Created ()
  94. {
  95. TreeView tv = new TreeView ();
  96. tv.Size = new Size (300, 100);
  97. for (int i = 0; i <= 100; i++)
  98. tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
  99. Form form = new Form ();
  100. form.ShowInTaskbar = false;
  101. form.Controls.Add (tv);
  102. form.Show ();
  103. Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
  104. Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
  105. Assert.IsTrue (tv.Nodes [0].IsVisible, "#B1");
  106. Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
  107. tv.ExpandAll ();
  108. Assert.IsFalse (tv.Nodes [0].IsExpanded, "#C1");
  109. Assert.IsFalse (tv.Nodes [99].IsExpanded, "#C2");
  110. Assert.IsTrue (tv.Nodes [0].IsVisible, "#D1");
  111. Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
  112. form.Close ();
  113. }
  114. [Test]
  115. public void ExpandAll_Tree_Created ()
  116. {
  117. TreeView tv = new TreeView ();
  118. tv.Size = new Size (300, 100);
  119. for (int i = 0; i <= 100; i++) {
  120. TreeNode node = tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
  121. node.Nodes.Add ("child");
  122. }
  123. Form form = new Form ();
  124. form.ShowInTaskbar = false;
  125. form.Controls.Add (tv);
  126. form.Show ();
  127. Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
  128. Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
  129. Assert.IsTrue (tv.Nodes [0].IsVisible, "#B1");
  130. Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
  131. tv.ExpandAll ();
  132. Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
  133. Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
  134. Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
  135. Assert.IsTrue (tv.Nodes [99].IsVisible, "#D2");
  136. form.Close ();
  137. }
  138. [Test]
  139. public void ExpandAll_Flat_NotCreated ()
  140. {
  141. TreeView tv = new TreeView ();
  142. tv.Size = new Size (300, 100);
  143. for (int i = 0; i <= 100; i++)
  144. tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
  145. Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
  146. Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
  147. Assert.IsFalse (tv.Nodes [0].IsVisible, "#B1");
  148. Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
  149. tv.ExpandAll ();
  150. Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
  151. Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
  152. Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
  153. Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
  154. Form form = new Form ();
  155. form.ShowInTaskbar = false;
  156. form.Controls.Add (tv);
  157. form.Show ();
  158. Assert.IsFalse (tv.Nodes [0].IsExpanded, "#E1");
  159. Assert.IsFalse (tv.Nodes [99].IsExpanded, "#E2");
  160. Assert.IsTrue (tv.Nodes [0].IsVisible, "#F1");
  161. Assert.IsFalse (tv.Nodes [99].IsVisible, "#F2");
  162. form.Dispose ();
  163. }
  164. [Test] // bug #80284
  165. public void ExpandAll_Tree_NotCreated ()
  166. {
  167. TreeView tv = new TreeView ();
  168. tv.Size = new Size (300, 100);
  169. for (int i = 0; i <= 100; i++) {
  170. TreeNode node = tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
  171. node.Nodes.Add ("child");
  172. }
  173. Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
  174. Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
  175. Assert.IsFalse (tv.Nodes [0].IsVisible, "#B1");
  176. Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
  177. tv.ExpandAll ();
  178. Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
  179. Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
  180. Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
  181. Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
  182. Form form = new Form ();
  183. form.ShowInTaskbar = false;
  184. form.Controls.Add (tv);
  185. form.Show ();
  186. Assert.IsTrue (tv.Nodes [0].IsExpanded, "#E1");
  187. Assert.IsTrue (tv.Nodes [99].IsExpanded, "#E2");
  188. #if NET_2_0
  189. Assert.IsTrue (tv.Nodes [0].IsVisible, "#F1");
  190. Assert.IsFalse (tv.Nodes [99].IsVisible, "#F2");
  191. #else
  192. Assert.IsFalse (tv.Nodes [0].IsVisible, "#F1");
  193. Assert.IsTrue (tv.Nodes [99].IsVisible, "#F2");
  194. #endif
  195. form.Dispose ();
  196. }
  197. class MockTreeView : TreeView
  198. {
  199. public bool GetControlStyle (ControlStyles style)
  200. {
  201. return base.GetStyle (style);
  202. }
  203. #if NET_2_0
  204. public bool IsDoubleBuffered {
  205. get { return DoubleBuffered; }
  206. set { DoubleBuffered = value; }
  207. }
  208. #endif
  209. }
  210. [Test]
  211. public void MethodIsInputChar ()
  212. {
  213. // Basically, show that this method always returns true
  214. InputCharControl m = new InputCharControl ();
  215. bool result = true;
  216. for (int i = 0; i < 256; i++)
  217. result &= m.PublicIsInputChar ((char)i);
  218. Assert.AreEqual (true, result, "I1");
  219. }
  220. private class InputCharControl : TreeView
  221. {
  222. public bool PublicIsInputChar (char charCode)
  223. {
  224. return base.IsInputChar (charCode);
  225. }
  226. }
  227. #if NET_2_0
  228. [Test]
  229. public void SelectedNodeNullTest ()
  230. {
  231. Form f = new Form ();
  232. f.ShowInTaskbar = false;
  233. TreeView tv = new TreeView ();
  234. tv.Nodes.Add ("Node 1");
  235. f.Controls.Add (tv);
  236. f.Show ();
  237. tv.BeforeSelect += new TreeViewCancelEventHandler (delegate (object sender, TreeViewCancelEventArgs e) { if (e.Node == null) Assert.Fail ("BeforeSelect should not be called with a null node"); });
  238. tv.AfterSelect += new TreeViewEventHandler (delegate (object sender, TreeViewEventArgs e) { if (e.Node == null) Assert.Fail ("AfterSelect should not be called with a null node"); });
  239. tv.SelectedNode = null;
  240. f.Dispose ();
  241. }
  242. [Test]
  243. public void SortChangesSorted ()
  244. {
  245. TreeView tv = new TreeView ();
  246. Assert.AreEqual (false, tv.Sorted, "A1");
  247. tv.Sort ();
  248. Assert.AreEqual (true, tv.Sorted, "A2");
  249. }
  250. [Test]
  251. public void SortedBeforeNodeAdd ()
  252. {
  253. TreeView tv = new TreeView ();
  254. tv.Sort ();
  255. tv.Nodes.Add ("bbb");
  256. tv.Nodes.Add ("aaa");
  257. Assert.AreEqual ("aaa", tv.Nodes[0].Text, "A1");
  258. }
  259. #endif
  260. [Test]
  261. public void MethodToString ()
  262. {
  263. TreeView tv = new TreeView ();
  264. Assert.AreEqual (@"System.Windows.Forms.TreeView, Nodes.Count: 0", tv.ToString (), "A1");
  265. tv.Nodes.Add ("A");
  266. tv.Nodes.Add ("B");
  267. Assert.AreEqual (@"System.Windows.Forms.TreeView, Nodes.Count: 2, Nodes[0]: TreeNode: A", tv.ToString (), "A2");
  268. }
  269. }
  270. [TestFixture]
  271. public class BeforeSelectEvent : TestHelper
  272. {
  273. int beforeSelect;
  274. TreeViewCancelEventArgs cancelEventArgs;
  275. bool cancel;
  276. public void TreeView_BeforeSelect (object sender, TreeViewCancelEventArgs e)
  277. {
  278. beforeSelect++;
  279. cancelEventArgs = e;
  280. if (cancel)
  281. e.Cancel = true;
  282. }
  283. [SetUp]
  284. protected override void SetUp () {
  285. beforeSelect = 0;
  286. cancelEventArgs = null;
  287. cancel = false;
  288. base.SetUp ();
  289. }
  290. [Test]
  291. [Category ("NotWorking")]
  292. public void CancelBeforeCreationOfHandle ()
  293. {
  294. TreeView tvw = new TreeView ();
  295. tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
  296. cancel = true;
  297. TreeNode nodeA = tvw.Nodes.Add ("A");
  298. Assert.AreEqual (0, beforeSelect, "#A1");
  299. tvw.SelectedNode = nodeA;
  300. Assert.AreEqual (0, beforeSelect, "#A2");
  301. Assert.IsNull (cancelEventArgs, "#A3");
  302. Assert.IsFalse (nodeA.IsSelected, "#A4");
  303. Assert.AreSame (nodeA, tvw.SelectedNode, "#A5");
  304. TreeNode nodeB = tvw.Nodes.Add ("B");
  305. Assert.AreEqual (0, beforeSelect, "#B1");
  306. tvw.SelectedNode = nodeB;
  307. Assert.AreEqual (0, beforeSelect, "#B2");
  308. Assert.IsNull (cancelEventArgs, "#B3");
  309. Assert.IsFalse (nodeB.IsSelected, "#B4");
  310. Assert.AreSame (nodeB, tvw.SelectedNode, "#B5");
  311. Form form = new Form ();
  312. form.ShowInTaskbar = false;
  313. form.Controls.Add (tvw);
  314. form.Show ();
  315. Assert.AreEqual (2, beforeSelect, "#C1");
  316. Assert.IsNotNull (cancelEventArgs, "#C2");
  317. Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#C3");
  318. Assert.AreSame (nodeA, cancelEventArgs.Node, "#C4");
  319. Assert.IsFalse (nodeA.IsSelected, "#C5");
  320. Assert.IsFalse (nodeB.IsSelected, "#C6");
  321. Assert.IsNull (tvw.SelectedNode, "#C7");
  322. }
  323. [Test]
  324. public void SelectBeforeCreationOfHandle ()
  325. {
  326. TreeView tvw = new TreeView ();
  327. tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
  328. TreeNode nodeA = tvw.Nodes.Add ("A");
  329. Assert.AreEqual (0, beforeSelect, "#A1");
  330. tvw.SelectedNode = nodeA;
  331. Assert.AreEqual (0, beforeSelect, "#A2");
  332. Assert.IsNull (cancelEventArgs, "#A3");
  333. Assert.IsFalse (nodeA.IsSelected, "#A4");
  334. Assert.AreSame (nodeA, tvw.SelectedNode, "#A5");
  335. TreeNode nodeB = tvw.Nodes.Add ("B");
  336. Assert.AreEqual (0, beforeSelect, "#B1");
  337. tvw.SelectedNode = nodeB;
  338. Assert.AreEqual (0, beforeSelect, "#B2");
  339. Assert.IsNull (cancelEventArgs, "#B3");
  340. Assert.IsFalse (nodeB.IsSelected, "#B4");
  341. Assert.AreSame (nodeB, tvw.SelectedNode, "#B5");
  342. Form form = new Form ();
  343. form.ShowInTaskbar = false;
  344. form.Controls.Add (tvw);
  345. form.Show ();
  346. Assert.AreEqual (1, beforeSelect, "#C1");
  347. Assert.IsNotNull (cancelEventArgs, "#C2");
  348. Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#C3");
  349. Assert.AreSame (nodeB, cancelEventArgs.Node, "#C4");
  350. Assert.IsFalse (nodeA.IsSelected, "#C5");
  351. Assert.IsTrue (nodeB.IsSelected, "#C6");
  352. Assert.AreSame (nodeB, tvw.SelectedNode, "#C7");
  353. form.Close ();
  354. }
  355. [Test]
  356. public void CancelAfterCreationOfHandle ()
  357. {
  358. TreeView tvw = new TreeView ();
  359. tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
  360. cancel = true;
  361. Form form = new Form ();
  362. form.ShowInTaskbar = false;
  363. form.Controls.Add (tvw);
  364. form.Show ();
  365. TreeNode nodeA = tvw.Nodes.Add ("A");
  366. Assert.AreEqual (0, beforeSelect, "#A1");
  367. tvw.SelectedNode = nodeA;
  368. Assert.AreEqual (1, beforeSelect, "#A2");
  369. Assert.IsNotNull (cancelEventArgs, "#A3");
  370. Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#A4");
  371. Assert.AreSame (nodeA, cancelEventArgs.Node, "#A5");
  372. Assert.IsFalse (nodeA.IsSelected, "#A6");
  373. Assert.IsNull (tvw.SelectedNode, "#A7");
  374. TreeNode nodeB = tvw.Nodes.Add ("B");
  375. Assert.AreEqual (1, beforeSelect, "#B1");
  376. tvw.SelectedNode = nodeB;
  377. Assert.AreEqual (2, beforeSelect, "#B2");
  378. Assert.IsNotNull (cancelEventArgs, "#B3");
  379. Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#B4");
  380. Assert.AreSame (nodeB, cancelEventArgs.Node, "#B5");
  381. Assert.IsFalse (nodeB.IsSelected, "#B6");
  382. Assert.IsNull (tvw.SelectedNode, "#B7");
  383. form.Close ();
  384. }
  385. [Test]
  386. [Category ("NotWorking")]
  387. public void SelectAfterCreationOfHandle ()
  388. {
  389. TreeView tvw = new TreeView ();
  390. tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
  391. Form form = new Form ();
  392. form.ShowInTaskbar = false;
  393. form.Controls.Add (tvw);
  394. form.Show ();
  395. TreeNode nodeA = tvw.Nodes.Add ("A");
  396. Assert.AreEqual (0, beforeSelect, "#A1");
  397. tvw.SelectedNode = nodeA;
  398. Assert.AreEqual (1, beforeSelect, "#A2");
  399. Assert.IsNotNull (cancelEventArgs, "#A3");
  400. Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#A4");
  401. Assert.AreSame (nodeA, cancelEventArgs.Node, "#A5");
  402. Assert.IsTrue (nodeA.IsSelected, "#A6");
  403. Assert.AreSame (nodeA, tvw.SelectedNode, "#A7");
  404. TreeNode nodeB = tvw.Nodes.Add ("B");
  405. Assert.AreEqual (1, beforeSelect, "#B1");
  406. tvw.SelectedNode = nodeB;
  407. Assert.AreEqual (2, beforeSelect, "#B2");
  408. Assert.IsNotNull (cancelEventArgs, "#B3");
  409. Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#B4");
  410. Assert.AreSame (nodeB, cancelEventArgs.Node, "#B5");
  411. Assert.IsTrue (nodeB.IsSelected, "#B6");
  412. Assert.AreSame (nodeB, tvw.SelectedNode, "#B7");
  413. }
  414. }
  415. [TestFixture]
  416. public class AfterSelectEvent : TestHelper
  417. {
  418. [SetUp]
  419. protected override void SetUp () {
  420. afterSelect = 0;
  421. base.SetUp ();
  422. }
  423. [Test] // bug #81319
  424. [Category ("NotWorking")]
  425. public void SelectedNode_Created ()
  426. {
  427. TreeView tv = new TreeView ();
  428. tv.AfterSelect += new TreeViewEventHandler (TreeView_AfterSelect);
  429. TreeNode one = new TreeNode ("one");
  430. TreeNode two = new TreeNode ("two");
  431. tv.Nodes.Add (one);
  432. tv.Nodes.Add (two);
  433. Form form = new Form ();
  434. form.ShowInTaskbar = false;
  435. form.Controls.Add (tv);
  436. form.Show ();
  437. Assert.IsNotNull (tv.SelectedNode, "#A1");
  438. Assert.AreSame (one, tv.SelectedNode, "#A2");
  439. Assert.IsTrue (one.IsSelected, "#A3");
  440. Assert.IsFalse (two.IsSelected, "#A4");
  441. Assert.AreEqual (1, afterSelect, "#A5");
  442. tv.SelectedNode = null;
  443. Assert.IsNull (tv.SelectedNode, "#C1");
  444. Assert.IsFalse (one.IsSelected, "#C2");
  445. Assert.IsFalse (two.IsSelected, "#C3");
  446. Assert.AreEqual (1, afterSelect, "#C4");
  447. tv.SelectedNode = two;
  448. Assert.IsNotNull (tv.SelectedNode, "#D1");
  449. Assert.AreSame (two, tv.SelectedNode, "#D2");
  450. Assert.IsFalse (one.IsSelected, "#D3");
  451. Assert.IsTrue (two.IsSelected, "#D4");
  452. Assert.AreEqual (2, afterSelect, "#D5");
  453. form.Dispose ();
  454. }
  455. [Test]
  456. public void SelectedNode_NotCreated ()
  457. {
  458. TreeView tv = new TreeView ();
  459. tv.AfterSelect += new TreeViewEventHandler (TreeView_AfterSelect);
  460. TreeNode one = new TreeNode ("one");
  461. TreeNode two = new TreeNode ("two");
  462. tv.Nodes.Add (one);
  463. tv.Nodes.Add (two);
  464. Assert.IsNull (tv.SelectedNode, "#A1");
  465. Assert.IsFalse (one.IsSelected, "#A2");
  466. Assert.IsFalse (two.IsSelected, "#A3");
  467. Assert.AreEqual (0, afterSelect, "#A4");
  468. tv.SelectedNode = two;
  469. Assert.IsNotNull (tv.SelectedNode, "#B1");
  470. Assert.AreSame (two, tv.SelectedNode, "#B2");
  471. Assert.IsFalse (one.IsSelected, "#B3");
  472. Assert.IsFalse (two.IsSelected, "#B4");
  473. Assert.AreEqual (0, afterSelect, "#B5");
  474. tv.SelectedNode = null;
  475. Assert.IsNull (tv.SelectedNode, "#C1");
  476. Assert.IsFalse (one.IsSelected, "#C2");
  477. Assert.IsFalse (two.IsSelected, "#C3");
  478. Assert.AreEqual (0, afterSelect, "#C4");
  479. tv.SelectedNode = one;
  480. Assert.IsNotNull (tv.SelectedNode, "#D1");
  481. Assert.AreSame (one, tv.SelectedNode, "#D2");
  482. Assert.IsFalse (one.IsSelected, "#D3");
  483. Assert.IsFalse (two.IsSelected, "#D4");
  484. Assert.AreEqual (0, afterSelect, "#D5");
  485. }
  486. void TreeView_AfterSelect (object sender, TreeViewEventArgs e)
  487. {
  488. afterSelect++;
  489. }
  490. int afterSelect;
  491. }
  492. #if NET_2_0
  493. [TestFixture]
  494. public class TreeViewNodeSorterTest : TestHelper {
  495. static bool node_sorter_called;
  496. [Test]
  497. public void SortedAfterTreeViewNodeSorterIsSetToSomething() {
  498. TreeView t = new TreeView();
  499. t.TreeViewNodeSorter = new NodeSorter();
  500. Assert.IsTrue(t.Sorted);
  501. }
  502. [Test]
  503. public void SortedAfterTreeViewNodeSorterIsSetToNull() {
  504. TreeView t = new TreeView();
  505. t.TreeViewNodeSorter = null;
  506. Assert.IsFalse(t.Sorted);
  507. }
  508. [Test]
  509. public void NormalTreeViewNodeSorter() {
  510. TreeView t = new TreeView();
  511. t.Nodes.Add("2");
  512. t.Nodes.Add("1");
  513. node_sorter_called = false;
  514. t.TreeViewNodeSorter = new NodeSorter();
  515. Assert.IsTrue(node_sorter_called, "Node sorter called");
  516. Assert.IsTrue(t.Nodes[0].Text == "2", "Order");
  517. }
  518. [Test]
  519. public void NormalSorted() {
  520. TreeView t = new TreeView();
  521. t.Nodes.Add("2");
  522. t.Nodes.Add("1");
  523. t.Sorted = true;
  524. Assert.IsTrue(t.Nodes[0].Text == "1", "Order");
  525. }
  526. [Test]
  527. public void SortedDoesNotSortWhenTreeViewNodeSorterIsSet() {
  528. TreeView t = new TreeView();
  529. t.Nodes.Add("2");
  530. t.Nodes.Add("1");
  531. t.TreeViewNodeSorter = new NodeSorter();
  532. t.Sorted = false;
  533. t.Sorted = true;
  534. Assert.IsTrue(t.Nodes[0].Text == "2", "Order");
  535. }
  536. [Test]
  537. public void SortedDoesNotSortWhenItIsAlreadyTrue() {
  538. TreeView t = new TreeView();
  539. t.Nodes.Add("2");
  540. t.Nodes.Add("1");
  541. t.TreeViewNodeSorter = new NodeSorter();
  542. t.TreeViewNodeSorter = null;
  543. t.Sorted = true;
  544. Assert.IsTrue(t.Nodes[0].Text == "2", "Order");
  545. }
  546. [Test]
  547. public void SortedSorts() {
  548. TreeView t = new TreeView();
  549. t.Nodes.Add("2");
  550. t.Nodes.Add("1");
  551. t.TreeViewNodeSorter = new NodeSorter();
  552. t.TreeViewNodeSorter = null;
  553. t.Sorted = false;
  554. t.Sorted = true;
  555. Assert.IsTrue(t.Nodes[0].Text == "1", "Order");
  556. }
  557. class NodeSorter : IComparer {
  558. public int Compare(object x, object y) {
  559. node_sorter_called = true;
  560. if (x == y)
  561. return 0;
  562. return ((TreeNode)x).Text == "2" ? -1 : 1;
  563. }
  564. }
  565. }
  566. #endif
  567. }