ListViewCollectionsTest.cs 72 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112
  1. // Permission is hereby granted, free of charge, to any person obtaining
  2. // a copy of this software and associated documentation files (the
  3. // "Software"), to deal in the Software without restriction, including
  4. // without limitation the rights to use, copy, modify, merge, publish,
  5. // distribute, sublicense, and/or sell copies of the Software, and to
  6. // permit persons to whom the Software is furnished to do so, subject to
  7. // the following conditions:
  8. //
  9. // The above copyright notice and this permission notice shall be
  10. // included in all copies or substantial portions of the Software.
  11. //
  12. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  13. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  14. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  15. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  16. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  17. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  18. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  19. //
  20. // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
  21. //
  22. // Author:
  23. // Jordi Mas i Hernandez <[email protected]>
  24. //
  25. //
  26. using System;
  27. using System.Windows.Forms;
  28. using System.Drawing;
  29. using System.Reflection;
  30. using System.Collections;
  31. using NUnit.Framework;
  32. namespace MonoTests.System.Windows.Forms
  33. {
  34. [TestFixture]
  35. public class ListViewCollectionsTest : TestHelper
  36. {
  37. /*
  38. ColumnHeaderCollection
  39. */
  40. [Test]
  41. public void ColumnHeaderCollectionTest_PropertiesTest ()
  42. {
  43. ListView listview = new ListView ();
  44. // Properties
  45. Assert.AreEqual (false, listview.Columns.IsReadOnly, "ColumnHeaderCollectionTest_PropertiesTest#1");
  46. Assert.AreEqual (true, ((ICollection)listview.Columns).IsSynchronized, "ColumnHeaderCollectionTest_PropertiesTest#2");
  47. Assert.AreEqual (listview.Columns, ((ICollection)listview.Columns).SyncRoot, "ColumnHeaderCollectionTest_PropertiesTest#3");
  48. Assert.AreEqual (false, ((IList)listview.Columns).IsFixedSize, "ColumnHeaderCollectionTest_PropertiesTest#4");
  49. Assert.AreEqual (0, listview.Columns.Count, "ColumnHeaderCollectionTest_PropertiesTest#5");
  50. }
  51. [Test]
  52. public void ColumnHeaderCollectionTest_AddTest ()
  53. {
  54. ListView listview = new ListView ();
  55. ColumnHeader colA = new ColumnHeader ();
  56. ColumnHeader colB = new ColumnHeader ();
  57. // Duplicated elements with same text added
  58. listview.Columns.Add (colA);
  59. listview.Columns.Add (colB);
  60. Assert.AreEqual (2, listview.Columns.Count, "#1");
  61. Assert.AreEqual ("ColumnHeader", listview.Columns[0].Text, "#2");
  62. Assert.AreSame (listview, colA.ListView, "#3");
  63. Assert.AreSame (listview, colB.ListView, "#4");
  64. }
  65. [Test]
  66. public void ColumnHeaderCollectionTest_ClearTest ()
  67. {
  68. ListView listview = new ListView ();
  69. ColumnHeader colA = new ColumnHeader ();
  70. ColumnHeader colB = new ColumnHeader ();
  71. listview.Columns.Add (colA);
  72. listview.Columns.Add (colB);
  73. listview.Columns.Clear ();
  74. Assert.AreEqual (0, listview.Columns.Count, "#1");
  75. Assert.IsNull (colA.ListView, "#2");
  76. Assert.IsNull (colB.ListView, "#3");
  77. }
  78. [Test]
  79. public void ColumnHeaderCollectionTest_Remove ()
  80. {
  81. ListView listview = new ListView ();
  82. ColumnHeader colA = new ColumnHeader ();
  83. ColumnHeader colB = new ColumnHeader ();
  84. ColumnHeader colC = new ColumnHeader ();
  85. listview.Columns.Add (colA);
  86. listview.Columns.Add (colB);
  87. listview.Columns.Add (colC);
  88. listview.Columns.Remove (colB);
  89. Assert.AreEqual (2, listview.Columns.Count, "#A1");
  90. Assert.AreSame (colA, listview.Columns [0], "#A2");
  91. Assert.AreSame (colC, listview.Columns [1], "#A3");
  92. Assert.AreSame (listview, colA.ListView, "#A4");
  93. Assert.IsNull (colB.ListView, "#A5");
  94. Assert.AreSame (listview, colC.ListView, "#A6");
  95. Assert.AreEqual (0, colA.Index, "#A7");
  96. Assert.AreEqual (-1, colB.Index, "#A8");
  97. Assert.AreEqual (1, colC.Index, "#A9");
  98. listview.Columns.Remove (colC);
  99. Assert.AreEqual (1, listview.Columns.Count, "#B1");
  100. Assert.AreSame (colA, listview.Columns [0], "#B2");
  101. Assert.AreSame (listview, colA.ListView, "#B3");
  102. Assert.IsNull (colB.ListView, "#B4");
  103. Assert.IsNull (colC.ListView, "#B5");
  104. Assert.AreEqual (0, colA.Index, "#B6");
  105. Assert.AreEqual (-1, colB.Index, "#B7");
  106. Assert.AreEqual (-1, colC.Index, "#B8");
  107. listview.Columns.Remove (colA);
  108. Assert.AreEqual (0, listview.Columns.Count, "#C1");
  109. Assert.IsNull (colA.ListView, "#C2");
  110. Assert.IsNull (colB.ListView, "#C3");
  111. Assert.IsNull (colC.ListView, "#C4");
  112. Assert.AreEqual (-1, colA.Index, "#C5");
  113. Assert.AreEqual (-1, colB.Index, "#C6");
  114. Assert.AreEqual (-1, colC.Index, "#C7");
  115. }
  116. [Test]
  117. public void ColumnHeaderCollectionTest_RemoveAt ()
  118. {
  119. ListView listview = new ListView ();
  120. ColumnHeader colA = new ColumnHeader ();
  121. ColumnHeader colB = new ColumnHeader ();
  122. ColumnHeader colC = new ColumnHeader ();
  123. listview.Columns.Add (colA);
  124. listview.Columns.Add (colB);
  125. listview.Columns.Add (colC);
  126. listview.Columns.RemoveAt (1);
  127. Assert.AreEqual (2, listview.Columns.Count, "#A1");
  128. Assert.AreSame (colA, listview.Columns [0], "#A2");
  129. Assert.AreSame (colC, listview.Columns [1], "#A3");
  130. Assert.AreSame (listview, colA.ListView, "#A4");
  131. Assert.IsNull (colB.ListView, "#A5");
  132. Assert.AreSame (listview, colC.ListView, "#A6");
  133. listview.Columns.RemoveAt (0);
  134. Assert.AreEqual (1, listview.Columns.Count, "#B1");
  135. Assert.AreSame (colC, listview.Columns [0], "#B2");
  136. Assert.IsNull (colA.ListView, "#B3");
  137. Assert.IsNull (colB.ListView, "#B4");
  138. Assert.AreSame (listview, colC.ListView, "#B5");
  139. listview.Columns.RemoveAt (0);
  140. Assert.AreEqual (0, listview.Columns.Count, "#C1");
  141. Assert.IsNull (colA.ListView, "#C2");
  142. Assert.IsNull (colB.ListView, "#C3");
  143. Assert.IsNull (colC.ListView, "#C4");
  144. }
  145. /*
  146. CheckedIndexCollection
  147. */
  148. [Test]
  149. public void CheckedIndexCollectionTest_PropertiesTest ()
  150. {
  151. ListView listview = new ListView ();
  152. // Properties
  153. Assert.AreEqual (true, listview.CheckedIndices.IsReadOnly, "CheckedIndexCollectionTest_PropertiesTest#1");
  154. Assert.AreEqual (false, ((ICollection)listview.CheckedIndices).IsSynchronized, "CheckedIndexCollectionTest_PropertiesTest#2");
  155. Assert.AreEqual (listview.CheckedIndices, ((ICollection)listview.CheckedIndices).SyncRoot, "CheckedIndexCollectionTest_PropertiesTest#3");
  156. Assert.AreEqual (true, ((IList)listview.CheckedIndices).IsFixedSize, "CheckedIndexCollectionTest_PropertiesTest#4");
  157. Assert.AreEqual (0, listview.CheckedIndices.Count, "CheckedIndexCollectionTest_PropertiesTest#5");
  158. }
  159. // Exceptions
  160. [Test, ExpectedException (typeof (NotSupportedException))]
  161. public void CheckedIndexCollectionTest_Add_ExceptionTest ()
  162. {
  163. ListView listview = new ListView ();
  164. ((IList)listview.CheckedIndices).Add (5);
  165. }
  166. [Test, ExpectedException (typeof (NotSupportedException))]
  167. public void CheckedIndexCollectionTest_Remove_ExceptionTest ()
  168. {
  169. ListView listview = new ListView ();
  170. ((IList)listview.CheckedIndices).Remove (5);
  171. }
  172. [Test, ExpectedException (typeof (NotSupportedException))]
  173. public void CheckedIndexCollectionTest_RemoveAt_ExceptionTest ()
  174. {
  175. ListView listview = new ListView ();
  176. ((IList)listview.CheckedIndices).RemoveAt (5);
  177. }
  178. /*
  179. CheckedItemCollection
  180. */
  181. [Test]
  182. public void CheckedItemCollectionTest_PropertiesTest ()
  183. {
  184. ListView listview = new ListView ();
  185. // Properties
  186. Assert.AreEqual (true, listview.CheckedItems.IsReadOnly, "CheckedItemCollectionTest_PropertiesTest#1");
  187. Assert.AreEqual (false, ((ICollection)listview.CheckedItems).IsSynchronized, "CheckedItemCollectionTest_PropertiesTest#2");
  188. Assert.AreEqual (listview.CheckedItems, ((ICollection)listview.CheckedItems).SyncRoot, "CheckedItemCollectionTest_PropertiesTest#3");
  189. Assert.AreEqual (true, ((IList)listview.CheckedItems).IsFixedSize, "CheckedItemCollectionTest_PropertiesTest#4");
  190. Assert.AreEqual (0, listview.CheckedItems.Count, "CheckedItemCollectionTest_PropertiesTest#5");
  191. }
  192. // Exceptions
  193. [Test, ExpectedException (typeof (NotSupportedException))]
  194. public void CheckedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
  195. {
  196. ListView listview = new ListView ();
  197. ((IList)listview.CheckedItems).Add (5);
  198. }
  199. #if NET_2_0
  200. [Test, ExpectedException (typeof (InvalidOperationException))]
  201. public void CheckedItemCollectionTest_ContainsKey_ExceptionTest ()
  202. {
  203. ListView listview = new ListView ();
  204. listview.VirtualMode = true;
  205. listview.CheckedItems.ContainsKey (String.Empty);
  206. }
  207. [Test, ExpectedException (typeof (InvalidOperationException))]
  208. public void CheckedItemCollectionTest_CopyTo_ExceptionTest ()
  209. {
  210. ListView listview = new ListView ();
  211. listview.VirtualMode = true;
  212. listview.CheckedItems.CopyTo (new ListViewItem [1], 0);
  213. }
  214. [Test, ExpectedException (typeof (InvalidOperationException))]
  215. public void CheckedItemCollectionTest_GetEnumerator_ExceptionTest ()
  216. {
  217. ListView listview = new ListView ();
  218. listview.VirtualMode = true;
  219. listview.CheckedItems.GetEnumerator ();
  220. }
  221. [Test, ExpectedException (typeof (InvalidOperationException))]
  222. public void CheckedItemCollectionTest_IndexOf_ExceptionTest ()
  223. {
  224. ListView listview = new ListView ();
  225. listview.VirtualMode = true;
  226. listview.CheckedItems.IndexOf (new ListViewItem ());
  227. }
  228. [Test, ExpectedException (typeof (InvalidOperationException))]
  229. public void CheckedItemCollectionTest_IndexOfKey_ExceptionTest ()
  230. {
  231. ListView listview = new ListView ();
  232. listview.VirtualMode = true;
  233. listview.CheckedItems.IndexOfKey (String.Empty);
  234. }
  235. #endif
  236. [Test]
  237. public void CheckedItemCollectionTest_Indexer_ExceptionTest ()
  238. {
  239. ListView listview = new ListView ();
  240. ListViewItem item = null;
  241. try {
  242. item = listview.CheckedItems [-1];
  243. Assert.Fail ("#A1");
  244. } catch (ArgumentOutOfRangeException) {
  245. }
  246. try {
  247. item = listview.CheckedItems [listview.CheckedItems.Count];
  248. Assert.Fail ("#A2");
  249. } catch (ArgumentOutOfRangeException) {
  250. }
  251. #if NET_2_0
  252. listview.VirtualMode = true;
  253. try {
  254. item = listview.CheckedItems [0];
  255. Assert.Fail ("#A3");
  256. } catch (InvalidOperationException) {
  257. }
  258. try {
  259. item = listview.CheckedItems [String.Empty];
  260. Assert.Fail ("#A4");
  261. } catch (InvalidOperationException) {
  262. }
  263. #endif
  264. // Avoid mcs 168 warning
  265. Assert.IsNull (item, "#A5");
  266. }
  267. [Test]
  268. public void CheckedItemCollectionTest_Order ()
  269. {
  270. Form form = new Form ();
  271. form.ShowInTaskbar = false;
  272. ListView lvw = new ListView ();
  273. lvw.CheckBoxes = true;
  274. form.Controls.Add (lvw);
  275. ListViewItem itemA = lvw.Items.Add ("A");
  276. itemA.Checked = true;
  277. ListViewItem itemB = lvw.Items.Add ("B");
  278. itemB.Checked = true;
  279. ListViewItem itemC = lvw.Items.Add ("C");
  280. itemC.Checked = true;
  281. Assert.AreEqual (3, lvw.CheckedItems.Count, "#A1");
  282. Assert.AreSame (itemA, lvw.CheckedItems [0], "#A2");
  283. Assert.AreSame (itemB, lvw.CheckedItems [1], "#A3");
  284. Assert.AreSame (itemC, lvw.CheckedItems [2], "#A3");
  285. itemB.Checked = false;
  286. Assert.AreEqual (2, lvw.CheckedItems.Count, "#B1");
  287. Assert.AreSame (itemA, lvw.CheckedItems [0], "#B2");
  288. Assert.AreSame (itemC, lvw.CheckedItems [1], "#B3");
  289. itemB.Checked = true;
  290. Assert.AreEqual (3, lvw.CheckedItems.Count, "#C1");
  291. Assert.AreSame (itemA, lvw.CheckedItems [0], "#C2");
  292. Assert.AreSame (itemB, lvw.CheckedItems [1], "#C3");
  293. Assert.AreSame (itemC, lvw.CheckedItems [2], "#C4");
  294. lvw.Sorting = SortOrder.Descending;
  295. Assert.AreEqual (3, lvw.CheckedItems.Count, "#D1");
  296. Assert.AreSame (itemA, lvw.CheckedItems [0], "#D2");
  297. Assert.AreSame (itemB, lvw.CheckedItems [1], "#D3");
  298. Assert.AreSame (itemC, lvw.CheckedItems [2], "#D4");
  299. // sorting only takes effect when listview is created
  300. form.Show ();
  301. Assert.AreEqual (3, lvw.CheckedItems.Count, "#E1");
  302. Assert.AreSame (itemC, lvw.CheckedItems [0], "#E2");
  303. Assert.AreSame (itemB, lvw.CheckedItems [1], "#E3");
  304. Assert.AreSame (itemA, lvw.CheckedItems [2], "#E4");
  305. form.Dispose ();
  306. }
  307. [Test, ExpectedException (typeof (NotSupportedException))]
  308. public void CheckedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
  309. {
  310. ListView listview = new ListView ();
  311. ((IList)listview.CheckedItems).Remove (5);
  312. }
  313. [Test, ExpectedException (typeof (NotSupportedException))]
  314. public void CheckedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
  315. {
  316. ListView listview = new ListView ();
  317. ((IList)listview.CheckedItems).RemoveAt (5);
  318. }
  319. /*
  320. SelectedIndexCollection
  321. */
  322. [Test]
  323. public void SelectedIndexCollectionTest_PropertiesTest ()
  324. {
  325. ListView listview = new ListView ();
  326. // Properties
  327. #if !NET_2_0
  328. Assert.AreEqual (true, listview.SelectedIndices.IsReadOnly, "SelectedIndexCollectionTest_PropertiesTest#1");
  329. Assert.AreEqual (true, ((IList)listview.SelectedIndices).IsFixedSize, "SelectedIndexCollectionTest_PropertiesTest#4");
  330. #else
  331. Assert.AreEqual (false, listview.SelectedIndices.IsReadOnly, "SelectedIndexCollectionTest_PropertiesTest#1");
  332. Assert.AreEqual (false, ((IList)listview.SelectedIndices).IsFixedSize, "SelectedIndexCollectionTest_PropertiesTest#4");
  333. #endif
  334. Assert.AreEqual (false, ((ICollection)listview.SelectedIndices).IsSynchronized, "SelectedIndexCollectionTest_PropertiesTest#2");
  335. Assert.AreEqual (listview.SelectedIndices, ((ICollection)listview.SelectedIndices).SyncRoot, "SelectedIndexCollectionTest_PropertiesTest#3");
  336. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_PropertiesTest#5");
  337. }
  338. #if NET_2_0
  339. [Test]
  340. public void SelectedIndexCollectionTest_AddTest ()
  341. {
  342. ListView listview = new ListView ();
  343. listview.Items.Add ("A");
  344. int n = listview.SelectedIndices.Add (0);
  345. Assert.AreEqual (0, n, "SelectedIndexCollectionTest_AddTest#1");
  346. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#2");
  347. // Force to create the handle
  348. listview.CreateControl ();
  349. Assert.AreEqual (1, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#4");
  350. n = listview.SelectedIndices.Add (0);
  351. Assert.AreEqual (1, n, "SelectedIndexCollectionTest_AddTest#5");
  352. Assert.AreEqual (1, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#6");
  353. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#7");
  354. listview.Dispose ();
  355. }
  356. [Test]
  357. public void SelectedIndexCollectionTest_AddTest_VirtualMode ()
  358. {
  359. ListView listview = new ListView ();
  360. listview.VirtualListSize = 5;
  361. listview.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
  362. listview.VirtualMode = true;
  363. CreateVirtualItems (5);
  364. int n = listview.SelectedIndices.Add (0);
  365. Assert.AreEqual (-1, n, "SelectedIndexCollectionTest_AddTest#1");
  366. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#2");
  367. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#3");
  368. // Force to create the handle
  369. // Selection state should remain empty
  370. listview.CreateControl ();
  371. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#4");
  372. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#5");
  373. n = listview.SelectedIndices.Add (0);
  374. Assert.AreEqual (1, n, "SelectedIndexCollectionTest_AddTest#5");
  375. Assert.AreEqual (1, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#6");
  376. Assert.AreEqual (0, listview.SelectedIndices [0], "SelectedIndexCollectionTest_AddTest#7");
  377. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#8");
  378. // Make sure the collection keeps them sorted
  379. listview.SelectedIndices.Add (4);
  380. n = listview.SelectedIndices.Add (2);
  381. Assert.AreEqual (3, n, "SelectedIndexCollectionTest_AddTest#9");
  382. Assert.AreEqual (3, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#10");
  383. Assert.AreEqual (0, listview.SelectedIndices [0], "SelectedIndexCollectionTest_AddTest#11");
  384. Assert.AreEqual (2, listview.SelectedIndices [1], "SelectedIndexCollectionTest_AddTest#12");
  385. Assert.AreEqual (4, listview.SelectedIndices [2], "SelectedIndexCollectionTest_AddTest#13");
  386. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#14");
  387. Assert.AreEqual (true, listview.Items [2].Selected, "SelectedIndexCollectionTest_AddTest#15");
  388. Assert.AreEqual (true, listview.Items [4].Selected, "SelectedIndexCollectionTest_AddTest#16");
  389. // Add the item twice
  390. n = listview.SelectedIndices.Add (0);
  391. Assert.AreEqual (3, n, "SelectedIndexCollectionTest_AddTest#17");
  392. Assert.AreEqual (3, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#18");
  393. listview.Dispose ();
  394. }
  395. [Test]
  396. public void SelectedIndexCollectionTest_ClearTest ()
  397. {
  398. ListView listview = new ListView ();
  399. listview.Items.Add ("A");
  400. listview.Items.Add ("B");
  401. listview.Items.Add ("C");
  402. listview.SelectedIndices.Add (0);
  403. listview.SelectedIndices.Add (2);
  404. // Nothing if handle hasn't been created
  405. listview.SelectedIndices.Clear ();
  406. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_ClearTest#2");
  407. Assert.AreEqual (false, listview.Items [1].Selected, "SelectedIndexCollectionTest_ClearTest#3");
  408. Assert.AreEqual (true, listview.Items [2].Selected, "SelectedIndexCollectionTest_ClearTest#4");
  409. // Force to create the handle
  410. listview.CreateControl ();
  411. listview.SelectedIndices.Add (0);
  412. listview.SelectedIndices.Add (2);
  413. listview.SelectedIndices.Clear ();
  414. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_ClearTest#5");
  415. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_ClearTest#6");
  416. Assert.AreEqual (false, listview.Items [1].Selected, "SelectedIndexCollectionTest_ClearTest#7");
  417. Assert.AreEqual (false, listview.Items [2].Selected, "SelectedIndexCollectionTest_ClearTest#8");
  418. listview.Dispose ();
  419. }
  420. [Test]
  421. public void SelectedIndexCollectionTest_ClearTest_VirtualMode ()
  422. {
  423. ListView listview = new ListView ();
  424. listview.VirtualListSize = 3;
  425. listview.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
  426. listview.VirtualMode = true;
  427. CreateVirtualItems (3);
  428. // Force to create the handle
  429. listview.CreateControl ();
  430. listview.SelectedIndices.Add (2);
  431. listview.SelectedIndices.Add (0);
  432. Assert.AreEqual (2, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_ClearTest#1");
  433. Assert.AreEqual (0, listview.SelectedIndices [0], "SelectedIndexCollectionTest_ClearTest#2");
  434. Assert.AreEqual (2, listview.SelectedIndices [1], "SelectedIndexCollectionTest_ClearTest#3");
  435. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_ClearTest#4");
  436. Assert.AreEqual (false, listview.Items [1].Selected, "SelectedIndexCollectionTest_ClearTest#5");
  437. Assert.AreEqual (true, listview.Items [2].Selected, "SelectedIndexCollectionTest_ClearTest#6");
  438. listview.SelectedIndices.Clear ();
  439. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_ClearTest#5");
  440. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_ClearTest#6");
  441. Assert.AreEqual (false, listview.Items [1].Selected, "SelectedIndexCollectionTest_ClearTest#7");
  442. Assert.AreEqual (false, listview.Items [2].Selected, "SelectedIndexCollectionTest_ClearTest#8");
  443. listview.Dispose ();
  444. }
  445. [Test]
  446. public void SelectedIndexCollectionTest_IndexOfTest ()
  447. {
  448. ListView listview = new ListView ();
  449. ListViewItem item1 = listview.Items.Add ("A");
  450. ListViewItem item2 = listview.Items.Add ("B");
  451. ListViewItem item3 = listview.Items.Add ("C");
  452. ListViewItem item4 = listview.Items.Add ("D");
  453. listview.SelectedIndices.Add (0);
  454. listview.SelectedIndices.Add (3);
  455. listview.SelectedIndices.Add (2);
  456. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_IndexOfTest#1");
  457. Assert.AreEqual (-1, listview.SelectedIndices.IndexOf (item1.Index), "SelectedIndexCollectionTest_IndexOfTest#2");
  458. Assert.AreEqual (-1, listview.SelectedIndices.IndexOf (item3.Index), "SelectedIndexCollectionTest_IndexOfTest#3");
  459. Assert.AreEqual (-1, listview.SelectedIndices.IndexOf (item4.Index), "SelectedIndexCollectionTest_IndexOfTest#4");
  460. Assert.AreEqual (-1, listview.SelectedIndices.IndexOf (item2.Index), "SelectedIndexCollectionTest_IndexOfTest#5");
  461. // Force to create the control
  462. listview.CreateControl ();
  463. Assert.AreEqual (3, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_IndexOfTest#6");
  464. Assert.AreEqual (0, listview.SelectedIndices.IndexOf (item1.Index), "SelectedIndexCollectionTest_IndexOfTest#7");
  465. Assert.AreEqual (1, listview.SelectedIndices.IndexOf (item3.Index), "SelectedIndexCollectionTest_IndexOfTest#8");
  466. Assert.AreEqual (2, listview.SelectedIndices.IndexOf (item4.Index), "SelectedIndexCollectionTest_IndexOfTest#9");
  467. Assert.AreEqual (-1, listview.SelectedIndices.IndexOf (item2.Index), "SelectedIndexCollectionTest_IndexOfTest#10");
  468. listview.Dispose ();
  469. }
  470. [Test]
  471. public void SelectedIndexCollectionTest_IndexOfTest_VirtualMode ()
  472. {
  473. ListView listview = new ListView ();
  474. listview.VirtualListSize = 4;
  475. listview.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
  476. listview.VirtualMode = true;
  477. CreateVirtualItems (4);
  478. // Force to create the handle
  479. listview.CreateControl ();
  480. listview.SelectedIndices.Add (0);
  481. listview.SelectedIndices.Add (3);
  482. listview.SelectedIndices.Add (2);
  483. Assert.AreEqual (3, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_IndexOfTest#1");
  484. Assert.AreEqual (0, listview.SelectedIndices.IndexOf (0), "SelectedIndexCollectionTest_IndexOfTest#2");
  485. Assert.AreEqual (1, listview.SelectedIndices.IndexOf (2), "SelectedIndexCollectionTest_IndexOfTest#3");
  486. Assert.AreEqual (2, listview.SelectedIndices.IndexOf (3), "SelectedIndexCollectionTest_IndexOfTest#4");
  487. Assert.AreEqual (-1, listview.SelectedIndices.IndexOf (1), "SelectedIndexCollectionTest_IndexOfTest#5");
  488. Assert.AreEqual (-1, listview.SelectedIndices.IndexOf (99), "SelectedIndexCollectionTest_IndexOfTest#6");
  489. Assert.AreEqual (-1, listview.SelectedIndices.IndexOf (-1), "SelectedIndexCollectionTest_IndexOfTest#7");
  490. listview.Dispose ();
  491. }
  492. [Test]
  493. public void SelectedIndexCollectionTest_RemoveTest ()
  494. {
  495. ListView listview = new ListView ();
  496. listview.Items.Add ("A");
  497. listview.SelectedIndices.Add (0);
  498. listview.SelectedIndices.Remove (0);
  499. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#1");
  500. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#2");
  501. // Force to create the handle
  502. listview.CreateControl ();
  503. listview.SelectedIndices.Add (0);
  504. listview.SelectedIndices.Remove (0);
  505. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#3");
  506. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#4");
  507. listview.Dispose ();
  508. }
  509. [Test]
  510. public void SelectedIndexCollectionTest_RemoveTest_VirtualMode ()
  511. {
  512. ListView listview = new ListView ();
  513. listview.VirtualListSize = 5;
  514. listview.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
  515. listview.VirtualMode = true;
  516. CreateVirtualItems (5);
  517. // Force to create the handle
  518. listview.CreateControl ();
  519. listview.SelectedIndices.Add (0);
  520. listview.SelectedIndices.Add (2);
  521. listview.SelectedIndices.Add (4);
  522. Assert.AreEqual (3, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#1");
  523. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#2");
  524. Assert.AreEqual (true, listview.Items [2].Selected, "SelectedIndexCollectionTest_RemoveTest#3");
  525. Assert.AreEqual (true, listview.Items [4].Selected, "SelectedIndexCollectionTest_RemoveTest#4");
  526. Assert.AreEqual (0, listview.SelectedIndices [0], "SelectedIndexCollectionTest_RemoveTest#5");
  527. Assert.AreEqual (2, listview.SelectedIndices [1], "SelectedIndexCollectionTest_RemoveTest#6");
  528. Assert.AreEqual (4, listview.SelectedIndices [2], "SelectedIndexCollectionTest_RemoveTest#7");
  529. listview.SelectedIndices.Remove (2);
  530. Assert.AreEqual (2, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#8");
  531. Assert.AreEqual (false, listview.Items [2].Selected, "SelectedIndexCollectionTest_RemoveTest#9");
  532. Assert.AreEqual (0, listview.SelectedIndices [0], "SelectedIndexCollectionTest_RemoveTest#10");
  533. Assert.AreEqual (4, listview.SelectedIndices [1], "SelectedIndexCollectionTest_RemoveTest#11");
  534. listview.SelectedIndices.Remove (0);
  535. Assert.AreEqual (1, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#12");
  536. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#13");
  537. Assert.AreEqual (4, listview.SelectedIndices [0], "SelectedIndexCollectionTest_RemoveTest#14");
  538. listview.SelectedIndices.Remove (4);
  539. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#15");
  540. Assert.AreEqual (false, listview.Items [4].Selected, "SelectedIndexCollectionTest_RemoveTest#16");
  541. // Remove an already removed index
  542. listview.SelectedIndices.Remove (0);
  543. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#17");
  544. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#18");
  545. listview.Dispose ();
  546. }
  547. #endif
  548. // Exceptions
  549. #if !NET_2_0
  550. [Test, ExpectedException (typeof (NotSupportedException))]
  551. public void SelectedIndexCollectionTest_Add_ExceptionTest ()
  552. {
  553. ListView listview = new ListView ();
  554. ((IList)listview.SelectedIndices).Add (5);
  555. }
  556. [Test, ExpectedException (typeof (NotSupportedException))]
  557. public void SelectedIndexCollectionTest_Remove_ExceptionTest ()
  558. {
  559. ListView listview = new ListView ();
  560. ((IList)listview.SelectedIndices).Remove (5);
  561. }
  562. #endif
  563. [Test, ExpectedException (typeof (NotSupportedException))]
  564. public void SelectedIndexCollectionTest_RemoveAt_ExceptionTest ()
  565. {
  566. ListView listview = new ListView ();
  567. ((IList)listview.SelectedIndices).RemoveAt (5);
  568. }
  569. #if NET_2_0
  570. [Test]
  571. public void SelectedIndexCollectionTest_Remove_ExceptionTest ()
  572. {
  573. ListView listview = new ListView ();
  574. try {
  575. listview.SelectedIndices.Remove (-1);
  576. Assert.Fail ("SelectedIndexCollectionTest_Remove_ExceptionTest#1");
  577. } catch (ArgumentOutOfRangeException) {
  578. }
  579. try {
  580. listview.SelectedIndices.Remove (listview.Items.Count);
  581. Assert.Fail ("SelectedIndexCollectionTest_Remove_ExceptionTest#2");
  582. } catch (ArgumentOutOfRangeException) {
  583. }
  584. listview.VirtualMode = true;
  585. listview.VirtualListSize = 1;
  586. try {
  587. listview.SelectedIndices.Remove (listview.VirtualListSize);
  588. Assert.Fail ("SelectedIndexCollectionTest_Remove_ExceptionTest#3");
  589. } catch (ArgumentOutOfRangeException) {
  590. }
  591. }
  592. [Test]
  593. public void SelectedIndexCollectionTest_Add_ExceptionTest ()
  594. {
  595. ListView listview = new ListView ();
  596. try {
  597. listview.SelectedIndices.Add (-1);
  598. Assert.Fail ("SelectedIndexCollectionTest_Add_ExceptionTest#1");
  599. } catch (ArgumentOutOfRangeException) {
  600. }
  601. try {
  602. listview.SelectedIndices.Add (listview.Items.Count);
  603. Assert.Fail ("SelectedIndexCollectionTest_Add_ExceptionTest#2");
  604. } catch (ArgumentOutOfRangeException) {
  605. }
  606. listview.VirtualMode = true;
  607. listview.VirtualListSize = 1;
  608. try {
  609. listview.SelectedIndices.Add (listview.VirtualListSize);
  610. Assert.Fail ("SelectedIndexCollectionTest_Add_ExceptionTest#3");
  611. } catch (ArgumentOutOfRangeException) {
  612. }
  613. }
  614. #endif
  615. /*
  616. SelectedItemCollection
  617. */
  618. [Test]
  619. public void SelectedItemCollectionTest_PropertiesTest ()
  620. {
  621. ListView listview = new ListView ();
  622. // Properties
  623. Assert.AreEqual (true, listview.SelectedItems.IsReadOnly, "SelectedItemCollectionTest_PropertiesTest#1");
  624. Assert.AreEqual (false, ((ICollection)listview.SelectedItems).IsSynchronized, "SelectedItemCollectionTest_PropertiesTest#2");
  625. Assert.AreEqual (listview.SelectedItems, ((ICollection)listview.SelectedItems).SyncRoot, "SelectedItemCollectionTest_PropertiesTest#3");
  626. Assert.AreEqual (true, ((IList)listview.SelectedItems).IsFixedSize, "SelectedItemCollectionTest_PropertiesTest#4");
  627. Assert.AreEqual (0, listview.SelectedItems.Count, "SelectedItemCollectionTest_PropertiesTest#5");
  628. }
  629. // Exceptions
  630. [Test, ExpectedException (typeof (NotSupportedException))]
  631. public void SelectedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
  632. {
  633. ListView listview = new ListView ();
  634. ((IList)listview.SelectedItems).Add (5);
  635. }
  636. [Test, ExpectedException (typeof (NotSupportedException))]
  637. public void SelectedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
  638. {
  639. ListView listview = new ListView ();
  640. ((IList)listview.SelectedItems).Remove (5);
  641. }
  642. [Test, ExpectedException (typeof (NotSupportedException))]
  643. public void SelectedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
  644. {
  645. ListView listview = new ListView ();
  646. ((IList)listview.SelectedItems).RemoveAt (5);
  647. }
  648. [Test]
  649. public void SelectedItemCollectionTest_Clear ()
  650. {
  651. Form form = new Form ();
  652. form.ShowInTaskbar = false;
  653. ListView lvw = new ListView ();
  654. form.Controls.Add (lvw);
  655. ListViewItem item = lvw.Items.Add ("Title");
  656. item.Selected = true;
  657. lvw.SelectedItems.Clear ();
  658. Assert.IsTrue (item.Selected, "#A1");
  659. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
  660. Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A3");
  661. form.Show ();
  662. Assert.IsTrue (item.Selected, "#B1");
  663. Assert.AreEqual (1, lvw.SelectedItems.Count, "#B2");
  664. Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B3");
  665. // once listview is created, clear DOES have effect
  666. lvw.SelectedItems.Clear ();
  667. Assert.IsFalse (item.Selected, "#C1");
  668. Assert.AreEqual (0, lvw.SelectedItems.Count, "#C2");
  669. Assert.IsFalse (lvw.SelectedItems.Contains (item), "#C3");
  670. form.Dispose ();
  671. }
  672. [Test]
  673. public void SelectedItemCollectionTest_Contains ()
  674. {
  675. Form form = new Form ();
  676. form.ShowInTaskbar = false;
  677. ListView lvw = new ListView ();
  678. form.Controls.Add (lvw);
  679. ListViewItem item = lvw.Items.Add ("Title");
  680. item.Selected = true;
  681. IList list = (IList) lvw.SelectedItems;
  682. Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A1");
  683. Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#A2");
  684. Assert.IsFalse (list.Contains (item), "#A3");
  685. Assert.IsFalse (list.Contains (new ListViewItem ()), "#A4");
  686. form.Show ();
  687. Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B1");
  688. Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#B2");
  689. Assert.IsTrue (list.Contains (item), "#B3");
  690. Assert.IsFalse (list.Contains (new ListViewItem ()), "#B4");
  691. form.Dispose ();
  692. }
  693. [Test]
  694. public void SelectedItemCollectionTest_CopyTo ()
  695. {
  696. Form form = new Form ();
  697. form.ShowInTaskbar = false;
  698. ListView lvw = new ListView ();
  699. form.Controls.Add (lvw);
  700. ListViewItem item = lvw.Items.Add ("Title");
  701. item.Selected = true;
  702. IList list = (IList) lvw.SelectedItems;
  703. Assert.IsNotNull (list, "#A1");
  704. ListViewItem [] items = new ListViewItem [1];
  705. lvw.SelectedItems.CopyTo (items, 0);
  706. Assert.IsNull (items [0], "#A2");
  707. lvw.SelectedItems.CopyTo (items, 455);
  708. form.Show ();
  709. lvw.SelectedItems.CopyTo (items, 0);
  710. Assert.AreSame (item, items [0], "#B1");
  711. try {
  712. lvw.SelectedItems.CopyTo (items, 455);
  713. Assert.Fail ("#B2");
  714. } catch (ArgumentException) {
  715. }
  716. form.Dispose ();
  717. }
  718. [Test]
  719. public void SelectedItemCollectionTest_Count ()
  720. {
  721. Form form = new Form ();
  722. form.ShowInTaskbar = false;
  723. ListView lvw = new ListView ();
  724. form.Controls.Add (lvw);
  725. ListViewItem item = lvw.Items.Add ("Title");
  726. item.Selected = true;
  727. Assert.AreEqual (0, lvw.SelectedItems.Count, "#1");
  728. form.Show ();
  729. Assert.AreEqual (1, lvw.SelectedItems.Count, "#2");
  730. form.Dispose ();
  731. }
  732. [Test]
  733. public void SelectedItemCollectionTest_GetEnumerator ()
  734. {
  735. Form form = new Form ();
  736. form.ShowInTaskbar = false;
  737. ListView lvw = new ListView ();
  738. form.Controls.Add (lvw);
  739. ListViewItem item = lvw.Items.Add ("Title");
  740. item.Selected = true;
  741. Assert.IsFalse (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#A1");
  742. form.Show ();
  743. Assert.IsTrue (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#B1");
  744. form.Dispose ();
  745. }
  746. [Test]
  747. public void SelectedItemCollectionTest_Indexer ()
  748. {
  749. Form form = new Form ();
  750. form.ShowInTaskbar = false;
  751. ListView lvw = new ListView ();
  752. form.Controls.Add (lvw);
  753. ListViewItem item = lvw.Items.Add ("Title");
  754. item.Selected = true;
  755. IList list = (IList) lvw.SelectedItems;
  756. try {
  757. ListViewItem x = lvw.SelectedItems [0];
  758. Assert.Fail ("#A1: " + x.ToString ());
  759. } catch (ArgumentOutOfRangeException) {
  760. }
  761. try {
  762. ListViewItem x = list [0] as ListViewItem;
  763. Assert.Fail ("#A2: " + x.ToString ());
  764. } catch (ArgumentOutOfRangeException) {
  765. }
  766. form.Show ();
  767. Assert.AreSame (item, lvw.SelectedItems [0], "#B1");
  768. Assert.AreSame (item, list [0], "#B2");
  769. form.Dispose ();
  770. }
  771. [Test]
  772. public void SelectedItemCollectionTest_IndexOf ()
  773. {
  774. Form form = new Form ();
  775. form.ShowInTaskbar = false;
  776. ListView lvw = new ListView ();
  777. form.Controls.Add (lvw);
  778. ListViewItem item = lvw.Items.Add ("Title");
  779. item.Selected = true;
  780. IList list = (IList) lvw.SelectedItems;
  781. Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (item), "#A1");
  782. Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#A2");
  783. Assert.AreEqual (-1, list.IndexOf (item), "#A3");
  784. Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#A4");
  785. form.Show ();
  786. Assert.AreEqual (0, lvw.SelectedItems.IndexOf (item), "#B1");
  787. Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#B2");
  788. Assert.AreEqual (0, list.IndexOf (item), "#B3");
  789. Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#B4");
  790. form.Dispose ();
  791. }
  792. #if NET_2_0
  793. [Test]
  794. public void SelectedItemCollectionTest_IndexOfKey ()
  795. {
  796. ListView lvw = new ListView ();
  797. ListViewItem lvi1 = new ListViewItem ("A");
  798. lvi1.Name = "A name";
  799. lvi1.Selected = true;
  800. ListViewItem lvi2 = new ListViewItem ("B");
  801. lvi2.Name = "Same name";
  802. lvi2.Selected = false;
  803. ListViewItem lvi3 = new ListViewItem ("C");
  804. lvi3.Name = "Same name";
  805. lvi3.Selected = true;
  806. ListViewItem lvi4 = new ListViewItem ("D");
  807. lvi4.Name = String.Empty;
  808. lvi4.Selected = true;
  809. ListViewItem lvi5 = new ListViewItem ("E");
  810. lvi5.Name = "E name";
  811. lvi5.Selected = false;
  812. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
  813. // Force to create the control
  814. lvw.CreateControl ();
  815. Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
  816. Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey (String.Empty), "#A2");
  817. Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey (null), "#A3");
  818. Assert.AreEqual (0, lvw.SelectedItems.IndexOfKey ("A name"), "#A4");
  819. Assert.AreEqual (0, lvw.SelectedItems.IndexOfKey ("a NAME"), "#A5");
  820. Assert.AreEqual (1, lvw.SelectedItems.IndexOfKey ("Same name"), "#A6");
  821. Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey ("E name"), "#A7");
  822. ListViewItem lvi6 = new ListViewItem ("F");
  823. lvw.Items.Add (lvi6);
  824. lvi6.Selected = true;
  825. lvi6.Name = "F name";
  826. Assert.AreEqual (4, lvw.SelectedItems.Count, "#B1");
  827. Assert.AreEqual (3, lvw.SelectedItems.IndexOfKey ("F name"), "#B2");
  828. lvw.Dispose ();
  829. }
  830. [Test]
  831. public void SelectedItemCollectionTest_Indexer2 ()
  832. {
  833. ListView lvw = new ListView ();
  834. ListViewItem lvi1 = new ListViewItem ("A");
  835. lvi1.Name = "A name";
  836. lvi1.Selected = true;
  837. ListViewItem lvi2 = new ListViewItem ("B");
  838. lvi2.Name = "Same name";
  839. lvi2.Selected = false;
  840. ListViewItem lvi3 = new ListViewItem ("C");
  841. lvi3.Name = "Same name";
  842. lvi3.Selected = true;
  843. ListViewItem lvi4 = new ListViewItem ("D");
  844. lvi4.Name = String.Empty;
  845. lvi4.Selected = true;
  846. ListViewItem lvi5 = new ListViewItem ("E");
  847. lvi5.Name = "E name";
  848. lvi5.Selected = false;
  849. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
  850. // Force to create the control
  851. lvw.CreateControl ();
  852. Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
  853. Assert.AreEqual (null, lvw.SelectedItems [String.Empty], "#A2");
  854. Assert.AreEqual (null, lvw.SelectedItems [null], "#A3");
  855. Assert.AreEqual (lvi1, lvw.SelectedItems ["A name"], "#A4");
  856. Assert.AreEqual (lvi1, lvw.SelectedItems ["a NAME"], "#A5");
  857. Assert.AreEqual (lvi3, lvw.SelectedItems ["Same name"], "#A6");
  858. Assert.AreEqual (null, lvw.SelectedItems ["E name"], "#A7");
  859. ListViewItem lvi6 = new ListViewItem ("F");
  860. lvw.Items.Add (lvi6);
  861. lvi6.Selected = true;
  862. lvi6.Name = "F name";
  863. Assert.AreEqual (4, lvw.SelectedItems.Count, "#B1");
  864. Assert.AreEqual (lvi6, lvw.SelectedItems ["F name"], "#B2");
  865. lvw.Dispose ();
  866. }
  867. #endif
  868. [Test]
  869. public void SelectedItemCollectionTest_Order ()
  870. {
  871. Form form = new Form ();
  872. form.ShowInTaskbar = false;
  873. ListView lvw = new ListView ();
  874. lvw.MultiSelect = true;
  875. form.Controls.Add (lvw);
  876. ListViewItem itemA = lvw.Items.Add ("A");
  877. itemA.Selected = true;
  878. ListViewItem itemB = lvw.Items.Add ("B");
  879. itemB.Selected = true;
  880. ListViewItem itemC = lvw.Items.Add ("C");
  881. itemC.Selected = true;
  882. form.Show ();
  883. Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
  884. Assert.AreSame (itemA, lvw.SelectedItems [0], "#A2");
  885. Assert.AreSame (itemB, lvw.SelectedItems [1], "#A3");
  886. Assert.AreSame (itemC, lvw.SelectedItems [2], "#A3");
  887. itemB.Selected = false;
  888. Assert.AreEqual (2, lvw.SelectedItems.Count, "#B1");
  889. Assert.AreSame (itemA, lvw.SelectedItems [0], "#B2");
  890. Assert.AreSame (itemC, lvw.SelectedItems [1], "#B3");
  891. itemB.Selected = true;
  892. Assert.AreEqual (3, lvw.SelectedItems.Count, "#C1");
  893. Assert.AreSame (itemA, lvw.SelectedItems [0], "#C2");
  894. Assert.AreSame (itemB, lvw.SelectedItems [1], "#C3");
  895. Assert.AreSame (itemC, lvw.SelectedItems [2], "#C4");
  896. lvw.Sorting = SortOrder.Descending;
  897. Assert.AreEqual (3, lvw.SelectedItems.Count, "#D1");
  898. Assert.AreSame (itemC, lvw.SelectedItems [0], "#D2");
  899. Assert.AreSame (itemB, lvw.SelectedItems [1], "#D3");
  900. Assert.AreSame (itemA, lvw.SelectedItems [2], "#D4");
  901. form.Dispose ();
  902. }
  903. /*
  904. ListViewItemCollection
  905. */
  906. [Test]
  907. public void ListViewItemCollectionTest_Add ()
  908. {
  909. ListView lvw = new ListView ();
  910. ListViewItem item = new ListViewItem ("Title");
  911. ListViewItem newItem = lvw.Items.Add (item);
  912. Assert.AreSame (newItem, item, "#A1");
  913. Assert.AreEqual (0, item.Index, "#A2");
  914. Assert.AreSame (item, lvw.Items [0], "#A3");
  915. Assert.AreSame (lvw, item.ListView, "#A4");
  916. newItem = lvw.Items.Add ("A title");
  917. Assert.AreEqual ("A title", newItem.Text, "#B1");
  918. Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
  919. Assert.AreEqual (1, newItem.Index, "#B3");
  920. Assert.AreSame (newItem, lvw.Items [1], "#B4");
  921. Assert.AreSame (lvw, newItem.ListView, "#B5");
  922. Assert.AreEqual (0, item.Index, "#B6");
  923. Assert.AreSame (item, lvw.Items [0], "#B7");
  924. newItem = lvw.Items.Add ("A title", 4);
  925. Assert.AreEqual ("A title", newItem.Text, "#C1");
  926. Assert.AreEqual (4, newItem.ImageIndex, "#C2");
  927. Assert.AreEqual (2, newItem.Index, "#C3");
  928. Assert.AreSame (newItem, lvw.Items [2], "#C4");
  929. Assert.AreSame (lvw, newItem.ListView, "#C5");
  930. Assert.AreEqual (0, item.Index, "#C6");
  931. Assert.AreSame (item, lvw.Items [0], "#C7");
  932. }
  933. #if NET_2_0
  934. [Test]
  935. public void ListViewItemCollectionTest_Add_Group ()
  936. {
  937. ListView lvw = new ListView ();
  938. ListViewGroup lvg = new ListViewGroup ();
  939. ListViewItem lvi = new ListViewItem ("A");
  940. lvg.Items.Add (lvi);
  941. Assert.AreEqual (lvg, lvi.Group, "#A1");
  942. Assert.AreEqual (1, lvg.Items.Count, "#A2");
  943. lvw.Groups.Add (lvg);
  944. Assert.AreEqual (null, lvi.ListView, "#B1");
  945. lvw.Items.Clear ();
  946. lvw.Groups.Clear ();
  947. lvg.Items.Clear ();
  948. lvw.Groups.Add (lvg);
  949. lvg.Items.Add (lvi);
  950. Assert.AreEqual (null, lvi.ListView, "#C1");
  951. lvw.Items.Clear ();
  952. lvw.Groups.Clear ();
  953. lvg.Items.Clear ();
  954. // Adding the ListViewItem to the ListView.Items collection
  955. // first throws an exception.
  956. try {
  957. lvw.Items.Add (lvi);
  958. lvg.Items.Add (lvi);
  959. Assert.Fail ("#D1");
  960. } catch (ArgumentException) {
  961. }
  962. lvw.Items.Clear ();
  963. lvw.Groups.Clear ();
  964. lvg.Items.Clear ();
  965. // The right order is: first add to the ListViewGroup.Items
  966. // collection, then to the ListView.Items collection,
  967. // OR add first add the group to the ListView and then the order
  968. // of item adding doesn't matter
  969. lvw.Groups.Add (lvg);
  970. lvg.Items.Add (lvi);
  971. Assert.AreEqual (null, lvi.ListView, "#E1");
  972. lvw.Items.Add (lvi);
  973. Assert.AreEqual (1, lvw.Items.Count, "#E2");
  974. Assert.AreEqual (1, lvg.Items.Count, "#E3");
  975. Assert.AreEqual (lvw, lvi.ListView, "#E4");
  976. lvg.Items.Clear ();
  977. lvw.Items.Clear ();
  978. lvw.Groups.Clear ();
  979. // Adding the already added ListViewItem to
  980. // a different group should remove it from the previous one
  981. lvg.Items.Add (lvi);
  982. Assert.AreEqual (1, lvg.Items.Count, "#F1");
  983. Assert.AreEqual (lvg, lvi.Group, "#F2");
  984. ListViewGroup lvg2 = new ListViewGroup ();
  985. lvg2.Items.Add (lvi);
  986. Assert.AreEqual (0, lvg.Items.Count, "#G1");
  987. Assert.AreEqual (1, lvg2.Items.Count, "#G2");
  988. Assert.AreEqual (lvg2, lvi.Group, "#G3");
  989. }
  990. #endif
  991. [Test]
  992. [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
  993. public void ListViewItemCollectionTest_Add_ExistingItem ()
  994. {
  995. ListView lvw = new ListView ();
  996. ListViewItem itemA = lvw.Items.Add ("A");
  997. lvw.Items.Add (itemA);
  998. }
  999. [Test]
  1000. [ExpectedException (typeof (ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
  1001. public void ListViewItemCollectionTest_Add_OwnedItem ()
  1002. {
  1003. ListView lv1 = new ListView ();
  1004. ListView lv2 = new ListView ();
  1005. ListViewItem item = lv1.Items.Add ("A");
  1006. lv2.Items.Add (item);
  1007. }
  1008. [Test]
  1009. public void ListViewItemCollectionTest_Add_Junk ()
  1010. {
  1011. ListView lv1 = new ListView ();
  1012. ListViewItem item4 = lv1.Items.Add("Item4", 4);
  1013. Assert.AreEqual(item4, lv1.Items[0], "#D1");
  1014. #if NET_2_0
  1015. Assert.AreEqual(string.Empty, lv1.Items[0].Name, "#D2");
  1016. #endif
  1017. Assert.AreEqual("Item4", lv1.Items[0].Text, "#D3");
  1018. Assert.AreEqual(4, lv1.Items[0].ImageIndex, "#D4");
  1019. string text = null;
  1020. ListViewItem item5 = lv1.Items.Add(text);
  1021. Assert.AreEqual(item5, lv1.Items[1], "#E1");
  1022. #if NET_2_0
  1023. Assert.AreEqual(string.Empty, lv1.Items[1].Name, "#E2");
  1024. #endif
  1025. Assert.AreEqual(string.Empty, lv1.Items[1].Text, "#E3");
  1026. ListViewItem item6 = lv1.Items.Add(null, 5);
  1027. Assert.AreEqual(item6, lv1.Items[2], "#F1");
  1028. #if NET_2_0
  1029. Assert.AreEqual(string.Empty, lv1.Items[2].Name, "#F2");
  1030. #endif
  1031. Assert.AreEqual(string.Empty, lv1.Items[2].Text, "#F3");
  1032. Assert.AreEqual(5, lv1.Items[2].ImageIndex, "#F4");
  1033. #if NET_2_0
  1034. ListViewItem item1 = lv1.Items.Add("ItemKey1", "Item1", 1);
  1035. Assert.AreEqual(item1, lv1.Items[3], "#A1");
  1036. Assert.AreEqual("ItemKey1", lv1.Items[3].Name, "#A2");
  1037. Assert.AreEqual("Item1", lv1.Items[3].Text, "#A3");
  1038. Assert.AreEqual(1, lv1.Items[3].ImageIndex, "#A4");
  1039. ListViewItem item2 = lv1.Items.Add("ItemKey2", "Item2", "Image2");
  1040. Assert.AreEqual(item2, lv1.Items[4], "#B1");
  1041. Assert.AreEqual("ItemKey2", lv1.Items[4].Name, "#B2");
  1042. Assert.AreEqual("Item2", lv1.Items[4].Text, "#B3");
  1043. Assert.AreEqual("Image2", lv1.Items[4].ImageKey, "#B4");
  1044. ListViewItem item3 = lv1.Items.Add("Item3", "Image3");
  1045. Assert.AreEqual(item3, lv1.Items[5], "#C1");
  1046. Assert.AreEqual(string.Empty, lv1.Items[5].Name, "#C2");
  1047. Assert.AreEqual("Item3", lv1.Items[5].Text, "#C3");
  1048. Assert.AreEqual("Image3", lv1.Items[5].ImageKey, "#C4");
  1049. ListViewItem item7 = lv1.Items.Add(null, "Item6", 6);
  1050. Assert.AreEqual(item7, lv1.Items[6], "#G1");
  1051. Assert.AreEqual(string.Empty, lv1.Items[6].Name, "#G2");
  1052. Assert.AreEqual("Item6", lv1.Items[6].Text, "#G3");
  1053. Assert.AreEqual(6, lv1.Items[6].ImageIndex, "#G4");
  1054. ListViewItem item8 = lv1.Items.Add("ItemKey7", null, 7);
  1055. Assert.AreEqual(item8, lv1.Items[7], "#H1");
  1056. Assert.AreEqual("ItemKey7", lv1.Items[7].Name, "#H2");
  1057. Assert.AreEqual(string.Empty, lv1.Items[7].Text, "#H3");
  1058. Assert.AreEqual(7, lv1.Items[7].ImageIndex, "#H4");
  1059. ListViewItem item9 = lv1.Items.Add("ItemKey8", "Item8", null);
  1060. Assert.AreEqual(item9, lv1.Items[8], "#I1");
  1061. Assert.AreEqual("ItemKey8", lv1.Items[8].Name, "#I2");
  1062. Assert.AreEqual("Item8", lv1.Items[8].Text, "#I3");
  1063. Assert.AreEqual(string.Empty, lv1.Items[8].ImageKey, "#I4");
  1064. #endif
  1065. }
  1066. [Test]
  1067. public void ListViewItemCollectionTest_AddRange ()
  1068. {
  1069. ListView lv1 = new ListView ();
  1070. ListViewItem item1 = new ListViewItem ("Item1");
  1071. ListViewItem item2 = new ListViewItem ("Item2");
  1072. ListViewItem item3 = new ListViewItem ("Item3");
  1073. lv1.Items.AddRange (new ListViewItem[] { item1, item2, item3 });
  1074. Assert.AreSame (item1, lv1.Items[0], "#A1");
  1075. Assert.AreEqual (0, item1.Index, "#A2");
  1076. Assert.AreSame (lv1, item1.ListView, "#A3");
  1077. Assert.AreSame (item2, lv1.Items[1], "#B1");
  1078. Assert.AreEqual (1, item2.Index, "#B2");
  1079. Assert.AreSame (lv1, item2.ListView, "#B3");
  1080. Assert.AreSame (item3, lv1.Items[2], "#C1");
  1081. Assert.AreEqual (2, item3.Index, "#C2");
  1082. Assert.AreSame (lv1, item3.ListView, "#C3");
  1083. }
  1084. [Test]
  1085. public void ListViewItemCollectionTest_AddRange_Count ()
  1086. {
  1087. ListView lv1 = new ListView ();
  1088. ListViewItem item1 = new ListViewItem ("Item1");
  1089. ListViewItem item2 = new ListViewItem ("Item2");
  1090. ListViewItem item3 = new ListViewItem ("Item3");
  1091. lv1.Items.Add ("Item4");
  1092. Assert.AreEqual (1, lv1.Items.Count, "#A1");
  1093. lv1.Items.AddRange (new ListViewItem[] { item1, item2, item3 });
  1094. Assert.AreEqual (4, lv1.Items.Count, "#A1");
  1095. }
  1096. [Test]
  1097. [ExpectedException(typeof(ArgumentNullException))]
  1098. public void ListViewItemCollectionTest_AddRange_NullException ()
  1099. {
  1100. ListView lv1 = new ListView ();
  1101. ListViewItem[] value = null;
  1102. lv1.Items.AddRange (value);
  1103. }
  1104. [Test]
  1105. [ExpectedException(typeof(ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
  1106. public void ListViewItemCollectionTest_AddRange_OwnedItem ()
  1107. {
  1108. //MSDN told us, we can use this method to reuse items from a different ListView control. That is not true.
  1109. ListView lv1 = new ListView ();
  1110. ListView lv2 = new ListView ();
  1111. ListViewItem a = lv1.Items.Add ("Item1");
  1112. ListViewItem b = lv1.Items.Add ("Item2");
  1113. lv2.Items.AddRange (new ListViewItem[] { a, b });
  1114. }
  1115. [Test]
  1116. [ExpectedException(typeof(ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
  1117. public void ListViewItemCollectionTest_AddRange_ExistingItem ()
  1118. {
  1119. ListView lv1 = new ListView ();
  1120. ListViewItem item1 = lv1.Items.Add ("Item1");
  1121. lv1.Items.Add (item1);
  1122. }
  1123. [Test]
  1124. public void ListViewItemCollectionTest_Clear ()
  1125. {
  1126. ListView lvw = new ListView ();
  1127. ListViewItem itemA = lvw.Items.Add ("A");
  1128. ListViewItem itemB = lvw.Items.Add ("B");
  1129. Assert.AreEqual (2, lvw.Items.Count, "#A1");
  1130. Assert.AreSame (lvw, itemA.ListView, "#A2");
  1131. Assert.AreSame (lvw, itemB.ListView, "#A3");
  1132. lvw.Items.Clear ();
  1133. Assert.AreEqual (0, lvw.Items.Count, "#B1");
  1134. Assert.IsNull (itemA.ListView, "#B2");
  1135. Assert.IsNull (itemB.ListView, "#B3");
  1136. }
  1137. #if NET_2_0
  1138. [Test]
  1139. public void ListViewItemCollectionTest_Clear_Groups ()
  1140. {
  1141. ListViewGroup lvg = new ListViewGroup ();
  1142. ListViewItem itemA = new ListViewItem ();
  1143. ListViewItem itemB = new ListViewItem ();
  1144. ListViewItem itemC = new ListViewItem ();
  1145. lvg.Items.Add (itemA);
  1146. lvg.Items.Add (itemB);
  1147. lvg.Items.Add (itemC);
  1148. Assert.AreEqual (3, lvg.Items.Count, "#A1");
  1149. Assert.AreEqual (lvg, itemA.Group, "#A2");
  1150. Assert.AreEqual (lvg, itemB.Group, "#A3");
  1151. Assert.AreEqual (lvg, itemC.Group, "#A4");
  1152. ListView lvw = new ListView ();
  1153. lvw.Groups.Add (lvg);
  1154. Assert.AreEqual (3, lvg.Items.Count, "#B1");
  1155. Assert.AreEqual (0, lvw.Items.Count, "#B2");
  1156. Assert.AreEqual (null, itemA.ListView, "#B3");
  1157. Assert.AreEqual (null, itemB.ListView, "#B4");
  1158. Assert.AreEqual (null, itemC.ListView, "#B5");
  1159. lvg.Items.Clear ();
  1160. Assert.AreEqual (0, lvg.Items.Count, "#C1");
  1161. Assert.AreEqual (null, itemA.Group, "#C2");
  1162. //Assert.AreEqual (null, itemB.Group, "#C3"); // Bogus .Net impl
  1163. Assert.AreEqual (null, itemC.Group, "#C4");
  1164. // Add items with Group contained within lvw.Groups
  1165. lvg.Items.Add (itemA);
  1166. lvg.Items.Add (itemB);
  1167. lvg.Items.Add (itemC);
  1168. Assert.AreEqual (3, lvg.Items.Count, "#D1");
  1169. Assert.AreEqual (0, lvw.Items.Count, "#D2");
  1170. Assert.AreEqual (null, itemA.ListView, "#D3");
  1171. Assert.AreEqual (null, itemB.ListView, "#D4");
  1172. Assert.AreEqual (null, itemC.ListView, "#D5");
  1173. lvg.Items.Clear ();
  1174. lvw.Groups.Clear ();
  1175. lvw.Groups.Add (lvg);
  1176. lvg.Items.Add (itemA);
  1177. lvg.Items.Add (itemB);
  1178. lvw.Items.Add (itemA);
  1179. lvw.Items.Add (itemB);
  1180. Assert.AreEqual (2, lvg.Items.Count, "#E1");
  1181. Assert.AreEqual (2, lvw.Items.Count, "#E2");
  1182. Assert.AreEqual (lvw, itemA.ListView, "#E3");
  1183. Assert.AreEqual (lvw, itemB.ListView, "#E4");
  1184. lvg.Items.Clear ();
  1185. Assert.AreEqual (0, lvg.Items.Count, "#F1");
  1186. Assert.AreEqual (2, lvw.Items.Count, "#F2");
  1187. Assert.AreEqual (lvw, itemA.ListView, "#F3");
  1188. Assert.AreEqual (lvw, itemB.ListView, "#F4");
  1189. Assert.AreEqual (null, itemA.Group, "#F5");
  1190. //Assert.AreEqual (null, itemB.Group, "#F6"); // Bogus impl again
  1191. }
  1192. #endif
  1193. [Test]
  1194. public void ListViewItemCollectionTest_Insert ()
  1195. {
  1196. ListView lvw = new ListView ();
  1197. ListViewItem item = new ListViewItem ("Title");
  1198. ListViewItem newItem = lvw.Items.Insert (0, item);
  1199. Assert.AreSame (newItem, item, "#A1");
  1200. Assert.AreEqual (-1, newItem.ImageIndex, "#A2");
  1201. Assert.AreSame (newItem, lvw.Items [0], "#A3");
  1202. Assert.AreSame (lvw, newItem.ListView, "#A4");
  1203. newItem = lvw.Items.Insert (1, "A title");
  1204. Assert.AreEqual ("A title", newItem.Text, "#B1");
  1205. Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
  1206. Assert.AreEqual (1, newItem.Index, "#B3");
  1207. Assert.AreSame (newItem, lvw.Items [1], "#B4");
  1208. Assert.AreSame (lvw, newItem.ListView, "#B5");
  1209. Assert.AreEqual (0, item.Index, "#B6");
  1210. Assert.AreSame (item, lvw.Items [0], "#B7");
  1211. newItem = lvw.Items.Insert (0, "Other title");
  1212. Assert.AreEqual ("Other title", newItem.Text, "#C1");
  1213. Assert.AreEqual (-1, newItem.ImageIndex, "#C2");
  1214. Assert.AreEqual (0, newItem.Index, "#C3");
  1215. Assert.AreSame (newItem, lvw.Items [0], "#C4");
  1216. Assert.AreSame (lvw, newItem.ListView, "#C5");
  1217. Assert.AreEqual (1, item.Index, "#C6");
  1218. Assert.AreSame (item, lvw.Items [1], "#C7");
  1219. newItem = lvw.Items.Insert (3, "Some title", 4);
  1220. Assert.AreEqual ("Some title", newItem.Text, "#D1");
  1221. Assert.AreEqual (4, newItem.ImageIndex, "#D2");
  1222. Assert.AreEqual (3, newItem.Index, "#D3");
  1223. Assert.AreSame (newItem, lvw.Items [3], "#D4");
  1224. Assert.AreSame (lvw, newItem.ListView, "#D5");
  1225. Assert.AreEqual (1, item.Index, "#D6");
  1226. Assert.AreSame (item, lvw.Items [1], "#D7");
  1227. newItem = lvw.Items.Insert (0, "No title", 4);
  1228. Assert.AreEqual ("No title", newItem.Text, "#E1");
  1229. Assert.AreEqual (4, newItem.ImageIndex, "#E2");
  1230. Assert.AreEqual (0, newItem.Index, "#E3");
  1231. Assert.AreSame (newItem, lvw.Items [0], "#E4");
  1232. Assert.AreSame (lvw, newItem.ListView, "#E5");
  1233. Assert.AreEqual (2, item.Index, "#E6");
  1234. Assert.AreSame (item, lvw.Items [2], "#E7");
  1235. }
  1236. #if NET_2_0
  1237. [Test]
  1238. public void ListViewItemCollectionTest_Insert_Group ()
  1239. {
  1240. ListView lvw = new ListView ();
  1241. ListViewGroup lvg = new ListViewGroup ();
  1242. ListViewItem lvi = new ListViewItem ("A");
  1243. lvg.Items.Insert (0, lvi);
  1244. Assert.AreEqual (lvg, lvi.Group, "#A1");
  1245. Assert.AreEqual (1, lvg.Items.Count, "#A2");
  1246. lvw.Groups.Add (lvg);
  1247. Assert.AreEqual (null, lvi.ListView, "#B1");
  1248. lvw.Items.Clear ();
  1249. lvw.Groups.Clear ();
  1250. lvg.Items.Clear ();
  1251. lvw.Groups.Add (lvg);
  1252. lvg.Items.Insert (0, lvi);
  1253. Assert.AreEqual (null, lvi.ListView, "#C1");
  1254. lvw.Items.Clear ();
  1255. lvw.Groups.Clear ();
  1256. lvg.Items.Clear ();
  1257. // Adding the ListViewItem to the ListView.Items collection
  1258. // first throws an exception.
  1259. try {
  1260. lvw.Items.Insert (0, lvi);
  1261. lvg.Items.Insert (0, lvi);
  1262. Assert.Fail ("#D1");
  1263. } catch (ArgumentException) {
  1264. }
  1265. lvw.Items.Clear ();
  1266. lvw.Groups.Clear ();
  1267. lvg.Items.Clear ();
  1268. // The right order is: first add to the ListViewGroup.Items
  1269. // collection, then to the ListView.Items collection,
  1270. // OR add first add the group to the ListView and then the order
  1271. // of item adding doesn't matter
  1272. lvw.Groups.Add (lvg);
  1273. lvg.Items.Insert (0, lvi);
  1274. Assert.AreEqual (null, lvi.ListView, "#E1");
  1275. lvw.Items.Insert (0, lvi);
  1276. Assert.AreEqual (1, lvw.Items.Count, "#E2");
  1277. Assert.AreEqual (1, lvg.Items.Count, "#E3");
  1278. Assert.AreEqual (lvw, lvi.ListView, "#E4");
  1279. lvg.Items.Clear ();
  1280. lvw.Items.Clear ();
  1281. lvw.Groups.Clear ();
  1282. // Adding the already added ListViewItem to
  1283. // a different group should remove it from the previous one
  1284. lvg.Items.Insert (0, lvi);
  1285. Assert.AreEqual (1, lvg.Items.Count, "#F1");
  1286. Assert.AreEqual (lvg, lvi.Group, "#F2");
  1287. ListViewGroup lvg2 = new ListViewGroup ();
  1288. lvg2.Items.Insert (0, lvi);
  1289. Assert.AreEqual (0, lvg.Items.Count, "#G1");
  1290. Assert.AreEqual (1, lvg2.Items.Count, "#G2");
  1291. Assert.AreEqual (lvg2, lvi.Group, "#G3");
  1292. }
  1293. #endif
  1294. [Test]
  1295. [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
  1296. public void ListViewItemCollectionTest_Insert_ExistingItem ()
  1297. {
  1298. ListView lvw = new ListView ();
  1299. ListViewItem itemA = lvw.Items.Add ("A");
  1300. lvw.Items.Insert (0, itemA);
  1301. }
  1302. [Test]
  1303. [ExpectedException (typeof (ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
  1304. public void ListViewItemCollectionTest_Insert_OwnedItem ()
  1305. {
  1306. ListView lv1 = new ListView ();
  1307. ListView lv2 = new ListView ();
  1308. ListViewItem item = lv1.Items.Add ("A");
  1309. lv2.Items.Insert (0, item);
  1310. }
  1311. [Test]
  1312. [ExpectedException(typeof(ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
  1313. public void ListViewItemCollectionTest_Indexer_OwnedItem ()
  1314. {
  1315. ListView lv1 = new ListView ();
  1316. ListView lv2 = new ListView ();
  1317. ListViewItem item = lv1.Items.Add ("A");
  1318. lv2.Items.Add ("Dummy");
  1319. lv2.Items[0] = item;
  1320. }
  1321. [Test]
  1322. public void ListViewItemCollectionTest_Remove ()
  1323. {
  1324. Form form = new Form ();
  1325. form.ShowInTaskbar = false;
  1326. ListView lvw = new ListView ();
  1327. form.Controls.Add (lvw);
  1328. lvw.MultiSelect = true;
  1329. lvw.CheckBoxes = true;
  1330. form.Show ();
  1331. ListViewItem itemA = lvw.Items.Add ("A");
  1332. ListViewItem itemB = lvw.Items.Add ("B");
  1333. lvw.Items.Add ("C");
  1334. ListViewItem itemD = lvw.Items.Add ("D");
  1335. Assert.AreEqual (4, lvw.Items.Count, "#A1");
  1336. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
  1337. Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
  1338. itemB.Checked = true;
  1339. itemD.Checked = true;
  1340. Assert.AreEqual (4, lvw.Items.Count, "#B1");
  1341. Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
  1342. Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
  1343. Assert.AreSame (itemB, lvw.CheckedItems [0], "#B4");
  1344. Assert.AreSame (itemD, lvw.CheckedItems [1], "#B5");
  1345. itemD.Selected = true;
  1346. Assert.AreEqual (4, lvw.Items.Count, "#C1");
  1347. Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
  1348. Assert.AreSame (itemD, lvw.SelectedItems [0], "#C3");
  1349. Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
  1350. Assert.AreSame (itemB, lvw.CheckedItems [0], "#C5");
  1351. Assert.AreSame (itemD, lvw.CheckedItems [1], "#C6");
  1352. lvw.Items.Remove (itemB);
  1353. Assert.AreEqual (3, lvw.Items.Count, "#D1");
  1354. Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
  1355. Assert.AreSame (itemD, lvw.SelectedItems [0], "#D3");
  1356. Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
  1357. Assert.AreSame (itemD, lvw.CheckedItems [0], "#D5");
  1358. lvw.Items.Remove (itemA);
  1359. Assert.AreEqual (2, lvw.Items.Count, "#E1");
  1360. Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
  1361. Assert.AreEqual (itemD, lvw.SelectedItems [0], "#E3");
  1362. Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
  1363. Assert.AreEqual (itemD, lvw.CheckedItems [0], "#E5");
  1364. Assert.IsNull (itemA.ListView, "#F1");
  1365. Assert.IsNull (itemB.ListView, "#F2");
  1366. Assert.AreSame (lvw, itemD.ListView, "#F3");
  1367. form.Dispose ();
  1368. }
  1369. #if NET_2_0
  1370. [Test]
  1371. public void ListViewItemCollectionTest_Remove_Groups ()
  1372. {
  1373. ListViewGroup lvg = new ListViewGroup ();
  1374. ListViewItem itemA = new ListViewItem ();
  1375. lvg.Items.Add (itemA);
  1376. Assert.AreEqual (1, lvg.Items.Count, "#A1");
  1377. lvg.Items.Remove (itemA);
  1378. Assert.AreEqual (0, lvg.Items.Count, "#A2");
  1379. Assert.AreEqual (null, itemA.Group, "#A3");
  1380. lvg.Items.Add (itemA);
  1381. ListView lvw = new ListView ();
  1382. lvw.Groups.Add (lvg);
  1383. Assert.AreEqual (1, lvg.Items.Count, "#B1");
  1384. Assert.AreEqual (0, lvw.Items.Count, "#B2");
  1385. Assert.AreEqual (null, itemA.ListView, "#B3");
  1386. lvg.Items.Remove (itemA);
  1387. Assert.AreEqual (0, lvg.Items.Count, "#C1");
  1388. Assert.AreEqual (null, itemA.Group, "#C2");
  1389. // Add items with Group contained within lvw.Groups
  1390. lvg.Items.Add (itemA);
  1391. Assert.AreEqual (1, lvg.Items.Count, "#D1");
  1392. Assert.AreEqual (0, lvw.Items.Count, "#D2");
  1393. Assert.AreEqual (null, itemA.ListView, "#D3");
  1394. Assert.AreEqual (lvg, itemA.Group, "#D4");
  1395. lvg.Items.Clear ();
  1396. lvw.Groups.Clear ();
  1397. lvw.Groups.Add (lvg);
  1398. lvg.Items.Add (itemA);
  1399. lvw.Items.Add (itemA);
  1400. Assert.AreEqual (1, lvg.Items.Count, "#E1");
  1401. Assert.AreEqual (1, lvw.Items.Count, "#E2");
  1402. Assert.AreEqual (lvw, itemA.ListView, "#E3");
  1403. Assert.AreEqual (lvg, itemA.Group, "#E4");
  1404. lvg.Items.Remove (itemA);
  1405. Assert.AreEqual (0, lvg.Items.Count, "#F1");
  1406. Assert.AreEqual (1, lvw.Items.Count, "#F2");
  1407. Assert.AreEqual (lvw, itemA.ListView, "#F3");
  1408. Assert.AreEqual (null, itemA.Group, "#F4");
  1409. }
  1410. #endif
  1411. [Test]
  1412. public void ListViewItemCollectionTest_RemoveAt ()
  1413. {
  1414. Form form = new Form ();
  1415. form.ShowInTaskbar = false;
  1416. ListView lvw = new ListView ();
  1417. form.Controls.Add (lvw);
  1418. lvw.MultiSelect = true;
  1419. lvw.CheckBoxes = true;
  1420. ListViewItem itemA = lvw.Items.Add ("A");
  1421. ListViewItem itemB = lvw.Items.Add ("B");
  1422. ListViewItem itemC = lvw.Items.Add ("C");
  1423. ListViewItem itemD = lvw.Items.Add ("D");
  1424. form.Show ();
  1425. Assert.AreEqual (4, lvw.Items.Count, "#A1");
  1426. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
  1427. Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
  1428. lvw.Items [1].Checked = true;
  1429. lvw.Items [3].Checked = true;
  1430. Assert.AreEqual (4, lvw.Items.Count, "#B1");
  1431. Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
  1432. Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
  1433. Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#B4");
  1434. Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#B5");
  1435. lvw.Items [3].Selected = true;
  1436. Assert.AreEqual (4, lvw.Items.Count, "#C1");
  1437. Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
  1438. Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#C3");
  1439. Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
  1440. Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#C5");
  1441. Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#C6");
  1442. lvw.Items.RemoveAt (1);
  1443. Assert.AreEqual (3, lvw.Items.Count, "#D1");
  1444. Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
  1445. Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#D3");
  1446. Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
  1447. Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#D5");
  1448. lvw.Items.RemoveAt (0);
  1449. Assert.AreEqual (2, lvw.Items.Count, "#E1");
  1450. Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
  1451. Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#E3");
  1452. Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
  1453. Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#E5");
  1454. Assert.IsNull (itemA.ListView, "#F1");
  1455. Assert.IsNull (itemB.ListView, "#F2");
  1456. Assert.AreSame (lvw, itemC.ListView, "#F3");
  1457. Assert.AreSame (lvw, itemD.ListView, "#F4");
  1458. form.Dispose ();
  1459. }
  1460. [Test]
  1461. public void DeleteFromEnumerator () // bug 425342
  1462. {
  1463. ListView lv = new ListView ();
  1464. lv.Items.Add ("A");
  1465. lv.Items.Add ("B");
  1466. lv.Items.Add ("C");
  1467. foreach (ListViewItem lvi in lv.Items)
  1468. if (lvi.Text == "B")
  1469. lv.Items.Remove (lvi);
  1470. Assert.AreEqual (2, lv.Items.Count);
  1471. }
  1472. #if NET_2_0
  1473. [Test]
  1474. public void ListViewItemCollectionTest_RemoveByKey ()
  1475. {
  1476. ListView lvw = new ListView ();
  1477. ListViewItem lvi1 = new ListViewItem ("A");
  1478. lvi1.Name = "A name";
  1479. ListViewItem lvi2 = new ListViewItem ("B");
  1480. lvi2.Name = "B name";
  1481. ListViewItem lvi3 = new ListViewItem ("C");
  1482. lvi3.Name = "Same name";
  1483. ListViewItem lvi4 = new ListViewItem ("D");
  1484. lvi4.Name = "Same name";
  1485. ListViewItem lvi5 = new ListViewItem ("E");
  1486. lvi5.Name = String.Empty;
  1487. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
  1488. Assert.AreEqual (5, lvw.Items.Count, "#A1");
  1489. lvw.Items.RemoveByKey ("B name");
  1490. Assert.AreEqual (4, lvw.Items.Count, "#B1");
  1491. Assert.AreSame (lvi1, lvw.Items [0], "#B2");
  1492. Assert.AreSame (lvi3, lvw.Items [1], "#B3");
  1493. Assert.AreSame (lvi4, lvw.Items [2], "#B4");
  1494. Assert.AreSame (lvi5, lvw.Items [3], "#B5");
  1495. lvw.Items.RemoveByKey ("Same name");
  1496. Assert.AreEqual (3, lvw.Items.Count, "#C1");
  1497. Assert.AreSame (lvi1, lvw.Items [0], "#C2");
  1498. Assert.AreSame (lvi4, lvw.Items [1], "#C3");
  1499. Assert.AreSame (lvi5, lvw.Items [2], "#C4");
  1500. lvw.Items.RemoveByKey ("a NAME");
  1501. Assert.AreEqual (2, lvw.Items.Count, "#D1");
  1502. Assert.AreSame (lvi4, lvw.Items [0], "#D2");
  1503. Assert.AreSame (lvi5, lvw.Items [1], "#D3");
  1504. lvw.Items.RemoveByKey (String.Empty);
  1505. Assert.AreEqual (2, lvw.Items.Count, "#E1");
  1506. Assert.AreSame (lvi4, lvw.Items [0], "#E2");
  1507. Assert.AreSame (lvi5, lvw.Items [1], "#E3");
  1508. Assert.IsNull (lvi1.ListView, "#F1");
  1509. Assert.IsNull (lvi2.ListView, "#F2");
  1510. Assert.IsNull (lvi3.ListView, "#F3");
  1511. Assert.AreSame (lvw, lvi4.ListView, "#F4");
  1512. Assert.AreSame (lvw, lvi5.ListView, "#F5");
  1513. }
  1514. [Test]
  1515. public void ListViewItemCollectionTest_IndexOfKey ()
  1516. {
  1517. ListView lvw = new ListView ();
  1518. ListViewItem lvi1 = new ListViewItem ("A");
  1519. lvi1.Name = "A name";
  1520. ListViewItem lvi2 = new ListViewItem ("B");
  1521. lvi2.Name = "Same name";
  1522. ListViewItem lvi3 = new ListViewItem ("C");
  1523. lvi3.Name = "Same name";
  1524. ListViewItem lvi4 = new ListViewItem ("D");
  1525. lvi4.Name = String.Empty;
  1526. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
  1527. Assert.AreEqual (4, lvw.Items.Count, "#A1");
  1528. Assert.AreEqual (-1, lvw.Items.IndexOfKey (String.Empty), "#A2");
  1529. Assert.AreEqual (-1, lvw.Items.IndexOfKey (null), "#A3");
  1530. Assert.AreEqual (0, lvw.Items.IndexOfKey ("A name"), "#A4");
  1531. Assert.AreEqual (0, lvw.Items.IndexOfKey ("a NAME"), "#A5");
  1532. Assert.AreEqual (1, lvw.Items.IndexOfKey ("Same name"), "#A6");
  1533. ListViewItem lvi5 = new ListViewItem ("E");
  1534. lvw.Items.Add (lvi5);
  1535. lvi5.Name = "E name";
  1536. Assert.AreEqual (4, lvw.Items.IndexOfKey ("E name"), "#B1");
  1537. }
  1538. [Test]
  1539. public void ListViewItemCollectionTest_Indexer ()
  1540. {
  1541. ListView lvw = new ListView ();
  1542. ListViewItem lvi1 = new ListViewItem ("A");
  1543. lvi1.Name = "A name";
  1544. ListViewItem lvi2 = new ListViewItem ("B");
  1545. lvi2.Name = "Same name";
  1546. ListViewItem lvi3 = new ListViewItem ("C");
  1547. lvi3.Name = "Same name";
  1548. ListViewItem lvi4 = new ListViewItem ("D");
  1549. lvi4.Name = String.Empty;
  1550. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
  1551. Assert.AreEqual (4, lvw.Items.Count, "#A1");
  1552. Assert.AreEqual (null, lvw.Items [String.Empty], "#A2");
  1553. Assert.AreEqual (null, lvw.Items [null], "#A3");
  1554. Assert.AreSame (lvi1, lvw.Items ["A name"], "#A4");
  1555. Assert.AreSame (lvi1, lvw.Items ["a NAME"], "#A5");
  1556. Assert.AreSame (lvi2, lvw.Items ["Same name"], "#A6");
  1557. ListViewItem lvi5 = new ListViewItem ("E");
  1558. lvw.Items.Add (lvi5);
  1559. lvi5.Name = "E name";
  1560. Assert.AreSame (lvi5, lvw.Items ["E name"], "#B1");
  1561. }
  1562. [Test]
  1563. public void ListViewItemCollectionTest_ContainsKey ()
  1564. {
  1565. ListView lvw = new ListView();
  1566. ListViewItem lvi1 = new ListViewItem("A");
  1567. lvi1.Name = "A name";
  1568. ListViewItem lvi2 = new ListViewItem("B");
  1569. lvi2.Name = "B name";
  1570. ListViewItem lvi3 = new ListViewItem("D");
  1571. lvi3.Name = String.Empty;
  1572. lvw.Items.AddRange(new ListViewItem[] { lvi1, lvi2, lvi3 });
  1573. Assert.AreEqual(3, lvw.Items.Count, "#A1");
  1574. Assert.AreEqual(false, lvw.Items.ContainsKey (String.Empty), "#A2");
  1575. Assert.AreEqual(false, lvw.Items.ContainsKey (null), "#A3");
  1576. Assert.AreEqual(true, lvw.Items.ContainsKey ("A name"), "#A4");
  1577. Assert.AreEqual(true, lvw.Items.ContainsKey ("a NAME"), "#A5");
  1578. Assert.AreEqual(true, lvw.Items.ContainsKey ("B name"), "#A6");
  1579. ListViewItem lvi5 = new ListViewItem("E");
  1580. lvw.Items.Add(lvi5);
  1581. lvi5.Name = "E name";
  1582. Assert.AreEqual(true, lvw.Items.ContainsKey ("E name"), "#B1");
  1583. }
  1584. [Test]
  1585. public void ListViewItemCollectionTest_Find ()
  1586. {
  1587. ListView lvw = new ListView ();
  1588. ListViewItem lvi1 = new ListViewItem ("A");
  1589. lvi1.Name = "A name";
  1590. ListViewItem lvi2 = new ListViewItem ("B");
  1591. lvi2.Name = "a NAME";
  1592. ListViewItem lvi3 = new ListViewItem ("C");
  1593. lvi3.Name = "a NAME";
  1594. ListViewItem lvi4 = new ListViewItem ("D");
  1595. lvi4.Name = String.Empty;
  1596. ListViewItem lvi5 = new ListViewItem ("F");
  1597. lvi5.Name = String.Empty;
  1598. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
  1599. Assert.AreEqual (5, lvw.Items.Count, "#A1");
  1600. ListViewItem [] items = lvw.Items.Find ("A name", false);
  1601. Assert.AreEqual (3, items.Length, "#B11");
  1602. Assert.AreSame (lvi1, items [0], "#B2");
  1603. Assert.AreSame (lvi2, items [1], "#B3");
  1604. Assert.AreSame (lvi3, items [2], "#B4");
  1605. items = lvw.Items.Find (String.Empty, false);
  1606. Assert.AreEqual (2, items.Length, "#B1");
  1607. Assert.AreSame (lvi4, items [0], "#B2");
  1608. Assert.AreSame (lvi5, items [1], "#B3");
  1609. Assert.AreEqual (0, lvw.Items.Find (null, false).Length, "#C1");
  1610. }
  1611. [Test]
  1612. public void ListViewSubItemCollectionTest_ContainsKey ()
  1613. {
  1614. ListViewItem lvi = new ListViewItem ("A");
  1615. ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
  1616. si1.Name = "A name";
  1617. ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
  1618. si2.Name = "B name";
  1619. ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
  1620. si3.Name = String.Empty;
  1621. lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3 });
  1622. Assert.AreEqual (4, lvi.SubItems.Count, "#A1");
  1623. Assert.AreEqual (false, lvi.SubItems.ContainsKey (String.Empty), "#A2");
  1624. Assert.AreEqual (false, lvi.SubItems.ContainsKey (null), "#A3");
  1625. Assert.AreEqual (true, lvi.SubItems.ContainsKey ("A name"), "#A4");
  1626. Assert.AreEqual (true, lvi.SubItems.ContainsKey ("a NAME"), "#A5");
  1627. Assert.AreEqual (true, lvi.SubItems.ContainsKey ("B name"), "#A6");
  1628. ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
  1629. lvi.SubItems.Add (si5);
  1630. si5.Name = "E name";
  1631. Assert.AreEqual (true, lvi.SubItems.ContainsKey ("E name"), "#B1");
  1632. }
  1633. [Test]
  1634. public void ListViewSubItemCollectionTest_IndexOfKey ()
  1635. {
  1636. ListViewItem lvi = new ListViewItem ();
  1637. ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
  1638. si1.Name = "A name";
  1639. ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
  1640. si2.Name = "Same name";
  1641. ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
  1642. si3.Name = "Same name";
  1643. ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
  1644. si4.Name = String.Empty;
  1645. lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4 });
  1646. Assert.AreEqual (5, lvi.SubItems.Count, "#A1");
  1647. Assert.AreEqual (-1, lvi.SubItems.IndexOfKey (String.Empty), "#A2");
  1648. Assert.AreEqual (-1, lvi.SubItems.IndexOfKey (null), "#A3");
  1649. Assert.AreEqual (1, lvi.SubItems.IndexOfKey ("A name"), "#A4");
  1650. Assert.AreEqual (1, lvi.SubItems.IndexOfKey ("a NAME"), "#A5");
  1651. Assert.AreEqual (2, lvi.SubItems.IndexOfKey ("Same name"), "#A6");
  1652. ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
  1653. lvi.SubItems.Add (si5);
  1654. si5.Name = "E name";
  1655. Assert.AreEqual (5, lvi.SubItems.IndexOfKey ("E name"), "#B1");
  1656. }
  1657. [Test]
  1658. public void ListViewSubItemCollectionTest_RemoveByKey ()
  1659. {
  1660. ListViewItem lvi = new ListViewItem ();
  1661. ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
  1662. si1.Name = "A name";
  1663. ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
  1664. si2.Name = "B name";
  1665. ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
  1666. si3.Name = "Same name";
  1667. ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
  1668. si4.Name = "Same name";
  1669. ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
  1670. si5.Name = String.Empty;
  1671. lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4, si5 });
  1672. Assert.AreEqual (6, lvi.SubItems.Count, "#A1");
  1673. lvi.SubItems.RemoveByKey ("B name");
  1674. Assert.AreEqual (5, lvi.SubItems.Count, "#B1");
  1675. Assert.AreSame (si1, lvi.SubItems [1], "#B2");
  1676. Assert.AreSame (si3, lvi.SubItems [2], "#B3");
  1677. Assert.AreSame (si4, lvi.SubItems [3], "#B4");
  1678. Assert.AreSame (si5, lvi.SubItems [4], "#B5");
  1679. lvi.SubItems.RemoveByKey ("Same name");
  1680. Assert.AreEqual (4, lvi.SubItems.Count, "#C1");
  1681. Assert.AreSame (si1, lvi.SubItems [1], "#C2");
  1682. Assert.AreSame (si4, lvi.SubItems [2], "#C3");
  1683. Assert.AreSame (si5, lvi.SubItems [3], "#C4");
  1684. lvi.SubItems.RemoveByKey ("a NAME");
  1685. Assert.AreEqual (3, lvi.SubItems.Count, "#D1");
  1686. Assert.AreSame (si4, lvi.SubItems [1], "#D2");
  1687. Assert.AreSame (si5, lvi.SubItems [2], "#D3");
  1688. lvi.SubItems.RemoveByKey (String.Empty);
  1689. Assert.AreEqual (3, lvi.SubItems.Count, "#E1");
  1690. Assert.AreSame (si4, lvi.SubItems [1], "#E2");
  1691. Assert.AreSame (si5, lvi.SubItems [2], "#E3");
  1692. }
  1693. [Test]
  1694. public void ListViewSubItemCollectionTest_Indexer ()
  1695. {
  1696. ListViewItem lvi = new ListViewItem ();
  1697. ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
  1698. si1.Name = "A name";
  1699. ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
  1700. si2.Name = "Same name";
  1701. ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
  1702. si3.Name = "Same name";
  1703. ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
  1704. si4.Name = String.Empty;
  1705. lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4 });
  1706. Assert.AreEqual (5, lvi.SubItems.Count, "#A1");
  1707. Assert.AreEqual (null, lvi.SubItems [String.Empty], "#A2");
  1708. Assert.AreEqual (null, lvi.SubItems [null], "#A3");
  1709. Assert.AreEqual (si1, lvi.SubItems ["A name"], "#A4");
  1710. Assert.AreEqual (si1, lvi.SubItems ["a NAME"], "#A5");
  1711. Assert.AreEqual (si2, lvi.SubItems ["Same name"], "#A6");
  1712. ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
  1713. lvi.SubItems.Add (si5);
  1714. si5.Name = "E name";
  1715. Assert.AreEqual (si5, lvi.SubItems ["E name"], "#B1");
  1716. }
  1717. ListViewItem [] items;
  1718. void CreateVirtualItems (int count)
  1719. {
  1720. items = new ListViewItem [count];
  1721. for (int i = 0; i < count; i++)
  1722. items [i] = new ListViewItem ();
  1723. }
  1724. [Test]
  1725. public void ListViewItemCollectionTest_VirtualMode_Exceptions ()
  1726. {
  1727. ListView lvw = new ListView ();
  1728. lvw.VirtualMode = true;
  1729. lvw.VirtualListSize = 1;
  1730. lvw.RetrieveVirtualItem += ListViewRetrieveVirtualItemHandler;
  1731. CreateVirtualItems (1);
  1732. ListViewItem item = items [0];
  1733. item.Name = "A";
  1734. try {
  1735. lvw.Items.Add ("Item 2");
  1736. Assert.Fail ("#A1");
  1737. } catch (InvalidOperationException) {
  1738. }
  1739. try {
  1740. lvw.Items.AddRange (new ListViewItem [0]);
  1741. Assert.Fail ("#A2");
  1742. } catch (InvalidOperationException) {
  1743. }
  1744. try {
  1745. lvw.Items.Insert (0, new ListViewItem ("Item 1"));
  1746. Assert.Fail ("#A3");
  1747. } catch (InvalidOperationException) {
  1748. }
  1749. try {
  1750. lvw.Items.Remove (new ListViewItem ("Item 99"));
  1751. Assert.Fail ("#A4");
  1752. } catch (InvalidOperationException) {
  1753. }
  1754. try {
  1755. lvw.Items.RemoveAt (0);
  1756. Assert.Fail ("#A5");
  1757. } catch (InvalidOperationException) {
  1758. }
  1759. try {
  1760. lvw.Items.RemoveByKey ("A");
  1761. Assert.Fail ("#A6");
  1762. } catch (InvalidOperationException) {
  1763. }
  1764. try {
  1765. lvw.Items.GetEnumerator ();
  1766. Assert.Fail ("#A7");
  1767. } catch (InvalidOperationException) {
  1768. }
  1769. }
  1770. void ListViewRetrieveVirtualItemHandler (object o, RetrieveVirtualItemEventArgs args)
  1771. {
  1772. args.Item = items [args.ItemIndex];
  1773. }
  1774. #endif
  1775. }
  1776. }