3dac235e50b3cf8884b721d1882e5346738b2c89
[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                         ColumnHeader colA = new ColumnHeader ();
60                         ColumnHeader colB = new ColumnHeader ();
61
62                         // Duplicated elements with same text added
63                         listview.Columns.Add (colA);
64                         listview.Columns.Add (colB);
65                         Assert.AreEqual (2, listview.Columns.Count, "#1");
66                         Assert.AreEqual ("ColumnHeader", listview.Columns[0].Text, "#2");
67                         Assert.AreSame (listview, colA.ListView, "#3");
68                         Assert.AreSame (listview, colB.ListView, "#4");
69                 }
70
71                 [Test]
72                 public void ColumnHeaderCollectionTest_ClearTest ()
73                 {
74                         ListView listview = new ListView ();
75                         ColumnHeader colA = new ColumnHeader ();
76                         ColumnHeader colB = new ColumnHeader ();
77                         listview.Columns.Add (colA);
78                         listview.Columns.Add (colB);
79                         listview.Columns.Clear ();
80                         Assert.AreEqual (0, listview.Columns.Count, "#1");
81                         Assert.IsNull (colA.ListView, "#2");
82                         Assert.IsNull (colB.ListView, "#3");
83                 }
84
85                 [Test]
86                 public void ColumnHeaderCollectionTest_Remove ()
87                 {
88                         ListView listview = new ListView ();
89                         ColumnHeader colA = new ColumnHeader ();
90                         ColumnHeader colB = new ColumnHeader ();
91                         ColumnHeader colC = new ColumnHeader ();
92                         listview.Columns.Add (colA);
93                         listview.Columns.Add (colB);
94                         listview.Columns.Add (colC);
95
96                         listview.Columns.Remove (colB);
97                         Assert.AreEqual (2, listview.Columns.Count, "#A1");
98                         Assert.AreSame (colA, listview.Columns [0], "#A2");
99                         Assert.AreSame (colC, listview.Columns [1], "#A3");
100                         Assert.AreSame (listview, colA.ListView, "#A4");
101                         Assert.IsNull (colB.ListView, "#A5");
102                         Assert.AreSame (listview, colC.ListView, "#A6");
103
104                         listview.Columns.Remove (colC);
105                         Assert.AreEqual (1, listview.Columns.Count, "#B1");
106                         Assert.AreSame (colA, listview.Columns [0], "#B2");
107                         Assert.AreSame (listview, colA.ListView, "#B3");
108                         Assert.IsNull (colB.ListView, "#B4");
109                         Assert.IsNull (colC.ListView, "#B5");
110
111                         listview.Columns.Remove (colA);
112                         Assert.AreEqual (0, listview.Columns.Count, "#C1");
113                         Assert.IsNull (colA.ListView, "#C2");
114                         Assert.IsNull (colB.ListView, "#C3");
115                         Assert.IsNull (colC.ListView, "#C4");
116                 }
117
118                 [Test]
119                 public void ColumnHeaderCollectionTest_RemoveAt ()
120                 {
121                         ListView listview = new ListView ();
122                         ColumnHeader colA = new ColumnHeader ();
123                         ColumnHeader colB = new ColumnHeader ();
124                         ColumnHeader colC = new ColumnHeader ();
125                         listview.Columns.Add (colA);
126                         listview.Columns.Add (colB);
127                         listview.Columns.Add (colC);
128
129                         listview.Columns.RemoveAt (1);
130                         Assert.AreEqual (2, listview.Columns.Count, "#A1");
131                         Assert.AreSame (colA, listview.Columns [0], "#A2");
132                         Assert.AreSame (colC, listview.Columns [1], "#A3");
133                         Assert.AreSame (listview, colA.ListView, "#A4");
134                         Assert.IsNull (colB.ListView, "#A5");
135                         Assert.AreSame (listview, colC.ListView, "#A6");
136
137                         listview.Columns.RemoveAt (0);
138                         Assert.AreEqual (1, listview.Columns.Count, "#B1");
139                         Assert.AreSame (colC, listview.Columns [0], "#B2");
140                         Assert.IsNull (colA.ListView, "#B3");
141                         Assert.IsNull (colB.ListView, "#B4");
142                         Assert.AreSame (listview, colC.ListView, "#B5");
143
144                         listview.Columns.RemoveAt (0);
145                         Assert.AreEqual (0, listview.Columns.Count, "#C1");
146                         Assert.IsNull (colA.ListView, "#C2");
147                         Assert.IsNull (colB.ListView, "#C3");
148                         Assert.IsNull (colC.ListView, "#C4");
149                 }
150
151                 /*
152                         CheckedIndexCollection
153                 */
154                 [Test]
155                 public void CheckedIndexCollectionTest_PropertiesTest ()
156                 {
157                         ListView listview = new ListView ();
158
159                         // Properties
160                         Assert.AreEqual (true, listview.CheckedIndices.IsReadOnly, "CheckedIndexCollectionTest_PropertiesTest#1");
161                         Assert.AreEqual (false, ((ICollection)listview.CheckedIndices).IsSynchronized, "CheckedIndexCollectionTest_PropertiesTest#2");
162                         Assert.AreEqual (listview.CheckedIndices, ((ICollection)listview.CheckedIndices).SyncRoot, "CheckedIndexCollectionTest_PropertiesTest#3");
163                         Assert.AreEqual (true, ((IList)listview.CheckedIndices).IsFixedSize, "CheckedIndexCollectionTest_PropertiesTest#4");
164                         Assert.AreEqual (0, listview.CheckedIndices.Count, "CheckedIndexCollectionTest_PropertiesTest#5");
165                 }
166
167
168                 // Exceptions
169                 [Test, ExpectedException (typeof (NotSupportedException))]
170                 public void CheckedIndexCollectionTest_Add_ExceptionTest ()
171                 {
172                         ListView listview = new ListView ();
173                         ((IList)listview.CheckedIndices).Add (5);
174                 }
175
176                 [Test, ExpectedException (typeof (NotSupportedException))]
177                 public void CheckedIndexCollectionTest_Remove_ExceptionTest ()
178                 {
179                         ListView listview = new ListView ();
180                         ((IList)listview.CheckedIndices).Remove (5);
181                 }
182
183                 [Test, ExpectedException (typeof (NotSupportedException))]
184                 public void CheckedIndexCollectionTest_RemoveAt_ExceptionTest ()
185                 {
186                         ListView listview = new ListView ();
187                         ((IList)listview.CheckedIndices).RemoveAt (5);
188                 }
189
190                 /*
191                         CheckedItemCollection
192                 */
193                 [Test]
194                 public void CheckedItemCollectionTest_PropertiesTest ()
195                 {
196                         ListView listview = new ListView ();
197
198                         // Properties
199                         Assert.AreEqual (true, listview.CheckedItems.IsReadOnly, "CheckedItemCollectionTest_PropertiesTest#1");
200                         Assert.AreEqual (false, ((ICollection)listview.CheckedItems).IsSynchronized, "CheckedItemCollectionTest_PropertiesTest#2");
201                         Assert.AreEqual (listview.CheckedItems, ((ICollection)listview.CheckedItems).SyncRoot, "CheckedItemCollectionTest_PropertiesTest#3");
202                         Assert.AreEqual (true, ((IList)listview.CheckedItems).IsFixedSize, "CheckedItemCollectionTest_PropertiesTest#4");
203                         Assert.AreEqual (0, listview.CheckedItems.Count, "CheckedItemCollectionTest_PropertiesTest#5");
204                 }
205
206
207                 // Exceptions
208                 [Test, ExpectedException (typeof (NotSupportedException))]
209                 public void CheckedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
210                 {
211                         ListView listview = new ListView ();
212                         ((IList)listview.CheckedItems).Add (5);
213                 }
214
215                 [Test]
216                 public void CheckedItemCollectionTest_Order ()
217                 {
218                         Form form = new Form ();
219                         form.ShowInTaskbar = false;
220                         ListView lvw = new ListView ();
221                         lvw.CheckBoxes = true;
222                         form.Controls.Add (lvw);
223                         ListViewItem itemA = lvw.Items.Add ("A");
224                         itemA.Checked = true;
225                         ListViewItem itemB = lvw.Items.Add ("B");
226                         itemB.Checked = true;
227                         ListViewItem itemC = lvw.Items.Add ("C");
228                         itemC.Checked = true;
229
230                         Assert.AreEqual (3, lvw.CheckedItems.Count, "#A1");
231                         Assert.AreSame (itemA, lvw.CheckedItems [0], "#A2");
232                         Assert.AreSame (itemB, lvw.CheckedItems [1], "#A3");
233                         Assert.AreSame (itemC, lvw.CheckedItems [2], "#A3");
234
235                         itemB.Checked = false;
236
237                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#B1");
238                         Assert.AreSame (itemA, lvw.CheckedItems [0], "#B2");
239                         Assert.AreSame (itemC, lvw.CheckedItems [1], "#B3");
240
241                         itemB.Checked = true;
242
243                         Assert.AreEqual (3, lvw.CheckedItems.Count, "#C1");
244                         Assert.AreSame (itemA, lvw.CheckedItems [0], "#C2");
245                         Assert.AreSame (itemB, lvw.CheckedItems [1], "#C3");
246                         Assert.AreSame (itemC, lvw.CheckedItems [2], "#C4");
247
248                         lvw.Sorting = SortOrder.Descending;
249
250                         Assert.AreEqual (3, lvw.CheckedItems.Count, "#D1");
251                         Assert.AreSame (itemA, lvw.CheckedItems [0], "#D2");
252                         Assert.AreSame (itemB, lvw.CheckedItems [1], "#D3");
253                         Assert.AreSame (itemC, lvw.CheckedItems [2], "#D4");
254
255                         // sorting only takes effect when listview is created
256                         form.Show ();
257
258                         Assert.AreEqual (3, lvw.CheckedItems.Count, "#E1");
259                         Assert.AreSame (itemC, lvw.CheckedItems [0], "#E2");
260                         Assert.AreSame (itemB, lvw.CheckedItems [1], "#E3");
261                         Assert.AreSame (itemA, lvw.CheckedItems [2], "#E4");
262                         form.Dispose ();
263                 }
264
265                 [Test, ExpectedException (typeof (NotSupportedException))]
266                 public void CheckedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
267                 {
268                         ListView listview = new ListView ();
269                         ((IList)listview.CheckedItems).Remove (5);
270                 }
271
272                 [Test, ExpectedException (typeof (NotSupportedException))]
273                 public void CheckedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
274                 {
275                         ListView listview = new ListView ();
276                         ((IList)listview.CheckedItems).RemoveAt (5);
277                 }
278
279                 /*
280                         SelectedIndexCollection
281                 */
282                 [Test]
283                 public void SelectedIndexCollectionTest_PropertiesTest ()
284                 {
285                         ListView listview = new ListView ();
286
287                         // Properties
288 #if !NET_2_0
289                         Assert.AreEqual (true, listview.SelectedIndices.IsReadOnly, "SelectedIndexCollectionTest_PropertiesTest#1");
290                         Assert.AreEqual (true, ((IList)listview.SelectedIndices).IsFixedSize, "SelectedIndexCollectionTest_PropertiesTest#4");
291 #else
292                         Assert.AreEqual (false, listview.SelectedIndices.IsReadOnly, "SelectedIndexCollectionTest_PropertiesTest#1");
293                         Assert.AreEqual (false, ((IList)listview.SelectedIndices).IsFixedSize, "SelectedIndexCollectionTest_PropertiesTest#4");
294 #endif
295                         Assert.AreEqual (false, ((ICollection)listview.SelectedIndices).IsSynchronized, "SelectedIndexCollectionTest_PropertiesTest#2");
296                         Assert.AreEqual (listview.SelectedIndices, ((ICollection)listview.SelectedIndices).SyncRoot, "SelectedIndexCollectionTest_PropertiesTest#3");
297                         Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_PropertiesTest#5");
298                 }
299
300 #if NET_2_0
301                 [Test]
302                 public void SelectedIndexCollectionTest_AddTest ()
303                 {
304                         ListView listview = new ListView ();
305                         listview.Items.Add ("A");
306
307                         int n = listview.SelectedIndices.Add (0);
308                         Assert.AreEqual (0, n, "SelectedIndexCollectionTest_AddTest#1");
309                         Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#2");
310
311                         // Force to create the handle
312                         listview.CreateControl ();
313                         Assert.AreEqual (1, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#4");
314
315                         n = listview.SelectedIndices.Add (0);
316                         Assert.AreEqual (1, n, "SelectedIndexCollectionTest_AddTest#5");
317                         Assert.AreEqual (1, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#6");
318                         Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#7");
319                 }
320
321                 [Test]
322                 public void SelectedIndexCollectionTest_ClearTest ()
323                 {
324                         ListView listview = new ListView ();
325                         listview.Items.Add ("A");
326                         listview.Items.Add ("B");
327                         listview.Items.Add ("C");
328
329                         listview.SelectedIndices.Add (0);
330                         listview.SelectedIndices.Add (2);
331
332                         // Nothing if handle hasn't been created
333                         listview.SelectedIndices.Clear (); 
334                         Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_ClearTest#2");
335                         Assert.AreEqual (false, listview.Items [1].Selected, "SelectedIndexCollectionTest_ClearTest#3");
336                         Assert.AreEqual (true, listview.Items [2].Selected, "SelectedIndexCollectionTest_ClearTest#4");
337
338                         // Force to create the handle
339                         listview.CreateControl ();
340
341                         listview.SelectedIndices.Add (0);
342                         listview.SelectedIndices.Add (2);
343
344                         listview.SelectedIndices.Clear ();
345                         Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_ClearTest#5");
346                         Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_ClearTest#6");
347                         Assert.AreEqual (false, listview.Items [1].Selected, "SelectedIndexCollectionTest_ClearTest#7");
348                         Assert.AreEqual (false, listview.Items [2].Selected, "SelectedIndexCollectionTest_ClearTest#8");
349                 }
350
351                 [Test]
352                 public void SelectedIndexCollectionTest_RemoveTest ()
353                 {
354                         ListView listview = new ListView ();
355                         listview.Items.Add ("A");
356
357                         listview.SelectedIndices.Add (0);
358                         listview.SelectedIndices.Remove (0);
359                         Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#1");
360                         Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#2");
361
362                         // Force to create the handle
363                         listview.CreateControl ();
364
365                         listview.SelectedIndices.Add (0);
366                         listview.SelectedIndices.Remove (0);
367                         Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#3");
368                         Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#4");
369                 }
370 #endif
371
372                 // Exceptions
373 #if !NET_2_0
374                 [Test, ExpectedException (typeof (NotSupportedException))]
375                 public void SelectedIndexCollectionTest_Add_ExceptionTest ()
376                 {
377                         ListView listview = new ListView ();
378                         ((IList)listview.SelectedIndices).Add (5);
379                 }
380
381                 [Test, ExpectedException (typeof (NotSupportedException))]
382                 public void SelectedIndexCollectionTest_Remove_ExceptionTest ()
383                 {
384                         ListView listview = new ListView ();
385                         ((IList)listview.SelectedIndices).Remove (5);
386                 }
387 #endif
388
389                 [Test, ExpectedException (typeof (NotSupportedException))]
390                 public void SelectedIndexCollectionTest_RemoveAt_ExceptionTest ()
391                 {
392                         ListView listview = new ListView ();
393                         ((IList)listview.SelectedIndices).RemoveAt (5);
394                 }
395
396 #if NET_2_0
397                 [Test]
398                 public void SelectedIndexCollectionTest_Remove_ExceptionTest ()
399                 {
400                         ListView listview = new ListView ();
401                         try {
402                                 listview.SelectedIndices.Remove (-1);
403                                 Assert.Fail ("SelectedIndexCollectionTest_Remove_ExceptionTest#1");
404                         } catch (ArgumentOutOfRangeException) {
405                         }
406
407                         try {
408                                 listview.SelectedIndices.Remove (listview.Items.Count);
409                                 Assert.Fail ("SelectedIndexCollectionTest_Remove_ExceptionTest#2");
410                         } catch (ArgumentOutOfRangeException) {
411                         }
412                 }
413
414                 [Test]
415                 public void SelectedIndexCollectionTest_Add_ExceptionTest ()
416                 {
417                         ListView listview = new ListView ();
418                         try {
419                                 listview.SelectedIndices.Add (-1);
420                                 Assert.Fail ("SelectedIndexCollectionTest_Add_ExceptionTest#1");
421                         } catch (ArgumentOutOfRangeException) {
422                         }
423
424                         try {
425                                 listview.SelectedIndices.Add (listview.Items.Count);
426                                 Assert.Fail ("SelectedIndexCollectionTest_Add_ExceptionTest#2");
427                         } catch (ArgumentOutOfRangeException) {
428                         }
429                 }
430 #endif
431
432                 /*
433                         SelectedItemCollection
434                 */
435                 [Test]
436                 public void SelectedItemCollectionTest_PropertiesTest ()
437                 {
438                         ListView listview = new ListView ();
439
440                         // Properties
441                         Assert.AreEqual (true, listview.SelectedItems.IsReadOnly, "SelectedItemCollectionTest_PropertiesTest#1");
442                         Assert.AreEqual (false, ((ICollection)listview.SelectedItems).IsSynchronized, "SelectedItemCollectionTest_PropertiesTest#2");
443                         Assert.AreEqual (listview.SelectedItems, ((ICollection)listview.SelectedItems).SyncRoot, "SelectedItemCollectionTest_PropertiesTest#3");
444                         Assert.AreEqual (true, ((IList)listview.SelectedItems).IsFixedSize, "SelectedItemCollectionTest_PropertiesTest#4");
445                         Assert.AreEqual (0, listview.SelectedItems.Count, "SelectedItemCollectionTest_PropertiesTest#5");
446                 }
447
448
449                 // Exceptions
450                 [Test, ExpectedException (typeof (NotSupportedException))]
451                 public void SelectedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
452                 {
453                         ListView listview = new ListView ();
454                         ((IList)listview.SelectedItems).Add (5);
455                 }
456
457                 [Test, ExpectedException (typeof (NotSupportedException))]
458                 public void SelectedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
459                 {
460                         ListView listview = new ListView ();
461                         ((IList)listview.SelectedItems).Remove (5);
462                 }
463
464                 [Test, ExpectedException (typeof (NotSupportedException))]
465                 public void SelectedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
466                 {
467                         ListView listview = new ListView ();
468                         ((IList)listview.SelectedItems).RemoveAt (5);
469                 }
470
471                 [Test]
472                 public void SelectedItemCollectionTest_Clear ()
473                 {
474                         Form form = new Form ();
475                         form.ShowInTaskbar = false;
476                         ListView lvw = new ListView ();
477                         form.Controls.Add (lvw);
478                         ListViewItem item = lvw.Items.Add ("Title");
479                         item.Selected = true;
480
481                         lvw.SelectedItems.Clear ();
482
483                         Assert.IsTrue (item.Selected, "#A1");
484                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
485                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A3");
486
487                         form.Show ();
488
489                         Assert.IsTrue (item.Selected, "#B1");
490                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#B2");
491                         Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B3");
492
493                         // once listview is created, clear DOES have effect
494                         lvw.SelectedItems.Clear ();
495
496                         Assert.IsFalse (item.Selected, "#C1");
497                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#C2");
498                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#C3");
499                         form.Dispose ();
500                 }
501
502                 [Test]
503                 public void SelectedItemCollectionTest_Contains ()
504                 {
505                         Form form = new Form ();
506                         form.ShowInTaskbar = false;
507                         ListView lvw = new ListView ();
508                         form.Controls.Add (lvw);
509                         ListViewItem item = lvw.Items.Add ("Title");
510                         item.Selected = true;
511                         IList list = (IList) lvw.SelectedItems;
512
513                         Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A1");
514                         Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#A2");
515                         Assert.IsFalse (list.Contains (item), "#A3");
516                         Assert.IsFalse (list.Contains (new ListViewItem ()), "#A4");
517
518                         form.Show ();
519
520                         Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B1");
521                         Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#B2");
522                         Assert.IsTrue (list.Contains (item), "#B3");
523                         Assert.IsFalse (list.Contains (new ListViewItem ()), "#B4");
524                         form.Dispose ();
525                 }
526
527                 [Test]
528                 public void SelectedItemCollectionTest_CopyTo ()
529                 {
530                         Form form = new Form ();
531                         form.ShowInTaskbar = false;
532                         ListView lvw = new ListView ();
533                         form.Controls.Add (lvw);
534                         ListViewItem item = lvw.Items.Add ("Title");
535                         item.Selected = true;
536                         IList list = (IList) lvw.SelectedItems;
537                         Assert.IsNotNull (list, "#A1");
538                         ListViewItem [] items = new ListViewItem [1];
539
540                         lvw.SelectedItems.CopyTo (items, 0);
541                         Assert.IsNull (items [0], "#A2");
542                         lvw.SelectedItems.CopyTo (items, 455);
543
544                         form.Show ();
545
546                         lvw.SelectedItems.CopyTo (items, 0);
547                         Assert.AreSame (item, items [0], "#B1");
548                         try {
549                                 lvw.SelectedItems.CopyTo (items, 455);
550                                 Assert.Fail ("#B2");
551                         } catch (ArgumentException) {
552                         }
553                         form.Dispose ();
554                 }
555
556                 [Test]
557                 public void SelectedItemCollectionTest_Count ()
558                 {
559                         Form form = new Form ();
560                         form.ShowInTaskbar = false;
561                         ListView lvw = new ListView ();
562                         form.Controls.Add (lvw);
563                         ListViewItem item = lvw.Items.Add ("Title");
564                         item.Selected = true;
565
566                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#1");
567                         form.Show ();
568                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#2");
569                         form.Dispose ();
570                 }
571
572                 [Test]
573                 public void SelectedItemCollectionTest_GetEnumerator ()
574                 {
575                         Form form = new Form ();
576                         form.ShowInTaskbar = false;
577                         ListView lvw = new ListView ();
578                         form.Controls.Add (lvw);
579                         ListViewItem item = lvw.Items.Add ("Title");
580                         item.Selected = true;
581
582                         Assert.IsFalse (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#A1");
583
584                         form.Show ();
585
586                         Assert.IsTrue (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#B1");
587
588                         form.Dispose ();
589                 }
590
591                 [Test]
592                 public void SelectedItemCollectionTest_Indexer ()
593                 {
594                         Form form = new Form ();
595                         form.ShowInTaskbar = false;
596                         ListView lvw = new ListView ();
597                         form.Controls.Add (lvw);
598                         ListViewItem item = lvw.Items.Add ("Title");
599                         item.Selected = true;
600                         IList list = (IList) lvw.SelectedItems;
601
602                         try  {
603                                 ListViewItem x = lvw.SelectedItems [0];
604                                 Assert.Fail ("#A1: " + x.ToString ());
605                         } catch (ArgumentOutOfRangeException) {
606                         }
607
608                         try {
609                                 ListViewItem x = list [0] as ListViewItem;
610                                 Assert.Fail ("#A2: " + x.ToString ());
611                         } catch (ArgumentOutOfRangeException) {
612                         }
613
614                         form.Show ();
615
616                         Assert.AreSame (item, lvw.SelectedItems [0], "#B1");
617                         Assert.AreSame (item, list [0], "#B2");
618
619                         form.Dispose ();
620                 }
621
622                 [Test]
623                 public void SelectedItemCollectionTest_IndexOf ()
624                 {
625                         Form form = new Form ();
626                         form.ShowInTaskbar = false;
627                         ListView lvw = new ListView ();
628                         form.Controls.Add (lvw);
629                         ListViewItem item = lvw.Items.Add ("Title");
630                         item.Selected = true;
631                         IList list = (IList) lvw.SelectedItems;
632
633                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (item), "#A1");
634                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#A2");
635                         Assert.AreEqual (-1, list.IndexOf (item), "#A3");
636                         Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#A4");
637
638                         form.Show ();
639
640                         Assert.AreEqual (0, lvw.SelectedItems.IndexOf (item), "#B1");
641                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#B2");
642                         Assert.AreEqual (0, list.IndexOf (item), "#B3");
643                         Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#B4");
644
645                         form.Dispose ();
646                 }
647
648 #if NET_2_0
649                 [Test]
650                 public void SelectedItemCollectionTest_IndexOfKey ()
651                 {
652                         ListView lvw = new ListView ();
653                         ListViewItem lvi1 = new ListViewItem ("A");
654                         lvi1.Name = "A name";
655                         lvi1.Selected = true;
656                         ListViewItem lvi2 = new ListViewItem ("B");
657                         lvi2.Name = "Same name";
658                         lvi2.Selected = false;
659                         ListViewItem lvi3 = new ListViewItem ("C");
660                         lvi3.Name = "Same name";
661                         lvi3.Selected = true;
662                         ListViewItem lvi4 = new ListViewItem ("D");
663                         lvi4.Name = String.Empty;
664                         lvi4.Selected = true;
665                         ListViewItem lvi5 = new ListViewItem ("E");
666                         lvi5.Name = "E name";
667                         lvi5.Selected = false;
668                         lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
669
670                         // Force to create the control
671                         lvw.CreateControl ();
672
673                         Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
674                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey (String.Empty), "#A2");
675                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey (null), "#A3");
676                         Assert.AreEqual (0, lvw.SelectedItems.IndexOfKey ("A name"), "#A4");
677                         Assert.AreEqual (0, lvw.SelectedItems.IndexOfKey ("a NAME"), "#A5");
678                         Assert.AreEqual (1, lvw.SelectedItems.IndexOfKey ("Same name"), "#A6");
679                         Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey ("E name"), "#A7");
680
681                         ListViewItem lvi6 = new ListViewItem ("F");
682                         lvw.Items.Add (lvi6);
683                         lvi6.Selected = true;
684                         lvi6.Name = "F name";
685
686                         Assert.AreEqual (4, lvw.SelectedItems.Count, "#B1");
687                         Assert.AreEqual (3, lvw.SelectedItems.IndexOfKey ("F name"), "#B2");
688                 }
689
690                 [Test]
691                 public void SelectedItemCollectionTest_Indexer2 ()
692                 {
693                         ListView lvw = new ListView ();
694                         ListViewItem lvi1 = new ListViewItem ("A");
695                         lvi1.Name = "A name";
696                         lvi1.Selected = true;
697                         ListViewItem lvi2 = new ListViewItem ("B");
698                         lvi2.Name = "Same name";
699                         lvi2.Selected = false;
700                         ListViewItem lvi3 = new ListViewItem ("C");
701                         lvi3.Name = "Same name";
702                         lvi3.Selected = true;
703                         ListViewItem lvi4 = new ListViewItem ("D");
704                         lvi4.Name = String.Empty;
705                         lvi4.Selected = true;
706                         ListViewItem lvi5 = new ListViewItem ("E");
707                         lvi5.Name = "E name";
708                         lvi5.Selected = false;
709                         lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
710
711                         // Force to create the control
712                         lvw.CreateControl ();
713
714                         Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
715                         Assert.AreEqual (null, lvw.SelectedItems [String.Empty], "#A2");
716                         Assert.AreEqual (null, lvw.SelectedItems [null], "#A3");
717                         Assert.AreEqual (lvi1, lvw.SelectedItems ["A name"], "#A4");
718                         Assert.AreEqual (lvi1, lvw.SelectedItems ["a NAME"], "#A5");
719                         Assert.AreEqual (lvi3, lvw.SelectedItems ["Same name"], "#A6");
720                         Assert.AreEqual (null, lvw.SelectedItems ["E name"], "#A7");
721
722                         ListViewItem lvi6 = new ListViewItem ("F");
723                         lvw.Items.Add (lvi6);
724                         lvi6.Selected = true;
725                         lvi6.Name = "F name";
726
727                         Assert.AreEqual (4, lvw.SelectedItems.Count, "#B1");
728                         Assert.AreEqual (lvi6, lvw.SelectedItems ["F name"], "#B2");
729                 }
730 #endif
731
732                 [Test]
733                 public void SelectedItemCollectionTest_Order ()
734                 {
735                         Form form = new Form ();
736                         form.ShowInTaskbar = false;
737                         ListView lvw = new ListView ();
738                         lvw.MultiSelect = true;
739                         form.Controls.Add (lvw);
740                         ListViewItem itemA = lvw.Items.Add ("A");
741                         itemA.Selected = true;
742                         ListViewItem itemB = lvw.Items.Add ("B");
743                         itemB.Selected = true;
744                         ListViewItem itemC = lvw.Items.Add ("C");
745                         itemC.Selected = true;
746
747                         form.Show ();
748
749                         Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
750                         Assert.AreSame (itemA, lvw.SelectedItems [0], "#A2");
751                         Assert.AreSame (itemB, lvw.SelectedItems [1], "#A3");
752                         Assert.AreSame (itemC, lvw.SelectedItems [2], "#A3");
753
754                         itemB.Selected = false;
755
756                         Assert.AreEqual (2, lvw.SelectedItems.Count, "#B1");
757                         Assert.AreSame (itemA, lvw.SelectedItems [0], "#B2");
758                         Assert.AreSame (itemC, lvw.SelectedItems [1], "#B3");
759
760                         itemB.Selected = true;
761
762                         Assert.AreEqual (3, lvw.SelectedItems.Count, "#C1");
763                         Assert.AreSame (itemA, lvw.SelectedItems [0], "#C2");
764                         Assert.AreSame (itemB, lvw.SelectedItems [1], "#C3");
765                         Assert.AreSame (itemC, lvw.SelectedItems [2], "#C4");
766
767                         lvw.Sorting = SortOrder.Descending;
768
769                         Assert.AreEqual (3, lvw.SelectedItems.Count, "#D1");
770                         Assert.AreSame (itemC, lvw.SelectedItems [0], "#D2");
771                         Assert.AreSame (itemB, lvw.SelectedItems [1], "#D3");
772                         Assert.AreSame (itemA, lvw.SelectedItems [2], "#D4");
773
774                         form.Dispose ();
775                 }
776
777                 /*
778                         ListViewItemCollection
779                 */
780
781                 [Test]
782                 public void ListViewItemCollectionTest_Add ()
783                 {
784                         ListView lvw = new ListView ();
785                         ListViewItem item = new ListViewItem ("Title");
786                         ListViewItem newItem = lvw.Items.Add (item);
787                         Assert.AreSame (newItem, item, "#A1");
788                         Assert.AreEqual (0, item.Index, "#A2");
789                         Assert.AreSame (item, lvw.Items [0], "#A3");
790                         Assert.AreSame (lvw, item.ListView, "#A4");
791
792                         newItem = lvw.Items.Add ("A title");
793                         Assert.AreEqual ("A title", newItem.Text, "#B1");
794                         Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
795                         Assert.AreEqual (1, newItem.Index, "#B3");
796                         Assert.AreSame (newItem, lvw.Items [1], "#B4");
797                         Assert.AreSame (lvw, newItem.ListView, "#B5");
798                         Assert.AreEqual (0, item.Index, "#B6");
799                         Assert.AreSame (item, lvw.Items [0], "#B7");
800
801                         newItem = lvw.Items.Add ("A title", 4);
802                         Assert.AreEqual ("A title", newItem.Text, "#C1");
803                         Assert.AreEqual (4, newItem.ImageIndex, "#C2");
804                         Assert.AreEqual (2, newItem.Index, "#C3");
805                         Assert.AreSame (newItem, lvw.Items [2], "#C4");
806                         Assert.AreSame (lvw, newItem.ListView, "#C5");
807                         Assert.AreEqual (0, item.Index, "#C6");
808                         Assert.AreSame (item, lvw.Items [0], "#C7");
809                 }
810
811                 [Test]
812                 [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
813                 public void ListViewItemCollectionTest_Add_ExistingItem ()
814                 {
815                         ListView lvw = new ListView ();
816                         ListViewItem itemA = lvw.Items.Add ("A");
817                         lvw.Items.Add (itemA);
818                 }
819
820                 [Test]
821                 [ExpectedException (typeof (ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
822                 public void ListViewItemCollectionTest_Add_OwnedItem ()
823                 {
824                         ListView lv1 = new ListView ();
825                         ListView lv2 = new ListView ();
826                         ListViewItem item = lv1.Items.Add ("A");
827                         lv2.Items.Add (item);
828                 }
829
830                 [Test]
831                 public void ListViewItemCollectionTest_Add_Junk ()
832                 {
833                         ListView lv1 = new ListView ();
834
835                         ListViewItem item4 = lv1.Items.Add("Item4", 4);
836                         Assert.AreEqual(item4, lv1.Items[0], "#D1");
837 #if NET_2_0
838                         Assert.AreEqual(string.Empty, lv1.Items[0].Name, "#D2");
839 #endif
840                         Assert.AreEqual("Item4", lv1.Items[0].Text, "#D3");
841                         Assert.AreEqual(4, lv1.Items[0].ImageIndex, "#D4");
842
843                         string text = null;
844                         ListViewItem item5 = lv1.Items.Add(text);
845                         Assert.AreEqual(item5, lv1.Items[1], "#E1");
846 #if NET_2_0
847                         Assert.AreEqual(string.Empty, lv1.Items[1].Name, "#E2");
848 #endif
849                         Assert.AreEqual(string.Empty, lv1.Items[1].Text, "#E3");
850
851                         ListViewItem item6 = lv1.Items.Add(null, 5);
852                         Assert.AreEqual(item6, lv1.Items[2], "#F1");
853 #if NET_2_0
854                         Assert.AreEqual(string.Empty, lv1.Items[2].Name, "#F2");
855 #endif
856                         Assert.AreEqual(string.Empty, lv1.Items[2].Text, "#F3");
857                         Assert.AreEqual(5, lv1.Items[2].ImageIndex, "#F4");
858 #if NET_2_0
859                         ListViewItem item1 = lv1.Items.Add("ItemKey1", "Item1", 1);
860                         Assert.AreEqual(item1, lv1.Items[3], "#A1");
861                         Assert.AreEqual("ItemKey1", lv1.Items[3].Name, "#A2");
862                         Assert.AreEqual("Item1", lv1.Items[3].Text, "#A3");
863                         Assert.AreEqual(1, lv1.Items[3].ImageIndex, "#A4");
864
865                         ListViewItem item2 = lv1.Items.Add("ItemKey2", "Item2", "Image2");
866                         Assert.AreEqual(item2, lv1.Items[4], "#B1");
867                         Assert.AreEqual("ItemKey2", lv1.Items[4].Name, "#B2");
868                         Assert.AreEqual("Item2", lv1.Items[4].Text, "#B3");
869                         Assert.AreEqual("Image2", lv1.Items[4].ImageKey, "#B4");
870
871                         ListViewItem item3 = lv1.Items.Add("Item3", "Image3");
872                         Assert.AreEqual(item3, lv1.Items[5], "#C1");
873                         Assert.AreEqual(string.Empty, lv1.Items[5].Name, "#C2");
874                         Assert.AreEqual("Item3", lv1.Items[5].Text, "#C3");
875                         Assert.AreEqual("Image3", lv1.Items[5].ImageKey, "#C4");
876
877                         ListViewItem item7 = lv1.Items.Add(null, "Item6", 6);
878                         Assert.AreEqual(item7, lv1.Items[6], "#G1");
879                         Assert.AreEqual(string.Empty, lv1.Items[6].Name, "#G2");
880                         Assert.AreEqual("Item6", lv1.Items[6].Text, "#G3");
881                         Assert.AreEqual(6, lv1.Items[6].ImageIndex, "#G4");
882
883                         ListViewItem item8 = lv1.Items.Add("ItemKey7", null, 7);
884                         Assert.AreEqual(item8, lv1.Items[7], "#H1");
885                         Assert.AreEqual("ItemKey7", lv1.Items[7].Name, "#H2");
886                         Assert.AreEqual(string.Empty, lv1.Items[7].Text, "#H3");
887                         Assert.AreEqual(7, lv1.Items[7].ImageIndex, "#H4");
888
889                         ListViewItem item9 = lv1.Items.Add("ItemKey8", "Item8", null);
890                         Assert.AreEqual(item9, lv1.Items[8], "#I1");
891                         Assert.AreEqual("ItemKey8", lv1.Items[8].Name, "#I2");
892                         Assert.AreEqual("Item8", lv1.Items[8].Text, "#I3");
893                         Assert.AreEqual(string.Empty, lv1.Items[8].ImageKey, "#I4");
894 #endif
895                 }
896
897                 [Test]
898                 public void ListViewItemCollectionTest_AddRange ()
899                 {
900                         ListView lv1 = new ListView ();
901                         ListViewItem item1 = new ListViewItem ("Item1");
902                         ListViewItem item2 = new ListViewItem ("Item2");
903                         ListViewItem item3 = new ListViewItem ("Item3");
904                         lv1.Items.AddRange (new ListViewItem[] { item1, item2, item3 });
905
906                         Assert.AreSame (item1, lv1.Items[0], "#A1");
907                         Assert.AreEqual (0, item1.Index, "#A2");
908                         Assert.AreSame (lv1, item1.ListView, "#A3");
909
910                         Assert.AreSame (item2, lv1.Items[1], "#B1");
911                         Assert.AreEqual (1, item2.Index, "#B2");
912                         Assert.AreSame (lv1, item2.ListView, "#B3");
913
914                         Assert.AreSame (item3, lv1.Items[2], "#C1");
915                         Assert.AreEqual (2, item3.Index, "#C2");
916                         Assert.AreSame (lv1, item3.ListView, "#C3");
917                 }
918
919                 [Test]
920                 public void ListViewItemCollectionTest_AddRange_Count ()
921                 {
922                         ListView lv1 = new ListView ();
923                         ListViewItem item1 = new ListViewItem ("Item1");
924                         ListViewItem item2 = new ListViewItem ("Item2");
925                         ListViewItem item3 = new ListViewItem ("Item3");
926
927                         lv1.Items.Add ("Item4");
928                         Assert.AreEqual (1, lv1.Items.Count, "#A1");
929                         lv1.Items.AddRange (new ListViewItem[] { item1, item2, item3 });
930                         Assert.AreEqual (4, lv1.Items.Count, "#A1");
931                 }
932
933                 [Test]
934                 [ExpectedException(typeof(ArgumentNullException))]
935                 public void ListViewItemCollectionTest_AddRange_NullException ()
936                 {
937                         ListView lv1 = new ListView ();
938                         ListViewItem[] value = null;
939                         lv1.Items.AddRange (value);
940                 }
941
942                 [Test]
943                 [ExpectedException(typeof(ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
944                 public void ListViewItemCollectionTest_AddRange_OwnedItem ()
945                 {
946                         //MSDN told us, we can use this method to reuse items from a different ListView control. That is not true.
947                         ListView lv1 = new ListView ();
948                         ListView lv2 = new ListView ();
949                         ListViewItem a = lv1.Items.Add ("Item1");
950                         ListViewItem b = lv1.Items.Add ("Item2");
951
952                         lv2.Items.AddRange (new ListViewItem[] { a, b });
953                 }
954
955                 [Test]
956                 [ExpectedException(typeof(ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
957                 public void ListViewItemCollectionTest_AddRange_ExistingItem ()
958                 {
959                         ListView lv1 = new ListView ();
960                         ListViewItem item1 = lv1.Items.Add ("Item1");
961                         lv1.Items.Add (item1);
962                 }
963
964                 [Test]
965                 public void ListViewItemCollectionTest_Clear ()
966                 {
967                         ListView lvw = new ListView ();
968                         ListViewItem itemA = lvw.Items.Add ("A");
969                         ListViewItem itemB = lvw.Items.Add ("B");
970
971                         Assert.AreEqual (2, lvw.Items.Count, "#A1");
972                         Assert.AreSame (lvw, itemA.ListView, "#A2");
973                         Assert.AreSame (lvw, itemB.ListView, "#A3");
974
975                         lvw.Items.Clear ();
976
977                         Assert.AreEqual (0, lvw.Items.Count, "#B1");
978                         Assert.IsNull (itemA.ListView, "#B2");
979                         Assert.IsNull (itemB.ListView, "#B3");
980                 }
981
982                 [Test]
983                 public void ListViewItemCollectionTest_Insert ()
984                 {
985                         ListView lvw = new ListView ();
986                         ListViewItem item = new ListViewItem ("Title");
987                         ListViewItem newItem = lvw.Items.Insert (0, item);
988                         Assert.AreSame (newItem, item, "#A1");
989                         Assert.AreEqual (-1, newItem.ImageIndex, "#A2");
990                         Assert.AreSame (newItem, lvw.Items [0], "#A3");
991                         Assert.AreSame (lvw, newItem.ListView, "#A4");
992
993                         newItem = lvw.Items.Insert (1, "A title");
994                         Assert.AreEqual ("A title", newItem.Text, "#B1");
995                         Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
996                         Assert.AreEqual (1, newItem.Index, "#B3");
997                         Assert.AreSame (newItem, lvw.Items [1], "#B4");
998                         Assert.AreSame (lvw, newItem.ListView, "#B5");
999                         Assert.AreEqual (0, item.Index, "#B6");
1000                         Assert.AreSame (item, lvw.Items [0], "#B7");
1001
1002                         newItem = lvw.Items.Insert (0, "Other title");
1003                         Assert.AreEqual ("Other title", newItem.Text, "#C1");
1004                         Assert.AreEqual (-1, newItem.ImageIndex, "#C2");
1005                         Assert.AreEqual (0, newItem.Index, "#C3");
1006                         Assert.AreSame (newItem, lvw.Items [0], "#C4");
1007                         Assert.AreSame (lvw, newItem.ListView, "#C5");
1008                         Assert.AreEqual (1, item.Index, "#C6");
1009                         Assert.AreSame (item, lvw.Items [1], "#C7");
1010
1011                         newItem = lvw.Items.Insert (3, "Some title", 4);
1012                         Assert.AreEqual ("Some title", newItem.Text, "#D1");
1013                         Assert.AreEqual (4, newItem.ImageIndex, "#D2");
1014                         Assert.AreEqual (3, newItem.Index, "#D3");
1015                         Assert.AreSame (newItem, lvw.Items [3], "#D4");
1016                         Assert.AreSame (lvw, newItem.ListView, "#D5");
1017                         Assert.AreEqual (1, item.Index, "#D6");
1018                         Assert.AreSame (item, lvw.Items [1], "#D7");
1019
1020                         newItem = lvw.Items.Insert (0, "No title", 4);
1021                         Assert.AreEqual ("No title", newItem.Text, "#E1");
1022                         Assert.AreEqual (4, newItem.ImageIndex, "#E2");
1023                         Assert.AreEqual (0, newItem.Index, "#E3");
1024                         Assert.AreSame (newItem, lvw.Items [0], "#E4");
1025                         Assert.AreSame (lvw, newItem.ListView, "#E5");
1026                         Assert.AreEqual (2, item.Index, "#E6");
1027                         Assert.AreSame (item, lvw.Items [2], "#E7");
1028                 }
1029
1030                 [Test]
1031                 [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
1032                 public void ListViewItemCollectionTest_Insert_ExistingItem ()
1033                 {
1034                         ListView lvw = new ListView ();
1035                         ListViewItem itemA = lvw.Items.Add ("A");
1036                         lvw.Items.Insert (0, itemA);
1037                 }
1038
1039                 [Test]
1040                 [ExpectedException (typeof (ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
1041                 public void ListViewItemCollectionTest_Insert_OwnedItem ()
1042                 {
1043                         ListView lv1 = new ListView ();
1044                         ListView lv2 = new ListView ();
1045                         ListViewItem item = lv1.Items.Add ("A");
1046                         lv2.Items.Insert (0, item);
1047                 }
1048
1049                 [Test]
1050                 [ExpectedException(typeof(ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
1051                 public void ListViewItemCollectionTest_Indexer_OwnedItem ()
1052                 {
1053                         ListView lv1 = new ListView ();
1054                         ListView lv2 = new ListView ();
1055                         ListViewItem item = lv1.Items.Add ("A");
1056
1057                         lv2.Items.Add ("Dummy");
1058                         lv2.Items[0] = item;
1059                 }
1060
1061                 [Test]
1062                 public void ListViewItemCollectionTest_Remove ()
1063                 {
1064                         Form form = new Form ();
1065                         form.ShowInTaskbar = false;
1066                         ListView lvw = new ListView ();
1067                         form.Controls.Add (lvw);
1068                         lvw.MultiSelect = true;
1069                         lvw.CheckBoxes = true;
1070
1071                         form.Show ();
1072
1073                         ListViewItem itemA = lvw.Items.Add ("A");
1074                         ListViewItem itemB = lvw.Items.Add ("B");
1075                         lvw.Items.Add ("C");
1076                         ListViewItem itemD = lvw.Items.Add ("D");
1077
1078                         Assert.AreEqual (4, lvw.Items.Count, "#A1");
1079                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
1080                         Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
1081
1082                         itemB.Checked = true;
1083                         itemD.Checked = true;
1084
1085                         Assert.AreEqual (4, lvw.Items.Count, "#B1");
1086                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
1087                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
1088                         Assert.AreSame (itemB, lvw.CheckedItems [0], "#B4");
1089                         Assert.AreSame (itemD, lvw.CheckedItems [1], "#B5");
1090
1091                         itemD.Selected = true;
1092
1093                         Assert.AreEqual (4, lvw.Items.Count, "#C1");
1094                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
1095                         Assert.AreSame (itemD, lvw.SelectedItems [0], "#C3");
1096                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
1097                         Assert.AreSame (itemB, lvw.CheckedItems [0], "#C5");
1098                         Assert.AreSame (itemD, lvw.CheckedItems [1], "#C6");
1099
1100                         lvw.Items.Remove (itemB);
1101
1102                         Assert.AreEqual (3, lvw.Items.Count, "#D1");
1103                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
1104                         Assert.AreSame (itemD, lvw.SelectedItems [0], "#D3");
1105                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
1106                         Assert.AreSame (itemD, lvw.CheckedItems [0], "#D5");
1107
1108                         lvw.Items.Remove (itemA);
1109
1110                         Assert.AreEqual (2, lvw.Items.Count, "#E1");
1111                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
1112                         Assert.AreEqual (itemD, lvw.SelectedItems [0], "#E3");
1113                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
1114                         Assert.AreEqual (itemD, lvw.CheckedItems [0], "#E5");
1115
1116                         Assert.IsNull (itemA.ListView, "#F1");
1117                         Assert.IsNull (itemB.ListView, "#F2");
1118                         Assert.AreSame (lvw, itemD.ListView, "#F3");
1119
1120                         form.Dispose ();
1121                 }
1122
1123                 [Test]
1124                 public void ListViewItemCollectionTest_RemoveAt ()
1125                 {
1126                         Form form = new Form ();
1127                         form.ShowInTaskbar = false;
1128                         ListView lvw = new ListView ();
1129                         form.Controls.Add (lvw);
1130                         lvw.MultiSelect = true;
1131                         lvw.CheckBoxes = true;
1132
1133                         ListViewItem itemA = lvw.Items.Add ("A");
1134                         ListViewItem itemB = lvw.Items.Add ("B");
1135                         ListViewItem itemC = lvw.Items.Add ("C");
1136                         ListViewItem itemD = lvw.Items.Add ("D");
1137
1138                         form.Show ();
1139
1140                         Assert.AreEqual (4, lvw.Items.Count, "#A1");
1141                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
1142                         Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
1143
1144                         lvw.Items [1].Checked = true;
1145                         lvw.Items [3].Checked = true;
1146
1147                         Assert.AreEqual (4, lvw.Items.Count, "#B1");
1148                         Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
1149                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
1150                         Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#B4");
1151                         Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#B5");
1152
1153                         lvw.Items [3].Selected = true;
1154
1155                         Assert.AreEqual (4, lvw.Items.Count, "#C1");
1156                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
1157                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#C3");
1158                         Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
1159                         Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#C5");
1160                         Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#C6");
1161
1162                         lvw.Items.RemoveAt (1);
1163
1164                         Assert.AreEqual (3, lvw.Items.Count, "#D1");
1165                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
1166                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#D3");
1167                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
1168                         Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#D5");
1169
1170                         lvw.Items.RemoveAt (0);
1171
1172                         Assert.AreEqual (2, lvw.Items.Count, "#E1");
1173                         Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
1174                         Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#E3");
1175                         Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
1176                         Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#E5");
1177
1178                         Assert.IsNull (itemA.ListView, "#F1");
1179                         Assert.IsNull (itemB.ListView, "#F2");
1180                         Assert.AreSame (lvw, itemC.ListView, "#F3");
1181                         Assert.AreSame (lvw, itemD.ListView, "#F4");
1182
1183                         form.Dispose ();
1184                 }
1185
1186 #if NET_2_0
1187                 [Test]
1188                 public void ListViewItemCollectionTest_RemoveByKey ()
1189                 {
1190                         ListView lvw = new ListView ();
1191                         ListViewItem lvi1 = new ListViewItem ("A");
1192                         lvi1.Name = "A name";
1193                         ListViewItem lvi2 = new ListViewItem ("B");
1194                         lvi2.Name = "B name";
1195                         ListViewItem lvi3 = new ListViewItem ("C");
1196                         lvi3.Name = "Same name";
1197                         ListViewItem lvi4 = new ListViewItem ("D");
1198                         lvi4.Name = "Same name";
1199                         ListViewItem lvi5 = new ListViewItem ("E");
1200                         lvi5.Name = String.Empty;
1201                         lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
1202
1203                         Assert.AreEqual (5, lvw.Items.Count, "#A1");
1204
1205                         lvw.Items.RemoveByKey ("B name");
1206                         Assert.AreEqual (4, lvw.Items.Count, "#B1");
1207                         Assert.AreSame (lvi1, lvw.Items [0], "#B2");
1208                         Assert.AreSame (lvi3, lvw.Items [1], "#B3");
1209                         Assert.AreSame (lvi4, lvw.Items [2], "#B4");
1210                         Assert.AreSame (lvi5, lvw.Items [3], "#B5");
1211
1212                         lvw.Items.RemoveByKey ("Same name");
1213                         Assert.AreEqual (3, lvw.Items.Count, "#C1");
1214                         Assert.AreSame (lvi1, lvw.Items [0], "#C2");
1215                         Assert.AreSame (lvi4, lvw.Items [1], "#C3");
1216                         Assert.AreSame (lvi5, lvw.Items [2], "#C4");
1217
1218                         lvw.Items.RemoveByKey ("a NAME");
1219                         Assert.AreEqual (2, lvw.Items.Count, "#D1");
1220                         Assert.AreSame (lvi4, lvw.Items [0], "#D2");
1221                         Assert.AreSame (lvi5, lvw.Items [1], "#D3");
1222
1223                         lvw.Items.RemoveByKey (String.Empty);
1224                         Assert.AreEqual (2, lvw.Items.Count, "#E1");
1225                         Assert.AreSame (lvi4, lvw.Items [0], "#E2");
1226                         Assert.AreSame (lvi5, lvw.Items [1], "#E3");
1227
1228                         Assert.IsNull (lvi1.ListView, "#F1");
1229                         Assert.IsNull (lvi2.ListView, "#F2");
1230                         Assert.IsNull (lvi3.ListView, "#F3");
1231                         Assert.AreSame (lvw, lvi4.ListView, "#F4");
1232                         Assert.AreSame (lvw, lvi5.ListView, "#F5");
1233                 }
1234
1235                 [Test]
1236                 public void ListViewItemCollectionTest_IndexOfKey ()
1237                 {
1238                         ListView lvw = new ListView ();
1239                         ListViewItem lvi1 = new ListViewItem ("A");
1240                         lvi1.Name = "A name";
1241                         ListViewItem lvi2 = new ListViewItem ("B");
1242                         lvi2.Name = "Same name";
1243                         ListViewItem lvi3 = new ListViewItem ("C");
1244                         lvi3.Name = "Same name";
1245                         ListViewItem lvi4 = new ListViewItem ("D");
1246                         lvi4.Name = String.Empty;
1247                         lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
1248
1249                         Assert.AreEqual (4, lvw.Items.Count, "#A1");
1250                         Assert.AreEqual (-1, lvw.Items.IndexOfKey (String.Empty), "#A2");
1251                         Assert.AreEqual (-1, lvw.Items.IndexOfKey (null), "#A3");
1252                         Assert.AreEqual (0, lvw.Items.IndexOfKey ("A name"), "#A4");
1253                         Assert.AreEqual (0, lvw.Items.IndexOfKey ("a NAME"), "#A5");
1254                         Assert.AreEqual (1, lvw.Items.IndexOfKey ("Same name"), "#A6");
1255
1256                         ListViewItem lvi5 = new ListViewItem ("E");
1257                         lvw.Items.Add (lvi5);
1258                         lvi5.Name = "E name";
1259
1260                         Assert.AreEqual (4, lvw.Items.IndexOfKey ("E name"), "#B1");
1261                 }
1262
1263                 [Test]
1264                 public void ListViewItemCollectionTest_Indexer ()
1265                 {
1266                         ListView lvw = new ListView ();
1267                         ListViewItem lvi1 = new ListViewItem ("A");
1268                         lvi1.Name = "A name";
1269                         ListViewItem lvi2 = new ListViewItem ("B");
1270                         lvi2.Name = "Same name";
1271                         ListViewItem lvi3 = new ListViewItem ("C");
1272                         lvi3.Name = "Same name";
1273                         ListViewItem lvi4 = new ListViewItem ("D");
1274                         lvi4.Name = String.Empty;
1275                         lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
1276
1277                         Assert.AreEqual (4, lvw.Items.Count, "#A1");
1278                         Assert.AreEqual (null, lvw.Items [String.Empty], "#A2");
1279                         Assert.AreEqual (null, lvw.Items [null], "#A3");
1280                         Assert.AreSame (lvi1, lvw.Items ["A name"], "#A4");
1281                         Assert.AreSame (lvi1, lvw.Items ["a NAME"], "#A5");
1282                         Assert.AreSame (lvi2, lvw.Items ["Same name"], "#A6");
1283
1284                         ListViewItem lvi5 = new ListViewItem ("E");
1285                         lvw.Items.Add (lvi5);
1286                         lvi5.Name = "E name";
1287
1288                         Assert.AreSame (lvi5, lvw.Items ["E name"], "#B1");
1289                 }
1290
1291                 [Test]
1292                 public void ListViewItemCollectionTest_ContainsKey ()
1293                 {
1294                         ListView lvw = new ListView();
1295                         ListViewItem lvi1 = new ListViewItem("A");
1296                         lvi1.Name = "A name";
1297                         ListViewItem lvi2 = new ListViewItem("B");
1298                         lvi2.Name = "B name";
1299                         ListViewItem lvi3 = new ListViewItem("D");
1300                         lvi3.Name = String.Empty;
1301                         lvw.Items.AddRange(new ListViewItem[] { lvi1, lvi2, lvi3 });
1302
1303                         Assert.AreEqual(3, lvw.Items.Count, "#A1");
1304                         Assert.AreEqual(false, lvw.Items.ContainsKey (String.Empty), "#A2");
1305                         Assert.AreEqual(false, lvw.Items.ContainsKey (null), "#A3");
1306                         Assert.AreEqual(true, lvw.Items.ContainsKey ("A name"), "#A4");
1307                         Assert.AreEqual(true, lvw.Items.ContainsKey ("a NAME"), "#A5");
1308                         Assert.AreEqual(true, lvw.Items.ContainsKey ("B name"), "#A6");
1309
1310                         ListViewItem lvi5 = new ListViewItem("E");
1311                         lvw.Items.Add(lvi5);
1312                         lvi5.Name = "E name";
1313
1314                         Assert.AreEqual(true, lvw.Items.ContainsKey ("E name"), "#B1");
1315                 }
1316
1317                 [Test]
1318                 public void ListViewItemCollectionTest_Find ()
1319                 {
1320                         ListView lvw = new ListView ();
1321                         ListViewItem lvi1 = new ListViewItem ("A");
1322                         lvi1.Name = "A name";
1323                         ListViewItem lvi2 = new ListViewItem ("B");
1324                         lvi2.Name = "a NAME";
1325                         ListViewItem lvi3 = new ListViewItem ("C");
1326                         lvi3.Name = "a NAME";
1327                         ListViewItem lvi4 = new ListViewItem ("D");
1328                         lvi4.Name = String.Empty;
1329                         ListViewItem lvi5 = new ListViewItem ("F");
1330                         lvi5.Name = String.Empty;
1331                         lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
1332
1333                         Assert.AreEqual (5, lvw.Items.Count, "#A1");
1334
1335                         ListViewItem [] items = lvw.Items.Find ("A name", false);
1336                         Assert.AreEqual (3, items.Length, "#B11");
1337                         Assert.AreSame (lvi1, items [0], "#B2");
1338                         Assert.AreSame (lvi2, items [1], "#B3");
1339                         Assert.AreSame (lvi3, items [2], "#B4");
1340
1341                         items = lvw.Items.Find (String.Empty, false);
1342                         Assert.AreEqual (2, items.Length, "#B1");
1343                         Assert.AreSame (lvi4, items [0], "#B2");
1344                         Assert.AreSame (lvi5, items [1], "#B3");
1345
1346                         Assert.AreEqual (0, lvw.Items.Find (null, false).Length, "#C1");
1347                 }
1348
1349                 [Test]
1350                 public void ListViewSubItemCollectionTest_ContainsKey ()
1351                 {
1352                         ListViewItem lvi = new ListViewItem ("A");
1353                         ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
1354                         si1.Name = "A name";
1355                         ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
1356                         si2.Name = "B name";
1357                         ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
1358                         si3.Name = String.Empty;
1359                         lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3 });
1360
1361                         Assert.AreEqual (4, lvi.SubItems.Count, "#A1");
1362                         Assert.AreEqual (false, lvi.SubItems.ContainsKey (String.Empty), "#A2");
1363                         Assert.AreEqual (false, lvi.SubItems.ContainsKey (null), "#A3");
1364                         Assert.AreEqual (true, lvi.SubItems.ContainsKey ("A name"), "#A4");
1365                         Assert.AreEqual (true, lvi.SubItems.ContainsKey ("a NAME"), "#A5");
1366                         Assert.AreEqual (true, lvi.SubItems.ContainsKey ("B name"), "#A6");
1367
1368                         ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
1369                         lvi.SubItems.Add (si5);
1370                         si5.Name = "E name";
1371
1372                         Assert.AreEqual (true, lvi.SubItems.ContainsKey ("E name"), "#B1");
1373                 }
1374
1375                 [Test]
1376                 public void ListViewSubItemCollectionTest_IndexOfKey ()
1377                 {
1378                         ListViewItem lvi = new ListViewItem ();
1379                         ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
1380                         si1.Name = "A name";
1381                         ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
1382                         si2.Name = "Same name";
1383                         ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
1384                         si3.Name = "Same name";
1385                         ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
1386                         si4.Name = String.Empty;
1387                         lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4 });
1388
1389                         Assert.AreEqual (5, lvi.SubItems.Count, "#A1");
1390                         Assert.AreEqual (-1, lvi.SubItems.IndexOfKey (String.Empty), "#A2");
1391                         Assert.AreEqual (-1, lvi.SubItems.IndexOfKey (null), "#A3");
1392                         Assert.AreEqual (1, lvi.SubItems.IndexOfKey ("A name"), "#A4");
1393                         Assert.AreEqual (1, lvi.SubItems.IndexOfKey ("a NAME"), "#A5");
1394                         Assert.AreEqual (2, lvi.SubItems.IndexOfKey ("Same name"), "#A6");
1395
1396                         ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
1397                         lvi.SubItems.Add (si5);
1398                         si5.Name = "E name";
1399
1400                         Assert.AreEqual (5, lvi.SubItems.IndexOfKey ("E name"), "#B1");
1401                 }
1402
1403                 [Test]
1404                 public void ListViewSubItemCollectionTest_RemoveByKey ()
1405                 {
1406                         ListViewItem lvi = new ListViewItem ();
1407                         ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
1408                         si1.Name = "A name";
1409                         ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
1410                         si2.Name = "B name";
1411                         ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
1412                         si3.Name = "Same name";
1413                         ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
1414                         si4.Name = "Same name";
1415                         ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
1416                         si5.Name = String.Empty;
1417                         lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4, si5 });
1418
1419                         Assert.AreEqual (6, lvi.SubItems.Count, "#A1");
1420
1421                         lvi.SubItems.RemoveByKey ("B name");
1422                         Assert.AreEqual (5, lvi.SubItems.Count, "#B1");
1423                         Assert.AreSame (si1, lvi.SubItems [1], "#B2");
1424                         Assert.AreSame (si3, lvi.SubItems [2], "#B3");
1425                         Assert.AreSame (si4, lvi.SubItems [3], "#B4");
1426                         Assert.AreSame (si5, lvi.SubItems [4], "#B5");
1427
1428                         lvi.SubItems.RemoveByKey ("Same name");
1429                         Assert.AreEqual (4, lvi.SubItems.Count, "#C1");
1430                         Assert.AreSame (si1, lvi.SubItems [1], "#C2");
1431                         Assert.AreSame (si4, lvi.SubItems [2], "#C3");
1432                         Assert.AreSame (si5, lvi.SubItems [3], "#C4");
1433
1434                         lvi.SubItems.RemoveByKey ("a NAME");
1435                         Assert.AreEqual (3, lvi.SubItems.Count, "#D1");
1436                         Assert.AreSame (si4, lvi.SubItems [1], "#D2");
1437                         Assert.AreSame (si5, lvi.SubItems [2], "#D3");
1438
1439                         lvi.SubItems.RemoveByKey (String.Empty);
1440                         Assert.AreEqual (3, lvi.SubItems.Count, "#E1");
1441                         Assert.AreSame (si4, lvi.SubItems [1], "#E2");
1442                         Assert.AreSame (si5, lvi.SubItems [2], "#E3");
1443                 }
1444
1445                 [Test]
1446                 public void ListViewSubItemCollectionTest_Indexer ()
1447                 {
1448                         ListViewItem lvi = new ListViewItem ();
1449                         ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
1450                         si1.Name = "A name";
1451                         ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
1452                         si2.Name = "Same name";
1453                         ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
1454                         si3.Name = "Same name";
1455                         ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
1456                         si4.Name = String.Empty;
1457                         lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4 });
1458
1459                         Assert.AreEqual (5, lvi.SubItems.Count, "#A1");
1460                         Assert.AreEqual (null, lvi.SubItems [String.Empty], "#A2");
1461                         Assert.AreEqual (null, lvi.SubItems [null], "#A3");
1462                         Assert.AreEqual (si1, lvi.SubItems ["A name"], "#A4");
1463                         Assert.AreEqual (si1, lvi.SubItems ["a NAME"], "#A5");
1464                         Assert.AreEqual (si2, lvi.SubItems ["Same name"], "#A6");
1465
1466                         ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
1467                         lvi.SubItems.Add (si5);
1468                         si5.Name = "E name";
1469
1470                         Assert.AreEqual (si5, lvi.SubItems ["E name"], "#B1");
1471                 }
1472
1473 #endif
1474
1475         }
1476 }