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");
63 public void ArrangeIconsTest ()
65 Form myform = new Form ();
66 myform.ShowInTaskbar = false;
67 ListView mylistview = new ListView ();
68 myform.Controls.Add (mylistview);
69 mylistview.Items.Add ("Item 1");
70 mylistview.Items.Add ("Item 2");
71 mylistview.View = View.LargeIcon;
72 mylistview.ArrangeIcons ();
77 public void BeginEndUpdateTest ()
79 Form myform = new Form ();
80 myform.ShowInTaskbar = false;
81 myform.Visible = true;
82 ListView mylistview = new ListView();
83 mylistview.Items.Add ("A");
84 mylistview.Visible = true;
85 myform.Controls.Add (mylistview);
86 mylistview.BeginUpdate ();
87 for(int x = 1 ; x < 5000 ; x++){
88 mylistview.Items.Add ("Item " + x.ToString());
90 mylistview.EndUpdate ();
95 public void CheckBoxes ()
97 Form form = new Form ();
98 form.ShowInTaskbar = false;
99 ListView lvw = new ListView ();
100 form.Controls.Add (lvw);
102 ListViewItem itemB = lvw.Items.Add ("B");
104 itemB.Checked = true;
106 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
107 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
109 lvw.CheckBoxes = true;
111 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
112 Assert.AreSame (itemB, lvw.CheckedItems [0], "#B2");
113 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B3");
114 Assert.AreEqual (1, lvw.CheckedIndices [0], "#B4");
118 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
119 Assert.AreSame (itemB, lvw.CheckedItems [0], "#C2");
120 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C3");
121 Assert.AreEqual (1, lvw.CheckedIndices [0], "#C4");
123 lvw.CheckBoxes = false;
125 Assert.AreEqual (0, lvw.CheckedItems.Count, "#D1");
126 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#D2");
128 lvw.CheckBoxes = true;
130 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
131 Assert.AreSame (itemB, lvw.CheckedItems [0], "#E2");
132 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E3");
133 Assert.AreEqual (1, lvw.CheckedIndices [0], "#E4");
138 public void ClearTest ()
140 Form myform = new Form ();
141 myform.ShowInTaskbar = false;
142 myform.Visible = true;
143 ListView mylistview = new ListView ();
144 ListViewItem itemA = mylistview.Items.Add ("A");
145 ColumnHeader colA = mylistview.Columns.Add ("Item Column", -2, HorizontalAlignment.Left);
146 Assert.AreSame (mylistview, itemA.ListView, "#1");
147 Assert.AreSame (mylistview, colA.ListView, "#2");
148 mylistview.Visible = true;
149 myform.Controls.Add (mylistview);
150 Assert.AreEqual (1, mylistview.Columns.Count, "#3");
151 Assert.AreEqual (1, mylistview.Items.Count, "#4");
153 Assert.AreEqual (0, mylistview.Columns.Count, "#5");
154 Assert.AreEqual (0, mylistview.Items.Count, "#6");
155 Assert.IsNull (itemA.ListView, "#7");
156 Assert.IsNull (colA.ListView, "#8");
161 public void ClientRectangle_Borders ()
163 ListView lv = new ListView ();
165 Assert.AreEqual (lv.ClientRectangle, new ListView ().ClientRectangle);
169 public void DisposeTest ()
171 ListView lv = new ListView ();
172 lv.View = View.Details;
174 lv.LargeImageList = new ImageList ();
175 lv.SmallImageList = new ImageList ();
177 ListViewItem lvi = new ListViewItem ();
180 ColumnHeader col = new ColumnHeader ();
181 lv.Columns.Add (col);
185 Assert.IsNull (lvi.ListView, "#A1");
186 Assert.IsNull (col.ListView, "#A2");
188 Assert.IsNull (lv.LargeImageList, "#B1");
189 Assert.IsNull (lv.SmallImageList, "#B2");
190 Assert.IsNull(lv.StateImageList, "#B3");
194 public void EnsureVisibleTest ()
196 Form myform = new Form ();
197 myform.ShowInTaskbar = false;
198 myform.Visible = true;
199 ListView mylistview = new ListView ();
200 mylistview.Items.Add ("A");
201 myform.Controls.Add (mylistview);
202 mylistview.BeginUpdate ();
203 for(int x = 1 ; x < 5000 ; x++) {
204 mylistview.Items.Add ("Item " + x.ToString());
206 mylistview.EndUpdate ();
207 mylistview.EnsureVisible (4999);
212 public void GetItemRectTest ()
214 ListView mylistview = new ListView ();
215 mylistview.Items.Add ("Item 1");
216 mylistview.Items.Add ("Item 2");
217 Rectangle r = mylistview.GetItemRect (1);
218 Assert.AreEqual (0, r.Top, "#35a");
219 Assert.IsTrue (r.Bottom > 0, "#35b");
220 Assert.IsTrue (r.Right > 0, "#35c");
221 Assert.IsTrue (r.Left > 0, "#35d");
222 Assert.IsTrue (r.Height > 0, "#35e");
223 Assert.IsTrue (r.Width > 0, "#35f");
227 public void bug79076 ()
229 ListView entryList = new ListView ();
230 entryList.Sorting = SortOrder.Descending;
232 entryList.BeginUpdate ();
233 entryList.Columns.Add ("Type", 100, HorizontalAlignment.Left);
235 ListViewItem item = new ListViewItem (new string [] { "A" });
236 entryList.Items.Add (item);
237 item = new ListViewItem (new string [] { "B" });
238 entryList.Items.Add (item);
242 public void MultiSelect ()
244 Form form = new Form ();
245 form.ShowInTaskbar = false;
246 ListView lvw = CreateListView (View.Details);
247 form.Controls.Add (lvw);
248 lvw.MultiSelect = true;
249 lvw.Items [0].Selected = true;
250 lvw.Items [2].Selected = true;
252 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
253 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
255 lvw.Items [0].Selected = false;
257 Assert.AreEqual (0, lvw.SelectedItems.Count, "#B1");
258 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#B2");
260 lvw.Items [0].Selected = true;
262 Assert.AreEqual (0, lvw.SelectedItems.Count, "#C1");
263 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#C2");
267 Assert.AreEqual (2, lvw.SelectedItems.Count, "#D1");
268 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#D2");
269 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#D3");
270 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#D4");
271 Assert.AreEqual (0, lvw.SelectedIndices [0], "#D5");
272 Assert.AreEqual (2, lvw.SelectedIndices [1], "#D6");
275 lvw.Items [2].Selected = false;
277 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
278 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#E2");
279 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E3");
280 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
282 // re-select that item
283 lvw.Items [2].Selected = true;
285 Assert.AreEqual (2, lvw.SelectedItems.Count, "#F1");
286 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#F2");
287 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#F3");
288 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#F4");
289 Assert.AreEqual (0, lvw.SelectedIndices [0], "#F5");
290 Assert.AreEqual (2, lvw.SelectedIndices [1], "#F6");
292 // dis-allow selection of multiple items
293 lvw.MultiSelect = false;
295 // setting MultiSelect to false when multiple items have been
296 // selected does not deselect items
297 Assert.AreEqual (2, lvw.SelectedItems.Count, "#G1");
298 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#G2");
299 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#G3");
300 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#G4");
301 Assert.AreEqual (0, lvw.SelectedIndices [0], "#G5");
302 Assert.AreEqual (2, lvw.SelectedIndices [1], "#G6");
304 // de-select that item again
305 lvw.Items [2].Selected = false;
307 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
308 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#H2");
309 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H3");
310 Assert.AreEqual (0, lvw.SelectedIndices [0], "#H4");
312 // re-select that item again
313 lvw.Items [2].Selected = true;
315 // when MultiSelect is false, and you attempt to select more than
316 // one item, then all items will first be de-selected and then
317 // the item in question is selected
318 Assert.AreEqual (1, lvw.SelectedItems.Count, "#I1");
319 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#I2");
320 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#I3");
321 Assert.AreEqual (2, lvw.SelectedIndices [0], "#I4");
326 public void Selected ()
328 Form form = new Form ();
329 form.ShowInTaskbar = false;
330 ListView lvw = CreateListView (View.Details);
331 form.Controls.Add (lvw);
332 lvw.MultiSelect = true;
333 lvw.Items [0].Selected = true;
334 lvw.Items [2].Selected = true;
336 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
337 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
341 Assert.AreEqual (2, lvw.SelectedItems.Count, "#C1");
342 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#C2");
343 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#C3");
344 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#C4");
345 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C5");
346 Assert.AreEqual (2, lvw.SelectedIndices [1], "#C6");
352 public void FindItemWithText ()
354 ListView lvw = new ListView();
355 ListViewItem lvi1 = new ListViewItem (String.Empty);
356 ListViewItem lvi2 = new ListViewItem ("angle bracket");
357 ListViewItem lvi3 = new ListViewItem ("bracket holder");
358 ListViewItem lvi4 = new ListViewItem ("bracket");
359 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
361 Assert.AreEqual (lvi1, lvw.FindItemWithText (String.Empty), "#A1");
362 Assert.AreEqual (lvi3, lvw.FindItemWithText ("bracket"), "#A2");
363 Assert.AreEqual (lvi3, lvw.FindItemWithText ("BrackeT"), "#A3");
364 Assert.IsNull (lvw.FindItemWithText ("holder"), "#A5");
366 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 3), "#B1");
368 Assert.AreEqual (lvw.Items [2], lvw.FindItemWithText ("bracket", true, 0, true), "#C1");
369 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 0, false), "#C2");
370 Assert.AreEqual(lvw.Items [3], lvw.FindItemWithText("BrackeT", true, 0, false), "#C3");
371 Assert.IsNull (lvw.FindItemWithText ("brack", true, 0, false), "#C4");
373 // Sub item search tests
377 lvi1.SubItems.Add ("car bracket");
378 lvi1.SubItems.Add ("C");
381 lvi2.SubItems.Add ("car");
385 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3 });
387 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0), "#D1");
388 Assert.AreEqual (lvi3, lvw.FindItemWithText ("C", true, 0), "#D2");
389 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 1), "#D3");
390 Assert.IsNull (lvw.FindItemWithText ("car", false, 0), "#D4");
392 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0, true), "#E1");
393 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 0, false), "#E2");
394 Assert.AreEqual (lvi2, lvw.FindItemWithText ("CaR", true, 0, false), "#E3");
398 public void FindItemWithText_Exceptions ()
400 ListView lvw = new ListView ();
402 // Shouldn't throw any exception
403 lvw.FindItemWithText (null);
406 lvw.FindItemWithText (null, false, 0);
408 } catch (ArgumentOutOfRangeException) {
412 lvw.FindItemWithText (null, false, lvw.Items.Count);
414 } catch (ArgumentOutOfRangeException) {
418 lvw.Items.Add ("bracket");
421 lvw.FindItemWithText (null);
423 } catch (ArgumentNullException) {
427 lvw.FindItemWithText ("bracket", false, -1);
429 } catch (ArgumentOutOfRangeException) {
433 lvw.FindItemWithText ("bracket", false, lvw.Items.Count);
435 } catch (ArgumentOutOfRangeException) {
439 const int item_count = 3;
440 ListViewItem [] items = new ListViewItem [item_count];
443 public void VirtualMode ()
445 ListView lvw = new ListView ();
446 lvw.VirtualListSize = item_count;
447 lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
448 lvw.VirtualMode = true;
450 CreateListViewItems (item_count);
452 Assert.AreEqual (item_count, lvw.Items.Count, "#A1");
453 Assert.AreEqual (true, lvw.VirtualMode, "#A2");
455 Assert.AreEqual (items [0], lvw.Items [0], "#B1");
456 Assert.AreEqual (items [1], lvw.Items [1], "#B2");
457 Assert.AreEqual (items [2], lvw.Items [2], "#B3");
458 Assert.AreEqual (0, lvw.Items [0].Index, "#B4");
459 Assert.AreEqual (1, lvw.Items [1].Index, "#B5");
460 Assert.AreEqual (2, lvw.Items [2].Index, "#B6");
461 Assert.AreEqual (lvw, lvw.Items [0].ListView, "#B7");
462 Assert.AreEqual (lvw, lvw.Items [1].ListView, "#B8");
463 Assert.AreEqual (lvw, lvw.Items [2].ListView, "#B9");
465 // force to re-create the items, because we need a blank state
467 CreateListViewItems (item_count);
468 items [0].Name = "A";
469 items [1].Name = "B";
470 items [2].Name = "C";
472 Assert.AreEqual (items [0], lvw.Items ["A"], "#C1");
473 Assert.AreEqual (items [1], lvw.Items ["B"], "#C2");
474 Assert.AreEqual (items [2], lvw.Items ["C"], "#C3");
475 Assert.AreEqual (0, lvw.Items ["A"].Index, "#C4");
476 Assert.AreEqual (1, lvw.Items ["B"].Index, "#C5");
477 Assert.AreEqual (2, lvw.Items ["C"].Index, "#C6");
478 Assert.AreEqual (lvw, lvw.Items ["A"].ListView, "#C7");
479 Assert.AreEqual (lvw, lvw.Items ["B"].ListView, "#C8");
480 Assert.AreEqual (lvw, lvw.Items ["C"].ListView, "#C9");
481 Assert.IsNull (lvw.Items ["Invalid key"], "#C10");
482 Assert.IsNull (lvw.Items [String.Empty], "#C11");
484 Assert.AreEqual (false, lvw.Items.ContainsKey (String.Empty), "#D1");
485 Assert.AreEqual (false, lvw.Items.ContainsKey (null), "#D2");
486 Assert.AreEqual (true, lvw.Items.ContainsKey ("A"), "#D3");
487 Assert.AreEqual (true, lvw.Items.ContainsKey ("a"), "#D4");
488 Assert.AreEqual (true, lvw.Items.ContainsKey ("B"), "#D5");
491 void ListViewRetrieveVirtualItemHandler (object o, RetrieveVirtualItemEventArgs args)
493 args.Item = items [args.ItemIndex];
496 void CreateListViewItems(int count)
498 items = new ListViewItem [count];
500 for (int i = 0; i < count; i++)
501 items [i] = new ListViewItem (String.Empty);
505 public void VirtualMode_Exceptions()
507 ListView lvw = new ListView ();
509 lvw.Items.Add ("Simple item");
511 lvw.VirtualMode = true;
513 } catch (InvalidOperationException) {
517 lvw.VirtualMode = true;
518 lvw.VirtualListSize = 1;
520 lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
521 CreateListViewItems (1);
526 } catch (InvalidOperationException) {
531 public void VirtualListSize ()
533 ListView lvw = new ListView ();
535 lvw.VirtualListSize = item_count;
536 Assert.AreEqual (item_count, lvw.VirtualListSize, "#A1");
537 Assert.AreEqual (0, lvw.Items.Count, "#A2");
539 lvw.VirtualMode = true;
540 Assert.AreEqual (item_count, lvw.VirtualListSize, "#B1");
541 Assert.AreEqual (item_count, lvw.Items.Count, "#B2");
543 lvw.VirtualMode = false;
544 Assert.AreEqual (item_count, lvw.VirtualListSize, "#C1");
545 Assert.AreEqual (0, lvw.Items.Count, "#C2");
549 public void VirtualListSize_Exceptions ()
551 ListView lvw = new ListView ();
553 lvw.VirtualListSize = -1;
555 } catch (ArgumentException) {
561 public void Sort_Details_Checked ()
563 AssertSort_Checked (View.Details);
567 public void Sort_Details_Created ()
569 AssertSortNoIcon_Created (View.Details);
573 public void Sort_Details_NotCreated ()
575 AssertSortNoIcon_NotCreated (View.Details);
579 public void Sort_Details_Selected ()
581 AssertSort_Selected (View.Details);
585 public void Sort_LargeIcon_Checked ()
587 AssertSort_Checked (View.LargeIcon);
591 public void Sort_LargeIcon_Created ()
593 AssertSortIcon_Created (View.LargeIcon);
597 public void Sort_LargeIcon_NotCreated ()
599 AssertSortIcon_NotCreated (View.LargeIcon);
603 public void Sort_LargeIcon_Selected ()
605 AssertSort_Selected (View.LargeIcon);
609 public void Sort_List_Checked ()
611 AssertSort_Checked (View.List);
615 public void Sort_List_Created ()
617 AssertSortNoIcon_Created (View.List);
621 public void Sort_List_NotCreated ()
623 AssertSortNoIcon_NotCreated (View.List);
627 public void Sort_List_Selection ()
629 AssertSort_Selected (View.List);
633 public void Sort_SmallIcon_Checked ()
635 AssertSort_Checked (View.SmallIcon);
639 public void Sort_SmallIcon_Created ()
641 AssertSortIcon_Created (View.SmallIcon);
645 public void Sort_SmallIcon_NotCreated ()
647 AssertSortIcon_NotCreated (View.SmallIcon);
651 public void Sort_SmallIcon_Selection ()
653 AssertSort_Selected (View.SmallIcon);
658 [ExpectedException (typeof (NotSupportedException))]
659 public void Sort_Tile_Checked ()
661 AssertSort_Checked (View.Tile);
665 public void Sort_Tile_Created ()
667 AssertSortNoIcon_Created (View.Tile);
671 public void Sort_Tile_NotCreated ()
673 AssertSortNoIcon_NotCreated (View.Tile);
677 public void Sort_Tile_Selection ()
679 AssertSort_Selected (View.Tile);
683 private void AssertSortIcon_Created (View view)
685 int compareCount = 0;
687 Form form = new Form ();
688 form.ShowInTaskbar = false;
689 ListView lvw = CreateListView (view);
690 form.Controls.Add (lvw);
691 Assert.IsNull (lvw.ListViewItemSorter, "#A");
695 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
696 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
697 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
698 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
700 lvw.Sorting = SortOrder.None;
701 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
702 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
703 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
704 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
706 lvw.Sorting = SortOrder.Descending;
707 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
708 Assert.AreEqual ("C", lvw.Items [0].Text, "#D2");
709 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
710 Assert.AreEqual ("A", lvw.Items [2].Text, "#D4");
712 lvw.Sorting = SortOrder.Ascending;
713 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
715 Assert.AreEqual ("A", lvw.Items [0].Text, "#E2");
716 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
717 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
719 // in .NET 1.1, changing Sorting does not have any effect for
720 // SmallIcon and LargeIcon view if no custom comparer is used
721 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
722 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
723 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
726 lvw.Sorting = SortOrder.None;
727 Assert.IsNotNull (lvw.ListViewItemSorter, "#F1");
729 Assert.AreEqual ("A", lvw.Items [0].Text, "#F2");
730 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
731 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
733 // in .NET 1.1, changing Sorting does not have any effect for
734 // SmallIcon and LargeIcon view if no custom comparer is used
735 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
736 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
737 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
740 lvw.Sorting = SortOrder.Ascending;
741 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
743 Assert.AreEqual ("A", lvw.Items [0].Text, "#G2");
744 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
745 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
747 // in .NET 1.1, changing Sorting does not have any effect for
748 // SmallIcon and LargeIcon view if no custom comparer is used
749 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
750 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
751 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
754 lvw.Sorting = SortOrder.Descending;
755 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
756 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
757 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
758 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
760 lvw.Sorting = SortOrder.None;
761 Assert.IsNotNull (lvw.ListViewItemSorter, "#H1");
762 Assert.AreEqual ("C", lvw.Items [0].Text, "#H2");
763 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
764 Assert.AreEqual ("A", lvw.Items [2].Text, "#H4");
766 // when Sorting is None and a new item is added, the collection is
767 // sorted using the previous Sorting value
768 lvw.Items.Add ("BB");
769 Assert.IsNotNull (lvw.ListViewItemSorter, "#I1");
770 Assert.AreEqual ("C", lvw.Items [0].Text, "#I2");
771 Assert.AreEqual ("BB", lvw.Items [1].Text, "#I3");
772 Assert.AreEqual ("B", lvw.Items [2].Text, "#I4");
773 Assert.AreEqual ("A", lvw.Items [3].Text, "#I5");
775 lvw.Sorting = SortOrder.Ascending;
776 Assert.IsNotNull (lvw.ListViewItemSorter, "#J1");
778 Assert.AreEqual ("A", lvw.Items [0].Text, "#J2");
779 Assert.AreEqual ("B", lvw.Items [1].Text, "#J3");
780 Assert.AreEqual ("BB", lvw.Items [2].Text, "#J4");
781 Assert.AreEqual ("C", lvw.Items [3].Text, "#J5");
783 // in .NET 1.1, changing Sorting does not have any effect for
784 // SmallIcon and LargeIcon view if no custom comparer is used
785 Assert.AreEqual ("C", lvw.Items [0].Text, "#J2");
786 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J3");
787 Assert.AreEqual ("B", lvw.Items [2].Text, "#J4");
788 Assert.AreEqual ("A", lvw.Items [3].Text, "#J5");
791 // when Sorting is not None and a new item is added, the
792 // collection is re-sorted automatically
793 lvw.Items.Add ("BA");
794 Assert.IsNotNull (lvw.ListViewItemSorter, "#K1");
796 Assert.AreEqual ("A", lvw.Items [0].Text, "#K2");
797 Assert.AreEqual ("B", lvw.Items [1].Text, "#K3");
798 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
799 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K5");
800 Assert.AreEqual ("C", lvw.Items [4].Text, "#K6");
802 // in .NET 1.1, changing Sorting does not have any effect for
803 // SmallIcon and LargeIcon view if no custom comparer is used
804 Assert.AreEqual ("C", lvw.Items [0].Text, "#K2");
805 Assert.AreEqual ("BB", lvw.Items [1].Text, "#K3");
806 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
807 Assert.AreEqual ("B", lvw.Items [3].Text, "#K5");
808 Assert.AreEqual ("A", lvw.Items [4].Text, "#K6");
811 // assign a custom comparer
812 MockComparer mc = new MockComparer (false);
813 lvw.ListViewItemSorter = mc;
815 // when a custom IComparer is assigned, the collection is immediately
817 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
818 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
819 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
820 Assert.AreEqual ("C", lvw.Items [0].Text, "#L4");
821 Assert.AreEqual ("BB", lvw.Items [1].Text, "#L5");
822 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
823 Assert.AreEqual ("B", lvw.Items [3].Text, "#L7");
824 Assert.AreEqual ("A", lvw.Items [4].Text, "#L8");
826 // record compare count
827 compareCount = mc.CompareCount;
829 // modifying Sorting results in re-sort
830 lvw.Sorting = SortOrder.Descending;
831 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
832 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
833 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
834 Assert.AreEqual ("A", lvw.Items [0].Text, "#M4");
835 Assert.AreEqual ("B", lvw.Items [1].Text, "#M5");
836 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
837 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M7");
838 Assert.AreEqual ("C", lvw.Items [4].Text, "#M8");
840 // record compare count
841 compareCount = mc.CompareCount;
843 // setting Sorting to the same value does not result in a sort
845 lvw.Sorting = SortOrder.Descending;
846 Assert.AreEqual (compareCount, mc.CompareCount, "#N1");
847 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
848 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
849 Assert.AreEqual ("A", lvw.Items [0].Text, "#N4");
850 Assert.AreEqual ("B", lvw.Items [1].Text, "#N5");
851 Assert.AreEqual ("BA", lvw.Items [2].Text, "#N6");
852 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N7");
853 Assert.AreEqual ("C", lvw.Items [4].Text, "#N8");
855 // modifying Sorting results in re-sort
856 lvw.Sorting = SortOrder.Ascending;
857 Assert.IsTrue (mc.CompareCount > compareCount, "#O1");
858 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
859 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
860 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
861 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O5");
862 Assert.AreEqual ("BA", lvw.Items [2].Text, "#O6");
863 Assert.AreEqual ("B", lvw.Items [3].Text, "#O7");
864 Assert.AreEqual ("A", lvw.Items [4].Text, "#O8");
866 // record compare count
867 compareCount = mc.CompareCount;
869 // adding an item when Sorting is not None causes re-sort
870 lvw.Items.Add ("BC");
871 Assert.IsTrue (mc.CompareCount > compareCount, "#P1");
872 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
873 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
874 Assert.AreEqual ("C", lvw.Items [0].Text, "#P4");
875 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P5");
876 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P6");
877 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P7");
878 Assert.AreEqual ("B", lvw.Items [4].Text, "#P8");
879 Assert.AreEqual ("A", lvw.Items [5].Text, "#P9");
881 // record compare count
882 compareCount = mc.CompareCount;
884 // assigning the same custom IComparer again does not result in a
886 lvw.ListViewItemSorter = mc;
887 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
888 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
889 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
890 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
891 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
892 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
893 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
894 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
895 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
897 // setting Sorting to None does not perform a sort
898 lvw.Sorting = SortOrder.None;
899 Assert.AreEqual (compareCount, mc.CompareCount, "#R1");
900 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
901 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
902 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
903 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
904 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
905 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
906 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
907 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
909 // assigning the custom IComparer again does not result in a
911 lvw.ListViewItemSorter = mc;
912 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
913 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2");
914 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S3");
915 Assert.AreEqual ("C", lvw.Items [0].Text, "#S4");
916 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S5");
917 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S6");
918 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S7");
919 Assert.AreEqual ("B", lvw.Items [4].Text, "#S8");
920 Assert.AreEqual ("A", lvw.Items [5].Text, "#S9");
922 // set Sorting to Ascending again
923 lvw.Sorting = SortOrder.Ascending;
924 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
925 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
926 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
927 Assert.AreEqual ("C", lvw.Items [0].Text, "#T4");
928 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T5");
929 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T6");
930 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T7");
931 Assert.AreEqual ("B", lvw.Items [4].Text, "#T8");
932 Assert.AreEqual ("A", lvw.Items [5].Text, "#T9");
934 // record compare count
935 compareCount = mc.CompareCount;
937 // explicitly calling Sort results in a sort operation
939 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
940 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
941 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
942 Assert.AreEqual ("C", lvw.Items [0].Text, "#U4");
943 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U5");
944 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U6");
945 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U7");
946 Assert.AreEqual ("B", lvw.Items [4].Text, "#U8");
947 Assert.AreEqual ("A", lvw.Items [5].Text, "#U9");
948 lvw.Sorting = SortOrder.None;
950 // record compare count
951 compareCount = mc.CompareCount;
953 // adding an item when Sorting is None causes re-sort
954 lvw.Items.Add ("BD");
955 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
956 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
957 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
958 Assert.AreEqual ("A", lvw.Items [0].Text, "#V4");
959 Assert.AreEqual ("B", lvw.Items [1].Text, "#V5");
960 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V6");
961 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
962 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V8");
963 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V9");
964 Assert.AreEqual ("C", lvw.Items [6].Text, "#V10");
966 // record compare count
967 compareCount = mc.CompareCount;
969 // explicitly calling Sort when Sorting is None causes a re-sort
971 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
972 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
973 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
974 Assert.AreEqual ("A", lvw.Items [0].Text, "#W4");
975 Assert.AreEqual ("B", lvw.Items [1].Text, "#W5");
976 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W6");
977 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
978 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W8");
979 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W9");
980 Assert.AreEqual ("C", lvw.Items [6].Text, "#W10");
982 // record compare count
983 compareCount = mc.CompareCount;
987 private void AssertSortIcon_NotCreated (View view)
989 Form form = new Form ();
990 form.ShowInTaskbar = false;
991 ListView lvw = CreateListView (view);
992 form.Controls.Add (lvw);
994 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
995 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
996 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
997 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
999 lvw.Sorting = SortOrder.None;
1000 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1001 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1002 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1003 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1005 lvw.Sorting = SortOrder.Descending;
1006 Assert.IsNotNull (lvw.ListViewItemSorter, "#C1");
1007 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1008 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1009 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1011 lvw.Sorting = SortOrder.Ascending;
1012 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
1013 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1014 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1015 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1017 // when the handle is not created and a new item is added, the new
1018 // item is just appended to the collection
1019 lvw.Items.Add ("BB");
1020 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
1021 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1022 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1023 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1024 Assert.AreEqual ("BB", lvw.Items [3].Text, "#E5");
1026 // assign a custom comparer
1027 MockComparer mc = new MockComparer (false);
1028 lvw.ListViewItemSorter = mc;
1030 // assigning a custom IComparer has no effect
1031 Assert.AreEqual (0, mc.CompareCount, "#F1");
1032 Assert.IsNotNull (lvw.ListViewItemSorter, "#F2");
1033 Assert.AreSame (mc, lvw.ListViewItemSorter, "#F3");
1034 Assert.AreEqual ("B", lvw.Items [0].Text, "#F4");
1035 Assert.AreEqual ("A", lvw.Items [1].Text, "#F5");
1036 Assert.AreEqual ("C", lvw.Items [2].Text, "#F6");
1037 Assert.AreEqual ("BB", lvw.Items [3].Text, "#F7");
1039 // modifying Sorting does not result in sort operation
1040 lvw.Sorting = SortOrder.Descending;
1041 Assert.AreEqual (0, mc.CompareCount, "#G1");
1042 Assert.IsNotNull (lvw.ListViewItemSorter, "#G2");
1043 Assert.AreSame (mc, lvw.ListViewItemSorter, "#G3");
1044 Assert.AreEqual ("B", lvw.Items [0].Text, "#G4");
1045 Assert.AreEqual ("A", lvw.Items [1].Text, "#G5");
1046 Assert.AreEqual ("C", lvw.Items [2].Text, "#G6");
1047 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G7");
1049 // setting Sorting to the same value does not result in a sort
1051 lvw.Sorting = SortOrder.Descending;
1052 Assert.AreEqual (0, mc.CompareCount, "#H1");
1053 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1054 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1055 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1056 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1057 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1058 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1060 // setting Sorting to None does not result in a sort operation
1061 lvw.Sorting = SortOrder.None;
1062 Assert.AreEqual (0, mc.CompareCount, "#I1");
1063 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1064 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1065 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1066 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1067 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1068 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1070 // explicitly calling Sort when Sorting is None does not result
1071 // in a sort operation
1073 Assert.AreEqual (0, mc.CompareCount, "#J1");
1074 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1075 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1076 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1077 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1078 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1079 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1081 // setting Sorting again does not result in a sort operation
1082 lvw.Sorting = SortOrder.Ascending;
1083 Assert.AreEqual (0, mc.CompareCount, "#K1");
1084 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1085 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1086 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1087 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1088 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1089 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1091 // explicitly calling Sort when Sorting is Ascending does not
1092 // result in a sort operation
1094 Assert.AreEqual (0, mc.CompareCount, "#L1");
1095 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1096 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1097 Assert.AreEqual ("B", lvw.Items [0].Text, "#L4");
1098 Assert.AreEqual ("A", lvw.Items [1].Text, "#L5");
1099 Assert.AreEqual ("C", lvw.Items [2].Text, "#L6");
1100 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1102 // show the form to create the handle
1105 // when the handle is created, the items are immediately sorted
1106 Assert.IsTrue (mc.CompareCount > 0, "#L1");
1107 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1108 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1109 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1110 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1111 Assert.AreEqual ("B", lvw.Items [2].Text, "#M6");
1112 Assert.AreEqual ("A", lvw.Items [3].Text, "#M7");
1114 // setting ListViewItemSorter to null does not result in sort
1116 lvw.ListViewItemSorter = null;
1117 Assert.IsNull (lvw.ListViewItemSorter, "#N1");
1118 Assert.AreEqual ("C", lvw.Items [0].Text, "#N2");
1119 Assert.AreEqual ("BB", lvw.Items [1].Text, "#N3");
1120 Assert.AreEqual ("B", lvw.Items [2].Text, "#N4");
1121 Assert.AreEqual ("A", lvw.Items [3].Text, "#N5");
1123 // explicitly calling sort does not result in sort operation
1125 Assert.IsNull (lvw.ListViewItemSorter, "#O1");
1126 Assert.AreEqual ("C", lvw.Items [0].Text, "#O2");
1127 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O3");
1128 Assert.AreEqual ("B", lvw.Items [2].Text, "#O4");
1129 Assert.AreEqual ("A", lvw.Items [3].Text, "#O5");
1134 private void AssertSortNoIcon_Created (View view)
1136 int compareCount = 0;
1138 Form form = new Form ();
1139 form.ShowInTaskbar = false;
1140 ListView lvw = CreateListView (view);
1141 form.Controls.Add (lvw);
1142 Assert.IsNull (lvw.ListViewItemSorter, "#A");
1146 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1147 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1148 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1149 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1151 lvw.Sorting = SortOrder.None;
1152 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1153 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1154 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1155 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1157 lvw.Sorting = SortOrder.Ascending;
1158 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1159 Assert.AreEqual ("A", lvw.Items [0].Text, "#D2");
1160 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
1161 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1163 lvw.Sorting = SortOrder.Descending;
1164 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1165 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
1166 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
1167 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
1169 lvw.Sorting = SortOrder.None;
1170 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1171 Assert.AreEqual ("C", lvw.Items [0].Text, "#F2");
1172 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
1173 Assert.AreEqual ("A", lvw.Items [2].Text, "#F4");
1175 // when Sorting is None and a new item is added, the item is
1176 // appended to the collection
1177 lvw.Items.Add ("BB");
1178 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1179 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
1180 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
1181 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
1182 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1184 lvw.Sorting = SortOrder.Ascending;
1185 Assert.IsNull (lvw.ListViewItemSorter, "#H1");
1186 Assert.AreEqual ("A", lvw.Items [0].Text, "#H2");
1187 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
1188 Assert.AreEqual ("BB", lvw.Items [2].Text, "#H4");
1189 Assert.AreEqual ("C", lvw.Items [3].Text, "#H5");
1191 // when Sorting is not None and a new item is added, the
1192 // collection is re-sorted automatically
1193 lvw.Items.Add ("BA");
1194 Assert.IsNull (lvw.ListViewItemSorter, "#I1");
1195 Assert.AreEqual ("A", lvw.Items [0].Text, "#I2");
1196 Assert.AreEqual ("B", lvw.Items [1].Text, "#I3");
1197 Assert.AreEqual ("BA", lvw.Items [2].Text, "#I4");
1198 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I5");
1199 Assert.AreEqual ("C", lvw.Items [4].Text, "#I6");
1201 // assign a custom comparer
1202 MockComparer mc = new MockComparer (false);
1203 lvw.ListViewItemSorter = mc;
1205 // when a custom IComparer is assigned, the collection is immediately
1207 Assert.IsTrue (mc.CompareCount > compareCount, "#J1");
1208 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1209 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1210 Assert.AreEqual ("C", lvw.Items [0].Text, "#J4");
1211 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J5");
1212 Assert.AreEqual ("BA", lvw.Items [2].Text, "#J6");
1213 Assert.AreEqual ("B", lvw.Items [3].Text, "#J7");
1214 Assert.AreEqual ("A", lvw.Items [4].Text, "#J8");
1216 // record compare count
1217 compareCount = mc.CompareCount;
1219 // modifying the sort order results in a sort
1220 lvw.Sorting = SortOrder.Descending;
1221 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
1222 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1223 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1224 Assert.AreEqual ("A", lvw.Items [0].Text, "#K4");
1225 Assert.AreEqual ("B", lvw.Items [1].Text, "#K5");
1226 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K6");
1227 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1228 Assert.AreEqual ("C", lvw.Items [4].Text, "#K8");
1230 // record compare count
1231 compareCount = mc.CompareCount;
1233 // set the sort order to the same value does not result in a sort
1235 lvw.Sorting = SortOrder.Descending;
1236 Assert.AreEqual (compareCount, mc.CompareCount, "#L1");
1237 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1238 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1239 Assert.AreEqual ("A", lvw.Items [0].Text, "#L4");
1240 Assert.AreEqual ("B", lvw.Items [1].Text, "#L5");
1241 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
1242 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1243 Assert.AreEqual ("C", lvw.Items [4].Text, "#L8");
1245 // modifying the sort order results in a sort
1246 lvw.Sorting = SortOrder.Ascending;
1247 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
1248 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1249 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1250 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1251 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1252 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
1253 Assert.AreEqual ("B", lvw.Items [3].Text, "#M7");
1254 Assert.AreEqual ("A", lvw.Items [4].Text, "#M8");
1256 // record compare count
1257 compareCount = mc.CompareCount;
1259 // adding an item when Sorting is not None caused a re-sort
1260 lvw.Items.Add ("BC");
1261 Assert.IsTrue (mc.CompareCount > compareCount, "#N1");
1262 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
1263 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
1264 Assert.AreEqual ("C", lvw.Items [0].Text, "#N4");
1265 Assert.AreEqual ("BC", lvw.Items [1].Text, "#N5");
1266 Assert.AreEqual ("BB", lvw.Items [2].Text, "#N6");
1267 Assert.AreEqual ("BA", lvw.Items [3].Text, "#N7");
1268 Assert.AreEqual ("B", lvw.Items [4].Text, "#N8");
1269 Assert.AreEqual ("A", lvw.Items [5].Text, "#N9");
1271 // record compare count
1272 compareCount = mc.CompareCount;
1274 // assigning the same custom IComparer again does not result in a
1276 lvw.ListViewItemSorter = mc;
1277 Assert.AreEqual (compareCount, mc.CompareCount, "#O1");
1278 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1279 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1280 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
1281 Assert.AreEqual ("BC", lvw.Items [1].Text, "#O5");
1282 Assert.AreEqual ("BB", lvw.Items [2].Text, "#O6");
1283 Assert.AreEqual ("BA", lvw.Items [3].Text, "#O7");
1284 Assert.AreEqual ("B", lvw.Items [4].Text, "#O8");
1285 Assert.AreEqual ("A", lvw.Items [5].Text, "#O9");
1287 // setting sort order to None does not perform a sort and resets
1288 // the ListViewItemSorter
1289 lvw.Sorting = SortOrder.None;
1290 Assert.AreEqual (compareCount, mc.CompareCount, "#P1");
1292 Assert.IsNull (lvw.ListViewItemSorter, "#P2");
1294 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2a");
1295 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P2b");
1297 Assert.AreEqual ("C", lvw.Items [0].Text, "#P3");
1298 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P4");
1299 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P5");
1300 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P6");
1301 Assert.AreEqual ("B", lvw.Items [4].Text, "#P7");
1302 Assert.AreEqual ("A", lvw.Items [5].Text, "#P8");
1305 lvw.ListViewItemSorter = mc;
1307 // assigning the previous custom IComparer again results in a
1309 Assert.IsTrue (mc.CompareCount > compareCount, "#Q1");
1310 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1311 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1312 Assert.AreEqual ("A", lvw.Items [0].Text, "#Q4");
1313 Assert.AreEqual ("B", lvw.Items [1].Text, "#Q5");
1314 Assert.AreEqual ("BA", lvw.Items [2].Text, "#Q6");
1315 Assert.AreEqual ("BB", lvw.Items [3].Text, "#Q7");
1316 Assert.AreEqual ("BC", lvw.Items [4].Text, "#Q8");
1317 Assert.AreEqual ("C", lvw.Items [5].Text, "#Q9");
1319 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
1320 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1321 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1322 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1323 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
1324 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
1325 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
1326 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
1327 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
1330 // record compare count
1331 compareCount = mc.CompareCount;
1333 // set Sorting to Ascending again to verify that the internal
1334 // IComparer is not used when we reset Sorting to None
1335 // (as the items would then be sorted alfabetically)
1336 lvw.Sorting = SortOrder.Ascending;
1337 Assert.IsTrue (mc.CompareCount > compareCount, "#R1");
1338 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
1339 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
1340 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
1341 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
1342 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
1343 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
1344 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
1345 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
1347 // record compare count
1348 compareCount = mc.CompareCount;
1350 lvw.Sorting = SortOrder.None;
1351 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
1353 Assert.IsNull (lvw.ListViewItemSorter, "#S2");
1355 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2a");
1356 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S2b");
1358 Assert.AreEqual ("C", lvw.Items [0].Text, "#S3");
1359 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S4");
1360 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S5");
1361 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S6");
1362 Assert.AreEqual ("B", lvw.Items [4].Text, "#S7");
1363 Assert.AreEqual ("A", lvw.Items [5].Text, "#S8");
1365 // record compare count
1366 compareCount = mc.CompareCount;
1368 lvw.Items.Add ("BD");
1370 // adding an item when Sorting is None does not cause a re-sort
1371 Assert.AreEqual (compareCount, mc.CompareCount, "#T1");
1372 Assert.IsNull (lvw.ListViewItemSorter, "#T2");
1373 Assert.AreEqual ("C", lvw.Items [0].Text, "#T3");
1374 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T4");
1375 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T5");
1376 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T6");
1377 Assert.AreEqual ("B", lvw.Items [4].Text, "#T7");
1378 Assert.AreEqual ("A", lvw.Items [5].Text, "#T8");
1379 Assert.AreEqual ("BD", lvw.Items [6].Text, "#T9");
1381 // adding an item when Sorting is None results in a re-sort
1382 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
1383 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
1384 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
1385 Assert.AreEqual ("A", lvw.Items [0].Text, "#T4");
1386 Assert.AreEqual ("B", lvw.Items [1].Text, "#T5");
1387 Assert.AreEqual ("BA", lvw.Items [2].Text, "#T6");
1388 Assert.AreEqual ("BB", lvw.Items [3].Text, "#T7");
1389 Assert.AreEqual ("BC", lvw.Items [4].Text, "#T8");
1390 Assert.AreEqual ("BD", lvw.Items [5].Text, "#T9");
1391 Assert.AreEqual ("C", lvw.Items [6].Text, "#T10");
1394 // record compare count
1395 compareCount = mc.CompareCount;
1399 // explicitly calling Sort when Sorting is None does nothing
1400 Assert.AreEqual (compareCount, mc.CompareCount, "#U1");
1401 Assert.IsNull (lvw.ListViewItemSorter, "#U2");
1402 Assert.AreEqual ("C", lvw.Items [0].Text, "#U3");
1403 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U4");
1404 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U5");
1405 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U6");
1406 Assert.AreEqual ("B", lvw.Items [4].Text, "#U7");
1407 Assert.AreEqual ("A", lvw.Items [5].Text, "#U8");
1408 Assert.AreEqual ("BD", lvw.Items [6].Text, "#U9");
1410 // explicitly calling Sort when Sorting is None results in a re-sort
1411 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
1412 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
1413 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
1414 Assert.AreEqual ("A", lvw.Items [0].Text, "#U4");
1415 Assert.AreEqual ("B", lvw.Items [1].Text, "#U5");
1416 Assert.AreEqual ("BA", lvw.Items [2].Text, "#U6");
1417 Assert.AreEqual ("BB", lvw.Items [3].Text, "#U7");
1418 Assert.AreEqual ("BC", lvw.Items [4].Text, "#U8");
1419 Assert.AreEqual ("BD", lvw.Items [5].Text, "#U9");
1420 Assert.AreEqual ("C", lvw.Items [6].Text, "#U10");
1423 // record compare count
1424 compareCount = mc.CompareCount;
1426 lvw.Sorting = SortOrder.Ascending;
1428 // setting Sorting again, does not reinstate the custom IComparer
1429 // but sorting is actually performed using an internal non-visible
1431 Assert.AreEqual (compareCount, mc.CompareCount, "#V1");
1432 Assert.IsNull (lvw.ListViewItemSorter, "#V2");
1433 Assert.AreEqual ("A", lvw.Items [0].Text, "#V3");
1434 Assert.AreEqual ("B", lvw.Items [1].Text, "#V4");
1435 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V5");
1436 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V6");
1437 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V7");
1438 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V8");
1439 Assert.AreEqual ("C", lvw.Items [6].Text, "#V9");
1441 // setting Sorting again, uses the custom IComparer to sort the items
1442 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
1443 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
1444 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
1445 Assert.AreEqual ("C", lvw.Items [0].Text, "#V4");
1446 Assert.AreEqual ("BD", lvw.Items [1].Text, "#V5");
1447 Assert.AreEqual ("BC", lvw.Items [2].Text, "#V6");
1448 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
1449 Assert.AreEqual ("BA", lvw.Items [4].Text, "#V8");
1450 Assert.AreEqual ("B", lvw.Items [5].Text, "#V9");
1451 Assert.AreEqual ("A", lvw.Items [6].Text, "#V10");
1454 // record compare count
1455 compareCount = mc.CompareCount;
1459 // explicitly calling Sort, does not reinstate the custom IComparer
1460 // but sorting is actually performed using an internal non-visible
1462 Assert.AreEqual (compareCount, mc.CompareCount, "#W1");
1463 Assert.IsNull (lvw.ListViewItemSorter, "#W2");
1464 Assert.AreEqual ("A", lvw.Items [0].Text, "#W3");
1465 Assert.AreEqual ("B", lvw.Items [1].Text, "#W4");
1466 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W5");
1467 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W6");
1468 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W7");
1469 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W8");
1470 Assert.AreEqual ("C", lvw.Items [6].Text, "#W9");
1472 // setting Sorting again, uses the custom IComparer to sort the items
1473 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
1474 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
1475 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
1476 Assert.AreEqual ("C", lvw.Items [0].Text, "#W4");
1477 Assert.AreEqual ("BD", lvw.Items [1].Text, "#W5");
1478 Assert.AreEqual ("BC", lvw.Items [2].Text, "#W6");
1479 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
1480 Assert.AreEqual ("BA", lvw.Items [4].Text, "#W8");
1481 Assert.AreEqual ("B", lvw.Items [5].Text, "#W9");
1482 Assert.AreEqual ("A", lvw.Items [6].Text, "#W10");
1485 // record compare count
1486 compareCount = mc.CompareCount;
1491 private void AssertSortNoIcon_NotCreated (View view)
1493 Form form = new Form ();
1494 form.ShowInTaskbar = false;
1495 ListView lvw = CreateListView (view);
1496 form.Controls.Add (lvw);
1498 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
1499 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
1500 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
1501 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
1503 lvw.Sorting = SortOrder.None;
1504 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1505 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1506 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1507 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1509 lvw.Sorting = SortOrder.Ascending;
1510 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1511 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1512 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1513 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1515 lvw.Sorting = SortOrder.Descending;
1516 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1517 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1518 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1519 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1521 lvw.Sorting = SortOrder.None;
1522 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1523 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1524 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1525 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1527 lvw.Sorting = SortOrder.Ascending;
1528 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1529 Assert.AreEqual ("B", lvw.Items [0].Text, "#F2");
1530 Assert.AreEqual ("A", lvw.Items [1].Text, "#F3");
1531 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
1533 // when the handle is not created and a new item is added, the new
1534 // item is just appended to the collection
1535 lvw.Items.Add ("BB");
1536 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1537 Assert.AreEqual ("B", lvw.Items [0].Text, "#G2");
1538 Assert.AreEqual ("A", lvw.Items [1].Text, "#G3");
1539 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
1540 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1542 // assign a custom comparer
1543 MockComparer mc = new MockComparer (false);
1544 lvw.ListViewItemSorter = mc;
1546 // assigning a custom IComparer has no effect
1547 Assert.AreEqual (0, mc.CompareCount, "#H1");
1548 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1549 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1550 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1551 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1552 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1553 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1555 // modifying Sorting has no effect
1556 lvw.Sorting = SortOrder.Descending;
1557 Assert.AreEqual (0, mc.CompareCount, "#I1");
1558 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1559 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1560 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1561 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1562 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1563 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1565 // setting Sorting to the same value does not result in a sort
1567 lvw.Sorting = SortOrder.Descending;
1568 Assert.AreEqual (0, mc.CompareCount, "#J1");
1569 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1570 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1571 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1572 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1573 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1574 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1576 // setting Sorting to another value does not result in a sort
1578 lvw.Sorting = SortOrder.Ascending;
1579 Assert.AreEqual (0, mc.CompareCount, "#K1");
1580 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1581 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1582 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1583 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1584 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1585 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1587 lvw.Sorting = SortOrder.None;
1588 Assert.AreEqual (0, mc.CompareCount, "#L1");
1590 // setting Sorting to None does not perform a sort and resets the
1591 // ListViewItemSorter
1592 Assert.IsNull (lvw.ListViewItemSorter, "#L2");
1594 // setting Sorting to None does not perform a sort
1595 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2a");
1596 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L2b");
1598 Assert.AreEqual ("B", lvw.Items [0].Text, "#L3");
1599 Assert.AreEqual ("A", lvw.Items [1].Text, "#L4");
1600 Assert.AreEqual ("C", lvw.Items [2].Text, "#L5");
1601 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L6");
1603 // explicitly calling Sort when Sorting is None does nothing
1605 Assert.AreEqual (0, mc.CompareCount, "#M1");
1607 Assert.IsNull (lvw.ListViewItemSorter, "#M2");
1609 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2a");
1610 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M2b");
1612 Assert.AreEqual ("B", lvw.Items [0].Text, "#M3");
1613 Assert.AreEqual ("A", lvw.Items [1].Text, "#M4");
1614 Assert.AreEqual ("C", lvw.Items [2].Text, "#M5");
1615 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M6");
1617 lvw.Sorting = SortOrder.Ascending;
1618 Assert.AreEqual (0, mc.CompareCount, "#N1");
1620 Assert.IsNull (lvw.ListViewItemSorter, "#N2");
1622 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2a");
1623 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N2b");
1625 Assert.AreEqual ("B", lvw.Items [0].Text, "#N3");
1626 Assert.AreEqual ("A", lvw.Items [1].Text, "#N4");
1627 Assert.AreEqual ("C", lvw.Items [2].Text, "#N5");
1628 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N6");
1630 // explicitly set the custom IComparer again
1631 lvw.ListViewItemSorter = mc;
1632 Assert.AreEqual (0, mc.CompareCount, "#O1");
1633 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1634 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1635 Assert.AreEqual ("B", lvw.Items [0].Text, "#O4");
1636 Assert.AreEqual ("A", lvw.Items [1].Text, "#O5");
1637 Assert.AreEqual ("C", lvw.Items [2].Text, "#O6");
1638 Assert.AreEqual ("BB", lvw.Items [3].Text, "#O7");
1640 // explicitly calling Sort when handle is not created does not
1641 // result in sort operation
1642 Assert.AreEqual (0, mc.CompareCount, "#P1");
1643 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
1644 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
1645 Assert.AreEqual ("B", lvw.Items [0].Text, "#P4");
1646 Assert.AreEqual ("A", lvw.Items [1].Text, "#P5");
1647 Assert.AreEqual ("C", lvw.Items [2].Text, "#P6");
1648 Assert.AreEqual ("BB", lvw.Items [3].Text, "#P7");
1650 // show the form to create the handle
1653 // when the handle is created, the items are immediately sorted
1654 Assert.IsTrue (mc.CompareCount > 0, "#Q1");
1655 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1656 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1657 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1658 Assert.AreEqual ("BB", lvw.Items [1].Text, "#Q5");
1659 Assert.AreEqual ("B", lvw.Items [2].Text, "#Q6");
1660 Assert.AreEqual ("A", lvw.Items [3].Text, "#Q7");
1662 // setting ListViewItemSorter to null does not result in sort
1664 lvw.ListViewItemSorter = null;
1665 Assert.IsNull (lvw.ListViewItemSorter, "#R1");
1666 Assert.AreEqual ("C", lvw.Items [0].Text, "#R2");
1667 Assert.AreEqual ("BB", lvw.Items [1].Text, "#R3");
1668 Assert.AreEqual ("B", lvw.Items [2].Text, "#R4");
1669 Assert.AreEqual ("A", lvw.Items [3].Text, "#R5");
1671 // explicitly calling sort does not result in sort operation
1673 Assert.IsNull (lvw.ListViewItemSorter, "#S1");
1674 Assert.AreEqual ("C", lvw.Items [0].Text, "#S2");
1675 Assert.AreEqual ("BB", lvw.Items [1].Text, "#S3");
1676 Assert.AreEqual ("B", lvw.Items [2].Text, "#S4");
1677 Assert.AreEqual ("A", lvw.Items [3].Text, "#S5");
1679 // modifying Sorting does not result in sort operation
1680 lvw.Sorting = SortOrder.Ascending;
1681 Assert.IsNull (lvw.ListViewItemSorter, "#T1");
1682 Assert.AreEqual ("C", lvw.Items [0].Text, "#T2");
1683 Assert.AreEqual ("BB", lvw.Items [1].Text, "#T3");
1684 Assert.AreEqual ("B", lvw.Items [2].Text, "#T4");
1685 Assert.AreEqual ("A", lvw.Items [3].Text, "#T5");
1690 private void AssertSort_Checked (View view)
1692 Form form = new Form ();
1693 form.ShowInTaskbar = false;
1694 ListView lvw = CreateListView (view);
1695 lvw.CheckBoxes = true;
1696 form.Controls.Add (lvw);
1700 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
1701 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
1704 lvw.Items [2].Checked = true;
1705 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
1706 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B2");
1707 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#B3");
1708 Assert.AreEqual (2, lvw.CheckedIndices [0], "#B4");
1710 // sort the items descending
1711 lvw.Sorting = SortOrder.Descending;
1712 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
1713 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C2");
1714 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#C3");
1715 Assert.AreEqual (0, lvw.CheckedIndices [0], "#C4");
1717 // add an item, which ends up before the selected item after the
1719 ListViewItem item = lvw.Items.Add ("D");
1720 Assert.AreEqual (1, lvw.CheckedItems.Count, "#D1");
1721 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#D2");
1722 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#D3");
1723 Assert.AreEqual (1, lvw.CheckedIndices [0], "#D4");
1725 // remove an item before the selected item
1726 lvw.Items.Remove (item);
1727 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
1728 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E2");
1729 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#E3");
1730 Assert.AreEqual (0, lvw.CheckedIndices [0], "#E4");
1732 // insert an item before the selected item
1733 lvw.Items.Insert (0, "D");
1734 Assert.AreEqual (1, lvw.CheckedItems.Count, "#F1");
1735 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#F2");
1736 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#F3");
1737 Assert.AreEqual (1, lvw.CheckedIndices [0], "#F4");
1739 // assign a custom comparer
1740 MockComparer mc = new MockComparer (false);
1741 lvw.ListViewItemSorter = mc;
1743 // items are re-sorted automatically
1744 Assert.AreEqual (1, lvw.CheckedItems.Count, "#G1");
1745 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#G2");
1746 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#G3");
1747 Assert.AreEqual (2, lvw.CheckedIndices [0], "#G4");
1749 // modify sort order
1750 lvw.Sorting = SortOrder.Ascending;
1751 Assert.AreEqual (1, lvw.CheckedItems.Count, "#H1");
1752 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#H2");
1753 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#H3");
1754 Assert.AreEqual (1, lvw.CheckedIndices [0], "#H4");
1759 private void AssertSort_Selected (View view)
1761 Form form = new Form ();
1762 form.ShowInTaskbar = false;
1763 ListView lvw = CreateListView (view);
1764 form.Controls.Add (lvw);
1768 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
1769 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
1772 lvw.Items [2].Selected = true;
1773 Assert.AreEqual (1, lvw.SelectedItems.Count, "#B1");
1774 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#B2");
1775 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#B3");
1776 Assert.AreEqual (2, lvw.SelectedIndices [0], "#B4");
1778 // sort the items descending
1779 lvw.Sorting = SortOrder.Descending;
1780 Assert.AreEqual (1, lvw.SelectedItems.Count, "#C1");
1781 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#C2");
1782 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#C3");
1783 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C4");
1785 // add an item, which ends up before the selected item after the
1787 ListViewItem item = lvw.Items.Add ("D");
1788 Assert.AreEqual (1, lvw.SelectedItems.Count, "#D1");
1789 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#D2");
1790 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#D3");
1791 Assert.AreEqual (1, lvw.SelectedIndices [0], "#D4");
1793 // remove an item before the selected item
1794 lvw.Items.Remove (item);
1795 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
1796 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E2");
1797 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#E3");
1798 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
1800 // insert an item before the selected item
1801 lvw.Items.Insert (0, "D");
1802 Assert.AreEqual (1, lvw.SelectedItems.Count, "#F1");
1803 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#F2");
1804 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#F3");
1805 Assert.AreEqual (1, lvw.SelectedIndices [0], "#F4");
1807 // assign a custom comparer
1808 MockComparer mc = new MockComparer (false);
1809 lvw.ListViewItemSorter = mc;
1811 // items are re-sorted automatically
1812 Assert.AreEqual (1, lvw.SelectedItems.Count, "#G1");
1813 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#G2");
1814 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#G3");
1815 Assert.AreEqual (2, lvw.SelectedIndices [0], "#G4");
1817 // modify sort order
1818 lvw.Sorting = SortOrder.Ascending;
1819 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
1820 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H2");
1821 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#H3");
1822 Assert.AreEqual (1, lvw.SelectedIndices [0], "#H4");
1827 private ListView CreateListView (View view)
1829 ListView lvw = new ListView ();
1831 lvw.Items.Add ("B");
1832 lvw.Items.Add ("A");
1833 lvw.Items.Add ("C");
1837 private class MockComparer : IComparer
1840 bool _throwException;
1842 public MockComparer (bool throwException)
1844 _throwException = throwException;
1847 public int CompareCount {
1848 get { return _compareCount; }
1851 public int Compare (object x, object y)
1854 if (_throwException)
1855 throw new InvalidOperationException ();
1857 ListViewItem item_x = x as ListViewItem;
1858 ListViewItem item_y = y as ListViewItem;
1859 SortOrder sortOrder = item_x.ListView.Sorting;
1861 // we'll actually perform a reverse-sort
1862 if (sortOrder == SortOrder.Ascending)
1863 return String.Compare (item_y.Text, item_x.Text);
1865 return String.Compare (item_x.Text, item_y.Text);