namespace MonoTests.System.Windows.Forms
{
[TestFixture]
- public class ListViewTest
+ public class ListViewTest : TestHelper
{
[Test]
public void ListViewPropertyTest ()
Assert.AreEqual (View.LargeIcon, mylistview.View, "#29");
mylistview.View = View.List;
Assert.AreEqual (false, mylistview.TopItem.Checked, "#30");
+#if NET_2_0
+ Assert.AreEqual (false, mylistview.ShowItemToolTips, "#31");
+ Assert.AreEqual (false, mylistview.HotTracking, "#31");
+#endif
}
[Test]
public void ArrangeIconsTest ()
{
Form myform = new Form ();
+ myform.ShowInTaskbar = false;
ListView mylistview = new ListView ();
myform.Controls.Add (mylistview);
mylistview.Items.Add ("Item 1");
mylistview.Items.Add ("Item 2");
mylistview.View = View.LargeIcon;
mylistview.ArrangeIcons ();
+ myform.Dispose ();
}
+ // Hey
[Test]
public void BeginEndUpdateTest ()
{
Form myform = new Form ();
+ myform.ShowInTaskbar = false;
myform.Visible = true;
ListView mylistview = new ListView();
mylistview.Items.Add ("A");
mylistview.Items.Add ("Item " + x.ToString());
}
mylistview.EndUpdate ();
+ myform.Dispose ();
}
[Test]
public void CheckBoxes ()
{
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = new ListView ();
form.Controls.Add (lvw);
lvw.Items.Add ("A");
Assert.AreSame (itemB, lvw.CheckedItems [0], "#E2");
Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E3");
Assert.AreEqual (1, lvw.CheckedIndices [0], "#E4");
+ form.Dispose ();
}
[Test]
public void ClearTest ()
{
Form myform = new Form ();
+ myform.ShowInTaskbar = false;
myform.Visible = true;
ListView mylistview = new ListView ();
- mylistview.Items.Add ("A");
- mylistview.Columns.Add ("Item Column", -2, HorizontalAlignment.Left);
+ ListViewItem itemA = mylistview.Items.Add ("A");
+ ColumnHeader colA = mylistview.Columns.Add ("Item Column", -2, HorizontalAlignment.Left);
+ Assert.AreSame (mylistview, itemA.ListView, "#1");
+ Assert.AreSame (mylistview, colA.ListView, "#2");
mylistview.Visible = true;
myform.Controls.Add (mylistview);
- Assert.AreEqual (1, mylistview.Columns.Count, "#31");
- Assert.AreEqual (1, mylistview.Items.Count, "#32");
+ Assert.AreEqual (1, mylistview.Columns.Count, "#3");
+ Assert.AreEqual (1, mylistview.Items.Count, "#4");
mylistview.Clear ();
- Assert.AreEqual (0, mylistview.Columns.Count, "#33");
- Assert.AreEqual (0, mylistview.Items.Count, "#34");
+ Assert.AreEqual (0, mylistview.Columns.Count, "#5");
+ Assert.AreEqual (0, mylistview.Items.Count, "#6");
+ Assert.IsNull (itemA.ListView, "#7");
+ Assert.IsNull (colA.ListView, "#8");
+ myform.Dispose ();
+ }
+
+ [Test] // bug #80620
+ public void ClientRectangle_Borders ()
+ {
+ ListView lv = new ListView ();
+ lv.CreateControl ();
+ Assert.AreEqual (lv.ClientRectangle, new ListView ().ClientRectangle);
}
[Test]
+ public void DisposeTest ()
+ {
+ ListView lv = new ListView ();
+ lv.View = View.Details;
+
+ lv.LargeImageList = new ImageList ();
+ lv.SmallImageList = new ImageList ();
+
+ ListViewItem lvi = new ListViewItem ();
+ lv.Items.Add (lvi);
+
+ ColumnHeader col = new ColumnHeader ();
+ lv.Columns.Add (col);
+
+ lv.Dispose ();
+
+ Assert.IsNull (lvi.ListView, "#A1");
+ Assert.IsNull (col.ListView, "#A2");
+
+ Assert.IsNull (lv.LargeImageList, "#B1");
+ Assert.IsNull (lv.SmallImageList, "#B2");
+ Assert.IsNull(lv.StateImageList, "#B3");
+ }
+
+ // Hey
+ //[Test]
public void EnsureVisibleTest ()
{
Form myform = new Form ();
+ myform.ShowInTaskbar = false;
myform.Visible = true;
ListView mylistview = new ListView ();
mylistview.Items.Add ("A");
}
mylistview.EndUpdate ();
mylistview.EnsureVisible (4999);
+ myform.Dispose ();
}
[Test]
entryList.Items.Add (item);
}
- [Test]
- [Category ("NotWorking")] // once listview is created, multiple items cannot be selected through code
+ [Test] // bug #79416
public void MultiSelect ()
{
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = CreateListView (View.Details);
form.Controls.Add (lvw);
lvw.MultiSelect = true;
Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#I2");
Assert.AreEqual (1, lvw.SelectedIndices.Count, "#I3");
Assert.AreEqual (2, lvw.SelectedIndices [0], "#I4");
+ form.Dispose ();
+ }
+
+#if NET_2_0
+ [Test]
+ public void TopItem ()
+ {
+ ListView lvw = CreateListView (View.List);
+
+ lvw.TopItem = null;
+ Assert.AreEqual (lvw.Items [0], lvw.TopItem, "#A1");
+
+ lvw.TopItem = new ListViewItem ();
+ Assert.AreEqual (lvw.Items [0], lvw.TopItem, "#A2");
}
+ [Test]
+ public void TopItem_Exceptions ()
+ {
+ ListView lvw = CreateListView (View.LargeIcon);
+ ListViewItem item = null;
+
+ try {
+ lvw.TopItem = lvw.Items [2];
+ Assert.Fail ("#A1");
+ } catch (InvalidOperationException) {
+ }
+
+ try {
+ item = lvw.TopItem;
+ Assert.Fail ("#A2");
+ } catch (InvalidOperationException) {
+ }
+
+ lvw.View = View.SmallIcon;
+ try {
+ lvw.TopItem = lvw.Items [2];
+ Assert.Fail ("#A3");
+ } catch (InvalidOperationException) {
+ }
+
+ try {
+ item = lvw.TopItem;
+ Assert.Fail ("#A4");
+ } catch (InvalidOperationException) {
+ }
+
+ lvw.View = View.Tile;
+ try {
+ lvw.TopItem = lvw.Items [2];
+ Assert.Fail ("#A5");
+ } catch (InvalidOperationException) {
+ }
+
+ try {
+ item = lvw.TopItem;
+ Assert.Fail ("#A6");
+ } catch (InvalidOperationException) {
+ }
+ }
+#endif
+
[Test]
public void Selected ()
{
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = CreateListView (View.Details);
form.Controls.Add (lvw);
lvw.MultiSelect = true;
Assert.AreEqual (2, lvw.SelectedIndices.Count, "#C4");
Assert.AreEqual (0, lvw.SelectedIndices [0], "#C5");
Assert.AreEqual (2, lvw.SelectedIndices [1], "#C6");
+ form.Dispose ();
+ }
+
+#if NET_2_0
+ [Test]
+ public void FindItemWithText ()
+ {
+ ListView lvw = new ListView();
+ ListViewItem lvi1 = new ListViewItem (String.Empty);
+ ListViewItem lvi2 = new ListViewItem ("angle bracket");
+ ListViewItem lvi3 = new ListViewItem ("bracket holder");
+ ListViewItem lvi4 = new ListViewItem ("bracket");
+ lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
+
+ Assert.AreEqual (lvi1, lvw.FindItemWithText (String.Empty), "#A1");
+ Assert.AreEqual (lvi3, lvw.FindItemWithText ("bracket"), "#A2");
+ Assert.AreEqual (lvi3, lvw.FindItemWithText ("BrackeT"), "#A3");
+ Assert.IsNull (lvw.FindItemWithText ("holder"), "#A5");
+
+ Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 3), "#B1");
+
+ Assert.AreEqual (lvw.Items [2], lvw.FindItemWithText ("bracket", true, 0, true), "#C1");
+ Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 0, false), "#C2");
+ Assert.AreEqual(lvw.Items [3], lvw.FindItemWithText("BrackeT", true, 0, false), "#C3");
+ Assert.IsNull (lvw.FindItemWithText ("brack", true, 0, false), "#C4");
+
+ // Sub item search tests
+ lvw.Items.Clear ();
+
+ lvi1.Text = "A";
+ lvi1.SubItems.Add ("car bracket");
+ lvi1.SubItems.Add ("C");
+
+ lvi2.Text = "B";
+ lvi2.SubItems.Add ("car");
+
+ lvi3.Text = "C";
+
+ lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3 });
+
+ Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0), "#D1");
+ Assert.AreEqual (lvi3, lvw.FindItemWithText ("C", true, 0), "#D2");
+ Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 1), "#D3");
+ Assert.IsNull (lvw.FindItemWithText ("car", false, 0), "#D4");
+
+ Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0, true), "#E1");
+ Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 0, false), "#E2");
+ Assert.AreEqual (lvi2, lvw.FindItemWithText ("CaR", true, 0, false), "#E3");
+ }
+
+ [Test]
+ public void FindItemWithText_Exceptions ()
+ {
+ ListView lvw = new ListView ();
+
+ // Shouldn't throw any exception
+ lvw.FindItemWithText (null);
+
+ try {
+ lvw.FindItemWithText (null, false, 0);
+ Assert.Fail ("#A1");
+ } catch (ArgumentOutOfRangeException) {
+ }
+
+ try {
+ lvw.FindItemWithText (null, false, lvw.Items.Count);
+ Assert.Fail ("#A2");
+ } catch (ArgumentOutOfRangeException) {
+ }
+
+ // Add a single item
+ lvw.Items.Add ("bracket");
+
+ try {
+ lvw.FindItemWithText (null);
+ Assert.Fail ("#A3");
+ } catch (ArgumentNullException) {
+ }
+
+ try {
+ lvw.FindItemWithText ("bracket", false, -1);
+ Assert.Fail ("#A4");
+ } catch (ArgumentOutOfRangeException) {
+ }
+
+ try {
+ lvw.FindItemWithText ("bracket", false, lvw.Items.Count);
+ Assert.Fail ("#A5");
+ } catch (ArgumentOutOfRangeException) {
+ }
+ }
+
+ [Test]
+ public void FindNearestItem_Exceptions ()
+ {
+ ListView lvw = new ListView ();
+ lvw.Items.Add ("A");
+ lvw.Items.Add ("B");
+
+ lvw.View = View.Details;
+ try {
+ lvw.FindNearestItem (SearchDirectionHint.Down, 0, 0);
+ Assert.Fail ("#A1");
+ } catch (InvalidOperationException) {
+ }
+
+ lvw.View = View.List;
+ try {
+ lvw.FindNearestItem (SearchDirectionHint.Down, 0, 0);
+ Assert.Fail ("#A2");
+ } catch (InvalidOperationException) {
+ }
+
+ lvw.View = View.Tile;
+ try {
+ lvw.FindNearestItem (SearchDirectionHint.Down, 0, 0);
+ Assert.Fail ("#A3");
+ } catch (InvalidOperationException) {
+ }
+
+ lvw.View = View.LargeIcon;
+ try {
+ lvw.FindNearestItem ((SearchDirectionHint)666, 0, 0);
+ } catch (ArgumentOutOfRangeException) {
+ }
+ }
+
+ [Test]
+ public void FocusedItem ()
+ {
+ ListView lvw = CreateListView (View.LargeIcon);
+ Form form = new Form ();
+ lvw.Parent = form;
+
+ // FocusedItem setter ignores the value until form is shown
+ lvw.FocusedItem = lvw.Items [2];
+ Assert.AreEqual (null, lvw.FocusedItem, "#A1");
+
+ // It's not enough to create the ListView control
+ form.Show ();
+
+ lvw.FocusedItem = lvw.Items [2];
+ Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A2");
+
+ lvw.FocusedItem = new ListViewItem ();
+ Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A3");
+
+ lvw.FocusedItem = null;
+ Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A4");
+
+ form.Dispose ();
+ }
+
+ [Test]
+ public void HotTracking ()
+ {
+ ListView lvw = new ListView ();
+
+ lvw.HotTracking = true;
+ Assert.AreEqual (true, lvw.HotTracking, "#A1");
+ Assert.AreEqual (true, lvw.HoverSelection, "#A2");
+ Assert.AreEqual (ItemActivation.OneClick, lvw.Activation, "#A3");
+
+ // HoverSelection and Activation keep the previous value
+ lvw.HotTracking = false;
+ Assert.AreEqual (false, lvw.HotTracking, "#B1");
+ Assert.AreEqual (true, lvw.HoverSelection, "#B2");
+ Assert.AreEqual (ItemActivation.OneClick, lvw.Activation, "#B3");
+
+ lvw.HotTracking = true;
+ try {
+ lvw.HoverSelection = false;
+ Assert.Fail ("#C1");
+ } catch (ArgumentException) {
+ }
+
+ try {
+ lvw.Activation = ItemActivation.Standard;
+ Assert.Fail ("#C2");
+ } catch (ArgumentException) {
+ }
+ }
+
+ [Test]
+ public void RedrawItems_Exceptions ()
+ {
+ ListView lvw = new ListView ();
+ lvw.Items.Add ("A");
+ lvw.Items.Add ("B");
+
+ try {
+ lvw.RedrawItems (-1, 1, true);
+ Assert.Fail ("#A1");
+ } catch (ArgumentOutOfRangeException) {
+ }
+
+ try {
+ lvw.RedrawItems (0, -1, true);
+ Assert.Fail ("#A2");
+ } catch (ArgumentOutOfRangeException) {
+ }
+
+ try {
+ lvw.RedrawItems (lvw.Items.Count, 1, true);
+ Assert.Fail ("#A3");
+ } catch (ArgumentOutOfRangeException) {
+ }
+
+ try {
+ lvw.RedrawItems (0, lvw.Items.Count, true);
+ Assert.Fail ("#A4");
+ } catch (ArgumentOutOfRangeException) {
+ }
+
+ try {
+ lvw.RedrawItems (1, 0, true);
+ Assert.Fail ("#A5");
+ } catch (ArgumentException) {
+ }
+ }
+
+ const int item_count = 3;
+ ListViewItem [] items = new ListViewItem [item_count];
+
+ [Test]
+ public void VirtualMode ()
+ {
+ ListView lvw = new ListView ();
+ lvw.VirtualListSize = item_count;
+ lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
+ lvw.VirtualMode = true;
+
+ CreateListViewItems (item_count);
+
+ Assert.AreEqual (item_count, lvw.Items.Count, "#A1");
+ Assert.AreEqual (true, lvw.VirtualMode, "#A2");
+
+ Assert.AreEqual (items [0], lvw.Items [0], "#B1");
+ Assert.AreEqual (items [1], lvw.Items [1], "#B2");
+ Assert.AreEqual (items [2], lvw.Items [2], "#B3");
+ Assert.AreEqual (0, lvw.Items [0].Index, "#B4");
+ Assert.AreEqual (1, lvw.Items [1].Index, "#B5");
+ Assert.AreEqual (2, lvw.Items [2].Index, "#B6");
+ Assert.AreEqual (lvw, lvw.Items [0].ListView, "#B7");
+ Assert.AreEqual (lvw, lvw.Items [1].ListView, "#B8");
+ Assert.AreEqual (lvw, lvw.Items [2].ListView, "#B9");
+
+ // force to re-create the items, because we need a blank state
+ // for our items
+ CreateListViewItems (item_count);
+ items [0].Name = "A";
+ items [1].Name = "B";
+ items [2].Name = "C";
+
+ Assert.AreEqual (items [0], lvw.Items ["A"], "#C1");
+ Assert.AreEqual (items [1], lvw.Items ["B"], "#C2");
+ Assert.AreEqual (items [2], lvw.Items ["C"], "#C3");
+ Assert.AreEqual (0, lvw.Items ["A"].Index, "#C4");
+ Assert.AreEqual (1, lvw.Items ["B"].Index, "#C5");
+ Assert.AreEqual (2, lvw.Items ["C"].Index, "#C6");
+ Assert.AreEqual (lvw, lvw.Items ["A"].ListView, "#C7");
+ Assert.AreEqual (lvw, lvw.Items ["B"].ListView, "#C8");
+ Assert.AreEqual (lvw, lvw.Items ["C"].ListView, "#C9");
+ Assert.IsNull (lvw.Items ["Invalid key"], "#C10");
+ Assert.IsNull (lvw.Items [String.Empty], "#C11");
+
+ Assert.AreEqual (false, lvw.Items.ContainsKey (String.Empty), "#D1");
+ Assert.AreEqual (false, lvw.Items.ContainsKey (null), "#D2");
+ Assert.AreEqual (true, lvw.Items.ContainsKey ("A"), "#D3");
+ Assert.AreEqual (true, lvw.Items.ContainsKey ("a"), "#D4");
+ Assert.AreEqual (true, lvw.Items.ContainsKey ("B"), "#D5");
+ }
+
+ void ListViewRetrieveVirtualItemHandler (object o, RetrieveVirtualItemEventArgs args)
+ {
+ args.Item = items [args.ItemIndex];
+ }
+
+ void CreateListViewItems(int count)
+ {
+ items = new ListViewItem [count];
+
+ for (int i = 0; i < count; i++)
+ items [i] = new ListViewItem (String.Empty);
}
+ [Test]
+ public void VirtualMode_Exceptions()
+ {
+ ListView lvw = new ListView ();
+
+ lvw.Items.Add ("Simple item");
+ try {
+ lvw.VirtualMode = true;
+ Assert.Fail ("#A1");
+ } catch (InvalidOperationException) {
+ }
+
+ lvw.Items.Clear();
+ lvw.VirtualMode = true;
+ lvw.VirtualListSize = 1;
+
+ lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
+ CreateListViewItems (1);
+
+ try {
+ lvw.Sort ();
+ Assert.Fail ("#A3");
+ } catch (InvalidOperationException) {
+ }
+ }
+
+ [Test]
+ public void VirtualListSize ()
+ {
+ ListView lvw = new ListView ();
+
+ lvw.VirtualListSize = item_count;
+ Assert.AreEqual (item_count, lvw.VirtualListSize, "#A1");
+ Assert.AreEqual (0, lvw.Items.Count, "#A2");
+
+ lvw.VirtualMode = true;
+ Assert.AreEqual (item_count, lvw.VirtualListSize, "#B1");
+ Assert.AreEqual (item_count, lvw.Items.Count, "#B2");
+
+ lvw.VirtualMode = false;
+ Assert.AreEqual (item_count, lvw.VirtualListSize, "#C1");
+ Assert.AreEqual (0, lvw.Items.Count, "#C2");
+ }
+
+ [Test]
+ public void VirtualListSize_Exceptions ()
+ {
+ ListView lvw = new ListView ();
+ try {
+ lvw.VirtualListSize = -1;
+ Assert.Fail ("#A1");
+ } catch (ArgumentException) {
+ }
+ }
+#endif
+
[Test]
public void Sort_Details_Checked ()
{
int compareCount = 0;
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = CreateListView (view);
form.Controls.Add (lvw);
Assert.IsNull (lvw.ListViewItemSorter, "#A");
// record compare count
compareCount = mc.CompareCount;
+ form.Dispose ();
}
private void AssertSortIcon_NotCreated (View view)
{
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = CreateListView (view);
form.Controls.Add (lvw);
Assert.AreEqual ("BB", lvw.Items [1].Text, "#O3");
Assert.AreEqual ("B", lvw.Items [2].Text, "#O4");
Assert.AreEqual ("A", lvw.Items [3].Text, "#O5");
+
+ form.Dispose ();
}
private void AssertSortNoIcon_Created (View view)
int compareCount = 0;
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = CreateListView (view);
form.Controls.Add (lvw);
Assert.IsNull (lvw.ListViewItemSorter, "#A");
// record compare count
compareCount = mc.CompareCount;
+
+ form.Dispose ();
}
private void AssertSortNoIcon_NotCreated (View view)
{
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = CreateListView (view);
form.Controls.Add (lvw);
Assert.AreEqual ("BB", lvw.Items [1].Text, "#T3");
Assert.AreEqual ("B", lvw.Items [2].Text, "#T4");
Assert.AreEqual ("A", lvw.Items [3].Text, "#T5");
+
+ form.Dispose ();
}
private void AssertSort_Checked (View view)
{
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = CreateListView (view);
lvw.CheckBoxes = true;
form.Controls.Add (lvw);
Assert.AreEqual (1, lvw.CheckedIndices.Count, "#H2");
Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#H3");
Assert.AreEqual (1, lvw.CheckedIndices [0], "#H4");
+
+ form.Dispose ();
}
private void AssertSort_Selected (View view)
{
Form form = new Form ();
+ form.ShowInTaskbar = false;
ListView lvw = CreateListView (view);
form.Controls.Add (lvw);
Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H2");
Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#H3");
Assert.AreEqual (1, lvw.SelectedIndices [0], "#H4");
+
+ form.Dispose ();
}
private ListView CreateListView (View view)
return String.Compare (item_x.Text, item_y.Text);
}
}
+
+ [Test]
+ public void MethodIsInputChar ()
+ {
+ // Basically, show that this method always returns true
+ InputCharControl m = new InputCharControl ();
+ bool result = true;
+
+ for (int i = 0; i < 256; i++)
+ result &= m.PublicIsInputChar ((char)i);
+
+ Assert.AreEqual (true, result, "I1");
+ }
+
+ private class InputCharControl : ListView
+ {
+ public bool PublicIsInputChar (char charCode)
+ {
+ return base.IsInputChar (charCode);
+ }
+ }
}
}