ListViewTest.cs 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609
  1. //
  2. // ListViewTest.cs: Test cases for ListView.
  3. //
  4. // Author:
  5. // Ritvik Mayank ([email protected])
  6. //
  7. // (C) 2005 Novell, Inc. (http://www.novell.com)
  8. //
  9. using System;
  10. using System.Collections;
  11. using System.Drawing;
  12. using System.Reflection;
  13. using System.Windows.Forms;
  14. using NUnit.Framework;
  15. namespace MonoTests.System.Windows.Forms
  16. {
  17. [TestFixture]
  18. public class ListViewTest
  19. {
  20. [Test]
  21. public void ListViewPropertyTest ()
  22. {
  23. ListView mylistview = new ListView ();
  24. Assert.AreEqual (ItemActivation.Standard, mylistview.Activation, "#1");
  25. Assert.AreEqual (ListViewAlignment.Top, mylistview.Alignment, "#2");
  26. Assert.AreEqual (false, mylistview.AllowColumnReorder, "#3");
  27. Assert.AreEqual (true, mylistview.AutoArrange, "#4");
  28. Assert.AreEqual (BorderStyle.Fixed3D , mylistview.BorderStyle, "#5");
  29. Assert.AreEqual (false, mylistview.CheckBoxes, "#6");
  30. Assert.AreEqual (0, mylistview.CheckedIndices.Count, "#7");
  31. Assert.AreEqual (0, mylistview.CheckedItems.Count, "#8");
  32. Assert.AreEqual (0, mylistview.Columns.Count, "#9");
  33. Assert.AreEqual (null, mylistview.FocusedItem, "#10");
  34. Assert.AreEqual (false, mylistview.FullRowSelect, "#11");
  35. Assert.AreEqual (false, mylistview.GridLines, "#12");
  36. Assert.AreEqual (ColumnHeaderStyle.Clickable, mylistview.HeaderStyle, "#13");
  37. Assert.AreEqual (true, mylistview.HideSelection, "#14");
  38. Assert.AreEqual (false, mylistview.HoverSelection, "#15");
  39. ListViewItem item1 = new ListViewItem ("A", -1);
  40. mylistview.Items.Add (item1);
  41. Assert.AreEqual (1, mylistview.Items.Count, "#16");
  42. Assert.AreEqual (false, mylistview.LabelEdit, "#17");
  43. Assert.AreEqual (true, mylistview.LabelWrap, "#18");
  44. Assert.AreEqual (null, mylistview.LargeImageList, "#19");
  45. Assert.AreEqual (null, mylistview.ListViewItemSorter, "#20");
  46. Assert.AreEqual (true, mylistview.MultiSelect, "#21");
  47. Assert.AreEqual (true, mylistview.Scrollable, "#22");
  48. Assert.AreEqual (0, mylistview.SelectedIndices.Count, "#23");
  49. Assert.AreEqual (0, mylistview.SelectedItems.Count, "#24");
  50. Assert.AreEqual (null, mylistview.SmallImageList, "#25");
  51. Assert.AreEqual (null, mylistview.LargeImageList, "#26");
  52. Assert.AreEqual (SortOrder.None, mylistview.Sorting, "#27");
  53. Assert.AreEqual (null, mylistview.StateImageList, "#28");
  54. Assert.AreEqual (View.LargeIcon, mylistview.View, "#29");
  55. mylistview.View = View.List;
  56. Assert.AreEqual (false, mylistview.TopItem.Checked, "#30");
  57. }
  58. [Test]
  59. public void ArrangeIconsTest ()
  60. {
  61. Form myform = new Form ();
  62. ListView mylistview = new ListView ();
  63. myform.Controls.Add (mylistview);
  64. mylistview.Items.Add ("Item 1");
  65. mylistview.Items.Add ("Item 2");
  66. mylistview.View = View.LargeIcon;
  67. mylistview.ArrangeIcons ();
  68. myform.Dispose ();
  69. }
  70. [Test]
  71. public void BeginEndUpdateTest ()
  72. {
  73. Form myform = new Form ();
  74. myform.Visible = true;
  75. ListView mylistview = new ListView();
  76. mylistview.Items.Add ("A");
  77. mylistview.Visible = true;
  78. myform.Controls.Add (mylistview);
  79. mylistview.BeginUpdate ();
  80. for(int x = 1 ; x < 5000 ; x++){
  81. mylistview.Items.Add ("Item " + x.ToString());
  82. }
  83. mylistview.EndUpdate ();
  84. myform.Dispose ();
  85. }
  86. [Test]
  87. public void CheckBoxes ()
  88. {
  89. Form form = new Form ();
  90. ListView lvw = new ListView ();
  91. form.Controls.Add (lvw);
  92. lvw.Items.Add ("A");
  93. ListViewItem itemB = lvw.Items.Add ("B");
  94. lvw.Items.Add ("C");
  95. itemB.Checked = true;
  96. Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
  97. Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
  98. lvw.CheckBoxes = true;
  99. Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
  100. Assert.AreSame (itemB, lvw.CheckedItems [0], "#B2");
  101. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B3");
  102. Assert.AreEqual (1, lvw.CheckedIndices [0], "#B4");
  103. form.Show ();
  104. Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
  105. Assert.AreSame (itemB, lvw.CheckedItems [0], "#C2");
  106. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C3");
  107. Assert.AreEqual (1, lvw.CheckedIndices [0], "#C4");
  108. lvw.CheckBoxes = false;
  109. Assert.AreEqual (0, lvw.CheckedItems.Count, "#D1");
  110. Assert.AreEqual (0, lvw.CheckedIndices.Count, "#D2");
  111. lvw.CheckBoxes = true;
  112. Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
  113. Assert.AreSame (itemB, lvw.CheckedItems [0], "#E2");
  114. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E3");
  115. Assert.AreEqual (1, lvw.CheckedIndices [0], "#E4");
  116. form.Dispose ();
  117. }
  118. [Test]
  119. public void ClearTest ()
  120. {
  121. Form myform = new Form ();
  122. myform.Visible = true;
  123. ListView mylistview = new ListView ();
  124. mylistview.Items.Add ("A");
  125. mylistview.Columns.Add ("Item Column", -2, HorizontalAlignment.Left);
  126. mylistview.Visible = true;
  127. myform.Controls.Add (mylistview);
  128. Assert.AreEqual (1, mylistview.Columns.Count, "#31");
  129. Assert.AreEqual (1, mylistview.Items.Count, "#32");
  130. mylistview.Clear ();
  131. Assert.AreEqual (0, mylistview.Columns.Count, "#33");
  132. Assert.AreEqual (0, mylistview.Items.Count, "#34");
  133. myform.Dispose ();
  134. }
  135. [Test]
  136. public void EnsureVisibleTest ()
  137. {
  138. Form myform = new Form ();
  139. myform.Visible = true;
  140. ListView mylistview = new ListView ();
  141. mylistview.Items.Add ("A");
  142. myform.Controls.Add (mylistview);
  143. mylistview.BeginUpdate ();
  144. for(int x = 1 ; x < 5000 ; x++) {
  145. mylistview.Items.Add ("Item " + x.ToString());
  146. }
  147. mylistview.EndUpdate ();
  148. mylistview.EnsureVisible (4999);
  149. myform.Dispose ();
  150. }
  151. [Test]
  152. public void GetItemRectTest ()
  153. {
  154. ListView mylistview = new ListView ();
  155. mylistview.Items.Add ("Item 1");
  156. mylistview.Items.Add ("Item 2");
  157. Rectangle r = mylistview.GetItemRect (1);
  158. Assert.AreEqual (0, r.Top, "#35a");
  159. Assert.IsTrue (r.Bottom > 0, "#35b");
  160. Assert.IsTrue (r.Right > 0, "#35c");
  161. Assert.IsTrue (r.Left > 0, "#35d");
  162. Assert.IsTrue (r.Height > 0, "#35e");
  163. Assert.IsTrue (r.Width > 0, "#35f");
  164. }
  165. [Test]
  166. public void bug79076 ()
  167. {
  168. ListView entryList = new ListView ();
  169. entryList.Sorting = SortOrder.Descending;
  170. entryList.BeginUpdate ();
  171. entryList.Columns.Add ("Type", 100, HorizontalAlignment.Left);
  172. ListViewItem item = new ListViewItem (new string [] { "A" });
  173. entryList.Items.Add (item);
  174. item = new ListViewItem (new string [] { "B" });
  175. entryList.Items.Add (item);
  176. }
  177. [Test] // bug #79416
  178. public void MultiSelect ()
  179. {
  180. Form form = new Form ();
  181. ListView lvw = CreateListView (View.Details);
  182. form.Controls.Add (lvw);
  183. lvw.MultiSelect = true;
  184. lvw.Items [0].Selected = true;
  185. lvw.Items [2].Selected = true;
  186. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
  187. Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
  188. lvw.Items [0].Selected = false;
  189. Assert.AreEqual (0, lvw.SelectedItems.Count, "#B1");
  190. Assert.AreEqual (0, lvw.SelectedIndices.Count, "#B2");
  191. lvw.Items [0].Selected = true;
  192. Assert.AreEqual (0, lvw.SelectedItems.Count, "#C1");
  193. Assert.AreEqual (0, lvw.SelectedIndices.Count, "#C2");
  194. form.Show ();
  195. Assert.AreEqual (2, lvw.SelectedItems.Count, "#D1");
  196. Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#D2");
  197. Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#D3");
  198. Assert.AreEqual (2, lvw.SelectedIndices.Count, "#D4");
  199. Assert.AreEqual (0, lvw.SelectedIndices [0], "#D5");
  200. Assert.AreEqual (2, lvw.SelectedIndices [1], "#D6");
  201. // de-select an item
  202. lvw.Items [2].Selected = false;
  203. Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
  204. Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#E2");
  205. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E3");
  206. Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
  207. // re-select that item
  208. lvw.Items [2].Selected = true;
  209. Assert.AreEqual (2, lvw.SelectedItems.Count, "#F1");
  210. Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#F2");
  211. Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#F3");
  212. Assert.AreEqual (2, lvw.SelectedIndices.Count, "#F4");
  213. Assert.AreEqual (0, lvw.SelectedIndices [0], "#F5");
  214. Assert.AreEqual (2, lvw.SelectedIndices [1], "#F6");
  215. // dis-allow selection of multiple items
  216. lvw.MultiSelect = false;
  217. // setting MultiSelect to false when multiple items have been
  218. // selected does not deselect items
  219. Assert.AreEqual (2, lvw.SelectedItems.Count, "#G1");
  220. Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#G2");
  221. Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#G3");
  222. Assert.AreEqual (2, lvw.SelectedIndices.Count, "#G4");
  223. Assert.AreEqual (0, lvw.SelectedIndices [0], "#G5");
  224. Assert.AreEqual (2, lvw.SelectedIndices [1], "#G6");
  225. // de-select that item again
  226. lvw.Items [2].Selected = false;
  227. Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
  228. Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#H2");
  229. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H3");
  230. Assert.AreEqual (0, lvw.SelectedIndices [0], "#H4");
  231. // re-select that item again
  232. lvw.Items [2].Selected = true;
  233. // when MultiSelect is false, and you attempt to select more than
  234. // one item, then all items will first be de-selected and then
  235. // the item in question is selected
  236. Assert.AreEqual (1, lvw.SelectedItems.Count, "#I1");
  237. Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#I2");
  238. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#I3");
  239. Assert.AreEqual (2, lvw.SelectedIndices [0], "#I4");
  240. form.Dispose ();
  241. }
  242. [Test]
  243. public void Selected ()
  244. {
  245. Form form = new Form ();
  246. ListView lvw = CreateListView (View.Details);
  247. form.Controls.Add (lvw);
  248. lvw.MultiSelect = true;
  249. lvw.Items [0].Selected = true;
  250. lvw.Items [2].Selected = true;
  251. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
  252. Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
  253. form.Show ();
  254. Assert.AreEqual (2, lvw.SelectedItems.Count, "#C1");
  255. Assert.AreEqual ("B", lvw.SelectedItems [0].Text, "#C2");
  256. Assert.AreEqual ("C", lvw.SelectedItems [1].Text, "#C3");
  257. Assert.AreEqual (2, lvw.SelectedIndices.Count, "#C4");
  258. Assert.AreEqual (0, lvw.SelectedIndices [0], "#C5");
  259. Assert.AreEqual (2, lvw.SelectedIndices [1], "#C6");
  260. form.Dispose ();
  261. }
  262. [Test]
  263. public void Sort_Details_Checked ()
  264. {
  265. AssertSort_Checked (View.Details);
  266. }
  267. [Test]
  268. public void Sort_Details_Created ()
  269. {
  270. AssertSortNoIcon_Created (View.Details);
  271. }
  272. [Test]
  273. public void Sort_Details_NotCreated ()
  274. {
  275. AssertSortNoIcon_NotCreated (View.Details);
  276. }
  277. [Test]
  278. public void Sort_Details_Selected ()
  279. {
  280. AssertSort_Selected (View.Details);
  281. }
  282. [Test]
  283. public void Sort_LargeIcon_Checked ()
  284. {
  285. AssertSort_Checked (View.LargeIcon);
  286. }
  287. [Test]
  288. public void Sort_LargeIcon_Created ()
  289. {
  290. AssertSortIcon_Created (View.LargeIcon);
  291. }
  292. [Test]
  293. public void Sort_LargeIcon_NotCreated ()
  294. {
  295. AssertSortIcon_NotCreated (View.LargeIcon);
  296. }
  297. [Test]
  298. public void Sort_LargeIcon_Selected ()
  299. {
  300. AssertSort_Selected (View.LargeIcon);
  301. }
  302. [Test]
  303. public void Sort_List_Checked ()
  304. {
  305. AssertSort_Checked (View.List);
  306. }
  307. [Test]
  308. public void Sort_List_Created ()
  309. {
  310. AssertSortNoIcon_Created (View.List);
  311. }
  312. [Test]
  313. public void Sort_List_NotCreated ()
  314. {
  315. AssertSortNoIcon_NotCreated (View.List);
  316. }
  317. [Test]
  318. public void Sort_List_Selection ()
  319. {
  320. AssertSort_Selected (View.List);
  321. }
  322. [Test]
  323. public void Sort_SmallIcon_Checked ()
  324. {
  325. AssertSort_Checked (View.SmallIcon);
  326. }
  327. [Test]
  328. public void Sort_SmallIcon_Created ()
  329. {
  330. AssertSortIcon_Created (View.SmallIcon);
  331. }
  332. [Test]
  333. public void Sort_SmallIcon_NotCreated ()
  334. {
  335. AssertSortIcon_NotCreated (View.SmallIcon);
  336. }
  337. [Test]
  338. public void Sort_SmallIcon_Selection ()
  339. {
  340. AssertSort_Selected (View.SmallIcon);
  341. }
  342. #if NET_2_0
  343. [Test]
  344. [ExpectedException (typeof (NotSupportedException))]
  345. public void Sort_Tile_Checked ()
  346. {
  347. AssertSort_Checked (View.Tile);
  348. }
  349. [Test]
  350. public void Sort_Tile_Created ()
  351. {
  352. AssertSortNoIcon_Created (View.Tile);
  353. }
  354. [Test]
  355. public void Sort_Tile_NotCreated ()
  356. {
  357. AssertSortNoIcon_NotCreated (View.Tile);
  358. }
  359. [Test]
  360. public void Sort_Tile_Selection ()
  361. {
  362. AssertSort_Selected (View.Tile);
  363. }
  364. #endif
  365. private void AssertSortIcon_Created (View view)
  366. {
  367. int compareCount = 0;
  368. Form form = new Form ();
  369. ListView lvw = CreateListView (view);
  370. form.Controls.Add (lvw);
  371. Assert.IsNull (lvw.ListViewItemSorter, "#A");
  372. form.Show ();
  373. Assert.IsNull (lvw.ListViewItemSorter, "#B1");
  374. Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
  375. Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
  376. Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
  377. lvw.Sorting = SortOrder.None;
  378. Assert.IsNull (lvw.ListViewItemSorter, "#C1");
  379. Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
  380. Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
  381. Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
  382. lvw.Sorting = SortOrder.Descending;
  383. Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
  384. Assert.AreEqual ("C", lvw.Items [0].Text, "#D2");
  385. Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
  386. Assert.AreEqual ("A", lvw.Items [2].Text, "#D4");
  387. lvw.Sorting = SortOrder.Ascending;
  388. Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
  389. #if NET_2_0
  390. Assert.AreEqual ("A", lvw.Items [0].Text, "#E2");
  391. Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
  392. Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
  393. #else
  394. // in .NET 1.1, changing Sorting does not have any effect for
  395. // SmallIcon and LargeIcon view if no custom comparer is used
  396. Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
  397. Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
  398. Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
  399. #endif
  400. lvw.Sorting = SortOrder.None;
  401. Assert.IsNotNull (lvw.ListViewItemSorter, "#F1");
  402. #if NET_2_0
  403. Assert.AreEqual ("A", lvw.Items [0].Text, "#F2");
  404. Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
  405. Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
  406. #else
  407. // in .NET 1.1, changing Sorting does not have any effect for
  408. // SmallIcon and LargeIcon view if no custom comparer is used
  409. Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
  410. Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
  411. Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
  412. #endif
  413. lvw.Sorting = SortOrder.Ascending;
  414. Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
  415. #if NET_2_0
  416. Assert.AreEqual ("A", lvw.Items [0].Text, "#G2");
  417. Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
  418. Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
  419. #else
  420. // in .NET 1.1, changing Sorting does not have any effect for
  421. // SmallIcon and LargeIcon view if no custom comparer is used
  422. Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
  423. Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
  424. Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
  425. #endif
  426. lvw.Sorting = SortOrder.Descending;
  427. Assert.IsNotNull (lvw.ListViewItemSorter, "#G1");
  428. Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
  429. Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
  430. Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
  431. lvw.Sorting = SortOrder.None;
  432. Assert.IsNotNull (lvw.ListViewItemSorter, "#H1");
  433. Assert.AreEqual ("C", lvw.Items [0].Text, "#H2");
  434. Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
  435. Assert.AreEqual ("A", lvw.Items [2].Text, "#H4");
  436. // when Sorting is None and a new item is added, the collection is
  437. // sorted using the previous Sorting value
  438. lvw.Items.Add ("BB");
  439. Assert.IsNotNull (lvw.ListViewItemSorter, "#I1");
  440. Assert.AreEqual ("C", lvw.Items [0].Text, "#I2");
  441. Assert.AreEqual ("BB", lvw.Items [1].Text, "#I3");
  442. Assert.AreEqual ("B", lvw.Items [2].Text, "#I4");
  443. Assert.AreEqual ("A", lvw.Items [3].Text, "#I5");
  444. lvw.Sorting = SortOrder.Ascending;
  445. Assert.IsNotNull (lvw.ListViewItemSorter, "#J1");
  446. #if NET_2_0
  447. Assert.AreEqual ("A", lvw.Items [0].Text, "#J2");
  448. Assert.AreEqual ("B", lvw.Items [1].Text, "#J3");
  449. Assert.AreEqual ("BB", lvw.Items [2].Text, "#J4");
  450. Assert.AreEqual ("C", lvw.Items [3].Text, "#J5");
  451. #else
  452. // in .NET 1.1, changing Sorting does not have any effect for
  453. // SmallIcon and LargeIcon view if no custom comparer is used
  454. Assert.AreEqual ("C", lvw.Items [0].Text, "#J2");
  455. Assert.AreEqual ("BB", lvw.Items [1].Text, "#J3");
  456. Assert.AreEqual ("B", lvw.Items [2].Text, "#J4");
  457. Assert.AreEqual ("A", lvw.Items [3].Text, "#J5");
  458. #endif
  459. // when Sorting is not None and a new item is added, the
  460. // collection is re-sorted automatically
  461. lvw.Items.Add ("BA");
  462. Assert.IsNotNull (lvw.ListViewItemSorter, "#K1");
  463. #if NET_2_0
  464. Assert.AreEqual ("A", lvw.Items [0].Text, "#K2");
  465. Assert.AreEqual ("B", lvw.Items [1].Text, "#K3");
  466. Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
  467. Assert.AreEqual ("BB", lvw.Items [3].Text, "#K5");
  468. Assert.AreEqual ("C", lvw.Items [4].Text, "#K6");
  469. #else
  470. // in .NET 1.1, changing Sorting does not have any effect for
  471. // SmallIcon and LargeIcon view if no custom comparer is used
  472. Assert.AreEqual ("C", lvw.Items [0].Text, "#K2");
  473. Assert.AreEqual ("BB", lvw.Items [1].Text, "#K3");
  474. Assert.AreEqual ("BA", lvw.Items [2].Text, "#K4");
  475. Assert.AreEqual ("B", lvw.Items [3].Text, "#K5");
  476. Assert.AreEqual ("A", lvw.Items [4].Text, "#K6");
  477. #endif
  478. // assign a custom comparer
  479. MockComparer mc = new MockComparer (false);
  480. lvw.ListViewItemSorter = mc;
  481. // when a custom IComparer is assigned, the collection is immediately
  482. // re-sorted
  483. Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
  484. Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
  485. Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
  486. Assert.AreEqual ("C", lvw.Items [0].Text, "#L4");
  487. Assert.AreEqual ("BB", lvw.Items [1].Text, "#L5");
  488. Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
  489. Assert.AreEqual ("B", lvw.Items [3].Text, "#L7");
  490. Assert.AreEqual ("A", lvw.Items [4].Text, "#L8");
  491. // record compare count
  492. compareCount = mc.CompareCount;
  493. // modifying Sorting results in re-sort
  494. lvw.Sorting = SortOrder.Descending;
  495. Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
  496. Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
  497. Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
  498. Assert.AreEqual ("A", lvw.Items [0].Text, "#M4");
  499. Assert.AreEqual ("B", lvw.Items [1].Text, "#M5");
  500. Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
  501. Assert.AreEqual ("BB", lvw.Items [3].Text, "#M7");
  502. Assert.AreEqual ("C", lvw.Items [4].Text, "#M8");
  503. // record compare count
  504. compareCount = mc.CompareCount;
  505. // setting Sorting to the same value does not result in a sort
  506. // operation
  507. lvw.Sorting = SortOrder.Descending;
  508. Assert.AreEqual (compareCount, mc.CompareCount, "#N1");
  509. Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
  510. Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
  511. Assert.AreEqual ("A", lvw.Items [0].Text, "#N4");
  512. Assert.AreEqual ("B", lvw.Items [1].Text, "#N5");
  513. Assert.AreEqual ("BA", lvw.Items [2].Text, "#N6");
  514. Assert.AreEqual ("BB", lvw.Items [3].Text, "#N7");
  515. Assert.AreEqual ("C", lvw.Items [4].Text, "#N8");
  516. // modifying Sorting results in re-sort
  517. lvw.Sorting = SortOrder.Ascending;
  518. Assert.IsTrue (mc.CompareCount > compareCount, "#O1");
  519. Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
  520. Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
  521. Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
  522. Assert.AreEqual ("BB", lvw.Items [1].Text, "#O5");
  523. Assert.AreEqual ("BA", lvw.Items [2].Text, "#O6");
  524. Assert.AreEqual ("B", lvw.Items [3].Text, "#O7");
  525. Assert.AreEqual ("A", lvw.Items [4].Text, "#O8");
  526. // record compare count
  527. compareCount = mc.CompareCount;
  528. // adding an item when Sorting is not None causes re-sort
  529. lvw.Items.Add ("BC");
  530. Assert.IsTrue (mc.CompareCount > compareCount, "#P1");
  531. Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
  532. Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
  533. Assert.AreEqual ("C", lvw.Items [0].Text, "#P4");
  534. Assert.AreEqual ("BC", lvw.Items [1].Text, "#P5");
  535. Assert.AreEqual ("BB", lvw.Items [2].Text, "#P6");
  536. Assert.AreEqual ("BA", lvw.Items [3].Text, "#P7");
  537. Assert.AreEqual ("B", lvw.Items [4].Text, "#P8");
  538. Assert.AreEqual ("A", lvw.Items [5].Text, "#P9");
  539. // record compare count
  540. compareCount = mc.CompareCount;
  541. // assigning the same custom IComparer again does not result in a
  542. // re-sort
  543. lvw.ListViewItemSorter = mc;
  544. Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
  545. Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
  546. Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
  547. Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
  548. Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
  549. Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
  550. Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
  551. Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
  552. Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
  553. // setting Sorting to None does not perform a sort
  554. lvw.Sorting = SortOrder.None;
  555. Assert.AreEqual (compareCount, mc.CompareCount, "#R1");
  556. Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
  557. Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
  558. Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
  559. Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
  560. Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
  561. Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
  562. Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
  563. Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
  564. // assigning the custom IComparer again does not result in a
  565. // re-sort
  566. lvw.ListViewItemSorter = mc;
  567. Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
  568. Assert.IsNotNull (lvw.ListViewItemSorter, "#S2");
  569. Assert.AreSame (mc, lvw.ListViewItemSorter, "#S3");
  570. Assert.AreEqual ("C", lvw.Items [0].Text, "#S4");
  571. Assert.AreEqual ("BC", lvw.Items [1].Text, "#S5");
  572. Assert.AreEqual ("BB", lvw.Items [2].Text, "#S6");
  573. Assert.AreEqual ("BA", lvw.Items [3].Text, "#S7");
  574. Assert.AreEqual ("B", lvw.Items [4].Text, "#S8");
  575. Assert.AreEqual ("A", lvw.Items [5].Text, "#S9");
  576. // set Sorting to Ascending again
  577. lvw.Sorting = SortOrder.Ascending;
  578. Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
  579. Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
  580. Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
  581. Assert.AreEqual ("C", lvw.Items [0].Text, "#T4");
  582. Assert.AreEqual ("BC", lvw.Items [1].Text, "#T5");
  583. Assert.AreEqual ("BB", lvw.Items [2].Text, "#T6");
  584. Assert.AreEqual ("BA", lvw.Items [3].Text, "#T7");
  585. Assert.AreEqual ("B", lvw.Items [4].Text, "#T8");
  586. Assert.AreEqual ("A", lvw.Items [5].Text, "#T9");
  587. // record compare count
  588. compareCount = mc.CompareCount;
  589. // explicitly calling Sort results in a sort operation
  590. lvw.Sort ();
  591. Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
  592. Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
  593. Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
  594. Assert.AreEqual ("C", lvw.Items [0].Text, "#U4");
  595. Assert.AreEqual ("BC", lvw.Items [1].Text, "#U5");
  596. Assert.AreEqual ("BB", lvw.Items [2].Text, "#U6");
  597. Assert.AreEqual ("BA", lvw.Items [3].Text, "#U7");
  598. Assert.AreEqual ("B", lvw.Items [4].Text, "#U8");
  599. Assert.AreEqual ("A", lvw.Items [5].Text, "#U9");
  600. lvw.Sorting = SortOrder.None;
  601. // record compare count
  602. compareCount = mc.CompareCount;
  603. // adding an item when Sorting is None causes re-sort
  604. lvw.Items.Add ("BD");
  605. Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
  606. Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
  607. Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
  608. Assert.AreEqual ("A", lvw.Items [0].Text, "#V4");
  609. Assert.AreEqual ("B", lvw.Items [1].Text, "#V5");
  610. Assert.AreEqual ("BA", lvw.Items [2].Text, "#V6");
  611. Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
  612. Assert.AreEqual ("BC", lvw.Items [4].Text, "#V8");
  613. Assert.AreEqual ("BD", lvw.Items [5].Text, "#V9");
  614. Assert.AreEqual ("C", lvw.Items [6].Text, "#V10");
  615. // record compare count
  616. compareCount = mc.CompareCount;
  617. // explicitly calling Sort when Sorting is None causes a re-sort
  618. lvw.Sort ();
  619. Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
  620. Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
  621. Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
  622. Assert.AreEqual ("A", lvw.Items [0].Text, "#W4");
  623. Assert.AreEqual ("B", lvw.Items [1].Text, "#W5");
  624. Assert.AreEqual ("BA", lvw.Items [2].Text, "#W6");
  625. Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
  626. Assert.AreEqual ("BC", lvw.Items [4].Text, "#W8");
  627. Assert.AreEqual ("BD", lvw.Items [5].Text, "#W9");
  628. Assert.AreEqual ("C", lvw.Items [6].Text, "#W10");
  629. // record compare count
  630. compareCount = mc.CompareCount;
  631. form.Dispose ();
  632. }
  633. private void AssertSortIcon_NotCreated (View view)
  634. {
  635. Form form = new Form ();
  636. ListView lvw = CreateListView (view);
  637. form.Controls.Add (lvw);
  638. Assert.IsNull (lvw.ListViewItemSorter, "#A1");
  639. Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
  640. Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
  641. Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
  642. lvw.Sorting = SortOrder.None;
  643. Assert.IsNull (lvw.ListViewItemSorter, "#B1");
  644. Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
  645. Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
  646. Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
  647. lvw.Sorting = SortOrder.Descending;
  648. Assert.IsNotNull (lvw.ListViewItemSorter, "#C1");
  649. Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
  650. Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
  651. Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
  652. lvw.Sorting = SortOrder.Ascending;
  653. Assert.IsNotNull (lvw.ListViewItemSorter, "#D1");
  654. Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
  655. Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
  656. Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
  657. // when the handle is not created and a new item is added, the new
  658. // item is just appended to the collection
  659. lvw.Items.Add ("BB");
  660. Assert.IsNotNull (lvw.ListViewItemSorter, "#E1");
  661. Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
  662. Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
  663. Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
  664. Assert.AreEqual ("BB", lvw.Items [3].Text, "#E5");
  665. // assign a custom comparer
  666. MockComparer mc = new MockComparer (false);
  667. lvw.ListViewItemSorter = mc;
  668. // assigning a custom IComparer has no effect
  669. Assert.AreEqual (0, mc.CompareCount, "#F1");
  670. Assert.IsNotNull (lvw.ListViewItemSorter, "#F2");
  671. Assert.AreSame (mc, lvw.ListViewItemSorter, "#F3");
  672. Assert.AreEqual ("B", lvw.Items [0].Text, "#F4");
  673. Assert.AreEqual ("A", lvw.Items [1].Text, "#F5");
  674. Assert.AreEqual ("C", lvw.Items [2].Text, "#F6");
  675. Assert.AreEqual ("BB", lvw.Items [3].Text, "#F7");
  676. // modifying Sorting does not result in sort operation
  677. lvw.Sorting = SortOrder.Descending;
  678. Assert.AreEqual (0, mc.CompareCount, "#G1");
  679. Assert.IsNotNull (lvw.ListViewItemSorter, "#G2");
  680. Assert.AreSame (mc, lvw.ListViewItemSorter, "#G3");
  681. Assert.AreEqual ("B", lvw.Items [0].Text, "#G4");
  682. Assert.AreEqual ("A", lvw.Items [1].Text, "#G5");
  683. Assert.AreEqual ("C", lvw.Items [2].Text, "#G6");
  684. Assert.AreEqual ("BB", lvw.Items [3].Text, "#G7");
  685. // setting Sorting to the same value does not result in a sort
  686. // operation
  687. lvw.Sorting = SortOrder.Descending;
  688. Assert.AreEqual (0, mc.CompareCount, "#H1");
  689. Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
  690. Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
  691. Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
  692. Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
  693. Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
  694. Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
  695. // setting Sorting to None does not result in a sort operation
  696. lvw.Sorting = SortOrder.None;
  697. Assert.AreEqual (0, mc.CompareCount, "#I1");
  698. Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
  699. Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
  700. Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
  701. Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
  702. Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
  703. Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
  704. // explicitly calling Sort when Sorting is None does not result
  705. // in a sort operation
  706. lvw.Sort ();
  707. Assert.AreEqual (0, mc.CompareCount, "#J1");
  708. Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
  709. Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
  710. Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
  711. Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
  712. Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
  713. Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
  714. // setting Sorting again does not result in a sort operation
  715. lvw.Sorting = SortOrder.Ascending;
  716. Assert.AreEqual (0, mc.CompareCount, "#K1");
  717. Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
  718. Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
  719. Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
  720. Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
  721. Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
  722. Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
  723. // explicitly calling Sort when Sorting is Ascending does not
  724. // result in a sort operation
  725. lvw.Sort ();
  726. Assert.AreEqual (0, mc.CompareCount, "#L1");
  727. Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
  728. Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
  729. Assert.AreEqual ("B", lvw.Items [0].Text, "#L4");
  730. Assert.AreEqual ("A", lvw.Items [1].Text, "#L5");
  731. Assert.AreEqual ("C", lvw.Items [2].Text, "#L6");
  732. Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
  733. // show the form to create the handle
  734. form.Show ();
  735. // when the handle is created, the items are immediately sorted
  736. Assert.IsTrue (mc.CompareCount > 0, "#L1");
  737. Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
  738. Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
  739. Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
  740. Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
  741. Assert.AreEqual ("B", lvw.Items [2].Text, "#M6");
  742. Assert.AreEqual ("A", lvw.Items [3].Text, "#M7");
  743. // setting ListViewItemSorter to null does not result in sort
  744. // operation
  745. lvw.ListViewItemSorter = null;
  746. Assert.IsNull (lvw.ListViewItemSorter, "#N1");
  747. Assert.AreEqual ("C", lvw.Items [0].Text, "#N2");
  748. Assert.AreEqual ("BB", lvw.Items [1].Text, "#N3");
  749. Assert.AreEqual ("B", lvw.Items [2].Text, "#N4");
  750. Assert.AreEqual ("A", lvw.Items [3].Text, "#N5");
  751. // explicitly calling sort does not result in sort operation
  752. lvw.Sort ();
  753. Assert.IsNull (lvw.ListViewItemSorter, "#O1");
  754. Assert.AreEqual ("C", lvw.Items [0].Text, "#O2");
  755. Assert.AreEqual ("BB", lvw.Items [1].Text, "#O3");
  756. Assert.AreEqual ("B", lvw.Items [2].Text, "#O4");
  757. Assert.AreEqual ("A", lvw.Items [3].Text, "#O5");
  758. form.Dispose ();
  759. }
  760. private void AssertSortNoIcon_Created (View view)
  761. {
  762. int compareCount = 0;
  763. Form form = new Form ();
  764. ListView lvw = CreateListView (view);
  765. form.Controls.Add (lvw);
  766. Assert.IsNull (lvw.ListViewItemSorter, "#A");
  767. form.Show ();
  768. Assert.IsNull (lvw.ListViewItemSorter, "#B1");
  769. Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
  770. Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
  771. Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
  772. lvw.Sorting = SortOrder.None;
  773. Assert.IsNull (lvw.ListViewItemSorter, "#C1");
  774. Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
  775. Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
  776. Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
  777. lvw.Sorting = SortOrder.Ascending;
  778. Assert.IsNull (lvw.ListViewItemSorter, "#D1");
  779. Assert.AreEqual ("A", lvw.Items [0].Text, "#D2");
  780. Assert.AreEqual ("B", lvw.Items [1].Text, "#D3");
  781. Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
  782. lvw.Sorting = SortOrder.Descending;
  783. Assert.IsNull (lvw.ListViewItemSorter, "#E1");
  784. Assert.AreEqual ("C", lvw.Items [0].Text, "#E2");
  785. Assert.AreEqual ("B", lvw.Items [1].Text, "#E3");
  786. Assert.AreEqual ("A", lvw.Items [2].Text, "#E4");
  787. lvw.Sorting = SortOrder.None;
  788. Assert.IsNull (lvw.ListViewItemSorter, "#F1");
  789. Assert.AreEqual ("C", lvw.Items [0].Text, "#F2");
  790. Assert.AreEqual ("B", lvw.Items [1].Text, "#F3");
  791. Assert.AreEqual ("A", lvw.Items [2].Text, "#F4");
  792. // when Sorting is None and a new item is added, the item is
  793. // appended to the collection
  794. lvw.Items.Add ("BB");
  795. Assert.IsNull (lvw.ListViewItemSorter, "#G1");
  796. Assert.AreEqual ("C", lvw.Items [0].Text, "#G2");
  797. Assert.AreEqual ("B", lvw.Items [1].Text, "#G3");
  798. Assert.AreEqual ("A", lvw.Items [2].Text, "#G4");
  799. Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
  800. lvw.Sorting = SortOrder.Ascending;
  801. Assert.IsNull (lvw.ListViewItemSorter, "#H1");
  802. Assert.AreEqual ("A", lvw.Items [0].Text, "#H2");
  803. Assert.AreEqual ("B", lvw.Items [1].Text, "#H3");
  804. Assert.AreEqual ("BB", lvw.Items [2].Text, "#H4");
  805. Assert.AreEqual ("C", lvw.Items [3].Text, "#H5");
  806. // when Sorting is not None and a new item is added, the
  807. // collection is re-sorted automatically
  808. lvw.Items.Add ("BA");
  809. Assert.IsNull (lvw.ListViewItemSorter, "#I1");
  810. Assert.AreEqual ("A", lvw.Items [0].Text, "#I2");
  811. Assert.AreEqual ("B", lvw.Items [1].Text, "#I3");
  812. Assert.AreEqual ("BA", lvw.Items [2].Text, "#I4");
  813. Assert.AreEqual ("BB", lvw.Items [3].Text, "#I5");
  814. Assert.AreEqual ("C", lvw.Items [4].Text, "#I6");
  815. // assign a custom comparer
  816. MockComparer mc = new MockComparer (false);
  817. lvw.ListViewItemSorter = mc;
  818. // when a custom IComparer is assigned, the collection is immediately
  819. // re-sorted
  820. Assert.IsTrue (mc.CompareCount > compareCount, "#J1");
  821. Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
  822. Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
  823. Assert.AreEqual ("C", lvw.Items [0].Text, "#J4");
  824. Assert.AreEqual ("BB", lvw.Items [1].Text, "#J5");
  825. Assert.AreEqual ("BA", lvw.Items [2].Text, "#J6");
  826. Assert.AreEqual ("B", lvw.Items [3].Text, "#J7");
  827. Assert.AreEqual ("A", lvw.Items [4].Text, "#J8");
  828. // record compare count
  829. compareCount = mc.CompareCount;
  830. // modifying the sort order results in a sort
  831. lvw.Sorting = SortOrder.Descending;
  832. Assert.IsTrue (mc.CompareCount > compareCount, "#L1");
  833. Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
  834. Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
  835. Assert.AreEqual ("A", lvw.Items [0].Text, "#K4");
  836. Assert.AreEqual ("B", lvw.Items [1].Text, "#K5");
  837. Assert.AreEqual ("BA", lvw.Items [2].Text, "#K6");
  838. Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
  839. Assert.AreEqual ("C", lvw.Items [4].Text, "#K8");
  840. // record compare count
  841. compareCount = mc.CompareCount;
  842. // set the sort order to the same value does not result in a sort
  843. // operation
  844. lvw.Sorting = SortOrder.Descending;
  845. Assert.AreEqual (compareCount, mc.CompareCount, "#L1");
  846. Assert.IsNotNull (lvw.ListViewItemSorter, "#L2");
  847. Assert.AreSame (mc, lvw.ListViewItemSorter, "#L3");
  848. Assert.AreEqual ("A", lvw.Items [0].Text, "#L4");
  849. Assert.AreEqual ("B", lvw.Items [1].Text, "#L5");
  850. Assert.AreEqual ("BA", lvw.Items [2].Text, "#L6");
  851. Assert.AreEqual ("BB", lvw.Items [3].Text, "#L7");
  852. Assert.AreEqual ("C", lvw.Items [4].Text, "#L8");
  853. // modifying the sort order results in a sort
  854. lvw.Sorting = SortOrder.Ascending;
  855. Assert.IsTrue (mc.CompareCount > compareCount, "#M1");
  856. Assert.IsNotNull (lvw.ListViewItemSorter, "#M2");
  857. Assert.AreSame (mc, lvw.ListViewItemSorter, "#M3");
  858. Assert.AreEqual ("C", lvw.Items [0].Text, "#M4");
  859. Assert.AreEqual ("BB", lvw.Items [1].Text, "#M5");
  860. Assert.AreEqual ("BA", lvw.Items [2].Text, "#M6");
  861. Assert.AreEqual ("B", lvw.Items [3].Text, "#M7");
  862. Assert.AreEqual ("A", lvw.Items [4].Text, "#M8");
  863. // record compare count
  864. compareCount = mc.CompareCount;
  865. // adding an item when Sorting is not None caused a re-sort
  866. lvw.Items.Add ("BC");
  867. Assert.IsTrue (mc.CompareCount > compareCount, "#N1");
  868. Assert.IsNotNull (lvw.ListViewItemSorter, "#N2");
  869. Assert.AreSame (mc, lvw.ListViewItemSorter, "#N3");
  870. Assert.AreEqual ("C", lvw.Items [0].Text, "#N4");
  871. Assert.AreEqual ("BC", lvw.Items [1].Text, "#N5");
  872. Assert.AreEqual ("BB", lvw.Items [2].Text, "#N6");
  873. Assert.AreEqual ("BA", lvw.Items [3].Text, "#N7");
  874. Assert.AreEqual ("B", lvw.Items [4].Text, "#N8");
  875. Assert.AreEqual ("A", lvw.Items [5].Text, "#N9");
  876. // record compare count
  877. compareCount = mc.CompareCount;
  878. // assigning the same custom IComparer again does not result in a
  879. // re-sort
  880. lvw.ListViewItemSorter = mc;
  881. Assert.AreEqual (compareCount, mc.CompareCount, "#O1");
  882. Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
  883. Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
  884. Assert.AreEqual ("C", lvw.Items [0].Text, "#O4");
  885. Assert.AreEqual ("BC", lvw.Items [1].Text, "#O5");
  886. Assert.AreEqual ("BB", lvw.Items [2].Text, "#O6");
  887. Assert.AreEqual ("BA", lvw.Items [3].Text, "#O7");
  888. Assert.AreEqual ("B", lvw.Items [4].Text, "#O8");
  889. Assert.AreEqual ("A", lvw.Items [5].Text, "#O9");
  890. // setting sort order to None does not perform a sort and resets
  891. // the ListViewItemSorter
  892. lvw.Sorting = SortOrder.None;
  893. Assert.AreEqual (compareCount, mc.CompareCount, "#P1");
  894. #if NET_2_0
  895. Assert.IsNull (lvw.ListViewItemSorter, "#P2");
  896. #else
  897. Assert.IsNotNull (lvw.ListViewItemSorter, "#P2a");
  898. Assert.AreSame (mc, lvw.ListViewItemSorter, "#P2b");
  899. #endif
  900. Assert.AreEqual ("C", lvw.Items [0].Text, "#P3");
  901. Assert.AreEqual ("BC", lvw.Items [1].Text, "#P4");
  902. Assert.AreEqual ("BB", lvw.Items [2].Text, "#P5");
  903. Assert.AreEqual ("BA", lvw.Items [3].Text, "#P6");
  904. Assert.AreEqual ("B", lvw.Items [4].Text, "#P7");
  905. Assert.AreEqual ("A", lvw.Items [5].Text, "#P8");
  906. lvw.ListViewItemSorter = mc;
  907. #if NET_2_0
  908. // assigning the previous custom IComparer again results in a
  909. // re-sort
  910. Assert.IsTrue (mc.CompareCount > compareCount, "#Q1");
  911. Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
  912. Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
  913. Assert.AreEqual ("A", lvw.Items [0].Text, "#Q4");
  914. Assert.AreEqual ("B", lvw.Items [1].Text, "#Q5");
  915. Assert.AreEqual ("BA", lvw.Items [2].Text, "#Q6");
  916. Assert.AreEqual ("BB", lvw.Items [3].Text, "#Q7");
  917. Assert.AreEqual ("BC", lvw.Items [4].Text, "#Q8");
  918. Assert.AreEqual ("C", lvw.Items [5].Text, "#Q9");
  919. #else
  920. Assert.AreEqual (compareCount, mc.CompareCount, "#Q1");
  921. Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
  922. Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
  923. Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
  924. Assert.AreEqual ("BC", lvw.Items [1].Text, "#Q5");
  925. Assert.AreEqual ("BB", lvw.Items [2].Text, "#Q6");
  926. Assert.AreEqual ("BA", lvw.Items [3].Text, "#Q7");
  927. Assert.AreEqual ("B", lvw.Items [4].Text, "#Q8");
  928. Assert.AreEqual ("A", lvw.Items [5].Text, "#Q9");
  929. #endif
  930. // record compare count
  931. compareCount = mc.CompareCount;
  932. // set Sorting to Ascending again to verify that the internal
  933. // IComparer is not used when we reset Sorting to None
  934. // (as the items would then be sorted alfabetically)
  935. lvw.Sorting = SortOrder.Ascending;
  936. Assert.IsTrue (mc.CompareCount > compareCount, "#R1");
  937. Assert.IsNotNull (lvw.ListViewItemSorter, "#R2");
  938. Assert.AreSame (mc, lvw.ListViewItemSorter, "#R3");
  939. Assert.AreEqual ("C", lvw.Items [0].Text, "#R4");
  940. Assert.AreEqual ("BC", lvw.Items [1].Text, "#R5");
  941. Assert.AreEqual ("BB", lvw.Items [2].Text, "#R6");
  942. Assert.AreEqual ("BA", lvw.Items [3].Text, "#R7");
  943. Assert.AreEqual ("B", lvw.Items [4].Text, "#R8");
  944. Assert.AreEqual ("A", lvw.Items [5].Text, "#R9");
  945. // record compare count
  946. compareCount = mc.CompareCount;
  947. lvw.Sorting = SortOrder.None;
  948. Assert.AreEqual (compareCount, mc.CompareCount, "#S1");
  949. #if NET_2_0
  950. Assert.IsNull (lvw.ListViewItemSorter, "#S2");
  951. #else
  952. Assert.IsNotNull (lvw.ListViewItemSorter, "#S2a");
  953. Assert.AreSame (mc, lvw.ListViewItemSorter, "#S2b");
  954. #endif
  955. Assert.AreEqual ("C", lvw.Items [0].Text, "#S3");
  956. Assert.AreEqual ("BC", lvw.Items [1].Text, "#S4");
  957. Assert.AreEqual ("BB", lvw.Items [2].Text, "#S5");
  958. Assert.AreEqual ("BA", lvw.Items [3].Text, "#S6");
  959. Assert.AreEqual ("B", lvw.Items [4].Text, "#S7");
  960. Assert.AreEqual ("A", lvw.Items [5].Text, "#S8");
  961. // record compare count
  962. compareCount = mc.CompareCount;
  963. lvw.Items.Add ("BD");
  964. #if NET_2_0
  965. // adding an item when Sorting is None does not cause a re-sort
  966. Assert.AreEqual (compareCount, mc.CompareCount, "#T1");
  967. Assert.IsNull (lvw.ListViewItemSorter, "#T2");
  968. Assert.AreEqual ("C", lvw.Items [0].Text, "#T3");
  969. Assert.AreEqual ("BC", lvw.Items [1].Text, "#T4");
  970. Assert.AreEqual ("BB", lvw.Items [2].Text, "#T5");
  971. Assert.AreEqual ("BA", lvw.Items [3].Text, "#T6");
  972. Assert.AreEqual ("B", lvw.Items [4].Text, "#T7");
  973. Assert.AreEqual ("A", lvw.Items [5].Text, "#T8");
  974. Assert.AreEqual ("BD", lvw.Items [6].Text, "#T9");
  975. #else
  976. // adding an item when Sorting is None results in a re-sort
  977. Assert.IsTrue (mc.CompareCount > compareCount, "#T1");
  978. Assert.IsNotNull (lvw.ListViewItemSorter, "#T2");
  979. Assert.AreSame (mc, lvw.ListViewItemSorter, "#T3");
  980. Assert.AreEqual ("A", lvw.Items [0].Text, "#T4");
  981. Assert.AreEqual ("B", lvw.Items [1].Text, "#T5");
  982. Assert.AreEqual ("BA", lvw.Items [2].Text, "#T6");
  983. Assert.AreEqual ("BB", lvw.Items [3].Text, "#T7");
  984. Assert.AreEqual ("BC", lvw.Items [4].Text, "#T8");
  985. Assert.AreEqual ("BD", lvw.Items [5].Text, "#T9");
  986. Assert.AreEqual ("C", lvw.Items [6].Text, "#T10");
  987. #endif
  988. // record compare count
  989. compareCount = mc.CompareCount;
  990. lvw.Sort ();
  991. #if NET_2_0
  992. // explicitly calling Sort when Sorting is None does nothing
  993. Assert.AreEqual (compareCount, mc.CompareCount, "#U1");
  994. Assert.IsNull (lvw.ListViewItemSorter, "#U2");
  995. Assert.AreEqual ("C", lvw.Items [0].Text, "#U3");
  996. Assert.AreEqual ("BC", lvw.Items [1].Text, "#U4");
  997. Assert.AreEqual ("BB", lvw.Items [2].Text, "#U5");
  998. Assert.AreEqual ("BA", lvw.Items [3].Text, "#U6");
  999. Assert.AreEqual ("B", lvw.Items [4].Text, "#U7");
  1000. Assert.AreEqual ("A", lvw.Items [5].Text, "#U8");
  1001. Assert.AreEqual ("BD", lvw.Items [6].Text, "#U9");
  1002. #else
  1003. // explicitly calling Sort when Sorting is None results in a re-sort
  1004. Assert.IsTrue (mc.CompareCount > compareCount, "#U1");
  1005. Assert.IsNotNull (lvw.ListViewItemSorter, "#U2");
  1006. Assert.AreSame (mc, lvw.ListViewItemSorter, "#U3");
  1007. Assert.AreEqual ("A", lvw.Items [0].Text, "#U4");
  1008. Assert.AreEqual ("B", lvw.Items [1].Text, "#U5");
  1009. Assert.AreEqual ("BA", lvw.Items [2].Text, "#U6");
  1010. Assert.AreEqual ("BB", lvw.Items [3].Text, "#U7");
  1011. Assert.AreEqual ("BC", lvw.Items [4].Text, "#U8");
  1012. Assert.AreEqual ("BD", lvw.Items [5].Text, "#U9");
  1013. Assert.AreEqual ("C", lvw.Items [6].Text, "#U10");
  1014. #endif
  1015. // record compare count
  1016. compareCount = mc.CompareCount;
  1017. lvw.Sorting = SortOrder.Ascending;
  1018. #if NET_2_0
  1019. // setting Sorting again, does not reinstate the custom IComparer
  1020. // but sorting is actually performed using an internal non-visible
  1021. // comparer
  1022. Assert.AreEqual (compareCount, mc.CompareCount, "#V1");
  1023. Assert.IsNull (lvw.ListViewItemSorter, "#V2");
  1024. Assert.AreEqual ("A", lvw.Items [0].Text, "#V3");
  1025. Assert.AreEqual ("B", lvw.Items [1].Text, "#V4");
  1026. Assert.AreEqual ("BA", lvw.Items [2].Text, "#V5");
  1027. Assert.AreEqual ("BB", lvw.Items [3].Text, "#V6");
  1028. Assert.AreEqual ("BC", lvw.Items [4].Text, "#V7");
  1029. Assert.AreEqual ("BD", lvw.Items [5].Text, "#V8");
  1030. Assert.AreEqual ("C", lvw.Items [6].Text, "#V9");
  1031. #else
  1032. // setting Sorting again, uses the custom IComparer to sort the items
  1033. Assert.IsTrue (mc.CompareCount > compareCount, "#V1");
  1034. Assert.IsNotNull (lvw.ListViewItemSorter, "#V2");
  1035. Assert.AreSame (mc, lvw.ListViewItemSorter, "#V3");
  1036. Assert.AreEqual ("C", lvw.Items [0].Text, "#V4");
  1037. Assert.AreEqual ("BD", lvw.Items [1].Text, "#V5");
  1038. Assert.AreEqual ("BC", lvw.Items [2].Text, "#V6");
  1039. Assert.AreEqual ("BB", lvw.Items [3].Text, "#V7");
  1040. Assert.AreEqual ("BA", lvw.Items [4].Text, "#V8");
  1041. Assert.AreEqual ("B", lvw.Items [5].Text, "#V9");
  1042. Assert.AreEqual ("A", lvw.Items [6].Text, "#V10");
  1043. #endif
  1044. // record compare count
  1045. compareCount = mc.CompareCount;
  1046. lvw.Sort ();
  1047. #if NET_2_0
  1048. // explicitly calling Sort, does not reinstate the custom IComparer
  1049. // but sorting is actually performed using an internal non-visible
  1050. // comparer
  1051. Assert.AreEqual (compareCount, mc.CompareCount, "#W1");
  1052. Assert.IsNull (lvw.ListViewItemSorter, "#W2");
  1053. Assert.AreEqual ("A", lvw.Items [0].Text, "#W3");
  1054. Assert.AreEqual ("B", lvw.Items [1].Text, "#W4");
  1055. Assert.AreEqual ("BA", lvw.Items [2].Text, "#W5");
  1056. Assert.AreEqual ("BB", lvw.Items [3].Text, "#W6");
  1057. Assert.AreEqual ("BC", lvw.Items [4].Text, "#W7");
  1058. Assert.AreEqual ("BD", lvw.Items [5].Text, "#W8");
  1059. Assert.AreEqual ("C", lvw.Items [6].Text, "#W9");
  1060. #else
  1061. // setting Sorting again, uses the custom IComparer to sort the items
  1062. Assert.IsTrue (mc.CompareCount > compareCount, "#W1");
  1063. Assert.IsNotNull (lvw.ListViewItemSorter, "#W2");
  1064. Assert.AreSame (mc, lvw.ListViewItemSorter, "#W3");
  1065. Assert.AreEqual ("C", lvw.Items [0].Text, "#W4");
  1066. Assert.AreEqual ("BD", lvw.Items [1].Text, "#W5");
  1067. Assert.AreEqual ("BC", lvw.Items [2].Text, "#W6");
  1068. Assert.AreEqual ("BB", lvw.Items [3].Text, "#W7");
  1069. Assert.AreEqual ("BA", lvw.Items [4].Text, "#W8");
  1070. Assert.AreEqual ("B", lvw.Items [5].Text, "#W9");
  1071. Assert.AreEqual ("A", lvw.Items [6].Text, "#W10");
  1072. #endif
  1073. // record compare count
  1074. compareCount = mc.CompareCount;
  1075. form.Dispose ();
  1076. }
  1077. private void AssertSortNoIcon_NotCreated (View view)
  1078. {
  1079. Form form = new Form ();
  1080. ListView lvw = CreateListView (view);
  1081. form.Controls.Add (lvw);
  1082. Assert.IsNull (lvw.ListViewItemSorter, "#A1");
  1083. Assert.AreEqual ("B", lvw.Items [0].Text, "#A2");
  1084. Assert.AreEqual ("A", lvw.Items [1].Text, "#A3");
  1085. Assert.AreEqual ("C", lvw.Items [2].Text, "#A4");
  1086. lvw.Sorting = SortOrder.None;
  1087. Assert.IsNull (lvw.ListViewItemSorter, "#B1");
  1088. Assert.AreEqual ("B", lvw.Items [0].Text, "#B2");
  1089. Assert.AreEqual ("A", lvw.Items [1].Text, "#B3");
  1090. Assert.AreEqual ("C", lvw.Items [2].Text, "#B4");
  1091. lvw.Sorting = SortOrder.Ascending;
  1092. Assert.IsNull (lvw.ListViewItemSorter, "#C1");
  1093. Assert.AreEqual ("B", lvw.Items [0].Text, "#C2");
  1094. Assert.AreEqual ("A", lvw.Items [1].Text, "#C3");
  1095. Assert.AreEqual ("C", lvw.Items [2].Text, "#C4");
  1096. lvw.Sorting = SortOrder.Descending;
  1097. Assert.IsNull (lvw.ListViewItemSorter, "#D1");
  1098. Assert.AreEqual ("B", lvw.Items [0].Text, "#D2");
  1099. Assert.AreEqual ("A", lvw.Items [1].Text, "#D3");
  1100. Assert.AreEqual ("C", lvw.Items [2].Text, "#D4");
  1101. lvw.Sorting = SortOrder.None;
  1102. Assert.IsNull (lvw.ListViewItemSorter, "#E1");
  1103. Assert.AreEqual ("B", lvw.Items [0].Text, "#E2");
  1104. Assert.AreEqual ("A", lvw.Items [1].Text, "#E3");
  1105. Assert.AreEqual ("C", lvw.Items [2].Text, "#E4");
  1106. lvw.Sorting = SortOrder.Ascending;
  1107. Assert.IsNull (lvw.ListViewItemSorter, "#F1");
  1108. Assert.AreEqual ("B", lvw.Items [0].Text, "#F2");
  1109. Assert.AreEqual ("A", lvw.Items [1].Text, "#F3");
  1110. Assert.AreEqual ("C", lvw.Items [2].Text, "#F4");
  1111. // when the handle is not created and a new item is added, the new
  1112. // item is just appended to the collection
  1113. lvw.Items.Add ("BB");
  1114. Assert.IsNull (lvw.ListViewItemSorter, "#G1");
  1115. Assert.AreEqual ("B", lvw.Items [0].Text, "#G2");
  1116. Assert.AreEqual ("A", lvw.Items [1].Text, "#G3");
  1117. Assert.AreEqual ("C", lvw.Items [2].Text, "#G4");
  1118. Assert.AreEqual ("BB", lvw.Items [3].Text, "#G5");
  1119. // assign a custom comparer
  1120. MockComparer mc = new MockComparer (false);
  1121. lvw.ListViewItemSorter = mc;
  1122. // assigning a custom IComparer has no effect
  1123. Assert.AreEqual (0, mc.CompareCount, "#H1");
  1124. Assert.IsNotNull (lvw.ListViewItemSorter, "#H2");
  1125. Assert.AreSame (mc, lvw.ListViewItemSorter, "#H3");
  1126. Assert.AreEqual ("B", lvw.Items [0].Text, "#H4");
  1127. Assert.AreEqual ("A", lvw.Items [1].Text, "#H5");
  1128. Assert.AreEqual ("C", lvw.Items [2].Text, "#H6");
  1129. Assert.AreEqual ("BB", lvw.Items [3].Text, "#H7");
  1130. // modifying Sorting has no effect
  1131. lvw.Sorting = SortOrder.Descending;
  1132. Assert.AreEqual (0, mc.CompareCount, "#I1");
  1133. Assert.IsNotNull (lvw.ListViewItemSorter, "#I2");
  1134. Assert.AreSame (mc, lvw.ListViewItemSorter, "#I3");
  1135. Assert.AreEqual ("B", lvw.Items [0].Text, "#I4");
  1136. Assert.AreEqual ("A", lvw.Items [1].Text, "#I5");
  1137. Assert.AreEqual ("C", lvw.Items [2].Text, "#I6");
  1138. Assert.AreEqual ("BB", lvw.Items [3].Text, "#I7");
  1139. // setting Sorting to the same value does not result in a sort
  1140. // operation
  1141. lvw.Sorting = SortOrder.Descending;
  1142. Assert.AreEqual (0, mc.CompareCount, "#J1");
  1143. Assert.IsNotNull (lvw.ListViewItemSorter, "#J2");
  1144. Assert.AreSame (mc, lvw.ListViewItemSorter, "#J3");
  1145. Assert.AreEqual ("B", lvw.Items [0].Text, "#J4");
  1146. Assert.AreEqual ("A", lvw.Items [1].Text, "#J5");
  1147. Assert.AreEqual ("C", lvw.Items [2].Text, "#J6");
  1148. Assert.AreEqual ("BB", lvw.Items [3].Text, "#J7");
  1149. // setting Sorting to another value does not result in a sort
  1150. // operation
  1151. lvw.Sorting = SortOrder.Ascending;
  1152. Assert.AreEqual (0, mc.CompareCount, "#K1");
  1153. Assert.IsNotNull (lvw.ListViewItemSorter, "#K2");
  1154. Assert.AreSame (mc, lvw.ListViewItemSorter, "#K3");
  1155. Assert.AreEqual ("B", lvw.Items [0].Text, "#K4");
  1156. Assert.AreEqual ("A", lvw.Items [1].Text, "#K5");
  1157. Assert.AreEqual ("C", lvw.Items [2].Text, "#K6");
  1158. Assert.AreEqual ("BB", lvw.Items [3].Text, "#K7");
  1159. lvw.Sorting = SortOrder.None;
  1160. Assert.AreEqual (0, mc.CompareCount, "#L1");
  1161. #if NET_2_0
  1162. // setting Sorting to None does not perform a sort and resets the
  1163. // ListViewItemSorter
  1164. Assert.IsNull (lvw.ListViewItemSorter, "#L2");
  1165. #else
  1166. // setting Sorting to None does not perform a sort
  1167. Assert.IsNotNull (lvw.ListViewItemSorter, "#L2a");
  1168. Assert.AreSame (mc, lvw.ListViewItemSorter, "#L2b");
  1169. #endif
  1170. Assert.AreEqual ("B", lvw.Items [0].Text, "#L3");
  1171. Assert.AreEqual ("A", lvw.Items [1].Text, "#L4");
  1172. Assert.AreEqual ("C", lvw.Items [2].Text, "#L5");
  1173. Assert.AreEqual ("BB", lvw.Items [3].Text, "#L6");
  1174. // explicitly calling Sort when Sorting is None does nothing
  1175. lvw.Sort ();
  1176. Assert.AreEqual (0, mc.CompareCount, "#M1");
  1177. #if NET_2_0
  1178. Assert.IsNull (lvw.ListViewItemSorter, "#M2");
  1179. #else
  1180. Assert.IsNotNull (lvw.ListViewItemSorter, "#M2a");
  1181. Assert.AreSame (mc, lvw.ListViewItemSorter, "#M2b");
  1182. #endif
  1183. Assert.AreEqual ("B", lvw.Items [0].Text, "#M3");
  1184. Assert.AreEqual ("A", lvw.Items [1].Text, "#M4");
  1185. Assert.AreEqual ("C", lvw.Items [2].Text, "#M5");
  1186. Assert.AreEqual ("BB", lvw.Items [3].Text, "#M6");
  1187. lvw.Sorting = SortOrder.Ascending;
  1188. Assert.AreEqual (0, mc.CompareCount, "#N1");
  1189. #if NET_2_0
  1190. Assert.IsNull (lvw.ListViewItemSorter, "#N2");
  1191. #else
  1192. Assert.IsNotNull (lvw.ListViewItemSorter, "#N2a");
  1193. Assert.AreSame (mc, lvw.ListViewItemSorter, "#N2b");
  1194. #endif
  1195. Assert.AreEqual ("B", lvw.Items [0].Text, "#N3");
  1196. Assert.AreEqual ("A", lvw.Items [1].Text, "#N4");
  1197. Assert.AreEqual ("C", lvw.Items [2].Text, "#N5");
  1198. Assert.AreEqual ("BB", lvw.Items [3].Text, "#N6");
  1199. // explicitly set the custom IComparer again
  1200. lvw.ListViewItemSorter = mc;
  1201. Assert.AreEqual (0, mc.CompareCount, "#O1");
  1202. Assert.IsNotNull (lvw.ListViewItemSorter, "#O2");
  1203. Assert.AreSame (mc, lvw.ListViewItemSorter, "#O3");
  1204. Assert.AreEqual ("B", lvw.Items [0].Text, "#O4");
  1205. Assert.AreEqual ("A", lvw.Items [1].Text, "#O5");
  1206. Assert.AreEqual ("C", lvw.Items [2].Text, "#O6");
  1207. Assert.AreEqual ("BB", lvw.Items [3].Text, "#O7");
  1208. // explicitly calling Sort when handle is not created does not
  1209. // result in sort operation
  1210. Assert.AreEqual (0, mc.CompareCount, "#P1");
  1211. Assert.IsNotNull (lvw.ListViewItemSorter, "#P2");
  1212. Assert.AreSame (mc, lvw.ListViewItemSorter, "#P3");
  1213. Assert.AreEqual ("B", lvw.Items [0].Text, "#P4");
  1214. Assert.AreEqual ("A", lvw.Items [1].Text, "#P5");
  1215. Assert.AreEqual ("C", lvw.Items [2].Text, "#P6");
  1216. Assert.AreEqual ("BB", lvw.Items [3].Text, "#P7");
  1217. // show the form to create the handle
  1218. form.Show ();
  1219. // when the handle is created, the items are immediately sorted
  1220. Assert.IsTrue (mc.CompareCount > 0, "#Q1");
  1221. Assert.IsNotNull (lvw.ListViewItemSorter, "#Q2");
  1222. Assert.AreSame (mc, lvw.ListViewItemSorter, "#Q3");
  1223. Assert.AreEqual ("C", lvw.Items [0].Text, "#Q4");
  1224. Assert.AreEqual ("BB", lvw.Items [1].Text, "#Q5");
  1225. Assert.AreEqual ("B", lvw.Items [2].Text, "#Q6");
  1226. Assert.AreEqual ("A", lvw.Items [3].Text, "#Q7");
  1227. // setting ListViewItemSorter to null does not result in sort
  1228. // operation
  1229. lvw.ListViewItemSorter = null;
  1230. Assert.IsNull (lvw.ListViewItemSorter, "#R1");
  1231. Assert.AreEqual ("C", lvw.Items [0].Text, "#R2");
  1232. Assert.AreEqual ("BB", lvw.Items [1].Text, "#R3");
  1233. Assert.AreEqual ("B", lvw.Items [2].Text, "#R4");
  1234. Assert.AreEqual ("A", lvw.Items [3].Text, "#R5");
  1235. // explicitly calling sort does not result in sort operation
  1236. lvw.Sort ();
  1237. Assert.IsNull (lvw.ListViewItemSorter, "#S1");
  1238. Assert.AreEqual ("C", lvw.Items [0].Text, "#S2");
  1239. Assert.AreEqual ("BB", lvw.Items [1].Text, "#S3");
  1240. Assert.AreEqual ("B", lvw.Items [2].Text, "#S4");
  1241. Assert.AreEqual ("A", lvw.Items [3].Text, "#S5");
  1242. // modifying Sorting does not result in sort operation
  1243. lvw.Sorting = SortOrder.Ascending;
  1244. Assert.IsNull (lvw.ListViewItemSorter, "#T1");
  1245. Assert.AreEqual ("C", lvw.Items [0].Text, "#T2");
  1246. Assert.AreEqual ("BB", lvw.Items [1].Text, "#T3");
  1247. Assert.AreEqual ("B", lvw.Items [2].Text, "#T4");
  1248. Assert.AreEqual ("A", lvw.Items [3].Text, "#T5");
  1249. form.Dispose ();
  1250. }
  1251. private void AssertSort_Checked (View view)
  1252. {
  1253. Form form = new Form ();
  1254. ListView lvw = CreateListView (view);
  1255. lvw.CheckBoxes = true;
  1256. form.Controls.Add (lvw);
  1257. form.Show ();
  1258. Assert.AreEqual (0, lvw.CheckedItems.Count, "#A1");
  1259. Assert.AreEqual (0, lvw.CheckedIndices.Count, "#A2");
  1260. // select an item
  1261. lvw.Items [2].Checked = true;
  1262. Assert.AreEqual (1, lvw.CheckedItems.Count, "#B1");
  1263. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#B2");
  1264. Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#B3");
  1265. Assert.AreEqual (2, lvw.CheckedIndices [0], "#B4");
  1266. // sort the items descending
  1267. lvw.Sorting = SortOrder.Descending;
  1268. Assert.AreEqual (1, lvw.CheckedItems.Count, "#C1");
  1269. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#C2");
  1270. Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#C3");
  1271. Assert.AreEqual (0, lvw.CheckedIndices [0], "#C4");
  1272. // add an item, which ends up before the selected item after the
  1273. // sort operation
  1274. ListViewItem item = lvw.Items.Add ("D");
  1275. Assert.AreEqual (1, lvw.CheckedItems.Count, "#D1");
  1276. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#D2");
  1277. Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#D3");
  1278. Assert.AreEqual (1, lvw.CheckedIndices [0], "#D4");
  1279. // remove an item before the selected item
  1280. lvw.Items.Remove (item);
  1281. Assert.AreEqual (1, lvw.CheckedItems.Count, "#E1");
  1282. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#E2");
  1283. Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#E3");
  1284. Assert.AreEqual (0, lvw.CheckedIndices [0], "#E4");
  1285. // insert an item before the selected item
  1286. lvw.Items.Insert (0, "D");
  1287. Assert.AreEqual (1, lvw.CheckedItems.Count, "#F1");
  1288. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#F2");
  1289. Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#F3");
  1290. Assert.AreEqual (1, lvw.CheckedIndices [0], "#F4");
  1291. // assign a custom comparer
  1292. MockComparer mc = new MockComparer (false);
  1293. lvw.ListViewItemSorter = mc;
  1294. // items are re-sorted automatically
  1295. Assert.AreEqual (1, lvw.CheckedItems.Count, "#G1");
  1296. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#G2");
  1297. Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#G3");
  1298. Assert.AreEqual (2, lvw.CheckedIndices [0], "#G4");
  1299. // modify sort order
  1300. lvw.Sorting = SortOrder.Ascending;
  1301. Assert.AreEqual (1, lvw.CheckedItems.Count, "#H1");
  1302. Assert.AreEqual (1, lvw.CheckedIndices.Count, "#H2");
  1303. Assert.AreEqual ("C", lvw.CheckedItems [0].Text, "#H3");
  1304. Assert.AreEqual (1, lvw.CheckedIndices [0], "#H4");
  1305. form.Dispose ();
  1306. }
  1307. private void AssertSort_Selected (View view)
  1308. {
  1309. Form form = new Form ();
  1310. ListView lvw = CreateListView (view);
  1311. form.Controls.Add (lvw);
  1312. form.Show ();
  1313. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A1");
  1314. Assert.AreEqual (0, lvw.SelectedIndices.Count, "#A2");
  1315. // select an item
  1316. lvw.Items [2].Selected = true;
  1317. Assert.AreEqual (1, lvw.SelectedItems.Count, "#B1");
  1318. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#B2");
  1319. Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#B3");
  1320. Assert.AreEqual (2, lvw.SelectedIndices [0], "#B4");
  1321. // sort the items descending
  1322. lvw.Sorting = SortOrder.Descending;
  1323. Assert.AreEqual (1, lvw.SelectedItems.Count, "#C1");
  1324. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#C2");
  1325. Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#C3");
  1326. Assert.AreEqual (0, lvw.SelectedIndices [0], "#C4");
  1327. // add an item, which ends up before the selected item after the
  1328. // sort operation
  1329. ListViewItem item = lvw.Items.Add ("D");
  1330. Assert.AreEqual (1, lvw.SelectedItems.Count, "#D1");
  1331. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#D2");
  1332. Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#D3");
  1333. Assert.AreEqual (1, lvw.SelectedIndices [0], "#D4");
  1334. // remove an item before the selected item
  1335. lvw.Items.Remove (item);
  1336. Assert.AreEqual (1, lvw.SelectedItems.Count, "#E1");
  1337. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#E2");
  1338. Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#E3");
  1339. Assert.AreEqual (0, lvw.SelectedIndices [0], "#E4");
  1340. // insert an item before the selected item
  1341. lvw.Items.Insert (0, "D");
  1342. Assert.AreEqual (1, lvw.SelectedItems.Count, "#F1");
  1343. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#F2");
  1344. Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#F3");
  1345. Assert.AreEqual (1, lvw.SelectedIndices [0], "#F4");
  1346. // assign a custom comparer
  1347. MockComparer mc = new MockComparer (false);
  1348. lvw.ListViewItemSorter = mc;
  1349. // items are re-sorted automatically
  1350. Assert.AreEqual (1, lvw.SelectedItems.Count, "#G1");
  1351. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#G2");
  1352. Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#G3");
  1353. Assert.AreEqual (2, lvw.SelectedIndices [0], "#G4");
  1354. // modify sort order
  1355. lvw.Sorting = SortOrder.Ascending;
  1356. Assert.AreEqual (1, lvw.SelectedItems.Count, "#H1");
  1357. Assert.AreEqual (1, lvw.SelectedIndices.Count, "#H2");
  1358. Assert.AreEqual ("C", lvw.SelectedItems [0].Text, "#H3");
  1359. Assert.AreEqual (1, lvw.SelectedIndices [0], "#H4");
  1360. form.Dispose ();
  1361. }
  1362. private ListView CreateListView (View view)
  1363. {
  1364. ListView lvw = new ListView ();
  1365. lvw.View = view;
  1366. lvw.Items.Add ("B");
  1367. lvw.Items.Add ("A");
  1368. lvw.Items.Add ("C");
  1369. return lvw;
  1370. }
  1371. private class MockComparer : IComparer
  1372. {
  1373. int _compareCount;
  1374. bool _throwException;
  1375. public MockComparer (bool throwException)
  1376. {
  1377. _throwException = throwException;
  1378. }
  1379. public int CompareCount {
  1380. get { return _compareCount; }
  1381. }
  1382. public int Compare (object x, object y)
  1383. {
  1384. _compareCount++;
  1385. if (_throwException)
  1386. throw new InvalidOperationException ();
  1387. ListViewItem item_x = x as ListViewItem;
  1388. ListViewItem item_y = y as ListViewItem;
  1389. SortOrder sortOrder = item_x.ListView.Sorting;
  1390. // we'll actually perform a reverse-sort
  1391. if (sortOrder == SortOrder.Ascending)
  1392. return String.Compare (item_y.Text, item_x.Text);
  1393. else
  1394. return String.Compare (item_x.Text, item_y.Text);
  1395. }
  1396. }
  1397. }
  1398. }