New tests.
[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, ExpectedException (typeof (NotSupportedException))]
153                 public void CheckedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
154                 {
155                         ListView listview = new ListView ();
156                         ((IList)listview.CheckedItems).Remove (5);
157                 }
158
159                 [Test, ExpectedException (typeof (NotSupportedException))]
160                 public void CheckedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
161                 {
162                         ListView listview = new ListView ();
163                         ((IList)listview.CheckedItems).RemoveAt (5);
164                 }
165
166                 /*
167                         SelectedIndexCollection
168                 */
169                 [Test]
170                 public void SelectedIndexCollectionTest_PropertiesTest ()
171                 {
172                         ListView listview = new ListView ();
173
174                         // Properties
175                         Assert.AreEqual (true, listview.SelectedIndices.IsReadOnly, "SelectedIndexCollectionTest_PropertiesTest#1");
176                         Assert.AreEqual (false, ((ICollection)listview.SelectedIndices).IsSynchronized, "SelectedIndexCollectionTest_PropertiesTest#2");
177                         Assert.AreEqual (listview.SelectedIndices, ((ICollection)listview.SelectedIndices).SyncRoot, "SelectedIndexCollectionTest_PropertiesTest#3");
178                         Assert.AreEqual (true, ((IList)listview.SelectedIndices).IsFixedSize, "SelectedIndexCollectionTest_PropertiesTest#4");
179                         Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_PropertiesTest#5");
180                 }
181
182
183                 // Exceptions
184                 [Test, ExpectedException (typeof (NotSupportedException))]
185                 public void SelectedIndexCollectionTest_Add_ExceptionTest ()
186                 {
187                         ListView listview = new ListView ();
188                         ((IList)listview.SelectedIndices).Add (5);
189                 }
190
191                 [Test, ExpectedException (typeof (NotSupportedException))]
192                 public void SelectedIndexCollectionTest_Remove_ExceptionTest ()
193                 {
194                         ListView listview = new ListView ();
195                         ((IList)listview.SelectedIndices).Remove (5);
196                 }
197
198                 [Test, ExpectedException (typeof (NotSupportedException))]
199                 public void SelectedIndexCollectionTest_RemoveAt_ExceptionTest ()
200                 {
201                         ListView listview = new ListView ();
202                         ((IList)listview.SelectedIndices).RemoveAt (5);
203                 }
204
205                 /*
206                         SelectedItemCollection
207                 */
208                 [Test]
209                 public void SelectedItemCollectionTest_PropertiesTest ()
210                 {
211                         ListView listview = new ListView ();
212
213                         // Properties
214                         Assert.AreEqual (true, listview.SelectedItems.IsReadOnly, "SelectedItemCollectionTest_PropertiesTest#1");
215                         Assert.AreEqual (false, ((ICollection)listview.SelectedItems).IsSynchronized, "SelectedItemCollectionTest_PropertiesTest#2");
216                         Assert.AreEqual (listview.SelectedItems, ((ICollection)listview.SelectedItems).SyncRoot, "SelectedItemCollectionTest_PropertiesTest#3");
217                         Assert.AreEqual (true, ((IList)listview.SelectedItems).IsFixedSize, "SelectedItemCollectionTest_PropertiesTest#4");
218                         Assert.AreEqual (0, listview.SelectedItems.Count, "SelectedItemCollectionTest_PropertiesTest#5");
219                 }
220
221
222                 // Exceptions
223                 [Test, ExpectedException (typeof (NotSupportedException))]
224                 public void SelectedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
225                 {
226                         ListView listview = new ListView ();
227                         ((IList)listview.SelectedItems).Add (5);
228                 }
229
230                 [Test, ExpectedException (typeof (NotSupportedException))]
231                 public void SelectedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
232                 {
233                         ListView listview = new ListView ();
234                         ((IList)listview.SelectedItems).Remove (5);
235                 }
236
237                 [Test, ExpectedException (typeof (NotSupportedException))]
238                 public void SelectedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
239                 {
240                         ListView listview = new ListView ();
241                         ((IList)listview.SelectedItems).RemoveAt (5);
242                 }
243
244                 [Test]
245                 public void SelectedItemCollectionTest_Clear ()
246                 {
247                         Form form = new Form ();
248                         ListView lvw = new ListView ();
249                         form.Controls.Add (lvw);
250                         ListViewItem item = lvw.Items.Add ("Title");
251                         item.Selected = true;
252
253                         lvw.SelectedItems.Clear ();
254
255                         Assert.IsTrue (item.Selected, "#A1");
256                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
257                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A3");
258
259                         form.Show ();
260
261                         Assert.IsTrue (item.Selected, "#B1");
262                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#B2");
263                         Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B3");
264
265                         // once listview is created, clear DOES have effect
266                         lvw.SelectedItems.Clear ();
267
268                         Assert.IsFalse (item.Selected, "#C1");
269                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#C2");
270                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#C3");
271                 }
272
273                 [Test]
274                 public void SelectedItemCollectionTest_Contains ()
275                 {
276                         Form form = new Form ();
277                         ListView lvw = new ListView ();
278                         form.Controls.Add (lvw);
279                         ListViewItem item = lvw.Items.Add ("Title");
280                         item.Selected = true;
281                         IList list = (IList) lvw.SelectedItems;
282
283                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A1");
284                         Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#A2");
285                         Assert.IsFalse (list.Contains (item), "#A3");
286                         Assert.IsFalse (list.Contains (new ListViewItem ()), "#A4");
287
288                         form.Show ();
289
290                         Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B1");
291                         Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#B2");
292                         Assert.IsTrue (list.Contains (item), "#B3");
293                         Assert.IsFalse (list.Contains (new ListViewItem ()), "#B4");
294                 }
295
296                 [Test]
297                 public void SelectedItemCollectionTest_CopyTo ()
298                 {
299                         Form form = new Form ();
300                         ListView lvw = new ListView ();
301                         form.Controls.Add (lvw);
302                         ListViewItem item = lvw.Items.Add ("Title");
303                         item.Selected = true;
304                         IList list = (IList) lvw.SelectedItems;
305                         Assert.IsNotNull (list, "#A1");
306                         ListViewItem [] items = new ListViewItem [1];
307
308                         lvw.SelectedItems.CopyTo (items, 0);
309                         Assert.IsNull (items [0], "#A2");
310                         lvw.SelectedItems.CopyTo (items, 455);
311
312                         form.Show ();
313
314                         lvw.SelectedItems.CopyTo (items, 0);
315                         Assert.AreSame (item, items [0], "#B1");
316                         try {
317                                 lvw.SelectedItems.CopyTo (items, 455);
318                                 Assert.Fail ("#B2");
319                         } catch (ArgumentException) {
320                         }
321                 }
322
323                 [Test]
324                 public void SelectedItemCollectionTest_Count ()
325                 {
326                         Form form = new Form ();
327                         ListView lvw = new ListView ();
328                         form.Controls.Add (lvw);
329                         ListViewItem item = lvw.Items.Add ("Title");
330                         item.Selected = true;
331
332                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#1");
333                         form.Show ();
334                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#2");
335                 }
336
337                 [Test]
338                 public void SelectedItemCollectionTest_GetEnumerator ()
339                 {
340                         Form form = new Form ();
341                         ListView lvw = new ListView ();
342                         form.Controls.Add (lvw);
343                         ListViewItem item = lvw.Items.Add ("Title");
344                         item.Selected = true;
345
346                         Assert.IsFalse (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#A1");
347
348                         form.Show ();
349
350                         Assert.IsTrue (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#B1");
351                 }
352
353                 [Test]
354                 public void SelectedItemCollectionTest_Indexer ()
355                 {
356                         Form form = new Form ();
357                         ListView lvw = new ListView ();
358                         form.Controls.Add (lvw);
359                         ListViewItem item = lvw.Items.Add ("Title");
360                         item.Selected = true;
361                         IList list = (IList) lvw.SelectedItems;
362
363                         try  {
364                                 ListViewItem x = lvw.SelectedItems [0];
365                                 Assert.Fail ("#A1" + x.ToString ());
366                         } catch (ArgumentOutOfRangeException) {
367                         }
368
369                         try {
370                                 ListViewItem x = list [0] as ListViewItem;
371                                 Assert.Fail ("#A2" + x.ToString ());
372                         } catch (ArgumentOutOfRangeException) {
373                         }
374
375                         form.Show ();
376
377                         Assert.AreSame (item, lvw.SelectedItems [0], "#B1");
378                         Assert.AreSame (item, list [0], "#B2");
379                 }
380
381                 [Test]
382                 public void SelectedItemCollectionTest_IndexOf ()
383                 {
384                         Form form = new Form ();
385                         ListView lvw = new ListView ();
386                         form.Controls.Add (lvw);
387                         ListViewItem item = lvw.Items.Add ("Title");
388                         item.Selected = true;
389                         IList list = (IList) lvw.SelectedItems;
390
391                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (item), "#A1");
392                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#A2");
393                         Assert.AreEqual (-1, list.IndexOf (item), "#A3");
394                         Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#A4");
395
396                         form.Show ();
397
398                         Assert.AreEqual (0, lvw.SelectedItems.IndexOf (item), "#B1");
399                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#B2");
400                         Assert.AreEqual (0, list.IndexOf (item), "#B3");
401                         Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#B4");
402                 }
403
404                 /*
405                         ListViewItemCollection
406                 */
407
408                 [Test]
409                 public void ListViewItemCollectionTest_Add ()
410                 {
411                         ListView lvw = new ListView ();
412                         ListViewItem item = new ListViewItem ("Title");
413                         ListViewItem newItem = lvw.Items.Add (item);
414                         Assert.AreSame (newItem, item, "#A1");
415                         Assert.AreEqual (0, item.Index, "#A2");
416                         Assert.AreSame (item, lvw.Items [0], "#A3");
417                         Assert.AreSame (lvw, item.ListView, "#A4");
418
419                         newItem = lvw.Items.Add ("A title");
420                         Assert.AreEqual ("A title", newItem.Text, "#B1");
421                         Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
422                         Assert.AreEqual (1, newItem.Index, "#B3");
423                         Assert.AreSame (newItem, lvw.Items [1], "#B4");
424                         Assert.AreSame (lvw, newItem.ListView, "#B5");
425                         Assert.AreEqual (0, item.Index, "#B6");
426                         Assert.AreSame (item, lvw.Items [0], "#B7");
427
428                         newItem = lvw.Items.Add ("A title", 4);
429                         Assert.AreEqual ("A title", newItem.Text, "#C1");
430                         Assert.AreEqual (4, newItem.ImageIndex, "#C2");
431                         Assert.AreEqual (2, newItem.Index, "#C3");
432                         Assert.AreSame (newItem, lvw.Items [2], "#C4");
433                         Assert.AreSame (lvw, newItem.ListView, "#C5");
434                         Assert.AreEqual (0, item.Index, "#C6");
435                         Assert.AreSame (item, lvw.Items [0], "#C7");
436                 }
437
438                 [Test]
439                 [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
440                 public void ListViewItemCollectionTest_Add_ExistingItem ()
441                 {
442                         ListView lvw = new ListView ();
443                         ListViewItem itemA = lvw.Items.Add ("A");
444                         lvw.Items.Add (itemA);
445                 }
446
447                 [Test]
448                 public void ListViewItemCollectionTest_Insert ()
449                 {
450                         ListView lvw = new ListView ();
451                         ListViewItem item = new ListViewItem ("Title");
452                         ListViewItem newItem = lvw.Items.Insert (0, item);
453                         Assert.AreSame (newItem, item, "#A1");
454                         Assert.AreEqual (-1, newItem.ImageIndex, "#A2");
455                         Assert.AreSame (newItem, lvw.Items [0], "#A3");
456                         Assert.AreSame (lvw, newItem.ListView, "#A4");
457
458                         newItem = lvw.Items.Insert (1, "A title");
459                         Assert.AreEqual ("A title", newItem.Text, "#B1");
460                         Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
461                         Assert.AreEqual (1, newItem.Index, "#B3");
462                         Assert.AreSame (newItem, lvw.Items [1], "#B4");
463                         Assert.AreSame (lvw, newItem.ListView, "#B5");
464                         Assert.AreEqual (0, item.Index, "#B6");
465                         Assert.AreSame (item, lvw.Items [0], "#B7");
466
467                         newItem = lvw.Items.Insert (0, "Other title");
468                         Assert.AreEqual ("Other title", newItem.Text, "#C1");
469                         Assert.AreEqual (-1, newItem.ImageIndex, "#C2");
470                         Assert.AreEqual (0, newItem.Index, "#C3");
471                         Assert.AreSame (newItem, lvw.Items [0], "#C4");
472                         Assert.AreSame (lvw, newItem.ListView, "#C5");
473                         Assert.AreEqual (1, item.Index, "#C6");
474                         Assert.AreSame (item, lvw.Items [1], "#C7");
475
476                         newItem = lvw.Items.Insert (3, "Some title", 4);
477                         Assert.AreEqual ("Some title", newItem.Text, "#D1");
478                         Assert.AreEqual (4, newItem.ImageIndex, "#D2");
479                         Assert.AreEqual (3, newItem.Index, "#D3");
480                         Assert.AreSame (newItem, lvw.Items [3], "#D4");
481                         Assert.AreSame (lvw, newItem.ListView, "#D5");
482                         Assert.AreEqual (1, item.Index, "#D6");
483                         Assert.AreSame (item, lvw.Items [1], "#D7");
484
485                         newItem = lvw.Items.Insert (0, "No title", 4);
486                         Assert.AreEqual ("No title", newItem.Text, "#E1");
487                         Assert.AreEqual (4, newItem.ImageIndex, "#E2");
488                         Assert.AreEqual (0, newItem.Index, "#E3");
489                         Assert.AreSame (newItem, lvw.Items [0], "#E4");
490                         Assert.AreSame (lvw, newItem.ListView, "#E5");
491                         Assert.AreEqual (2, item.Index, "#E6");
492                         Assert.AreSame (item, lvw.Items [2], "#E7");
493                 }
494
495                 [Test]
496                 [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
497                 public void ListViewItemCollectionTest_Insert_ExistingItem ()
498                 {
499                         ListView lvw = new ListView ();
500                         ListViewItem itemA = lvw.Items.Add ("A");
501                         lvw.Items.Insert (0, itemA);
502                 }
503
504                 [Test]
505                 public void ListViewItemCollectionTest_Remove ()
506                 {
507                         Form form = new Form ();
508                         ListView lvw = new ListView ();
509                         form.Controls.Add (lvw);
510                         lvw.MultiSelect = true;
511                         lvw.CheckBoxes = true;
512
513                         form.Show ();
514
515                         ListViewItem itemA = lvw.Items.Add ("A");
516                         ListViewItem itemB = lvw.Items.Add ("B");
517                         lvw.Items.Add ("C");
518                         ListViewItem itemD = lvw.Items.Add ("D");
519
520                         Assert.AreEqual (4, lvw.Items.Count, "#A1");
521                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
522                         Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
523
524                         itemB.Checked = true;
525                         itemD.Checked = true;
526
527                         Assert.AreEqual (4, lvw.Items.Count, "#B1");
528                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
529                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
530                         Assert.AreSame (itemB, lvw.CheckedItems [0], "#B4");
531                         Assert.AreSame (itemD, lvw.CheckedItems [1], "#B5");
532
533                         itemD.Selected = true;
534
535                         Assert.AreEqual (4, lvw.Items.Count, "#C1");
536                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
537                         Assert.AreSame (itemD, lvw.SelectedItems [0], "#C3");
538                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
539                         Assert.AreSame (itemB, lvw.CheckedItems [0], "#C5");
540                         Assert.AreSame (itemD, lvw.CheckedItems [1], "#C6");
541
542                         lvw.Items.Remove (itemB);
543
544                         Assert.AreEqual (3, lvw.Items.Count, "#D1");
545                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
546                         Assert.AreSame (itemD, lvw.SelectedItems [0], "#D3");
547                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
548                         Assert.AreSame (itemD, lvw.CheckedItems [0], "#D5");
549
550                         lvw.Items.Remove (itemA);
551
552                         Assert.AreEqual (2, lvw.Items.Count, "#E1");
553                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
554                         Assert.AreEqual (itemD, lvw.SelectedItems [0], "#E3");
555                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
556                         Assert.AreEqual (itemD, lvw.CheckedItems [0], "#E5");
557                 }
558
559                 [Test]
560                 public void ListViewItemCollectionTest_RemoveAt ()
561                 {
562                         Form form = new Form ();
563                         ListView lvw = new ListView ();
564                         form.Controls.Add (lvw);
565                         lvw.MultiSelect = true;
566                         lvw.CheckBoxes = true;
567                         lvw.Items.Add ("A");
568                         lvw.Items.Add ("B");
569                         lvw.Items.Add ("C");
570                         lvw.Items.Add ("D");
571
572                         form.Show ();
573
574                         Assert.AreEqual (4, lvw.Items.Count, "#A1");
575                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
576                         Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
577
578                         lvw.Items [1].Checked = true;
579                         lvw.Items [3].Checked = true;
580
581                         Assert.AreEqual (4, lvw.Items.Count, "#B1");
582                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
583                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
584                         Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#B4");
585                         Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#B5");
586
587                         lvw.Items [3].Selected = true;
588
589                         Assert.AreEqual (4, lvw.Items.Count, "#C1");
590                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
591                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#C3");
592                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
593                         Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#C5");
594                         Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#C6");
595
596                         lvw.Items.RemoveAt (1);
597
598                         Assert.AreEqual (3, lvw.Items.Count, "#D1");
599                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
600                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#D3");
601                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
602                         Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#D5");
603
604                         lvw.Items.RemoveAt (0);
605
606                         Assert.AreEqual (2, lvw.Items.Count, "#E1");
607                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
608                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#E3");
609                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
610                         Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#E5");
611                 }
612         }
613 }