2007-03-28 Igor Zelmanovich <igorz@mainsoft.com>
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ListViewCollectionsTest.cs
index c47184bf6cbfd1543c56f2de6fd329ba23991bf7..a65fa32da27b564e1f97c5924fa5d6fb0cc4e3ec 100644 (file)
@@ -56,33 +56,105 @@ namespace MonoTests.System.Windows.Forms
                public void ColumnHeaderCollectionTest_AddTest ()
                {
                        ListView listview = new ListView ();
+                       ColumnHeader colA = new ColumnHeader ();
+                       ColumnHeader colB = new ColumnHeader ();
 
                        // Duplicated elements with same text added
-                       listview.Columns.Add (new ColumnHeader ());
-                       listview.Columns.Add (new ColumnHeader ());
-                       Assert.AreEqual (2, listview.Columns.Count, "ColumnHeaderCollectionTest_AddTest#1");
-                       Assert.AreEqual ("ColumnHeader", listview.Columns[0].Text, "ColumnHeaderCollectionTest_AddTest#2");
+                       listview.Columns.Add (colA);
+                       listview.Columns.Add (colB);
+                       Assert.AreEqual (2, listview.Columns.Count, "#1");
+                       Assert.AreEqual ("ColumnHeader", listview.Columns[0].Text, "#2");
+                       Assert.AreSame (listview, colA.ListView, "#3");
+                       Assert.AreSame (listview, colB.ListView, "#4");
                }
 
                [Test]
                public void ColumnHeaderCollectionTest_ClearTest ()
                {
                        ListView listview = new ListView ();
-
-                       // Duplicated elements with same text added
-                       listview.Columns.Add (new ColumnHeader ());
+                       ColumnHeader colA = new ColumnHeader ();
+                       ColumnHeader colB = new ColumnHeader ();
+                       listview.Columns.Add (colA);
+                       listview.Columns.Add (colB);
                        listview.Columns.Clear ();
-                       Assert.AreEqual (0, listview.Columns.Count, "ColumnHeaderCollectionTest_ClearTest#1");
+                       Assert.AreEqual (0, listview.Columns.Count, "#1");
+                       Assert.IsNull (colA.ListView, "#2");
+                       Assert.IsNull (colB.ListView, "#3");
                }
 
