2 // ListViewTest.cs: Test cases for ListView.
5 // Ritvik Mayank (mritvik@novell.com)
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
11 using System.Collections;
13 using System.Reflection;
14 using System.Windows.Forms;
16 using NUnit.Framework;
18 namespace MonoTests.System.Windows.Forms
21 public class ListViewTest
24 public void ListViewPropertyTest ()
26 ListView mylistview = new ListView ();
27 Assert.AreEqual (ItemActivation.Standard, mylistview.Activation, "#1");
28 Assert.AreEqual (ListViewAlignment.Top, mylistview.Alignment, "#2");
29 Assert.AreEqual (false, mylistview.AllowColumnReorder, "#3");
30 Assert.AreEqual (true, mylistview.AutoArrange, "#4");
31 Assert.AreEqual (BorderStyle.Fixed3D , mylistview.BorderStyle, "#5");
32 Assert.AreEqual (false, mylistview.CheckBoxes, "#6");
33 Assert.AreEqual (0, mylistview.CheckedIndices.Count, "#7");
34 Assert.AreEqual (0, mylistview.CheckedItems.Count, "#8");
35 Assert.AreEqual (0, mylistview.Columns.Count, "#9");
36 Assert.AreEqual (null, mylistview.FocusedItem, "#10");
37 Assert.AreEqual (false, mylistview.FullRowSelect, "#11");
38 Assert.AreEqual (false, mylistview.GridLines, "#12");
39 Assert.AreEqual (ColumnHeaderStyle.Clickable, mylistview.HeaderStyle, "#13");
40 Assert.AreEqual (true, mylistview.HideSelection, "#14");
41 Assert.AreEqual (false, mylistview.HoverSelection, "#15");
42 ListViewItem item1 = new ListViewItem ("A", -1);
43 mylistview.Items.Add (item1);
44 Assert.AreEqual (1, mylistview.Items.Count, "#16");
45 Assert.AreEqual (false, mylistview.LabelEdit, "#17");
46 Assert.AreEqual (true, mylistview.LabelWrap, "#18");
47 Assert.AreEqual (null, mylistview.LargeImageList, "#19");
48 Assert.AreEqual (null, mylistview.ListViewItemSorter, "#20");
49 Assert.AreEqual (true, mylistview.MultiSelect, "#21");
50 Assert.AreEqual (true, mylistview.Scrollable, "#22");
51 Assert.AreEqual (0, mylistview.SelectedIndices.Count, "#23");
52 Assert.AreEqual (0, mylistview.SelectedItems.Count, "#24");
53 Assert.AreEqual (null, mylistview.SmallImageList, "#25");
54 Assert.AreEqual (null, mylistview.LargeImageList, "#26");
55 Assert.AreEqual (SortOrder.None, mylistview.Sorting, "#27");
56 Assert.AreEqual (null, mylistview.StateImageList, "#28");
57 Assert.AreEqual (View.LargeIcon, mylistview.View, "#29");
58 mylistview.View = View.List;
59 Assert.AreEqual (false, mylistview.TopItem.Checked, "#30");
61 Assert.AreEqual (false, mylistview.ShowItemToolTips, "#31");
62 Assert.AreEqual (false, mylistview.HotTracking, "#31");
67 public void ArrangeIconsTest ()
69 Form myform = new Form ();
70 myform.ShowInTaskbar = false;
71 ListView mylistview = new ListView ();
72 myform.Controls.Add (mylistview);
73 mylistview.Items.Add ("Item 1");
74 mylistview.Items.Add ("Item 2");
75 mylistview.View = View.LargeIcon;
76 mylistview.ArrangeIcons ();
81 public void BeginEndUpdateTest ()
83 Form myform = new Form ();
84 myform.ShowInTaskbar = false;
85 myform.Visible = true;
86 ListView mylistview = new ListView();
87 mylistview.Items.Add ("A");
88 mylistview.Visible = true;
89 myform.Controls.Add (mylistview);
90 mylistview.BeginUpdate ();
91 for(int x = 1 ; x < 5000 ; x++){
92 mylistview.Items.Add ("Item " + x.ToString());
94 mylistview.EndUpdate ();
99 public void CheckBoxes ()
101 Form form = new Form ();
102 form.ShowInTaskbar = false;
103 ListView lvw = new ListView ();
104 form.Controls.Add (lvw);
106 ListViewItem itemB = lvw.Items.Add ("B");
108 itemB.Checked = true;
110 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
111 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
113 lvw.CheckBoxes = true;
115 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
116 Assert.AreSame (itemB, lvw.CheckedItems [0], "#B2");
117 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B3");
118 Assert.AreEqual (1, lvw.CheckedIndices [0], "#B4");
122 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
123 Assert.AreSame (itemB, lvw.CheckedItems [0], "#C2");
124 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C3");
125 Assert.AreEqual (1, lvw.CheckedIndices [0], "#C4");
127 lvw.CheckBoxes = false;
129 Assert.AreEqual (0, lvw.CheckedItems.Count, "#D1");
130 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#D2");
132 lvw.CheckBoxes = true;
134 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
135 Assert.AreSame (itemB, lvw.CheckedItems [0], "#E2");
136 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E3");
137 Assert.AreEqual (1, lvw.CheckedIndices [0], "#E4");
142 public void ClearTest ()
144 Form myform = new Form ();
145 myform.ShowInTaskbar = false;
146 myform.Visible = true;
147 ListView mylistview = new ListView ();
148 ListViewItem itemA = mylistview.Items.Add ("A");
149 ColumnHeader colA = mylistview.Columns.Add ("Item Column", -2, HorizontalAlignment.Left);
150 Assert.AreSame (mylistview, itemA.ListView, "#1");
151 Assert.AreSame (mylistview, colA.ListView, "#2");
152 mylistview.Visible = true;
153 myform.Controls.Add (mylistview);
154 Assert.AreEqual (1, mylistview.Columns.Count, "#3");
155 Assert.AreEqual (1, mylistview.Items.Count, "#4");
157 Assert.AreEqual (0, mylistview.Columns.Count, "#5");
158 Assert.AreEqual (0, mylistview.Items.Count, "#6");
159 Assert.IsNull (itemA.ListView, "#7");
160 Assert.IsNull (colA.ListView, "#8");
165 public void ClientRectangle_Borders ()
167 ListView lv = new ListView ();
169 Assert.AreEqual (lv.ClientRectangle, new ListView ().ClientRectangle);
173 public void DisposeTest ()
175 ListView lv = new ListView ();
176 lv.View = View.Details;
178 lv.LargeImageList = new ImageList ();
179 lv.SmallImageList = new ImageList ();
181 ListViewItem lvi = new ListViewItem ();
184 ColumnHeader col = new ColumnHeader ();
185 lv.Columns.Add (col);
189 Assert.IsNull (lvi.ListView, "#A1");
190 Assert.IsNull (col.ListView, "#A2");
192 Assert.IsNull (lv.LargeImageList, "#B1");
193 Assert.IsNull (lv.SmallImageList, "#B2");
194 Assert.IsNull(lv.StateImageList, "#B3");
198 public void EnsureVisibleTest ()
200 Form myform = new Form ();
201 myform.ShowInTaskbar = false;
202 myform.Visible = true;
203 ListView mylistview = new ListView ();
204 mylistview.Items.Add ("A");
205 myform.Controls.Add (mylistview);
206 mylistview.BeginUpdate ();
207 for(int x = 1 ; x < 5000 ; x++) {
208 mylistview.Items.Add ("Item " + x.ToString());
210 mylistview.EndUpdate ();
211 mylistview.EnsureVisible (4999);
216 public void GetItemRectTest ()
218 ListView mylistview = new ListView ();
219 mylistview.Items.Add ("Item 1");
220 mylistview.Items.Add ("Item 2");
221 Rectangle r = mylistview.GetItemRect (1);
222 Assert.AreEqual (0, r.Top, "#35a");
223 Assert.IsTrue (r.Bottom > 0, "#35b");
224 Assert.IsTrue (r.Right > 0, "#35c");
225 Assert.IsTrue (r.Left > 0, "#35d");
226 Assert.IsTrue (r.Height > 0, "#35e");
227 Assert.IsTrue (r.Width > 0, "#35f");
231 public void bug79076 ()
233 ListView entryList = new ListView ();
234 entryList.Sorting = SortOrder.Descending;
236 entryList.BeginUpdate ();
237 entryList.Columns.Add ("Type", 100, HorizontalAlignment.Left);
239 ListViewItem item = new ListViewItem (new string [] { "A" });
240 entryList.Items.Add (item);
241 item = new ListViewItem (new string [] { "B" });
242 entryList.Items.Add (item);
246 public void MultiSelect ()
248 Form form = new Form ();
249 form.ShowInTaskbar = false;
250 ListView lvw = CreateListView (View.Details);
251 form.Controls.Add (lvw);
252 lvw.MultiSelect = true;
253 lvw.Items [0].Selected = true;
254 lvw.Items [2].Selected = true;
256 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
257 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
259 lvw.Items [0].Selected = false;
261 Assert.AreEqual (0, lvw.SelectedItems.Count, "#B1");
262 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#B2");
264 lvw.Items [0].Selected = true;
266 Assert.AreEqual (0, lvw.SelectedItems.Count, "#C1");
267 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#C2");
271 Assert.AreEqual (2, lvw.SelectedItems.Count, "#D1");
272 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#D2");
273 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#D3");
274 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#D4");
275 Assert.AreEqual (0, lvw.SelectedIndices [0], "#D5");
276 Assert.AreEqual (2, lvw.SelectedIndices [1], "#D6");
279 lvw.Items [2].Selected = false;
281 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
282 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#E2");
283 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E3");
284 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
286 // re-select that item
287 lvw.Items [2].Selected = true;
289 Assert.AreEqual (2, lvw.SelectedItems.Count, "#F1");
290 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#F2");
291 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#F3");
292 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#F4");
293 Assert.AreEqual (0, lvw.SelectedIndices [0], "#F5");
294 Assert.AreEqual (2, lvw.SelectedIndices [1], "#F6");
296 // dis-allow selection of multiple items
297 lvw.MultiSelect = false;
299 // setting MultiSelect to false when multiple items have been
300 // selected does not deselect items
301 Assert.AreEqual (2, lvw.SelectedItems.Count, "#G1");
302 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#G2");
303 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#G3");
304 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#G4");
305 Assert.AreEqual (0, lvw.SelectedIndices [0], "#G5");
306 Assert.AreEqual (2, lvw.SelectedIndices [1], "#G6");
308 // de-select that item again
309 lvw.Items [2].Selected = false;
311 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
312 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#H2");
313 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H3");
314 Assert.AreEqual (0, lvw.SelectedIndices [0], "#H4");
316 // re-select that item again
317 lvw.Items [2].Selected = true;
319 // when MultiSelect is false, and you attempt to select more than
320 // one item, then all items will first be de-selected and then
321 // the item in question is selected
322 Assert.AreEqual (1, lvw.SelectedItems.Count, "#I1");
323 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#I2");
324 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#I3");
325 Assert.AreEqual (2, lvw.SelectedIndices [0], "#I4");
331 public void TopItem ()
333 ListView lvw = CreateListView (View.List);
336 Assert.AreEqual (lvw.Items [0], lvw.TopItem, "#A1");
338 lvw.TopItem = new ListViewItem ();
339 Assert.AreEqual (lvw.Items [0], lvw.TopItem, "#A2");
343 public void TopItem_Exceptions ()
345 ListView lvw = CreateListView (View.LargeIcon);
346 ListViewItem item = null;
349 lvw.TopItem = lvw.Items [2];
351 } catch (InvalidOperationException) {
357 } catch (InvalidOperationException) {
360 lvw.View = View.SmallIcon;
362 lvw.TopItem = lvw.Items [2];
364 } catch (InvalidOperationException) {
370 } catch (InvalidOperationException) {
373 lvw.View = View.Tile;
375 lvw.TopItem = lvw.Items [2];
377 } catch (InvalidOperationException) {
383 } catch (InvalidOperationException) {
389 public void Selected ()
391 Form form = new Form ();
392 form.ShowInTaskbar = false;
393 ListView lvw = CreateListView (View.Details);
394 form.Controls.Add (lvw);
395 lvw.MultiSelect = true;
396 lvw.Items [0].Selected = true;
397 lvw.Items [2].Selected = true;
399 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
400 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
404 Assert.AreEqual (2, lvw.SelectedItems.Count, "#C1");
405 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#C2");
406 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#C3");
407 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#C4");
408 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C5");
409 Assert.AreEqual (2, lvw.SelectedIndices [1], "#C6");
415 public void FindItemWithText ()
417 ListView lvw = new ListView();
418 ListViewItem lvi1 = new ListViewItem (String.Empty);
419 ListViewItem lvi2 = new ListViewItem ("angle bracket");
420 ListViewItem lvi3 = new ListViewItem ("bracket holder");
421 ListViewItem lvi4 = new ListViewItem ("bracket");
422 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
424 Assert.AreEqual (lvi1, lvw.FindItemWithText (String.Empty), "#A1");
425 Assert.AreEqual (lvi3, lvw.FindItemWithText ("bracket"), "#A2");
426 Assert.AreEqual (lvi3, lvw.FindItemWithText ("BrackeT"), "#A3");
427 Assert.IsNull (lvw.FindItemWithText ("holder"), "#A5");
429 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 3), "#B1");
431 Assert.AreEqual (lvw.Items [2], lvw.FindItemWithText ("bracket", true, 0, true), "#C1");
432 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 0, false), "#C2");
433 Assert.AreEqual(lvw.Items [3], lvw.FindItemWithText("BrackeT", true, 0, false), "#C3");
434 Assert.IsNull (lvw.FindItemWithText ("brack", true, 0, false), "#C4");
436 // Sub item search tests
440 lvi1.SubItems.Add ("car bracket");
441 lvi1.SubItems.Add ("C");
444 lvi2.SubItems.Add ("car");
448 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3 });
450 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0), "#D1");
451 Assert.AreEqual (lvi3, lvw.FindItemWithText ("C", true, 0), "#D2");
452 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 1), "#D3");
453 Assert.IsNull (lvw.FindItemWithText ("car", false, 0), "#D4");
455 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0, true), "#E1");
456 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 0, false), "#E2");
457 Assert.AreEqual (lvi2, lvw.FindItemWithText ("CaR", true, 0, false), "#E3");
461 public void FindItemWithText_Exceptions ()
463 ListView lvw = new ListView ();
465 // Shouldn't throw any exception
466 lvw.FindItemWithText (null);
469 lvw.FindItemWithText (null, false, 0);
471 } catch (ArgumentOutOfRangeException) {
475 lvw.FindItemWithText (null, false, lvw.Items.Count);
477 } catch (ArgumentOutOfRangeException) {
481 lvw.Items.Add ("bracket");
484 lvw.FindItemWithText (null);
486 } catch (ArgumentNullException) {
490 lvw.FindItemWithText ("bracket", false, -1);
492 } catch (ArgumentOutOfRangeException) {
496 lvw.FindItemWithText ("bracket", false, lvw.Items.Count);
498 } catch (ArgumentOutOfRangeException) {
503 public void FocusedItem ()
505 ListView lvw = CreateListView (View.LargeIcon);
506 Form form = new Form ();
509 // FocusedItem setter ignores the value until form is shown
510 lvw.FocusedItem = lvw.Items [2];
511 Assert.AreEqual (null, lvw.FocusedItem, "#A1");
513 // It's not enough to create the ListView control
516 lvw.FocusedItem = lvw.Items [2];
517 Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A2");
519 lvw.FocusedItem = new ListViewItem ();
520 Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A3");
522 lvw.FocusedItem = null;
523 Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A4");
529 public void HotTracking ()
531 ListView lvw = new ListView ();
533 lvw.HotTracking = true;
534 Assert.AreEqual (true, lvw.HotTracking, "#A1");
535 Assert.AreEqual (true, lvw.HoverSelection, "#A2");
536 Assert.AreEqual (ItemActivation.OneClick, lvw.Activation, "#A3");
538 // HoverSelection and Activation keep the previous value
539 lvw.HotTracking = false;
540 Assert.AreEqual (false, lvw.HotTracking, "#B1");
541 Assert.AreEqual (true, lvw.HoverSelection, "#B2");
542 Assert.AreEqual (ItemActivation.OneClick, lvw.Activation, "#B3");
544 lvw.HotTracking = true;
546 lvw.HoverSelection = false;
548 } catch (ArgumentException) {
552 lvw.Activation = ItemActivation.Standard;
554 } catch (ArgumentException) {
559 public void RedrawItems_Exceptions ()
561 ListView lvw = new ListView ();
566 lvw.RedrawItems (-1, 1, true);
568 } catch (ArgumentOutOfRangeException) {
572 lvw.RedrawItems (0, -1, true);
574 } catch (ArgumentOutOfRangeException) {
578 lvw.RedrawItems (lvw.Items.Count, 1, true);
580 } catch (ArgumentOutOfRangeException) {
584 lvw.RedrawItems (0, lvw.Items.Count, true);
586 } catch (ArgumentOutOfRangeException) {
590 lvw.RedrawItems (1, 0, true);
592 } catch (ArgumentException) {
596 const int item_count = 3;
597 ListViewItem [] items = new ListViewItem [item_count];
600 public void VirtualMode ()
602 ListView lvw = new ListView ();
603 lvw.VirtualListSize = item_count;
604 lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
605 lvw.VirtualMode = true;
607 CreateListViewItems (item_count);
609 Assert.AreEqual (item_count, lvw.Items.Count, "#A1");
610 Assert.AreEqual (true, lvw.VirtualMode, "#A2");
612 Assert.AreEqual (items [0], lvw.Items [0], "#B1");
613 Assert.AreEqual (items [1], lvw.Items [1], "#B2");
614 Assert.AreEqual (items [2], lvw.Items [2], "#B3");
615 Assert.AreEqual (0, lvw.Items [0].Index, "#B4");
616 Assert.AreEqual (1, lvw.Items [1].Index, "#B5");
617 Assert.AreEqual (2, lvw.Items [2].Index, "#B6");
618 Assert.AreEqual (lvw, lvw.Items [0].ListView, "#B7");
619 Assert.AreEqual (lvw, lvw.Items [1].ListView, "#B8");
620 Assert.AreEqual (lvw, lvw.Items [2].ListView, "#B9");
622 // force to re-create the items, because we need a blank state
624 CreateListViewItems (item_count);
625 items [0].Name = "A";
626 items [1].Name = "B";
627 items [2].Name = "C";
629 Assert.AreEqual (items [0], lvw.Items ["A"], "#C1");
630 Assert.AreEqual (items [1], lvw.Items ["B"], "#C2");
631 Assert.AreEqual (items [2], lvw.Items ["C"], "#C3");
632 Assert.AreEqual (0, lvw.Items ["A"].Index, "#C4");
633 Assert.AreEqual (1, lvw.Items ["B"].Index, "#C5");
634 Assert.AreEqual (2, lvw.Items ["C"].Index, "#C6");
635 Assert.AreEqual (lvw, lvw.Items ["A"].ListView, "#C7");
636 Assert.AreEqual (lvw, lvw.Items ["B"].ListView, "#C8");
637 Assert.AreEqual (lvw, lvw.Items ["C"].ListView, "#C9");
638 Assert.IsNull (lvw.Items ["Invalid key"], "#C10");
639 Assert.IsNull (lvw.Items [String.Empty], "#C11");
641 Assert.AreEqual (false, lvw.Items.ContainsKey (String.Empty), "#D1");
642 Assert.AreEqual (false, lvw.Items.ContainsKey (null), "#D2");
643 Assert.AreEqual (true, lvw.Items.ContainsKey ("A"), "#D3");
644 Assert.AreEqual (true, lvw.Items.ContainsKey ("a"), "#D4");
645 Assert.AreEqual (true, lvw.Items.ContainsKey ("B"), "#D5");
648 void ListViewRetrieveVirtualItemHandler (object o, RetrieveVirtualItemEventArgs args)
650 args.Item = items [args.ItemIndex];
653 void CreateListViewItems(int count)
655 items = new ListViewItem [count];
657 for (int i = 0; i < count; i++)
658 items [i] = new ListViewItem (String.Empty);
662 public void VirtualMode_Exceptions()
664 ListView lvw = new ListView ();
666 lvw.Items.Add ("Simple item");
668 lvw.VirtualMode = true;
670 } catch (InvalidOperationException) {
674 lvw.VirtualMode = true;
675 lvw.VirtualListSize = 1;
677 lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
678 CreateListViewItems (1);
683 } catch (InvalidOperationException) {
688 public void VirtualListSize ()
690 ListView lvw = new ListView ();
692 lvw.VirtualListSize = item_count;
693 Assert.AreEqual (item_count, lvw.VirtualListSize, "#A1");
694 Assert.AreEqual (0, lvw.Items.Count, "#A2");
696 lvw.VirtualMode = true;
697 Assert.AreEqual (item_count, lvw.VirtualListSize, "#B1");
698 Assert.AreEqual (item_count, lvw.Items.Count, "#B2");
700 lvw.VirtualMode = false;
701 Assert.AreEqual (item_count, lvw.VirtualListSize, "#C1");
702 Assert.AreEqual (0, lvw.Items.Count, "#C2");
706 public void VirtualListSize_Exceptions ()
708 ListView lvw = new ListView ();
710 lvw.VirtualListSize = -1;
712 } catch (ArgumentException) {
718 public void Sort_Details_Checked ()
720 AssertSort_Checked (View.Details);
724 public void Sort_Details_Created ()
726 AssertSortNoIcon_Created (View.Details);
730 public void Sort_Details_NotCreated ()
732 AssertSortNoIcon_NotCreated (View.Details);
736 public void Sort_Details_Selected ()
738 AssertSort_Selected (View.Details);
742 public void Sort_LargeIcon_Checked ()
744 AssertSort_Checked (View.LargeIcon);
748 public void Sort_LargeIcon_Created ()
750 AssertSortIcon_Created (View.LargeIcon);
754 public void Sort_LargeIcon_NotCreated ()
756 AssertSortIcon_NotCreated (View.LargeIcon);
760 public void Sort_LargeIcon_Selected ()
762 AssertSort_Selected (View.LargeIcon);
766 public void Sort_List_Checked ()
768 AssertSort_Checked (View.List);
772 public void Sort_List_Created ()
774 AssertSortNoIcon_Created (View.List);
778 public void Sort_List_NotCreated ()
780 AssertSortNoIcon_NotCreated (View.List);
784 public void Sort_List_Selection ()
786 AssertSort_Selected (View.List);
790 public void Sort_SmallIcon_Checked ()
792 AssertSort_Checked (View.SmallIcon);
796 public void Sort_SmallIcon_Created ()
798 AssertSortIcon_Created (View.SmallIcon);
802 public void Sort_SmallIcon_NotCreated ()
804 AssertSortIcon_NotCreated (View.SmallIcon);
808 public void Sort_SmallIcon_Selection ()
810 AssertSort_Selected (View.SmallIcon);
815 [ExpectedException (typeof (NotSupportedException))]
816 public void Sort_Tile_Checked ()
818 AssertSort_Checked (View.Tile);
822 public void Sort_Tile_Created ()
824 AssertSortNoIcon_Created (View.Tile);
828 public void Sort_Tile_NotCreated ()
830 AssertSortNoIcon_NotCreated (View.Tile);
834 public void Sort_Tile_Selection ()
836 AssertSort_Selected (View.Tile);
840 private void AssertSortIcon_Created (View view)
842 int compareCount = 0;
844 Form form = new Form ();
845 form.ShowInTaskbar = false;
846 ListView lvw = CreateListView (view);
847 form.Controls.Add (lvw);
848 Assert.IsNull (lvw.ListViewItemSorter, "#A");
852 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
853 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
854 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
855 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
857 lvw.Sorting = SortOrder.None;
858 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
859 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
860 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
861 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
863 lvw.Sorting = SortOrder.Descending;
864 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
865 Assert.AreEqual ("C", lvw.Items [0].Text, "#D2");
866 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
867 Assert.AreEqual ("A", lvw.Items [2].Text, "#D4");
869 lvw.Sorting = SortOrder.Ascending;
870 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
872 Assert.AreEqual ("A", lvw.Items [0].Text, "#E2");
873 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
874 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
876 // in .NET 1.1, changing Sorting does not have any effect for
877 // SmallIcon and LargeIcon view if no custom comparer is used
878 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
879 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
880 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
883 lvw.Sorting = SortOrder.None;
884 Assert.IsNotNull (lvw.ListViewItemSorter, "#F1");
886 Assert.AreEqual ("A", lvw.Items [0].Text, "#F2");
887 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
888 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
890 // in .NET 1.1, changing Sorting does not have any effect for
891 // SmallIcon and LargeIcon view if no custom comparer is used
892 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
893 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
894 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
897 lvw.Sorting = SortOrder.Ascending;
898 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
900 Assert.AreEqual ("A", lvw.Items [0].Text, "#G2");
901 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
902 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
904 // in .NET 1.1, changing Sorting does not have any effect for
905 // SmallIcon and LargeIcon view if no custom comparer is used
906 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
907 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
908 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
911 lvw.Sorting = SortOrder.Descending;
912 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
913 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
914 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
915 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
917 lvw.Sorting = SortOrder.None;
918 Assert.IsNotNull (lvw.ListViewItemSorter, "#H1");
919 Assert.AreEqual ("C", lvw.Items [0].Text, "#H2");
920 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
921 Assert.AreEqual ("A", lvw.Items [2].Text, "#H4");
923 // when Sorting is None and a new item is added, the collection is
924 // sorted using the previous Sorting value
925 lvw.Items.Add ("BB");
926 Assert.IsNotNull (lvw.ListViewItemSorter, "#I1");
927 Assert.AreEqual ("C", lvw.Items [0].Text, "#I2");
928 Assert.AreEqual ("BB", lvw.Items [1].Text, "#I3");
929 Assert.AreEqual ("B", lvw.Items [2].Text, "#I4");
930 Assert.AreEqual ("A", lvw.Items [3].Text, "#I5");
932 lvw.Sorting = SortOrder.Ascending;
933 Assert.IsNotNull (lvw.ListViewItemSorter, "#J1");
935 Assert.AreEqual ("A", lvw.Items [0].Text, "#J2");
936 Assert.AreEqual ("B", lvw.Items [1].Text, "#J3");
937 Assert.AreEqual ("BB", lvw.Items [2].Text, "#J4");
938 Assert.AreEqual ("C", lvw.Items [3].Text, "#J5");
940 // in .NET 1.1, changing Sorting does not have any effect for
941 // SmallIcon and LargeIcon view if no custom comparer is used
942 Assert.AreEqual ("C", lvw.Items [0].Text, "#J2");
943 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J3");
944 Assert.AreEqual ("B", lvw.Items [2].Text, "#J4");
945 Assert.AreEqual ("A", lvw.Items [3].Text, "#J5");
948 // when Sorting is not None and a new item is added, the
949 // collection is re-sorted automatically
950 lvw.Items.Add ("BA");
951 Assert.IsNotNull (lvw.ListViewItemSorter, "#K1");
953 Assert.AreEqual ("A", lvw.Items [0].Text, "#K2");
954 Assert.AreEqual ("B", lvw.Items [1].Text, "#K3");
955 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
956 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K5");
957 Assert.AreEqual ("C", lvw.Items [4].Text, "#K6");
959 // in .NET 1.1, changing Sorting does not have any effect for
960 // SmallIcon and LargeIcon view if no custom comparer is used
961 Assert.AreEqual ("C", lvw.Items [0].Text, "#K2");
962 Assert.AreEqual ("BB", lvw.Items [1].Text, "#K3");
963 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
964 Assert.AreEqual ("B", lvw.Items [3].Text, "#K5");
965 Assert.AreEqual ("A", lvw.Items [4].Text, "#K6");
968 // assign a custom comparer
969 MockComparer mc = new MockComparer (false);
970 lvw.ListViewItemSorter = mc;
972 // when a custom IComparer is assigned, the collection is immediately
974 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
975 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
976 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
977 Assert.AreEqual ("C", lvw.Items [0].Text, "#L4");
978 Assert.AreEqual ("BB", lvw.Items [1].Text, "#L5");
979 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
980 Assert.AreEqual ("B", lvw.Items [3].Text, "#L7");
981 Assert.AreEqual ("A", lvw.Items [4].Text, "#L8");
983 // record compare count
984 compareCount = mc.CompareCount;
986 // modifying Sorting results in re-sort
987 lvw.Sorting = SortOrder.Descending;
988 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
989 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
990 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
991 Assert.AreEqual ("A", lvw.Items [0].Text, "#M4");
992 Assert.AreEqual ("B", lvw.Items [1].Text, "#M5");
993 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
994 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M7");
995 Assert.AreEqual ("C", lvw.Items [4].Text, "#M8");
997 // record compare count
998 compareCount = mc.CompareCount;
1000 // setting Sorting to the same value does not result in a sort
1002 lvw.Sorting = SortOrder.Descending;
1003 Assert.AreEqual (compareCount, mc.CompareCount, "#N1");
1004 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
1005 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
1006 Assert.AreEqual ("A", lvw.Items [0].Text, "#N4");
1007 Assert.AreEqual ("B", lvw.Items [1].Text, "#N5");
1008 Assert.AreEqual ("BA", lvw.Items [2].Text, "#N6");
1009 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N7");
1010 Assert.AreEqual ("C", lvw.Items [4].Text, "#N8");
1012 // modifying Sorting results in re-sort
1013 lvw.Sorting = SortOrder.Ascending;
1014 Assert.IsTrue (mc.CompareCount > compareCount, "#O1");
1015 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1016 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1017 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
1018 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O5");
1019 Assert.AreEqual ("BA", lvw.Items [2].Text, "#O6");
1020 Assert.AreEqual ("B", lvw.Items [3].Text, "#O7");
1021 Assert.AreEqual ("A", lvw.Items [4].Text, "#O8");
1023 // record compare count
1024 compareCount = mc.CompareCount;
1026 // adding an item when Sorting is not None causes re-sort
1027 lvw.Items.Add ("BC");
1028 Assert.IsTrue (mc.CompareCount > compareCount, "#P1");
1029 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
1030 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
1031 Assert.AreEqual ("C", lvw.Items [0].Text, "#P4");
1032 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P5");
1033 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P6");
1034 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P7");
1035 Assert.AreEqual ("B", lvw.Items [4].Text, "#P8");
1036 Assert.AreEqual ("A", lvw.Items [5].Text, "#P9");
1038 // record compare count
1039 compareCount = mc.CompareCount;
1041 // assigning the same custom IComparer again does not result in a
1043 lvw.ListViewItemSorter = mc;
1044 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
1045 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1046 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1047 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1048 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
1049 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
1050 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
1051 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
1052 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
1054 // setting Sorting to None does not perform a sort
1055 lvw.Sorting = SortOrder.None;
1056 Assert.AreEqual (compareCount, mc.CompareCount, "#R1");
1057 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
1058 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
1059 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
1060 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
1061 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
1062 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
1063 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
1064 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
1066 // assigning the custom IComparer again does not result in a
1068 lvw.ListViewItemSorter = mc;
1069 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
1070 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2");
1071 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S3");
1072 Assert.AreEqual ("C", lvw.Items [0].Text, "#S4");
1073 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S5");
1074 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S6");
1075 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S7");
1076 Assert.AreEqual ("B", lvw.Items [4].Text, "#S8");
1077 Assert.AreEqual ("A", lvw.Items [5].Text, "#S9");
1079 // set Sorting to Ascending again
1080 lvw.Sorting = SortOrder.Ascending;
1081 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
1082 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
1083 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
1084 Assert.AreEqual ("C", lvw.Items [0].Text, "#T4");
1085 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T5");
1086 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T6");
1087 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T7");
1088 Assert.AreEqual ("B", lvw.Items [4].Text, "#T8");
1089 Assert.AreEqual ("A", lvw.Items [5].Text, "#T9");
1091 // record compare count
1092 compareCount = mc.CompareCount;
1094 // explicitly calling Sort results in a sort operation
1096 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
1097 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
1098 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
1099 Assert.AreEqual ("C", lvw.Items [0].Text, "#U4");
1100 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U5");
1101 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U6");
1102 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U7");
1103 Assert.AreEqual ("B", lvw.Items [4].Text, "#U8");
1104 Assert.AreEqual ("A", lvw.Items [5].Text, "#U9");
1105 lvw.Sorting = SortOrder.None;
1107 // record compare count
1108 compareCount = mc.CompareCount;
1110 // adding an item when Sorting is None causes re-sort
1111 lvw.Items.Add ("BD");
1112 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
1113 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
1114 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
1115 Assert.AreEqual ("A", lvw.Items [0].Text, "#V4");
1116 Assert.AreEqual ("B", lvw.Items [1].Text, "#V5");
1117 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V6");
1118 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
1119 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V8");
1120 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V9");
1121 Assert.AreEqual ("C", lvw.Items [6].Text, "#V10");
1123 // record compare count
1124 compareCount = mc.CompareCount;
1126 // explicitly calling Sort when Sorting is None causes a re-sort
1128 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
1129 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
1130 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
1131 Assert.AreEqual ("A", lvw.Items [0].Text, "#W4");
1132 Assert.AreEqual ("B", lvw.Items [1].Text, "#W5");
1133 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W6");
1134 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
1135 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W8");
1136 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W9");
1137 Assert.AreEqual ("C", lvw.Items [6].Text, "#W10");
1139 // record compare count
1140 compareCount = mc.CompareCount;
1144 private void AssertSortIcon_NotCreated (View view)
1146 Form form = new Form ();
1147 form.ShowInTaskbar = false;
1148 ListView lvw = CreateListView (view);
1149 form.Controls.Add (lvw);
1151 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
1152 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
1153 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
1154 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
1156 lvw.Sorting = SortOrder.None;
1157 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1158 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1159 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1160 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1162 lvw.Sorting = SortOrder.Descending;
1163 Assert.IsNotNull (lvw.ListViewItemSorter, "#C1");
1164 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1165 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1166 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1168 lvw.Sorting = SortOrder.Ascending;
1169 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
1170 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1171 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1172 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1174 // when the handle is not created and a new item is added, the new
1175 // item is just appended to the collection
1176 lvw.Items.Add ("BB");
1177 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
1178 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1179 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1180 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1181 Assert.AreEqual ("BB", lvw.Items [3].Text, "#E5");
1183 // assign a custom comparer
1184 MockComparer mc = new MockComparer (false);
1185 lvw.ListViewItemSorter = mc;
1187 // assigning a custom IComparer has no effect
1188 Assert.AreEqual (0, mc.CompareCount, "#F1");
1189 Assert.IsNotNull (lvw.ListViewItemSorter, "#F2");
1190 Assert.AreSame (mc, lvw.ListViewItemSorter, "#F3");
1191 Assert.AreEqual ("B", lvw.Items [0].Text, "#F4");
1192 Assert.AreEqual ("A", lvw.Items [1].Text, "#F5");
1193 Assert.AreEqual ("C", lvw.Items [2].Text, "#F6");
1194 Assert.AreEqual ("BB", lvw.Items [3].Text, "#F7");
1196 // modifying Sorting does not result in sort operation
1197 lvw.Sorting = SortOrder.Descending;
1198 Assert.AreEqual (0, mc.CompareCount, "#G1");
1199 Assert.IsNotNull (lvw.ListViewItemSorter, "#G2");
1200 Assert.AreSame (mc, lvw.ListViewItemSorter, "#G3");
1201 Assert.AreEqual ("B", lvw.Items [0].Text, "#G4");
1202 Assert.AreEqual ("A", lvw.Items [1].Text, "#G5");
1203 Assert.AreEqual ("C", lvw.Items [2].Text, "#G6");
1204 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G7");
1206 // setting Sorting to the same value does not result in a sort
1208 lvw.Sorting = SortOrder.Descending;
1209 Assert.AreEqual (0, mc.CompareCount, "#H1");
1210 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1211 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1212 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1213 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1214 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1215 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1217 // setting Sorting to None does not result in a sort operation
1218 lvw.Sorting = SortOrder.None;
1219 Assert.AreEqual (0, mc.CompareCount, "#I1");
1220 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1221 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1222 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1223 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1224 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1225 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1227 // explicitly calling Sort when Sorting is None does not result
1228 // in a sort operation
1230 Assert.AreEqual (0, mc.CompareCount, "#J1");
1231 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1232 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1233 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1234 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1235 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1236 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1238 // setting Sorting again does not result in a sort operation
1239 lvw.Sorting = SortOrder.Ascending;
1240 Assert.AreEqual (0, mc.CompareCount, "#K1");
1241 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1242 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1243 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1244 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1245 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1246 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1248 // explicitly calling Sort when Sorting is Ascending does not
1249 // result in a sort operation
1251 Assert.AreEqual (0, mc.CompareCount, "#L1");
1252 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1253 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1254 Assert.AreEqual ("B", lvw.Items [0].Text, "#L4");
1255 Assert.AreEqual ("A", lvw.Items [1].Text, "#L5");
1256 Assert.AreEqual ("C", lvw.Items [2].Text, "#L6");
1257 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1259 // show the form to create the handle
1262 // when the handle is created, the items are immediately sorted
1263 Assert.IsTrue (mc.CompareCount > 0, "#L1");
1264 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1265 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1266 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1267 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1268 Assert.AreEqual ("B", lvw.Items [2].Text, "#M6");
1269 Assert.AreEqual ("A", lvw.Items [3].Text, "#M7");
1271 // setting ListViewItemSorter to null does not result in sort
1273 lvw.ListViewItemSorter = null;
1274 Assert.IsNull (lvw.ListViewItemSorter, "#N1");
1275 Assert.AreEqual ("C", lvw.Items [0].Text, "#N2");
1276 Assert.AreEqual ("BB", lvw.Items [1].Text, "#N3");
1277 Assert.AreEqual ("B", lvw.Items [2].Text, "#N4");
1278 Assert.AreEqual ("A", lvw.Items [3].Text, "#N5");
1280 // explicitly calling sort does not result in sort operation
1282 Assert.IsNull (lvw.ListViewItemSorter, "#O1");
1283 Assert.AreEqual ("C", lvw.Items [0].Text, "#O2");
1284 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O3");
1285 Assert.AreEqual ("B", lvw.Items [2].Text, "#O4");
1286 Assert.AreEqual ("A", lvw.Items [3].Text, "#O5");
1291 private void AssertSortNoIcon_Created (View view)
1293 int compareCount = 0;
1295 Form form = new Form ();
1296 form.ShowInTaskbar = false;
1297 ListView lvw = CreateListView (view);
1298 form.Controls.Add (lvw);
1299 Assert.IsNull (lvw.ListViewItemSorter, "#A");
1303 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1304 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1305 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1306 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1308 lvw.Sorting = SortOrder.None;
1309 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1310 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1311 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1312 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1314 lvw.Sorting = SortOrder.Ascending;
1315 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1316 Assert.AreEqual ("A", lvw.Items [0].Text, "#D2");
1317 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
1318 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1320 lvw.Sorting = SortOrder.Descending;
1321 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1322 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
1323 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
1324 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
1326 lvw.Sorting = SortOrder.None;
1327 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1328 Assert.AreEqual ("C", lvw.Items [0].Text, "#F2");
1329 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
1330 Assert.AreEqual ("A", lvw.Items [2].Text, "#F4");
1332 // when Sorting is None and a new item is added, the item is
1333 // appended to the collection
1334 lvw.Items.Add ("BB");
1335 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1336 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
1337 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
1338 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
1339 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1341 lvw.Sorting = SortOrder.Ascending;
1342 Assert.IsNull (lvw.ListViewItemSorter, "#H1");
1343 Assert.AreEqual ("A", lvw.Items [0].Text, "#H2");
1344 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
1345 Assert.AreEqual ("BB", lvw.Items [2].Text, "#H4");
1346 Assert.AreEqual ("C", lvw.Items [3].Text, "#H5");
1348 // when Sorting is not None and a new item is added, the
1349 // collection is re-sorted automatically
1350 lvw.Items.Add ("BA");
1351 Assert.IsNull (lvw.ListViewItemSorter, "#I1");
1352 Assert.AreEqual ("A", lvw.Items [0].Text, "#I2");
1353 Assert.AreEqual ("B", lvw.Items [1].Text, "#I3");
1354 Assert.AreEqual ("BA", lvw.Items [2].Text, "#I4");
1355 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I5");
1356 Assert.AreEqual ("C", lvw.Items [4].Text, "#I6");
1358 // assign a custom comparer
1359 MockComparer mc = new MockComparer (false);
1360 lvw.ListViewItemSorter = mc;
1362 // when a custom IComparer is assigned, the collection is immediately
1364 Assert.IsTrue (mc.CompareCount > compareCount, "#J1");
1365 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1366 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1367 Assert.AreEqual ("C", lvw.Items [0].Text, "#J4");
1368 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J5");
1369 Assert.AreEqual ("BA", lvw.Items [2].Text, "#J6");
1370 Assert.AreEqual ("B", lvw.Items [3].Text, "#J7");
1371 Assert.AreEqual ("A", lvw.Items [4].Text, "#J8");
1373 // record compare count
1374 compareCount = mc.CompareCount;
1376 // modifying the sort order results in a sort
1377 lvw.Sorting = SortOrder.Descending;
1378 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
1379 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1380 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1381 Assert.AreEqual ("A", lvw.Items [0].Text, "#K4");
1382 Assert.AreEqual ("B", lvw.Items [1].Text, "#K5");
1383 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K6");
1384 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1385 Assert.AreEqual ("C", lvw.Items [4].Text, "#K8");
1387 // record compare count
1388 compareCount = mc.CompareCount;
1390 // set the sort order to the same value does not result in a sort
1392 lvw.Sorting = SortOrder.Descending;
1393 Assert.AreEqual (compareCount, mc.CompareCount, "#L1");
1394 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1395 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1396 Assert.AreEqual ("A", lvw.Items [0].Text, "#L4");
1397 Assert.AreEqual ("B", lvw.Items [1].Text, "#L5");
1398 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
1399 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1400 Assert.AreEqual ("C", lvw.Items [4].Text, "#L8");
1402 // modifying the sort order results in a sort
1403 lvw.Sorting = SortOrder.Ascending;
1404 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
1405 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1406 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1407 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1408 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1409 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
1410 Assert.AreEqual ("B", lvw.Items [3].Text, "#M7");
1411 Assert.AreEqual ("A", lvw.Items [4].Text, "#M8");
1413 // record compare count
1414 compareCount = mc.CompareCount;
1416 // adding an item when Sorting is not None caused a re-sort
1417 lvw.Items.Add ("BC");
1418 Assert.IsTrue (mc.CompareCount > compareCount, "#N1");
1419 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
1420 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
1421 Assert.AreEqual ("C", lvw.Items [0].Text, "#N4");
1422 Assert.AreEqual ("BC", lvw.Items [1].Text, "#N5");
1423 Assert.AreEqual ("BB", lvw.Items [2].Text, "#N6");
1424 Assert.AreEqual ("BA", lvw.Items [3].Text, "#N7");
1425 Assert.AreEqual ("B", lvw.Items [4].Text, "#N8");
1426 Assert.AreEqual ("A", lvw.Items [5].Text, "#N9");
1428 // record compare count
1429 compareCount = mc.CompareCount;
1431 // assigning the same custom IComparer again does not result in a
1433 lvw.ListViewItemSorter = mc;
1434 Assert.AreEqual (compareCount, mc.CompareCount, "#O1");
1435 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1436 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1437 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
1438 Assert.AreEqual ("BC", lvw.Items [1].Text, "#O5");
1439 Assert.AreEqual ("BB", lvw.Items [2].Text, "#O6");
1440 Assert.AreEqual ("BA", lvw.Items [3].Text, "#O7");
1441 Assert.AreEqual ("B", lvw.Items [4].Text, "#O8");
1442 Assert.AreEqual ("A", lvw.Items [5].Text, "#O9");
1444 // setting sort order to None does not perform a sort and resets
1445 // the ListViewItemSorter
1446 lvw.Sorting = SortOrder.None;
1447 Assert.AreEqual (compareCount, mc.CompareCount, "#P1");
1449 Assert.IsNull (lvw.ListViewItemSorter, "#P2");
1451 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2a");
1452 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P2b");
1454 Assert.AreEqual ("C", lvw.Items [0].Text, "#P3");
1455 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P4");
1456 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P5");
1457 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P6");
1458 Assert.AreEqual ("B", lvw.Items [4].Text, "#P7");
1459 Assert.AreEqual ("A", lvw.Items [5].Text, "#P8");
1462 lvw.ListViewItemSorter = mc;
1464 // assigning the previous custom IComparer again results in a
1466 Assert.IsTrue (mc.CompareCount > compareCount, "#Q1");
1467 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1468 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1469 Assert.AreEqual ("A", lvw.Items [0].Text, "#Q4");
1470 Assert.AreEqual ("B", lvw.Items [1].Text, "#Q5");
1471 Assert.AreEqual ("BA", lvw.Items [2].Text, "#Q6");
1472 Assert.AreEqual ("BB", lvw.Items [3].Text, "#Q7");
1473 Assert.AreEqual ("BC", lvw.Items [4].Text, "#Q8");
1474 Assert.AreEqual ("C", lvw.Items [5].Text, "#Q9");
1476 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
1477 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1478 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1479 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1480 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
1481 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
1482 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
1483 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
1484 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
1487 // record compare count
1488 compareCount = mc.CompareCount;
1490 // set Sorting to Ascending again to verify that the internal
1491 // IComparer is not used when we reset Sorting to None
1492 // (as the items would then be sorted alfabetically)
1493 lvw.Sorting = SortOrder.Ascending;
1494 Assert.IsTrue (mc.CompareCount > compareCount, "#R1");
1495 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
1496 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
1497 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
1498 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
1499 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
1500 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
1501 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
1502 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
1504 // record compare count
1505 compareCount = mc.CompareCount;
1507 lvw.Sorting = SortOrder.None;
1508 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
1510 Assert.IsNull (lvw.ListViewItemSorter, "#S2");
1512 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2a");
1513 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S2b");
1515 Assert.AreEqual ("C", lvw.Items [0].Text, "#S3");
1516 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S4");
1517 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S5");
1518 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S6");
1519 Assert.AreEqual ("B", lvw.Items [4].Text, "#S7");
1520 Assert.AreEqual ("A", lvw.Items [5].Text, "#S8");
1522 // record compare count
1523 compareCount = mc.CompareCount;
1525 lvw.Items.Add ("BD");
1527 // adding an item when Sorting is None does not cause a re-sort
1528 Assert.AreEqual (compareCount, mc.CompareCount, "#T1");
1529 Assert.IsNull (lvw.ListViewItemSorter, "#T2");
1530 Assert.AreEqual ("C", lvw.Items [0].Text, "#T3");
1531 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T4");
1532 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T5");
1533 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T6");
1534 Assert.AreEqual ("B", lvw.Items [4].Text, "#T7");
1535 Assert.AreEqual ("A", lvw.Items [5].Text, "#T8");
1536 Assert.AreEqual ("BD", lvw.Items [6].Text, "#T9");
1538 // adding an item when Sorting is None results in a re-sort
1539 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
1540 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
1541 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
1542 Assert.AreEqual ("A", lvw.Items [0].Text, "#T4");
1543 Assert.AreEqual ("B", lvw.Items [1].Text, "#T5");
1544 Assert.AreEqual ("BA", lvw.Items [2].Text, "#T6");
1545 Assert.AreEqual ("BB", lvw.Items [3].Text, "#T7");
1546 Assert.AreEqual ("BC", lvw.Items [4].Text, "#T8");
1547 Assert.AreEqual ("BD", lvw.Items [5].Text, "#T9");
1548 Assert.AreEqual ("C", lvw.Items [6].Text, "#T10");
1551 // record compare count
1552 compareCount = mc.CompareCount;
1556 // explicitly calling Sort when Sorting is None does nothing
1557 Assert.AreEqual (compareCount, mc.CompareCount, "#U1");
1558 Assert.IsNull (lvw.ListViewItemSorter, "#U2");
1559 Assert.AreEqual ("C", lvw.Items [0].Text, "#U3");
1560 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U4");
1561 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U5");
1562 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U6");
1563 Assert.AreEqual ("B", lvw.Items [4].Text, "#U7");
1564 Assert.AreEqual ("A", lvw.Items [5].Text, "#U8");
1565 Assert.AreEqual ("BD", lvw.Items [6].Text, "#U9");
1567 // explicitly calling Sort when Sorting is None results in a re-sort
1568 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
1569 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
1570 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
1571 Assert.AreEqual ("A", lvw.Items [0].Text, "#U4");
1572 Assert.AreEqual ("B", lvw.Items [1].Text, "#U5");
1573 Assert.AreEqual ("BA", lvw.Items [2].Text, "#U6");
1574 Assert.AreEqual ("BB", lvw.Items [3].Text, "#U7");
1575 Assert.AreEqual ("BC", lvw.Items [4].Text, "#U8");
1576 Assert.AreEqual ("BD", lvw.Items [5].Text, "#U9");
1577 Assert.AreEqual ("C", lvw.Items [6].Text, "#U10");
1580 // record compare count
1581 compareCount = mc.CompareCount;
1583 lvw.Sorting = SortOrder.Ascending;
1585 // setting Sorting again, does not reinstate the custom IComparer
1586 // but sorting is actually performed using an internal non-visible
1588 Assert.AreEqual (compareCount, mc.CompareCount, "#V1");
1589 Assert.IsNull (lvw.ListViewItemSorter, "#V2");
1590 Assert.AreEqual ("A", lvw.Items [0].Text, "#V3");
1591 Assert.AreEqual ("B", lvw.Items [1].Text, "#V4");
1592 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V5");
1593 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V6");
1594 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V7");
1595 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V8");
1596 Assert.AreEqual ("C", lvw.Items [6].Text, "#V9");
1598 // setting Sorting again, uses the custom IComparer to sort the items
1599 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
1600 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
1601 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
1602 Assert.AreEqual ("C", lvw.Items [0].Text, "#V4");
1603 Assert.AreEqual ("BD", lvw.Items [1].Text, "#V5");
1604 Assert.AreEqual ("BC", lvw.Items [2].Text, "#V6");
1605 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
1606 Assert.AreEqual ("BA", lvw.Items [4].Text, "#V8");
1607 Assert.AreEqual ("B", lvw.Items [5].Text, "#V9");
1608 Assert.AreEqual ("A", lvw.Items [6].Text, "#V10");
1611 // record compare count
1612 compareCount = mc.CompareCount;
1616 // explicitly calling Sort, does not reinstate the custom IComparer
1617 // but sorting is actually performed using an internal non-visible
1619 Assert.AreEqual (compareCount, mc.CompareCount, "#W1");
1620 Assert.IsNull (lvw.ListViewItemSorter, "#W2");
1621 Assert.AreEqual ("A", lvw.Items [0].Text, "#W3");
1622 Assert.AreEqual ("B", lvw.Items [1].Text, "#W4");
1623 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W5");
1624 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W6");
1625 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W7");
1626 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W8");
1627 Assert.AreEqual ("C", lvw.Items [6].Text, "#W9");
1629 // setting Sorting again, uses the custom IComparer to sort the items
1630 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
1631 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
1632 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
1633 Assert.AreEqual ("C", lvw.Items [0].Text, "#W4");
1634 Assert.AreEqual ("BD", lvw.Items [1].Text, "#W5");
1635 Assert.AreEqual ("BC", lvw.Items [2].Text, "#W6");
1636 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
1637 Assert.AreEqual ("BA", lvw.Items [4].Text, "#W8");
1638 Assert.AreEqual ("B", lvw.Items [5].Text, "#W9");
1639 Assert.AreEqual ("A", lvw.Items [6].Text, "#W10");
1642 // record compare count
1643 compareCount = mc.CompareCount;
1648 private void AssertSortNoIcon_NotCreated (View view)
1650 Form form = new Form ();
1651 form.ShowInTaskbar = false;
1652 ListView lvw = CreateListView (view);
1653 form.Controls.Add (lvw);
1655 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
1656 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
1657 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
1658 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
1660 lvw.Sorting = SortOrder.None;
1661 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1662 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1663 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1664 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1666 lvw.Sorting = SortOrder.Ascending;
1667 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1668 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1669 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1670 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1672 lvw.Sorting = SortOrder.Descending;
1673 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1674 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1675 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1676 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1678 lvw.Sorting = SortOrder.None;
1679 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1680 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1681 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1682 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1684 lvw.Sorting = SortOrder.Ascending;
1685 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1686 Assert.AreEqual ("B", lvw.Items [0].Text, "#F2");
1687 Assert.AreEqual ("A", lvw.Items [1].Text, "#F3");
1688 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
1690 // when the handle is not created and a new item is added, the new
1691 // item is just appended to the collection
1692 lvw.Items.Add ("BB");
1693 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1694 Assert.AreEqual ("B", lvw.Items [0].Text, "#G2");
1695 Assert.AreEqual ("A", lvw.Items [1].Text, "#G3");
1696 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
1697 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1699 // assign a custom comparer
1700 MockComparer mc = new MockComparer (false);
1701 lvw.ListViewItemSorter = mc;
1703 // assigning a custom IComparer has no effect
1704 Assert.AreEqual (0, mc.CompareCount, "#H1");
1705 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1706 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1707 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1708 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1709 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1710 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1712 // modifying Sorting has no effect
1713 lvw.Sorting = SortOrder.Descending;
1714 Assert.AreEqual (0, mc.CompareCount, "#I1");
1715 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1716 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1717 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1718 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1719 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1720 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1722 // setting Sorting to the same value does not result in a sort
1724 lvw.Sorting = SortOrder.Descending;
1725 Assert.AreEqual (0, mc.CompareCount, "#J1");
1726 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1727 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1728 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1729 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1730 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1731 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1733 // setting Sorting to another value does not result in a sort
1735 lvw.Sorting = SortOrder.Ascending;
1736 Assert.AreEqual (0, mc.CompareCount, "#K1");
1737 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1738 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1739 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1740 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1741 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1742 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1744 lvw.Sorting = SortOrder.None;
1745 Assert.AreEqual (0, mc.CompareCount, "#L1");
1747 // setting Sorting to None does not perform a sort and resets the
1748 // ListViewItemSorter
1749 Assert.IsNull (lvw.ListViewItemSorter, "#L2");
1751 // setting Sorting to None does not perform a sort
1752 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2a");
1753 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L2b");
1755 Assert.AreEqual ("B", lvw.Items [0].Text, "#L3");
1756 Assert.AreEqual ("A", lvw.Items [1].Text, "#L4");
1757 Assert.AreEqual ("C", lvw.Items [2].Text, "#L5");
1758 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L6");
1760 // explicitly calling Sort when Sorting is None does nothing
1762 Assert.AreEqual (0, mc.CompareCount, "#M1");
1764 Assert.IsNull (lvw.ListViewItemSorter, "#M2");
1766 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2a");
1767 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M2b");
1769 Assert.AreEqual ("B", lvw.Items [0].Text, "#M3");
1770 Assert.AreEqual ("A", lvw.Items [1].Text, "#M4");
1771 Assert.AreEqual ("C", lvw.Items [2].Text, "#M5");
1772 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M6");
1774 lvw.Sorting = SortOrder.Ascending;
1775 Assert.AreEqual (0, mc.CompareCount, "#N1");
1777 Assert.IsNull (lvw.ListViewItemSorter, "#N2");
1779 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2a");
1780 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N2b");
1782 Assert.AreEqual ("B", lvw.Items [0].Text, "#N3");
1783 Assert.AreEqual ("A", lvw.Items [1].Text, "#N4");
1784 Assert.AreEqual ("C", lvw.Items [2].Text, "#N5");
1785 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N6");
1787 // explicitly set the custom IComparer again
1788 lvw.ListViewItemSorter = mc;
1789 Assert.AreEqual (0, mc.CompareCount, "#O1");
1790 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1791 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1792 Assert.AreEqual ("B", lvw.Items [0].Text, "#O4");
1793 Assert.AreEqual ("A", lvw.Items [1].Text, "#O5");
1794 Assert.AreEqual ("C", lvw.Items [2].Text, "#O6");
1795 Assert.AreEqual ("BB", lvw.Items [3].Text, "#O7");
1797 // explicitly calling Sort when handle is not created does not
1798 // result in sort operation
1799 Assert.AreEqual (0, mc.CompareCount, "#P1");
1800 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
1801 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
1802 Assert.AreEqual ("B", lvw.Items [0].Text, "#P4");
1803 Assert.AreEqual ("A", lvw.Items [1].Text, "#P5");
1804 Assert.AreEqual ("C", lvw.Items [2].Text, "#P6");
1805 Assert.AreEqual ("BB", lvw.Items [3].Text, "#P7");
1807 // show the form to create the handle
1810 // when the handle is created, the items are immediately sorted
1811 Assert.IsTrue (mc.CompareCount > 0, "#Q1");
1812 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1813 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1814 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1815 Assert.AreEqual ("BB", lvw.Items [1].Text, "#Q5");
1816 Assert.AreEqual ("B", lvw.Items [2].Text, "#Q6");
1817 Assert.AreEqual ("A", lvw.Items [3].Text, "#Q7");
1819 // setting ListViewItemSorter to null does not result in sort
1821 lvw.ListViewItemSorter = null;
1822 Assert.IsNull (lvw.ListViewItemSorter, "#R1");
1823 Assert.AreEqual ("C", lvw.Items [0].Text, "#R2");
1824 Assert.AreEqual ("BB", lvw.Items [1].Text, "#R3");
1825 Assert.AreEqual ("B", lvw.Items [2].Text, "#R4");
1826 Assert.AreEqual ("A", lvw.Items [3].Text, "#R5");
1828 // explicitly calling sort does not result in sort operation
1830 Assert.IsNull (lvw.ListViewItemSorter, "#S1");
1831 Assert.AreEqual ("C", lvw.Items [0].Text, "#S2");
1832 Assert.AreEqual ("BB", lvw.Items [1].Text, "#S3");
1833 Assert.AreEqual ("B", lvw.Items [2].Text, "#S4");
1834 Assert.AreEqual ("A", lvw.Items [3].Text, "#S5");
1836 // modifying Sorting does not result in sort operation
1837 lvw.Sorting = SortOrder.Ascending;
1838 Assert.IsNull (lvw.ListViewItemSorter, "#T1");
1839 Assert.AreEqual ("C", lvw.Items [0].Text, "#T2");
1840 Assert.AreEqual ("BB", lvw.Items [1].Text, "#T3");
1841 Assert.AreEqual ("B", lvw.Items [2].Text, "#T4");
1842 Assert.AreEqual ("A", lvw.Items [3].Text, "#T5");
1847 private void AssertSort_Checked (View view)
1849 Form form = new Form ();
1850 form.ShowInTaskbar = false;
1851 ListView lvw = CreateListView (view);
1852 lvw.CheckBoxes = true;
1853 form.Controls.Add (lvw);
1857 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
1858 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
1861 lvw.Items [2].Checked = true;
1862 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
1863 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B2");
1864 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#B3");
1865 Assert.AreEqual (2, lvw.CheckedIndices [0], "#B4");
1867 // sort the items descending
1868 lvw.Sorting = SortOrder.Descending;
1869 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
1870 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C2");
1871 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#C3");
1872 Assert.AreEqual (0, lvw.CheckedIndices [0], "#C4");
1874 // add an item, which ends up before the selected item after the
1876 ListViewItem item = lvw.Items.Add ("D");
1877 Assert.AreEqual (1, lvw.CheckedItems.Count, "#D1");
1878 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#D2");
1879 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#D3");
1880 Assert.AreEqual (1, lvw.CheckedIndices [0], "#D4");
1882 // remove an item before the selected item
1883 lvw.Items.Remove (item);
1884 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
1885 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E2");
1886 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#E3");
1887 Assert.AreEqual (0, lvw.CheckedIndices [0], "#E4");
1889 // insert an item before the selected item
1890 lvw.Items.Insert (0, "D");
1891 Assert.AreEqual (1, lvw.CheckedItems.Count, "#F1");
1892 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#F2");
1893 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#F3");
1894 Assert.AreEqual (1, lvw.CheckedIndices [0], "#F4");
1896 // assign a custom comparer
1897 MockComparer mc = new MockComparer (false);
1898 lvw.ListViewItemSorter = mc;
1900 // items are re-sorted automatically
1901 Assert.AreEqual (1, lvw.CheckedItems.Count, "#G1");
1902 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#G2");
1903 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#G3");
1904 Assert.AreEqual (2, lvw.CheckedIndices [0], "#G4");
1906 // modify sort order
1907 lvw.Sorting = SortOrder.Ascending;
1908 Assert.AreEqual (1, lvw.CheckedItems.Count, "#H1");
1909 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#H2");
1910 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#H3");
1911 Assert.AreEqual (1, lvw.CheckedIndices [0], "#H4");
1916 private void AssertSort_Selected (View view)
1918 Form form = new Form ();
1919 form.ShowInTaskbar = false;
1920 ListView lvw = CreateListView (view);
1921 form.Controls.Add (lvw);
1925 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
1926 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
1929 lvw.Items [2].Selected = true;
1930 Assert.AreEqual (1, lvw.SelectedItems.Count, "#B1");
1931 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#B2");
1932 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#B3");
1933 Assert.AreEqual (2, lvw.SelectedIndices [0], "#B4");
1935 // sort the items descending
1936 lvw.Sorting = SortOrder.Descending;
1937 Assert.AreEqual (1, lvw.SelectedItems.Count, "#C1");
1938 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#C2");
1939 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#C3");
1940 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C4");
1942 // add an item, which ends up before the selected item after the
1944 ListViewItem item = lvw.Items.Add ("D");
1945 Assert.AreEqual (1, lvw.SelectedItems.Count, "#D1");
1946 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#D2");
1947 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#D3");
1948 Assert.AreEqual (1, lvw.SelectedIndices [0], "#D4");
1950 // remove an item before the selected item
1951 lvw.Items.Remove (item);
1952 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
1953 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E2");
1954 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#E3");
1955 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
1957 // insert an item before the selected item
1958 lvw.Items.Insert (0, "D");
1959 Assert.AreEqual (1, lvw.SelectedItems.Count, "#F1");
1960 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#F2");
1961 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#F3");
1962 Assert.AreEqual (1, lvw.SelectedIndices [0], "#F4");
1964 // assign a custom comparer
1965 MockComparer mc = new MockComparer (false);
1966 lvw.ListViewItemSorter = mc;
1968 // items are re-sorted automatically
1969 Assert.AreEqual (1, lvw.SelectedItems.Count, "#G1");
1970 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#G2");
1971 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#G3");
1972 Assert.AreEqual (2, lvw.SelectedIndices [0], "#G4");
1974 // modify sort order
1975 lvw.Sorting = SortOrder.Ascending;
1976 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
1977 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H2");
1978 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#H3");
1979 Assert.AreEqual (1, lvw.SelectedIndices [0], "#H4");
1984 private ListView CreateListView (View view)
1986 ListView lvw = new ListView ();
1988 lvw.Items.Add ("B");
1989 lvw.Items.Add ("A");
1990 lvw.Items.Add ("C");
1994 private class MockComparer : IComparer
1997 bool _throwException;
1999 public MockComparer (bool throwException)
2001 _throwException = throwException;
2004 public int CompareCount {
2005 get { return _compareCount; }
2008 public int Compare (object x, object y)
2011 if (_throwException)
2012 throw new InvalidOperationException ();
2014 ListViewItem item_x = x as ListViewItem;
2015 ListViewItem item_y = y as ListViewItem;
2016 SortOrder sortOrder = item_x.ListView.Sorting;
2018 // we'll actually perform a reverse-sort
2019 if (sortOrder == SortOrder.Ascending)
2020 return String.Compare (item_y.Text, item_x.Text);
2022 return String.Compare (item_x.Text, item_y.Text);