* Makefile.am: Build `docs` after `runtime`, so that it can depend
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / TreeViewTest.cs
1 using System;
2 using System.Collections;
3 using System.Drawing;
4 using System.Globalization;
5 using System.Windows.Forms;
6
7 using NUnit.Framework;
8
9 namespace MonoTests.System.Windows.Forms
10 {
11         [TestFixture]
12         public class TreeViewTest
13         {
14                 [Test] // bug #80620
15                 public void ClientRectangle_Borders ()
16                 {
17                         TreeView tv = new TreeView ();
18                         tv.CreateControl ();
19                         Assert.AreEqual (tv.ClientRectangle, new TreeView ().ClientRectangle);
20                 }
21
22                 [Test]
23                 public void CollapseAll_NoNodes ()
24                 {
25                         TreeView tv = new TreeView ();
26                         tv.CollapseAll ();
27                 }
28         
29                 [Test]
30                 public void DefaultCtor ()
31                 {
32                         TreeView tv = new TreeView ();
33                         Assert.AreEqual (121, tv.Width, "#1");
34                         Assert.AreEqual (97, tv.Height, "#2");
35
36                         Assert.IsTrue (tv.Scrollable, "#3");
37                         Assert.AreEqual (tv.SelectedNode, null, "#4");
38                 }
39
40 #if NET_2_0
41                 [Test] // bug #81424
42                 public void DoubleBuffered ()
43                 {
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");
51
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");
58                 }
59 #endif
60
61                 [Test]
62                 public void SimpleShowTest ()
63                 {
64                         Form f = new Form ();
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";
70
71                         f.Controls.Add (tv);
72                         f.Show ();
73                         f.Dispose ();
74                 }
75
76                 [Test]
77                 public void NodeAddIndex ()
78                 {
79                         TreeView tv = new TreeView ();
80
81                         TreeNode tn1 = new TreeNode ("blah");
82                         TreeNode tn2 = new TreeNode ("blah2");
83                         TreeNode tn3 = new TreeNode ("blah3");
84
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");
88                 }
89                 
90                 [Test]
91                 public void NodesCopyToTest ()
92                 {
93                         TreeView tv = new TreeView();
94                         TreeNode one = new TreeNode ("one");
95                         TreeNode two = new TreeNode ("two");
96                         TreeNode three = new TreeNode ("three");
97
98                         tv.Nodes.Add (one);
99                         tv.Nodes.Add (two);
100                         tv.Nodes.Add (three);
101
102                         ArrayList al = new ArrayList (tv.Nodes);
103
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");
107                 }
108
109                 [Test]
110                 public void ExpandAll_Flat_Created ()
111                 {
112                         TreeView tv = new TreeView ();
113                         tv.Size = new Size (300, 100);
114
115                         for (int i = 0; i <= 100; i++)
116                                 tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
117
118                         Form form = new Form ();
119                         form.ShowInTaskbar = false;
120                         form.Controls.Add (tv);
121                         form.Show ();
122
123                         Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
124                         Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
125
126                         Assert.IsTrue (tv.Nodes [0].IsVisible, "#B1");
127                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
128
129                         tv.ExpandAll ();
130
131                         Assert.IsFalse (tv.Nodes [0].IsExpanded, "#C1");
132                         Assert.IsFalse (tv.Nodes [99].IsExpanded, "#C2");
133
134                         Assert.IsTrue (tv.Nodes [0].IsVisible, "#D1");
135                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
136                         
137                         form.Close ();
138                 }
139
140                 [Test]
141                 public void ExpandAll_Tree_Created ()
142                 {
143                         TreeView tv = new TreeView ();
144                         tv.Size = new Size (300, 100);
145
146                         for (int i = 0; i <= 100; i++) {
147                                 TreeNode node = tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
148                                 node.Nodes.Add ("child");
149                         }
150
151                         Form form = new Form ();
152                         form.ShowInTaskbar = false;
153                         form.Controls.Add (tv);
154                         form.Show ();
155
156                         Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
157                         Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
158
159                         Assert.IsTrue (tv.Nodes [0].IsVisible, "#B1");
160                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
161
162                         tv.ExpandAll ();
163
164                         Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
165                         Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
166
167                         Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
168                         Assert.IsTrue (tv.Nodes [99].IsVisible, "#D2");
169                         
170                         form.Close ();
171                 }
172
173                 [Test]
174                 public void ExpandAll_Flat_NotCreated ()
175                 {
176                         TreeView tv = new TreeView ();
177                         tv.Size = new Size (300, 100);
178
179                         for (int i = 0; i <= 100; i++)
180                                 tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
181
182                         Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
183                         Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
184
185                         Assert.IsFalse (tv.Nodes [0].IsVisible, "#B1");
186                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
187
188                         tv.ExpandAll ();
189
190                         Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
191                         Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
192
193                         Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
194                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
195
196                         Form form = new Form ();
197                         form.ShowInTaskbar = false;
198                         form.Controls.Add (tv);
199                         form.Show ();
200
201                         Assert.IsFalse (tv.Nodes [0].IsExpanded, "#E1");
202                         Assert.IsFalse (tv.Nodes [99].IsExpanded, "#E2");
203
204                         Assert.IsTrue (tv.Nodes [0].IsVisible, "#F1");
205                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#F2");
206
207                         form.Dispose ();
208                 }
209
210                 [Test] // bug #80284
211                 public void ExpandAll_Tree_NotCreated ()
212                 {
213                         TreeView tv = new TreeView ();
214                         tv.Size = new Size (300, 100);
215
216                         for (int i = 0; i <= 100; i++) {
217                                 TreeNode node = tv.Nodes.Add (i.ToString (CultureInfo.InvariantCulture));
218                                 node.Nodes.Add ("child");
219                         }
220
221                         Assert.IsFalse (tv.Nodes [0].IsExpanded, "#A1");
222                         Assert.IsFalse (tv.Nodes [99].IsExpanded, "#A2");
223
224                         Assert.IsFalse (tv.Nodes [0].IsVisible, "#B1");
225                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#B2");
226
227                         tv.ExpandAll ();
228
229                         Assert.IsTrue (tv.Nodes [0].IsExpanded, "#C1");
230                         Assert.IsTrue (tv.Nodes [99].IsExpanded, "#C2");
231
232                         Assert.IsFalse (tv.Nodes [0].IsVisible, "#D1");
233                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#D2");
234
235                         Form form = new Form ();
236                         form.ShowInTaskbar = false;
237                         form.Controls.Add (tv);
238                         form.Show ();
239
240                         Assert.IsTrue (tv.Nodes [0].IsExpanded, "#E1");
241                         Assert.IsTrue (tv.Nodes [99].IsExpanded, "#E2");
242
243 #if NET_2_0
244                         Assert.IsTrue (tv.Nodes [0].IsVisible, "#F1");
245                         Assert.IsFalse (tv.Nodes [99].IsVisible, "#F2");
246 #else
247                         Assert.IsFalse (tv.Nodes [0].IsVisible, "#F1");
248                         Assert.IsTrue (tv.Nodes [99].IsVisible, "#F2");
249 #endif
250
251                         form.Dispose ();
252                 }
253
254                 class MockTreeView : TreeView
255                 {
256                         public bool GetControlStyle (ControlStyles style)
257                         {
258                                 return base.GetStyle (style);
259                         }
260
261 #if NET_2_0
262                         public bool IsDoubleBuffered {
263                                 get { return DoubleBuffered; }
264                                 set { DoubleBuffered = value; }
265                         }
266 #endif
267                 }
268
269                 [Test]
270                 public void MethodIsInputChar ()
271                 {
272                         // Basically, show that this method always returns true
273                         InputCharControl m = new InputCharControl ();
274                         bool result = true;
275
276                         for (int i = 0; i < 256; i++)
277                                 result &= m.PublicIsInputChar ((char)i);
278
279                         Assert.AreEqual (true, result, "I1");
280                 }
281
282                 private class InputCharControl : TreeView
283                 {
284                         public bool PublicIsInputChar (char charCode)
285                         {
286                                 return base.IsInputChar (charCode);
287                         }
288                 }
289                 
290 #if NET_2_0
291                 [Test]
292                 public void SelectedNodeNullTest ()
293                 {
294                         Form f = new Form ();
295                         f.ShowInTaskbar = false;
296                         
297                         TreeView tv = new TreeView ();
298                         tv.Nodes.Add ("Node 1");
299                         
300                         f.Controls.Add (tv);
301                         f.Show ();
302                         
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"); });
305                         
306                         tv.SelectedNode = null;
307                         
308                         f.Dispose ();
309                 }
310
311                 [Test]
312                 public void SortChangesSorted ()
313                 {
314                         TreeView tv = new TreeView ();
315                         
316                         Assert.AreEqual (false, tv.Sorted, "A1");
317                         
318                         tv.Sort ();
319                         Assert.AreEqual (true, tv.Sorted, "A2");
320                 }
321                 
322                 [Test]
323                 public void SortedBeforeNodeAdd ()
324                 {
325                         TreeView tv = new TreeView ();
326                         tv.Sort ();
327                         
328                         tv.Nodes.Add ("bbb");
329                         tv.Nodes.Add ("aaa");
330                         
331                         Assert.AreEqual ("aaa", tv.Nodes[0].Text, "A1");
332                 }
333 #endif
334
335                 [Test]
336                 public void MethodToString ()
337                 {
338                         TreeView tv = new TreeView ();
339
340                         Assert.AreEqual (@"System.Windows.Forms.TreeView, Nodes.Count: 0", tv.ToString (), "A1");
341
342                         tv.Nodes.Add ("A");
343                         tv.Nodes.Add ("B");
344
345                         Assert.AreEqual (@"System.Windows.Forms.TreeView, Nodes.Count: 2, Nodes[0]: TreeNode: A", tv.ToString (), "A2");
346                 }
347         }
348
349         [TestFixture]
350         public class BeforeSelectEvent
351         {
352                 int beforeSelect;
353                 TreeViewCancelEventArgs cancelEventArgs;
354                 bool cancel;
355
356                 public void TreeView_BeforeSelect (object sender, TreeViewCancelEventArgs e)
357                 {
358                         beforeSelect++;
359                         cancelEventArgs = e;
360                         if (cancel)
361                                 e.Cancel = true;
362                 }
363
364                 [SetUp]
365                 public void SetUp ()
366                 {
367                         beforeSelect = 0;
368                         cancelEventArgs = null;
369                         cancel = false;
370                 }
371
372                 [Test]
373                 [Category ("NotWorking")]
374                 public void CancelBeforeCreationOfHandle ()
375                 {
376                         TreeView tvw = new TreeView ();
377                         tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
378                         cancel = true;
379
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");
387
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");
395
396                         Form form = new Form ();
397                         form.ShowInTaskbar = false;
398                         form.Controls.Add (tvw);
399                         form.Show ();
400
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");
408                 }
409
410                 [Test]
411                 public void SelectBeforeCreationOfHandle ()
412                 {
413                         TreeView tvw = new TreeView ();
414                         tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
415
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");
423
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");
431
432                         Form form = new Form ();
433                         form.ShowInTaskbar = false;
434                         form.Controls.Add (tvw);
435                         form.Show ();
436
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");
444                         form.Close ();
445                 }
446
447                 [Test]
448                 public void CancelAfterCreationOfHandle ()
449                 {
450                         TreeView tvw = new TreeView ();
451                         tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
452                         cancel = true;
453
454                         Form form = new Form ();
455                         form.ShowInTaskbar = false;
456                         form.Controls.Add (tvw);
457                         form.Show ();
458
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");
468
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");
478                         form.Close ();
479                 }
480
481                 [Test]
482                 [Category ("NotWorking")]
483                 public void SelectAfterCreationOfHandle ()
484                 {
485                         TreeView tvw = new TreeView ();
486                         tvw.BeforeSelect += new TreeViewCancelEventHandler (TreeView_BeforeSelect);
487
488                         Form form = new Form ();
489                         form.ShowInTaskbar = false;
490                         form.Controls.Add (tvw);
491                         form.Show ();
492
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");
502
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");
512                 }
513         }
514
515         [TestFixture]
516         public class AfterSelectEvent
517         {
518                 [SetUp]
519                 public void SetUp ()
520                 {
521                         afterSelect = 0;
522                 }
523
524                 [Test] // bug #81319
525                 [Category ("NotWorking")]
526                 public void SelectedNode_Created ()
527                 {
528                         TreeView tv = new TreeView ();
529                         tv.AfterSelect += new TreeViewEventHandler (TreeView_AfterSelect);
530                         TreeNode one = new TreeNode ("one");
531                         TreeNode two = new TreeNode ("two");
532
533                         tv.Nodes.Add (one);
534                         tv.Nodes.Add (two);
535
536                         Form form = new Form ();
537                         form.ShowInTaskbar = false;
538                         form.Controls.Add (tv);
539                         form.Show ();
540
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");
546
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");
552
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");
559
560                         form.Dispose ();
561                 }
562
563                 [Test]
564                 public void SelectedNode_NotCreated ()
565                 {
566                         TreeView tv = new TreeView ();
567                         tv.AfterSelect += new TreeViewEventHandler (TreeView_AfterSelect);
568                         TreeNode one = new TreeNode ("one");
569                         TreeNode two = new TreeNode ("two");
570
571                         tv.Nodes.Add (one);
572                         tv.Nodes.Add (two);
573
574                         Assert.IsNull (tv.SelectedNode, "#A1");
575                         Assert.IsFalse (one.IsSelected, "#A2");
576                         Assert.IsFalse (two.IsSelected, "#A3");
577                         Assert.AreEqual (0, afterSelect, "#A4");
578
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");
585
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");
591
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");
598                 }
599
600                 void TreeView_AfterSelect (object sender, TreeViewEventArgs e)
601                 {
602                         afterSelect++;
603                 }
604
605                 int afterSelect;
606         }
607
608 #if NET_2_0
609         [TestFixture]
610         public class TreeViewNodeSorterTest {
611                 static bool node_sorter_called;
612
613                 [Test]
614                 public void SortedAfterTreeViewNodeSorterIsSetToSomething() {
615                         TreeView t = new TreeView();
616                         t.TreeViewNodeSorter = new NodeSorter();
617                         Assert.IsTrue(t.Sorted);
618                 }
619
620                 [Test]
621                 public void SortedAfterTreeViewNodeSorterIsSetToNull() {
622                         TreeView t = new TreeView();
623                         t.TreeViewNodeSorter = null;
624                         Assert.IsFalse(t.Sorted);
625                 }
626
627                 [Test]
628                 public void NormalTreeViewNodeSorter() {
629                         TreeView t = new TreeView();
630                         t.Nodes.Add("2");
631                         t.Nodes.Add("1");
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");
636                 }
637
638                 [Test]
639                 public void NormalSorted() {
640                         TreeView t = new TreeView();
641                         t.Nodes.Add("2");
642                         t.Nodes.Add("1");
643                         t.Sorted = true;
644                         Assert.IsTrue(t.Nodes[0].Text == "1", "Order");
645                 }
646
647                 [Test]
648                 public void SortedDoesNotSortWhenTreeViewNodeSorterIsSet() {
649                         TreeView t = new TreeView();
650                         t.Nodes.Add("2");
651                         t.Nodes.Add("1");
652                         t.TreeViewNodeSorter = new NodeSorter();
653                         t.Sorted = false;
654                         t.Sorted = true;
655                         Assert.IsTrue(t.Nodes[0].Text == "2", "Order");
656                 }
657
658                 [Test]
659                 public void SortedDoesNotSortWhenItIsAlreadyTrue() {
660                         TreeView t = new TreeView();
661                         t.Nodes.Add("2");
662                         t.Nodes.Add("1");
663                         t.TreeViewNodeSorter = new NodeSorter();
664                         t.TreeViewNodeSorter = null;
665                         t.Sorted = true;
666                         Assert.IsTrue(t.Nodes[0].Text == "2", "Order");
667                 }
668
669                 [Test]
670                 public void SortedSorts() {
671                         TreeView t = new TreeView();
672                         t.Nodes.Add("2");
673                         t.Nodes.Add("1");
674                         t.TreeViewNodeSorter = new NodeSorter();
675                         t.TreeViewNodeSorter = null;
676                         t.Sorted = false;
677                         t.Sorted = true;
678                         Assert.IsTrue(t.Nodes[0].Text == "1", "Order");
679                 }
680
681                 class NodeSorter : IComparer {
682                         public int Compare(object x, object y) {
683                                 node_sorter_called = true;
684                                 if (x == y)
685                                         return 0;
686                                 return ((TreeNode)x).Text == "2" ? -1 : 1;
687                         }
688                 }
689         }
690 #endif
691 }