CheckedListBoxTest.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. //
  2. // Copyright (c) 2005 Novell, Inc.
  3. //
  4. // Authors:
  5. // Ritvik Mayank ([email protected])
  6. // Gert Driesen ([email protected])
  7. //
  8. using System;
  9. using System.Collections;
  10. using System.ComponentModel;
  11. using System.Drawing;
  12. using System.Reflection;
  13. using System.Windows.Forms;
  14. using NUnit.Framework;
  15. namespace MonoTests.System.Windows.Forms
  16. {
  17. [TestFixture]
  18. public class CheckedListBoxTest : TestHelper
  19. {
  20. [Test]
  21. public void CheckedListBoxPropertyTest ()
  22. {
  23. Form myform = new Form ();
  24. myform.ShowInTaskbar = false;
  25. myform.Visible = true;
  26. CheckedListBox mychklistbox = new CheckedListBox ();
  27. ArrayList checked_items = new ArrayList (2);
  28. ArrayList checked_pos = new ArrayList (2);
  29. mychklistbox.Items.Add ("test1", true);
  30. checked_items.Add ("test1"); checked_pos.Add (0);
  31. mychklistbox.Items.Add ("test2");
  32. mychklistbox.Items.Add ("test3", true);
  33. checked_items.Add ("test3"); checked_pos.Add (2);
  34. mychklistbox.Visible = true;
  35. myform.Controls.Add (mychklistbox);
  36. Assert.AreEqual (checked_items.Count, mychklistbox.CheckedIndices.Count, "#1");
  37. Assert.AreEqual (checked_items.Count, mychklistbox.CheckedItems.Count, "#2");
  38. foreach (object o in mychklistbox.CheckedItems)
  39. {
  40. Assert.IsTrue (checked_items.Contains (o),"#3");
  41. checked_items.Remove (o);
  42. }
  43. Assert.AreEqual (0, checked_items.Count);
  44. for (int i = 0; i < mychklistbox.Items.Count; ++i)
  45. {
  46. if (checked_pos.Contains (i))
  47. Assert.AreEqual (CheckState.Checked, mychklistbox.GetItemCheckState (i),"#4");
  48. else
  49. Assert.IsFalse (CheckState.Checked == mychklistbox.GetItemCheckState (i),"#5");
  50. }
  51. Assert.AreEqual (false, mychklistbox.CheckOnClick, "#6");
  52. Assert.AreEqual (3, mychklistbox.Items.Count, "#7");
  53. Assert.AreEqual (SelectionMode.One, mychklistbox.SelectionMode, "#8");
  54. Assert.AreEqual (false , mychklistbox.ThreeDCheckBoxes, "#9");
  55. myform.Dispose ();
  56. }
  57. [Test]
  58. [NUnit.Framework.Category ("NotWorking")]
  59. public void DisplayMember_HandleCreated ()
  60. {
  61. MockItem itemA = new MockItem ("A1", 1);
  62. MockItem itemB = new MockItem ("B2", 2);
  63. MockItem itemC = new MockItem ("C3", 3);
  64. MockItem itemD = new MockItem ("D4", 4);
  65. MockItem itemE = new MockItem ("E5", 5);
  66. MockItem itemF = new MockItem ("F6", 6);
  67. CheckedListBox clb = new CheckedListBox ();
  68. clb.Items.Add (itemA, true);
  69. clb.Items.Add (itemC, false);
  70. clb.Items.Add (itemB, true);
  71. Form form = new Form ();
  72. form.ShowInTaskbar = false;
  73. form.Controls.Add (clb);
  74. form.Show ();
  75. Assert.AreEqual (string.Empty, clb.Text, "#A1");
  76. clb.SelectedIndex = 1;
  77. Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#A2");
  78. clb.DisplayMember = "Text";
  79. Assert.AreEqual ("C3", clb.Text, "#A3");
  80. clb.SelectedIndex = 2;
  81. Assert.AreEqual ("B2", clb.Text, "#A4");
  82. clb.Text = "C3";
  83. Assert.AreEqual (1, clb.SelectedIndex, "#B1");
  84. Assert.AreEqual ("C3", clb.Text, "#B2");
  85. clb.Text = "B";
  86. Assert.AreEqual (1, clb.SelectedIndex, "#B3");
  87. Assert.AreEqual ("C3", clb.Text, "#B4");
  88. ArrayList itemList = new ArrayList ();
  89. itemList.Add (itemD);
  90. itemList.Add (itemE);
  91. itemList.Add (itemF);
  92. clb.DataSource = itemList;
  93. clb.DisplayMember = string.Empty;
  94. clb.SelectedIndex = 1;
  95. Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#C1");
  96. clb.DisplayMember = "Text";
  97. Assert.AreEqual ("E5", clb.Text, "#C2");
  98. clb.SelectedIndex = 2;
  99. Assert.AreEqual ("F6", clb.Text, "#C3");
  100. clb.Text = "E5";
  101. Assert.AreEqual (1, clb.SelectedIndex, "#D1");
  102. Assert.AreEqual ("E5", clb.Text, "#D2");
  103. clb.Text = "D";
  104. Assert.AreEqual (1, clb.SelectedIndex, "#D3");
  105. Assert.AreEqual ("E5", clb.Text, "#D4");
  106. form.Dispose ();
  107. }
  108. [Test]
  109. [NUnit.Framework.Category ("NotWorking")]
  110. public void DisplayMember_HandleNotCreated ()
  111. {
  112. MockItem itemA = new MockItem ("A1", 1);
  113. MockItem itemB = new MockItem ("B2", 2);
  114. MockItem itemC = new MockItem ("C3", 3);
  115. MockItem itemD = new MockItem ("D4", 4);
  116. MockItem itemE = new MockItem ("E5", 5);
  117. MockItem itemF = new MockItem ("F6", 6);
  118. CheckedListBox clb = new CheckedListBox ();
  119. clb.Items.Add (itemA, true);
  120. clb.Items.Add (itemC, false);
  121. clb.Items.Add (itemB, true);
  122. Assert.AreEqual (string.Empty, clb.Text, "#A1");
  123. clb.SelectedIndex = 1;
  124. Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#A2");
  125. clb.DisplayMember = "Text";
  126. Assert.AreEqual ("C3", clb.Text, "#A3");
  127. clb.SelectedIndex = 2;
  128. Assert.AreEqual ("B2", clb.Text, "#A4");
  129. clb.Text = "C3";
  130. Assert.AreEqual (1, clb.SelectedIndex, "#B1");
  131. Assert.AreEqual ("C3", clb.Text, "#B2");
  132. clb.Text = "C";
  133. Assert.AreEqual (1, clb.SelectedIndex, "#B3");
  134. Assert.AreEqual ("C3", clb.Text, "#B4");
  135. ArrayList itemList = new ArrayList ();
  136. itemList.Add (itemD);
  137. itemList.Add (itemE);
  138. itemList.Add (itemF);
  139. clb.DataSource = itemList;
  140. clb.DisplayMember = string.Empty;
  141. clb.SelectedIndex = 1;
  142. Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#C1");
  143. clb.DisplayMember = "Text";
  144. Assert.AreEqual ("C3", clb.Text, "#C2");
  145. clb.SelectedIndex = 2;
  146. Assert.AreEqual ("B2", clb.Text, "#C3");
  147. }
  148. [Test]
  149. public void GetItemCheckedTest ()
  150. {
  151. Form f = new Form ();
  152. f.ShowInTaskbar = false;
  153. f.Visible = true;
  154. CheckedListBox mychklistbox = new CheckedListBox ();
  155. mychklistbox.Items.Add ("test1",true);
  156. mychklistbox.Items.Add ("test2",CheckState.Indeterminate);
  157. mychklistbox.Items.Add ("test3");
  158. mychklistbox.Visible = true;
  159. f.Controls.Add (mychklistbox);
  160. Assert.AreEqual (true, mychklistbox.GetItemChecked (0), "#10");
  161. Assert.AreEqual (true, mychklistbox.GetItemChecked (1), "#11");
  162. Assert.AreEqual (false, mychklistbox.GetItemChecked (2), "#12");
  163. f.Dispose ();
  164. }
  165. [Test]
  166. [ExpectedException (typeof (ArgumentOutOfRangeException) )]
  167. public void GetItemCheckedExceptionTest ()
  168. {
  169. CheckedListBox mychklistbox = new CheckedListBox ();
  170. mychklistbox.Items.Add ("test1",true);
  171. Assert.AreEqual (true, mychklistbox.GetItemChecked (1), "#13");
  172. }
  173. [Test]
  174. public void GetItemCheckStateTest ()
  175. {
  176. Form f = new Form ();
  177. f.ShowInTaskbar = false;
  178. f.Visible = true;
  179. CheckedListBox mychklistbox = new CheckedListBox ();
  180. mychklistbox.Items.Add ("test1",true);
  181. mychklistbox.Items.Add ("test2",CheckState.Indeterminate);
  182. mychklistbox.Items.Add ("test3");
  183. mychklistbox.Visible = true;
  184. f.Controls.Add (mychklistbox);
  185. Assert.AreEqual (CheckState.Checked, mychklistbox.GetItemCheckState (0), "#14");
  186. Assert.AreEqual (CheckState.Indeterminate, mychklistbox.GetItemCheckState (1), "#15");
  187. Assert.AreEqual (CheckState.Unchecked, mychklistbox.GetItemCheckState (2), "#16");
  188. f.Dispose ();
  189. }
  190. [Test]
  191. public void SelectionMode_Invalid ()
  192. {
  193. CheckedListBox clb = new CheckedListBox ();
  194. try {
  195. clb.SelectionMode = SelectionMode.MultiSimple;
  196. Assert.Fail ("#A1");
  197. } catch (ArgumentException ex) {
  198. // Multi selection not supported on CheckedListBox
  199. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
  200. Assert.IsNotNull (ex.Message, "#A3");
  201. Assert.IsNull (ex.ParamName, "#A4");
  202. Assert.IsNull (ex.InnerException, "#A5");
  203. }
  204. try {
  205. clb.SelectionMode = SelectionMode.MultiExtended;
  206. Assert.Fail ("#B1");
  207. } catch (ArgumentException ex) {
  208. // Multi selection not supported on CheckedListBox
  209. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
  210. Assert.IsNotNull (ex.Message, "#B3");
  211. Assert.IsNull (ex.ParamName, "#B4");
  212. Assert.IsNull (ex.InnerException, "#B5");
  213. }
  214. try {
  215. clb.SelectionMode = (SelectionMode) 666;
  216. Assert.Fail ("#C1");
  217. } catch (InvalidEnumArgumentException ex) {
  218. Assert.AreEqual (typeof (InvalidEnumArgumentException), ex.GetType (), "#C2");
  219. Assert.IsNotNull (ex.Message, "#C3");
  220. Assert.IsNotNull (ex.ParamName, "#C4");
  221. Assert.AreEqual ("value", ex.ParamName, "#C5");
  222. Assert.IsNull (ex.InnerException, "#C6");
  223. }
  224. }
  225. [Test]
  226. public void SetItemCheckedTest ()
  227. {
  228. Form myform = new Form ();
  229. myform.ShowInTaskbar = false;
  230. myform.Visible = true;
  231. CheckedListBox mychklistbox = new CheckedListBox ();
  232. mychklistbox.Items.Add ("test1");
  233. mychklistbox.Items.Add ("test2");
  234. mychklistbox.Visible = true;
  235. myform.Controls.Add (mychklistbox);
  236. mychklistbox.SetItemChecked (0,true);
  237. mychklistbox.SetItemChecked (1,false);
  238. Assert.AreEqual (CheckState.Checked, mychklistbox.GetItemCheckState (0), "#17");
  239. Assert.AreEqual (CheckState.Unchecked, mychklistbox.GetItemCheckState (1), "#18");
  240. myform.Dispose ();
  241. }
  242. [Test]
  243. public void SetItemCheckStateTest ()
  244. {
  245. Form myform = new Form ();
  246. myform.ShowInTaskbar = false;
  247. myform.Visible = true;
  248. CheckedListBox mychklistbox = new CheckedListBox ();
  249. mychklistbox.Items.Add ("test1");
  250. mychklistbox.Items.Add ("test2");
  251. mychklistbox.Items.Add ("test3");
  252. mychklistbox.Visible = true;
  253. myform.Controls.Add (mychklistbox);
  254. mychklistbox.SetItemCheckState (0,CheckState.Checked);
  255. mychklistbox.SetItemCheckState (1,CheckState.Indeterminate);
  256. mychklistbox.SetItemCheckState (2,CheckState.Unchecked);
  257. Assert.AreEqual (CheckState.Checked, mychklistbox.GetItemCheckState (0), "#19");
  258. Assert.AreEqual (CheckState.Indeterminate, mychklistbox.GetItemCheckState (1), "#20");
  259. Assert.AreEqual (CheckState.Unchecked, mychklistbox.GetItemCheckState (2), "#21");
  260. myform.Dispose ();
  261. }
  262. #if NET_2_0
  263. // Fails on 1.1 (both MS and Mono) because SelectedIndex is set
  264. [Test]
  265. public void Text_SelectionMode_None ()
  266. {
  267. MockItem itemA = new MockItem ("A1", 1);
  268. MockItem itemB = new MockItem ("B2", 2);
  269. MockItem itemC = new MockItem ("C3", 3);
  270. MockItem itemD = new MockItem ("C3", 4);
  271. MockItem itemE = new MockItem ("", 5);
  272. MockItem itemF = new MockItem (null, 6);
  273. ArrayList itemList = new ArrayList ();
  274. itemList.Add (itemA);
  275. itemList.Add (itemC);
  276. itemList.Add (itemB);
  277. itemList.Add (itemD);
  278. itemList.Add (itemE);
  279. itemList.Add (itemF);
  280. CheckedListBox clb = new CheckedListBox ();
  281. clb.DisplayMember = "Text";
  282. clb.DataSource = itemList;
  283. clb.SelectionMode = SelectionMode.None;
  284. Form form = new Form ();
  285. form.ShowInTaskbar = false;
  286. form.Controls.Add (clb);
  287. form.Show ();
  288. Assert.AreEqual (string.Empty, clb.Text, "#A1");
  289. Assert.AreEqual (-1, clb.SelectedIndex, "#A2");
  290. clb.Text = "B2";
  291. Assert.AreEqual ("B2", clb.Text, "#B1");
  292. Assert.AreEqual (-1, clb.SelectedIndex, "#B2");
  293. clb.Text = "D";
  294. Assert.AreEqual ("D", clb.Text, "#C1");
  295. Assert.AreEqual (-1, clb.SelectedIndex, "#C2");
  296. clb.Text = "Doesnotexist";
  297. Assert.AreEqual ("Doesnotexist", clb.Text, "#D1");
  298. Assert.AreEqual (-1, clb.SelectedIndex, "#D2");
  299. clb.Text = string.Empty;
  300. Assert.AreEqual (string.Empty, clb.Text, "#E1");
  301. Assert.AreEqual (-1, clb.SelectedIndex, "#E2");
  302. clb.Text = null;
  303. Assert.AreEqual (string.Empty, clb.Text, "#F1");
  304. Assert.AreEqual (-1, clb.SelectedIndex, "#F2");
  305. form.Dispose ();
  306. }
  307. [Test]
  308. public void AllowSelection ()
  309. {
  310. MockCheckedListBox clb = new MockCheckedListBox ();
  311. clb.SelectionMode = SelectionMode.None;
  312. Assert.IsFalse (clb.allow_selection, "#1");
  313. clb.SelectionMode = SelectionMode.One;
  314. Assert.IsTrue (clb.allow_selection, "#2");
  315. }
  316. #endif
  317. [Test]
  318. public void Text_SelectionMode_One ()
  319. {
  320. MockItem itemA = new MockItem ("A1", 1);
  321. MockItem itemB = new MockItem ("B2", 2);
  322. MockItem itemC = new MockItem ("C3", 3);
  323. MockItem itemD = new MockItem ("C3", 4);
  324. MockItem itemE = new MockItem ("", 5);
  325. MockItem itemF = new MockItem (null, 6);
  326. ArrayList itemList = new ArrayList ();
  327. itemList.Add (itemA);
  328. itemList.Add (itemC);
  329. itemList.Add (itemB);
  330. itemList.Add (itemD);
  331. itemList.Add (itemE);
  332. itemList.Add (itemF);
  333. CheckedListBox clb = new CheckedListBox ();
  334. clb.DisplayMember = "Text";
  335. clb.DataSource = itemList;
  336. clb.SelectionMode = SelectionMode.One;
  337. Form form = new Form ();
  338. form.ShowInTaskbar = false;
  339. form.Controls.Add (clb);
  340. form.Show ();
  341. Assert.AreEqual ("A1", clb.Text, "#A1");
  342. Assert.AreEqual (0, clb.SelectedIndex, "#A2");
  343. clb.Text = "B2";
  344. Assert.AreEqual ("B2", clb.Text, "#B1");
  345. Assert.AreEqual (2, clb.SelectedIndex, "#B2");
  346. Assert.AreEqual (1, clb.SelectedItems.Count, "#B3");
  347. Assert.AreSame (itemB, clb.SelectedItems [0], "#B4");
  348. clb.Text = "D";
  349. Assert.AreEqual ("B2", clb.Text, "#C1");
  350. Assert.AreEqual (2, clb.SelectedIndex, "#C2");
  351. Assert.AreEqual (1, clb.SelectedItems.Count, "#C3");
  352. Assert.AreSame (itemB, clb.SelectedItems [0], "#C4");
  353. clb.Text = "Doesnotexist";
  354. Assert.AreEqual ("B2", clb.Text, "#D1");
  355. Assert.AreEqual (2, clb.SelectedIndex, "#D2");
  356. Assert.AreEqual (1, clb.SelectedItems.Count, "#D3");
  357. Assert.AreSame (itemB, clb.SelectedItems [0], "#D4");
  358. clb.Text = "C3";
  359. Assert.AreEqual ("C3", clb.Text, "#E1");
  360. Assert.AreEqual (1, clb.SelectedIndex, "#E2");
  361. Assert.AreEqual (1, clb.SelectedItems.Count, "#E3");
  362. Assert.AreSame (itemC, clb.SelectedItems [0], "#E4");
  363. clb.Text = string.Empty;
  364. Assert.AreEqual (string.Empty, clb.Text, "#F1");
  365. Assert.AreEqual (4, clb.SelectedIndex, "#F2");
  366. Assert.AreEqual (1, clb.SelectedItems.Count, "#F3");
  367. Assert.AreSame (itemE, clb.SelectedItems [0], "#F4");
  368. clb.Text = null;
  369. Assert.AreEqual (string.Empty, clb.Text, "#G1");
  370. Assert.AreEqual (4, clb.SelectedIndex, "#G2");
  371. Assert.AreEqual (1, clb.SelectedItems.Count, "#G3");
  372. Assert.AreSame (itemE, clb.SelectedItems [0], "#G4");
  373. clb.SelectedIndex = -1;
  374. Assert.AreEqual ("A1", clb.Text, "#H1");
  375. Assert.AreEqual (0, clb.SelectedIndex, "#H2");
  376. Assert.AreEqual (1, clb.SelectedItems.Count, "#H3");
  377. Assert.AreSame (itemA, clb.SelectedItems [0], "#H4");
  378. form.Dispose ();
  379. }
  380. [Test]
  381. [NUnit.Framework.Category ("NotWorking")]
  382. public void ValueMember_HandleCreated ()
  383. {
  384. MockItem itemA = new MockItem ("A", 1);
  385. MockItem itemB = new MockItem ("B", 2);
  386. MockItem itemC = new MockItem ("C", 3);
  387. MockItem itemD = new MockItem ("D", 4);
  388. MockItem itemE = new MockItem ("E", 5);
  389. CheckedListBox clb = new CheckedListBox ();
  390. clb.Items.Add (itemA, true);
  391. clb.Items.Add (itemC, false);
  392. clb.Items.Add (itemB, true);
  393. clb.SelectedIndex = 1;
  394. Form form = new Form ();
  395. form.ShowInTaskbar = false;
  396. form.Controls.Add (clb);
  397. form.Show ();
  398. Assert.AreEqual (string.Empty, clb.ValueMember, "#A1");
  399. Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#A2");
  400. Assert.IsNull (clb.SelectedValue, "#A3");
  401. clb.ValueMember = "Value";
  402. Assert.AreEqual ("Value", clb.ValueMember, "#B1");
  403. Assert.AreEqual ("3", clb.Text, "#B2");
  404. Assert.IsNull (clb.SelectedValue, "#B3");
  405. clb.DisplayMember = "Text";
  406. Assert.AreEqual ("Value", clb.ValueMember, "#C1");
  407. Assert.AreEqual ("C", clb.Text, "#C2");
  408. Assert.IsNull (clb.SelectedValue, "#C3");
  409. ArrayList itemList = new ArrayList ();
  410. itemList.Add (itemD);
  411. itemList.Add (itemE);
  412. clb.DataSource = itemList;
  413. clb.ValueMember = string.Empty;
  414. clb.DisplayMember = string.Empty;
  415. clb.SelectedIndex = 1;
  416. Assert.AreEqual (string.Empty, clb.ValueMember, "#D1");
  417. Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#D2");
  418. Assert.IsNotNull (clb.SelectedValue, "#D3");
  419. Assert.AreSame (itemE, clb.SelectedValue, "#D4");
  420. clb.ValueMember = "Value";
  421. Assert.AreEqual ("Value", clb.ValueMember, "#E1");
  422. Assert.AreEqual ("5", clb.Text, "#E2");
  423. Assert.IsNotNull (clb.SelectedValue, "#E3");
  424. Assert.AreEqual (5, clb.SelectedValue, "#E4");
  425. clb.DisplayMember = "Text";
  426. Assert.AreEqual ("Value", clb.ValueMember, "#F1");
  427. Assert.AreEqual ("E", clb.Text, "#F2");
  428. Assert.IsNotNull (clb.SelectedValue, "#F3");
  429. Assert.AreEqual (5, clb.SelectedValue, "#F4");
  430. form.Dispose ();
  431. }
  432. [Test]
  433. [NUnit.Framework.Category ("NotWorking")]
  434. public void ValueMember_HandleNotCreated ()
  435. {
  436. MockItem itemA = new MockItem ("A", 1);
  437. MockItem itemB = new MockItem ("B", 2);
  438. MockItem itemC = new MockItem ("C", 3);
  439. MockItem itemD = new MockItem ("D", 4);
  440. MockItem itemE = new MockItem ("E", 5);
  441. CheckedListBox clb = new CheckedListBox ();
  442. clb.Items.Add (itemA, true);
  443. clb.Items.Add (itemC, false);
  444. clb.Items.Add (itemB, true);
  445. clb.SelectedIndex = 1;
  446. Assert.AreEqual (string.Empty, clb.ValueMember, "#A1");
  447. Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#A2");
  448. Assert.IsNull (clb.SelectedValue, "#A3");
  449. clb.ValueMember = "Value";
  450. Assert.AreEqual ("Value", clb.ValueMember, "#B1");
  451. Assert.AreEqual ("3", clb.Text, "#B2");
  452. Assert.IsNull (clb.SelectedValue, "#B3");
  453. clb.DisplayMember = "Text";
  454. Assert.AreEqual ("Value", clb.ValueMember, "#C1");
  455. Assert.AreEqual ("C", clb.Text, "#C2");
  456. Assert.IsNull (clb.SelectedValue, "#C3");
  457. ArrayList itemList = new ArrayList ();
  458. itemList.Add (itemD);
  459. itemList.Add (itemE);
  460. clb.DataSource = itemList;
  461. clb.ValueMember = string.Empty;
  462. clb.DisplayMember = string.Empty;
  463. clb.SelectedIndex = 1;
  464. Assert.AreEqual (string.Empty, clb.ValueMember, "#D1");
  465. Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#D2");
  466. Assert.IsNull (clb.SelectedValue, "#D3");
  467. clb.ValueMember = "Value";
  468. Assert.AreEqual ("Value", clb.ValueMember, "#E1");
  469. Assert.AreEqual ("3", clb.Text, "#E2");
  470. Assert.IsNull (clb.SelectedValue, "#E3");
  471. clb.DisplayMember = "Text";
  472. Assert.AreEqual ("Value", clb.ValueMember, "#F1");
  473. Assert.AreEqual ("C", clb.Text, "#F2");
  474. Assert.IsNull (clb.SelectedValue, "#F3");
  475. }
  476. public class MockCheckedListBox : CheckedListBox
  477. {
  478. #if NET_2_0
  479. public bool allow_selection {
  480. get { return base.AllowSelection; }
  481. }
  482. #endif
  483. }
  484. //--------------------------------------------------------------
  485. // Add method checking add index and event when sorted and not.
  486. public static object[] Items = new string[] { "c", "a", "d", "b", };
  487. //
  488. public static int[] ExpectedAddPositionsSorted = { 0, 0, 2, 1 };
  489. public static int[] ExpectedAddPositionsUnsorted = { 0, 1, 2, 3 };
  490. //
  491. const string ExpectedEventsUnchecked = "";
  492. const string ExpectedEventsCheckedSorted
  493. = "ItemCheck, index 0, is: Unchecked, will be: Checked, item is: 'c'" + ", CheckedIndices: { }" + ";\n"
  494. + "ItemCheck, index 0, is: Unchecked, will be: Checked, item is: 'a'" + ", CheckedIndices: { '1', }" + ";\n"
  495. + "ItemCheck, index 2, is: Unchecked, will be: Checked, item is: 'd'" + ", CheckedIndices: { '0', '1', }" + ";\n"
  496. + "ItemCheck, index 1, is: Unchecked, will be: Checked, item is: 'b'" + ", CheckedIndices: { '0', '2', '3', }" + ";\n";
  497. const string ExpectedEventsCheckedUnsorted
  498. = "ItemCheck, index 0, is: Unchecked, will be: Checked, item is: 'c'" + ", CheckedIndices: { }" + ";\n"
  499. + "ItemCheck, index 1, is: Unchecked, will be: Checked, item is: 'a'" + ", CheckedIndices: { '0', }" + ";\n"
  500. + "ItemCheck, index 2, is: Unchecked, will be: Checked, item is: 'd'" + ", CheckedIndices: { '0', '1', }" + ";\n"
  501. + "ItemCheck, index 3, is: Unchecked, will be: Checked, item is: 'b'" + ", CheckedIndices: { '0', '1', '2', }" + ";\n";
  502. class ItemCheckLoggingReceiver
  503. {
  504. public string _allItemCheckEvents;
  505. public void HandleItemCheck (object sender, ItemCheckEventArgs e)
  506. {
  507. CheckedListBox clb = (CheckedListBox)sender;
  508. string text
  509. = String.Format ("ItemCheck, index {0}, is: {1}, will be: {2}, item is: '{3}'" + ", CheckedIndices: {{ {4}}}" + ";\n",
  510. e.Index, e.CurrentValue, e.NewValue, clb.Items[e.Index], Join (clb.CheckedIndices));
  511. _allItemCheckEvents += text;
  512. }
  513. }
  514. [Test]
  515. public void AddCheckedBoolToSorted ()
  516. {
  517. AddBoolItems (true, Items, true, ExpectedAddPositionsSorted, ExpectedEventsCheckedSorted);
  518. }
  519. [Test]
  520. public void AddUncheckedBoolToSorted ()
  521. {
  522. AddBoolItems (true, Items, false, ExpectedAddPositionsSorted, ExpectedEventsUnchecked);
  523. }
  524. [Test]
  525. public void AddCheckedBoolToUnsorted ()
  526. {
  527. AddBoolItems (false, Items, true, ExpectedAddPositionsUnsorted, ExpectedEventsCheckedUnsorted);
  528. }
  529. [Test]
  530. public void AddUncheckedBoolToUnsorted ()
  531. {
  532. AddBoolItems (false, Items, false, ExpectedAddPositionsUnsorted, ExpectedEventsUnchecked);
  533. }
  534. void AddBoolItems (bool sorted, object[] items, bool isChecked, int[] expectedAddPositions, string expectedEvents)
  535. {
  536. CheckedListBox clb = new CheckedListBox ();
  537. clb.Sorted = sorted;
  538. ItemCheckLoggingReceiver target = new ItemCheckLoggingReceiver ();
  539. clb.ItemCheck += new ItemCheckEventHandler (target.HandleItemCheck);
  540. target._allItemCheckEvents = String.Empty;
  541. ArrayList addedAtList = new ArrayList ();
  542. foreach (object cur in items) {
  543. int idx = clb.Items.Add (cur, isChecked);
  544. addedAtList.Add (idx);
  545. }
  546. if (isChecked)
  547. AssertAllItemsChecked (clb);
  548. else
  549. AssertAllItemsUnchecked (clb);
  550. Assert.AreEqual ((Array)expectedAddPositions, (Array)addedAtList.ToArray (typeof (int)), "addedAtList");
  551. Assert.AreEqual (expectedEvents, target._allItemCheckEvents, "events");
  552. }
  553. [Test]
  554. public void AddCheckedCheckStateToSorted ()
  555. {
  556. AddCheckStateItems (true, Items, CheckState.Checked, ExpectedAddPositionsSorted, ExpectedEventsCheckedSorted);
  557. }
  558. [Test]
  559. public void AddUncheckedCheckStateToSorted ()
  560. {
  561. AddCheckStateItems (true, Items, CheckState.Unchecked, ExpectedAddPositionsSorted, ExpectedEventsUnchecked);
  562. }
  563. [Test]
  564. public void AddCheckedCheckStateToUnsorted ()
  565. {
  566. AddCheckStateItems (false, Items, CheckState.Checked, ExpectedAddPositionsUnsorted, ExpectedEventsCheckedUnsorted);
  567. }
  568. [Test]
  569. public void AddUncheckedCheckStateToUnsorted ()
  570. {
  571. AddCheckStateItems (false, Items, CheckState.Unchecked, ExpectedAddPositionsUnsorted, ExpectedEventsUnchecked);
  572. }
  573. void AddCheckStateItems (bool sorted, object[] items, CheckState checkState, int[] expectedAddPositions, string expectedEvents)
  574. {
  575. CheckedListBox clb = new CheckedListBox ();
  576. clb.Sorted = sorted;
  577. ItemCheckLoggingReceiver target = new ItemCheckLoggingReceiver ();
  578. clb.ItemCheck += new ItemCheckEventHandler (target.HandleItemCheck);
  579. target._allItemCheckEvents = String.Empty;
  580. ArrayList addedAtList = new ArrayList ();
  581. foreach (object cur in items) {
  582. int idx = clb.Items.Add (cur, checkState);
  583. addedAtList.Add (idx);
  584. }
  585. if (checkState != CheckState.Unchecked)
  586. AssertAllItemsChecked (clb);
  587. else
  588. AssertAllItemsUnchecked (clb);
  589. Assert.AreEqual ((Array)expectedAddPositions, (Array)addedAtList.ToArray (typeof (int)), "addedAtList");
  590. Assert.AreEqual (expectedEvents, target._allItemCheckEvents, "events");
  591. }
  592. static void AssertAllItemsChecked (CheckedListBox clb)
  593. {
  594. //Dump("clb.Items", clb.Items);
  595. //Dump("clb.CheckedIndices", clb.CheckedIndices);
  596. //Dump("clb.CheckedItems", clb.CheckedItems);
  597. Assert.AreEqual (clb.Items.Count, clb.CheckedIndices.Count, "checked count");
  598. for (int i = 0; i < clb.Items.Count; ++i)
  599. Assert.AreEqual (i, clb.CheckedIndices[i], "CheckedIndices[i] @" + i);
  600. for (int i = 0; i < clb.Items.Count; ++i)
  601. Assert.AreEqual (clb.Items[i], clb.CheckedItems[i], "CheckedItems[i] @" + i);
  602. }
  603. static void AssertAllItemsUnchecked (CheckedListBox clb)
  604. {
  605. Assert.AreEqual (0, clb.CheckedIndices.Count, "checked count");
  606. Assert.AreEqual (clb.CheckedIndices.Count, clb.CheckedItems.Count, "checked consistency");
  607. }
  608. //----
  609. static string Join (IEnumerable list)
  610. {
  611. global::System.Text.StringBuilder bldr = new global::System.Text.StringBuilder ();
  612. bldr.Append ("'");
  613. foreach (object cur in list) {
  614. bldr.Append (cur);
  615. bldr.Append ("', '");
  616. }
  617. bldr.Append ("'");
  618. bldr.Length -= 2;
  619. return bldr.ToString ();
  620. }
  621. //static void Dump (string name, IEnumerable list)
  622. //{
  623. // Console.Write (name);
  624. // Console.Write (" ");
  625. // Dump (list);
  626. //}
  627. //
  628. //static void Dump (IEnumerable list)
  629. //{
  630. // Console.WriteLine ("[" + Join (list) + "]");
  631. //}
  632. //--------
  633. // Check that if the ItemCheck event handler changes the NewValue property
  634. // that the new value is used for the item state.
  635. [Test]
  636. public void ItemCheckSetNewValue_Adding()
  637. {
  638. CheckedListBox clb = new CheckedListBox();
  639. ItemCheckNewValueSetReceiver target = new ItemCheckNewValueSetReceiver();
  640. clb.ItemCheck += new ItemCheckEventHandler(target.HandleItemCheck);
  641. int idx;
  642. // Unchecked addition. Note these are not touched by the event
  643. // as there's no 'check' action.
  644. target._checkState = CheckState.Indeterminate;
  645. idx = clb.Items.Add("aaU_x", false);
  646. Assert.IsFalse(clb.CheckedIndices.Contains(idx), "U_x " + idx);
  647. target._checkState = CheckState.Unchecked;
  648. idx = clb.Items.Add("aaU_U", false);
  649. Assert.IsFalse(clb.CheckedIndices.Contains(idx), "U_U " + idx);
  650. target._checkState = CheckState.Checked;
  651. idx = clb.Items.Add("aaU_C", false);
  652. Assert.IsFalse(clb.CheckedIndices.Contains(idx), "U_C " + idx);
  653. // Checked addition
  654. idx = clb.Items.Add("aaC_x", true);
  655. Assert.IsTrue(clb.CheckedIndices.Contains(idx), "U_x " + idx);
  656. target._checkState = CheckState.Unchecked;
  657. idx = clb.Items.Add("aaC_U", true);
  658. Assert.IsFalse(clb.CheckedIndices.Contains(idx), "C_U " + idx);
  659. target._checkState = CheckState.Checked;
  660. idx = clb.Items.Add("aaC_C", true);
  661. Assert.IsTrue(clb.CheckedIndices.Contains(idx), "C_C " + idx);
  662. }
  663. [Test]
  664. public void ItemCheckSetNewValue_Setting()
  665. {
  666. CheckedListBox clb = new CheckedListBox();
  667. ItemCheckNewValueSetReceiver target = new ItemCheckNewValueSetReceiver();
  668. clb.Items.Add("aaaa");
  669. clb.ItemCheck += new ItemCheckEventHandler(target.HandleItemCheck);
  670. const int idx = 0;
  671. // Note here the SetItemChecked(idx, false) actions *do* raise an item
  672. // check event so the result is touched by the event handler.
  673. // Uncheck!
  674. SetInitialState(clb, idx, true, target);
  675. target._checkState = CheckState.Indeterminate;
  676. clb.SetItemChecked(idx, false);
  677. Assert.IsFalse(clb.CheckedIndices.Contains(idx), "C_U_x ");
  678. SetInitialState(clb, idx, true, target);
  679. target._checkState = CheckState.Unchecked;
  680. clb.SetItemChecked(idx, false);
  681. Assert.IsFalse(clb.CheckedIndices.Contains(idx), "C_U_U ");
  682. SetInitialState(clb, idx, true, target);
  683. target._checkState = CheckState.Checked;
  684. clb.SetItemChecked(idx, false);
  685. Assert.IsTrue(clb.CheckedIndices.Contains(idx), "C_U_C ");
  686. // Check!
  687. SetInitialState(clb, idx, false, target);
  688. target._checkState = CheckState.Indeterminate;
  689. clb.SetItemChecked(idx, true);
  690. Assert.IsTrue(clb.CheckedIndices.Contains(idx), "U_C_x ");
  691. SetInitialState(clb, idx, false, target);
  692. target._checkState = CheckState.Unchecked;
  693. clb.SetItemChecked(idx, true);
  694. Assert.IsFalse(clb.CheckedIndices.Contains(idx), "U_C_U ");
  695. SetInitialState(clb, idx, false, target);
  696. target._checkState = CheckState.Checked;
  697. clb.SetItemChecked(idx, true);
  698. Assert.IsTrue(clb.CheckedIndices.Contains(idx), "U_C_C ");
  699. }
  700. private void SetInitialState(CheckedListBox clb, int index, bool isChecked, ItemCheckNewValueSetReceiver target)
  701. {
  702. CheckState originalCS = target._checkState;
  703. target._checkState = CheckState.Indeterminate; // No touchee in the event handler.
  704. clb.SetItemChecked(index, isChecked);
  705. target._checkState = originalCS;
  706. }
  707. class ItemCheckNewValueSetReceiver
  708. {
  709. public CheckState _checkState = CheckState.Indeterminate;
  710. public void HandleItemCheck(object sender, ItemCheckEventArgs e)
  711. {
  712. CheckState originalNewValue = e.NewValue; //logging
  713. bool changed = false; //logging
  714. switch (_checkState) {
  715. case CheckState.Unchecked:
  716. e.NewValue = CheckState.Unchecked;
  717. changed = true;
  718. break;
  719. case CheckState.Checked:
  720. e.NewValue = CheckState.Checked;
  721. changed = true;
  722. break;
  723. default: // No touchee!
  724. global::System.Diagnostics.Debug.Assert(_checkState == CheckState.Indeterminate);
  725. break;
  726. }
  727. #if false // logging
  728. Console.WriteLine("ItemCheck, item#: {0,2}, current: {1,9}, new was: {2,9}{4}",
  729. e.Index, e.CurrentValue, originalNewValue, e.NewValue,
  730. (changed ? String.Format(", ! is: {0,9}", e.NewValue) : String.Empty));
  731. #endif
  732. }
  733. }
  734. }
  735. }