New test.
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ListViewCollectionsTest.cs
1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
8 //
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
11 //
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 //
20 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
21 //
22 // Author:
23 //      Jordi Mas i Hernandez <jordi@ximian.com>
24 //
25 //
26
27 using System;
28 using System.Windows.Forms;
29 using System.Drawing;
30 using System.Reflection;
31 using System.Collections;
32 using NUnit.Framework;
33
34 namespace MonoTests.System.Windows.Forms
35 {
36         [TestFixture]
37         public class ListViewCollectionsTest
38         {
39                 /*
40                         ColumnHeaderCollection
41                 */
42                 [Test]
43                 public void ColumnHeaderCollectionTest_PropertiesTest ()
44                 {
45                         ListView listview = new ListView ();
46
47                         // Properties
48                         Assert.AreEqual (false, listview.Columns.IsReadOnly, "ColumnHeaderCollectionTest_PropertiesTest#1");
49                         Assert.AreEqual (true, ((ICollection)listview.Columns).IsSynchronized, "ColumnHeaderCollectionTest_PropertiesTest#2");
50                         Assert.AreEqual (listview.Columns, ((ICollection)listview.Columns).SyncRoot, "ColumnHeaderCollectionTest_PropertiesTest#3");
51                         Assert.AreEqual (false, ((IList)listview.Columns).IsFixedSize, "ColumnHeaderCollectionTest_PropertiesTest#4");
52                         Assert.AreEqual (0, listview.Columns.Count, "ColumnHeaderCollectionTest_PropertiesTest#5");
53                 }
54
55                 [Test]
56                 public void ColumnHeaderCollectionTest_AddTest ()
57                 {
58                         ListView listview = new ListView ();
59
60                         // Duplicated elements with same text added
61                         listview.Columns.Add (new ColumnHeader ());
62                         listview.Columns.Add (new ColumnHeader ());
63                         Assert.AreEqual (2, listview.Columns.Count, "ColumnHeaderCollectionTest_AddTest#1");
64                         Assert.AreEqual ("ColumnHeader", listview.Columns[0].Text, "ColumnHeaderCollectionTest_AddTest#2");
65                 }
66
67                 [Test]
68                 public void ColumnHeaderCollectionTest_ClearTest ()
69                 {
70                         ListView listview = new ListView ();
71
72                         // Duplicated elements with same text added
73                         listview.Columns.Add (new ColumnHeader ());
74                         listview.Columns.Clear ();
75                         Assert.AreEqual (0, listview.Columns.Count, "ColumnHeaderCollectionTest_ClearTest#1");
76                 }
77
78                 // Exceptions
79                 [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
80                 public void ColumnHeaderCollectionTest_GetItem_ExceptionTest ()
81                 {
82                         // Duplicated elements not added
83                         ListView listview = new ListView ();
84                         ColumnHeader item = listview.Columns[5];
85                         Assert.Fail ("#1: " + item.Text); // avoid CS0219 warning
86                 }
87
88                 /*
89                         CheckedIndexCollection
90                 */
91                 [Test]
92                 public void CheckedIndexCollectionTest_PropertiesTest ()
93                 {
94                         ListView listview = new ListView ();
95
96                         // Properties
97                         Assert.AreEqual (true, listview.CheckedIndices.IsReadOnly, "CheckedIndexCollectionTest_PropertiesTest#1");
98                         Assert.AreEqual (false, ((ICollection)listview.CheckedIndices).IsSynchronized, "CheckedIndexCollectionTest_PropertiesTest#2");
99                         Assert.AreEqual (listview.CheckedIndices, ((ICollection)listview.CheckedIndices).SyncRoot, "CheckedIndexCollectionTest_PropertiesTest#3");
100                         Assert.AreEqual (true, ((IList)listview.CheckedIndices).IsFixedSize, "CheckedIndexCollectionTest_PropertiesTest#4");
101                         Assert.AreEqual (0, listview.CheckedIndices.Count, "CheckedIndexCollectionTest_PropertiesTest#5");
102                 }
103
104
105                 // Exceptions
106                 [Test, ExpectedException (typeof (NotSupportedException))]
107                 public void CheckedIndexCollectionTest_Add_ExceptionTest ()
108                 {
109                         ListView listview = new ListView ();
110                         ((IList)listview.CheckedIndices).Add (5);
111                 }
112
113                 [Test, ExpectedException (typeof (NotSupportedException))]
114                 public void CheckedIndexCollectionTest_Remove_ExceptionTest ()
115                 {
116                         ListView listview = new ListView ();
117                         ((IList)listview.CheckedIndices).Remove (5);
118                 }
119
120                 [Test, ExpectedException (typeof (NotSupportedException))]
121                 public void CheckedIndexCollectionTest_RemoveAt_ExceptionTest ()
122                 {
123                         ListView listview = new ListView ();
124                         ((IList)listview.CheckedIndices).RemoveAt (5);
125                 }
126
127                 /*
128                         CheckedItemCollection
129                 */
130                 [Test]
131                 public void CheckedItemCollectionTest_PropertiesTest ()
132                 {
133                         ListView listview = new ListView ();
134
135                         // Properties
136                         Assert.AreEqual (true, listview.CheckedItems.IsReadOnly, "CheckedItemCollectionTest_PropertiesTest#1");
137                         Assert.AreEqual (false, ((ICollection)listview.CheckedItems).IsSynchronized, "CheckedItemCollectionTest_PropertiesTest#2");
138                         Assert.AreEqual (listview.CheckedItems, ((ICollection)listview.CheckedItems).SyncRoot, "CheckedItemCollectionTest_PropertiesTest#3");
139                         Assert.AreEqual (true, ((IList)listview.CheckedItems).IsFixedSize, "CheckedItemCollectionTest_PropertiesTest#4");
140                         Assert.AreEqual (0, listview.CheckedItems.Count, "CheckedItemCollectionTest_PropertiesTest#5");
141                 }
142
143
144                 // Exceptions
145                 [Test, ExpectedException (typeof (NotSupportedException))]
146                 public void CheckedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
147                 {
148                         ListView listview = new ListView ();
149                         ((IList)listview.CheckedItems).Add (5);
150                 }
151
152                 [Test]
153                 public void CheckedItemCollectionTest_Order ()
154                 {
155                         Form form = new Form ();
156                         form.ShowInTaskbar = false;
157                         ListView lvw = new ListView ();
158                         lvw.CheckBoxes = true;
159                         form.Controls.Add (lvw);
160                         ListViewItem itemA = lvw.Items.Add ("A");
161                         itemA.Checked = true;
162                         ListViewItem itemB = lvw.Items.Add ("B");
163                         itemB.Checked = true;
164                         ListViewItem itemC = lvw.Items.Add ("C");
165                         itemC.Checked = true;
166
167                         Assert.AreEqual (3, lvw.CheckedItems.Count, "#A1");
168                         Assert.AreSame (itemA, lvw.CheckedItems [0], "#A2");
169                         Assert.AreSame (itemB, lvw.CheckedItems [1], "#A3");
170                         Assert.AreSame (itemC, lvw.CheckedItems [2], "#A3");
171
172                         itemB.Checked = false;
173
174                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#B1");
175                         Assert.AreSame (itemA, lvw.CheckedItems [0], "#B2");
176                         Assert.AreSame (itemC, lvw.CheckedItems [1], "#B3");
177
178                         itemB.Checked = true;
179
180                         Assert.AreEqual (3, lvw.CheckedItems.Count, "#C1");
181                         Assert.AreSame (itemA, lvw.CheckedItems [0], "#C2");
182                         Assert.AreSame (itemB, lvw.CheckedItems [1], "#C3");
183                         Assert.AreSame (itemC, lvw.CheckedItems [2], "#C4");
184
185                         lvw.Sorting = SortOrder.Descending;
186
187                         Assert.AreEqual (3, lvw.CheckedItems.Count, "#D1");
188                         Assert.AreSame (itemA, lvw.CheckedItems [0], "#D2");
189                         Assert.AreSame (itemB, lvw.CheckedItems [1], "#D3");
190                         Assert.AreSame (itemC, lvw.CheckedItems [2], "#D4");
191
192                         // sorting only takes effect when listview is created
193                         form.Show ();
194
195                         Assert.AreEqual (3, lvw.CheckedItems.Count, "#E1");
196                         Assert.AreSame (itemC, lvw.CheckedItems [0], "#E2");
197                         Assert.AreSame (itemB, lvw.CheckedItems [1], "#E3");
198                         Assert.AreSame (itemA, lvw.CheckedItems [2], "#E4");
199                         form.Dispose ();
200                 }
201
202                 [Test, ExpectedException (typeof (NotSupportedException))]
203                 public void CheckedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
204                 {
205                         ListView listview = new ListView ();
206                         ((IList)listview.CheckedItems).Remove (5);
207                 }
208
209                 [Test, ExpectedException (typeof (NotSupportedException))]
210                 public void CheckedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
211                 {
212                         ListView listview = new ListView ();
213                         ((IList)listview.CheckedItems).RemoveAt (5);
214                 }
215
216                 /*
217                         SelectedIndexCollection
218                 */
219                 [Test]
220                 public void SelectedIndexCollectionTest_PropertiesTest ()
221                 {
222                         ListView listview = new ListView ();
223
224                         // Properties
225                         Assert.AreEqual (true, listview.SelectedIndices.IsReadOnly, "SelectedIndexCollectionTest_PropertiesTest#1");
226                         Assert.AreEqual (false, ((ICollection)listview.SelectedIndices).IsSynchronized, "SelectedIndexCollectionTest_PropertiesTest#2");
227                         Assert.AreEqual (listview.SelectedIndices, ((ICollection)listview.SelectedIndices).SyncRoot, "SelectedIndexCollectionTest_PropertiesTest#3");
228                         Assert.AreEqual (true, ((IList)listview.SelectedIndices).IsFixedSize, "SelectedIndexCollectionTest_PropertiesTest#4");
229                         Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_PropertiesTest#5");
230                 }
231
232
233                 // Exceptions
234                 [Test, ExpectedException (typeof (NotSupportedException))]
235                 public void SelectedIndexCollectionTest_Add_ExceptionTest ()
236                 {
237                         ListView listview = new ListView ();
238                         ((IList)listview.SelectedIndices).Add (5);
239                 }
240
241                 [Test, ExpectedException (typeof (NotSupportedException))]
242                 public void SelectedIndexCollectionTest_Remove_ExceptionTest ()
243                 {
244                         ListView listview = new ListView ();
245                         ((IList)listview.SelectedIndices).Remove (5);
246                 }
247
248                 [Test, ExpectedException (typeof (NotSupportedException))]
249                 public void SelectedIndexCollectionTest_RemoveAt_ExceptionTest ()
250                 {
251                         ListView listview = new ListView ();
252                         ((IList)listview.SelectedIndices).RemoveAt (5);
253                 }
254
255                 /*
256                         SelectedItemCollection
257                 */
258                 [Test]
259                 public void SelectedItemCollectionTest_PropertiesTest ()
260                 {
261                         ListView listview = new ListView ();
262
263                         // Properties
264                         Assert.AreEqual (true, listview.SelectedItems.IsReadOnly, "SelectedItemCollectionTest_PropertiesTest#1");
265                         Assert.AreEqual (false, ((ICollection)listview.SelectedItems).IsSynchronized, "SelectedItemCollectionTest_PropertiesTest#2");
266                         Assert.AreEqual (listview.SelectedItems, ((ICollection)listview.SelectedItems).SyncRoot, "SelectedItemCollectionTest_PropertiesTest#3");
267                         Assert.AreEqual (true, ((IList)listview.SelectedItems).IsFixedSize, "SelectedItemCollectionTest_PropertiesTest#4");
268                         Assert.AreEqual (0, listview.SelectedItems.Count, "SelectedItemCollectionTest_PropertiesTest#5");
269                 }
270
271
272                 // Exceptions
273                 [Test, ExpectedException (typeof (NotSupportedException))]
274                 public void SelectedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
275                 {
276                         ListView listview = new ListView ();
277                         ((IList)listview.SelectedItems).Add (5);
278                 }
279
280                 [Test, ExpectedException (typeof (NotSupportedException))]
281                 public void SelectedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
282                 {
283                         ListView listview = new ListView ();
284                         ((IList)listview.SelectedItems).Remove (5);
285                 }
286
287                 [Test, ExpectedException (typeof (NotSupportedException))]
288                 public void SelectedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
289                 {
290                         ListView listview = new ListView ();
291                         ((IList)listview.SelectedItems).RemoveAt (5);
292                 }
293
294                 [Test]
295                 public void SelectedItemCollectionTest_Clear ()
296                 {
297                         Form form = new Form ();
298                         form.ShowInTaskbar = false;
299                         ListView lvw = new ListView ();
300                         form.Controls.Add (lvw);
301                         ListViewItem item = lvw.Items.Add ("Title");
302                         item.Selected = true;
303
304                         lvw.SelectedItems.Clear ();
305
306                         Assert.IsTrue (item.Selected, "#A1");
307                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
308                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A3");
309
310                         form.Show ();
311
312                         Assert.IsTrue (item.Selected, "#B1");
313                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#B2");
314                         Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B3");
315
316                         // once listview is created, clear DOES have effect
317                         lvw.SelectedItems.Clear ();
318
319                         Assert.IsFalse (item.Selected, "#C1");
320                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#C2");
321                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#C3");
322                         form.Dispose ();
323                 }
324
325                 [Test]
326                 public void SelectedItemCollectionTest_Contains ()
327                 {
328                         Form form = new Form ();
329                         form.ShowInTaskbar = false;
330                         ListView lvw = new ListView ();
331                         form.Controls.Add (lvw);
332                         ListViewItem item = lvw.Items.Add ("Title");
333                         item.Selected = true;
334                         IList list = (IList) lvw.SelectedItems;
335
336                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A1");
337                         Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#A2");
338                         Assert.IsFalse (list.Contains (item), "#A3");
339                         Assert.IsFalse (list.Contains (new ListViewItem ()), "#A4");
340
341                         form.Show ();
342
343                         Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B1");
344                         Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#B2");
345                         Assert.IsTrue (list.Contains (item), "#B3");
346                         Assert.IsFalse (list.Contains (new ListViewItem ()), "#B4");
347                         form.Dispose ();
348                 }
349
350                 [Test]
351                 public void SelectedItemCollectionTest_CopyTo ()
352                 {
353                         Form form = new Form ();
354                         form.ShowInTaskbar = false;
355                         ListView lvw = new ListView ();
356                         form.Controls.Add (lvw);
357                         ListViewItem item = lvw.Items.Add ("Title");
358                         item.Selected = true;
359                         IList list = (IList) lvw.SelectedItems;
360                         Assert.IsNotNull (list, "#A1");
361                         ListViewItem [] items = new ListViewItem [1];
362
363                         lvw.SelectedItems.CopyTo (items, 0);
364                         Assert.IsNull (items [0], "#A2");
365                         lvw.SelectedItems.CopyTo (items, 455);
366
367                         form.Show ();
368
369                         lvw.SelectedItems.CopyTo (items, 0);
370                         Assert.AreSame (item, items [0], "#B1");
371                         try {
372                                 lvw.SelectedItems.CopyTo (items, 455);
373                                 Assert.Fail ("#B2");
374                         } catch (ArgumentException) {
375                         }
376                         form.Dispose ();
377                 }
378
379                 [Test]
380                 public void SelectedItemCollectionTest_Count ()
381                 {
382                         Form form = new Form ();
383                         form.ShowInTaskbar = false;
384                         ListView lvw = new ListView ();
385                         form.Controls.Add (lvw);
386                         ListViewItem item = lvw.Items.Add ("Title");
387                         item.Selected = true;
388
389                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#1");
390                         form.Show ();
391                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#2");
392                         form.Dispose ();
393                 }
394
395                 [Test]
396                 public void SelectedItemCollectionTest_GetEnumerator ()
397                 {
398                         Form form = new Form ();
399                         form.ShowInTaskbar = false;
400                         ListView lvw = new ListView ();
401                         form.Controls.Add (lvw);
402                         ListViewItem item = lvw.Items.Add ("Title");
403                         item.Selected = true;
404
405                         Assert.IsFalse (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#A1");
406
407                         form.Show ();
408
409                         Assert.IsTrue (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#B1");
410
411                         form.Dispose ();
412                 }
413
414                 [Test]
415                 public void SelectedItemCollectionTest_Indexer ()
416                 {
417                         Form form = new Form ();
418                         form.ShowInTaskbar = false;
419                         ListView lvw = new ListView ();
420                         form.Controls.Add (lvw);
421                         ListViewItem item = lvw.Items.Add ("Title");
422                         item.Selected = true;
423                         IList list = (IList) lvw.SelectedItems;
424
425                         try  {
426                                 ListViewItem x = lvw.SelectedItems [0];
427                                 Assert.Fail ("#A1: " + x.ToString ());
428                         } catch (ArgumentOutOfRangeException) {
429                         }
430
431                         try {
432                                 ListViewItem x = list [0] as ListViewItem;
433                                 Assert.Fail ("#A2: " + x.ToString ());
434                         } catch (ArgumentOutOfRangeException) {
435                         }
436
437                         form.Show ();
438
439                         Assert.AreSame (item, lvw.SelectedItems [0], "#B1");
440                         Assert.AreSame (item, list [0], "#B2");
441
442                         form.Dispose ();
443                 }
444
445                 [Test]
446                 public void SelectedItemCollectionTest_IndexOf ()
447                 {
448                         Form form = new Form ();
449                         form.ShowInTaskbar = false;
450                         ListView lvw = new ListView ();
451                         form.Controls.Add (lvw);
452                         ListViewItem item = lvw.Items.Add ("Title");
453                         item.Selected = true;
454                         IList list = (IList) lvw.SelectedItems;
455
456                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (item), "#A1");
457                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#A2");
458                         Assert.AreEqual (-1, list.IndexOf (item), "#A3");
459                         Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#A4");
460
461                         form.Show ();
462
463                         Assert.AreEqual (0, lvw.SelectedItems.IndexOf (item), "#B1");
464                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#B2");
465                         Assert.AreEqual (0, list.IndexOf (item), "#B3");
466                         Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#B4");
467
468                         form.Dispose ();
469                 }
470
471                 [Test]
472                 public void SelectedItemCollectionTest_Order ()
473                 {
474                         Form form = new Form ();
475                         form.ShowInTaskbar = false;
476                         ListView lvw = new ListView ();
477                         lvw.MultiSelect = true;
478                         form.Controls.Add (lvw);
479                         ListViewItem itemA = lvw.Items.Add ("A");
480                         itemA.Selected = true;
481                         ListViewItem itemB = lvw.Items.Add ("B");
482                         itemB.Selected = true;
483                         ListViewItem itemC = lvw.Items.Add ("C");
484                         itemC.Selected = true;
485
486                         form.Show ();
487
488                         Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
489                         Assert.AreSame (itemA, lvw.SelectedItems [0], "#A2");
490                         Assert.AreSame (itemB, lvw.SelectedItems [1], "#A3");
491                         Assert.AreSame (itemC, lvw.SelectedItems [2], "#A3");
492
493                         itemB.Selected = false;
494
495                         Assert.AreEqual (2, lvw.SelectedItems.Count, "#B1");
496                         Assert.AreSame (itemA, lvw.SelectedItems [0], "#B2");
497                         Assert.AreSame (itemC, lvw.SelectedItems [1], "#B3");
498
499                         itemB.Selected = true;
500
501                         Assert.AreEqual (3, lvw.SelectedItems.Count, "#C1");
502                         Assert.AreSame (itemA, lvw.SelectedItems [0], "#C2");
503                         Assert.AreSame (itemB, lvw.SelectedItems [1], "#C3");
504                         Assert.AreSame (itemC, lvw.SelectedItems [2], "#C4");
505
506                         lvw.Sorting = SortOrder.Descending;
507
508                         Assert.AreEqual (3, lvw.SelectedItems.Count, "#D1");
509                         Assert.AreSame (itemC, lvw.SelectedItems [0], "#D2");
510                         Assert.AreSame (itemB, lvw.SelectedItems [1], "#D3");
511                         Assert.AreSame (itemA, lvw.SelectedItems [2], "#D4");
512
513                         form.Dispose ();
514                 }
515
516                 /*
517                         ListViewItemCollection
518                 */
519
520                 [Test]
521                 public void ListViewItemCollectionTest_Add ()
522                 {
523                         ListView lvw = new ListView ();
524                         ListViewItem item = new ListViewItem ("Title");
525                         ListViewItem newItem = lvw.Items.Add (item);
526                         Assert.AreSame (newItem, item, "#A1");
527                         Assert.AreEqual (0, item.Index, "#A2");
528                         Assert.AreSame (item, lvw.Items [0], "#A3");
529                         Assert.AreSame (lvw, item.ListView, "#A4");
530
531                         newItem = lvw.Items.Add ("A title");
532                         Assert.AreEqual ("A title", newItem.Text, "#B1");
533                         Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
534                         Assert.AreEqual (1, newItem.Index, "#B3");
535                         Assert.AreSame (newItem, lvw.Items [1], "#B4");
536                         Assert.AreSame (lvw, newItem.ListView, "#B5");
537                         Assert.AreEqual (0, item.Index, "#B6");
538                         Assert.AreSame (item, lvw.Items [0], "#B7");
539
540                         newItem = lvw.Items.Add ("A title", 4);
541                         Assert.AreEqual ("A title", newItem.Text, "#C1");
542                         Assert.AreEqual (4, newItem.ImageIndex, "#C2");
543                         Assert.AreEqual (2, newItem.Index, "#C3");
544                         Assert.AreSame (newItem, lvw.Items [2], "#C4");
545                         Assert.AreSame (lvw, newItem.ListView, "#C5");
546                         Assert.AreEqual (0, item.Index, "#C6");
547                         Assert.AreSame (item, lvw.Items [0], "#C7");
548                 }
549
550                 [Test]
551                 [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
552                 public void ListViewItemCollectionTest_Add_ExistingItem ()
553                 {
554                         ListView lvw = new ListView ();
555                         ListViewItem itemA = lvw.Items.Add ("A");
556                         lvw.Items.Add (itemA);
557                 }
558
559                 [Test]
560                 public void ListViewItemCollectionTest_Insert ()
561                 {
562                         ListView lvw = new ListView ();
563                         ListViewItem item = new ListViewItem ("Title");
564                         ListViewItem newItem = lvw.Items.Insert (0, item);
565                         Assert.AreSame (newItem, item, "#A1");
566                         Assert.AreEqual (-1, newItem.ImageIndex, "#A2");
567                         Assert.AreSame (newItem, lvw.Items [0], "#A3");
568                         Assert.AreSame (lvw, newItem.ListView, "#A4");
569
570                         newItem = lvw.Items.Insert (1, "A title");
571                         Assert.AreEqual ("A title", newItem.Text, "#B1");
572                         Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
573                         Assert.AreEqual (1, newItem.Index, "#B3");
574                         Assert.AreSame (newItem, lvw.Items [1], "#B4");
575                         Assert.AreSame (lvw, newItem.ListView, "#B5");
576                         Assert.AreEqual (0, item.Index, "#B6");
577                         Assert.AreSame (item, lvw.Items [0], "#B7");
578
579                         newItem = lvw.Items.Insert (0, "Other title");
580                         Assert.AreEqual ("Other title", newItem.Text, "#C1");
581                         Assert.AreEqual (-1, newItem.ImageIndex, "#C2");
582                         Assert.AreEqual (0, newItem.Index, "#C3");
583                         Assert.AreSame (newItem, lvw.Items [0], "#C4");
584                         Assert.AreSame (lvw, newItem.ListView, "#C5");
585                         Assert.AreEqual (1, item.Index, "#C6");
586                         Assert.AreSame (item, lvw.Items [1], "#C7");
587
588                         newItem = lvw.Items.Insert (3, "Some title", 4);
589                         Assert.AreEqual ("Some title", newItem.Text, "#D1");
590                         Assert.AreEqual (4, newItem.ImageIndex, "#D2");
591                         Assert.AreEqual (3, newItem.Index, "#D3");
592                         Assert.AreSame (newItem, lvw.Items [3], "#D4");
593                         Assert.AreSame (lvw, newItem.ListView, "#D5");
594                         Assert.AreEqual (1, item.Index, "#D6");
595                         Assert.AreSame (item, lvw.Items [1], "#D7");
596
597                         newItem = lvw.Items.Insert (0, "No title", 4);
598                         Assert.AreEqual ("No title", newItem.Text, "#E1");
599                         Assert.AreEqual (4, newItem.ImageIndex, "#E2");
600                         Assert.AreEqual (0, newItem.Index, "#E3");
601                         Assert.AreSame (newItem, lvw.Items [0], "#E4");
602                         Assert.AreSame (lvw, newItem.ListView, "#E5");
603                         Assert.AreEqual (2, item.Index, "#E6");
604                         Assert.AreSame (item, lvw.Items [2], "#E7");
605                 }
606
607                 [Test]
608                 [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
609                 public void ListViewItemCollectionTest_Insert_ExistingItem ()
610                 {
611                         ListView lvw = new ListView ();
612                         ListViewItem itemA = lvw.Items.Add ("A");
613                         lvw.Items.Insert (0, itemA);
614                 }
615
616                 [Test]
617                 public void ListViewItemCollectionTest_Remove ()
618                 {
619                         Form form = new Form ();
620                         form.ShowInTaskbar = false;
621                         ListView lvw = new ListView ();
622                         form.Controls.Add (lvw);
623                         lvw.MultiSelect = true;
624                         lvw.CheckBoxes = true;
625
626                         form.Show ();
627
628                         ListViewItem itemA = lvw.Items.Add ("A");
629                         ListViewItem itemB = lvw.Items.Add ("B");
630                         lvw.Items.Add ("C");
631                         ListViewItem itemD = lvw.Items.Add ("D");
632
633                         Assert.AreEqual (4, lvw.Items.Count, "#A1");
634                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
635                         Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
636
637                         itemB.Checked = true;
638                         itemD.Checked = true;
639
640                         Assert.AreEqual (4, lvw.Items.Count, "#B1");
641                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
642                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
643                         Assert.AreSame (itemB, lvw.CheckedItems [0], "#B4");
644                         Assert.AreSame (itemD, lvw.CheckedItems [1], "#B5");
645
646                         itemD.Selected = true;
647
648                         Assert.AreEqual (4, lvw.Items.Count, "#C1");
649                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
650                         Assert.AreSame (itemD, lvw.SelectedItems [0], "#C3");
651                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
652                         Assert.AreSame (itemB, lvw.CheckedItems [0], "#C5");
653                         Assert.AreSame (itemD, lvw.CheckedItems [1], "#C6");
654
655                         lvw.Items.Remove (itemB);
656
657                         Assert.AreEqual (3, lvw.Items.Count, "#D1");
658                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
659                         Assert.AreSame (itemD, lvw.SelectedItems [0], "#D3");
660                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
661                         Assert.AreSame (itemD, lvw.CheckedItems [0], "#D5");
662
663                         lvw.Items.Remove (itemA);
664
665                         Assert.AreEqual (2, lvw.Items.Count, "#E1");
666                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
667                         Assert.AreEqual (itemD, lvw.SelectedItems [0], "#E3");
668                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
669                         Assert.AreEqual (itemD, lvw.CheckedItems [0], "#E5");
670
671                         form.Dispose ();
672                 }
673
674                 [Test]
675                 public void ListViewItemCollectionTest_RemoveAt ()
676                 {
677                         Form form = new Form ();
678                         form.ShowInTaskbar = false;
679                         ListView lvw = new ListView ();
680                         form.Controls.Add (lvw);
681                         lvw.MultiSelect = true;
682                         lvw.CheckBoxes = true;
683                         lvw.Items.Add ("A");
684                         lvw.Items.Add ("B");
685                         lvw.Items.Add ("C");
686                         lvw.Items.Add ("D");
687
688                         form.Show ();
689
690                         Assert.AreEqual (4, lvw.Items.Count, "#A1");
691                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
692                         Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
693
694                         lvw.Items [1].Checked = true;
695                         lvw.Items [3].Checked = true;
696
697                         Assert.AreEqual (4, lvw.Items.Count, "#B1");
698                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
699                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
700                         Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#B4");
701                         Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#B5");
702
703                         lvw.Items [3].Selected = true;
704
705                         Assert.AreEqual (4, lvw.Items.Count, "#C1");
706                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
707                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#C3");
708                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
709                         Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#C5");
710                         Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#C6");
711
712                         lvw.Items.RemoveAt (1);
713
714                         Assert.AreEqual (3, lvw.Items.Count, "#D1");
715                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
716                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#D3");
717                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
718                         Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#D5");
719
720                         lvw.Items.RemoveAt (0);
721
722                         Assert.AreEqual (2, lvw.Items.Count, "#E1");
723                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
724                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#E3");
725                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
726                         Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#E5");
727
728                         form.Dispose ();
729                 }
730         }
731 }