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 DisposeTest ()
163 ListView lv = new ListView ();
164 lv.View = View.Details;
166 lv.LargeImageList = new ImageList ();
167 lv.SmallImageList = new ImageList ();
169 ListViewItem lvi = new ListViewItem ();
172 ColumnHeader col = new ColumnHeader ();
173 lv.Columns.Add (col);
177 Assert.IsNull (lvi.ListView, "#A1");
178 Assert.IsNull (col.ListView, "#A2");
180 Assert.IsNull (lv.LargeImageList, "#B1");
181 Assert.IsNull (lv.SmallImageList, "#B2");
182 Assert.IsNull(lv.StateImageList, "#B3");
186 public void EnsureVisibleTest ()
188 Form myform = new Form ();
189 myform.ShowInTaskbar = false;
190 myform.Visible = true;
191 ListView mylistview = new ListView ();
192 mylistview.Items.Add ("A");
193 myform.Controls.Add (mylistview);
194 mylistview.BeginUpdate ();
195 for(int x = 1 ; x < 5000 ; x++) {
196 mylistview.Items.Add ("Item " + x.ToString());
198 mylistview.EndUpdate ();
199 mylistview.EnsureVisible (4999);
204 public void GetItemRectTest ()
206 ListView mylistview = new ListView ();
207 mylistview.Items.Add ("Item 1");
208 mylistview.Items.Add ("Item 2");
209 Rectangle r = mylistview.GetItemRect (1);
210 Assert.AreEqual (0, r.Top, "#35a");
211 Assert.IsTrue (r.Bottom > 0, "#35b");
212 Assert.IsTrue (r.Right > 0, "#35c");
213 Assert.IsTrue (r.Left > 0, "#35d");
214 Assert.IsTrue (r.Height > 0, "#35e");
215 Assert.IsTrue (r.Width > 0, "#35f");
219 public void bug79076 ()
221 ListView entryList = new ListView ();
222 entryList.Sorting = SortOrder.Descending;
224 entryList.BeginUpdate ();
225 entryList.Columns.Add ("Type", 100, HorizontalAlignment.Left);
227 ListViewItem item = new ListViewItem (new string [] { "A" });
228 entryList.Items.Add (item);
229 item = new ListViewItem (new string [] { "B" });
230 entryList.Items.Add (item);
234 public void MultiSelect ()
236 Form form = new Form ();
237 form.ShowInTaskbar = false;
238 ListView lvw = CreateListView (View.Details);
239 form.Controls.Add (lvw);
240 lvw.MultiSelect = true;
241 lvw.Items [0].Selected = true;
242 lvw.Items [2].Selected = true;
244 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
245 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
247 lvw.Items [0].Selected = false;
249 Assert.AreEqual (0, lvw.SelectedItems.Count, "#B1");
250 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#B2");
252 lvw.Items [0].Selected = true;
254 Assert.AreEqual (0, lvw.SelectedItems.Count, "#C1");
255 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#C2");
259 Assert.AreEqual (2, lvw.SelectedItems.Count, "#D1");
260 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#D2");
261 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#D3");
262 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#D4");
263 Assert.AreEqual (0, lvw.SelectedIndices [0], "#D5");
264 Assert.AreEqual (2, lvw.SelectedIndices [1], "#D6");
267 lvw.Items [2].Selected = false;
269 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
270 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#E2");
271 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E3");
272 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
274 // re-select that item
275 lvw.Items [2].Selected = true;
277 Assert.AreEqual (2, lvw.SelectedItems.Count, "#F1");
278 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#F2");
279 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#F3");
280 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#F4");
281 Assert.AreEqual (0, lvw.SelectedIndices [0], "#F5");
282 Assert.AreEqual (2, lvw.SelectedIndices [1], "#F6");
284 // dis-allow selection of multiple items
285 lvw.MultiSelect = false;
287 // setting MultiSelect to false when multiple items have been
288 // selected does not deselect items
289 Assert.AreEqual (2, lvw.SelectedItems.Count, "#G1");
290 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#G2");
291 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#G3");
292 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#G4");
293 Assert.AreEqual (0, lvw.SelectedIndices [0], "#G5");
294 Assert.AreEqual (2, lvw.SelectedIndices [1], "#G6");
296 // de-select that item again
297 lvw.Items [2].Selected = false;
299 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
300 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#H2");
301 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H3");
302 Assert.AreEqual (0, lvw.SelectedIndices [0], "#H4");
304 // re-select that item again
305 lvw.Items [2].Selected = true;
307 // when MultiSelect is false, and you attempt to select more than
308 // one item, then all items will first be de-selected and then
309 // the item in question is selected
310 Assert.AreEqual (1, lvw.SelectedItems.Count, "#I1");
311 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#I2");
312 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#I3");
313 Assert.AreEqual (2, lvw.SelectedIndices [0], "#I4");
318 public void Selected ()
320 Form form = new Form ();
321 form.ShowInTaskbar = false;
322 ListView lvw = CreateListView (View.Details);
323 form.Controls.Add (lvw);
324 lvw.MultiSelect = true;
325 lvw.Items [0].Selected = true;
326 lvw.Items [2].Selected = true;
328 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
329 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
333 Assert.AreEqual (2, lvw.SelectedItems.Count, "#C1");
334 Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#C2");
335 Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#C3");
336 Assert.AreEqual (2, lvw.SelectedIndices.Count, "#C4");
337 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C5");
338 Assert.AreEqual (2, lvw.SelectedIndices [1], "#C6");
344 public void FindItemWithText ()
346 ListView lvw = new ListView();
347 ListViewItem lvi1 = new ListViewItem (String.Empty);
348 ListViewItem lvi2 = new ListViewItem ("angle bracket");
349 ListViewItem lvi3 = new ListViewItem ("bracket holder");
350 ListViewItem lvi4 = new ListViewItem ("bracket");
351 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
353 Assert.AreEqual (lvi1, lvw.FindItemWithText (String.Empty), "#A1");
354 Assert.AreEqual (lvi3, lvw.FindItemWithText ("bracket"), "#A2");
355 Assert.AreEqual (lvi3, lvw.FindItemWithText ("BrackeT"), "#A3");
356 Assert.IsNull (lvw.FindItemWithText ("holder"), "#A5");
358 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 3), "#B1");
360 Assert.AreEqual (lvw.Items [2], lvw.FindItemWithText ("bracket", true, 0, true), "#C1");
361 Assert.AreEqual (lvw.Items [3], lvw.FindItemWithText ("bracket", true, 0, false), "#C2");
362 Assert.AreEqual(lvw.Items [3], lvw.FindItemWithText("BrackeT", true, 0, false), "#C3");
363 Assert.IsNull (lvw.FindItemWithText ("brack", true, 0, false), "#C4");
365 // Sub item search tests
369 lvi1.SubItems.Add ("car bracket");
370 lvi1.SubItems.Add ("C");
373 lvi2.SubItems.Add ("car");
377 lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3 });
379 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0), "#D1");
380 Assert.AreEqual (lvi3, lvw.FindItemWithText ("C", true, 0), "#D2");
381 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 1), "#D3");
382 Assert.IsNull (lvw.FindItemWithText ("car", false, 0), "#D4");
384 Assert.AreEqual (lvi1, lvw.FindItemWithText ("car", true, 0, true), "#E1");
385 Assert.AreEqual (lvi2, lvw.FindItemWithText ("car", true, 0, false), "#E2");
386 Assert.AreEqual (lvi2, lvw.FindItemWithText ("CaR", true, 0, false), "#E3");
390 public void FindItemWithText_Exceptions ()
392 ListView lvw = new ListView ();
394 // Shouldn't throw any exception
395 lvw.FindItemWithText (null);
398 lvw.FindItemWithText (null, false, 0);
400 } catch (ArgumentOutOfRangeException) {
404 lvw.FindItemWithText (null, false, lvw.Items.Count);
406 } catch (ArgumentOutOfRangeException) {
410 lvw.Items.Add ("bracket");
413 lvw.FindItemWithText (null);
415 } catch (ArgumentNullException) {
419 lvw.FindItemWithText ("bracket", false, -1);
421 } catch (ArgumentOutOfRangeException) {
425 lvw.FindItemWithText ("bracket", false, lvw.Items.Count);
427 } catch (ArgumentOutOfRangeException) {
433 public void Sort_Details_Checked ()
435 AssertSort_Checked (View.Details);
439 public void Sort_Details_Created ()
441 AssertSortNoIcon_Created (View.Details);
445 public void Sort_Details_NotCreated ()
447 AssertSortNoIcon_NotCreated (View.Details);
451 public void Sort_Details_Selected ()
453 AssertSort_Selected (View.Details);
457 public void Sort_LargeIcon_Checked ()
459 AssertSort_Checked (View.LargeIcon);
463 public void Sort_LargeIcon_Created ()
465 AssertSortIcon_Created (View.LargeIcon);
469 public void Sort_LargeIcon_NotCreated ()
471 AssertSortIcon_NotCreated (View.LargeIcon);
475 public void Sort_LargeIcon_Selected ()
477 AssertSort_Selected (View.LargeIcon);
481 public void Sort_List_Checked ()
483 AssertSort_Checked (View.List);
487 public void Sort_List_Created ()
489 AssertSortNoIcon_Created (View.List);
493 public void Sort_List_NotCreated ()
495 AssertSortNoIcon_NotCreated (View.List);
499 public void Sort_List_Selection ()
501 AssertSort_Selected (View.List);
505 public void Sort_SmallIcon_Checked ()
507 AssertSort_Checked (View.SmallIcon);
511 public void Sort_SmallIcon_Created ()
513 AssertSortIcon_Created (View.SmallIcon);
517 public void Sort_SmallIcon_NotCreated ()
519 AssertSortIcon_NotCreated (View.SmallIcon);
523 public void Sort_SmallIcon_Selection ()
525 AssertSort_Selected (View.SmallIcon);
530 [ExpectedException (typeof (NotSupportedException))]
531 public void Sort_Tile_Checked ()
533 AssertSort_Checked (View.Tile);
537 public void Sort_Tile_Created ()
539 AssertSortNoIcon_Created (View.Tile);
543 public void Sort_Tile_NotCreated ()
545 AssertSortNoIcon_NotCreated (View.Tile);
549 public void Sort_Tile_Selection ()
551 AssertSort_Selected (View.Tile);
555 private void AssertSortIcon_Created (View view)
557 int compareCount = 0;
559 Form form = new Form ();
560 form.ShowInTaskbar = false;
561 ListView lvw = CreateListView (view);
562 form.Controls.Add (lvw);
563 Assert.IsNull (lvw.ListViewItemSorter, "#A");
567 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
568 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
569 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
570 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
572 lvw.Sorting = SortOrder.None;
573 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
574 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
575 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
576 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
578 lvw.Sorting = SortOrder.Descending;
579 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
580 Assert.AreEqual ("C", lvw.Items [0].Text, "#D2");
581 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
582 Assert.AreEqual ("A", lvw.Items [2].Text, "#D4");
584 lvw.Sorting = SortOrder.Ascending;
585 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
587 Assert.AreEqual ("A", lvw.Items [0].Text, "#E2");
588 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
589 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
591 // in .NET 1.1, changing Sorting does not have any effect for
592 // SmallIcon and LargeIcon view if no custom comparer is used
593 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
594 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
595 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
598 lvw.Sorting = SortOrder.None;
599 Assert.IsNotNull (lvw.ListViewItemSorter, "#F1");
601 Assert.AreEqual ("A", lvw.Items [0].Text, "#F2");
602 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
603 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
605 // in .NET 1.1, changing Sorting does not have any effect for
606 // SmallIcon and LargeIcon view if no custom comparer is used
607 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
608 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
609 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
612 lvw.Sorting = SortOrder.Ascending;
613 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
615 Assert.AreEqual ("A", lvw.Items [0].Text, "#G2");
616 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
617 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
619 // in .NET 1.1, changing Sorting does not have any effect for
620 // SmallIcon and LargeIcon view if no custom comparer is used
621 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
622 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
623 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
626 lvw.Sorting = SortOrder.Descending;
627 Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
628 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
629 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
630 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
632 lvw.Sorting = SortOrder.None;
633 Assert.IsNotNull (lvw.ListViewItemSorter, "#H1");
634 Assert.AreEqual ("C", lvw.Items [0].Text, "#H2");
635 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
636 Assert.AreEqual ("A", lvw.Items [2].Text, "#H4");
638 // when Sorting is None and a new item is added, the collection is
639 // sorted using the previous Sorting value
640 lvw.Items.Add ("BB");
641 Assert.IsNotNull (lvw.ListViewItemSorter, "#I1");
642 Assert.AreEqual ("C", lvw.Items [0].Text, "#I2");
643 Assert.AreEqual ("BB", lvw.Items [1].Text, "#I3");
644 Assert.AreEqual ("B", lvw.Items [2].Text, "#I4");
645 Assert.AreEqual ("A", lvw.Items [3].Text, "#I5");
647 lvw.Sorting = SortOrder.Ascending;
648 Assert.IsNotNull (lvw.ListViewItemSorter, "#J1");
650 Assert.AreEqual ("A", lvw.Items [0].Text, "#J2");
651 Assert.AreEqual ("B", lvw.Items [1].Text, "#J3");
652 Assert.AreEqual ("BB", lvw.Items [2].Text, "#J4");
653 Assert.AreEqual ("C", lvw.Items [3].Text, "#J5");
655 // in .NET 1.1, changing Sorting does not have any effect for
656 // SmallIcon and LargeIcon view if no custom comparer is used
657 Assert.AreEqual ("C", lvw.Items [0].Text, "#J2");
658 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J3");
659 Assert.AreEqual ("B", lvw.Items [2].Text, "#J4");
660 Assert.AreEqual ("A", lvw.Items [3].Text, "#J5");
663 // when Sorting is not None and a new item is added, the
664 // collection is re-sorted automatically
665 lvw.Items.Add ("BA");
666 Assert.IsNotNull (lvw.ListViewItemSorter, "#K1");
668 Assert.AreEqual ("A", lvw.Items [0].Text, "#K2");
669 Assert.AreEqual ("B", lvw.Items [1].Text, "#K3");
670 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
671 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K5");
672 Assert.AreEqual ("C", lvw.Items [4].Text, "#K6");
674 // in .NET 1.1, changing Sorting does not have any effect for
675 // SmallIcon and LargeIcon view if no custom comparer is used
676 Assert.AreEqual ("C", lvw.Items [0].Text, "#K2");
677 Assert.AreEqual ("BB", lvw.Items [1].Text, "#K3");
678 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
679 Assert.AreEqual ("B", lvw.Items [3].Text, "#K5");
680 Assert.AreEqual ("A", lvw.Items [4].Text, "#K6");
683 // assign a custom comparer
684 MockComparer mc = new MockComparer (false);
685 lvw.ListViewItemSorter = mc;
687 // when a custom IComparer is assigned, the collection is immediately
689 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
690 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
691 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
692 Assert.AreEqual ("C", lvw.Items [0].Text, "#L4");
693 Assert.AreEqual ("BB", lvw.Items [1].Text, "#L5");
694 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
695 Assert.AreEqual ("B", lvw.Items [3].Text, "#L7");
696 Assert.AreEqual ("A", lvw.Items [4].Text, "#L8");
698 // record compare count
699 compareCount = mc.CompareCount;
701 // modifying Sorting results in re-sort
702 lvw.Sorting = SortOrder.Descending;
703 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
704 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
705 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
706 Assert.AreEqual ("A", lvw.Items [0].Text, "#M4");
707 Assert.AreEqual ("B", lvw.Items [1].Text, "#M5");
708 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
709 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M7");
710 Assert.AreEqual ("C", lvw.Items [4].Text, "#M8");
712 // record compare count
713 compareCount = mc.CompareCount;
715 // setting Sorting to the same value does not result in a sort
717 lvw.Sorting = SortOrder.Descending;
718 Assert.AreEqual (compareCount, mc.CompareCount, "#N1");
719 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
720 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
721 Assert.AreEqual ("A", lvw.Items [0].Text, "#N4");
722 Assert.AreEqual ("B", lvw.Items [1].Text, "#N5");
723 Assert.AreEqual ("BA", lvw.Items [2].Text, "#N6");
724 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N7");
725 Assert.AreEqual ("C", lvw.Items [4].Text, "#N8");
727 // modifying Sorting results in re-sort
728 lvw.Sorting = SortOrder.Ascending;
729 Assert.IsTrue (mc.CompareCount > compareCount, "#O1");
730 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
731 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
732 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
733 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O5");
734 Assert.AreEqual ("BA", lvw.Items [2].Text, "#O6");
735 Assert.AreEqual ("B", lvw.Items [3].Text, "#O7");
736 Assert.AreEqual ("A", lvw.Items [4].Text, "#O8");
738 // record compare count
739 compareCount = mc.CompareCount;
741 // adding an item when Sorting is not None causes re-sort
742 lvw.Items.Add ("BC");
743 Assert.IsTrue (mc.CompareCount > compareCount, "#P1");
744 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
745 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
746 Assert.AreEqual ("C", lvw.Items [0].Text, "#P4");
747 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P5");
748 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P6");
749 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P7");
750 Assert.AreEqual ("B", lvw.Items [4].Text, "#P8");
751 Assert.AreEqual ("A", lvw.Items [5].Text, "#P9");
753 // record compare count
754 compareCount = mc.CompareCount;
756 // assigning the same custom IComparer again does not result in a
758 lvw.ListViewItemSorter = mc;
759 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
760 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
761 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
762 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
763 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
764 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
765 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
766 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
767 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
769 // setting Sorting to None does not perform a sort
770 lvw.Sorting = SortOrder.None;
771 Assert.AreEqual (compareCount, mc.CompareCount, "#R1");
772 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
773 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
774 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
775 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
776 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
777 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
778 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
779 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
781 // assigning the custom IComparer again does not result in a
783 lvw.ListViewItemSorter = mc;
784 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
785 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2");
786 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S3");
787 Assert.AreEqual ("C", lvw.Items [0].Text, "#S4");
788 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S5");
789 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S6");
790 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S7");
791 Assert.AreEqual ("B", lvw.Items [4].Text, "#S8");
792 Assert.AreEqual ("A", lvw.Items [5].Text, "#S9");
794 // set Sorting to Ascending again
795 lvw.Sorting = SortOrder.Ascending;
796 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
797 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
798 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
799 Assert.AreEqual ("C", lvw.Items [0].Text, "#T4");
800 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T5");
801 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T6");
802 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T7");
803 Assert.AreEqual ("B", lvw.Items [4].Text, "#T8");
804 Assert.AreEqual ("A", lvw.Items [5].Text, "#T9");
806 // record compare count
807 compareCount = mc.CompareCount;
809 // explicitly calling Sort results in a sort operation
811 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
812 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
813 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
814 Assert.AreEqual ("C", lvw.Items [0].Text, "#U4");
815 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U5");
816 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U6");
817 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U7");
818 Assert.AreEqual ("B", lvw.Items [4].Text, "#U8");
819 Assert.AreEqual ("A", lvw.Items [5].Text, "#U9");
820 lvw.Sorting = SortOrder.None;
822 // record compare count
823 compareCount = mc.CompareCount;
825 // adding an item when Sorting is None causes re-sort
826 lvw.Items.Add ("BD");
827 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
828 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
829 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
830 Assert.AreEqual ("A", lvw.Items [0].Text, "#V4");
831 Assert.AreEqual ("B", lvw.Items [1].Text, "#V5");
832 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V6");
833 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
834 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V8");
835 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V9");
836 Assert.AreEqual ("C", lvw.Items [6].Text, "#V10");
838 // record compare count
839 compareCount = mc.CompareCount;
841 // explicitly calling Sort when Sorting is None causes a re-sort
843 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
844 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
845 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
846 Assert.AreEqual ("A", lvw.Items [0].Text, "#W4");
847 Assert.AreEqual ("B", lvw.Items [1].Text, "#W5");
848 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W6");
849 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
850 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W8");
851 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W9");
852 Assert.AreEqual ("C", lvw.Items [6].Text, "#W10");
854 // record compare count
855 compareCount = mc.CompareCount;
859 private void AssertSortIcon_NotCreated (View view)
861 Form form = new Form ();
862 form.ShowInTaskbar = false;
863 ListView lvw = CreateListView (view);
864 form.Controls.Add (lvw);
866 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
867 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
868 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
869 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
871 lvw.Sorting = SortOrder.None;
872 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
873 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
874 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
875 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
877 lvw.Sorting = SortOrder.Descending;
878 Assert.IsNotNull (lvw.ListViewItemSorter, "#C1");
879 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
880 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
881 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
883 lvw.Sorting = SortOrder.Ascending;
884 Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
885 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
886 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
887 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
889 // when the handle is not created and a new item is added, the new
890 // item is just appended to the collection
891 lvw.Items.Add ("BB");
892 Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
893 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
894 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
895 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
896 Assert.AreEqual ("BB", lvw.Items [3].Text, "#E5");
898 // assign a custom comparer
899 MockComparer mc = new MockComparer (false);
900 lvw.ListViewItemSorter = mc;
902 // assigning a custom IComparer has no effect
903 Assert.AreEqual (0, mc.CompareCount, "#F1");
904 Assert.IsNotNull (lvw.ListViewItemSorter, "#F2");
905 Assert.AreSame (mc, lvw.ListViewItemSorter, "#F3");
906 Assert.AreEqual ("B", lvw.Items [0].Text, "#F4");
907 Assert.AreEqual ("A", lvw.Items [1].Text, "#F5");
908 Assert.AreEqual ("C", lvw.Items [2].Text, "#F6");
909 Assert.AreEqual ("BB", lvw.Items [3].Text, "#F7");
911 // modifying Sorting does not result in sort operation
912 lvw.Sorting = SortOrder.Descending;
913 Assert.AreEqual (0, mc.CompareCount, "#G1");
914 Assert.IsNotNull (lvw.ListViewItemSorter, "#G2");
915 Assert.AreSame (mc, lvw.ListViewItemSorter, "#G3");
916 Assert.AreEqual ("B", lvw.Items [0].Text, "#G4");
917 Assert.AreEqual ("A", lvw.Items [1].Text, "#G5");
918 Assert.AreEqual ("C", lvw.Items [2].Text, "#G6");
919 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G7");
921 // setting Sorting to the same value does not result in a sort
923 lvw.Sorting = SortOrder.Descending;
924 Assert.AreEqual (0, mc.CompareCount, "#H1");
925 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
926 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
927 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
928 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
929 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
930 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
932 // setting Sorting to None does not result in a sort operation
933 lvw.Sorting = SortOrder.None;
934 Assert.AreEqual (0, mc.CompareCount, "#I1");
935 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
936 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
937 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
938 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
939 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
940 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
942 // explicitly calling Sort when Sorting is None does not result
943 // in a sort operation
945 Assert.AreEqual (0, mc.CompareCount, "#J1");
946 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
947 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
948 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
949 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
950 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
951 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
953 // setting Sorting again does not result in a sort operation
954 lvw.Sorting = SortOrder.Ascending;
955 Assert.AreEqual (0, mc.CompareCount, "#K1");
956 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
957 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
958 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
959 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
960 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
961 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
963 // explicitly calling Sort when Sorting is Ascending does not
964 // result in a sort operation
966 Assert.AreEqual (0, mc.CompareCount, "#L1");
967 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
968 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
969 Assert.AreEqual ("B", lvw.Items [0].Text, "#L4");
970 Assert.AreEqual ("A", lvw.Items [1].Text, "#L5");
971 Assert.AreEqual ("C", lvw.Items [2].Text, "#L6");
972 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
974 // show the form to create the handle
977 // when the handle is created, the items are immediately sorted
978 Assert.IsTrue (mc.CompareCount > 0, "#L1");
979 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
980 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
981 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
982 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
983 Assert.AreEqual ("B", lvw.Items [2].Text, "#M6");
984 Assert.AreEqual ("A", lvw.Items [3].Text, "#M7");
986 // setting ListViewItemSorter to null does not result in sort
988 lvw.ListViewItemSorter = null;
989 Assert.IsNull (lvw.ListViewItemSorter, "#N1");
990 Assert.AreEqual ("C", lvw.Items [0].Text, "#N2");
991 Assert.AreEqual ("BB", lvw.Items [1].Text, "#N3");
992 Assert.AreEqual ("B", lvw.Items [2].Text, "#N4");
993 Assert.AreEqual ("A", lvw.Items [3].Text, "#N5");
995 // explicitly calling sort does not result in sort operation
997 Assert.IsNull (lvw.ListViewItemSorter, "#O1");
998 Assert.AreEqual ("C", lvw.Items [0].Text, "#O2");
999 Assert.AreEqual ("BB", lvw.Items [1].Text, "#O3");
1000 Assert.AreEqual ("B", lvw.Items [2].Text, "#O4");
1001 Assert.AreEqual ("A", lvw.Items [3].Text, "#O5");
1006 private void AssertSortNoIcon_Created (View view)
1008 int compareCount = 0;
1010 Form form = new Form ();
1011 form.ShowInTaskbar = false;
1012 ListView lvw = CreateListView (view);
1013 form.Controls.Add (lvw);
1014 Assert.IsNull (lvw.ListViewItemSorter, "#A");
1018 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1019 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1020 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1021 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1023 lvw.Sorting = SortOrder.None;
1024 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1025 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1026 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1027 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1029 lvw.Sorting = SortOrder.Ascending;
1030 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1031 Assert.AreEqual ("A", lvw.Items [0].Text, "#D2");
1032 Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
1033 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1035 lvw.Sorting = SortOrder.Descending;
1036 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1037 Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
1038 Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
1039 Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
1041 lvw.Sorting = SortOrder.None;
1042 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1043 Assert.AreEqual ("C", lvw.Items [0].Text, "#F2");
1044 Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
1045 Assert.AreEqual ("A", lvw.Items [2].Text, "#F4");
1047 // when Sorting is None and a new item is added, the item is
1048 // appended to the collection
1049 lvw.Items.Add ("BB");
1050 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1051 Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
1052 Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
1053 Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
1054 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1056 lvw.Sorting = SortOrder.Ascending;
1057 Assert.IsNull (lvw.ListViewItemSorter, "#H1");
1058 Assert.AreEqual ("A", lvw.Items [0].Text, "#H2");
1059 Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
1060 Assert.AreEqual ("BB", lvw.Items [2].Text, "#H4");
1061 Assert.AreEqual ("C", lvw.Items [3].Text, "#H5");
1063 // when Sorting is not None and a new item is added, the
1064 // collection is re-sorted automatically
1065 lvw.Items.Add ("BA");
1066 Assert.IsNull (lvw.ListViewItemSorter, "#I1");
1067 Assert.AreEqual ("A", lvw.Items [0].Text, "#I2");
1068 Assert.AreEqual ("B", lvw.Items [1].Text, "#I3");
1069 Assert.AreEqual ("BA", lvw.Items [2].Text, "#I4");
1070 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I5");
1071 Assert.AreEqual ("C", lvw.Items [4].Text, "#I6");
1073 // assign a custom comparer
1074 MockComparer mc = new MockComparer (false);
1075 lvw.ListViewItemSorter = mc;
1077 // when a custom IComparer is assigned, the collection is immediately
1079 Assert.IsTrue (mc.CompareCount > compareCount, "#J1");
1080 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1081 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1082 Assert.AreEqual ("C", lvw.Items [0].Text, "#J4");
1083 Assert.AreEqual ("BB", lvw.Items [1].Text, "#J5");
1084 Assert.AreEqual ("BA", lvw.Items [2].Text, "#J6");
1085 Assert.AreEqual ("B", lvw.Items [3].Text, "#J7");
1086 Assert.AreEqual ("A", lvw.Items [4].Text, "#J8");
1088 // record compare count
1089 compareCount = mc.CompareCount;
1091 // modifying the sort order results in a sort
1092 lvw.Sorting = SortOrder.Descending;
1093 Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
1094 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1095 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1096 Assert.AreEqual ("A", lvw.Items [0].Text, "#K4");
1097 Assert.AreEqual ("B", lvw.Items [1].Text, "#K5");
1098 Assert.AreEqual ("BA", lvw.Items [2].Text, "#K6");
1099 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1100 Assert.AreEqual ("C", lvw.Items [4].Text, "#K8");
1102 // record compare count
1103 compareCount = mc.CompareCount;
1105 // set the sort order to the same value does not result in a sort
1107 lvw.Sorting = SortOrder.Descending;
1108 Assert.AreEqual (compareCount, mc.CompareCount, "#L1");
1109 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
1110 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
1111 Assert.AreEqual ("A", lvw.Items [0].Text, "#L4");
1112 Assert.AreEqual ("B", lvw.Items [1].Text, "#L5");
1113 Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
1114 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
1115 Assert.AreEqual ("C", lvw.Items [4].Text, "#L8");
1117 // modifying the sort order results in a sort
1118 lvw.Sorting = SortOrder.Ascending;
1119 Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
1120 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
1121 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
1122 Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
1123 Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
1124 Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
1125 Assert.AreEqual ("B", lvw.Items [3].Text, "#M7");
1126 Assert.AreEqual ("A", lvw.Items [4].Text, "#M8");
1128 // record compare count
1129 compareCount = mc.CompareCount;
1131 // adding an item when Sorting is not None caused a re-sort
1132 lvw.Items.Add ("BC");
1133 Assert.IsTrue (mc.CompareCount > compareCount, "#N1");
1134 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
1135 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
1136 Assert.AreEqual ("C", lvw.Items [0].Text, "#N4");
1137 Assert.AreEqual ("BC", lvw.Items [1].Text, "#N5");
1138 Assert.AreEqual ("BB", lvw.Items [2].Text, "#N6");
1139 Assert.AreEqual ("BA", lvw.Items [3].Text, "#N7");
1140 Assert.AreEqual ("B", lvw.Items [4].Text, "#N8");
1141 Assert.AreEqual ("A", lvw.Items [5].Text, "#N9");
1143 // record compare count
1144 compareCount = mc.CompareCount;
1146 // assigning the same custom IComparer again does not result in a
1148 lvw.ListViewItemSorter = mc;
1149 Assert.AreEqual (compareCount, mc.CompareCount, "#O1");
1150 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1151 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1152 Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
1153 Assert.AreEqual ("BC", lvw.Items [1].Text, "#O5");
1154 Assert.AreEqual ("BB", lvw.Items [2].Text, "#O6");
1155 Assert.AreEqual ("BA", lvw.Items [3].Text, "#O7");
1156 Assert.AreEqual ("B", lvw.Items [4].Text, "#O8");
1157 Assert.AreEqual ("A", lvw.Items [5].Text, "#O9");
1159 // setting sort order to None does not perform a sort and resets
1160 // the ListViewItemSorter
1161 lvw.Sorting = SortOrder.None;
1162 Assert.AreEqual (compareCount, mc.CompareCount, "#P1");
1164 Assert.IsNull (lvw.ListViewItemSorter, "#P2");
1166 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2a");
1167 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P2b");
1169 Assert.AreEqual ("C", lvw.Items [0].Text, "#P3");
1170 Assert.AreEqual ("BC", lvw.Items [1].Text, "#P4");
1171 Assert.AreEqual ("BB", lvw.Items [2].Text, "#P5");
1172 Assert.AreEqual ("BA", lvw.Items [3].Text, "#P6");
1173 Assert.AreEqual ("B", lvw.Items [4].Text, "#P7");
1174 Assert.AreEqual ("A", lvw.Items [5].Text, "#P8");
1177 lvw.ListViewItemSorter = mc;
1179 // assigning the previous custom IComparer again results in a
1181 Assert.IsTrue (mc.CompareCount > compareCount, "#Q1");
1182 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1183 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1184 Assert.AreEqual ("A", lvw.Items [0].Text, "#Q4");
1185 Assert.AreEqual ("B", lvw.Items [1].Text, "#Q5");
1186 Assert.AreEqual ("BA", lvw.Items [2].Text, "#Q6");
1187 Assert.AreEqual ("BB", lvw.Items [3].Text, "#Q7");
1188 Assert.AreEqual ("BC", lvw.Items [4].Text, "#Q8");
1189 Assert.AreEqual ("C", lvw.Items [5].Text, "#Q9");
1191 Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
1192 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1193 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1194 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1195 Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
1196 Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
1197 Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
1198 Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
1199 Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
1202 // record compare count
1203 compareCount = mc.CompareCount;
1205 // set Sorting to Ascending again to verify that the internal
1206 // IComparer is not used when we reset Sorting to None
1207 // (as the items would then be sorted alfabetically)
1208 lvw.Sorting = SortOrder.Ascending;
1209 Assert.IsTrue (mc.CompareCount > compareCount, "#R1");
1210 Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
1211 Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
1212 Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
1213 Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
1214 Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
1215 Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
1216 Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
1217 Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
1219 // record compare count
1220 compareCount = mc.CompareCount;
1222 lvw.Sorting = SortOrder.None;
1223 Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
1225 Assert.IsNull (lvw.ListViewItemSorter, "#S2");
1227 Assert.IsNotNull (lvw.ListViewItemSorter, "#S2a");
1228 Assert.AreSame (mc, lvw.ListViewItemSorter, "#S2b");
1230 Assert.AreEqual ("C", lvw.Items [0].Text, "#S3");
1231 Assert.AreEqual ("BC", lvw.Items [1].Text, "#S4");
1232 Assert.AreEqual ("BB", lvw.Items [2].Text, "#S5");
1233 Assert.AreEqual ("BA", lvw.Items [3].Text, "#S6");
1234 Assert.AreEqual ("B", lvw.Items [4].Text, "#S7");
1235 Assert.AreEqual ("A", lvw.Items [5].Text, "#S8");
1237 // record compare count
1238 compareCount = mc.CompareCount;
1240 lvw.Items.Add ("BD");
1242 // adding an item when Sorting is None does not cause a re-sort
1243 Assert.AreEqual (compareCount, mc.CompareCount, "#T1");
1244 Assert.IsNull (lvw.ListViewItemSorter, "#T2");
1245 Assert.AreEqual ("C", lvw.Items [0].Text, "#T3");
1246 Assert.AreEqual ("BC", lvw.Items [1].Text, "#T4");
1247 Assert.AreEqual ("BB", lvw.Items [2].Text, "#T5");
1248 Assert.AreEqual ("BA", lvw.Items [3].Text, "#T6");
1249 Assert.AreEqual ("B", lvw.Items [4].Text, "#T7");
1250 Assert.AreEqual ("A", lvw.Items [5].Text, "#T8");
1251 Assert.AreEqual ("BD", lvw.Items [6].Text, "#T9");
1253 // adding an item when Sorting is None results in a re-sort
1254 Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
1255 Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
1256 Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
1257 Assert.AreEqual ("A", lvw.Items [0].Text, "#T4");
1258 Assert.AreEqual ("B", lvw.Items [1].Text, "#T5");
1259 Assert.AreEqual ("BA", lvw.Items [2].Text, "#T6");
1260 Assert.AreEqual ("BB", lvw.Items [3].Text, "#T7");
1261 Assert.AreEqual ("BC", lvw.Items [4].Text, "#T8");
1262 Assert.AreEqual ("BD", lvw.Items [5].Text, "#T9");
1263 Assert.AreEqual ("C", lvw.Items [6].Text, "#T10");
1266 // record compare count
1267 compareCount = mc.CompareCount;
1271 // explicitly calling Sort when Sorting is None does nothing
1272 Assert.AreEqual (compareCount, mc.CompareCount, "#U1");
1273 Assert.IsNull (lvw.ListViewItemSorter, "#U2");
1274 Assert.AreEqual ("C", lvw.Items [0].Text, "#U3");
1275 Assert.AreEqual ("BC", lvw.Items [1].Text, "#U4");
1276 Assert.AreEqual ("BB", lvw.Items [2].Text, "#U5");
1277 Assert.AreEqual ("BA", lvw.Items [3].Text, "#U6");
1278 Assert.AreEqual ("B", lvw.Items [4].Text, "#U7");
1279 Assert.AreEqual ("A", lvw.Items [5].Text, "#U8");
1280 Assert.AreEqual ("BD", lvw.Items [6].Text, "#U9");
1282 // explicitly calling Sort when Sorting is None results in a re-sort
1283 Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
1284 Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
1285 Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
1286 Assert.AreEqual ("A", lvw.Items [0].Text, "#U4");
1287 Assert.AreEqual ("B", lvw.Items [1].Text, "#U5");
1288 Assert.AreEqual ("BA", lvw.Items [2].Text, "#U6");
1289 Assert.AreEqual ("BB", lvw.Items [3].Text, "#U7");
1290 Assert.AreEqual ("BC", lvw.Items [4].Text, "#U8");
1291 Assert.AreEqual ("BD", lvw.Items [5].Text, "#U9");
1292 Assert.AreEqual ("C", lvw.Items [6].Text, "#U10");
1295 // record compare count
1296 compareCount = mc.CompareCount;
1298 lvw.Sorting = SortOrder.Ascending;
1300 // setting Sorting again, does not reinstate the custom IComparer
1301 // but sorting is actually performed using an internal non-visible
1303 Assert.AreEqual (compareCount, mc.CompareCount, "#V1");
1304 Assert.IsNull (lvw.ListViewItemSorter, "#V2");
1305 Assert.AreEqual ("A", lvw.Items [0].Text, "#V3");
1306 Assert.AreEqual ("B", lvw.Items [1].Text, "#V4");
1307 Assert.AreEqual ("BA", lvw.Items [2].Text, "#V5");
1308 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V6");
1309 Assert.AreEqual ("BC", lvw.Items [4].Text, "#V7");
1310 Assert.AreEqual ("BD", lvw.Items [5].Text, "#V8");
1311 Assert.AreEqual ("C", lvw.Items [6].Text, "#V9");
1313 // setting Sorting again, uses the custom IComparer to sort the items
1314 Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
1315 Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
1316 Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
1317 Assert.AreEqual ("C", lvw.Items [0].Text, "#V4");
1318 Assert.AreEqual ("BD", lvw.Items [1].Text, "#V5");
1319 Assert.AreEqual ("BC", lvw.Items [2].Text, "#V6");
1320 Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
1321 Assert.AreEqual ("BA", lvw.Items [4].Text, "#V8");
1322 Assert.AreEqual ("B", lvw.Items [5].Text, "#V9");
1323 Assert.AreEqual ("A", lvw.Items [6].Text, "#V10");
1326 // record compare count
1327 compareCount = mc.CompareCount;
1331 // explicitly calling Sort, does not reinstate the custom IComparer
1332 // but sorting is actually performed using an internal non-visible
1334 Assert.AreEqual (compareCount, mc.CompareCount, "#W1");
1335 Assert.IsNull (lvw.ListViewItemSorter, "#W2");
1336 Assert.AreEqual ("A", lvw.Items [0].Text, "#W3");
1337 Assert.AreEqual ("B", lvw.Items [1].Text, "#W4");
1338 Assert.AreEqual ("BA", lvw.Items [2].Text, "#W5");
1339 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W6");
1340 Assert.AreEqual ("BC", lvw.Items [4].Text, "#W7");
1341 Assert.AreEqual ("BD", lvw.Items [5].Text, "#W8");
1342 Assert.AreEqual ("C", lvw.Items [6].Text, "#W9");
1344 // setting Sorting again, uses the custom IComparer to sort the items
1345 Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
1346 Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
1347 Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
1348 Assert.AreEqual ("C", lvw.Items [0].Text, "#W4");
1349 Assert.AreEqual ("BD", lvw.Items [1].Text, "#W5");
1350 Assert.AreEqual ("BC", lvw.Items [2].Text, "#W6");
1351 Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
1352 Assert.AreEqual ("BA", lvw.Items [4].Text, "#W8");
1353 Assert.AreEqual ("B", lvw.Items [5].Text, "#W9");
1354 Assert.AreEqual ("A", lvw.Items [6].Text, "#W10");
1357 // record compare count
1358 compareCount = mc.CompareCount;
1363 private void AssertSortNoIcon_NotCreated (View view)
1365 Form form = new Form ();
1366 form.ShowInTaskbar = false;
1367 ListView lvw = CreateListView (view);
1368 form.Controls.Add (lvw);
1370 Assert.IsNull (lvw.ListViewItemSorter, "#A1");
1371 Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
1372 Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
1373 Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
1375 lvw.Sorting = SortOrder.None;
1376 Assert.IsNull (lvw.ListViewItemSorter, "#B1");
1377 Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
1378 Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
1379 Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
1381 lvw.Sorting = SortOrder.Ascending;
1382 Assert.IsNull (lvw.ListViewItemSorter, "#C1");
1383 Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
1384 Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
1385 Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
1387 lvw.Sorting = SortOrder.Descending;
1388 Assert.IsNull (lvw.ListViewItemSorter, "#D1");
1389 Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
1390 Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
1391 Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
1393 lvw.Sorting = SortOrder.None;
1394 Assert.IsNull (lvw.ListViewItemSorter, "#E1");
1395 Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
1396 Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
1397 Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
1399 lvw.Sorting = SortOrder.Ascending;
1400 Assert.IsNull (lvw.ListViewItemSorter, "#F1");
1401 Assert.AreEqual ("B", lvw.Items [0].Text, "#F2");
1402 Assert.AreEqual ("A", lvw.Items [1].Text, "#F3");
1403 Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
1405 // when the handle is not created and a new item is added, the new
1406 // item is just appended to the collection
1407 lvw.Items.Add ("BB");
1408 Assert.IsNull (lvw.ListViewItemSorter, "#G1");
1409 Assert.AreEqual ("B", lvw.Items [0].Text, "#G2");
1410 Assert.AreEqual ("A", lvw.Items [1].Text, "#G3");
1411 Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
1412 Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
1414 // assign a custom comparer
1415 MockComparer mc = new MockComparer (false);
1416 lvw.ListViewItemSorter = mc;
1418 // assigning a custom IComparer has no effect
1419 Assert.AreEqual (0, mc.CompareCount, "#H1");
1420 Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
1421 Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
1422 Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
1423 Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
1424 Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
1425 Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
1427 // modifying Sorting has no effect
1428 lvw.Sorting = SortOrder.Descending;
1429 Assert.AreEqual (0, mc.CompareCount, "#I1");
1430 Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
1431 Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
1432 Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
1433 Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
1434 Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
1435 Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
1437 // setting Sorting to the same value does not result in a sort
1439 lvw.Sorting = SortOrder.Descending;
1440 Assert.AreEqual (0, mc.CompareCount, "#J1");
1441 Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
1442 Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
1443 Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
1444 Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
1445 Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
1446 Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
1448 // setting Sorting to another value does not result in a sort
1450 lvw.Sorting = SortOrder.Ascending;
1451 Assert.AreEqual (0, mc.CompareCount, "#K1");
1452 Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
1453 Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
1454 Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
1455 Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
1456 Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
1457 Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
1459 lvw.Sorting = SortOrder.None;
1460 Assert.AreEqual (0, mc.CompareCount, "#L1");
1462 // setting Sorting to None does not perform a sort and resets the
1463 // ListViewItemSorter
1464 Assert.IsNull (lvw.ListViewItemSorter, "#L2");
1466 // setting Sorting to None does not perform a sort
1467 Assert.IsNotNull (lvw.ListViewItemSorter, "#L2a");
1468 Assert.AreSame (mc, lvw.ListViewItemSorter, "#L2b");
1470 Assert.AreEqual ("B", lvw.Items [0].Text, "#L3");
1471 Assert.AreEqual ("A", lvw.Items [1].Text, "#L4");
1472 Assert.AreEqual ("C", lvw.Items [2].Text, "#L5");
1473 Assert.AreEqual ("BB", lvw.Items [3].Text, "#L6");
1475 // explicitly calling Sort when Sorting is None does nothing
1477 Assert.AreEqual (0, mc.CompareCount, "#M1");
1479 Assert.IsNull (lvw.ListViewItemSorter, "#M2");
1481 Assert.IsNotNull (lvw.ListViewItemSorter, "#M2a");
1482 Assert.AreSame (mc, lvw.ListViewItemSorter, "#M2b");
1484 Assert.AreEqual ("B", lvw.Items [0].Text, "#M3");
1485 Assert.AreEqual ("A", lvw.Items [1].Text, "#M4");
1486 Assert.AreEqual ("C", lvw.Items [2].Text, "#M5");
1487 Assert.AreEqual ("BB", lvw.Items [3].Text, "#M6");
1489 lvw.Sorting = SortOrder.Ascending;
1490 Assert.AreEqual (0, mc.CompareCount, "#N1");
1492 Assert.IsNull (lvw.ListViewItemSorter, "#N2");
1494 Assert.IsNotNull (lvw.ListViewItemSorter, "#N2a");
1495 Assert.AreSame (mc, lvw.ListViewItemSorter, "#N2b");
1497 Assert.AreEqual ("B", lvw.Items [0].Text, "#N3");
1498 Assert.AreEqual ("A", lvw.Items [1].Text, "#N4");
1499 Assert.AreEqual ("C", lvw.Items [2].Text, "#N5");
1500 Assert.AreEqual ("BB", lvw.Items [3].Text, "#N6");
1502 // explicitly set the custom IComparer again
1503 lvw.ListViewItemSorter = mc;
1504 Assert.AreEqual (0, mc.CompareCount, "#O1");
1505 Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
1506 Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
1507 Assert.AreEqual ("B", lvw.Items [0].Text, "#O4");
1508 Assert.AreEqual ("A", lvw.Items [1].Text, "#O5");
1509 Assert.AreEqual ("C", lvw.Items [2].Text, "#O6");
1510 Assert.AreEqual ("BB", lvw.Items [3].Text, "#O7");
1512 // explicitly calling Sort when handle is not created does not
1513 // result in sort operation
1514 Assert.AreEqual (0, mc.CompareCount, "#P1");
1515 Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
1516 Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
1517 Assert.AreEqual ("B", lvw.Items [0].Text, "#P4");
1518 Assert.AreEqual ("A", lvw.Items [1].Text, "#P5");
1519 Assert.AreEqual ("C", lvw.Items [2].Text, "#P6");
1520 Assert.AreEqual ("BB", lvw.Items [3].Text, "#P7");
1522 // show the form to create the handle
1525 // when the handle is created, the items are immediately sorted
1526 Assert.IsTrue (mc.CompareCount > 0, "#Q1");
1527 Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
1528 Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
1529 Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
1530 Assert.AreEqual ("BB", lvw.Items [1].Text, "#Q5");
1531 Assert.AreEqual ("B", lvw.Items [2].Text, "#Q6");
1532 Assert.AreEqual ("A", lvw.Items [3].Text, "#Q7");
1534 // setting ListViewItemSorter to null does not result in sort
1536 lvw.ListViewItemSorter = null;
1537 Assert.IsNull (lvw.ListViewItemSorter, "#R1");
1538 Assert.AreEqual ("C", lvw.Items [0].Text, "#R2");
1539 Assert.AreEqual ("BB", lvw.Items [1].Text, "#R3");
1540 Assert.AreEqual ("B", lvw.Items [2].Text, "#R4");
1541 Assert.AreEqual ("A", lvw.Items [3].Text, "#R5");
1543 // explicitly calling sort does not result in sort operation
1545 Assert.IsNull (lvw.ListViewItemSorter, "#S1");
1546 Assert.AreEqual ("C", lvw.Items [0].Text, "#S2");
1547 Assert.AreEqual ("BB", lvw.Items [1].Text, "#S3");
1548 Assert.AreEqual ("B", lvw.Items [2].Text, "#S4");
1549 Assert.AreEqual ("A", lvw.Items [3].Text, "#S5");
1551 // modifying Sorting does not result in sort operation
1552 lvw.Sorting = SortOrder.Ascending;
1553 Assert.IsNull (lvw.ListViewItemSorter, "#T1");
1554 Assert.AreEqual ("C", lvw.Items [0].Text, "#T2");
1555 Assert.AreEqual ("BB", lvw.Items [1].Text, "#T3");
1556 Assert.AreEqual ("B", lvw.Items [2].Text, "#T4");
1557 Assert.AreEqual ("A", lvw.Items [3].Text, "#T5");
1562 private void AssertSort_Checked (View view)
1564 Form form = new Form ();
1565 form.ShowInTaskbar = false;
1566 ListView lvw = CreateListView (view);
1567 lvw.CheckBoxes = true;
1568 form.Controls.Add (lvw);
1572 Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
1573 Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
1576 lvw.Items [2].Checked = true;
1577 Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
1578 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B2");
1579 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#B3");
1580 Assert.AreEqual (2, lvw.CheckedIndices [0], "#B4");
1582 // sort the items descending
1583 lvw.Sorting = SortOrder.Descending;
1584 Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
1585 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C2");
1586 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#C3");
1587 Assert.AreEqual (0, lvw.CheckedIndices [0], "#C4");
1589 // add an item, which ends up before the selected item after the
1591 ListViewItem item = lvw.Items.Add ("D");
1592 Assert.AreEqual (1, lvw.CheckedItems.Count, "#D1");
1593 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#D2");
1594 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#D3");
1595 Assert.AreEqual (1, lvw.CheckedIndices [0], "#D4");
1597 // remove an item before the selected item
1598 lvw.Items.Remove (item);
1599 Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
1600 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E2");
1601 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#E3");
1602 Assert.AreEqual (0, lvw.CheckedIndices [0], "#E4");
1604 // insert an item before the selected item
1605 lvw.Items.Insert (0, "D");
1606 Assert.AreEqual (1, lvw.CheckedItems.Count, "#F1");
1607 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#F2");
1608 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#F3");
1609 Assert.AreEqual (1, lvw.CheckedIndices [0], "#F4");
1611 // assign a custom comparer
1612 MockComparer mc = new MockComparer (false);
1613 lvw.ListViewItemSorter = mc;
1615 // items are re-sorted automatically
1616 Assert.AreEqual (1, lvw.CheckedItems.Count, "#G1");
1617 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#G2");
1618 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#G3");
1619 Assert.AreEqual (2, lvw.CheckedIndices [0], "#G4");
1621 // modify sort order
1622 lvw.Sorting = SortOrder.Ascending;
1623 Assert.AreEqual (1, lvw.CheckedItems.Count, "#H1");
1624 Assert.AreEqual (1, lvw.CheckedIndices.Count, "#H2");
1625 Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#H3");
1626 Assert.AreEqual (1, lvw.CheckedIndices [0], "#H4");
1631 private void AssertSort_Selected (View view)
1633 Form form = new Form ();
1634 form.ShowInTaskbar = false;
1635 ListView lvw = CreateListView (view);
1636 form.Controls.Add (lvw);
1640 Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
1641 Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
1644 lvw.Items [2].Selected = true;
1645 Assert.AreEqual (1, lvw.SelectedItems.Count, "#B1");
1646 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#B2");
1647 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#B3");
1648 Assert.AreEqual (2, lvw.SelectedIndices [0], "#B4");
1650 // sort the items descending
1651 lvw.Sorting = SortOrder.Descending;
1652 Assert.AreEqual (1, lvw.SelectedItems.Count, "#C1");
1653 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#C2");
1654 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#C3");
1655 Assert.AreEqual (0, lvw.SelectedIndices [0], "#C4");
1657 // add an item, which ends up before the selected item after the
1659 ListViewItem item = lvw.Items.Add ("D");
1660 Assert.AreEqual (1, lvw.SelectedItems.Count, "#D1");
1661 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#D2");
1662 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#D3");
1663 Assert.AreEqual (1, lvw.SelectedIndices [0], "#D4");
1665 // remove an item before the selected item
1666 lvw.Items.Remove (item);
1667 Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
1668 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E2");
1669 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#E3");
1670 Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
1672 // insert an item before the selected item
1673 lvw.Items.Insert (0, "D");
1674 Assert.AreEqual (1, lvw.SelectedItems.Count, "#F1");
1675 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#F2");
1676 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#F3");
1677 Assert.AreEqual (1, lvw.SelectedIndices [0], "#F4");
1679 // assign a custom comparer
1680 MockComparer mc = new MockComparer (false);
1681 lvw.ListViewItemSorter = mc;
1683 // items are re-sorted automatically
1684 Assert.AreEqual (1, lvw.SelectedItems.Count, "#G1");
1685 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#G2");
1686 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#G3");
1687 Assert.AreEqual (2, lvw.SelectedIndices [0], "#G4");
1689 // modify sort order
1690 lvw.Sorting = SortOrder.Ascending;
1691 Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
1692 Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H2");
1693 Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#H3");
1694 Assert.AreEqual (1, lvw.SelectedIndices [0], "#H4");
1699 private ListView CreateListView (View view)
1701 ListView lvw = new ListView ();
1703 lvw.Items.Add ("B");
1704 lvw.Items.Add ("A");
1705 lvw.Items.Add ("C");
1709 private class MockComparer : IComparer
1712 bool _throwException;
1714 public MockComparer (bool throwException)
1716 _throwException = throwException;
1719 public int CompareCount {
1720 get { return _compareCount; }
1723 public int Compare (object x, object y)
1726 if (_throwException)
1727 throw new InvalidOperationException ();
1729 ListViewItem item_x = x as ListViewItem;
1730 ListViewItem item_y = y as ListViewItem;
1731 SortOrder sortOrder = item_x.ListView.Sorting;
1733 // we'll actually perform a reverse-sort
1734 if (sortOrder == SortOrder.Ascending)
1735 return String.Compare (item_y.Text, item_x.Text);
1737 return String.Compare (item_x.Text, item_y.Text);