ListViewCollectionsTest.cs 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380
  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
  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. // Duplicated elements with same text added
  56. listview.Columns.Add (new ColumnHeader ());
  57. listview.Columns.Add (new ColumnHeader ());
  58. Assert.AreEqual (2, listview.Columns.Count, "ColumnHeaderCollectionTest_AddTest#1");
  59. Assert.AreEqual ("ColumnHeader", listview.Columns[0].Text, "ColumnHeaderCollectionTest_AddTest#2");
  60. }
  61. [Test]
  62. public void ColumnHeaderCollectionTest_ClearTest ()
  63. {
  64. ListView listview = new ListView ();
  65. // Duplicated elements with same text added
  66. listview.Columns.Add (new ColumnHeader ());
  67. listview.Columns.Clear ();
  68. Assert.AreEqual (0, listview.Columns.Count, "ColumnHeaderCollectionTest_ClearTest#1");
  69. }
  70. // Exceptions
  71. [Test, ExpectedException (typeof (ArgumentOutOfRangeException))]
  72. public void ColumnHeaderCollectionTest_GetItem_ExceptionTest ()
  73. {
  74. // Duplicated elements not added
  75. ListView listview = new ListView ();
  76. ColumnHeader item = listview.Columns[5];
  77. Assert.Fail ("#1: " + item.Text); // avoid CS0219 warning
  78. }
  79. /*
  80. CheckedIndexCollection
  81. */
  82. [Test]
  83. public void CheckedIndexCollectionTest_PropertiesTest ()
  84. {
  85. ListView listview = new ListView ();
  86. // Properties
  87. Assert.AreEqual (true, listview.CheckedIndices.IsReadOnly, "CheckedIndexCollectionTest_PropertiesTest#1");
  88. Assert.AreEqual (false, ((ICollection)listview.CheckedIndices).IsSynchronized, "CheckedIndexCollectionTest_PropertiesTest#2");
  89. Assert.AreEqual (listview.CheckedIndices, ((ICollection)listview.CheckedIndices).SyncRoot, "CheckedIndexCollectionTest_PropertiesTest#3");
  90. Assert.AreEqual (true, ((IList)listview.CheckedIndices).IsFixedSize, "CheckedIndexCollectionTest_PropertiesTest#4");
  91. Assert.AreEqual (0, listview.CheckedIndices.Count, "CheckedIndexCollectionTest_PropertiesTest#5");
  92. }
  93. // Exceptions
  94. [Test, ExpectedException (typeof (NotSupportedException))]
  95. public void CheckedIndexCollectionTest_Add_ExceptionTest ()
  96. {
  97. ListView listview = new ListView ();
  98. ((IList)listview.CheckedIndices).Add (5);
  99. }
  100. [Test, ExpectedException (typeof (NotSupportedException))]
  101. public void CheckedIndexCollectionTest_Remove_ExceptionTest ()
  102. {
  103. ListView listview = new ListView ();
  104. ((IList)listview.CheckedIndices).Remove (5);
  105. }
  106. [Test, ExpectedException (typeof (NotSupportedException))]
  107. public void CheckedIndexCollectionTest_RemoveAt_ExceptionTest ()
  108. {
  109. ListView listview = new ListView ();
  110. ((IList)listview.CheckedIndices).RemoveAt (5);
  111. }
  112. /*
  113. CheckedItemCollection
  114. */
  115. [Test]
  116. public void CheckedItemCollectionTest_PropertiesTest ()
  117. {
  118. ListView listview = new ListView ();
  119. // Properties
  120. Assert.AreEqual (true, listview.CheckedItems.IsReadOnly, "CheckedItemCollectionTest_PropertiesTest#1");
  121. Assert.AreEqual (false, ((ICollection)listview.CheckedItems).IsSynchronized, "CheckedItemCollectionTest_PropertiesTest#2");
  122. Assert.AreEqual (listview.CheckedItems, ((ICollection)listview.CheckedItems).SyncRoot, "CheckedItemCollectionTest_PropertiesTest#3");
  123. Assert.AreEqual (true, ((IList)listview.CheckedItems).IsFixedSize, "CheckedItemCollectionTest_PropertiesTest#4");
  124. Assert.AreEqual (0, listview.CheckedItems.Count, "CheckedItemCollectionTest_PropertiesTest#5");
  125. }
  126. // Exceptions
  127. [Test, ExpectedException (typeof (NotSupportedException))]
  128. public void CheckedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
  129. {
  130. ListView listview = new ListView ();
  131. ((IList)listview.CheckedItems).Add (5);
  132. }
  133. [Test]
  134. public void CheckedItemCollectionTest_Order ()
  135. {
  136. Form form = new Form ();
  137. form.ShowInTaskbar = false;
  138. ListView lvw = new ListView ();
  139. lvw.CheckBoxes = true;
  140. form.Controls.Add (lvw);
  141. ListViewItem itemA = lvw.Items.Add ("A");
  142. itemA.Checked = true;
  143. ListViewItem itemB = lvw.Items.Add ("B");
  144. itemB.Checked = true;
  145. ListViewItem itemC = lvw.Items.Add ("C");
  146. itemC.Checked = true;
  147. Assert.AreEqual (3, lvw.CheckedItems.Count, "#A1");
  148. Assert.AreSame (itemA, lvw.CheckedItems [0], "#A2");
  149. Assert.AreSame (itemB, lvw.CheckedItems [1], "#A3");
  150. Assert.AreSame (itemC, lvw.CheckedItems [2], "#A3");
  151. itemB.Checked = false;
  152. Assert.AreEqual (2, lvw.CheckedItems.Count, "#B1");
  153. Assert.AreSame (itemA, lvw.CheckedItems [0], "#B2");
  154. Assert.AreSame (itemC, lvw.CheckedItems [1], "#B3");
  155. itemB.Checked = true;
  156. Assert.AreEqual (3, lvw.CheckedItems.Count, "#C1");
  157. Assert.AreSame (itemA, lvw.CheckedItems [0], "#C2");
  158. Assert.AreSame (itemB, lvw.CheckedItems [1], "#C3");
  159. Assert.AreSame (itemC, lvw.CheckedItems [2], "#C4");
  160. lvw.Sorting = SortOrder.Descending;
  161. Assert.AreEqual (3, lvw.CheckedItems.Count, "#D1");
  162. Assert.AreSame (itemA, lvw.CheckedItems [0], "#D2");
  163. Assert.AreSame (itemB, lvw.CheckedItems [1], "#D3");
  164. Assert.AreSame (itemC, lvw.CheckedItems [2], "#D4");
  165. // sorting only takes effect when listview is created
  166. form.Show ();
  167. Assert.AreEqual (3, lvw.CheckedItems.Count, "#E1");
  168. Assert.AreSame (itemC, lvw.CheckedItems [0], "#E2");
  169. Assert.AreSame (itemB, lvw.CheckedItems [1], "#E3");
  170. Assert.AreSame (itemA, lvw.CheckedItems [2], "#E4");
  171. form.Dispose ();
  172. }
  173. [Test, ExpectedException (typeof (NotSupportedException))]
  174. public void CheckedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
  175. {
  176. ListView listview = new ListView ();
  177. ((IList)listview.CheckedItems).Remove (5);
  178. }
  179. [Test, ExpectedException (typeof (NotSupportedException))]
  180. public void CheckedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
  181. {
  182. ListView listview = new ListView ();
  183. ((IList)listview.CheckedItems).RemoveAt (5);
  184. }
  185. /*
  186. SelectedIndexCollection
  187. */
  188. [Test]
  189. public void SelectedIndexCollectionTest_PropertiesTest ()
  190. {
  191. ListView listview = new ListView ();
  192. // Properties
  193. #if !NET_2_0
  194. Assert.AreEqual (true, listview.SelectedIndices.IsReadOnly, "SelectedIndexCollectionTest_PropertiesTest#1");
  195. Assert.AreEqual (true, ((IList)listview.SelectedIndices).IsFixedSize, "SelectedIndexCollectionTest_PropertiesTest#4");
  196. #else
  197. Assert.AreEqual (false, listview.SelectedIndices.IsReadOnly, "SelectedIndexCollectionTest_PropertiesTest#1");
  198. Assert.AreEqual (false, ((IList)listview.SelectedIndices).IsFixedSize, "SelectedIndexCollectionTest_PropertiesTest#4");
  199. #endif
  200. Assert.AreEqual (false, ((ICollection)listview.SelectedIndices).IsSynchronized, "SelectedIndexCollectionTest_PropertiesTest#2");
  201. Assert.AreEqual (listview.SelectedIndices, ((ICollection)listview.SelectedIndices).SyncRoot, "SelectedIndexCollectionTest_PropertiesTest#3");
  202. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_PropertiesTest#5");
  203. }
  204. #if NET_2_0
  205. [Test]
  206. public void SelectedIndexCollectionTest_AddTest ()
  207. {
  208. ListView listview = new ListView ();
  209. listview.Items.Add ("A");
  210. int n = listview.SelectedIndices.Add (0);
  211. Assert.AreEqual (0, n, "SelectedIndexCollectionTest_AddTest#1");
  212. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#2");
  213. // Force to create the handle
  214. listview.CreateControl ();
  215. Assert.AreEqual (1, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#4");
  216. n = listview.SelectedIndices.Add (0);
  217. Assert.AreEqual (1, n, "SelectedIndexCollectionTest_AddTest#5");
  218. Assert.AreEqual (1, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_AddTest#6");
  219. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_AddTest#7");
  220. }
  221. [Test]
  222. public void SelectedIndexCollectionTest_ClearTest ()
  223. {
  224. ListView listview = new ListView ();
  225. listview.Items.Add ("A");
  226. listview.Items.Add ("B");
  227. listview.Items.Add ("C");
  228. listview.SelectedIndices.Add (0);
  229. listview.SelectedIndices.Add (2);
  230. // Nothing if handle hasn't been created
  231. listview.SelectedIndices.Clear ();
  232. Assert.AreEqual (true, listview.Items [0].Selected, "SelectedIndexCollectionTest_ClearTest#2");
  233. Assert.AreEqual (false, listview.Items [1].Selected, "SelectedIndexCollectionTest_ClearTest#3");
  234. Assert.AreEqual (true, listview.Items [2].Selected, "SelectedIndexCollectionTest_ClearTest#4");
  235. // Force to create the handle
  236. listview.CreateControl ();
  237. listview.SelectedIndices.Add (0);
  238. listview.SelectedIndices.Add (2);
  239. listview.SelectedIndices.Clear ();
  240. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_ClearTest#5");
  241. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_ClearTest#6");
  242. Assert.AreEqual (false, listview.Items [1].Selected, "SelectedIndexCollectionTest_ClearTest#7");
  243. Assert.AreEqual (false, listview.Items [2].Selected, "SelectedIndexCollectionTest_ClearTest#8");
  244. }
  245. [Test]
  246. public void SelectedIndexCollectionTest_RemoveTest ()
  247. {
  248. ListView listview = new ListView ();
  249. listview.Items.Add ("A");
  250. listview.SelectedIndices.Add (0);
  251. listview.SelectedIndices.Remove (0);
  252. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#1");
  253. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#2");
  254. // Force to create the handle
  255. listview.CreateControl ();
  256. listview.SelectedIndices.Add (0);
  257. listview.SelectedIndices.Remove (0);
  258. Assert.AreEqual (0, listview.SelectedIndices.Count, "SelectedIndexCollectionTest_RemoveTest#3");
  259. Assert.AreEqual (false, listview.Items [0].Selected, "SelectedIndexCollectionTest_RemoveTest#4");
  260. }
  261. #endif
  262. // Exceptions
  263. #if !NET_2_0
  264. [Test, ExpectedException (typeof (NotSupportedException))]
  265. public void SelectedIndexCollectionTest_Add_ExceptionTest ()
  266. {
  267. ListView listview = new ListView ();
  268. ((IList)listview.SelectedIndices).Add (5);
  269. }
  270. [Test, ExpectedException (typeof (NotSupportedException))]
  271. public void SelectedIndexCollectionTest_Remove_ExceptionTest ()
  272. {
  273. ListView listview = new ListView ();
  274. ((IList)listview.SelectedIndices).Remove (5);
  275. }
  276. #endif
  277. [Test, ExpectedException (typeof (NotSupportedException))]
  278. public void SelectedIndexCollectionTest_RemoveAt_ExceptionTest ()
  279. {
  280. ListView listview = new ListView ();
  281. ((IList)listview.SelectedIndices).RemoveAt (5);
  282. }
  283. #if NET_2_0
  284. [Test]
  285. public void SelectedIndexCollectionTest_Remove_ExceptionTest ()
  286. {
  287. ListView listview = new ListView ();
  288. try {
  289. listview.SelectedIndices.Remove (-1);
  290. Assert.Fail ("SelectedIndexCollectionTest_Remove_ExceptionTest#1");
  291. } catch (ArgumentOutOfRangeException) {
  292. }
  293. try {
  294. listview.SelectedIndices.Remove (listview.Items.Count);
  295. Assert.Fail ("SelectedIndexCollectionTest_Remove_ExceptionTest#2");
  296. } catch (ArgumentOutOfRangeException) {
  297. }
  298. }
  299. [Test]
  300. public void SelectedIndexCollectionTest_Add_ExceptionTest ()
  301. {
  302. ListView listview = new ListView ();
  303. try {
  304. listview.SelectedIndices.Add (-1);
  305. Assert.Fail ("SelectedIndexCollectionTest_Add_ExceptionTest#1");
  306. } catch (ArgumentOutOfRangeException) {
  307. }
  308. try {
  309. listview.SelectedIndices.Add (listview.Items.Count);
  310. Assert.Fail ("SelectedIndexCollectionTest_Add_ExceptionTest#2");
  311. } catch (ArgumentOutOfRangeException) {
  312. }
  313. }
  314. #endif
  315. /*
  316. SelectedItemCollection
  317. */
  318. [Test]
  319. public void SelectedItemCollectionTest_PropertiesTest ()
  320. {
  321. ListView listview = new ListView ();
  322. // Properties
  323. Assert.AreEqual (true, listview.SelectedItems.IsReadOnly, "SelectedItemCollectionTest_PropertiesTest#1");
  324. Assert.AreEqual (false, ((ICollection)listview.SelectedItems).IsSynchronized, "SelectedItemCollectionTest_PropertiesTest#2");
  325. Assert.AreEqual (listview.SelectedItems, ((ICollection)listview.SelectedItems).SyncRoot, "SelectedItemCollectionTest_PropertiesTest#3");
  326. Assert.AreEqual (true, ((IList)listview.SelectedItems).IsFixedSize, "SelectedItemCollectionTest_PropertiesTest#4");
  327. Assert.AreEqual (0, listview.SelectedItems.Count, "SelectedItemCollectionTest_PropertiesTest#5");
  328. }
  329. // Exceptions
  330. [Test, ExpectedException (typeof (NotSupportedException))]
  331. public void SelectedItemCollectionTest_PropertiesTest_Add_ExceptionTest ()
  332. {
  333. ListView listview = new ListView ();
  334. ((IList)listview.SelectedItems).Add (5);
  335. }
  336. [Test, ExpectedException (typeof (NotSupportedException))]
  337. public void SelectedItemCollectionTest_PropertiesTest_Remove_ExceptionTest ()
  338. {
  339. ListView listview = new ListView ();
  340. ((IList)listview.SelectedItems).Remove (5);
  341. }
  342. [Test, ExpectedException (typeof (NotSupportedException))]
  343. public void SelectedItemCollectionTest_PropertiesTest_RemoveAt_ExceptionTest ()
  344. {
  345. ListView listview = new ListView ();
  346. ((IList)listview.SelectedItems).RemoveAt (5);
  347. }
  348. [Test]
  349. public void SelectedItemCollectionTest_Clear ()
  350. {
  351. Form form = new Form ();
  352. form.ShowInTaskbar = false;
  353. ListView lvw = new ListView ();
  354. form.Controls.Add (lvw);
  355. ListViewItem item = lvw.Items.Add ("Title");
  356. item.Selected = true;
  357. lvw.SelectedItems.Clear ();
  358. Assert.IsTrue (item.Selected, "#A1");
  359. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
  360. Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A3");
  361. form.Show ();
  362. Assert.IsTrue (item.Selected, "#B1");
  363. Assert.AreEqual (1, lvw.SelectedItems.Count, "#B2");
  364. Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B3");
  365. // once listview is created, clear DOES have effect
  366. lvw.SelectedItems.Clear ();
  367. Assert.IsFalse (item.Selected, "#C1");
  368. Assert.AreEqual (0, lvw.SelectedItems.Count, "#C2");
  369. Assert.IsFalse (lvw.SelectedItems.Contains (item), "#C3");
  370. form.Dispose ();
  371. }
  372. [Test]
  373. public void SelectedItemCollectionTest_Contains ()
  374. {
  375. Form form = new Form ();
  376. form.ShowInTaskbar = false;
  377. ListView lvw = new ListView ();
  378. form.Controls.Add (lvw);
  379. ListViewItem item = lvw.Items.Add ("Title");
  380. item.Selected = true;
  381. IList list = (IList) lvw.SelectedItems;
  382. Assert.IsFalse (lvw.SelectedItems.Contains (item), "#A1");
  383. Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#A2");
  384. Assert.IsFalse (list.Contains (item), "#A3");
  385. Assert.IsFalse (list.Contains (new ListViewItem ()), "#A4");
  386. form.Show ();
  387. Assert.IsTrue (lvw.SelectedItems.Contains (item), "#B1");
  388. Assert.IsFalse (lvw.SelectedItems.Contains (new ListViewItem ()), "#B2");
  389. Assert.IsTrue (list.Contains (item), "#B3");
  390. Assert.IsFalse (list.Contains (new ListViewItem ()), "#B4");
  391. form.Dispose ();
  392. }
  393. [Test]
  394. public void SelectedItemCollectionTest_CopyTo ()
  395. {
  396. Form form = new Form ();
  397. form.ShowInTaskbar = false;
  398. ListView lvw = new ListView ();
  399. form.Controls.Add (lvw);
  400. ListViewItem item = lvw.Items.Add ("Title");
  401. item.Selected = true;
  402. IList list = (IList) lvw.SelectedItems;
  403. Assert.IsNotNull (list, "#A1");
  404. ListViewItem [] items = new ListViewItem [1];
  405. lvw.SelectedItems.CopyTo (items, 0);
  406. Assert.IsNull (items [0], "#A2");
  407. lvw.SelectedItems.CopyTo (items, 455);
  408. form.Show ();
  409. lvw.SelectedItems.CopyTo (items, 0);
  410. Assert.AreSame (item, items [0], "#B1");
  411. try {
  412. lvw.SelectedItems.CopyTo (items, 455);
  413. Assert.Fail ("#B2");
  414. } catch (ArgumentException) {
  415. }
  416. form.Dispose ();
  417. }
  418. [Test]
  419. public void SelectedItemCollectionTest_Count ()
  420. {
  421. Form form = new Form ();
  422. form.ShowInTaskbar = false;
  423. ListView lvw = new ListView ();
  424. form.Controls.Add (lvw);
  425. ListViewItem item = lvw.Items.Add ("Title");
  426. item.Selected = true;
  427. Assert.AreEqual (0, lvw.SelectedItems.Count, "#1");
  428. form.Show ();
  429. Assert.AreEqual (1, lvw.SelectedItems.Count, "#2");
  430. form.Dispose ();
  431. }
  432. [Test]
  433. public void SelectedItemCollectionTest_GetEnumerator ()
  434. {
  435. Form form = new Form ();
  436. form.ShowInTaskbar = false;
  437. ListView lvw = new ListView ();
  438. form.Controls.Add (lvw);
  439. ListViewItem item = lvw.Items.Add ("Title");
  440. item.Selected = true;
  441. Assert.IsFalse (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#A1");
  442. form.Show ();
  443. Assert.IsTrue (lvw.SelectedItems.GetEnumerator ().MoveNext (), "#B1");
  444. form.Dispose ();
  445. }
  446. [Test]
  447. public void SelectedItemCollectionTest_Indexer ()
  448. {
  449. Form form = new Form ();
  450. form.ShowInTaskbar = false;
  451. ListView lvw = new ListView ();
  452. form.Controls.Add (lvw);
  453. ListViewItem item = lvw.Items.Add ("Title");
  454. item.Selected = true;
  455. IList list = (IList) lvw.SelectedItems;
  456. try {
  457. ListViewItem x = lvw.SelectedItems [0];
  458. Assert.Fail ("#A1: " + x.ToString ());
  459. } catch (ArgumentOutOfRangeException) {
  460. }
  461. try {
  462. ListViewItem x = list [0] as ListViewItem;
  463. Assert.Fail ("#A2: " + x.ToString ());
  464. } catch (ArgumentOutOfRangeException) {
  465. }
  466. form.Show ();
  467. Assert.AreSame (item, lvw.SelectedItems [0], "#B1");
  468. Assert.AreSame (item, list [0], "#B2");
  469. form.Dispose ();
  470. }
  471. [Test]
  472. public void SelectedItemCollectionTest_IndexOf ()
  473. {
  474. Form form = new Form ();
  475. form.ShowInTaskbar = false;
  476. ListView lvw = new ListView ();
  477. form.Controls.Add (lvw);
  478. ListViewItem item = lvw.Items.Add ("Title");
  479. item.Selected = true;
  480. IList list = (IList) lvw.SelectedItems;
  481. Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (item), "#A1");
  482. Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#A2");
  483. Assert.AreEqual (-1, list.IndexOf (item), "#A3");
  484. Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#A4");
  485. form.Show ();
  486. Assert.AreEqual (0, lvw.SelectedItems.IndexOf (item), "#B1");
  487. Assert.AreEqual (-1, lvw.SelectedItems.IndexOf (new ListViewItem ()), "#B2");
  488. Assert.AreEqual (0, list.IndexOf (item), "#B3");
  489. Assert.AreEqual (-1, list.IndexOf (new ListViewItem ()), "#B4");
  490. form.Dispose ();
  491. }
  492. #if NET_2_0
  493. [Test]
  494. public void SelectedItemCollectionTest_IndexOfKey ()
  495. {
  496. ListView lvw = new ListView ();
  497. ListViewItem lvi1 = new ListViewItem ("A");
  498. lvi1.Name = "A name";
  499. lvi1.Selected = true;
  500. ListViewItem lvi2 = new ListViewItem ("B");
  501. lvi2.Name = "Same name";
  502. lvi2.Selected = false;
  503. ListViewItem lvi3 = new ListViewItem ("C");
  504. lvi3.Name = "Same name";
  505. lvi3.Selected = true;
  506. ListViewItem lvi4 = new ListViewItem ("D");
  507. lvi4.Name = String.Empty;
  508. lvi4.Selected = true;
  509. ListViewItem lvi5 = new ListViewItem ("E");
  510. lvi5.Name = "E name";
  511. lvi5.Selected = false;
  512. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
  513. // Force to create the control
  514. lvw.CreateControl ();
  515. Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
  516. Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey (String.Empty), "#A2");
  517. Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey (null), "#A3");
  518. Assert.AreEqual (0, lvw.SelectedItems.IndexOfKey ("A name"), "#A4");
  519. Assert.AreEqual (0, lvw.SelectedItems.IndexOfKey ("a NAME"), "#A5");
  520. Assert.AreEqual (1, lvw.SelectedItems.IndexOfKey ("Same name"), "#A6");
  521. Assert.AreEqual (-1, lvw.SelectedItems.IndexOfKey ("E name"), "#A7");
  522. ListViewItem lvi6 = new ListViewItem ("F");
  523. lvw.Items.Add (lvi6);
  524. lvi6.Selected = true;
  525. lvi6.Name = "F name";
  526. Assert.AreEqual (4, lvw.SelectedItems.Count, "#B1");
  527. Assert.AreEqual (3, lvw.SelectedItems.IndexOfKey ("F name"), "#B2");
  528. }
  529. [Test]
  530. public void SelectedItemCollectionTest_Indexer2 ()
  531. {
  532. ListView lvw = new ListView ();
  533. ListViewItem lvi1 = new ListViewItem ("A");
  534. lvi1.Name = "A name";
  535. lvi1.Selected = true;
  536. ListViewItem lvi2 = new ListViewItem ("B");
  537. lvi2.Name = "Same name";
  538. lvi2.Selected = false;
  539. ListViewItem lvi3 = new ListViewItem ("C");
  540. lvi3.Name = "Same name";
  541. lvi3.Selected = true;
  542. ListViewItem lvi4 = new ListViewItem ("D");
  543. lvi4.Name = String.Empty;
  544. lvi4.Selected = true;
  545. ListViewItem lvi5 = new ListViewItem ("E");
  546. lvi5.Name = "E name";
  547. lvi5.Selected = false;
  548. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
  549. // Force to create the control
  550. lvw.CreateControl ();
  551. Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
  552. Assert.AreEqual (null, lvw.SelectedItems [String.Empty], "#A2");
  553. Assert.AreEqual (null, lvw.SelectedItems [null], "#A3");
  554. Assert.AreEqual (lvi1, lvw.SelectedItems ["A name"], "#A4");
  555. Assert.AreEqual (lvi1, lvw.SelectedItems ["a NAME"], "#A5");
  556. Assert.AreEqual (lvi3, lvw.SelectedItems ["Same name"], "#A6");
  557. Assert.AreEqual (null, lvw.SelectedItems ["E name"], "#A7");
  558. ListViewItem lvi6 = new ListViewItem ("F");
  559. lvw.Items.Add (lvi6);
  560. lvi6.Selected = true;
  561. lvi6.Name = "F name";
  562. Assert.AreEqual (4, lvw.SelectedItems.Count, "#B1");
  563. Assert.AreEqual (lvi6, lvw.SelectedItems ["F name"], "#B2");
  564. }
  565. #endif
  566. [Test]
  567. public void SelectedItemCollectionTest_Order ()
  568. {
  569. Form form = new Form ();
  570. form.ShowInTaskbar = false;
  571. ListView lvw = new ListView ();
  572. lvw.MultiSelect = true;
  573. form.Controls.Add (lvw);
  574. ListViewItem itemA = lvw.Items.Add ("A");
  575. itemA.Selected = true;
  576. ListViewItem itemB = lvw.Items.Add ("B");
  577. itemB.Selected = true;
  578. ListViewItem itemC = lvw.Items.Add ("C");
  579. itemC.Selected = true;
  580. form.Show ();
  581. Assert.AreEqual (3, lvw.SelectedItems.Count, "#A1");
  582. Assert.AreSame (itemA, lvw.SelectedItems [0], "#A2");
  583. Assert.AreSame (itemB, lvw.SelectedItems [1], "#A3");
  584. Assert.AreSame (itemC, lvw.SelectedItems [2], "#A3");
  585. itemB.Selected = false;
  586. Assert.AreEqual (2, lvw.SelectedItems.Count, "#B1");
  587. Assert.AreSame (itemA, lvw.SelectedItems [0], "#B2");
  588. Assert.AreSame (itemC, lvw.SelectedItems [1], "#B3");
  589. itemB.Selected = true;
  590. Assert.AreEqual (3, lvw.SelectedItems.Count, "#C1");
  591. Assert.AreSame (itemA, lvw.SelectedItems [0], "#C2");
  592. Assert.AreSame (itemB, lvw.SelectedItems [1], "#C3");
  593. Assert.AreSame (itemC, lvw.SelectedItems [2], "#C4");
  594. lvw.Sorting = SortOrder.Descending;
  595. Assert.AreEqual (3, lvw.SelectedItems.Count, "#D1");
  596. Assert.AreSame (itemC, lvw.SelectedItems [0], "#D2");
  597. Assert.AreSame (itemB, lvw.SelectedItems [1], "#D3");
  598. Assert.AreSame (itemA, lvw.SelectedItems [2], "#D4");
  599. form.Dispose ();
  600. }
  601. /*
  602. ListViewItemCollection
  603. */
  604. [Test]
  605. public void ListViewItemCollectionTest_Add ()
  606. {
  607. ListView lvw = new ListView ();
  608. ListViewItem item = new ListViewItem ("Title");
  609. ListViewItem newItem = lvw.Items.Add (item);
  610. Assert.AreSame (newItem, item, "#A1");
  611. Assert.AreEqual (0, item.Index, "#A2");
  612. Assert.AreSame (item, lvw.Items [0], "#A3");
  613. Assert.AreSame (lvw, item.ListView, "#A4");
  614. newItem = lvw.Items.Add ("A title");
  615. Assert.AreEqual ("A title", newItem.Text, "#B1");
  616. Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
  617. Assert.AreEqual (1, newItem.Index, "#B3");
  618. Assert.AreSame (newItem, lvw.Items [1], "#B4");
  619. Assert.AreSame (lvw, newItem.ListView, "#B5");
  620. Assert.AreEqual (0, item.Index, "#B6");
  621. Assert.AreSame (item, lvw.Items [0], "#B7");
  622. newItem = lvw.Items.Add ("A title", 4);
  623. Assert.AreEqual ("A title", newItem.Text, "#C1");
  624. Assert.AreEqual (4, newItem.ImageIndex, "#C2");
  625. Assert.AreEqual (2, newItem.Index, "#C3");
  626. Assert.AreSame (newItem, lvw.Items [2], "#C4");
  627. Assert.AreSame (lvw, newItem.ListView, "#C5");
  628. Assert.AreEqual (0, item.Index, "#C6");
  629. Assert.AreSame (item, lvw.Items [0], "#C7");
  630. }
  631. [Test]
  632. [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
  633. public void ListViewItemCollectionTest_Add_ExistingItem ()
  634. {
  635. ListView lvw = new ListView ();
  636. ListViewItem itemA = lvw.Items.Add ("A");
  637. lvw.Items.Add (itemA);
  638. }
  639. [Test]
  640. [ExpectedException (typeof (ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
  641. public void ListViewItemCollectionTest_Add_OwnedItem ()
  642. {
  643. ListView lv1 = new ListView ();
  644. ListView lv2 = new ListView ();
  645. ListViewItem item = lv1.Items.Add ("A");
  646. lv2.Items.Add (item);
  647. }
  648. [Test]
  649. public void ListViewItemCollectionTest_Add_Junk ()
  650. {
  651. ListView lv1 = new ListView ();
  652. ListViewItem item4 = lv1.Items.Add("Item4", 4);
  653. Assert.AreEqual(item4, lv1.Items[0], "#D1");
  654. #if NET_2_0
  655. Assert.AreEqual(string.Empty, lv1.Items[0].Name, "#D2");
  656. #endif
  657. Assert.AreEqual("Item4", lv1.Items[0].Text, "#D3");
  658. Assert.AreEqual(4, lv1.Items[0].ImageIndex, "#D4");
  659. string text = null;
  660. ListViewItem item5 = lv1.Items.Add(text);
  661. Assert.AreEqual(item5, lv1.Items[1], "#E1");
  662. #if NET_2_0
  663. Assert.AreEqual(string.Empty, lv1.Items[1].Name, "#E2");
  664. #endif
  665. Assert.AreEqual(string.Empty, lv1.Items[1].Text, "#E3");
  666. ListViewItem item6 = lv1.Items.Add(null, 5);
  667. Assert.AreEqual(item6, lv1.Items[2], "#F1");
  668. #if NET_2_0
  669. Assert.AreEqual(string.Empty, lv1.Items[2].Name, "#F2");
  670. #endif
  671. Assert.AreEqual(string.Empty, lv1.Items[2].Text, "#F3");
  672. Assert.AreEqual(5, lv1.Items[2].ImageIndex, "#F4");
  673. #if NET_2_0
  674. ListViewItem item1 = lv1.Items.Add("ItemKey1", "Item1", 1);
  675. Assert.AreEqual(item1, lv1.Items[3], "#A1");
  676. Assert.AreEqual("ItemKey1", lv1.Items[3].Name, "#A2");
  677. Assert.AreEqual("Item1", lv1.Items[3].Text, "#A3");
  678. Assert.AreEqual(1, lv1.Items[3].ImageIndex, "#A4");
  679. ListViewItem item2 = lv1.Items.Add("ItemKey2", "Item2", "Image2");
  680. Assert.AreEqual(item2, lv1.Items[4], "#B1");
  681. Assert.AreEqual("ItemKey2", lv1.Items[4].Name, "#B2");
  682. Assert.AreEqual("Item2", lv1.Items[4].Text, "#B3");
  683. Assert.AreEqual("Image2", lv1.Items[4].ImageKey, "#B4");
  684. ListViewItem item3 = lv1.Items.Add("Item3", "Image3");
  685. Assert.AreEqual(item3, lv1.Items[5], "#C1");
  686. Assert.AreEqual(string.Empty, lv1.Items[5].Name, "#C2");
  687. Assert.AreEqual("Item3", lv1.Items[5].Text, "#C3");
  688. Assert.AreEqual("Image3", lv1.Items[5].ImageKey, "#C4");
  689. ListViewItem item7 = lv1.Items.Add(null, "Item6", 6);
  690. Assert.AreEqual(item7, lv1.Items[6], "#G1");
  691. Assert.AreEqual(string.Empty, lv1.Items[6].Name, "#G2");
  692. Assert.AreEqual("Item6", lv1.Items[6].Text, "#G3");
  693. Assert.AreEqual(6, lv1.Items[6].ImageIndex, "#G4");
  694. ListViewItem item8 = lv1.Items.Add("ItemKey7", null, 7);
  695. Assert.AreEqual(item8, lv1.Items[7], "#H1");
  696. Assert.AreEqual("ItemKey7", lv1.Items[7].Name, "#H2");
  697. Assert.AreEqual(string.Empty, lv1.Items[7].Text, "#H3");
  698. Assert.AreEqual(7, lv1.Items[7].ImageIndex, "#H4");
  699. ListViewItem item9 = lv1.Items.Add("ItemKey8", "Item8", null);
  700. Assert.AreEqual(item9, lv1.Items[8], "#I1");
  701. Assert.AreEqual("ItemKey8", lv1.Items[8].Name, "#I2");
  702. Assert.AreEqual("Item8", lv1.Items[8].Text, "#I3");
  703. Assert.AreEqual(string.Empty, lv1.Items[8].ImageKey, "#I4");
  704. #endif
  705. }
  706. [Test]
  707. public void ListViewItemCollectionTest_AddRange ()
  708. {
  709. ListView lv1 = new ListView ();
  710. ListViewItem item1 = new ListViewItem ("Item1");
  711. ListViewItem item2 = new ListViewItem ("Item2");
  712. ListViewItem item3 = new ListViewItem ("Item3");
  713. lv1.Items.AddRange (new ListViewItem[] { item1, item2, item3 });
  714. Assert.AreSame (item1, lv1.Items[0], "#A1");
  715. Assert.AreEqual (0, item1.Index, "#A2");
  716. Assert.AreSame (lv1, item1.ListView, "#A3");
  717. Assert.AreSame (item2, lv1.Items[1], "#B1");
  718. Assert.AreEqual (1, item2.Index, "#B2");
  719. Assert.AreSame (lv1, item2.ListView, "#B3");
  720. Assert.AreSame (item3, lv1.Items[2], "#C1");
  721. Assert.AreEqual (2, item3.Index, "#C2");
  722. Assert.AreSame (lv1, item3.ListView, "#C3");
  723. }
  724. [Test]
  725. public void ListViewItemCollectionTest_AddRange_Count ()
  726. {
  727. ListView lv1 = new ListView ();
  728. ListViewItem item1 = new ListViewItem ("Item1");
  729. ListViewItem item2 = new ListViewItem ("Item2");
  730. ListViewItem item3 = new ListViewItem ("Item3");
  731. lv1.Items.Add ("Item4");
  732. Assert.AreEqual (1, lv1.Items.Count, "#A1");
  733. lv1.Items.AddRange (new ListViewItem[] { item1, item2, item3 });
  734. Assert.AreEqual (4, lv1.Items.Count, "#A1");
  735. }
  736. [Test]
  737. [ExpectedException(typeof(ArgumentNullException))]
  738. public void ListViewItemCollectionTest_AddRange_NullException ()
  739. {
  740. ListView lv1 = new ListView ();
  741. ListViewItem[] value = null;
  742. lv1.Items.AddRange (value);
  743. }
  744. [Test]
  745. [ExpectedException(typeof(ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
  746. public void ListViewItemCollectionTest_AddRange_OwnedItem ()
  747. {
  748. //MSDN told us, we can use this method to reuse items from a different ListView control. That is not true.
  749. ListView lv1 = new ListView ();
  750. ListView lv2 = new ListView ();
  751. ListViewItem a = lv1.Items.Add ("Item1");
  752. ListViewItem b = lv1.Items.Add ("Item2");
  753. lv2.Items.AddRange (new ListViewItem[] { a, b });
  754. }
  755. [Test]
  756. [ExpectedException(typeof(ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
  757. public void ListViewItemCollectionTest_AddRange_ExistingItem ()
  758. {
  759. ListView lv1 = new ListView ();
  760. ListViewItem item1 = lv1.Items.Add ("Item1");
  761. lv1.Items.Add (item1);
  762. }
  763. [Test]
  764. public void ListViewItemCollectionTest_Insert ()
  765. {
  766. ListView lvw = new ListView ();
  767. ListViewItem item = new ListViewItem ("Title");
  768. ListViewItem newItem = lvw.Items.Insert (0, item);
  769. Assert.AreSame (newItem, item, "#A1");
  770. Assert.AreEqual (-1, newItem.ImageIndex, "#A2");
  771. Assert.AreSame (newItem, lvw.Items [0], "#A3");
  772. Assert.AreSame (lvw, newItem.ListView, "#A4");
  773. newItem = lvw.Items.Insert (1, "A title");
  774. Assert.AreEqual ("A title", newItem.Text, "#B1");
  775. Assert.AreEqual (-1, newItem.ImageIndex, "#B2");
  776. Assert.AreEqual (1, newItem.Index, "#B3");
  777. Assert.AreSame (newItem, lvw.Items [1], "#B4");
  778. Assert.AreSame (lvw, newItem.ListView, "#B5");
  779. Assert.AreEqual (0, item.Index, "#B6");
  780. Assert.AreSame (item, lvw.Items [0], "#B7");
  781. newItem = lvw.Items.Insert (0, "Other title");
  782. Assert.AreEqual ("Other title", newItem.Text, "#C1");
  783. Assert.AreEqual (-1, newItem.ImageIndex, "#C2");
  784. Assert.AreEqual (0, newItem.Index, "#C3");
  785. Assert.AreSame (newItem, lvw.Items [0], "#C4");
  786. Assert.AreSame (lvw, newItem.ListView, "#C5");
  787. Assert.AreEqual (1, item.Index, "#C6");
  788. Assert.AreSame (item, lvw.Items [1], "#C7");
  789. newItem = lvw.Items.Insert (3, "Some title", 4);
  790. Assert.AreEqual ("Some title", newItem.Text, "#D1");
  791. Assert.AreEqual (4, newItem.ImageIndex, "#D2");
  792. Assert.AreEqual (3, newItem.Index, "#D3");
  793. Assert.AreSame (newItem, lvw.Items [3], "#D4");
  794. Assert.AreSame (lvw, newItem.ListView, "#D5");
  795. Assert.AreEqual (1, item.Index, "#D6");
  796. Assert.AreSame (item, lvw.Items [1], "#D7");
  797. newItem = lvw.Items.Insert (0, "No title", 4);
  798. Assert.AreEqual ("No title", newItem.Text, "#E1");
  799. Assert.AreEqual (4, newItem.ImageIndex, "#E2");
  800. Assert.AreEqual (0, newItem.Index, "#E3");
  801. Assert.AreSame (newItem, lvw.Items [0], "#E4");
  802. Assert.AreSame (lvw, newItem.ListView, "#E5");
  803. Assert.AreEqual (2, item.Index, "#E6");
  804. Assert.AreSame (item, lvw.Items [2], "#E7");
  805. }
  806. [Test]
  807. [ExpectedException (typeof (ArgumentException))] // An item cannot be added more than once. To add an item again, you need to clone it
  808. public void ListViewItemCollectionTest_Insert_ExistingItem ()
  809. {
  810. ListView lvw = new ListView ();
  811. ListViewItem itemA = lvw.Items.Add ("A");
  812. lvw.Items.Insert (0, itemA);
  813. }
  814. [Test]
  815. [ExpectedException (typeof (ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
  816. public void ListViewItemCollectionTest_Insert_OwnedItem ()
  817. {
  818. ListView lv1 = new ListView ();
  819. ListView lv2 = new ListView ();
  820. ListViewItem item = lv1.Items.Add ("A");
  821. lv2.Items.Insert (0, item);
  822. }
  823. [Test]
  824. [ExpectedException(typeof(ArgumentException))] // An item cannot be added to more than one ListView. To add an item again, you need to clone it
  825. public void ListViewItemCollectionTest_Indexer_OwnedItem ()
  826. {
  827. ListView lv1 = new ListView ();
  828. ListView lv2 = new ListView ();
  829. ListViewItem item = lv1.Items.Add ("A");
  830. lv2.Items.Add ("Dummy");
  831. lv2.Items[0] = item;
  832. }
  833. [Test]
  834. public void ListViewItemCollectionTest_Remove ()
  835. {
  836. Form form = new Form ();
  837. form.ShowInTaskbar = false;
  838. ListView lvw = new ListView ();
  839. form.Controls.Add (lvw);
  840. lvw.MultiSelect = true;
  841. lvw.CheckBoxes = true;
  842. form.Show ();
  843. ListViewItem itemA = lvw.Items.Add ("A");
  844. ListViewItem itemB = lvw.Items.Add ("B");
  845. lvw.Items.Add ("C");
  846. ListViewItem itemD = lvw.Items.Add ("D");
  847. Assert.AreEqual (4, lvw.Items.Count, "#A1");
  848. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
  849. Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
  850. itemB.Checked = true;
  851. itemD.Checked = true;
  852. Assert.AreEqual (4, lvw.Items.Count, "#B1");
  853. Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
  854. Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
  855. Assert.AreSame (itemB, lvw.CheckedItems [0], "#B4");
  856. Assert.AreSame (itemD, lvw.CheckedItems [1], "#B5");
  857. itemD.Selected = true;
  858. Assert.AreEqual (4, lvw.Items.Count, "#C1");
  859. Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
  860. Assert.AreSame (itemD, lvw.SelectedItems [0], "#C3");
  861. Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
  862. Assert.AreSame (itemB, lvw.CheckedItems [0], "#C5");
  863. Assert.AreSame (itemD, lvw.CheckedItems [1], "#C6");
  864. lvw.Items.Remove (itemB);
  865. Assert.AreEqual (3, lvw.Items.Count, "#D1");
  866. Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
  867. Assert.AreSame (itemD, lvw.SelectedItems [0], "#D3");
  868. Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
  869. Assert.AreSame (itemD, lvw.CheckedItems [0], "#D5");
  870. lvw.Items.Remove (itemA);
  871. Assert.AreEqual (2, lvw.Items.Count, "#E1");
  872. Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
  873. Assert.AreEqual (itemD, lvw.SelectedItems [0], "#E3");
  874. Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
  875. Assert.AreEqual (itemD, lvw.CheckedItems [0], "#E5");
  876. form.Dispose ();
  877. }
  878. [Test]
  879. public void ListViewItemCollectionTest_RemoveAt ()
  880. {
  881. Form form = new Form ();
  882. form.ShowInTaskbar = false;
  883. ListView lvw = new ListView ();
  884. form.Controls.Add (lvw);
  885. lvw.MultiSelect = true;
  886. lvw.CheckBoxes = true;
  887. lvw.Items.Add ("A");
  888. lvw.Items.Add ("B");
  889. lvw.Items.Add ("C");
  890. lvw.Items.Add ("D");
  891. form.Show ();
  892. Assert.AreEqual (4, lvw.Items.Count, "#A1");
  893. Assert.AreEqual (0, lvw.SelectedItems.Count, "#A2");
  894. Assert.AreEqual (0, lvw.CheckedItems.Count, "#A3");
  895. lvw.Items [1].Checked = true;
  896. lvw.Items [3].Checked = true;
  897. Assert.AreEqual (4, lvw.Items.Count, "#B1");
  898. Assert.AreEqual (0, lvw.SelectedItems.Count, "#B2");
  899. Assert.AreEqual (2, lvw.CheckedItems.Count, "#B3");
  900. Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#B4");
  901. Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#B5");
  902. lvw.Items [3].Selected = true;
  903. Assert.AreEqual (4, lvw.Items.Count, "#C1");
  904. Assert.AreEqual (1, lvw.SelectedItems.Count, "#C2");
  905. Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#C3");
  906. Assert.AreEqual (2, lvw.CheckedItems.Count, "#C4");
  907. Assert.AreEqual ("B", lvw.CheckedItems [0].Text, "#C5");
  908. Assert.AreEqual ("D", lvw.CheckedItems [1].Text, "#C6");
  909. lvw.Items.RemoveAt (1);
  910. Assert.AreEqual (3, lvw.Items.Count, "#D1");
  911. Assert.AreEqual (1, lvw.SelectedItems.Count, "#D2");
  912. Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#D3");
  913. Assert.AreEqual (1, lvw.CheckedItems.Count, "#D4");
  914. Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#D5");
  915. lvw.Items.RemoveAt (0);
  916. Assert.AreEqual (2, lvw.Items.Count, "#E1");
  917. Assert.AreEqual (1, lvw.SelectedItems.Count, "#E2");
  918. Assert.AreEqual ("D", lvw.SelectedItems [0].Text, "#E3");
  919. Assert.AreEqual (1, lvw.CheckedItems.Count, "#E4");
  920. Assert.AreEqual ("D", lvw.CheckedItems [0].Text, "#E5");
  921. form.Dispose ();
  922. }
  923. #if NET_2_0
  924. [Test]
  925. public void ListViewItemCollectionTest_RemoveByKey ()
  926. {
  927. ListView lvw = new ListView ();
  928. ListViewItem lvi1 = new ListViewItem ("A");
  929. lvi1.Name = "A name";
  930. ListViewItem lvi2 = new ListViewItem ("B");
  931. lvi2.Name = "B name";
  932. ListViewItem lvi3 = new ListViewItem ("C");
  933. lvi3.Name = "Same name";
  934. ListViewItem lvi4 = new ListViewItem ("D");
  935. lvi4.Name = "Same name";
  936. ListViewItem lvi5 = new ListViewItem ("E");
  937. lvi5.Name = String.Empty;
  938. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
  939. Assert.AreEqual (5, lvw.Items.Count, "#A1");
  940. lvw.Items.RemoveByKey ("B name");
  941. Assert.AreEqual (4, lvw.Items.Count, "#B1");
  942. Assert.AreSame (lvi1, lvw.Items [0], "#B2");
  943. Assert.AreSame (lvi3, lvw.Items [1], "#B3");
  944. Assert.AreSame (lvi4, lvw.Items [2], "#B4");
  945. Assert.AreSame (lvi5, lvw.Items [3], "#B5");
  946. lvw.Items.RemoveByKey ("Same name");
  947. Assert.AreEqual (3, lvw.Items.Count, "#C1");
  948. Assert.AreSame (lvi1, lvw.Items [0], "#C2");
  949. Assert.AreSame (lvi4, lvw.Items [1], "#C3");
  950. Assert.AreSame (lvi5, lvw.Items [2], "#C4");
  951. lvw.Items.RemoveByKey ("a NAME");
  952. Assert.AreEqual (2, lvw.Items.Count, "#D1");
  953. Assert.AreSame (lvi4, lvw.Items [0], "#D2");
  954. Assert.AreSame (lvi5, lvw.Items [1], "#D3");
  955. lvw.Items.RemoveByKey (String.Empty);
  956. Assert.AreEqual (2, lvw.Items.Count, "#E1");
  957. Assert.AreSame (lvi4, lvw.Items [0], "#E2");
  958. Assert.AreSame (lvi5, lvw.Items [1], "#E3");
  959. }
  960. [Test]
  961. public void ListViewItemCollectionTest_IndexOfKey ()
  962. {
  963. ListView lvw = new ListView ();
  964. ListViewItem lvi1 = new ListViewItem ("A");
  965. lvi1.Name = "A name";
  966. ListViewItem lvi2 = new ListViewItem ("B");
  967. lvi2.Name = "Same name";
  968. ListViewItem lvi3 = new ListViewItem ("C");
  969. lvi3.Name = "Same name";
  970. ListViewItem lvi4 = new ListViewItem ("D");
  971. lvi4.Name = String.Empty;
  972. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
  973. Assert.AreEqual (4, lvw.Items.Count, "#A1");
  974. Assert.AreEqual (-1, lvw.Items.IndexOfKey (String.Empty), "#A2");
  975. Assert.AreEqual (-1, lvw.Items.IndexOfKey (null), "#A3");
  976. Assert.AreEqual (0, lvw.Items.IndexOfKey ("A name"), "#A4");
  977. Assert.AreEqual (0, lvw.Items.IndexOfKey ("a NAME"), "#A5");
  978. Assert.AreEqual (1, lvw.Items.IndexOfKey ("Same name"), "#A6");
  979. ListViewItem lvi5 = new ListViewItem ("E");
  980. lvw.Items.Add (lvi5);
  981. lvi5.Name = "E name";
  982. Assert.AreEqual (4, lvw.Items.IndexOfKey ("E name"), "#B1");
  983. }
  984. [Test]
  985. public void ListViewItemCollectionTest_Indexer ()
  986. {
  987. ListView lvw = new ListView ();
  988. ListViewItem lvi1 = new ListViewItem ("A");
  989. lvi1.Name = "A name";
  990. ListViewItem lvi2 = new ListViewItem ("B");
  991. lvi2.Name = "Same name";
  992. ListViewItem lvi3 = new ListViewItem ("C");
  993. lvi3.Name = "Same name";
  994. ListViewItem lvi4 = new ListViewItem ("D");
  995. lvi4.Name = String.Empty;
  996. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4 });
  997. Assert.AreEqual (4, lvw.Items.Count, "#A1");
  998. Assert.AreEqual (null, lvw.Items [String.Empty], "#A2");
  999. Assert.AreEqual (null, lvw.Items [null], "#A3");
  1000. Assert.AreSame (lvi1, lvw.Items ["A name"], "#A4");
  1001. Assert.AreSame (lvi1, lvw.Items ["a NAME"], "#A5");
  1002. Assert.AreSame (lvi2, lvw.Items ["Same name"], "#A6");
  1003. ListViewItem lvi5 = new ListViewItem ("E");
  1004. lvw.Items.Add (lvi5);
  1005. lvi5.Name = "E name";
  1006. Assert.AreSame (lvi5, lvw.Items ["E name"], "#B1");
  1007. }
  1008. [Test]
  1009. public void ListViewItemCollectionTest_ContainsKey ()
  1010. {
  1011. ListView lvw = new ListView();
  1012. ListViewItem lvi1 = new ListViewItem("A");
  1013. lvi1.Name = "A name";
  1014. ListViewItem lvi2 = new ListViewItem("B");
  1015. lvi2.Name = "B name";
  1016. ListViewItem lvi3 = new ListViewItem("D");
  1017. lvi3.Name = String.Empty;
  1018. lvw.Items.AddRange(new ListViewItem[] { lvi1, lvi2, lvi3 });
  1019. Assert.AreEqual(3, lvw.Items.Count, "#A1");
  1020. Assert.AreEqual(false, lvw.Items.ContainsKey (String.Empty), "#A2");
  1021. Assert.AreEqual(false, lvw.Items.ContainsKey (null), "#A3");
  1022. Assert.AreEqual(true, lvw.Items.ContainsKey ("A name"), "#A4");
  1023. Assert.AreEqual(true, lvw.Items.ContainsKey ("a NAME"), "#A5");
  1024. Assert.AreEqual(true, lvw.Items.ContainsKey ("B name"), "#A6");
  1025. ListViewItem lvi5 = new ListViewItem("E");
  1026. lvw.Items.Add(lvi5);
  1027. lvi5.Name = "E name";
  1028. Assert.AreEqual(true, lvw.Items.ContainsKey ("E name"), "#B1");
  1029. }
  1030. [Test]
  1031. public void ListViewItemCollectionTest_Find ()
  1032. {
  1033. ListView lvw = new ListView ();
  1034. ListViewItem lvi1 = new ListViewItem ("A");
  1035. lvi1.Name = "A name";
  1036. ListViewItem lvi2 = new ListViewItem ("B");
  1037. lvi2.Name = "a NAME";
  1038. ListViewItem lvi3 = new ListViewItem ("C");
  1039. lvi3.Name = "a NAME";
  1040. ListViewItem lvi4 = new ListViewItem ("D");
  1041. lvi4.Name = String.Empty;
  1042. ListViewItem lvi5 = new ListViewItem ("F");
  1043. lvi5.Name = String.Empty;
  1044. lvw.Items.AddRange (new ListViewItem [] { lvi1, lvi2, lvi3, lvi4, lvi5 });
  1045. Assert.AreEqual (5, lvw.Items.Count, "#A1");
  1046. ListViewItem [] items = lvw.Items.Find ("A name", false);
  1047. Assert.AreEqual (3, items.Length, "#B11");
  1048. Assert.AreSame (lvi1, items [0], "#B2");
  1049. Assert.AreSame (lvi2, items [1], "#B3");
  1050. Assert.AreSame (lvi3, items [2], "#B4");
  1051. items = lvw.Items.Find (String.Empty, false);
  1052. Assert.AreEqual (2, items.Length, "#B1");
  1053. Assert.AreSame (lvi4, items [0], "#B2");
  1054. Assert.AreSame (lvi5, items [1], "#B3");
  1055. Assert.AreEqual (0, lvw.Items.Find (null, false).Length, "#C1");
  1056. }
  1057. [Test]
  1058. public void ListViewSubItemCollectionTest_ContainsKey ()
  1059. {
  1060. ListViewItem lvi = new ListViewItem ("A");
  1061. ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
  1062. si1.Name = "A name";
  1063. ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
  1064. si2.Name = "B name";
  1065. ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
  1066. si3.Name = String.Empty;
  1067. lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3 });
  1068. Assert.AreEqual (4, lvi.SubItems.Count, "#A1");
  1069. Assert.AreEqual (false, lvi.SubItems.ContainsKey (String.Empty), "#A2");
  1070. Assert.AreEqual (false, lvi.SubItems.ContainsKey (null), "#A3");
  1071. Assert.AreEqual (true, lvi.SubItems.ContainsKey ("A name"), "#A4");
  1072. Assert.AreEqual (true, lvi.SubItems.ContainsKey ("a NAME"), "#A5");
  1073. Assert.AreEqual (true, lvi.SubItems.ContainsKey ("B name"), "#A6");
  1074. ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
  1075. lvi.SubItems.Add (si5);
  1076. si5.Name = "E name";
  1077. Assert.AreEqual (true, lvi.SubItems.ContainsKey ("E name"), "#B1");
  1078. }
  1079. [Test]
  1080. public void ListViewSubItemCollectionTest_IndexOfKey ()
  1081. {
  1082. ListViewItem lvi = new ListViewItem ();
  1083. ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
  1084. si1.Name = "A name";
  1085. ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
  1086. si2.Name = "Same name";
  1087. ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
  1088. si3.Name = "Same name";
  1089. ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
  1090. si4.Name = String.Empty;
  1091. lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4 });
  1092. Assert.AreEqual (5, lvi.SubItems.Count, "#A1");
  1093. Assert.AreEqual (-1, lvi.SubItems.IndexOfKey (String.Empty), "#A2");
  1094. Assert.AreEqual (-1, lvi.SubItems.IndexOfKey (null), "#A3");
  1095. Assert.AreEqual (1, lvi.SubItems.IndexOfKey ("A name"), "#A4");
  1096. Assert.AreEqual (1, lvi.SubItems.IndexOfKey ("a NAME"), "#A5");
  1097. Assert.AreEqual (2, lvi.SubItems.IndexOfKey ("Same name"), "#A6");
  1098. ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
  1099. lvi.SubItems.Add (si5);
  1100. si5.Name = "E name";
  1101. Assert.AreEqual (5, lvi.SubItems.IndexOfKey ("E name"), "#B1");
  1102. }
  1103. [Test]
  1104. public void ListViewSubItemCollectionTest_RemoveByKey ()
  1105. {
  1106. ListViewItem lvi = new ListViewItem ();
  1107. ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
  1108. si1.Name = "A name";
  1109. ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
  1110. si2.Name = "B name";
  1111. ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
  1112. si3.Name = "Same name";
  1113. ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
  1114. si4.Name = "Same name";
  1115. ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
  1116. si5.Name = String.Empty;
  1117. lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4, si5 });
  1118. Assert.AreEqual (6, lvi.SubItems.Count, "#A1");
  1119. lvi.SubItems.RemoveByKey ("B name");
  1120. Assert.AreEqual (5, lvi.SubItems.Count, "#B1");
  1121. Assert.AreSame (si1, lvi.SubItems [1], "#B2");
  1122. Assert.AreSame (si3, lvi.SubItems [2], "#B3");
  1123. Assert.AreSame (si4, lvi.SubItems [3], "#B4");
  1124. Assert.AreSame (si5, lvi.SubItems [4], "#B5");
  1125. lvi.SubItems.RemoveByKey ("Same name");
  1126. Assert.AreEqual (4, lvi.SubItems.Count, "#C1");
  1127. Assert.AreSame (si1, lvi.SubItems [1], "#C2");
  1128. Assert.AreSame (si4, lvi.SubItems [2], "#C3");
  1129. Assert.AreSame (si5, lvi.SubItems [3], "#C4");
  1130. lvi.SubItems.RemoveByKey ("a NAME");
  1131. Assert.AreEqual (3, lvi.SubItems.Count, "#D1");
  1132. Assert.AreSame (si4, lvi.SubItems [1], "#D2");
  1133. Assert.AreSame (si5, lvi.SubItems [2], "#D3");
  1134. lvi.SubItems.RemoveByKey (String.Empty);
  1135. Assert.AreEqual (3, lvi.SubItems.Count, "#E1");
  1136. Assert.AreSame (si4, lvi.SubItems [1], "#E2");
  1137. Assert.AreSame (si5, lvi.SubItems [2], "#E3");
  1138. }
  1139. [Test]
  1140. public void ListViewSubItemCollectionTest_Indexer ()
  1141. {
  1142. ListViewItem lvi = new ListViewItem ();
  1143. ListViewItem.ListViewSubItem si1 = new ListViewItem.ListViewSubItem ();
  1144. si1.Name = "A name";
  1145. ListViewItem.ListViewSubItem si2 = new ListViewItem.ListViewSubItem ();
  1146. si2.Name = "Same name";
  1147. ListViewItem.ListViewSubItem si3 = new ListViewItem.ListViewSubItem ();
  1148. si3.Name = "Same name";
  1149. ListViewItem.ListViewSubItem si4 = new ListViewItem.ListViewSubItem ();
  1150. si4.Name = String.Empty;
  1151. lvi.SubItems.AddRange (new ListViewItem.ListViewSubItem [] { si1, si2, si3, si4 });
  1152. Assert.AreEqual (5, lvi.SubItems.Count, "#A1");
  1153. Assert.AreEqual (null, lvi.SubItems [String.Empty], "#A2");
  1154. Assert.AreEqual (null, lvi.SubItems [null], "#A3");
  1155. Assert.AreEqual (si1, lvi.SubItems ["A name"], "#A4");
  1156. Assert.AreEqual (si1, lvi.SubItems ["a NAME"], "#A5");
  1157. Assert.AreEqual (si2, lvi.SubItems ["Same name"], "#A6");
  1158. ListViewItem.ListViewSubItem si5 = new ListViewItem.ListViewSubItem ();
  1159. lvi.SubItems.Add (si5);
  1160. si5.Name = "E name";
  1161. Assert.AreEqual (si5, lvi.SubItems ["E name"], "#B1");
  1162. }
  1163. #endif
  1164. }
  1165. }