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 : TestHelper
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 ();
82 public void BeginEndUpdateTest ()
84 Form myform = new Form ();
85 myform.ShowInTaskbar = false;
86 myform.Visible = true;
87 ListView mylistview = new ListView();
88 mylistview.Items.Add ("A");
89 mylistview.Visible = true;
90 myform.Controls.Add (mylistview);
91 mylistview.BeginUpdate ();
92 for(int x = 1 ; x < 5000 ; x++){
93 mylistview.Items.Add ("Item " + x.ToString());
95 mylistview.EndUpdate ();
100 public void CheckBoxes ()
102 Form form = new Form ();
103 form.ShowInTaskbar = false;
104 ListView lvw = new ListView ();
105 form.Controls.Add (lvw);
107 ListViewItem itemB = lvw.Items.Add ("B");
109 itemB.Checked = true;
111 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
112 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
114 lvw.CheckBoxes = true;
116 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
117 Assert.AreSame (itemB, lvw.CheckedItems [0], "#B2");
118 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B3");
119 Assert.AreEqual (1, lvw.CheckedIndices [0], "#B4");
123 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
124 Assert.AreSame (itemB, lvw.CheckedItems [0], "#C2");
125 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C3");
126 Assert.AreEqual (1, lvw.CheckedIndices [0], "#C4");
128 lvw.CheckBoxes = false;
130 Assert.AreEqual (0, lvw.CheckedItems.Count, "#D1");
131 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#D2");
133 lvw.CheckBoxes = true;
135 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
136 Assert.AreSame (itemB, lvw.CheckedItems [0], "#E2");
137 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E3");
138 Assert.AreEqual (1, lvw.CheckedIndices [0], "#E4");
143 public void ClearTest ()
145 Form myform = new Form ();
146 myform.ShowInTaskbar = false;
147 myform.Visible = true;
148 ListView mylistview = new ListView ();
149 ListViewItem itemA = mylistview.Items.Add ("A");
150 ColumnHeader colA = mylistview.Columns.Add ("Item Column", -2, HorizontalAlignment.Left);
151 Assert.AreSame (mylistview, itemA.ListView, "#1");
152 Assert.AreSame (mylistview, colA.ListView, "#2");
153 mylistview.Visible = true;
154 myform.Controls.Add (mylistview);
155 Assert.AreEqual (1, mylistview.Columns.Count, "#3");
156 Assert.AreEqual (1, mylistview.Items.Count, "#4");
158 Assert.AreEqual (0, mylistview.Columns.Count, "#5");
159 Assert.AreEqual (0, mylistview.Items.Count, "#6");
160 Assert.IsNull (itemA.ListView, "#7");
161 Assert.IsNull (colA.ListView, "#8");
166 public void ClientRectangle_Borders ()
168 ListView lv = new ListView ();
170 Assert.AreEqual (lv.ClientRectangle, new ListView ().ClientRectangle);
174 public void DisposeTest ()
176 ListView lv = new ListView ();
177 lv.View = View.Details;
179 lv.LargeImageList = new ImageList ();
180 lv.SmallImageList = new ImageList ();
182 ListViewItem lvi = new ListViewItem ();
185 ColumnHeader col = new ColumnHeader ();
186 lv.Columns.Add (col);
190 Assert.IsNull (lvi.ListView, "#A1");
191 Assert.IsNull (col.ListView, "#A2");
193 Assert.IsNull (lv.LargeImageList, "#B1");
194 Assert.IsNull (lv.SmallImageList, "#B2");
195 Assert.IsNull(lv.StateImageList, "#B3");
200 public void EnsureVisibleTest ()
202 Form myform = new Form ();
203 myform.ShowInTaskbar = false;
204 myform.Visible = true;
205 ListView mylistview = new ListView ();
206 mylistview.Items.Add ("A");
207 myform.Controls.Add (mylistview);
208 mylistview.BeginUpdate ();
209 for(int x = 1 ; x < 5000 ; x++) {
210 mylistview.Items.Add ("Item " + x.ToString());
212 mylistview.EndUpdate ();
213 mylistview.EnsureVisible (4999);
218 public void GetItemRectTest ()
220 ListView mylistview = new ListView ();
221 mylistview.Items.Add ("Item 1");
222 mylistview.Items.Add ("Item 2");
223 Rectangle r = mylistview.GetItemRect (1);
224 Assert.AreEqual (0, r.Top, "#35a");
225 Assert.IsTrue (r.Bottom > 0, "#35b");
226 Assert.IsTrue (r.Right > 0, "#35c");
227 Assert.IsTrue (r.Left > 0, "#35d");
228 Assert.IsTrue (r.Height > 0, "#35e");
229 Assert.IsTrue (r.Width > 0, "#35f");
233 public void bug79076 ()
235 ListView entryList = new ListView ();
236 entryList.Sorting = SortOrder.Descending;
238 entryList.BeginUpdate ();
239 entryList.Columns.Add ("Type", 100, HorizontalAlignment.Left);
241 ListViewItem item = new ListViewItem (new string [] { "A" });
242 entryList.Items.Add (item);
243 item = new ListViewItem (new string [] { "B" });
244 entryList.Items.Add (item);
248 public void MultiSelect ()
250 Form form = new Form ();
251 form.ShowInTaskbar = false;
252 ListView lvw = CreateListView (View.Details);
253 form.Controls.Add (lvw);
254 lvw.MultiSelect = true;
255 lvw.Items [0].Selected = true;
256 lvw.Items [2].Selected = true;
258 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
259 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
261 lvw.Items [0].Selected = false;
263 Assert.AreEqual (0, lvw.SelectedItems.Count, "#B1");
264 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#B2");
266 lvw.Items [0].Selected = true;
268 Assert.AreEqual (0, lvw.SelectedItems.Count, "#C1");
269 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#C2");
273 Assert.AreEqual (2, lvw.SelectedItems.Count, "#D1");
274 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#D2");
275 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#D3");
276 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#D4");
277 Assert.AreEqual (0, lvw.SelectedIndices [0], "#D5");
278 Assert.AreEqual (2, lvw.SelectedIndices [1], "#D6");
281 lvw.Items [2].Selected = false;
283 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
284 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#E2");
285 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E3");
286 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
288 // re-select that item
289 lvw.Items [2].Selected = true;
291 Assert.AreEqual (2, lvw.SelectedItems.Count, "#F1");
292 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#F2");
293 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#F3");
294 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#F4");
295 Assert.AreEqual (0, lvw.SelectedIndices [0], "#F5");
296 Assert.AreEqual (2, lvw.SelectedIndices [1], "#F6");
298 // dis-allow selection of multiple items
299 lvw.MultiSelect = false;
301 // setting MultiSelect to false when multiple items have been
302 // selected does not deselect items
303 Assert.AreEqual (2, lvw.SelectedItems.Count, "#G1");
304 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#G2");
305 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#G3");
306 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#G4");
307 Assert.AreEqual (0, lvw.SelectedIndices [0], "#G5");
308 Assert.AreEqual (2, lvw.SelectedIndices [1], "#G6");
310 // de-select that item again
311 lvw.Items [2].Selected = false;
313 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
314 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#H2");
315 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H3");
316 Assert.AreEqual (0, lvw.SelectedIndices [0], "#H4");
318 // re-select that item again
319 lvw.Items [2].Selected = true;
321 // when MultiSelect is false, and you attempt to select more than
322 // one item, then all items will first be de-selected and then
323 // the item in question is selected
324 Assert.AreEqual (1, lvw.SelectedItems.Count, "#I1");
325 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#I2");
326 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#I3");
327 Assert.AreEqual (2, lvw.SelectedIndices [0], "#I4");
333 public void TopItem ()
335 ListView lvw = CreateListView (View.List);
338 Assert.AreEqual (lvw.Items [0], lvw.TopItem, "#A1");
340 lvw.TopItem = new ListViewItem ();
341 Assert.AreEqual (lvw.Items [0], lvw.TopItem, "#A2");
345 public void TopItem_Exceptions ()
347 ListView lvw = CreateListView (View.LargeIcon);
348 ListViewItem item = null;
351 lvw.TopItem = lvw.Items [2];
353 } catch (InvalidOperationException) {
359 } catch (InvalidOperationException) {
362 lvw.View = View.SmallIcon;
364 lvw.TopItem = lvw.Items [2];
366 } catch (InvalidOperationException) {
372 } catch (InvalidOperationException) {
375 lvw.View = View.Tile;
377 lvw.TopItem = lvw.Items [2];
379 } catch (InvalidOperationException) {
385 } catch (InvalidOperationException) {
391 public void Selected ()
393 Form form = new Form ();
394 form.ShowInTaskbar = false;
395 ListView lvw = CreateListView (View.Details);
396 form.Controls.Add (lvw);
397 lvw.MultiSelect = true;
398 lvw.Items [0].Selected = true;
399 lvw.Items [2].Selected = true;
401 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
402 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
406 Assert.AreEqual (2, lvw.SelectedItems.Count, "#C1");
407 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#C2");
408 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#C3");
409 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#C4");
410 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C5");
411 Assert.AreEqual (2, lvw.SelectedIndices [1], "#C6");
417 public void FindItemWithText ()
419 ListView lvw = new ListView();
420 ListViewItem lvi1 = new ListViewItem (String.Empty);
421 ListViewItem lvi2 = new ListViewItem ("angle bracket");
422 ListViewItem lvi3 = new ListViewItem ("bracket holder");
423 ListViewItem lvi4 = new ListViewItem ("bracket");
424 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
426 Assert.AreEqual (lvi1, lvw.FindItemWithText (String.Empty), "#A1");
427 Assert.AreEqual (lvi3, lvw.FindItemWithText ("bracket"), "#A2");
428 Assert.AreEqual (lvi3, lvw.FindItemWithText ("BrackeT"), "#A3");
429 Assert.IsNull (lvw.FindItemWithText ("holder"), "#A5");
431 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 3), "#B1");
433 Assert.AreEqual (lvw.Items [2], lvw.FindItemWithText ("bracket", true, 0, true), "#C1");
434 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 0, false), "#C2");
435 Assert.AreEqual(lvw.Items [3], lvw.FindItemWithText("BrackeT", true, 0, false), "#C3");
436 Assert.IsNull (lvw.FindItemWithText ("brack", true, 0, false), "#C4");
438 // Sub item search tests
442 lvi1.SubItems.Add ("car bracket");
443 lvi1.SubItems.Add ("C");
446 lvi2.SubItems.Add ("car");
450 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3 });
452 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0), "#D1");
453 Assert.AreEqual (lvi3, lvw.FindItemWithText ("C", true, 0), "#D2");
454 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 1), "#D3");
455 Assert.IsNull (lvw.FindItemWithText ("car", false, 0), "#D4");
457 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0, true), "#E1");
458 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 0, false), "#E2");
459 Assert.AreEqual (lvi2, lvw.FindItemWithText ("CaR", true, 0, false), "#E3");
463 public void FindItemWithText_Exceptions ()
465 ListView lvw = new ListView ();
467 // Shouldn't throw any exception
468 lvw.FindItemWithText (null);
471 lvw.FindItemWithText (null, false, 0);
473 } catch (ArgumentOutOfRangeException) {
477 lvw.FindItemWithText (null, false, lvw.Items.Count);
479 } catch (ArgumentOutOfRangeException) {
483 lvw.Items.Add ("bracket");
486 lvw.FindItemWithText (null);
488 } catch (ArgumentNullException) {
492 lvw.FindItemWithText ("bracket", false, -1);
494 } catch (ArgumentOutOfRangeException) {
498 lvw.FindItemWithText ("bracket", false, lvw.Items.Count);
500 } catch (ArgumentOutOfRangeException) {
505 public void FindNearestItem_Exceptions ()
507 ListView lvw = new ListView ();
511 lvw.View = View.Details;
513 lvw.FindNearestItem (SearchDirectionHint.Down, 0, 0);
515 } catch (InvalidOperationException) {
518 lvw.View = View.List;
520 lvw.FindNearestItem (SearchDirectionHint.Down, 0, 0);
522 } catch (InvalidOperationException) {
525 lvw.View = View.Tile;
527 lvw.FindNearestItem (SearchDirectionHint.Down, 0, 0);
529 } catch (InvalidOperationException) {
532 lvw.View = View.LargeIcon;
534 lvw.FindNearestItem ((SearchDirectionHint)666, 0, 0);
535 } catch (ArgumentOutOfRangeException) {
540 public void FocusedItem ()
542 ListView lvw = CreateListView (View.LargeIcon);
543 Form form = new Form ();
546 // FocusedItem setter ignores the value until form is shown
547 lvw.FocusedItem = lvw.Items [2];
548 Assert.AreEqual (null, lvw.FocusedItem, "#A1");
550 // It's not enough to create the ListView control
553 lvw.FocusedItem = lvw.Items [2];
554 Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A2");
556 lvw.FocusedItem = new ListViewItem ();
557 Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A3");
559 lvw.FocusedItem = null;
560 Assert.AreEqual (lvw.Items [2], lvw.FocusedItem, "#A4");
566 public void HotTracking ()
568 ListView lvw = new ListView ();
570 lvw.HotTracking = true;
571 Assert.AreEqual (true, lvw.HotTracking, "#A1");
572 Assert.AreEqual (true, lvw.HoverSelection, "#A2");
573 Assert.AreEqual (ItemActivation.OneClick, lvw.Activation, "#A3");
575 // HoverSelection and Activation keep the previous value
576 lvw.HotTracking = false;
577 Assert.AreEqual (false, lvw.HotTracking, "#B1");
578 Assert.AreEqual (true, lvw.HoverSelection, "#B2");
579 Assert.AreEqual (ItemActivation.OneClick, lvw.Activation, "#B3");
581 lvw.HotTracking = true;
583 lvw.HoverSelection = false;
585 } catch (ArgumentException) {
589 lvw.Activation = ItemActivation.Standard;
591 } catch (ArgumentException) {
596 public void RedrawItems_Exceptions ()
598 ListView lvw = new ListView ();
603 lvw.RedrawItems (-1, 1, true);
605 } catch (ArgumentOutOfRangeException) {
609 lvw.RedrawItems (0, -1, true);
611 } catch (ArgumentOutOfRangeException) {
615 lvw.RedrawItems (lvw.Items.Count, 1, true);
617 } catch (ArgumentOutOfRangeException) {
621 lvw.RedrawItems (0, lvw.Items.Count, true);
623 } catch (ArgumentOutOfRangeException) {
627 lvw.RedrawItems (1, 0, true);
629 } catch (ArgumentException) {
633 const int item_count = 3;
634 ListViewItem [] items = new ListViewItem [item_count];
637 public void VirtualMode ()
639 ListView lvw = new ListView ();
640 lvw.VirtualListSize = item_count;
641 lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
642 lvw.VirtualMode = true;
644 CreateListViewItems (item_count);
646 Assert.AreEqual (item_count, lvw.Items.Count, "#A1");
647 Assert.AreEqual (true, lvw.VirtualMode, "#A2");
649 Assert.AreEqual (items [0], lvw.Items [0], "#B1");
650 Assert.AreEqual (items [1], lvw.Items [1], "#B2");
651 Assert.AreEqual (items [2], lvw.Items [2], "#B3");
652 Assert.AreEqual (0, lvw.Items [0].Index, "#B4");
653 Assert.AreEqual (1, lvw.Items [1].Index, "#B5");
654 Assert.AreEqual (2, lvw.Items [2].Index, "#B6");
655 Assert.AreEqual (lvw, lvw.Items [0].ListView, "#B7");
656 Assert.AreEqual (lvw, lvw.Items [1].ListView, "#B8");
657 Assert.AreEqual (lvw, lvw.Items [2].ListView, "#B9");
659 // force to re-create the items, because we need a blank state
661 CreateListViewItems (item_count);
662 items [0].Name = "A";
663 items [1].Name = "B";
664 items [2].Name = "C";
666 Assert.AreEqual (items [0], lvw.Items ["A"], "#C1");
667 Assert.AreEqual (items [1], lvw.Items ["B"], "#C2");
668 Assert.AreEqual (items [2], lvw.Items ["C"], "#C3");
669 Assert.AreEqual (0, lvw.Items ["A"].Index, "#C4");
670 Assert.AreEqual (1, lvw.Items ["B"].Index, "#C5");
671 Assert.AreEqual (2, lvw.Items ["C"].Index, "#C6");
672 Assert.AreEqual (lvw, lvw.Items ["A"].ListView, "#C7");
673 Assert.AreEqual (lvw, lvw.Items ["B"].ListView, "#C8");
674 Assert.AreEqual (lvw, lvw.Items ["C"].ListView, "#C9");
675 Assert.IsNull (lvw.Items ["Invalid key"], "#C10");
676 Assert.IsNull (lvw.Items [String.Empty], "#C11");
678 Assert.AreEqual (false, lvw.Items.ContainsKey (String.Empty), "#D1");
679 Assert.AreEqual (false, lvw.Items.ContainsKey (null), "#D2");
680 Assert.AreEqual (true, lvw.Items.ContainsKey ("A"), "#D3");
681 Assert.AreEqual (true, lvw.Items.ContainsKey ("a"), "#D4");
682 Assert.AreEqual (true, lvw.Items.ContainsKey ("B"), "#D5");
685 void ListViewRetrieveVirtualItemHandler (object o, RetrieveVirtualItemEventArgs args)
687 args.Item = items [args.ItemIndex];
690 void CreateListViewItems(int count)
692 items = new ListViewItem [count];
694 for (int i = 0; i < count; i++)
695 items [i] = new ListViewItem (String.Empty);
699 public void VirtualMode_Exceptions()
701 ListView lvw = new ListView ();
703 lvw.Items.Add ("Simple item");
705 lvw.VirtualMode = true;
707 } catch (InvalidOperationException) {
711 lvw.VirtualMode = true;
712 lvw.VirtualListSize = 1;
714 lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
715 CreateListViewItems (1);
720 } catch (InvalidOperationException) {
725 public void VirtualListSize ()
727 ListView lvw = new ListView ();
729 lvw.VirtualListSize = item_count;
730 Assert.AreEqual (item_count, lvw.VirtualListSize, "#A1");
731 Assert.AreEqual (0, lvw.Items.Count, "#A2");
733 lvw.VirtualMode = true;
734 Assert.AreEqual (item_count, lvw.VirtualListSize, "#B1");
735 Assert.AreEqual (item_count, lvw.Items.Count, "#B2");
737 lvw.VirtualMode = false;
738 Assert.AreEqual (item_count, lvw.VirtualListSize, "#C1");
739 Assert.AreEqual (0, lvw.Items.Count, "#C2");
743 public void VirtualListSize_Exceptions ()
745 ListView lvw = new ListView ();
747 lvw.VirtualListSize = -1;
749 } catch (ArgumentException) {
755 public void Sort_Details_Checked ()
757 AssertSort_Checked (View.Details);
761 public void Sort_Details_Created ()
763 AssertSortNoIcon_Created (View.Details);
767 public void Sort_Details_NotCreated ()
769 AssertSortNoIcon_NotCreated (View.Details);
773 public void Sort_Details_Selected ()
775 AssertSort_Selected (View.Details);
779 public void Sort_LargeIcon_Checked ()
781 AssertSort_Checked (View.LargeIcon);
785 public void Sort_LargeIcon_Created ()
787 AssertSortIcon_Created (View.LargeIcon);
791 public void Sort_LargeIcon_NotCreated ()
793 AssertSortIcon_NotCreated (View.LargeIcon);
797 public void Sort_LargeIcon_Selected ()
799 AssertSort_Selected (View.LargeIcon);
803 public void Sort_List_Checked ()
805 AssertSort_Checked (View.List);
809 public void Sort_List_Created ()
811 AssertSortNoIcon_Created (View.List);
815 public void Sort_List_NotCreated ()
817 AssertSortNoIcon_NotCreated (View.List);
821 public void Sort_List_Selection ()
823 AssertSort_Selected (View.List);
827 public void Sort_SmallIcon_Checked ()
829 AssertSort_Checked (View.SmallIcon);
833 public void Sort_SmallIcon_Created ()
835 AssertSortIcon_Created (View.SmallIcon);
839 public void Sort_SmallIcon_NotCreated ()
841 AssertSortIcon_NotCreated (View.SmallIcon);
845 public void Sort_SmallIcon_Selection ()
847 AssertSort_Selected (View.SmallIcon);
852 [ExpectedException (typeof (NotSupportedException))]
853 public void Sort_Tile_Checked ()
855 AssertSort_Checked (View.Tile);
859 public void Sort_Tile_Created ()
861 AssertSortNoIcon_Created (View.Tile);
865 public void Sort_Tile_NotCreated ()
867 AssertSortNoIcon_NotCreated (View.Tile);
871 public void Sort_Tile_Selection ()
873 AssertSort_Selected (View.Tile);
877 private void AssertSortIcon_Created (View view)
879 int compareCount = 0;
881 Form form = new Form ();
882 form.ShowInTaskbar = false;
883 ListView lvw = CreateListView (view);
884 form.Controls.Add (lvw);
885 Assert.IsNull (lvw.ListViewItemSorter, "#A");
889 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
890 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
891 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
892 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
894 lvw.Sorting = SortOrder.None;
895 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
896 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
897 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
898 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
900 lvw.Sorting = SortOrder.Descending;
901 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
902 Assert.AreEqual ("C", lvw.Items [0].Text, "#D2");
903 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
904 Assert.AreEqual ("A", lvw.Items [2].Text, "#D4");
906 lvw.Sorting = SortOrder.Ascending;
907 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
909 Assert.AreEqual ("A", lvw.Items [0].Text, "#E2");
910 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
911 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
913 // in .NET 1.1, changing Sorting does not have any effect for
914 // SmallIcon and LargeIcon view if no custom comparer is used
915 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
916 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
917 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
920 lvw.Sorting = SortOrder.None;
921 Assert.IsNotNull (lvw.ListViewItemSorter, "#F1");
923 Assert.AreEqual ("A", lvw.Items [0].Text, "#F2");
924 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
925 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
927 // in .NET 1.1, changing Sorting does not have any effect for
928 // SmallIcon and LargeIcon view if no custom comparer is used
929 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
930 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
931 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
934 lvw.Sorting = SortOrder.Ascending;
935 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
937 Assert.AreEqual ("A", lvw.Items [0].Text, "#G2");
938 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
939 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
941 // in .NET 1.1, changing Sorting does not have any effect for
942 // SmallIcon and LargeIcon view if no custom comparer is used
943 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
944 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
945 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
948 lvw.Sorting = SortOrder.Descending;
949 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
950 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
951 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
952 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
954 lvw.Sorting = SortOrder.None;
955 Assert.IsNotNull (lvw.ListViewItemSorter, "#H1");
956 Assert.AreEqual ("C", lvw.Items [0].Text, "#H2");
957 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
958 Assert.AreEqual ("A", lvw.Items [2].Text, "#H4");
960 // when Sorting is None and a new item is added, the collection is
961 // sorted using the previous Sorting value
962 lvw.Items.Add ("BB");
963 Assert.IsNotNull (lvw.ListViewItemSorter, "#I1");
964 Assert.AreEqual ("C", lvw.Items [0].Text, "#I2");
965 Assert.AreEqual ("BB", lvw.Items [1].Text, "#I3");
966 Assert.AreEqual ("B", lvw.Items [2].Text, "#I4");
967 Assert.AreEqual ("A", lvw.Items [3].Text, "#I5");
969 lvw.Sorting = SortOrder.Ascending;
970 Assert.IsNotNull (lvw.ListViewItemSorter, "#J1");
972 Assert.AreEqual ("A", lvw.Items [0].Text, "#J2");
973 Assert.AreEqual ("B", lvw.Items [1].Text, "#J3");
974 Assert.AreEqual ("BB", lvw.Items [2].Text, "#J4");
975 Assert.AreEqual ("C", lvw.Items [3].Text, "#J5");
977 // in .NET 1.1, changing Sorting does not have any effect for
978 // SmallIcon and LargeIcon view if no custom comparer is used
979 Assert.AreEqual ("C", lvw.Items [0].Text, "#J2");
980 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J3");
981 Assert.AreEqual ("B", lvw.Items [2].Text, "#J4");
982 Assert.AreEqual ("A", lvw.Items [3].Text, "#J5");
985 // when Sorting is not None and a new item is added, the
986 // collection is re-sorted automatically
987 lvw.Items.Add ("BA");
988 Assert.IsNotNull (lvw.ListViewItemSorter, "#K1");
990 Assert.AreEqual ("A", lvw.Items [0].Text, "#K2");
991 Assert.AreEqual ("B", lvw.Items [1].Text, "#K3");
992 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
993 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K5");
994 Assert.AreEqual ("C", lvw.Items [4].Text, "#K6");
996 // in .NET 1.1, changing Sorting does not have any effect for
997 // SmallIcon and LargeIcon view if no custom comparer is used
998 Assert.AreEqual ("C", lvw.Items [0].Text, "#K2");
999 Assert.AreEqual ("BB", lvw.Items [1].Text, "#K3");
1000 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
1001 Assert.AreEqual ("B", lvw.Items [3].Text, "#K5");
1002 Assert.AreEqual ("A", lvw.Items [4].Text, "#K6");
1005 // assign a custom comparer
1006 MockComparer mc = new MockComparer (false);
1007 lvw.ListViewItemSorter = mc;
1009 // when a custom IComparer is assigned, the collection is immediately
1011 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
1012 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1013 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1014 Assert.AreEqual ("C", lvw.Items [0].Text, "#L4");
1015 Assert.AreEqual ("BB", lvw.Items [1].Text, "#L5");
1016 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
1017 Assert.AreEqual ("B", lvw.Items [3].Text, "#L7");
1018 Assert.AreEqual ("A", lvw.Items [4].Text, "#L8");
1020 // record compare count
1021 compareCount = mc.CompareCount;
1023 // modifying Sorting results in re-sort
1024 lvw.Sorting = SortOrder.Descending;
1025 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
1026 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1027 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1028 Assert.AreEqual ("A", lvw.Items [0].Text, "#M4");
1029 Assert.AreEqual ("B", lvw.Items [1].Text, "#M5");
1030 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
1031 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M7");
1032 Assert.AreEqual ("C", lvw.Items [4].Text, "#M8");
1034 // record compare count
1035 compareCount = mc.CompareCount;
1037 // setting Sorting to the same value does not result in a sort
1039 lvw.Sorting = SortOrder.Descending;
1040 Assert.AreEqual (compareCount, mc.CompareCount, "#N1");
1041 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
1042 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
1043 Assert.AreEqual ("A", lvw.Items [0].Text, "#N4");
1044 Assert.AreEqual ("B", lvw.Items [1].Text, "#N5");
1045 Assert.AreEqual ("BA", lvw.Items [2].Text, "#N6");
1046 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N7");
1047 Assert.AreEqual ("C", lvw.Items [4].Text, "#N8");
1049 // modifying Sorting results in re-sort
1050 lvw.Sorting = SortOrder.Ascending;
1051 Assert.IsTrue (mc.CompareCount > compareCount, "#O1");
1052 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1053 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1054 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
1055 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O5");
1056 Assert.AreEqual ("BA", lvw.Items [2].Text, "#O6");
1057 Assert.AreEqual ("B", lvw.Items [3].Text, "#O7");
1058 Assert.AreEqual ("A", lvw.Items [4].Text, "#O8");
1060 // record compare count
1061 compareCount = mc.CompareCount;
1063 // adding an item when Sorting is not None causes re-sort
1064 lvw.Items.Add ("BC");
1065 Assert.IsTrue (mc.CompareCount > compareCount, "#P1");
1066 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
1067 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
1068 Assert.AreEqual ("C", lvw.Items [0].Text, "#P4");
1069 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P5");
1070 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P6");
1071 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P7");
1072 Assert.AreEqual ("B", lvw.Items [4].Text, "#P8");
1073 Assert.AreEqual ("A", lvw.Items [5].Text, "#P9");
1075 // record compare count
1076 compareCount = mc.CompareCount;
1078 // assigning the same custom IComparer again does not result in a
1080 lvw.ListViewItemSorter = mc;
1081 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
1082 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1083 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1084 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1085 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
1086 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
1087 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
1088 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
1089 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
1091 // setting Sorting to None does not perform a sort
1092 lvw.Sorting = SortOrder.None;
1093 Assert.AreEqual (compareCount, mc.CompareCount, "#R1");
1094 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
1095 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
1096 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
1097 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
1098 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
1099 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
1100 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
1101 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
1103 // assigning the custom IComparer again does not result in a
1105 lvw.ListViewItemSorter = mc;
1106 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
1107 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2");
1108 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S3");
1109 Assert.AreEqual ("C", lvw.Items [0].Text, "#S4");
1110 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S5");
1111 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S6");
1112 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S7");
1113 Assert.AreEqual ("B", lvw.Items [4].Text, "#S8");
1114 Assert.AreEqual ("A", lvw.Items [5].Text, "#S9");
1116 // set Sorting to Ascending again
1117 lvw.Sorting = SortOrder.Ascending;
1118 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
1119 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
1120 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
1121 Assert.AreEqual ("C", lvw.Items [0].Text, "#T4");
1122 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T5");
1123 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T6");
1124 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T7");
1125 Assert.AreEqual ("B", lvw.Items [4].Text, "#T8");
1126 Assert.AreEqual ("A", lvw.Items [5].Text, "#T9");
1128 // record compare count
1129 compareCount = mc.CompareCount;
1131 // explicitly calling Sort results in a sort operation
1133 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
1134 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
1135 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
1136 Assert.AreEqual ("C", lvw.Items [0].Text, "#U4");
1137 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U5");
1138 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U6");
1139 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U7");
1140 Assert.AreEqual ("B", lvw.Items [4].Text, "#U8");
1141 Assert.AreEqual ("A", lvw.Items [5].Text, "#U9");
1142 lvw.Sorting = SortOrder.None;
1144 // record compare count
1145 compareCount = mc.CompareCount;
1147 // adding an item when Sorting is None causes re-sort
1148 lvw.Items.Add ("BD");
1149 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
1150 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
1151 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
1152 Assert.AreEqual ("A", lvw.Items [0].Text, "#V4");
1153 Assert.AreEqual ("B", lvw.Items [1].Text, "#V5");
1154 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V6");
1155 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
1156 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V8");
1157 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V9");
1158 Assert.AreEqual ("C", lvw.Items [6].Text, "#V10");
1160 // record compare count
1161 compareCount = mc.CompareCount;
1163 // explicitly calling Sort when Sorting is None causes a re-sort
1165 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
1166 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
1167 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
1168 Assert.AreEqual ("A", lvw.Items [0].Text, "#W4");
1169 Assert.AreEqual ("B", lvw.Items [1].Text, "#W5");
1170 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W6");
1171 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
1172 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W8");
1173 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W9");
1174 Assert.AreEqual ("C", lvw.Items [6].Text, "#W10");
1176 // record compare count
1177 compareCount = mc.CompareCount;
1181 private void AssertSortIcon_NotCreated (View view)
1183 Form form = new Form ();
1184 form.ShowInTaskbar = false;
1185 ListView lvw = CreateListView (view);
1186 form.Controls.Add (lvw);
1188 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
1189 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
1190 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
1191 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
1193 lvw.Sorting = SortOrder.None;
1194 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1195 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1196 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1197 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1199 lvw.Sorting = SortOrder.Descending;
1200 Assert.IsNotNull (lvw.ListViewItemSorter, "#C1");
1201 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1202 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1203 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1205 lvw.Sorting = SortOrder.Ascending;
1206 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
1207 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1208 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1209 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1211 // when the handle is not created and a new item is added, the new
1212 // item is just appended to the collection
1213 lvw.Items.Add ("BB");
1214 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
1215 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1216 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1217 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1218 Assert.AreEqual ("BB", lvw.Items [3].Text, "#E5");
1220 // assign a custom comparer
1221 MockComparer mc = new MockComparer (false);
1222 lvw.ListViewItemSorter = mc;
1224 // assigning a custom IComparer has no effect
1225 Assert.AreEqual (0, mc.CompareCount, "#F1");
1226 Assert.IsNotNull (lvw.ListViewItemSorter, "#F2");
1227 Assert.AreSame (mc, lvw.ListViewItemSorter, "#F3");
1228 Assert.AreEqual ("B", lvw.Items [0].Text, "#F4");
1229 Assert.AreEqual ("A", lvw.Items [1].Text, "#F5");
1230 Assert.AreEqual ("C", lvw.Items [2].Text, "#F6");
1231 Assert.AreEqual ("BB", lvw.Items [3].Text, "#F7");
1233 // modifying Sorting does not result in sort operation
1234 lvw.Sorting = SortOrder.Descending;
1235 Assert.AreEqual (0, mc.CompareCount, "#G1");
1236 Assert.IsNotNull (lvw.ListViewItemSorter, "#G2");
1237 Assert.AreSame (mc, lvw.ListViewItemSorter, "#G3");
1238 Assert.AreEqual ("B", lvw.Items [0].Text, "#G4");
1239 Assert.AreEqual ("A", lvw.Items [1].Text, "#G5");
1240 Assert.AreEqual ("C", lvw.Items [2].Text, "#G6");
1241 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G7");
1243 // setting Sorting to the same value does not result in a sort
1245 lvw.Sorting = SortOrder.Descending;
1246 Assert.AreEqual (0, mc.CompareCount, "#H1");
1247 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1248 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1249 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1250 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1251 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1252 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1254 // setting Sorting to None does not result in a sort operation
1255 lvw.Sorting = SortOrder.None;
1256 Assert.AreEqual (0, mc.CompareCount, "#I1");
1257 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1258 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1259 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1260 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1261 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1262 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1264 // explicitly calling Sort when Sorting is None does not result
1265 // in a sort operation
1267 Assert.AreEqual (0, mc.CompareCount, "#J1");
1268 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1269 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1270 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1271 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1272 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1273 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1275 // setting Sorting again does not result in a sort operation
1276 lvw.Sorting = SortOrder.Ascending;
1277 Assert.AreEqual (0, mc.CompareCount, "#K1");
1278 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1279 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1280 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1281 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1282 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1283 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1285 // explicitly calling Sort when Sorting is Ascending does not
1286 // result in a sort operation
1288 Assert.AreEqual (0, mc.CompareCount, "#L1");
1289 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1290 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1291 Assert.AreEqual ("B", lvw.Items [0].Text, "#L4");
1292 Assert.AreEqual ("A", lvw.Items [1].Text, "#L5");
1293 Assert.AreEqual ("C", lvw.Items [2].Text, "#L6");
1294 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1296 // show the form to create the handle
1299 // when the handle is created, the items are immediately sorted
1300 Assert.IsTrue (mc.CompareCount > 0, "#L1");
1301 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1302 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1303 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1304 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1305 Assert.AreEqual ("B", lvw.Items [2].Text, "#M6");
1306 Assert.AreEqual ("A", lvw.Items [3].Text, "#M7");
1308 // setting ListViewItemSorter to null does not result in sort
1310 lvw.ListViewItemSorter = null;
1311 Assert.IsNull (lvw.ListViewItemSorter, "#N1");
1312 Assert.AreEqual ("C", lvw.Items [0].Text, "#N2");
1313 Assert.AreEqual ("BB", lvw.Items [1].Text, "#N3");
1314 Assert.AreEqual ("B", lvw.Items [2].Text, "#N4");
1315 Assert.AreEqual ("A", lvw.Items [3].Text, "#N5");
1317 // explicitly calling sort does not result in sort operation
1319 Assert.IsNull (lvw.ListViewItemSorter, "#O1");
1320 Assert.AreEqual ("C", lvw.Items [0].Text, "#O2");
1321 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O3");
1322 Assert.AreEqual ("B", lvw.Items [2].Text, "#O4");
1323 Assert.AreEqual ("A", lvw.Items [3].Text, "#O5");
1328 private void AssertSortNoIcon_Created (View view)
1330 int compareCount = 0;
1332 Form form = new Form ();
1333 form.ShowInTaskbar = false;
1334 ListView lvw = CreateListView (view);
1335 form.Controls.Add (lvw);
1336 Assert.IsNull (lvw.ListViewItemSorter, "#A");
1340 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1341 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1342 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1343 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1345 lvw.Sorting = SortOrder.None;
1346 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1347 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1348 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1349 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1351 lvw.Sorting = SortOrder.Ascending;
1352 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1353 Assert.AreEqual ("A", lvw.Items [0].Text, "#D2");
1354 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
1355 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1357 lvw.Sorting = SortOrder.Descending;
1358 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1359 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
1360 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
1361 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
1363 lvw.Sorting = SortOrder.None;
1364 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1365 Assert.AreEqual ("C", lvw.Items [0].Text, "#F2");
1366 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
1367 Assert.AreEqual ("A", lvw.Items [2].Text, "#F4");
1369 // when Sorting is None and a new item is added, the item is
1370 // appended to the collection
1371 lvw.Items.Add ("BB");
1372 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1373 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
1374 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
1375 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
1376 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1378 lvw.Sorting = SortOrder.Ascending;
1379 Assert.IsNull (lvw.ListViewItemSorter, "#H1");
1380 Assert.AreEqual ("A", lvw.Items [0].Text, "#H2");
1381 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
1382 Assert.AreEqual ("BB", lvw.Items [2].Text, "#H4");
1383 Assert.AreEqual ("C", lvw.Items [3].Text, "#H5");
1385 // when Sorting is not None and a new item is added, the
1386 // collection is re-sorted automatically
1387 lvw.Items.Add ("BA");
1388 Assert.IsNull (lvw.ListViewItemSorter, "#I1");
1389 Assert.AreEqual ("A", lvw.Items [0].Text, "#I2");
1390 Assert.AreEqual ("B", lvw.Items [1].Text, "#I3");
1391 Assert.AreEqual ("BA", lvw.Items [2].Text, "#I4");
1392 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I5");
1393 Assert.AreEqual ("C", lvw.Items [4].Text, "#I6");
1395 // assign a custom comparer
1396 MockComparer mc = new MockComparer (false);
1397 lvw.ListViewItemSorter = mc;
1399 // when a custom IComparer is assigned, the collection is immediately
1401 Assert.IsTrue (mc.CompareCount > compareCount, "#J1");
1402 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1403 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1404 Assert.AreEqual ("C", lvw.Items [0].Text, "#J4");
1405 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J5");
1406 Assert.AreEqual ("BA", lvw.Items [2].Text, "#J6");
1407 Assert.AreEqual ("B", lvw.Items [3].Text, "#J7");
1408 Assert.AreEqual ("A", lvw.Items [4].Text, "#J8");
1410 // record compare count
1411 compareCount = mc.CompareCount;
1413 // modifying the sort order results in a sort
1414 lvw.Sorting = SortOrder.Descending;
1415 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
1416 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1417 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1418 Assert.AreEqual ("A", lvw.Items [0].Text, "#K4");
1419 Assert.AreEqual ("B", lvw.Items [1].Text, "#K5");
1420 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K6");
1421 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1422 Assert.AreEqual ("C", lvw.Items [4].Text, "#K8");
1424 // record compare count
1425 compareCount = mc.CompareCount;
1427 // set the sort order to the same value does not result in a sort
1429 lvw.Sorting = SortOrder.Descending;
1430 Assert.AreEqual (compareCount, mc.CompareCount, "#L1");
1431 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1432 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1433 Assert.AreEqual ("A", lvw.Items [0].Text, "#L4");
1434 Assert.AreEqual ("B", lvw.Items [1].Text, "#L5");
1435 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
1436 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1437 Assert.AreEqual ("C", lvw.Items [4].Text, "#L8");
1439 // modifying the sort order results in a sort
1440 lvw.Sorting = SortOrder.Ascending;
1441 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
1442 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1443 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1444 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1445 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1446 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
1447 Assert.AreEqual ("B", lvw.Items [3].Text, "#M7");
1448 Assert.AreEqual ("A", lvw.Items [4].Text, "#M8");
1450 // record compare count
1451 compareCount = mc.CompareCount;
1453 // adding an item when Sorting is not None caused a re-sort
1454 lvw.Items.Add ("BC");
1455 Assert.IsTrue (mc.CompareCount > compareCount, "#N1");
1456 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
1457 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
1458 Assert.AreEqual ("C", lvw.Items [0].Text, "#N4");
1459 Assert.AreEqual ("BC", lvw.Items [1].Text, "#N5");
1460 Assert.AreEqual ("BB", lvw.Items [2].Text, "#N6");
1461 Assert.AreEqual ("BA", lvw.Items [3].Text, "#N7");
1462 Assert.AreEqual ("B", lvw.Items [4].Text, "#N8");
1463 Assert.AreEqual ("A", lvw.Items [5].Text, "#N9");
1465 // record compare count
1466 compareCount = mc.CompareCount;
1468 // assigning the same custom IComparer again does not result in a
1470 lvw.ListViewItemSorter = mc;
1471 Assert.AreEqual (compareCount, mc.CompareCount, "#O1");
1472 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1473 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1474 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
1475 Assert.AreEqual ("BC", lvw.Items [1].Text, "#O5");
1476 Assert.AreEqual ("BB", lvw.Items [2].Text, "#O6");
1477 Assert.AreEqual ("BA", lvw.Items [3].Text, "#O7");
1478 Assert.AreEqual ("B", lvw.Items [4].Text, "#O8");
1479 Assert.AreEqual ("A", lvw.Items [5].Text, "#O9");
1481 // setting sort order to None does not perform a sort and resets
1482 // the ListViewItemSorter
1483 lvw.Sorting = SortOrder.None;
1484 Assert.AreEqual (compareCount, mc.CompareCount, "#P1");
1486 Assert.IsNull (lvw.ListViewItemSorter, "#P2");
1488 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2a");
1489 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P2b");
1491 Assert.AreEqual ("C", lvw.Items [0].Text, "#P3");
1492 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P4");
1493 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P5");
1494 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P6");
1495 Assert.AreEqual ("B", lvw.Items [4].Text, "#P7");
1496 Assert.AreEqual ("A", lvw.Items [5].Text, "#P8");
1499 lvw.ListViewItemSorter = mc;
1501 // assigning the previous custom IComparer again results in a
1503 Assert.IsTrue (mc.CompareCount > compareCount, "#Q1");
1504 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1505 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1506 Assert.AreEqual ("A", lvw.Items [0].Text, "#Q4");
1507 Assert.AreEqual ("B", lvw.Items [1].Text, "#Q5");
1508 Assert.AreEqual ("BA", lvw.Items [2].Text, "#Q6");
1509 Assert.AreEqual ("BB", lvw.Items [3].Text, "#Q7");
1510 Assert.AreEqual ("BC", lvw.Items [4].Text, "#Q8");
1511 Assert.AreEqual ("C", lvw.Items [5].Text, "#Q9");
1513 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
1514 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1515 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1516 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1517 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
1518 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
1519 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
1520 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
1521 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
1524 // record compare count
1525 compareCount = mc.CompareCount;
1527 // set Sorting to Ascending again to verify that the internal
1528 // IComparer is not used when we reset Sorting to None
1529 // (as the items would then be sorted alfabetically)
1530 lvw.Sorting = SortOrder.Ascending;
1531 Assert.IsTrue (mc.CompareCount > compareCount, "#R1");
1532 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
1533 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
1534 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
1535 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
1536 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
1537 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
1538 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
1539 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
1541 // record compare count
1542 compareCount = mc.CompareCount;
1544 lvw.Sorting = SortOrder.None;
1545 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
1547 Assert.IsNull (lvw.ListViewItemSorter, "#S2");
1549 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2a");
1550 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S2b");
1552 Assert.AreEqual ("C", lvw.Items [0].Text, "#S3");
1553 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S4");
1554 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S5");
1555 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S6");
1556 Assert.AreEqual ("B", lvw.Items [4].Text, "#S7");
1557 Assert.AreEqual ("A", lvw.Items [5].Text, "#S8");
1559 // record compare count
1560 compareCount = mc.CompareCount;
1562 lvw.Items.Add ("BD");
1564 // adding an item when Sorting is None does not cause a re-sort
1565 Assert.AreEqual (compareCount, mc.CompareCount, "#T1");
1566 Assert.IsNull (lvw.ListViewItemSorter, "#T2");
1567 Assert.AreEqual ("C", lvw.Items [0].Text, "#T3");
1568 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T4");
1569 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T5");
1570 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T6");
1571 Assert.AreEqual ("B", lvw.Items [4].Text, "#T7");
1572 Assert.AreEqual ("A", lvw.Items [5].Text, "#T8");
1573 Assert.AreEqual ("BD", lvw.Items [6].Text, "#T9");
1575 // adding an item when Sorting is None results in a re-sort
1576 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
1577 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
1578 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
1579 Assert.AreEqual ("A", lvw.Items [0].Text, "#T4");
1580 Assert.AreEqual ("B", lvw.Items [1].Text, "#T5");
1581 Assert.AreEqual ("BA", lvw.Items [2].Text, "#T6");
1582 Assert.AreEqual ("BB", lvw.Items [3].Text, "#T7");
1583 Assert.AreEqual ("BC", lvw.Items [4].Text, "#T8");
1584 Assert.AreEqual ("BD", lvw.Items [5].Text, "#T9");
1585 Assert.AreEqual ("C", lvw.Items [6].Text, "#T10");
1588 // record compare count
1589 compareCount = mc.CompareCount;
1593 // explicitly calling Sort when Sorting is None does nothing
1594 Assert.AreEqual (compareCount, mc.CompareCount, "#U1");
1595 Assert.IsNull (lvw.ListViewItemSorter, "#U2");
1596 Assert.AreEqual ("C", lvw.Items [0].Text, "#U3");
1597 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U4");
1598 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U5");
1599 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U6");
1600 Assert.AreEqual ("B", lvw.Items [4].Text, "#U7");
1601 Assert.AreEqual ("A", lvw.Items [5].Text, "#U8");
1602 Assert.AreEqual ("BD", lvw.Items [6].Text, "#U9");
1604 // explicitly calling Sort when Sorting is None results in a re-sort
1605 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
1606 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
1607 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
1608 Assert.AreEqual ("A", lvw.Items [0].Text, "#U4");
1609 Assert.AreEqual ("B", lvw.Items [1].Text, "#U5");
1610 Assert.AreEqual ("BA", lvw.Items [2].Text, "#U6");
1611 Assert.AreEqual ("BB", lvw.Items [3].Text, "#U7");
1612 Assert.AreEqual ("BC", lvw.Items [4].Text, "#U8");
1613 Assert.AreEqual ("BD", lvw.Items [5].Text, "#U9");
1614 Assert.AreEqual ("C", lvw.Items [6].Text, "#U10");
1617 // record compare count
1618 compareCount = mc.CompareCount;
1620 lvw.Sorting = SortOrder.Ascending;
1622 // setting Sorting again, does not reinstate the custom IComparer
1623 // but sorting is actually performed using an internal non-visible
1625 Assert.AreEqual (compareCount, mc.CompareCount, "#V1");
1626 Assert.IsNull (lvw.ListViewItemSorter, "#V2");
1627 Assert.AreEqual ("A", lvw.Items [0].Text, "#V3");
1628 Assert.AreEqual ("B", lvw.Items [1].Text, "#V4");
1629 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V5");
1630 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V6");
1631 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V7");
1632 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V8");
1633 Assert.AreEqual ("C", lvw.Items [6].Text, "#V9");
1635 // setting Sorting again, uses the custom IComparer to sort the items
1636 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
1637 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
1638 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
1639 Assert.AreEqual ("C", lvw.Items [0].Text, "#V4");
1640 Assert.AreEqual ("BD", lvw.Items [1].Text, "#V5");
1641 Assert.AreEqual ("BC", lvw.Items [2].Text, "#V6");
1642 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
1643 Assert.AreEqual ("BA", lvw.Items [4].Text, "#V8");
1644 Assert.AreEqual ("B", lvw.Items [5].Text, "#V9");
1645 Assert.AreEqual ("A", lvw.Items [6].Text, "#V10");
1648 // record compare count
1649 compareCount = mc.CompareCount;
1653 // explicitly calling Sort, does not reinstate the custom IComparer
1654 // but sorting is actually performed using an internal non-visible
1656 Assert.AreEqual (compareCount, mc.CompareCount, "#W1");
1657 Assert.IsNull (lvw.ListViewItemSorter, "#W2");
1658 Assert.AreEqual ("A", lvw.Items [0].Text, "#W3");
1659 Assert.AreEqual ("B", lvw.Items [1].Text, "#W4");
1660 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W5");
1661 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W6");
1662 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W7");
1663 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W8");
1664 Assert.AreEqual ("C", lvw.Items [6].Text, "#W9");
1666 // setting Sorting again, uses the custom IComparer to sort the items
1667 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
1668 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
1669 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
1670 Assert.AreEqual ("C", lvw.Items [0].Text, "#W4");
1671 Assert.AreEqual ("BD", lvw.Items [1].Text, "#W5");
1672 Assert.AreEqual ("BC", lvw.Items [2].Text, "#W6");
1673 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
1674 Assert.AreEqual ("BA", lvw.Items [4].Text, "#W8");
1675 Assert.AreEqual ("B", lvw.Items [5].Text, "#W9");
1676 Assert.AreEqual ("A", lvw.Items [6].Text, "#W10");
1679 // record compare count
1680 compareCount = mc.CompareCount;
1685 private void AssertSortNoIcon_NotCreated (View view)
1687 Form form = new Form ();
1688 form.ShowInTaskbar = false;
1689 ListView lvw = CreateListView (view);
1690 form.Controls.Add (lvw);
1692 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
1693 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
1694 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
1695 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
1697 lvw.Sorting = SortOrder.None;
1698 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1699 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1700 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1701 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1703 lvw.Sorting = SortOrder.Ascending;
1704 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1705 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1706 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1707 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1709 lvw.Sorting = SortOrder.Descending;
1710 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1711 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1712 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1713 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1715 lvw.Sorting = SortOrder.None;
1716 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1717 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1718 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1719 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1721 lvw.Sorting = SortOrder.Ascending;
1722 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1723 Assert.AreEqual ("B", lvw.Items [0].Text, "#F2");
1724 Assert.AreEqual ("A", lvw.Items [1].Text, "#F3");
1725 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
1727 // when the handle is not created and a new item is added, the new
1728 // item is just appended to the collection
1729 lvw.Items.Add ("BB");
1730 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1731 Assert.AreEqual ("B", lvw.Items [0].Text, "#G2");
1732 Assert.AreEqual ("A", lvw.Items [1].Text, "#G3");
1733 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
1734 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1736 // assign a custom comparer
1737 MockComparer mc = new MockComparer (false);
1738 lvw.ListViewItemSorter = mc;
1740 // assigning a custom IComparer has no effect
1741 Assert.AreEqual (0, mc.CompareCount, "#H1");
1742 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1743 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1744 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1745 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1746 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1747 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1749 // modifying Sorting has no effect
1750 lvw.Sorting = SortOrder.Descending;
1751 Assert.AreEqual (0, mc.CompareCount, "#I1");
1752 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1753 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1754 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1755 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1756 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1757 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1759 // setting Sorting to the same value does not result in a sort
1761 lvw.Sorting = SortOrder.Descending;
1762 Assert.AreEqual (0, mc.CompareCount, "#J1");
1763 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1764 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1765 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1766 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1767 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1768 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1770 // setting Sorting to another value does not result in a sort
1772 lvw.Sorting = SortOrder.Ascending;
1773 Assert.AreEqual (0, mc.CompareCount, "#K1");
1774 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1775 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1776 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1777 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1778 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1779 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1781 lvw.Sorting = SortOrder.None;
1782 Assert.AreEqual (0, mc.CompareCount, "#L1");
1784 // setting Sorting to None does not perform a sort and resets the
1785 // ListViewItemSorter
1786 Assert.IsNull (lvw.ListViewItemSorter, "#L2");
1788 // setting Sorting to None does not perform a sort
1789 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2a");
1790 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L2b");
1792 Assert.AreEqual ("B", lvw.Items [0].Text, "#L3");
1793 Assert.AreEqual ("A", lvw.Items [1].Text, "#L4");
1794 Assert.AreEqual ("C", lvw.Items [2].Text, "#L5");
1795 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L6");
1797 // explicitly calling Sort when Sorting is None does nothing
1799 Assert.AreEqual (0, mc.CompareCount, "#M1");
1801 Assert.IsNull (lvw.ListViewItemSorter, "#M2");
1803 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2a");
1804 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M2b");
1806 Assert.AreEqual ("B", lvw.Items [0].Text, "#M3");
1807 Assert.AreEqual ("A", lvw.Items [1].Text, "#M4");
1808 Assert.AreEqual ("C", lvw.Items [2].Text, "#M5");
1809 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M6");
1811 lvw.Sorting = SortOrder.Ascending;
1812 Assert.AreEqual (0, mc.CompareCount, "#N1");
1814 Assert.IsNull (lvw.ListViewItemSorter, "#N2");
1816 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2a");
1817 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N2b");
1819 Assert.AreEqual ("B", lvw.Items [0].Text, "#N3");
1820 Assert.AreEqual ("A", lvw.Items [1].Text, "#N4");
1821 Assert.AreEqual ("C", lvw.Items [2].Text, "#N5");
1822 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N6");
1824 // explicitly set the custom IComparer again
1825 lvw.ListViewItemSorter = mc;
1826 Assert.AreEqual (0, mc.CompareCount, "#O1");
1827 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1828 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1829 Assert.AreEqual ("B", lvw.Items [0].Text, "#O4");
1830 Assert.AreEqual ("A", lvw.Items [1].Text, "#O5");
1831 Assert.AreEqual ("C", lvw.Items [2].Text, "#O6");
1832 Assert.AreEqual ("BB", lvw.Items [3].Text, "#O7");
1834 // explicitly calling Sort when handle is not created does not
1835 // result in sort operation
1836 Assert.AreEqual (0, mc.CompareCount, "#P1");
1837 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
1838 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
1839 Assert.AreEqual ("B", lvw.Items [0].Text, "#P4");
1840 Assert.AreEqual ("A", lvw.Items [1].Text, "#P5");
1841 Assert.AreEqual ("C", lvw.Items [2].Text, "#P6");
1842 Assert.AreEqual ("BB", lvw.Items [3].Text, "#P7");
1844 // show the form to create the handle
1847 // when the handle is created, the items are immediately sorted
1848 Assert.IsTrue (mc.CompareCount > 0, "#Q1");
1849 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1850 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1851 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1852 Assert.AreEqual ("BB", lvw.Items [1].Text, "#Q5");
1853 Assert.AreEqual ("B", lvw.Items [2].Text, "#Q6");
1854 Assert.AreEqual ("A", lvw.Items [3].Text, "#Q7");
1856 // setting ListViewItemSorter to null does not result in sort
1858 lvw.ListViewItemSorter = null;
1859 Assert.IsNull (lvw.ListViewItemSorter, "#R1");
1860 Assert.AreEqual ("C", lvw.Items [0].Text, "#R2");
1861 Assert.AreEqual ("BB", lvw.Items [1].Text, "#R3");
1862 Assert.AreEqual ("B", lvw.Items [2].Text, "#R4");
1863 Assert.AreEqual ("A", lvw.Items [3].Text, "#R5");
1865 // explicitly calling sort does not result in sort operation
1867 Assert.IsNull (lvw.ListViewItemSorter, "#S1");
1868 Assert.AreEqual ("C", lvw.Items [0].Text, "#S2");
1869 Assert.AreEqual ("BB", lvw.Items [1].Text, "#S3");
1870 Assert.AreEqual ("B", lvw.Items [2].Text, "#S4");
1871 Assert.AreEqual ("A", lvw.Items [3].Text, "#S5");
1873 // modifying Sorting does not result in sort operation
1874 lvw.Sorting = SortOrder.Ascending;
1875 Assert.IsNull (lvw.ListViewItemSorter, "#T1");
1876 Assert.AreEqual ("C", lvw.Items [0].Text, "#T2");
1877 Assert.AreEqual ("BB", lvw.Items [1].Text, "#T3");
1878 Assert.AreEqual ("B", lvw.Items [2].Text, "#T4");
1879 Assert.AreEqual ("A", lvw.Items [3].Text, "#T5");
1884 private void AssertSort_Checked (View view)
1886 Form form = new Form ();
1887 form.ShowInTaskbar = false;
1888 ListView lvw = CreateListView (view);
1889 lvw.CheckBoxes = true;
1890 form.Controls.Add (lvw);
1894 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
1895 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
1898 lvw.Items [2].Checked = true;
1899 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
1900 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B2");
1901 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#B3");
1902 Assert.AreEqual (2, lvw.CheckedIndices [0], "#B4");
1904 // sort the items descending
1905 lvw.Sorting = SortOrder.Descending;
1906 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
1907 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C2");
1908 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#C3");
1909 Assert.AreEqual (0, lvw.CheckedIndices [0], "#C4");
1911 // add an item, which ends up before the selected item after the
1913 ListViewItem item = lvw.Items.Add ("D");
1914 Assert.AreEqual (1, lvw.CheckedItems.Count, "#D1");
1915 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#D2");
1916 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#D3");
1917 Assert.AreEqual (1, lvw.CheckedIndices [0], "#D4");
1919 // remove an item before the selected item
1920 lvw.Items.Remove (item);
1921 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
1922 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E2");
1923 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#E3");
1924 Assert.AreEqual (0, lvw.CheckedIndices [0], "#E4");
1926 // insert an item before the selected item
1927 lvw.Items.Insert (0, "D");
1928 Assert.AreEqual (1, lvw.CheckedItems.Count, "#F1");
1929 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#F2");
1930 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#F3");
1931 Assert.AreEqual (1, lvw.CheckedIndices [0], "#F4");
1933 // assign a custom comparer
1934 MockComparer mc = new MockComparer (false);
1935 lvw.ListViewItemSorter = mc;
1937 // items are re-sorted automatically
1938 Assert.AreEqual (1, lvw.CheckedItems.Count, "#G1");
1939 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#G2");
1940 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#G3");
1941 Assert.AreEqual (2, lvw.CheckedIndices [0], "#G4");
1943 // modify sort order
1944 lvw.Sorting = SortOrder.Ascending;
1945 Assert.AreEqual (1, lvw.CheckedItems.Count, "#H1");
1946 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#H2");
1947 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#H3");
1948 Assert.AreEqual (1, lvw.CheckedIndices [0], "#H4");
1953 private void AssertSort_Selected (View view)
1955 Form form = new Form ();
1956 form.ShowInTaskbar = false;
1957 ListView lvw = CreateListView (view);
1958 form.Controls.Add (lvw);
1962 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
1963 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
1966 lvw.Items [2].Selected = true;
1967 Assert.AreEqual (1, lvw.SelectedItems.Count, "#B1");
1968 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#B2");
1969 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#B3");
1970 Assert.AreEqual (2, lvw.SelectedIndices [0], "#B4");
1972 // sort the items descending
1973 lvw.Sorting = SortOrder.Descending;
1974 Assert.AreEqual (1, lvw.SelectedItems.Count, "#C1");
1975 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#C2");
1976 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#C3");
1977 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C4");
1979 // add an item, which ends up before the selected item after the
1981 ListViewItem item = lvw.Items.Add ("D");
1982 Assert.AreEqual (1, lvw.SelectedItems.Count, "#D1");
1983 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#D2");
1984 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#D3");
1985 Assert.AreEqual (1, lvw.SelectedIndices [0], "#D4");
1987 // remove an item before the selected item
1988 lvw.Items.Remove (item);
1989 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
1990 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E2");
1991 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#E3");
1992 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
1994 // insert an item before the selected item
1995 lvw.Items.Insert (0, "D");
1996 Assert.AreEqual (1, lvw.SelectedItems.Count, "#F1");
1997 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#F2");
1998 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#F3");
1999 Assert.AreEqual (1, lvw.SelectedIndices [0], "#F4");
2001 // assign a custom comparer
2002 MockComparer mc = new MockComparer (false);
2003 lvw.ListViewItemSorter = mc;
2005 // items are re-sorted automatically
2006 Assert.AreEqual (1, lvw.SelectedItems.Count, "#G1");
2007 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#G2");
2008 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#G3");
2009 Assert.AreEqual (2, lvw.SelectedIndices [0], "#G4");
2011 // modify sort order
2012 lvw.Sorting = SortOrder.Ascending;
2013 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
2014 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H2");
2015 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#H3");
2016 Assert.AreEqual (1, lvw.SelectedIndices [0], "#H4");
2021 private ListView CreateListView (View view)
2023 ListView lvw = new ListView ();
2025 lvw.Items.Add ("B");
2026 lvw.Items.Add ("A");
2027 lvw.Items.Add ("C");
2031 private class MockComparer : IComparer
2034 bool _throwException;
2036 public MockComparer (bool throwException)
2038 _throwException = throwException;
2041 public int CompareCount {
2042 get { return _compareCount; }
2045 public int Compare (object x, object y)
2048 if (_throwException)
2049 throw new InvalidOperationException ();
2051 ListViewItem item_x = x as ListViewItem;
2052 ListViewItem item_y = y as ListViewItem;
2053 SortOrder sortOrder = item_x.ListView.Sorting;
2055 // we'll actually perform a reverse-sort
2056 if (sortOrder == SortOrder.Ascending)
2057 return String.Compare (item_y.Text, item_x.Text);
2059 return String.Compare (item_x.Text, item_y.Text);
2064 public void MethodIsInputChar ()
2066 // Basically, show that this method always returns true
2067 InputCharControl m = new InputCharControl ();
2070 for (int i = 0; i < 256; i++)
2071 result &= m.PublicIsInputChar ((char)i);
2073 Assert.AreEqual (true, result, "I1");
2076 private class InputCharControl : ListView
2078 public bool PublicIsInputChar (char charCode)
2080 return base.IsInputChar (charCode);