-               // Exceptions
-               [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
-               public void ColumnHeaderCollectionTest_GetItem_ExceptionTest ()
+               [Test]
+               public void ColumnHeaderCollectionTest_Remove ()
                {
-                       // Duplicated elements not added
                        ListView listview = new ListView ();
-                       ColumnHeader item = listview.Columns[5];
-                       Assert.Fail ("#1: " + item.Text); // avoid CS0219 warning
+                       ColumnHeader colA = new ColumnHeader ();
+                       ColumnHeader colB = new ColumnHeader ();
+                       ColumnHeader colC = new ColumnHeader ();
+                       listview.Columns.Add (colA);
+                       listview.Columns.Add (colB);
+                       listview.Columns.Add (colC);
+
+                       listview.Columns.Remove (colB);
+                       Assert.AreEqual (2, listview.Columns.Count, "#A1");
+                       Assert.AreSame (colA, listview.Columns [0], "#A2");
+                       Assert.AreSame (colC, listview.Columns [1], "#A3");
+                       Assert.AreSame (listview, colA.ListView, "#A4");
+                       Assert.IsNull (colB.ListView, "#A5");
+                       Assert.AreSame (listview, colC.ListView, "#A6");
+                       Assert.AreEqual (0, colA.Index, "#A7");
+                       Assert.AreEqual (-1, colB.Index, "#A8");
+                       Assert.AreEqual (1, colC.Index, "#A9");
+
+                       listview.Columns.Remove (colC);
+                       Assert.AreEqual (1, listview.Columns.Count, "#B1");
+                       Assert.AreSame (colA, listview.Columns [0], "#B2");
+                       Assert.AreSame (listview, colA.ListView, "#B3");
+                       Assert.IsNull (colB.ListView, "#B4");
+                       Assert.IsNull (colC.ListView, "#B5");
+                       Assert.AreEqual (0, colA.Index, "#B6");
+                       Assert.AreEqual (-1, colB.Index, "#B7");
+                       Assert.AreEqual (-1, colC.Index, "#B8");
+
+                       listview.Columns.Remove (colA);
+                       Assert.AreEqual (0, listview.Columns.Count, "#C1");
+                       Assert.IsNull (colA.ListView, "#C2");
+                       Assert.IsNull (colB.ListView, "#C3");
+                       Assert.IsNull (colC.ListView, "#C4");
+                       Assert.AreEqual (-1, colA.Index, "#C5");
+                       Assert.AreEqual (-1, colB.Index, "#C6");
+                       Assert.AreEqual (-1, colC.Index, "#C7");
+               }
+
+               [Test]
+               public void ColumnHeaderCollectionTest_RemoveAt ()
+               {
+                       ListView listview = new ListView ();
+                       ColumnHeader colA = new ColumnHeader ();
+                       ColumnHeader colB = new ColumnHeader ();
+                       ColumnHeader colC = new ColumnHeader ();
+                       listview.Columns.Add (colA);
+                       listview.Columns.Add (colB);
+                       listview.Columns.Add (colC);
+
+                       listview.Columns.RemoveAt (1);
+                       Assert.AreEqual (2, listview.Columns.Count, "#A1");
+                       Assert.AreSame (colA, listview.Columns [0], "#A2");
+                       Assert.AreSame (colC, listview.Columns [1], "#A3");
+                       Assert.AreSame (listview, colA.ListView, "#A4");
+                       Assert.IsNull (colB.ListView, "#A5");
+                       Assert.AreSame (listview, colC.ListView, "#A6");
+
+                       listview.Columns.RemoveAt (0);
+                       Assert.AreEqual (1, listview.Columns.Count, "#B1");
+                       Assert.AreSame (colC, listview.Columns [0], "#B2");
+                       Assert.IsNull (colA.ListView, "#B3");
+                       Assert.IsNull (colB.ListView, "#B4");
+                       Assert.AreSame (listview, colC.ListView, "#B5");
+
+                       listview.Columns.RemoveAt (0);
+                       Assert.AreEqual (0, listview.Columns.Count, "#C1");
+                       Assert.IsNull (colA.ListView, "#C2");
+                       Assert.IsNull (colB.ListView, "#C3");
+                       Assert.IsNull (colC.ListView, "#C4");
                }
 
                /*
@@ -838,9 +910,8 @@ namespace MonoTests.System.Windows.Forms
                        ListViewItem item1 = new ListViewItem ("Item1");
                        ListViewItem item2 = new ListViewItem ("Item2");
                        ListViewItem item3 = new ListViewItem ("Item3");
-
                        lv1.Items.AddRange (new ListViewItem[] { item1, item2, item3 });
-            
+
                        Assert.AreSame (item1, lv1.Items[0], "#A1");
                        Assert.AreEqual (0, item1.Index, "#A2");
                        Assert.AreSame (lv1, item1.ListView, "#A3");
@@ -899,6 +970,24 @@ namespace MonoTests.System.Windows.Forms
                        lv1.Items.Add (item1);
                }
 
+               [Test]
+               public void ListViewItemCollectionTest_Clear ()
+               {
+                       ListView lvw = new ListView ();
+                       ListViewItem itemA = lvw.Items.Add ("A");
+                       ListViewItem itemB = lvw.Items.Add ("B");
+
+                       Assert.AreEqual (2, lvw.Items.Count, "#A1");
+                       Assert.AreSame (lvw, itemA.ListView, "#A2");
+                       Assert.AreSame (lvw, itemB.ListView, "#A3");
+
+                       lvw.Items.Clear ();
+
+                       Assert.AreEqual (0, lvw.Items.Count, "#B1");
+                       Assert.IsNull (itemA.ListView, "#B2");
+                       Assert.IsNull (itemB.ListView, "#B3");
+               }
+
                [Test]
                public void ListViewItemCollectionTest_Insert ()
                {
@@ -1033,6 +1122,10 @@ namespace MonoTests.System.Windows.Forms
                        Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
                        Assert.AreEqual (itemD, lvw.CheckedItems [0], "#E5");
 
+                       Assert.IsNull (itemA.ListView, "#F1");
+                       Assert.IsNull (itemB.ListView, "#F2");
+                       Assert.AreSame (lvw, itemD.ListView, "#F3");
+
                        form.Dispose ();
                }
 
@@ -1045,10 +1138,11 @@ namespace MonoTests.System.Windows.Forms
                        form.Controls.Add (lvw);
                        lvw.MultiSelect = true;
                        lvw.CheckBoxes = true;
-                       lvw.Items.Add ("A");
-                       lvw.Items.Add ("B");
-                       lvw.Items.Add ("C");
-                       lvw.Items.Add ("D");
+
+                       ListViewItem itemA = lvw.Items.Add ("A");
+                       ListViewItem itemB = lvw.Items.Add ("B");
+                       ListViewItem itemC = lvw.Items.Add ("C");
+                       ListViewItem itemD = lvw.Items.Add ("D");
 
                        form.Show ();
 
@@ -1090,6 +1184,11 @@ namespace MonoTests.System.Windows.Forms
                        Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
                        Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#E5");
 
+                       Assert.IsNull (itemA.ListView, "#F1");
+                       Assert.IsNull (itemB.ListView, "#F2");
+                       Assert.AreSame (lvw, itemC.ListView, "#F3");
+                       Assert.AreSame (lvw, itemD.ListView, "#F4");
+
                        form.Dispose ();
                }
 
@@ -1134,6 +1233,12 @@ namespace MonoTests.System.Windows.Forms
                        Assert.AreEqual (2, lvw.Items.Count, "#E1");
                        Assert.AreSame (lvi4, lvw.Items [0], "#E2");
                        Assert.AreSame (lvi5, lvw.Items [1], "#E3");
+
+                       Assert.IsNull (lvi1.ListView, "#F1");
+                       Assert.IsNull (lvi2.ListView, "#F2");
+                       Assert.IsNull (lvi3.ListView, "#F3");
+                       Assert.AreSame (lvw, lvi4.ListView, "#F4");
+                       Assert.AreSame (lvw, lvi5.ListView, "#F5");
                }
 
                [Test]
@@ -1374,6 +1479,68 @@ namespace MonoTests.System.Windows.Forms
                        Assert.AreEqual (si5, lvi.SubItems ["E name"], "#B1");
                }
 
+               static ListViewItem [] items;
+
+               [Test]
+               public void ListViewItemCollectionTest_VirtualMode_Exceptions ()
+               {
+                       ListView lvw = new ListView ();
+                       lvw.VirtualMode = true;
+                       lvw.VirtualListSize = 1;
+                       lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
+
+                       ListViewItem item = new ListViewItem ("Item 1");
+                       item.Name = "A";
+                       items = new ListViewItem [1];
+                       items [0] = item;
+
+                       try {
+                               lvw.Items.Add ("Item 2");
+                               Assert.Fail ("#A1");
+                       } catch (InvalidOperationException) {
+                       }
+
+                       try {
+                               lvw.Items.AddRange (new ListViewItem [0]);
+                               Assert.Fail ("#A2");
+                       } catch (InvalidOperationException) {
+                       }
+
+                       try {
+                               lvw.Items.Insert (0, new ListViewItem ("Item 1"));
+                               Assert.Fail ("#A3");
+                       } catch (InvalidOperationException) {
+                       }
+
+                       try {
+                               lvw.Items.Remove (new ListViewItem ("Item 99"));
+                               Assert.Fail ("#A4");
+                       } catch (InvalidOperationException) {
+                       }
+
+                       try {
+                               lvw.Items.RemoveAt (0);
+                               Assert.Fail ("#A5");
+                       } catch (InvalidOperationException) {
+                       }
+
+                       try {
+                               lvw.Items.RemoveByKey ("A");
+                               Assert.Fail ("#A6");
+                       } catch (InvalidOperationException) {
+                       }
+
+                       try {
+                               lvw.Items.GetEnumerator ();
+                               Assert.Fail ("#A7");
+                       } catch (InvalidOperationException) {
+                       }
+               }
+
+               void ListViewRetrieveVirtualItemHandler (object o, RetrieveVirtualItemEventArgs args)
+               {
+                       args.Item = items [args.ItemIndex];
+               }
 #endif
 
        }