2 // ListViewTest.cs: Test cases for ListView.
5 // Ritvik Mayank (mritvik@novell.com)
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
11 using System.Collections;
13 using System.Reflection;
14 using System.Windows.Forms;
16 using NUnit.Framework;
18 namespace MonoTests.System.Windows.Forms
21 public class ListViewTest
24 public void ListViewPropertyTest ()
26 ListView mylistview = new ListView ();
27 Assert.AreEqual (ItemActivation.Standard, mylistview.Activation, "#1");
28 Assert.AreEqual (ListViewAlignment.Top, mylistview.Alignment, "#2");
29 Assert.AreEqual (false, mylistview.AllowColumnReorder, "#3");
30 Assert.AreEqual (true, mylistview.AutoArrange, "#4");
31 Assert.AreEqual (BorderStyle.Fixed3D , mylistview.BorderStyle, "#5");
32 Assert.AreEqual (false, mylistview.CheckBoxes, "#6");
33 Assert.AreEqual (0, mylistview.CheckedIndices.Count, "#7");
34 Assert.AreEqual (0, mylistview.CheckedItems.Count, "#8");
35 Assert.AreEqual (0, mylistview.Columns.Count, "#9");
36 Assert.AreEqual (null, mylistview.FocusedItem, "#10");
37 Assert.AreEqual (false, mylistview.FullRowSelect, "#11");
38 Assert.AreEqual (false, mylistview.GridLines, "#12");
39 Assert.AreEqual (ColumnHeaderStyle.Clickable, mylistview.HeaderStyle, "#13");
40 Assert.AreEqual (true, mylistview.HideSelection, "#14");
41 Assert.AreEqual (false, mylistview.HoverSelection, "#15");
42 ListViewItem item1 = new ListViewItem ("A", -1);
43 mylistview.Items.Add (item1);
44 Assert.AreEqual (1, mylistview.Items.Count, "#16");
45 Assert.AreEqual (false, mylistview.LabelEdit, "#17");
46 Assert.AreEqual (true, mylistview.LabelWrap, "#18");
47 Assert.AreEqual (null, mylistview.LargeImageList, "#19");
48 Assert.AreEqual (null, mylistview.ListViewItemSorter, "#20");
49 Assert.AreEqual (true, mylistview.MultiSelect, "#21");
50 Assert.AreEqual (true, mylistview.Scrollable, "#22");
51 Assert.AreEqual (0, mylistview.SelectedIndices.Count, "#23");
52 Assert.AreEqual (0, mylistview.SelectedItems.Count, "#24");
53 Assert.AreEqual (null, mylistview.SmallImageList, "#25");
54 Assert.AreEqual (null, mylistview.LargeImageList, "#26");
55 Assert.AreEqual (SortOrder.None, mylistview.Sorting, "#27");
56 Assert.AreEqual (null, mylistview.StateImageList, "#28");
57 Assert.AreEqual (View.LargeIcon, mylistview.View, "#29");
58 mylistview.View = View.List;
59 Assert.AreEqual (false, mylistview.TopItem.Checked, "#30");
61 Assert.AreEqual (false, mylistview.ShowItemToolTips, "#31");
66 public void ArrangeIconsTest ()
68 Form myform = new Form ();
69 myform.ShowInTaskbar = false;
70 ListView mylistview = new ListView ();
71 myform.Controls.Add (mylistview);
72 mylistview.Items.Add ("Item 1");
73 mylistview.Items.Add ("Item 2");
74 mylistview.View = View.LargeIcon;
75 mylistview.ArrangeIcons ();
80 public void BeginEndUpdateTest ()
82 Form myform = new Form ();
83 myform.ShowInTaskbar = false;
84 myform.Visible = true;
85 ListView mylistview = new ListView();
86 mylistview.Items.Add ("A");
87 mylistview.Visible = true;
88 myform.Controls.Add (mylistview);
89 mylistview.BeginUpdate ();
90 for(int x = 1 ; x < 5000 ; x++){
91 mylistview.Items.Add ("Item " + x.ToString());
93 mylistview.EndUpdate ();
98 public void CheckBoxes ()
100 Form form = new Form ();
101 form.ShowInTaskbar = false;
102 ListView lvw = new ListView ();
103 form.Controls.Add (lvw);
105 ListViewItem itemB = lvw.Items.Add ("B");
107 itemB.Checked = true;
109 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
110 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
112 lvw.CheckBoxes = true;
114 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
115 Assert.AreSame (itemB, lvw.CheckedItems [0], "#B2");
116 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B3");
117 Assert.AreEqual (1, lvw.CheckedIndices [0], "#B4");
121 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
122 Assert.AreSame (itemB, lvw.CheckedItems [0], "#C2");
123 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C3");
124 Assert.AreEqual (1, lvw.CheckedIndices [0], "#C4");
126 lvw.CheckBoxes = false;
128 Assert.AreEqual (0, lvw.CheckedItems.Count, "#D1");
129 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#D2");
131 lvw.CheckBoxes = true;
133 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
134 Assert.AreSame (itemB, lvw.CheckedItems [0], "#E2");
135 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E3");
136 Assert.AreEqual (1, lvw.CheckedIndices [0], "#E4");
141 public void ClearTest ()
143 Form myform = new Form ();
144 myform.ShowInTaskbar = false;
145 myform.Visible = true;
146 ListView mylistview = new ListView ();
147 ListViewItem itemA = mylistview.Items.Add ("A");
148 ColumnHeader colA = mylistview.Columns.Add ("Item Column", -2, HorizontalAlignment.Left);
149 Assert.AreSame (mylistview, itemA.ListView, "#1");
150 Assert.AreSame (mylistview, colA.ListView, "#2");
151 mylistview.Visible = true;
152 myform.Controls.Add (mylistview);
153 Assert.AreEqual (1, mylistview.Columns.Count, "#3");
154 Assert.AreEqual (1, mylistview.Items.Count, "#4");
156 Assert.AreEqual (0, mylistview.Columns.Count, "#5");
157 Assert.AreEqual (0, mylistview.Items.Count, "#6");
158 Assert.IsNull (itemA.ListView, "#7");
159 Assert.IsNull (colA.ListView, "#8");
164 public void ClientRectangle_Borders ()
166 ListView lv = new ListView ();
168 Assert.AreEqual (lv.ClientRectangle, new ListView ().ClientRectangle);
172 public void DisposeTest ()
174 ListView lv = new ListView ();
175 lv.View = View.Details;
177 lv.LargeImageList = new ImageList ();
178 lv.SmallImageList = new ImageList ();
180 ListViewItem lvi = new ListViewItem ();
183 ColumnHeader col = new ColumnHeader ();
184 lv.Columns.Add (col);
188 Assert.IsNull (lvi.ListView, "#A1");
189 Assert.IsNull (col.ListView, "#A2");
191 Assert.IsNull (lv.LargeImageList, "#B1");
192 Assert.IsNull (lv.SmallImageList, "#B2");
193 Assert.IsNull(lv.StateImageList, "#B3");
197 public void EnsureVisibleTest ()
199 Form myform = new Form ();
200 myform.ShowInTaskbar = false;
201 myform.Visible = true;
202 ListView mylistview = new ListView ();
203 mylistview.Items.Add ("A");
204 myform.Controls.Add (mylistview);
205 mylistview.BeginUpdate ();
206 for(int x = 1 ; x < 5000 ; x++) {
207 mylistview.Items.Add ("Item " + x.ToString());
209 mylistview.EndUpdate ();
210 mylistview.EnsureVisible (4999);
215 public void GetItemRectTest ()
217 ListView mylistview = new ListView ();
218 mylistview.Items.Add ("Item 1");
219 mylistview.Items.Add ("Item 2");
220 Rectangle r = mylistview.GetItemRect (1);
221 Assert.AreEqual (0, r.Top, "#35a");
222 Assert.IsTrue (r.Bottom > 0, "#35b");
223 Assert.IsTrue (r.Right > 0, "#35c");
224 Assert.IsTrue (r.Left > 0, "#35d");
225 Assert.IsTrue (r.Height > 0, "#35e");
226 Assert.IsTrue (r.Width > 0, "#35f");
230 public void bug79076 ()
232 ListView entryList = new ListView ();
233 entryList.Sorting = SortOrder.Descending;
235 entryList.BeginUpdate ();
236 entryList.Columns.Add ("Type", 100, HorizontalAlignment.Left);
238 ListViewItem item = new ListViewItem (new string [] { "A" });
239 entryList.Items.Add (item);
240 item = new ListViewItem (new string [] { "B" });
241 entryList.Items.Add (item);
245 public void MultiSelect ()
247 Form form = new Form ();
248 form.ShowInTaskbar = false;
249 ListView lvw = CreateListView (View.Details);
250 form.Controls.Add (lvw);
251 lvw.MultiSelect = true;
252 lvw.Items [0].Selected = true;
253 lvw.Items [2].Selected = true;
255 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
256 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
258 lvw.Items [0].Selected = false;
260 Assert.AreEqual (0, lvw.SelectedItems.Count, "#B1");
261 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#B2");
263 lvw.Items [0].Selected = true;
265 Assert.AreEqual (0, lvw.SelectedItems.Count, "#C1");
266 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#C2");
270 Assert.AreEqual (2, lvw.SelectedItems.Count, "#D1");
271 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#D2");
272 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#D3");
273 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#D4");
274 Assert.AreEqual (0, lvw.SelectedIndices [0], "#D5");
275 Assert.AreEqual (2, lvw.SelectedIndices [1], "#D6");
278 lvw.Items [2].Selected = false;
280 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
281 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#E2");
282 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E3");
283 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
285 // re-select that item
286 lvw.Items [2].Selected = true;
288 Assert.AreEqual (2, lvw.SelectedItems.Count, "#F1");
289 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#F2");
290 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#F3");
291 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#F4");
292 Assert.AreEqual (0, lvw.SelectedIndices [0], "#F5");
293 Assert.AreEqual (2, lvw.SelectedIndices [1], "#F6");
295 // dis-allow selection of multiple items
296 lvw.MultiSelect = false;
298 // setting MultiSelect to false when multiple items have been
299 // selected does not deselect items
300 Assert.AreEqual (2, lvw.SelectedItems.Count, "#G1");
301 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#G2");
302 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#G3");
303 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#G4");
304 Assert.AreEqual (0, lvw.SelectedIndices [0], "#G5");
305 Assert.AreEqual (2, lvw.SelectedIndices [1], "#G6");
307 // de-select that item again
308 lvw.Items [2].Selected = false;
310 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
311 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#H2");
312 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H3");
313 Assert.AreEqual (0, lvw.SelectedIndices [0], "#H4");
315 // re-select that item again
316 lvw.Items [2].Selected = true;
318 // when MultiSelect is false, and you attempt to select more than
319 // one item, then all items will first be de-selected and then
320 // the item in question is selected
321 Assert.AreEqual (1, lvw.SelectedItems.Count, "#I1");
322 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#I2");
323 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#I3");
324 Assert.AreEqual (2, lvw.SelectedIndices [0], "#I4");
329 public void Selected ()
331 Form form = new Form ();
332 form.ShowInTaskbar = false;
333 ListView lvw = CreateListView (View.Details);
334 form.Controls.Add (lvw);
335 lvw.MultiSelect = true;
336 lvw.Items [0].Selected = true;
337 lvw.Items [2].Selected = true;
339 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
340 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
344 Assert.AreEqual (2, lvw.SelectedItems.Count, "#C1");
345 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#C2");
346 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#C3");
347 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#C4");
348 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C5");
349 Assert.AreEqual (2, lvw.SelectedIndices [1], "#C6");
355 public void FindItemWithText ()
357 ListView lvw = new ListView();
358 ListViewItem lvi1 = new ListViewItem (String.Empty);
359 ListViewItem lvi2 = new ListViewItem ("angle bracket");
360 ListViewItem lvi3 = new ListViewItem ("bracket holder");
361 ListViewItem lvi4 = new ListViewItem ("bracket");
362 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
364 Assert.AreEqual (lvi1, lvw.FindItemWithText (String.Empty), "#A1");
365 Assert.AreEqual (lvi3, lvw.FindItemWithText ("bracket"), "#A2");
366 Assert.AreEqual (lvi3, lvw.FindItemWithText ("BrackeT"), "#A3");
367 Assert.IsNull (lvw.FindItemWithText ("holder"), "#A5");
369 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 3), "#B1");
371 Assert.AreEqual (lvw.Items [2], lvw.FindItemWithText ("bracket", true, 0, true), "#C1");
372 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 0, false), "#C2");
373 Assert.AreEqual(lvw.Items [3], lvw.FindItemWithText("BrackeT", true, 0, false), "#C3");
374 Assert.IsNull (lvw.FindItemWithText ("brack", true, 0, false), "#C4");
376 // Sub item search tests
380 lvi1.SubItems.Add ("car bracket");
381 lvi1.SubItems.Add ("C");
384 lvi2.SubItems.Add ("car");
388 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3 });
390 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0), "#D1");
391 Assert.AreEqual (lvi3, lvw.FindItemWithText ("C", true, 0), "#D2");
392 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 1), "#D3");
393 Assert.IsNull (lvw.FindItemWithText ("car", false, 0), "#D4");
395 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0, true), "#E1");
396 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 0, false), "#E2");
397 Assert.AreEqual (lvi2, lvw.FindItemWithText ("CaR", true, 0, false), "#E3");
401 public void FindItemWithText_Exceptions ()
403 ListView lvw = new ListView ();
405 // Shouldn't throw any exception
406 lvw.FindItemWithText (null);
409 lvw.FindItemWithText (null, false, 0);
411 } catch (ArgumentOutOfRangeException) {
415 lvw.FindItemWithText (null, false, lvw.Items.Count);
417 } catch (ArgumentOutOfRangeException) {
421 lvw.Items.Add ("bracket");
424 lvw.FindItemWithText (null);
426 } catch (ArgumentNullException) {
430 lvw.FindItemWithText ("bracket", false, -1);
432 } catch (ArgumentOutOfRangeException) {
436 lvw.FindItemWithText ("bracket", false, lvw.Items.Count);
438 } catch (ArgumentOutOfRangeException) {
443 public void RedrawItems_Exceptions ()
445 ListView lvw = new ListView ();
450 lvw.RedrawItems (-1, 1, true);
452 } catch (ArgumentOutOfRangeException) {
456 lvw.RedrawItems (0, -1, true);
458 } catch (ArgumentOutOfRangeException) {
462 lvw.RedrawItems (lvw.Items.Count, 1, true);
464 } catch (ArgumentOutOfRangeException) {
468 lvw.RedrawItems (0, lvw.Items.Count, true);
470 } catch (ArgumentOutOfRangeException) {
474 lvw.RedrawItems (1, 0, true);
476 } catch (ArgumentException) {
480 const int item_count = 3;
481 ListViewItem [] items = new ListViewItem [item_count];
484 public void VirtualMode ()
486 ListView lvw = new ListView ();
487 lvw.VirtualListSize = item_count;
488 lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
489 lvw.VirtualMode = true;
491 CreateListViewItems (item_count);
493 Assert.AreEqual (item_count, lvw.Items.Count, "#A1");
494 Assert.AreEqual (true, lvw.VirtualMode, "#A2");
496 Assert.AreEqual (items [0], lvw.Items [0], "#B1");
497 Assert.AreEqual (items [1], lvw.Items [1], "#B2");
498 Assert.AreEqual (items [2], lvw.Items [2], "#B3");
499 Assert.AreEqual (0, lvw.Items [0].Index, "#B4");
500 Assert.AreEqual (1, lvw.Items [1].Index, "#B5");
501 Assert.AreEqual (2, lvw.Items [2].Index, "#B6");
502 Assert.AreEqual (lvw, lvw.Items [0].ListView, "#B7");
503 Assert.AreEqual (lvw, lvw.Items [1].ListView, "#B8");
504 Assert.AreEqual (lvw, lvw.Items [2].ListView, "#B9");
506 // force to re-create the items, because we need a blank state
508 CreateListViewItems (item_count);
509 items [0].Name = "A";
510 items [1].Name = "B";
511 items [2].Name = "C";
513 Assert.AreEqual (items [0], lvw.Items ["A"], "#C1");
514 Assert.AreEqual (items [1], lvw.Items ["B"], "#C2");
515 Assert.AreEqual (items [2], lvw.Items ["C"], "#C3");
516 Assert.AreEqual (0, lvw.Items ["A"].Index, "#C4");
517 Assert.AreEqual (1, lvw.Items ["B"].Index, "#C5");
518 Assert.AreEqual (2, lvw.Items ["C"].Index, "#C6");
519 Assert.AreEqual (lvw, lvw.Items ["A"].ListView, "#C7");
520 Assert.AreEqual (lvw, lvw.Items ["B"].ListView, "#C8");
521 Assert.AreEqual (lvw, lvw.Items ["C"].ListView, "#C9");
522 Assert.IsNull (lvw.Items ["Invalid key"], "#C10");
523 Assert.IsNull (lvw.Items [String.Empty], "#C11");
525 Assert.AreEqual (false, lvw.Items.ContainsKey (String.Empty), "#D1");
526 Assert.AreEqual (false, lvw.Items.ContainsKey (null), "#D2");
527 Assert.AreEqual (true, lvw.Items.ContainsKey ("A"), "#D3");
528 Assert.AreEqual (true, lvw.Items.ContainsKey ("a"), "#D4");
529 Assert.AreEqual (true, lvw.Items.ContainsKey ("B"), "#D5");
532 void ListViewRetrieveVirtualItemHandler (object o, RetrieveVirtualItemEventArgs args)
534 args.Item = items [args.ItemIndex];
537 void CreateListViewItems(int count)
539 items = new ListViewItem [count];
541 for (int i = 0; i < count; i++)
542 items [i] = new ListViewItem (String.Empty);
546 public void VirtualMode_Exceptions()
548 ListView lvw = new ListView ();
550 lvw.Items.Add ("Simple item");
552 lvw.VirtualMode = true;
554 } catch (InvalidOperationException) {
558 lvw.VirtualMode = true;
559 lvw.VirtualListSize = 1;
561 lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
562 CreateListViewItems (1);
567 } catch (InvalidOperationException) {
572 public void VirtualListSize ()
574 ListView lvw = new ListView ();
576 lvw.VirtualListSize = item_count;
577 Assert.AreEqual (item_count, lvw.VirtualListSize, "#A1");
578 Assert.AreEqual (0, lvw.Items.Count, "#A2");
580 lvw.VirtualMode = true;
581 Assert.AreEqual (item_count, lvw.VirtualListSize, "#B1");
582 Assert.AreEqual (item_count, lvw.Items.Count, "#B2");
584 lvw.VirtualMode = false;
585 Assert.AreEqual (item_count, lvw.VirtualListSize, "#C1");
586 Assert.AreEqual (0, lvw.Items.Count, "#C2");
590 public void VirtualListSize_Exceptions ()
592 ListView lvw = new ListView ();
594 lvw.VirtualListSize = -1;
596 } catch (ArgumentException) {
602 public void Sort_Details_Checked ()
604 AssertSort_Checked (View.Details);
608 public void Sort_Details_Created ()
610 AssertSortNoIcon_Created (View.Details);
614 public void Sort_Details_NotCreated ()
616 AssertSortNoIcon_NotCreated (View.Details);
620 public void Sort_Details_Selected ()
622 AssertSort_Selected (View.Details);
626 public void Sort_LargeIcon_Checked ()
628 AssertSort_Checked (View.LargeIcon);
632 public void Sort_LargeIcon_Created ()
634 AssertSortIcon_Created (View.LargeIcon);
638 public void Sort_LargeIcon_NotCreated ()
640 AssertSortIcon_NotCreated (View.LargeIcon);
644 public void Sort_LargeIcon_Selected ()
646 AssertSort_Selected (View.LargeIcon);
650 public void Sort_List_Checked ()
652 AssertSort_Checked (View.List);
656 public void Sort_List_Created ()
658 AssertSortNoIcon_Created (View.List);
662 public void Sort_List_NotCreated ()
664 AssertSortNoIcon_NotCreated (View.List);
668 public void Sort_List_Selection ()
670 AssertSort_Selected (View.List);
674 public void Sort_SmallIcon_Checked ()
676 AssertSort_Checked (View.SmallIcon);
680 public void Sort_SmallIcon_Created ()
682 AssertSortIcon_Created (View.SmallIcon);
686 public void Sort_SmallIcon_NotCreated ()
688 AssertSortIcon_NotCreated (View.SmallIcon);
692 public void Sort_SmallIcon_Selection ()
694 AssertSort_Selected (View.SmallIcon);
699 [ExpectedException (typeof (NotSupportedException))]
700 public void Sort_Tile_Checked ()
702 AssertSort_Checked (View.Tile);
706 public void Sort_Tile_Created ()
708 AssertSortNoIcon_Created (View.Tile);
712 public void Sort_Tile_NotCreated ()
714 AssertSortNoIcon_NotCreated (View.Tile);
718 public void Sort_Tile_Selection ()
720 AssertSort_Selected (View.Tile);
724 private void AssertSortIcon_Created (View view)
726 int compareCount = 0;
728 Form form = new Form ();
729 form.ShowInTaskbar = false;
730 ListView lvw = CreateListView (view);
731 form.Controls.Add (lvw);
732 Assert.IsNull (lvw.ListViewItemSorter, "#A");
736 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
737 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
738 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
739 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
741 lvw.Sorting = SortOrder.None;
742 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
743 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
744 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
745 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
747 lvw.Sorting = SortOrder.Descending;
748 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
749 Assert.AreEqual ("C", lvw.Items [0].Text, "#D2");
750 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
751 Assert.AreEqual ("A", lvw.Items [2].Text, "#D4");
753 lvw.Sorting = SortOrder.Ascending;
754 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
756 Assert.AreEqual ("A", lvw.Items [0].Text, "#E2");
757 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
758 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
760 // in .NET 1.1, changing Sorting does not have any effect for
761 // SmallIcon and LargeIcon view if no custom comparer is used
762 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
763 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
764 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
767 lvw.Sorting = SortOrder.None;
768 Assert.IsNotNull (lvw.ListViewItemSorter, "#F1");
770 Assert.AreEqual ("A", lvw.Items [0].Text, "#F2");
771 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
772 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
774 // in .NET 1.1, changing Sorting does not have any effect for
775 // SmallIcon and LargeIcon view if no custom comparer is used
776 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
777 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
778 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
781 lvw.Sorting = SortOrder.Ascending;
782 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
784 Assert.AreEqual ("A", lvw.Items [0].Text, "#G2");
785 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
786 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
788 // in .NET 1.1, changing Sorting does not have any effect for
789 // SmallIcon and LargeIcon view if no custom comparer is used
790 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
791 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
792 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
795 lvw.Sorting = SortOrder.Descending;
796 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
797 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
798 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
799 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
801 lvw.Sorting = SortOrder.None;
802 Assert.IsNotNull (lvw.ListViewItemSorter, "#H1");
803 Assert.AreEqual ("C", lvw.Items [0].Text, "#H2");
804 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
805 Assert.AreEqual ("A", lvw.Items [2].Text, "#H4");
807 // when Sorting is None and a new item is added, the collection is
808 // sorted using the previous Sorting value
809 lvw.Items.Add ("BB");
810 Assert.IsNotNull (lvw.ListViewItemSorter, "#I1");
811 Assert.AreEqual ("C", lvw.Items [0].Text, "#I2");
812 Assert.AreEqual ("BB", lvw.Items [1].Text, "#I3");
813 Assert.AreEqual ("B", lvw.Items [2].Text, "#I4");
814 Assert.AreEqual ("A", lvw.Items [3].Text, "#I5");
816 lvw.Sorting = SortOrder.Ascending;
817 Assert.IsNotNull (lvw.ListViewItemSorter, "#J1");
819 Assert.AreEqual ("A", lvw.Items [0].Text, "#J2");
820 Assert.AreEqual ("B", lvw.Items [1].Text, "#J3");
821 Assert.AreEqual ("BB", lvw.Items [2].Text, "#J4");
822 Assert.AreEqual ("C", lvw.Items [3].Text, "#J5");
824 // in .NET 1.1, changing Sorting does not have any effect for
825 // SmallIcon and LargeIcon view if no custom comparer is used
826 Assert.AreEqual ("C", lvw.Items [0].Text, "#J2");
827 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J3");
828 Assert.AreEqual ("B", lvw.Items [2].Text, "#J4");
829 Assert.AreEqual ("A", lvw.Items [3].Text, "#J5");
832 // when Sorting is not None and a new item is added, the
833 // collection is re-sorted automatically
834 lvw.Items.Add ("BA");
835 Assert.IsNotNull (lvw.ListViewItemSorter, "#K1");
837 Assert.AreEqual ("A", lvw.Items [0].Text, "#K2");
838 Assert.AreEqual ("B", lvw.Items [1].Text, "#K3");
839 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
840 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K5");
841 Assert.AreEqual ("C", lvw.Items [4].Text, "#K6");
843 // in .NET 1.1, changing Sorting does not have any effect for
844 // SmallIcon and LargeIcon view if no custom comparer is used
845 Assert.AreEqual ("C", lvw.Items [0].Text, "#K2");
846 Assert.AreEqual ("BB", lvw.Items [1].Text, "#K3");
847 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
848 Assert.AreEqual ("B", lvw.Items [3].Text, "#K5");
849 Assert.AreEqual ("A", lvw.Items [4].Text, "#K6");
852 // assign a custom comparer
853 MockComparer mc = new MockComparer (false);
854 lvw.ListViewItemSorter = mc;
856 // when a custom IComparer is assigned, the collection is immediately
858 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
859 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
860 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
861 Assert.AreEqual ("C", lvw.Items [0].Text, "#L4");
862 Assert.AreEqual ("BB", lvw.Items [1].Text, "#L5");
863 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
864 Assert.AreEqual ("B", lvw.Items [3].Text, "#L7");
865 Assert.AreEqual ("A", lvw.Items [4].Text, "#L8");
867 // record compare count
868 compareCount = mc.CompareCount;
870 // modifying Sorting results in re-sort
871 lvw.Sorting = SortOrder.Descending;
872 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
873 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
874 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
875 Assert.AreEqual ("A", lvw.Items [0].Text, "#M4");
876 Assert.AreEqual ("B", lvw.Items [1].Text, "#M5");
877 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
878 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M7");
879 Assert.AreEqual ("C", lvw.Items [4].Text, "#M8");
881 // record compare count
882 compareCount = mc.CompareCount;
884 // setting Sorting to the same value does not result in a sort
886 lvw.Sorting = SortOrder.Descending;
887 Assert.AreEqual (compareCount, mc.CompareCount, "#N1");
888 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
889 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
890 Assert.AreEqual ("A", lvw.Items [0].Text, "#N4");
891 Assert.AreEqual ("B", lvw.Items [1].Text, "#N5");
892 Assert.AreEqual ("BA", lvw.Items [2].Text, "#N6");
893 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N7");
894 Assert.AreEqual ("C", lvw.Items [4].Text, "#N8");
896 // modifying Sorting results in re-sort
897 lvw.Sorting = SortOrder.Ascending;
898 Assert.IsTrue (mc.CompareCount > compareCount, "#O1");
899 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
900 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
901 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
902 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O5");
903 Assert.AreEqual ("BA", lvw.Items [2].Text, "#O6");
904 Assert.AreEqual ("B", lvw.Items [3].Text, "#O7");
905 Assert.AreEqual ("A", lvw.Items [4].Text, "#O8");
907 // record compare count
908 compareCount = mc.CompareCount;
910 // adding an item when Sorting is not None causes re-sort
911 lvw.Items.Add ("BC");
912 Assert.IsTrue (mc.CompareCount > compareCount, "#P1");
913 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
914 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
915 Assert.AreEqual ("C", lvw.Items [0].Text, "#P4");
916 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P5");
917 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P6");
918 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P7");
919 Assert.AreEqual ("B", lvw.Items [4].Text, "#P8");
920 Assert.AreEqual ("A", lvw.Items [5].Text, "#P9");
922 // record compare count
923 compareCount = mc.CompareCount;
925 // assigning the same custom IComparer again does not result in a
927 lvw.ListViewItemSorter = mc;
928 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
929 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
930 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
931 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
932 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
933 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
934 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
935 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
936 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
938 // setting Sorting to None does not perform a sort
939 lvw.Sorting = SortOrder.None;
940 Assert.AreEqual (compareCount, mc.CompareCount, "#R1");
941 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
942 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
943 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
944 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
945 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
946 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
947 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
948 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
950 // assigning the custom IComparer again does not result in a
952 lvw.ListViewItemSorter = mc;
953 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
954 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2");
955 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S3");
956 Assert.AreEqual ("C", lvw.Items [0].Text, "#S4");
957 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S5");
958 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S6");
959 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S7");
960 Assert.AreEqual ("B", lvw.Items [4].Text, "#S8");
961 Assert.AreEqual ("A", lvw.Items [5].Text, "#S9");
963 // set Sorting to Ascending again
964 lvw.Sorting = SortOrder.Ascending;
965 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
966 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
967 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
968 Assert.AreEqual ("C", lvw.Items [0].Text, "#T4");
969 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T5");
970 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T6");
971 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T7");
972 Assert.AreEqual ("B", lvw.Items [4].Text, "#T8");
973 Assert.AreEqual ("A", lvw.Items [5].Text, "#T9");
975 // record compare count
976 compareCount = mc.CompareCount;
978 // explicitly calling Sort results in a sort operation
980 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
981 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
982 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
983 Assert.AreEqual ("C", lvw.Items [0].Text, "#U4");
984 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U5");
985 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U6");
986 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U7");
987 Assert.AreEqual ("B", lvw.Items [4].Text, "#U8");
988 Assert.AreEqual ("A", lvw.Items [5].Text, "#U9");
989 lvw.Sorting = SortOrder.None;
991 // record compare count
992 compareCount = mc.CompareCount;
994 // adding an item when Sorting is None causes re-sort
995 lvw.Items.Add ("BD");
996 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
997 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
998 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
999 Assert.AreEqual ("A", lvw.Items [0].Text, "#V4");
1000 Assert.AreEqual ("B", lvw.Items [1].Text, "#V5");
1001 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V6");
1002 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
1003 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V8");
1004 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V9");
1005 Assert.AreEqual ("C", lvw.Items [6].Text, "#V10");
1007 // record compare count
1008 compareCount = mc.CompareCount;
1010 // explicitly calling Sort when Sorting is None causes a re-sort
1012 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
1013 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
1014 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
1015 Assert.AreEqual ("A", lvw.Items [0].Text, "#W4");
1016 Assert.AreEqual ("B", lvw.Items [1].Text, "#W5");
1017 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W6");
1018 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
1019 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W8");
1020 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W9");
1021 Assert.AreEqual ("C", lvw.Items [6].Text, "#W10");
1023 // record compare count
1024 compareCount = mc.CompareCount;
1028 private void AssertSortIcon_NotCreated (View view)
1030 Form form = new Form ();
1031 form.ShowInTaskbar = false;
1032 ListView lvw = CreateListView (view);
1033 form.Controls.Add (lvw);
1035 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
1036 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
1037 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
1038 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
1040 lvw.Sorting = SortOrder.None;
1041 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1042 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1043 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1044 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1046 lvw.Sorting = SortOrder.Descending;
1047 Assert.IsNotNull (lvw.ListViewItemSorter, "#C1");
1048 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1049 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1050 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1052 lvw.Sorting = SortOrder.Ascending;
1053 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
1054 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1055 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1056 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1058 // when the handle is not created and a new item is added, the new
1059 // item is just appended to the collection
1060 lvw.Items.Add ("BB");
1061 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
1062 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1063 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1064 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1065 Assert.AreEqual ("BB", lvw.Items [3].Text, "#E5");
1067 // assign a custom comparer
1068 MockComparer mc = new MockComparer (false);
1069 lvw.ListViewItemSorter = mc;
1071 // assigning a custom IComparer has no effect
1072 Assert.AreEqual (0, mc.CompareCount, "#F1");
1073 Assert.IsNotNull (lvw.ListViewItemSorter, "#F2");
1074 Assert.AreSame (mc, lvw.ListViewItemSorter, "#F3");
1075 Assert.AreEqual ("B", lvw.Items [0].Text, "#F4");
1076 Assert.AreEqual ("A", lvw.Items [1].Text, "#F5");
1077 Assert.AreEqual ("C", lvw.Items [2].Text, "#F6");
1078 Assert.AreEqual ("BB", lvw.Items [3].Text, "#F7");
1080 // modifying Sorting does not result in sort operation
1081 lvw.Sorting = SortOrder.Descending;
1082 Assert.AreEqual (0, mc.CompareCount, "#G1");
1083 Assert.IsNotNull (lvw.ListViewItemSorter, "#G2");
1084 Assert.AreSame (mc, lvw.ListViewItemSorter, "#G3");
1085 Assert.AreEqual ("B", lvw.Items [0].Text, "#G4");
1086 Assert.AreEqual ("A", lvw.Items [1].Text, "#G5");
1087 Assert.AreEqual ("C", lvw.Items [2].Text, "#G6");
1088 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G7");
1090 // setting Sorting to the same value does not result in a sort
1092 lvw.Sorting = SortOrder.Descending;
1093 Assert.AreEqual (0, mc.CompareCount, "#H1");
1094 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1095 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1096 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1097 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1098 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1099 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1101 // setting Sorting to None does not result in a sort operation
1102 lvw.Sorting = SortOrder.None;
1103 Assert.AreEqual (0, mc.CompareCount, "#I1");
1104 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1105 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1106 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1107 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1108 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1109 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1111 // explicitly calling Sort when Sorting is None does not result
1112 // in a sort operation
1114 Assert.AreEqual (0, mc.CompareCount, "#J1");
1115 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1116 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1117 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1118 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1119 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1120 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1122 // setting Sorting again does not result in a sort operation
1123 lvw.Sorting = SortOrder.Ascending;
1124 Assert.AreEqual (0, mc.CompareCount, "#K1");
1125 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1126 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1127 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1128 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1129 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1130 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1132 // explicitly calling Sort when Sorting is Ascending does not
1133 // result in a sort operation
1135 Assert.AreEqual (0, mc.CompareCount, "#L1");
1136 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1137 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1138 Assert.AreEqual ("B", lvw.Items [0].Text, "#L4");
1139 Assert.AreEqual ("A", lvw.Items [1].Text, "#L5");
1140 Assert.AreEqual ("C", lvw.Items [2].Text, "#L6");
1141 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1143 // show the form to create the handle
1146 // when the handle is created, the items are immediately sorted
1147 Assert.IsTrue (mc.CompareCount > 0, "#L1");
1148 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1149 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1150 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1151 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1152 Assert.AreEqual ("B", lvw.Items [2].Text, "#M6");
1153 Assert.AreEqual ("A", lvw.Items [3].Text, "#M7");
1155 // setting ListViewItemSorter to null does not result in sort
1157 lvw.ListViewItemSorter = null;
1158 Assert.IsNull (lvw.ListViewItemSorter, "#N1");
1159 Assert.AreEqual ("C", lvw.Items [0].Text, "#N2");
1160 Assert.AreEqual ("BB", lvw.Items [1].Text, "#N3");
1161 Assert.AreEqual ("B", lvw.Items [2].Text, "#N4");
1162 Assert.AreEqual ("A", lvw.Items [3].Text, "#N5");
1164 // explicitly calling sort does not result in sort operation
1166 Assert.IsNull (lvw.ListViewItemSorter, "#O1");
1167 Assert.AreEqual ("C", lvw.Items [0].Text, "#O2");
1168 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O3");
1169 Assert.AreEqual ("B", lvw.Items [2].Text, "#O4");
1170 Assert.AreEqual ("A", lvw.Items [3].Text, "#O5");
1175 private void AssertSortNoIcon_Created (View view)
1177 int compareCount = 0;
1179 Form form = new Form ();
1180 form.ShowInTaskbar = false;
1181 ListView lvw = CreateListView (view);
1182 form.Controls.Add (lvw);
1183 Assert.IsNull (lvw.ListViewItemSorter, "#A");
1187 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1188 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1189 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1190 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1192 lvw.Sorting = SortOrder.None;
1193 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1194 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1195 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1196 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1198 lvw.Sorting = SortOrder.Ascending;
1199 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1200 Assert.AreEqual ("A", lvw.Items [0].Text, "#D2");
1201 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
1202 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1204 lvw.Sorting = SortOrder.Descending;
1205 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1206 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
1207 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
1208 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
1210 lvw.Sorting = SortOrder.None;
1211 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1212 Assert.AreEqual ("C", lvw.Items [0].Text, "#F2");
1213 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
1214 Assert.AreEqual ("A", lvw.Items [2].Text, "#F4");
1216 // when Sorting is None and a new item is added, the item is
1217 // appended to the collection
1218 lvw.Items.Add ("BB");
1219 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1220 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
1221 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
1222 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
1223 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1225 lvw.Sorting = SortOrder.Ascending;
1226 Assert.IsNull (lvw.ListViewItemSorter, "#H1");
1227 Assert.AreEqual ("A", lvw.Items [0].Text, "#H2");
1228 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
1229 Assert.AreEqual ("BB", lvw.Items [2].Text, "#H4");
1230 Assert.AreEqual ("C", lvw.Items [3].Text, "#H5");
1232 // when Sorting is not None and a new item is added, the
1233 // collection is re-sorted automatically
1234 lvw.Items.Add ("BA");
1235 Assert.IsNull (lvw.ListViewItemSorter, "#I1");
1236 Assert.AreEqual ("A", lvw.Items [0].Text, "#I2");
1237 Assert.AreEqual ("B", lvw.Items [1].Text, "#I3");
1238 Assert.AreEqual ("BA", lvw.Items [2].Text, "#I4");
1239 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I5");
1240 Assert.AreEqual ("C", lvw.Items [4].Text, "#I6");
1242 // assign a custom comparer
1243 MockComparer mc = new MockComparer (false);
1244 lvw.ListViewItemSorter = mc;
1246 // when a custom IComparer is assigned, the collection is immediately
1248 Assert.IsTrue (mc.CompareCount > compareCount, "#J1");
1249 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1250 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1251 Assert.AreEqual ("C", lvw.Items [0].Text, "#J4");
1252 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J5");
1253 Assert.AreEqual ("BA", lvw.Items [2].Text, "#J6");
1254 Assert.AreEqual ("B", lvw.Items [3].Text, "#J7");
1255 Assert.AreEqual ("A", lvw.Items [4].Text, "#J8");
1257 // record compare count
1258 compareCount = mc.CompareCount;
1260 // modifying the sort order results in a sort
1261 lvw.Sorting = SortOrder.Descending;
1262 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
1263 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1264 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1265 Assert.AreEqual ("A", lvw.Items [0].Text, "#K4");
1266 Assert.AreEqual ("B", lvw.Items [1].Text, "#K5");
1267 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K6");
1268 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1269 Assert.AreEqual ("C", lvw.Items [4].Text, "#K8");
1271 // record compare count
1272 compareCount = mc.CompareCount;
1274 // set the sort order to the same value does not result in a sort
1276 lvw.Sorting = SortOrder.Descending;
1277 Assert.AreEqual (compareCount, mc.CompareCount, "#L1");
1278 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1279 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1280 Assert.AreEqual ("A", lvw.Items [0].Text, "#L4");
1281 Assert.AreEqual ("B", lvw.Items [1].Text, "#L5");
1282 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
1283 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1284 Assert.AreEqual ("C", lvw.Items [4].Text, "#L8");
1286 // modifying the sort order results in a sort
1287 lvw.Sorting = SortOrder.Ascending;
1288 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
1289 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1290 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1291 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1292 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1293 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
1294 Assert.AreEqual ("B", lvw.Items [3].Text, "#M7");
1295 Assert.AreEqual ("A", lvw.Items [4].Text, "#M8");
1297 // record compare count
1298 compareCount = mc.CompareCount;
1300 // adding an item when Sorting is not None caused a re-sort
1301 lvw.Items.Add ("BC");
1302 Assert.IsTrue (mc.CompareCount > compareCount, "#N1");
1303 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
1304 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
1305 Assert.AreEqual ("C", lvw.Items [0].Text, "#N4");
1306 Assert.AreEqual ("BC", lvw.Items [1].Text, "#N5");
1307 Assert.AreEqual ("BB", lvw.Items [2].Text, "#N6");
1308 Assert.AreEqual ("BA", lvw.Items [3].Text, "#N7");
1309 Assert.AreEqual ("B", lvw.Items [4].Text, "#N8");
1310 Assert.AreEqual ("A", lvw.Items [5].Text, "#N9");
1312 // record compare count
1313 compareCount = mc.CompareCount;
1315 // assigning the same custom IComparer again does not result in a
1317 lvw.ListViewItemSorter = mc;
1318 Assert.AreEqual (compareCount, mc.CompareCount, "#O1");
1319 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1320 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1321 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
1322 Assert.AreEqual ("BC", lvw.Items [1].Text, "#O5");
1323 Assert.AreEqual ("BB", lvw.Items [2].Text, "#O6");
1324 Assert.AreEqual ("BA", lvw.Items [3].Text, "#O7");
1325 Assert.AreEqual ("B", lvw.Items [4].Text, "#O8");
1326 Assert.AreEqual ("A", lvw.Items [5].Text, "#O9");
1328 // setting sort order to None does not perform a sort and resets
1329 // the ListViewItemSorter
1330 lvw.Sorting = SortOrder.None;
1331 Assert.AreEqual (compareCount, mc.CompareCount, "#P1");
1333 Assert.IsNull (lvw.ListViewItemSorter, "#P2");
1335 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2a");
1336 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P2b");
1338 Assert.AreEqual ("C", lvw.Items [0].Text, "#P3");
1339 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P4");
1340 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P5");
1341 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P6");
1342 Assert.AreEqual ("B", lvw.Items [4].Text, "#P7");
1343 Assert.AreEqual ("A", lvw.Items [5].Text, "#P8");
1346 lvw.ListViewItemSorter = mc;
1348 // assigning the previous custom IComparer again results in a
1350 Assert.IsTrue (mc.CompareCount > compareCount, "#Q1");
1351 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1352 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1353 Assert.AreEqual ("A", lvw.Items [0].Text, "#Q4");
1354 Assert.AreEqual ("B", lvw.Items [1].Text, "#Q5");
1355 Assert.AreEqual ("BA", lvw.Items [2].Text, "#Q6");
1356 Assert.AreEqual ("BB", lvw.Items [3].Text, "#Q7");
1357 Assert.AreEqual ("BC", lvw.Items [4].Text, "#Q8");
1358 Assert.AreEqual ("C", lvw.Items [5].Text, "#Q9");
1360 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
1361 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1362 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1363 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1364 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
1365 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
1366 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
1367 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
1368 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
1371 // record compare count
1372 compareCount = mc.CompareCount;
1374 // set Sorting to Ascending again to verify that the internal
1375 // IComparer is not used when we reset Sorting to None
1376 // (as the items would then be sorted alfabetically)
1377 lvw.Sorting = SortOrder.Ascending;
1378 Assert.IsTrue (mc.CompareCount > compareCount, "#R1");
1379 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
1380 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
1381 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
1382 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
1383 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
1384 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
1385 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
1386 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
1388 // record compare count
1389 compareCount = mc.CompareCount;
1391 lvw.Sorting = SortOrder.None;
1392 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
1394 Assert.IsNull (lvw.ListViewItemSorter, "#S2");
1396 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2a");
1397 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S2b");
1399 Assert.AreEqual ("C", lvw.Items [0].Text, "#S3");
1400 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S4");
1401 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S5");
1402 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S6");
1403 Assert.AreEqual ("B", lvw.Items [4].Text, "#S7");
1404 Assert.AreEqual ("A", lvw.Items [5].Text, "#S8");
1406 // record compare count
1407 compareCount = mc.CompareCount;
1409 lvw.Items.Add ("BD");
1411 // adding an item when Sorting is None does not cause a re-sort
1412 Assert.AreEqual (compareCount, mc.CompareCount, "#T1");
1413 Assert.IsNull (lvw.ListViewItemSorter, "#T2");
1414 Assert.AreEqual ("C", lvw.Items [0].Text, "#T3");
1415 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T4");
1416 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T5");
1417 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T6");
1418 Assert.AreEqual ("B", lvw.Items [4].Text, "#T7");
1419 Assert.AreEqual ("A", lvw.Items [5].Text, "#T8");
1420 Assert.AreEqual ("BD", lvw.Items [6].Text, "#T9");
1422 // adding an item when Sorting is None results in a re-sort
1423 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
1424 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
1425 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
1426 Assert.AreEqual ("A", lvw.Items [0].Text, "#T4");
1427 Assert.AreEqual ("B", lvw.Items [1].Text, "#T5");
1428 Assert.AreEqual ("BA", lvw.Items [2].Text, "#T6");
1429 Assert.AreEqual ("BB", lvw.Items [3].Text, "#T7");
1430 Assert.AreEqual ("BC", lvw.Items [4].Text, "#T8");
1431 Assert.AreEqual ("BD", lvw.Items [5].Text, "#T9");
1432 Assert.AreEqual ("C", lvw.Items [6].Text, "#T10");
1435 // record compare count
1436 compareCount = mc.CompareCount;
1440 // explicitly calling Sort when Sorting is None does nothing
1441 Assert.AreEqual (compareCount, mc.CompareCount, "#U1");
1442 Assert.IsNull (lvw.ListViewItemSorter, "#U2");
1443 Assert.AreEqual ("C", lvw.Items [0].Text, "#U3");
1444 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U4");
1445 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U5");
1446 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U6");
1447 Assert.AreEqual ("B", lvw.Items [4].Text, "#U7");
1448 Assert.AreEqual ("A", lvw.Items [5].Text, "#U8");
1449 Assert.AreEqual ("BD", lvw.Items [6].Text, "#U9");
1451 // explicitly calling Sort when Sorting is None results in a re-sort
1452 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
1453 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
1454 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
1455 Assert.AreEqual ("A", lvw.Items [0].Text, "#U4");
1456 Assert.AreEqual ("B", lvw.Items [1].Text, "#U5");
1457 Assert.AreEqual ("BA", lvw.Items [2].Text, "#U6");
1458 Assert.AreEqual ("BB", lvw.Items [3].Text, "#U7");
1459 Assert.AreEqual ("BC", lvw.Items [4].Text, "#U8");
1460 Assert.AreEqual ("BD", lvw.Items [5].Text, "#U9");
1461 Assert.AreEqual ("C", lvw.Items [6].Text, "#U10");
1464 // record compare count
1465 compareCount = mc.CompareCount;
1467 lvw.Sorting = SortOrder.Ascending;
1469 // setting Sorting again, does not reinstate the custom IComparer
1470 // but sorting is actually performed using an internal non-visible
1472 Assert.AreEqual (compareCount, mc.CompareCount, "#V1");
1473 Assert.IsNull (lvw.ListViewItemSorter, "#V2");
1474 Assert.AreEqual ("A", lvw.Items [0].Text, "#V3");
1475 Assert.AreEqual ("B", lvw.Items [1].Text, "#V4");
1476 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V5");
1477 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V6");
1478 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V7");
1479 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V8");
1480 Assert.AreEqual ("C", lvw.Items [6].Text, "#V9");
1482 // setting Sorting again, uses the custom IComparer to sort the items
1483 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
1484 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
1485 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
1486 Assert.AreEqual ("C", lvw.Items [0].Text, "#V4");
1487 Assert.AreEqual ("BD", lvw.Items [1].Text, "#V5");
1488 Assert.AreEqual ("BC", lvw.Items [2].Text, "#V6");
1489 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
1490 Assert.AreEqual ("BA", lvw.Items [4].Text, "#V8");
1491 Assert.AreEqual ("B", lvw.Items [5].Text, "#V9");
1492 Assert.AreEqual ("A", lvw.Items [6].Text, "#V10");
1495 // record compare count
1496 compareCount = mc.CompareCount;
1500 // explicitly calling Sort, does not reinstate the custom IComparer
1501 // but sorting is actually performed using an internal non-visible
1503 Assert.AreEqual (compareCount, mc.CompareCount, "#W1");
1504 Assert.IsNull (lvw.ListViewItemSorter, "#W2");
1505 Assert.AreEqual ("A", lvw.Items [0].Text, "#W3");
1506 Assert.AreEqual ("B", lvw.Items [1].Text, "#W4");
1507 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W5");
1508 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W6");
1509 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W7");
1510 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W8");
1511 Assert.AreEqual ("C", lvw.Items [6].Text, "#W9");
1513 // setting Sorting again, uses the custom IComparer to sort the items
1514 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
1515 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
1516 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
1517 Assert.AreEqual ("C", lvw.Items [0].Text, "#W4");
1518 Assert.AreEqual ("BD", lvw.Items [1].Text, "#W5");
1519 Assert.AreEqual ("BC", lvw.Items [2].Text, "#W6");
1520 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
1521 Assert.AreEqual ("BA", lvw.Items [4].Text, "#W8");
1522 Assert.AreEqual ("B", lvw.Items [5].Text, "#W9");
1523 Assert.AreEqual ("A", lvw.Items [6].Text, "#W10");
1526 // record compare count
1527 compareCount = mc.CompareCount;
1532 private void AssertSortNoIcon_NotCreated (View view)
1534 Form form = new Form ();
1535 form.ShowInTaskbar = false;
1536 ListView lvw = CreateListView (view);
1537 form.Controls.Add (lvw);
1539 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
1540 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
1541 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
1542 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
1544 lvw.Sorting = SortOrder.None;
1545 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1546 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1547 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1548 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1550 lvw.Sorting = SortOrder.Ascending;
1551 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1552 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1553 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1554 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1556 lvw.Sorting = SortOrder.Descending;
1557 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1558 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1559 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1560 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1562 lvw.Sorting = SortOrder.None;
1563 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1564 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1565 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1566 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1568 lvw.Sorting = SortOrder.Ascending;
1569 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1570 Assert.AreEqual ("B", lvw.Items [0].Text, "#F2");
1571 Assert.AreEqual ("A", lvw.Items [1].Text, "#F3");
1572 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
1574 // when the handle is not created and a new item is added, the new
1575 // item is just appended to the collection
1576 lvw.Items.Add ("BB");
1577 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1578 Assert.AreEqual ("B", lvw.Items [0].Text, "#G2");
1579 Assert.AreEqual ("A", lvw.Items [1].Text, "#G3");
1580 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
1581 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1583 // assign a custom comparer
1584 MockComparer mc = new MockComparer (false);
1585 lvw.ListViewItemSorter = mc;
1587 // assigning a custom IComparer has no effect
1588 Assert.AreEqual (0, mc.CompareCount, "#H1");
1589 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1590 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1591 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1592 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1593 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1594 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1596 // modifying Sorting has no effect
1597 lvw.Sorting = SortOrder.Descending;
1598 Assert.AreEqual (0, mc.CompareCount, "#I1");
1599 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1600 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1601 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1602 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1603 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1604 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1606 // setting Sorting to the same value does not result in a sort
1608 lvw.Sorting = SortOrder.Descending;
1609 Assert.AreEqual (0, mc.CompareCount, "#J1");
1610 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1611 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1612 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1613 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1614 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1615 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1617 // setting Sorting to another value does not result in a sort
1619 lvw.Sorting = SortOrder.Ascending;
1620 Assert.AreEqual (0, mc.CompareCount, "#K1");
1621 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1622 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1623 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1624 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1625 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1626 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1628 lvw.Sorting = SortOrder.None;
1629 Assert.AreEqual (0, mc.CompareCount, "#L1");
1631 // setting Sorting to None does not perform a sort and resets the
1632 // ListViewItemSorter
1633 Assert.IsNull (lvw.ListViewItemSorter, "#L2");
1635 // setting Sorting to None does not perform a sort
1636 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2a");
1637 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L2b");
1639 Assert.AreEqual ("B", lvw.Items [0].Text, "#L3");
1640 Assert.AreEqual ("A", lvw.Items [1].Text, "#L4");
1641 Assert.AreEqual ("C", lvw.Items [2].Text, "#L5");
1642 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L6");
1644 // explicitly calling Sort when Sorting is None does nothing
1646 Assert.AreEqual (0, mc.CompareCount, "#M1");
1648 Assert.IsNull (lvw.ListViewItemSorter, "#M2");
1650 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2a");
1651 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M2b");
1653 Assert.AreEqual ("B", lvw.Items [0].Text, "#M3");
1654 Assert.AreEqual ("A", lvw.Items [1].Text, "#M4");
1655 Assert.AreEqual ("C", lvw.Items [2].Text, "#M5");
1656 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M6");
1658 lvw.Sorting = SortOrder.Ascending;
1659 Assert.AreEqual (0, mc.CompareCount, "#N1");
1661 Assert.IsNull (lvw.ListViewItemSorter, "#N2");
1663 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2a");
1664 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N2b");
1666 Assert.AreEqual ("B", lvw.Items [0].Text, "#N3");
1667 Assert.AreEqual ("A", lvw.Items [1].Text, "#N4");
1668 Assert.AreEqual ("C", lvw.Items [2].Text, "#N5");
1669 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N6");
1671 // explicitly set the custom IComparer again
1672 lvw.ListViewItemSorter = mc;
1673 Assert.AreEqual (0, mc.CompareCount, "#O1");
1674 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1675 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1676 Assert.AreEqual ("B", lvw.Items [0].Text, "#O4");
1677 Assert.AreEqual ("A", lvw.Items [1].Text, "#O5");
1678 Assert.AreEqual ("C", lvw.Items [2].Text, "#O6");
1679 Assert.AreEqual ("BB", lvw.Items [3].Text, "#O7");
1681 // explicitly calling Sort when handle is not created does not
1682 // result in sort operation
1683 Assert.AreEqual (0, mc.CompareCount, "#P1");
1684 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
1685 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
1686 Assert.AreEqual ("B", lvw.Items [0].Text, "#P4");
1687 Assert.AreEqual ("A", lvw.Items [1].Text, "#P5");
1688 Assert.AreEqual ("C", lvw.Items [2].Text, "#P6");
1689 Assert.AreEqual ("BB", lvw.Items [3].Text, "#P7");
1691 // show the form to create the handle
1694 // when the handle is created, the items are immediately sorted
1695 Assert.IsTrue (mc.CompareCount > 0, "#Q1");
1696 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1697 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1698 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1699 Assert.AreEqual ("BB", lvw.Items [1].Text, "#Q5");
1700 Assert.AreEqual ("B", lvw.Items [2].Text, "#Q6");
1701 Assert.AreEqual ("A", lvw.Items [3].Text, "#Q7");
1703 // setting ListViewItemSorter to null does not result in sort
1705 lvw.ListViewItemSorter = null;
1706 Assert.IsNull (lvw.ListViewItemSorter, "#R1");
1707 Assert.AreEqual ("C", lvw.Items [0].Text, "#R2");
1708 Assert.AreEqual ("BB", lvw.Items [1].Text, "#R3");
1709 Assert.AreEqual ("B", lvw.Items [2].Text, "#R4");
1710 Assert.AreEqual ("A", lvw.Items [3].Text, "#R5");
1712 // explicitly calling sort does not result in sort operation
1714 Assert.IsNull (lvw.ListViewItemSorter, "#S1");
1715 Assert.AreEqual ("C", lvw.Items [0].Text, "#S2");
1716 Assert.AreEqual ("BB", lvw.Items [1].Text, "#S3");
1717 Assert.AreEqual ("B", lvw.Items [2].Text, "#S4");
1718 Assert.AreEqual ("A", lvw.Items [3].Text, "#S5");
1720 // modifying Sorting does not result in sort operation
1721 lvw.Sorting = SortOrder.Ascending;
1722 Assert.IsNull (lvw.ListViewItemSorter, "#T1");
1723 Assert.AreEqual ("C", lvw.Items [0].Text, "#T2");
1724 Assert.AreEqual ("BB", lvw.Items [1].Text, "#T3");
1725 Assert.AreEqual ("B", lvw.Items [2].Text, "#T4");
1726 Assert.AreEqual ("A", lvw.Items [3].Text, "#T5");
1731 private void AssertSort_Checked (View view)
1733 Form form = new Form ();
1734 form.ShowInTaskbar = false;
1735 ListView lvw = CreateListView (view);
1736 lvw.CheckBoxes = true;
1737 form.Controls.Add (lvw);
1741 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
1742 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
1745 lvw.Items [2].Checked = true;
1746 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
1747 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B2");
1748 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#B3");
1749 Assert.AreEqual (2, lvw.CheckedIndices [0], "#B4");
1751 // sort the items descending
1752 lvw.Sorting = SortOrder.Descending;
1753 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
1754 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C2");
1755 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#C3");
1756 Assert.AreEqual (0, lvw.CheckedIndices [0], "#C4");
1758 // add an item, which ends up before the selected item after the
1760 ListViewItem item = lvw.Items.Add ("D");
1761 Assert.AreEqual (1, lvw.CheckedItems.Count, "#D1");
1762 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#D2");
1763 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#D3");
1764 Assert.AreEqual (1, lvw.CheckedIndices [0], "#D4");
1766 // remove an item before the selected item
1767 lvw.Items.Remove (item);
1768 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
1769 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E2");
1770 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#E3");
1771 Assert.AreEqual (0, lvw.CheckedIndices [0], "#E4");
1773 // insert an item before the selected item
1774 lvw.Items.Insert (0, "D");
1775 Assert.AreEqual (1, lvw.CheckedItems.Count, "#F1");
1776 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#F2");
1777 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#F3");
1778 Assert.AreEqual (1, lvw.CheckedIndices [0], "#F4");
1780 // assign a custom comparer
1781 MockComparer mc = new MockComparer (false);
1782 lvw.ListViewItemSorter = mc;
1784 // items are re-sorted automatically
1785 Assert.AreEqual (1, lvw.CheckedItems.Count, "#G1");
1786 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#G2");
1787 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#G3");
1788 Assert.AreEqual (2, lvw.CheckedIndices [0], "#G4");
1790 // modify sort order
1791 lvw.Sorting = SortOrder.Ascending;
1792 Assert.AreEqual (1, lvw.CheckedItems.Count, "#H1");
1793 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#H2");
1794 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#H3");
1795 Assert.AreEqual (1, lvw.CheckedIndices [0], "#H4");
1800 private void AssertSort_Selected (View view)
1802 Form form = new Form ();
1803 form.ShowInTaskbar = false;
1804 ListView lvw = CreateListView (view);
1805 form.Controls.Add (lvw);
1809 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
1810 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
1813 lvw.Items [2].Selected = true;
1814 Assert.AreEqual (1, lvw.SelectedItems.Count, "#B1");
1815 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#B2");
1816 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#B3");
1817 Assert.AreEqual (2, lvw.SelectedIndices [0], "#B4");
1819 // sort the items descending
1820 lvw.Sorting = SortOrder.Descending;
1821 Assert.AreEqual (1, lvw.SelectedItems.Count, "#C1");
1822 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#C2");
1823 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#C3");
1824 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C4");
1826 // add an item, which ends up before the selected item after the
1828 ListViewItem item = lvw.Items.Add ("D");
1829 Assert.AreEqual (1, lvw.SelectedItems.Count, "#D1");
1830 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#D2");
1831 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#D3");
1832 Assert.AreEqual (1, lvw.SelectedIndices [0], "#D4");
1834 // remove an item before the selected item
1835 lvw.Items.Remove (item);
1836 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
1837 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E2");
1838 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#E3");
1839 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
1841 // insert an item before the selected item
1842 lvw.Items.Insert (0, "D");
1843 Assert.AreEqual (1, lvw.SelectedItems.Count, "#F1");
1844 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#F2");
1845 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#F3");
1846 Assert.AreEqual (1, lvw.SelectedIndices [0], "#F4");
1848 // assign a custom comparer
1849 MockComparer mc = new MockComparer (false);
1850 lvw.ListViewItemSorter = mc;
1852 // items are re-sorted automatically
1853 Assert.AreEqual (1, lvw.SelectedItems.Count, "#G1");
1854 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#G2");
1855 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#G3");
1856 Assert.AreEqual (2, lvw.SelectedIndices [0], "#G4");
1858 // modify sort order
1859 lvw.Sorting = SortOrder.Ascending;
1860 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
1861 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H2");
1862 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#H3");
1863 Assert.AreEqual (1, lvw.SelectedIndices [0], "#H4");
1868 private ListView CreateListView (View view)
1870 ListView lvw = new ListView ();
1872 lvw.Items.Add ("B");
1873 lvw.Items.Add ("A");
1874 lvw.Items.Add ("C");
1878 private class MockComparer : IComparer
1881 bool _throwException;
1883 public MockComparer (bool throwException)
1885 _throwException = throwException;
1888 public int CompareCount {
1889 get { return _compareCount; }
1892 public int Compare (object x, object y)
1895 if (_throwException)
1896 throw new InvalidOperationException ();
1898 ListViewItem item_x = x as ListViewItem;
1899 ListViewItem item_y = y as ListViewItem;
1900 SortOrder sortOrder = item_x.ListView.Sorting;
1902 // we'll actually perform a reverse-sort
1903 if (sortOrder == SortOrder.Ascending)
1904 return String.Compare (item_y.Text, item_x.Text);
1906 return String.Compare (item_x.Text, item_y.Text);