2 using System.Collections;
4 using System.Globalization;
5 using System.Windows.Forms;
9 namespace MonoTests.System.Windows.Forms
12 public class TreeViewTest
15 public void ClientRectangle_Borders ()
17 TreeView tv = new TreeView ();
19 Assert.AreEqual (tv.ClientRectangle, new TreeView ().ClientRectangle);
23 public void CollapseAll_NoNodes ()
25 TreeView tv = new TreeView ();
30 public void DefaultCtor ()
32 TreeView tv = new TreeView ();
33 Assert.AreEqual (121, tv.Width, "#1");
34 Assert.AreEqual (97, tv.Height, "#2");
36 Assert.IsTrue (tv.Scrollable, "#3");
37 Assert.AreEqual (tv.SelectedNode, null, "#4");
42 public void DoubleBuffered ()
44 MockTreeView tv = new MockTreeView ();
45 Assert.IsFalse (tv.IsDoubleBuffered, "#A1");
46 Assert.IsTrue (tv.GetControlStyle (ControlStyles.AllPaintingInWmPaint), "#A2");
47 Assert.IsFalse (tv.GetControlStyle (ControlStyles.DoubleBuffer), "#A3");
48 Assert.IsFalse (tv.GetControlStyle (ControlStyles.OptimizedDoubleBuffer), "#A4");
49 Assert.IsFalse (tv.GetControlStyle (ControlStyles.UserPaint), "#A5");
50 Assert.IsFalse (tv.GetControlStyle (ControlStyles.StandardClick), "#A6");
52 tv.IsDoubleBuffered = true;
53 Assert.IsTrue (tv.IsDoubleBuffered, "#B1");
54 Assert.IsTrue (tv.GetControlStyle (ControlStyles.AllPaintingInWmPaint), "#B2");
55 Assert.IsFalse (tv.GetControlStyle (ControlStyles.DoubleBuffer), "#B3");
56 Assert.IsTrue (tv.GetControlStyle (ControlStyles.OptimizedDoubleBuffer), "#B4");
57 Assert.IsFalse (tv.GetControlStyle (ControlStyles.UserPaint), "#B5");
62 public void SimpleShowTest ()
65 f.ShowInTaskbar = false;
66 TreeView tv = new TreeView ();
67 //tv.BorderStyle = BorderStyle.FixedSingle;
68 tv.Location = new Point (20, 20);
69 //tv.Text = "adssssss";
77 public void NodeAddIndex ()
79 TreeView tv = new TreeView ();
81 TreeNode tn1 = new TreeNode ("blah");
82 TreeNode tn2 = new TreeNode ("blah2");
83 TreeNode tn3 = new TreeNode ("blah3");
85 Assert.AreEqual (0, tv.Nodes.Add (tn1), "A1");
86 Assert.AreEqual (1, tv.Nodes.Add (tn2), "A2");
87 Assert.AreEqual (2, tv.Nodes.Add (tn3), "A3");
91 public void NodesCopyToTest ()
93 TreeView tv = new TreeView();
94 TreeNode one = new TreeNode ("one");
95 TreeNode two = new TreeNode ("two");
96 TreeNode three = new TreeNode ("three");
100 tv.Nodes.Add (three);
102 ArrayList al = new ArrayList (tv.Nodes);
104 Assert.AreEqual (al [0], tv.Nodes [0], "A1");
105 Assert.AreEqual (al [1], tv.Nodes [1], "A2");
106 Assert.AreEqual (al [2], tv.Nodes [2], "A3");
110 public void ExpandAll_Flat_Created ()
112 TreeView tv = new TreeView ();
113 tv.Size = new Size (300, 100);
115 for (int i = 0; i <= 100; i++)
116 tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
118 Form form = new Form ();
119 form.ShowInTaskbar = false;
120 form.Controls.Add (tv);
123 Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
124 Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
126 Assert.IsTrue (tv.Nodes [0].IsVisible, "#B1");
127 Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
131 Assert.IsFalse (tv.Nodes [0].IsExpanded, "#C1");
132 Assert.IsFalse (tv.Nodes [99].IsExpanded, "#C2");
134 Assert.IsTrue (tv.Nodes [0].IsVisible, "#D1");
135 Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
141 public void ExpandAll_Tree_Created ()
143 TreeView tv = new TreeView ();
144 tv.Size = new Size (300, 100);
146 for (int i = 0; i <= 100; i++) {
147 TreeNode node = tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
148 node.Nodes.Add ("child");
151 Form form = new Form ();
152 form.ShowInTaskbar = false;
153 form.Controls.Add (tv);
156 Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
157 Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
159 Assert.IsTrue (tv.Nodes [0].IsVisible, "#B1");
160 Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
164 Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
165 Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
167 Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
168 Assert.IsTrue (tv.Nodes [99].IsVisible, "#D2");
174 public void ExpandAll_Flat_NotCreated ()
176 TreeView tv = new TreeView ();
177 tv.Size = new Size (300, 100);
179 for (int i = 0; i <= 100; i++)
180 tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
182 Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
183 Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
185 Assert.IsFalse (tv.Nodes [0].IsVisible, "#B1");
186 Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
190 Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
191 Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
193 Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
194 Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
196 Form form = new Form ();
197 form.ShowInTaskbar = false;
198 form.Controls.Add (tv);
201 Assert.IsFalse (tv.Nodes [0].IsExpanded, "#E1");
202 Assert.IsFalse (tv.Nodes [99].IsExpanded, "#E2");
204 Assert.IsTrue (tv.Nodes [0].IsVisible, "#F1");
205 Assert.IsFalse (tv.Nodes [99].IsVisible, "#F2");
211 public void ExpandAll_Tree_NotCreated ()
213 TreeView tv = new TreeView ();
214 tv.Size = new Size (300, 100);
216 for (int i = 0; i <= 100; i++) {
217 TreeNode node = tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
218 node.Nodes.Add ("child");
221 Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
222 Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
224 Assert.IsFalse (tv.Nodes [0].IsVisible, "#B1");
225 Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
229 Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
230 Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
232 Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
233 Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
235 Form form = new Form ();
236 form.ShowInTaskbar = false;
237 form.Controls.Add (tv);
240 Assert.IsTrue (tv.Nodes [0].IsExpanded, "#E1");
241 Assert.IsTrue (tv.Nodes [99].IsExpanded, "#E2");
244 Assert.IsTrue (tv.Nodes [0].IsVisible, "#F1");
245 Assert.IsFalse (tv.Nodes [99].IsVisible, "#F2");
247 Assert.IsFalse (tv.Nodes [0].IsVisible, "#F1");
248 Assert.IsTrue (tv.Nodes [99].IsVisible, "#F2");
254 class MockTreeView : TreeView
256 public bool GetControlStyle (ControlStyles style)
258 return base.GetStyle (style);
262 public bool IsDoubleBuffered {
263 get { return DoubleBuffered; }
264 set { DoubleBuffered = value; }
270 public void MethodIsInputChar ()
272 // Basically, show that this method always returns true
273 InputCharControl m = new InputCharControl ();
276 for (int i = 0; i < 256; i++)
277 result &= m.PublicIsInputChar ((char)i);
279 Assert.AreEqual (true, result, "I1");
282 private class InputCharControl : TreeView
284 public bool PublicIsInputChar (char charCode)
286 return base.IsInputChar (charCode);
292 public void SelectedNodeNullTest ()
294 Form f = new Form ();
295 f.ShowInTaskbar = false;
297 TreeView tv = new TreeView ();
298 tv.Nodes.Add ("Node 1");
303 tv.BeforeSelect += new TreeViewCancelEventHandler (delegate (object sender, TreeViewCancelEventArgs e) { if (e.Node == null) Assert.Fail ("BeforeSelect should not be called with a null node"); });
304 tv.AfterSelect += new TreeViewEventHandler (delegate (object sender, TreeViewEventArgs e) { if (e.Node == null) Assert.Fail ("AfterSelect should not be called with a null node"); });
306 tv.SelectedNode = null;
312 public void SortChangesSorted ()
314 TreeView tv = new TreeView ();
316 Assert.AreEqual (false, tv.Sorted, "A1");
319 Assert.AreEqual (true, tv.Sorted, "A2");
323 public void SortedBeforeNodeAdd ()
325 TreeView tv = new TreeView ();
328 tv.Nodes.Add ("bbb");
329 tv.Nodes.Add ("aaa");
331 Assert.AreEqual ("aaa", tv.Nodes[0].Text, "A1");
336 public void MethodToString ()
338 TreeView tv = new TreeView ();
340 Assert.AreEqual (@"System.Windows.Forms.TreeView, Nodes.Count: 0", tv.ToString (), "A1");
345 Assert.AreEqual (@"System.Windows.Forms.TreeView, Nodes.Count: 2, Nodes[0]: TreeNode: A", tv.ToString (), "A2");
350 public class BeforeSelectEvent
353 TreeViewCancelEventArgs cancelEventArgs;
356 public void TreeView_BeforeSelect (object sender, TreeViewCancelEventArgs e)
368 cancelEventArgs = null;
373 [Category ("NotWorking")]
374 public void CancelBeforeCreationOfHandle ()
376 TreeView tvw = new TreeView ();
377 tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
380 TreeNode nodeA = tvw.Nodes.Add ("A");
381 Assert.AreEqual (0, beforeSelect, "#A1");
382 tvw.SelectedNode = nodeA;
383 Assert.AreEqual (0, beforeSelect, "#A2");
384 Assert.IsNull (cancelEventArgs, "#A3");
385 Assert.IsFalse (nodeA.IsSelected, "#A4");
386 Assert.AreSame (nodeA, tvw.SelectedNode, "#A5");
388 TreeNode nodeB = tvw.Nodes.Add ("B");
389 Assert.AreEqual (0, beforeSelect, "#B1");
390 tvw.SelectedNode = nodeB;
391 Assert.AreEqual (0, beforeSelect, "#B2");
392 Assert.IsNull (cancelEventArgs, "#B3");
393 Assert.IsFalse (nodeB.IsSelected, "#B4");
394 Assert.AreSame (nodeB, tvw.SelectedNode, "#B5");
396 Form form = new Form ();
397 form.ShowInTaskbar = false;
398 form.Controls.Add (tvw);
401 Assert.AreEqual (2, beforeSelect, "#C1");
402 Assert.IsNotNull (cancelEventArgs, "#C2");
403 Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#C3");
404 Assert.AreSame (nodeA, cancelEventArgs.Node, "#C4");
405 Assert.IsFalse (nodeA.IsSelected, "#C5");
406 Assert.IsFalse (nodeB.IsSelected, "#C6");
407 Assert.IsNull (tvw.SelectedNode, "#C7");
411 public void SelectBeforeCreationOfHandle ()
413 TreeView tvw = new TreeView ();
414 tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
416 TreeNode nodeA = tvw.Nodes.Add ("A");
417 Assert.AreEqual (0, beforeSelect, "#A1");
418 tvw.SelectedNode = nodeA;
419 Assert.AreEqual (0, beforeSelect, "#A2");
420 Assert.IsNull (cancelEventArgs, "#A3");
421 Assert.IsFalse (nodeA.IsSelected, "#A4");
422 Assert.AreSame (nodeA, tvw.SelectedNode, "#A5");
424 TreeNode nodeB = tvw.Nodes.Add ("B");
425 Assert.AreEqual (0, beforeSelect, "#B1");
426 tvw.SelectedNode = nodeB;
427 Assert.AreEqual (0, beforeSelect, "#B2");
428 Assert.IsNull (cancelEventArgs, "#B3");
429 Assert.IsFalse (nodeB.IsSelected, "#B4");
430 Assert.AreSame (nodeB, tvw.SelectedNode, "#B5");
432 Form form = new Form ();
433 form.ShowInTaskbar = false;
434 form.Controls.Add (tvw);
437 Assert.AreEqual (1, beforeSelect, "#C1");
438 Assert.IsNotNull (cancelEventArgs, "#C2");
439 Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#C3");
440 Assert.AreSame (nodeB, cancelEventArgs.Node, "#C4");
441 Assert.IsFalse (nodeA.IsSelected, "#C5");
442 Assert.IsTrue (nodeB.IsSelected, "#C6");
443 Assert.AreSame (nodeB, tvw.SelectedNode, "#C7");
448 public void CancelAfterCreationOfHandle ()
450 TreeView tvw = new TreeView ();
451 tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
454 Form form = new Form ();
455 form.ShowInTaskbar = false;
456 form.Controls.Add (tvw);
459 TreeNode nodeA = tvw.Nodes.Add ("A");
460 Assert.AreEqual (0, beforeSelect, "#A1");
461 tvw.SelectedNode = nodeA;
462 Assert.AreEqual (1, beforeSelect, "#A2");
463 Assert.IsNotNull (cancelEventArgs, "#A3");
464 Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#A4");
465 Assert.AreSame (nodeA, cancelEventArgs.Node, "#A5");
466 Assert.IsFalse (nodeA.IsSelected, "#A6");
467 Assert.IsNull (tvw.SelectedNode, "#A7");
469 TreeNode nodeB = tvw.Nodes.Add ("B");
470 Assert.AreEqual (1, beforeSelect, "#B1");
471 tvw.SelectedNode = nodeB;
472 Assert.AreEqual (2, beforeSelect, "#B2");
473 Assert.IsNotNull (cancelEventArgs, "#B3");
474 Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#B4");
475 Assert.AreSame (nodeB, cancelEventArgs.Node, "#B5");
476 Assert.IsFalse (nodeB.IsSelected, "#B6");
477 Assert.IsNull (tvw.SelectedNode, "#B7");
482 [Category ("NotWorking")]
483 public void SelectAfterCreationOfHandle ()
485 TreeView tvw = new TreeView ();
486 tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
488 Form form = new Form ();
489 form.ShowInTaskbar = false;
490 form.Controls.Add (tvw);
493 TreeNode nodeA = tvw.Nodes.Add ("A");
494 Assert.AreEqual (0, beforeSelect, "#A1");
495 tvw.SelectedNode = nodeA;
496 Assert.AreEqual (1, beforeSelect, "#A2");
497 Assert.IsNotNull (cancelEventArgs, "#A3");
498 Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#A4");
499 Assert.AreSame (nodeA, cancelEventArgs.Node, "#A5");
500 Assert.IsTrue (nodeA.IsSelected, "#A6");
501 Assert.AreSame (nodeA, tvw.SelectedNode, "#A7");
503 TreeNode nodeB = tvw.Nodes.Add ("B");
504 Assert.AreEqual (1, beforeSelect, "#B1");
505 tvw.SelectedNode = nodeB;
506 Assert.AreEqual (2, beforeSelect, "#B2");
507 Assert.IsNotNull (cancelEventArgs, "#B3");
508 Assert.AreEqual (TreeViewAction.Unknown, cancelEventArgs.Action, "#B4");
509 Assert.AreSame (nodeB, cancelEventArgs.Node, "#B5");
510 Assert.IsTrue (nodeB.IsSelected, "#B6");
511 Assert.AreSame (nodeB, tvw.SelectedNode, "#B7");
516 public class AfterSelectEvent
525 [Category ("NotWorking")]
526 public void SelectedNode_Created ()
528 TreeView tv = new TreeView ();
529 tv.AfterSelect += new TreeViewEventHandler (TreeView_AfterSelect);
530 TreeNode one = new TreeNode ("one");
531 TreeNode two = new TreeNode ("two");
536 Form form = new Form ();
537 form.ShowInTaskbar = false;
538 form.Controls.Add (tv);
541 Assert.IsNotNull (tv.SelectedNode, "#A1");
542 Assert.AreSame (one, tv.SelectedNode, "#A2");
543 Assert.IsTrue (one.IsSelected, "#A3");
544 Assert.IsFalse (two.IsSelected, "#A4");
545 Assert.AreEqual (1, afterSelect, "#A5");
547 tv.SelectedNode = null;
548 Assert.IsNull (tv.SelectedNode, "#C1");
549 Assert.IsFalse (one.IsSelected, "#C2");
550 Assert.IsFalse (two.IsSelected, "#C3");
551 Assert.AreEqual (1, afterSelect, "#C4");
553 tv.SelectedNode = two;
554 Assert.IsNotNull (tv.SelectedNode, "#D1");
555 Assert.AreSame (two, tv.SelectedNode, "#D2");
556 Assert.IsFalse (one.IsSelected, "#D3");
557 Assert.IsTrue (two.IsSelected, "#D4");
558 Assert.AreEqual (2, afterSelect, "#D5");
564 public void SelectedNode_NotCreated ()
566 TreeView tv = new TreeView ();
567 tv.AfterSelect += new TreeViewEventHandler (TreeView_AfterSelect);
568 TreeNode one = new TreeNode ("one");
569 TreeNode two = new TreeNode ("two");
574 Assert.IsNull (tv.SelectedNode, "#A1");
575 Assert.IsFalse (one.IsSelected, "#A2");
576 Assert.IsFalse (two.IsSelected, "#A3");
577 Assert.AreEqual (0, afterSelect, "#A4");
579 tv.SelectedNode = two;
580 Assert.IsNotNull (tv.SelectedNode, "#B1");
581 Assert.AreSame (two, tv.SelectedNode, "#B2");
582 Assert.IsFalse (one.IsSelected, "#B3");
583 Assert.IsFalse (two.IsSelected, "#B4");
584 Assert.AreEqual (0, afterSelect, "#B5");
586 tv.SelectedNode = null;
587 Assert.IsNull (tv.SelectedNode, "#C1");
588 Assert.IsFalse (one.IsSelected, "#C2");
589 Assert.IsFalse (two.IsSelected, "#C3");
590 Assert.AreEqual (0, afterSelect, "#C4");
592 tv.SelectedNode = one;
593 Assert.IsNotNull (tv.SelectedNode, "#D1");
594 Assert.AreSame (one, tv.SelectedNode, "#D2");
595 Assert.IsFalse (one.IsSelected, "#D3");
596 Assert.IsFalse (two.IsSelected, "#D4");
597 Assert.AreEqual (0, afterSelect, "#D5");
600 void TreeView_AfterSelect (object sender, TreeViewEventArgs e)
610 public class TreeViewNodeSorterTest {
611 static bool node_sorter_called;
614 public void SortedAfterTreeViewNodeSorterIsSetToSomething() {
615 TreeView t = new TreeView();
616 t.TreeViewNodeSorter = new NodeSorter();
617 Assert.IsTrue(t.Sorted);
621 public void SortedAfterTreeViewNodeSorterIsSetToNull() {
622 TreeView t = new TreeView();
623 t.TreeViewNodeSorter = null;
624 Assert.IsFalse(t.Sorted);
628 public void NormalTreeViewNodeSorter() {
629 TreeView t = new TreeView();
632 node_sorter_called = false;
633 t.TreeViewNodeSorter = new NodeSorter();
634 Assert.IsTrue(node_sorter_called, "Node sorter called");
635 Assert.IsTrue(t.Nodes[0].Text == "2", "Order");
639 public void NormalSorted() {
640 TreeView t = new TreeView();
644 Assert.IsTrue(t.Nodes[0].Text == "1", "Order");
648 public void SortedDoesNotSortWhenTreeViewNodeSorterIsSet() {
649 TreeView t = new TreeView();
652 t.TreeViewNodeSorter = new NodeSorter();
655 Assert.IsTrue(t.Nodes[0].Text == "2", "Order");
659 public void SortedDoesNotSortWhenItIsAlreadyTrue() {
660 TreeView t = new TreeView();
663 t.TreeViewNodeSorter = new NodeSorter();
664 t.TreeViewNodeSorter = null;
666 Assert.IsTrue(t.Nodes[0].Text == "2", "Order");
670 public void SortedSorts() {
671 TreeView t = new TreeView();
674 t.TreeViewNodeSorter = new NodeSorter();
675 t.TreeViewNodeSorter = null;
678 Assert.IsTrue(t.Nodes[0].Text == "1", "Order");
681 class NodeSorter : IComparer {
682 public int Compare(object x, object y) {
683 node_sorter_called = true;
686 return ((TreeNode)x).Text == "2" ? -1 : 1;