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