2 // Copyright (c) 2005 Novell, Inc.
5 // Ritvik Mayank (mritvik@novell.com)
6 // Gert Driesen (drieseng@users.sourceforge.net)
10 using System.Collections;
11 using System.ComponentModel;
13 using System.Reflection;
14 using System.Windows.Forms;
16 using NUnit.Framework;
18 namespace MonoTests.System.Windows.Forms
21 public class CheckedListBoxTest : TestHelper
24 public void CheckedListBoxPropertyTest ()
26 Form myform = new Form ();
27 myform.ShowInTaskbar = false;
28 myform.Visible = true;
29 CheckedListBox mychklistbox = new CheckedListBox ();
30 ArrayList checked_items = new ArrayList (2);
31 ArrayList checked_pos = new ArrayList (2);
32 mychklistbox.Items.Add ("test1", true);
33 checked_items.Add ("test1"); checked_pos.Add (0);
34 mychklistbox.Items.Add ("test2");
35 mychklistbox.Items.Add ("test3", true);
36 checked_items.Add ("test3"); checked_pos.Add (2);
37 mychklistbox.Visible = true;
38 myform.Controls.Add (mychklistbox);
39 Assert.AreEqual (checked_items.Count, mychklistbox.CheckedIndices.Count, "#1");
40 Assert.AreEqual (checked_items.Count, mychklistbox.CheckedItems.Count, "#2");
41 foreach (object o in mychklistbox.CheckedItems)
43 Assert.IsTrue (checked_items.Contains (o),"#3");
44 checked_items.Remove (o);
47 Assert.AreEqual (0, checked_items.Count);
48 for (int i = 0; i < mychklistbox.Items.Count; ++i)
50 if (checked_pos.Contains (i))
51 Assert.AreEqual (CheckState.Checked, mychklistbox.GetItemCheckState (i),"#4");
53 Assert.IsFalse (CheckState.Checked == mychklistbox.GetItemCheckState (i),"#5");
55 Assert.AreEqual (false, mychklistbox.CheckOnClick, "#6");
56 Assert.AreEqual (3, mychklistbox.Items.Count, "#7");
57 Assert.AreEqual (SelectionMode.One, mychklistbox.SelectionMode, "#8");
58 Assert.AreEqual (false , mychklistbox.ThreeDCheckBoxes, "#9");
63 [NUnit.Framework.Category ("NotWorking")]
64 public void DisplayMember_HandleCreated ()
66 MockItem itemA = new MockItem ("A1", 1);
67 MockItem itemB = new MockItem ("B2", 2);
68 MockItem itemC = new MockItem ("C3", 3);
69 MockItem itemD = new MockItem ("D4", 4);
70 MockItem itemE = new MockItem ("E5", 5);
71 MockItem itemF = new MockItem ("F6", 6);
73 CheckedListBox clb = new CheckedListBox ();
74 clb.Items.Add (itemA, true);
75 clb.Items.Add (itemC, false);
76 clb.Items.Add (itemB, true);
78 Form form = new Form ();
79 form.ShowInTaskbar = false;
80 form.Controls.Add (clb);
83 Assert.AreEqual (string.Empty, clb.Text, "#A1");
84 clb.SelectedIndex = 1;
85 Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#A2");
86 clb.DisplayMember = "Text";
87 Assert.AreEqual ("C3", clb.Text, "#A3");
88 clb.SelectedIndex = 2;
89 Assert.AreEqual ("B2", clb.Text, "#A4");
92 Assert.AreEqual (1, clb.SelectedIndex, "#B1");
93 Assert.AreEqual ("C3", clb.Text, "#B2");
95 Assert.AreEqual (1, clb.SelectedIndex, "#B3");
96 Assert.AreEqual ("C3", clb.Text, "#B4");
98 ArrayList itemList = new ArrayList ();
100 itemList.Add (itemE);
101 itemList.Add (itemF);
103 clb.DataSource = itemList;
104 clb.DisplayMember = string.Empty;
105 clb.SelectedIndex = 1;
107 Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#C1");
108 clb.DisplayMember = "Text";
109 Assert.AreEqual ("E5", clb.Text, "#C2");
110 clb.SelectedIndex = 2;
111 Assert.AreEqual ("F6", clb.Text, "#C3");
114 Assert.AreEqual (1, clb.SelectedIndex, "#D1");
115 Assert.AreEqual ("E5", clb.Text, "#D2");
117 Assert.AreEqual (1, clb.SelectedIndex, "#D3");
118 Assert.AreEqual ("E5", clb.Text, "#D4");
124 [NUnit.Framework.Category ("NotWorking")]
125 public void DisplayMember_HandleNotCreated ()
127 MockItem itemA = new MockItem ("A1", 1);
128 MockItem itemB = new MockItem ("B2", 2);
129 MockItem itemC = new MockItem ("C3", 3);
130 MockItem itemD = new MockItem ("D4", 4);
131 MockItem itemE = new MockItem ("E5", 5);
132 MockItem itemF = new MockItem ("F6", 6);
134 CheckedListBox clb = new CheckedListBox ();
135 clb.Items.Add (itemA, true);
136 clb.Items.Add (itemC, false);
137 clb.Items.Add (itemB, true);
139 Assert.AreEqual (string.Empty, clb.Text, "#A1");
140 clb.SelectedIndex = 1;
141 Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#A2");
142 clb.DisplayMember = "Text";
143 Assert.AreEqual ("C3", clb.Text, "#A3");
144 clb.SelectedIndex = 2;
145 Assert.AreEqual ("B2", clb.Text, "#A4");
148 Assert.AreEqual (1, clb.SelectedIndex, "#B1");
149 Assert.AreEqual ("C3", clb.Text, "#B2");
151 Assert.AreEqual (1, clb.SelectedIndex, "#B3");
152 Assert.AreEqual ("C3", clb.Text, "#B4");
154 ArrayList itemList = new ArrayList ();
155 itemList.Add (itemD);
156 itemList.Add (itemE);
157 itemList.Add (itemF);
159 clb.DataSource = itemList;
160 clb.DisplayMember = string.Empty;
161 clb.SelectedIndex = 1;
163 Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#C1");
164 clb.DisplayMember = "Text";
165 Assert.AreEqual ("C3", clb.Text, "#C2");
166 clb.SelectedIndex = 2;
167 Assert.AreEqual ("B2", clb.Text, "#C3");
171 public void GetItemCheckedTest ()
173 Form f = new Form ();
174 f.ShowInTaskbar = false;
176 CheckedListBox mychklistbox = new CheckedListBox ();
177 mychklistbox.Items.Add ("test1",true);
178 mychklistbox.Items.Add ("test2",CheckState.Indeterminate);
179 mychklistbox.Items.Add ("test3");
180 mychklistbox.Visible = true;
181 f.Controls.Add (mychklistbox);
182 Assert.AreEqual (true, mychklistbox.GetItemChecked (0), "#10");
183 Assert.AreEqual (true, mychklistbox.GetItemChecked (1), "#11");
184 Assert.AreEqual (false, mychklistbox.GetItemChecked (2), "#12");
189 [ExpectedException (typeof (ArgumentOutOfRangeException) )]
190 public void GetItemCheckedExceptionTest ()
192 CheckedListBox mychklistbox = new CheckedListBox ();
193 mychklistbox.Items.Add ("test1",true);
194 Assert.AreEqual (true, mychklistbox.GetItemChecked (1), "#13");
198 public void GetItemCheckStateTest ()
200 Form f = new Form ();
201 f.ShowInTaskbar = false;
203 CheckedListBox mychklistbox = new CheckedListBox ();
204 mychklistbox.Items.Add ("test1",true);
205 mychklistbox.Items.Add ("test2",CheckState.Indeterminate);
206 mychklistbox.Items.Add ("test3");
207 mychklistbox.Visible = true;
208 f.Controls.Add (mychklistbox);
209 Assert.AreEqual (CheckState.Checked, mychklistbox.GetItemCheckState (0), "#14");
210 Assert.AreEqual (CheckState.Indeterminate, mychklistbox.GetItemCheckState (1), "#15");
211 Assert.AreEqual (CheckState.Unchecked, mychklistbox.GetItemCheckState (2), "#16");
216 public void SelectionMode_Invalid ()
218 CheckedListBox clb = new CheckedListBox ();
221 clb.SelectionMode = SelectionMode.MultiSimple;
223 } catch (ArgumentException ex) {
224 // Multi selection not supported on CheckedListBox
225 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
226 Assert.IsNotNull (ex.Message, "#A3");
227 Assert.IsNull (ex.ParamName, "#A4");
228 Assert.IsNull (ex.InnerException, "#A5");
232 clb.SelectionMode = SelectionMode.MultiExtended;
234 } catch (ArgumentException ex) {
235 // Multi selection not supported on CheckedListBox
236 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
237 Assert.IsNotNull (ex.Message, "#B3");
238 Assert.IsNull (ex.ParamName, "#B4");
239 Assert.IsNull (ex.InnerException, "#B5");
243 clb.SelectionMode = (SelectionMode) 666;
245 } catch (InvalidEnumArgumentException ex) {
246 Assert.AreEqual (typeof (InvalidEnumArgumentException), ex.GetType (), "#C2");
247 Assert.IsNotNull (ex.Message, "#C3");
248 Assert.IsNotNull (ex.ParamName, "#C4");
249 Assert.AreEqual ("value", ex.ParamName, "#C5");
250 Assert.IsNull (ex.InnerException, "#C6");
255 public void SetItemCheckedTest ()
257 Form myform = new Form ();
258 myform.ShowInTaskbar = false;
259 myform.Visible = true;
260 CheckedListBox mychklistbox = new CheckedListBox ();
261 mychklistbox.Items.Add ("test1");
262 mychklistbox.Items.Add ("test2");
263 mychklistbox.Visible = true;
264 myform.Controls.Add (mychklistbox);
265 mychklistbox.SetItemChecked (0,true);
266 mychklistbox.SetItemChecked (1,false);
267 Assert.AreEqual (CheckState.Checked, mychklistbox.GetItemCheckState (0), "#17");
268 Assert.AreEqual (CheckState.Unchecked, mychklistbox.GetItemCheckState (1), "#18");
273 public void SetItemCheckStateTest ()
275 Form myform = new Form ();
276 myform.ShowInTaskbar = false;
277 myform.Visible = true;
278 CheckedListBox mychklistbox = new CheckedListBox ();
279 mychklistbox.Items.Add ("test1");
280 mychklistbox.Items.Add ("test2");
281 mychklistbox.Items.Add ("test3");
282 mychklistbox.Visible = true;
283 myform.Controls.Add (mychklistbox);
284 mychklistbox.SetItemCheckState (0,CheckState.Checked);
285 mychklistbox.SetItemCheckState (1,CheckState.Indeterminate);
286 mychklistbox.SetItemCheckState (2,CheckState.Unchecked);
287 Assert.AreEqual (CheckState.Checked, mychklistbox.GetItemCheckState (0), "#19");
288 Assert.AreEqual (CheckState.Indeterminate, mychklistbox.GetItemCheckState (1), "#20");
289 Assert.AreEqual (CheckState.Unchecked, mychklistbox.GetItemCheckState (2), "#21");
294 // Fails on 1.1 (both MS and Mono) because SelectedIndex is set
296 public void Text_SelectionMode_None ()
298 MockItem itemA = new MockItem ("A1", 1);
299 MockItem itemB = new MockItem ("B2", 2);
300 MockItem itemC = new MockItem ("C3", 3);
301 MockItem itemD = new MockItem ("C3", 4);
302 MockItem itemE = new MockItem ("", 5);
303 MockItem itemF = new MockItem (null, 6);
305 ArrayList itemList = new ArrayList ();
306 itemList.Add (itemA);
307 itemList.Add (itemC);
308 itemList.Add (itemB);
309 itemList.Add (itemD);
310 itemList.Add (itemE);
311 itemList.Add (itemF);
313 CheckedListBox clb = new CheckedListBox ();
314 clb.DisplayMember = "Text";
315 clb.DataSource = itemList;
316 clb.SelectionMode = SelectionMode.None;
318 Form form = new Form ();
319 form.ShowInTaskbar = false;
320 form.Controls.Add (clb);
323 Assert.AreEqual (string.Empty, clb.Text, "#A1");
324 Assert.AreEqual (-1, clb.SelectedIndex, "#A2");
327 Assert.AreEqual ("B2", clb.Text, "#B1");
328 Assert.AreEqual (-1, clb.SelectedIndex, "#B2");
331 Assert.AreEqual ("D", clb.Text, "#C1");
332 Assert.AreEqual (-1, clb.SelectedIndex, "#C2");
334 clb.Text = "Doesnotexist";
335 Assert.AreEqual ("Doesnotexist", clb.Text, "#D1");
336 Assert.AreEqual (-1, clb.SelectedIndex, "#D2");
338 clb.Text = string.Empty;
339 Assert.AreEqual (string.Empty, clb.Text, "#E1");
340 Assert.AreEqual (-1, clb.SelectedIndex, "#E2");
343 Assert.AreEqual (string.Empty, clb.Text, "#F1");
344 Assert.AreEqual (-1, clb.SelectedIndex, "#F2");
350 public void AllowSelection ()
352 MockCheckedListBox clb = new MockCheckedListBox ();
353 clb.SelectionMode = SelectionMode.None;
354 Assert.IsFalse (clb.allow_selection, "#1");
355 clb.SelectionMode = SelectionMode.One;
356 Assert.IsTrue (clb.allow_selection, "#2");
361 public void Text_SelectionMode_One ()
363 MockItem itemA = new MockItem ("A1", 1);
364 MockItem itemB = new MockItem ("B2", 2);
365 MockItem itemC = new MockItem ("C3", 3);
366 MockItem itemD = new MockItem ("C3", 4);
367 MockItem itemE = new MockItem ("", 5);
368 MockItem itemF = new MockItem (null, 6);
370 ArrayList itemList = new ArrayList ();
371 itemList.Add (itemA);
372 itemList.Add (itemC);
373 itemList.Add (itemB);
374 itemList.Add (itemD);
375 itemList.Add (itemE);
376 itemList.Add (itemF);
378 CheckedListBox clb = new CheckedListBox ();
379 clb.DisplayMember = "Text";
380 clb.DataSource = itemList;
381 clb.SelectionMode = SelectionMode.One;
383 Form form = new Form ();
384 form.ShowInTaskbar = false;
385 form.Controls.Add (clb);
388 Assert.AreEqual ("A1", clb.Text, "#A1");
389 Assert.AreEqual (0, clb.SelectedIndex, "#A2");
392 Assert.AreEqual ("B2", clb.Text, "#B1");
393 Assert.AreEqual (2, clb.SelectedIndex, "#B2");
394 Assert.AreEqual (1, clb.SelectedItems.Count, "#B3");
395 Assert.AreSame (itemB, clb.SelectedItems [0], "#B4");
398 Assert.AreEqual ("B2", clb.Text, "#C1");
399 Assert.AreEqual (2, clb.SelectedIndex, "#C2");
400 Assert.AreEqual (1, clb.SelectedItems.Count, "#C3");
401 Assert.AreSame (itemB, clb.SelectedItems [0], "#C4");
403 clb.Text = "Doesnotexist";
404 Assert.AreEqual ("B2", clb.Text, "#D1");
405 Assert.AreEqual (2, clb.SelectedIndex, "#D2");
406 Assert.AreEqual (1, clb.SelectedItems.Count, "#D3");
407 Assert.AreSame (itemB, clb.SelectedItems [0], "#D4");
410 Assert.AreEqual ("C3", clb.Text, "#E1");
411 Assert.AreEqual (1, clb.SelectedIndex, "#E2");
412 Assert.AreEqual (1, clb.SelectedItems.Count, "#E3");
413 Assert.AreSame (itemC, clb.SelectedItems [0], "#E4");
415 clb.Text = string.Empty;
416 Assert.AreEqual (string.Empty, clb.Text, "#F1");
417 Assert.AreEqual (4, clb.SelectedIndex, "#F2");
418 Assert.AreEqual (1, clb.SelectedItems.Count, "#F3");
419 Assert.AreSame (itemE, clb.SelectedItems [0], "#F4");
422 Assert.AreEqual (string.Empty, clb.Text, "#G1");
423 Assert.AreEqual (4, clb.SelectedIndex, "#G2");
424 Assert.AreEqual (1, clb.SelectedItems.Count, "#G3");
425 Assert.AreSame (itemE, clb.SelectedItems [0], "#G4");
427 clb.SelectedIndex = -1;
428 Assert.AreEqual ("A1", clb.Text, "#H1");
429 Assert.AreEqual (0, clb.SelectedIndex, "#H2");
430 Assert.AreEqual (1, clb.SelectedItems.Count, "#H3");
431 Assert.AreSame (itemA, clb.SelectedItems [0], "#H4");
437 [NUnit.Framework.Category ("NotWorking")]
438 public void ValueMember_HandleCreated ()
440 MockItem itemA = new MockItem ("A", 1);
441 MockItem itemB = new MockItem ("B", 2);
442 MockItem itemC = new MockItem ("C", 3);
443 MockItem itemD = new MockItem ("D", 4);
444 MockItem itemE = new MockItem ("E", 5);
446 CheckedListBox clb = new CheckedListBox ();
447 clb.Items.Add (itemA, true);
448 clb.Items.Add (itemC, false);
449 clb.Items.Add (itemB, true);
450 clb.SelectedIndex = 1;
452 Form form = new Form ();
453 form.ShowInTaskbar = false;
454 form.Controls.Add (clb);
457 Assert.AreEqual (string.Empty, clb.ValueMember, "#A1");
458 Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#A2");
459 Assert.IsNull (clb.SelectedValue, "#A3");
461 clb.ValueMember = "Value";
462 Assert.AreEqual ("Value", clb.ValueMember, "#B1");
463 Assert.AreEqual ("3", clb.Text, "#B2");
464 Assert.IsNull (clb.SelectedValue, "#B3");
466 clb.DisplayMember = "Text";
467 Assert.AreEqual ("Value", clb.ValueMember, "#C1");
468 Assert.AreEqual ("C", clb.Text, "#C2");
469 Assert.IsNull (clb.SelectedValue, "#C3");
471 ArrayList itemList = new ArrayList ();
472 itemList.Add (itemD);
473 itemList.Add (itemE);
475 clb.DataSource = itemList;
476 clb.ValueMember = string.Empty;
477 clb.DisplayMember = string.Empty;
478 clb.SelectedIndex = 1;
480 Assert.AreEqual (string.Empty, clb.ValueMember, "#D1");
481 Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#D2");
482 Assert.IsNotNull (clb.SelectedValue, "#D3");
483 Assert.AreSame (itemE, clb.SelectedValue, "#D4");
485 clb.ValueMember = "Value";
486 Assert.AreEqual ("Value", clb.ValueMember, "#E1");
487 Assert.AreEqual ("5", clb.Text, "#E2");
488 Assert.IsNotNull (clb.SelectedValue, "#E3");
489 Assert.AreEqual (5, clb.SelectedValue, "#E4");
491 clb.DisplayMember = "Text";
492 Assert.AreEqual ("Value", clb.ValueMember, "#F1");
493 Assert.AreEqual ("E", clb.Text, "#F2");
494 Assert.IsNotNull (clb.SelectedValue, "#F3");
495 Assert.AreEqual (5, clb.SelectedValue, "#F4");
501 [NUnit.Framework.Category ("NotWorking")]
502 public void ValueMember_HandleNotCreated ()
504 MockItem itemA = new MockItem ("A", 1);
505 MockItem itemB = new MockItem ("B", 2);
506 MockItem itemC = new MockItem ("C", 3);
507 MockItem itemD = new MockItem ("D", 4);
508 MockItem itemE = new MockItem ("E", 5);
510 CheckedListBox clb = new CheckedListBox ();
511 clb.Items.Add (itemA, true);
512 clb.Items.Add (itemC, false);
513 clb.Items.Add (itemB, true);
514 clb.SelectedIndex = 1;
516 Assert.AreEqual (string.Empty, clb.ValueMember, "#A1");
517 Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#A2");
518 Assert.IsNull (clb.SelectedValue, "#A3");
520 clb.ValueMember = "Value";
521 Assert.AreEqual ("Value", clb.ValueMember, "#B1");
522 Assert.AreEqual ("3", clb.Text, "#B2");
523 Assert.IsNull (clb.SelectedValue, "#B3");
525 clb.DisplayMember = "Text";
526 Assert.AreEqual ("Value", clb.ValueMember, "#C1");
527 Assert.AreEqual ("C", clb.Text, "#C2");
528 Assert.IsNull (clb.SelectedValue, "#C3");
530 ArrayList itemList = new ArrayList ();
531 itemList.Add (itemD);
532 itemList.Add (itemE);
534 clb.DataSource = itemList;
535 clb.ValueMember = string.Empty;
536 clb.DisplayMember = string.Empty;
537 clb.SelectedIndex = 1;
539 Assert.AreEqual (string.Empty, clb.ValueMember, "#D1");
540 Assert.AreEqual (itemC.GetType ().FullName, clb.Text, "#D2");
541 Assert.IsNull (clb.SelectedValue, "#D3");
543 clb.ValueMember = "Value";
544 Assert.AreEqual ("Value", clb.ValueMember, "#E1");
545 Assert.AreEqual ("3", clb.Text, "#E2");
546 Assert.IsNull (clb.SelectedValue, "#E3");
548 clb.DisplayMember = "Text";
549 Assert.AreEqual ("Value", clb.ValueMember, "#F1");
550 Assert.AreEqual ("C", clb.Text, "#F2");
551 Assert.IsNull (clb.SelectedValue, "#F3");
554 public class MockCheckedListBox : CheckedListBox
557 public bool allow_selection {
558 get { return base.AllowSelection; }
563 //--------------------------------------------------------------
564 // Add method checking add index and event when sorted and not.
566 public static object[] Items = new string[] { "c", "a", "d", "b", };
568 public static int[] ExpectedAddPositionsSorted = { 0, 0, 2, 1 };
569 public static int[] ExpectedAddPositionsUnsorted = { 0, 1, 2, 3 };
571 const string ExpectedEventsUnchecked = "";
572 const string ExpectedEventsCheckedSorted
573 = "ItemCheck, index 0, is: Unchecked, will be: Checked, item is: 'c'" + ", CheckedIndices: { }" + ";\n"
574 + "ItemCheck, index 0, is: Unchecked, will be: Checked, item is: 'a'" + ", CheckedIndices: { '1', }" + ";\n"
575 + "ItemCheck, index 2, is: Unchecked, will be: Checked, item is: 'd'" + ", CheckedIndices: { '0', '1', }" + ";\n"
576 + "ItemCheck, index 1, is: Unchecked, will be: Checked, item is: 'b'" + ", CheckedIndices: { '0', '2', '3', }" + ";\n";
577 const string ExpectedEventsCheckedUnsorted
578 = "ItemCheck, index 0, is: Unchecked, will be: Checked, item is: 'c'" + ", CheckedIndices: { }" + ";\n"
579 + "ItemCheck, index 1, is: Unchecked, will be: Checked, item is: 'a'" + ", CheckedIndices: { '0', }" + ";\n"
580 + "ItemCheck, index 2, is: Unchecked, will be: Checked, item is: 'd'" + ", CheckedIndices: { '0', '1', }" + ";\n"
581 + "ItemCheck, index 3, is: Unchecked, will be: Checked, item is: 'b'" + ", CheckedIndices: { '0', '1', '2', }" + ";\n";
583 class ItemCheckLoggingReceiver
585 public string _allItemCheckEvents;
587 public void HandleItemCheck (object sender, ItemCheckEventArgs e)
589 CheckedListBox clb = (CheckedListBox)sender;
591 = String.Format ("ItemCheck, index {0}, is: {1}, will be: {2}, item is: '{3}'" + ", CheckedIndices: {{ {4}}}" + ";\n",
592 e.Index, e.CurrentValue, e.NewValue, clb.Items[e.Index], Join (clb.CheckedIndices));
593 _allItemCheckEvents += text;
598 public void AddCheckedBoolToSorted ()
600 AddBoolItems (true, Items, true, ExpectedAddPositionsSorted, ExpectedEventsCheckedSorted);
604 public void AddUncheckedBoolToSorted ()
606 AddBoolItems (true, Items, false, ExpectedAddPositionsSorted, ExpectedEventsUnchecked);
610 public void AddCheckedBoolToUnsorted ()
612 AddBoolItems (false, Items, true, ExpectedAddPositionsUnsorted, ExpectedEventsCheckedUnsorted);
616 public void AddUncheckedBoolToUnsorted ()
618 AddBoolItems (false, Items, false, ExpectedAddPositionsUnsorted, ExpectedEventsUnchecked);
621 void AddBoolItems (bool sorted, object[] items, bool isChecked, int[] expectedAddPositions, string expectedEvents)
623 CheckedListBox clb = new CheckedListBox ();
625 ItemCheckLoggingReceiver target = new ItemCheckLoggingReceiver ();
626 clb.ItemCheck += new ItemCheckEventHandler (target.HandleItemCheck);
627 target._allItemCheckEvents = String.Empty;
628 ArrayList addedAtList = new ArrayList ();
629 foreach (object cur in items) {
630 int idx = clb.Items.Add (cur, isChecked);
631 addedAtList.Add (idx);
634 AssertAllItemsChecked (clb);
636 AssertAllItemsUnchecked (clb);
637 Assert.AreEqual ((Array)expectedAddPositions, (Array)addedAtList.ToArray (typeof (int)), "addedAtList");
638 Assert.AreEqual (expectedEvents, target._allItemCheckEvents, "events");
642 public void AddCheckedCheckStateToSorted ()
644 AddCheckStateItems (true, Items, CheckState.Checked, ExpectedAddPositionsSorted, ExpectedEventsCheckedSorted);
648 public void AddUncheckedCheckStateToSorted ()
650 AddCheckStateItems (true, Items, CheckState.Unchecked, ExpectedAddPositionsSorted, ExpectedEventsUnchecked);
654 public void AddCheckedCheckStateToUnsorted ()
656 AddCheckStateItems (false, Items, CheckState.Checked, ExpectedAddPositionsUnsorted, ExpectedEventsCheckedUnsorted);
660 public void AddUncheckedCheckStateToUnsorted ()
662 AddCheckStateItems (false, Items, CheckState.Unchecked, ExpectedAddPositionsUnsorted, ExpectedEventsUnchecked);
665 void AddCheckStateItems (bool sorted, object[] items, CheckState checkState, int[] expectedAddPositions, string expectedEvents)
667 CheckedListBox clb = new CheckedListBox ();
669 ItemCheckLoggingReceiver target = new ItemCheckLoggingReceiver ();
670 clb.ItemCheck += new ItemCheckEventHandler (target.HandleItemCheck);
671 target._allItemCheckEvents = String.Empty;
672 ArrayList addedAtList = new ArrayList ();
673 foreach (object cur in items) {
674 int idx = clb.Items.Add (cur, checkState);
675 addedAtList.Add (idx);
677 if (checkState != CheckState.Unchecked)
678 AssertAllItemsChecked (clb);
680 AssertAllItemsUnchecked (clb);
681 Assert.AreEqual ((Array)expectedAddPositions, (Array)addedAtList.ToArray (typeof (int)), "addedAtList");
682 Assert.AreEqual (expectedEvents, target._allItemCheckEvents, "events");
685 static void AssertAllItemsChecked (CheckedListBox clb)
687 //Dump("clb.Items", clb.Items);
688 //Dump("clb.CheckedIndices", clb.CheckedIndices);
689 //Dump("clb.CheckedItems", clb.CheckedItems);
690 Assert.AreEqual (clb.Items.Count, clb.CheckedIndices.Count, "checked count");
691 for (int i = 0; i < clb.Items.Count; ++i)
692 Assert.AreEqual (i, clb.CheckedIndices[i], "CheckedIndices[i] @" + i);
693 for (int i = 0; i < clb.Items.Count; ++i)
694 Assert.AreEqual (clb.Items[i], clb.CheckedItems[i], "CheckedItems[i] @" + i);
697 static void AssertAllItemsUnchecked (CheckedListBox clb)
699 Assert.AreEqual (0, clb.CheckedIndices.Count, "checked count");
700 Assert.AreEqual (clb.CheckedIndices.Count, clb.CheckedItems.Count, "checked consistency");
705 static string Join (IEnumerable list)
707 global::System.Text.StringBuilder bldr = new global::System.Text.StringBuilder ();
709 foreach (object cur in list) {
711 bldr.Append ("', '");
715 return bldr.ToString ();
718 //static void Dump (string name, IEnumerable list)
720 // Console.Write (name);
721 // Console.Write (" ");
725 //static void Dump (IEnumerable list)
727 // Console.WriteLine ("[" + Join (list) + "]");
731 // Check that if the ItemCheck event handler changes the NewValue property
732 // that the new value is used for the item state.
735 public void ItemCheckSetNewValue_Adding()
737 CheckedListBox clb = new CheckedListBox();
738 ItemCheckNewValueSetReceiver target = new ItemCheckNewValueSetReceiver();
739 clb.ItemCheck += new ItemCheckEventHandler(target.HandleItemCheck);
741 // Unchecked addition. Note these are not touched by the event
742 // as there's no 'check' action.
743 target._checkState = CheckState.Indeterminate;
744 idx = clb.Items.Add("aaU_x", false);
745 Assert.IsFalse(clb.CheckedIndices.Contains(idx), "U_x " + idx);
746 target._checkState = CheckState.Unchecked;
747 idx = clb.Items.Add("aaU_U", false);
748 Assert.IsFalse(clb.CheckedIndices.Contains(idx), "U_U " + idx);
749 target._checkState = CheckState.Checked;
750 idx = clb.Items.Add("aaU_C", false);
751 Assert.IsFalse(clb.CheckedIndices.Contains(idx), "U_C " + idx);
753 idx = clb.Items.Add("aaC_x", true);
754 Assert.IsTrue(clb.CheckedIndices.Contains(idx), "U_x " + idx);
755 target._checkState = CheckState.Unchecked;
756 idx = clb.Items.Add("aaC_U", true);
757 Assert.IsFalse(clb.CheckedIndices.Contains(idx), "C_U " + idx);
758 target._checkState = CheckState.Checked;
759 idx = clb.Items.Add("aaC_C", true);
760 Assert.IsTrue(clb.CheckedIndices.Contains(idx), "C_C " + idx);
764 public void ItemCheckSetNewValue_Setting()
766 CheckedListBox clb = new CheckedListBox();
767 ItemCheckNewValueSetReceiver target = new ItemCheckNewValueSetReceiver();
768 clb.Items.Add("aaaa");
769 clb.ItemCheck += new ItemCheckEventHandler(target.HandleItemCheck);
771 // Note here the SetItemChecked(idx, false) actions *do* raise an item
772 // check event so the result is touched by the event handler.
774 SetInitialState(clb, idx, true, target);
775 target._checkState = CheckState.Indeterminate;
776 clb.SetItemChecked(idx, false);
777 Assert.IsFalse(clb.CheckedIndices.Contains(idx), "C_U_x ");
778 SetInitialState(clb, idx, true, target);
779 target._checkState = CheckState.Unchecked;
780 clb.SetItemChecked(idx, false);
781 Assert.IsFalse(clb.CheckedIndices.Contains(idx), "C_U_U ");
782 SetInitialState(clb, idx, true, target);
783 target._checkState = CheckState.Checked;
784 clb.SetItemChecked(idx, false);
785 Assert.IsTrue(clb.CheckedIndices.Contains(idx), "C_U_C ");
787 SetInitialState(clb, idx, false, target);
788 target._checkState = CheckState.Indeterminate;
789 clb.SetItemChecked(idx, true);
790 Assert.IsTrue(clb.CheckedIndices.Contains(idx), "U_C_x ");
791 SetInitialState(clb, idx, false, target);
792 target._checkState = CheckState.Unchecked;
793 clb.SetItemChecked(idx, true);
794 Assert.IsFalse(clb.CheckedIndices.Contains(idx), "U_C_U ");
795 SetInitialState(clb, idx, false, target);
796 target._checkState = CheckState.Checked;
797 clb.SetItemChecked(idx, true);
798 Assert.IsTrue(clb.CheckedIndices.Contains(idx), "U_C_C ");
800 private void SetInitialState(CheckedListBox clb, int index, bool isChecked, ItemCheckNewValueSetReceiver target)
802 CheckState originalCS = target._checkState;
803 target._checkState = CheckState.Indeterminate; // No touchee in the event handler.
804 clb.SetItemChecked(index, isChecked);
805 target._checkState = originalCS;
808 class ItemCheckNewValueSetReceiver
810 public CheckState _checkState = CheckState.Indeterminate;
812 public void HandleItemCheck(object sender, ItemCheckEventArgs e)
814 CheckState originalNewValue = e.NewValue; //logging
815 bool changed = false; //logging
816 switch (_checkState) {
817 case CheckState.Unchecked:
818 e.NewValue = CheckState.Unchecked;
821 case CheckState.Checked:
822 e.NewValue = CheckState.Checked;
825 default: // No touchee!
826 global::System.Diagnostics.Debug.Assert(_checkState == CheckState.Indeterminate);
830 Console.WriteLine("ItemCheck, item#: {0,2}, current: {1,9}, new was: {2,9}{4}",
831 e.Index, e.CurrentValue, originalNewValue, e.NewValue,
832 (changed ? String.Format(", ! is: {0,9}", e.NewValue) : String.Empty));