2 // ComboBoxTest.cs: Test cases for ComboBox.
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
24 // Copyright (c) 2006 Matt Hargett
27 // Ritvik Mayank <mritvik@novell.com>
28 // Jordi Mas i Hernandez <jordi@ximian.com>
29 // Matt Hargett <matt@use.net>
34 using System.Collections;
35 using System.ComponentModel;
37 using System.Globalization;
38 using System.Reflection;
39 using System.Threading;
40 using System.Windows.Forms;
42 using NUnit.Framework;
43 using CategoryAttribute=NUnit.Framework.CategoryAttribute;
45 namespace MonoTests.System.Windows.Forms
48 public class ComboBoxTest : TestHelper
50 private CultureInfo _originalCulture;
53 protected override void SetUp ()
55 _originalCulture = Thread.CurrentThread.CurrentCulture;
60 protected override void TearDown ()
62 Thread.CurrentThread.CurrentCulture = _originalCulture;
67 public void TestNullSelectedText ()
69 ComboBox comboBox = new ComboBox ();
71 comboBox.Items.Add (text);
72 comboBox.SelectedIndex = 0;
73 comboBox.Select (0, text.Length);
74 comboBox.SelectedText = null;
76 Assert.AreEqual (String.Empty, comboBox.SelectedText);
80 public void DropDownStyle ()
82 ComboBox comboBox = new ComboBox ();
83 comboBox.Items.Add ("abc");
85 Form form = new Form ();
86 form.Controls.Add (comboBox);
89 Assert.AreEqual (ComboBoxStyle.DropDown, comboBox.DropDownStyle, "#1");
90 comboBox.DropDownStyle = ComboBoxStyle.Simple;
91 Assert.AreEqual (ComboBoxStyle.Simple, comboBox.DropDownStyle, "#2");
92 comboBox.DropDownStyle = ComboBoxStyle.DropDown;
93 Assert.AreEqual (ComboBoxStyle.DropDown, comboBox.DropDownStyle, "#3");
99 [Category ("NotWorking")]
100 public void InitialBoundValue ()
103 using (Form f = new Form ()) {
104 f.ShowInTaskbar = false;
106 DataTable t = new DataTable ();
107 t.Columns.Add ("displaymember");
108 t.Columns.Add ("valuemember");
109 t.Rows.Add (new object [] {"lower", "a"});
110 t.Rows.Add (new object [] {"upper", "A"});
112 // This test seems to prove that the SelectedItem is updated when:
113 // - We have a parent
114 // - We're setting either DisplayMember, ValueMember or DataSource.
116 comboBox1 = new ComboBox ();
117 comboBox1.DisplayMember = "displaymember";
118 comboBox1.ValueMember = "valuemember";
119 comboBox1.DataSource = t;
120 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
121 f.Controls.Add (comboBox1);
122 Assert.AreEqual (string.Empty, comboBox1.Text, "#??");
124 comboBox1 = new ComboBox ();
125 f.Controls.AddRange (new Control [] { comboBox1 });
126 comboBox1.DisplayMember = "displaymember";
127 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02-1");
128 comboBox1.ValueMember = "valuemember";
129 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02-1");
130 comboBox1.DataSource = t;
131 Assert.AreEqual ("lower", comboBox1.Text, "#A02");
132 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
133 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
135 comboBox1 = new ComboBox ();
136 comboBox1.DisplayMember = "displaymember";
137 comboBox1.ValueMember = "valuemember";
138 comboBox1.DataSource = t;
139 Assert.AreEqual (string.Empty, comboBox1.Text, "#A01");
140 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
141 Assert.AreEqual (string.Empty, comboBox1.Text, "#A04");
142 f.Controls.AddRange (new Control [] { comboBox1 });
143 Assert.AreEqual (string.Empty, comboBox1.Text, "#A04");
145 comboBox1 = new ComboBox ();
146 f.Controls.AddRange (new Control [] { comboBox1 });
147 comboBox1.DisplayMember = "displaymember";
148 comboBox1.ValueMember = "valuemember";
149 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02");
150 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
151 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02-1");
152 comboBox1.DataSource = t;
153 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
155 comboBox1 = new ComboBox ();
156 f.Controls.AddRange (new Control [] { comboBox1 });
157 comboBox1.DataSource = t;
158 Assert.AreEqual ("System.Data.DataRowView", comboBox1.Text, "#A03");
159 comboBox1.DisplayMember = "displaymember";
160 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
161 comboBox1.ValueMember = "valuemember";
162 Assert.AreEqual ("lower", comboBox1.Text, "#A02");
163 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
164 Assert.AreEqual ("lower", comboBox1.Text, "#A02-1");
167 comboBox1 = new ComboBox ();
168 comboBox1.DisplayMember = "displaymember";
169 comboBox1.ValueMember = "valuemember";
170 Assert.AreEqual ("", comboBox1.Text, "#A02");
171 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
172 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02-1");
173 comboBox1.DataSource = t;
174 Assert.AreEqual (string.Empty, comboBox1.Text, "#A03");
175 f.Controls.AddRange (new Control [] { comboBox1 });
176 Assert.AreEqual (string.Empty, comboBox1.Text, "#A03");
178 comboBox1 = new ComboBox ();
179 comboBox1.DataSource = t;
180 Assert.AreEqual ("", comboBox1.Text, "#A03");
181 comboBox1.DisplayMember = "displaymember";
182 Assert.AreEqual ("", comboBox1.Text, "#A03");
183 comboBox1.ValueMember = "valuemember";
184 Assert.AreEqual ("", comboBox1.Text, "#A02");
185 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
186 Assert.AreEqual ("", comboBox1.Text, "#A02-1");
187 f.Controls.AddRange (new Control [] { comboBox1 });
188 Assert.AreEqual ("", comboBox1.Text, "#A02-1");
191 comboBox1 = new ComboBox ();
192 f.Controls.AddRange (new Control [] { comboBox1 });
193 comboBox1.DisplayMember = "displaymember";
194 Assert.AreEqual ("", comboBox1.Text, "#A03");
195 comboBox1.ValueMember = "valuemember";
196 Assert.AreEqual ("", comboBox1.Text, "#A03");
197 comboBox1.DataSource = t;
198 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
199 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
200 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
202 comboBox1 = new ComboBox ();
203 f.Controls.AddRange (new Control [] { comboBox1 });
204 comboBox1.DisplayMember = "displaymember";
205 Assert.AreEqual ("", comboBox1.Text, "#A03");
206 comboBox1.ValueMember = "valuemember";
207 Assert.AreEqual ("", comboBox1.Text, "#A03");
208 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
209 Assert.AreEqual ("", comboBox1.Text, "#A03");
210 comboBox1.DataSource = t;
211 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
213 comboBox1 = new ComboBox ();
214 f.Controls.AddRange (new Control [] { comboBox1 });
215 comboBox1.ValueMember = "valuemember";
216 Assert.AreEqual ("", comboBox1.Text, "#A03");
217 comboBox1.DataSource = t;
218 Assert.AreEqual ("a", comboBox1.Text, "#A03");
219 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
220 Assert.AreEqual ("a", comboBox1.Text, "#A03");
221 comboBox1.DisplayMember = "displaymember";
222 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
224 comboBox1 = new ComboBox ();
225 comboBox1.DataSource = t;
226 Assert.AreEqual ("", comboBox1.Text, "#A03");
227 comboBox1.DisplayMember = "displaymember";
228 Assert.AreEqual ("", comboBox1.Text, "#A03");
229 comboBox1.ValueMember = "valuemember";
230 Assert.AreEqual ("", comboBox1.Text, "#A03");
231 f.Controls.AddRange (new Control [] { comboBox1 });
232 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
233 InitialBoundValue_dummy e = new InitialBoundValue_dummy ();
235 comboBox1.DataBindings.Add ("SelectedValue", e, "controlsrc");
236 Assert.AreEqual ("", comboBox1.Text, "#A03");
238 Assert.AreEqual ("", comboBox1.Text, "#A03");
240 // The real failing test
241 comboBox1 = new ComboBox ();
242 comboBox1.DisplayMember = "displaymember";
243 Assert.AreEqual ("", comboBox1.Text, "#A03");
244 comboBox1.ValueMember = "valuemember";
245 Assert.AreEqual ("", comboBox1.Text, "#A03");
246 comboBox1.DataSource = t;
247 Assert.AreEqual ("", comboBox1.Text, "#A03");
248 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
249 Assert.AreEqual ("", comboBox1.Text, "#A03");
250 f.Controls.AddRange (new Control [] { comboBox1 });
251 Assert.AreEqual ("", comboBox1.Text, "#A03");
253 Assert.AreEqual ("", comboBox1.Text, "#A03");
255 Assert.AreEqual ("", comboBox1.Text, "#bug");
258 @"<?xml version=""1.0"" standalone=""yes""?>
266 @"<?xml version=""1.0"" standalone=""yes""?>
278 using (Form frm = new Form ()) {
279 frm.ShowInTaskbar = false;
280 DataSet dsTable = new DataSet ();
281 dsTable.ReadXml (new StringReader (table));
282 DataSet dsLookup = new DataSet ();
283 dsLookup.ReadXml (new StringReader (lookup));
284 ComboBox cb = new ComboBox ();
285 cb.DataSource = dsLookup.Tables [0];
286 cb.DisplayMember = "nimi";
287 cb.ValueMember = "kood";
288 InitialBoundValue_dummy d = new InitialBoundValue_dummy();
289 d.controlsrc = "287";
290 cb.DataBindings.Add ("SelectedValue", d, "controlsrc");
291 frm.Controls.Add (cb);
292 Assert.AreEqual ("", cb.Text, "#01");
294 Assert.AreEqual ("SUCCESS", cb.Text, "#02");
299 class InitialBoundValue_dummy
302 public string controlsrc
310 public void ContextMenuTest ()
312 ComboBox cmb = new ComboBox ();
313 ContextMenu cm = new ContextMenu ();
315 Assert.IsNull (cmb.ContextMenu, "#1");
316 cmb.ContextMenu = cm;
317 Assert.AreSame (cmb.ContextMenu, cm, "#2");
318 cmb.DropDownStyle = ComboBoxStyle.DropDown;
319 Assert.AreSame (cmb.ContextMenu, cm, "#3");
320 cmb.DropDownStyle = ComboBoxStyle.DropDownList;
321 Assert.AreSame (cmb.ContextMenu, cm, "#4");
322 cmb.DropDownStyle = ComboBoxStyle.Simple;
323 Assert.AreSame (cmb.ContextMenu, cm, "#5");
328 public void DataBindingTest ()
331 @"<?xml version=""1.0"" standalone=""yes""?>
339 @"<?xml version=""1.0"" standalone=""yes""?>
351 using (Form frm = new Form ()) {
352 frm.ShowInTaskbar = false;
353 DataSet dsTable = new DataSet ();
354 dsTable.ReadXml (new StringReader (table));
355 DataSet dsLookup = new DataSet ();
356 dsLookup.ReadXml (new StringReader (lookup));
357 ComboBox cb = new ComboBox ();
358 cb.DataSource = dsLookup.Tables [0];
359 cb.DisplayMember = "nimi";
360 cb.ValueMember = "kood";
361 cb.DataBindings.Add ("SelectedValue", dsTable.Tables [0], "klient");
362 frm.Controls.Add (cb);
363 Assert.AreEqual ("", cb.Text, "#01");
365 Assert.AreEqual ("SUCCESS", cb.Text, "#02");
370 public void DataBindingTest2 ()
372 ComboBox cmb = new ComboBox ();
373 cmb.Items.Add (new MockItem ("Foo", 9));
374 cmb.Items.Add (new MockItem ("Bar", 6));
375 cmb.ValueMember = "Value";
376 cmb.DisplayMember = "Text";
378 Form form = new Form ();
379 form.Controls.Add (cmb);
382 cmb.SelectedIndex = 0;
383 Assert.AreEqual ("Foo", cmb.Text, "#1");
384 cmb.SelectedIndex = 1;
385 Assert.AreEqual ("Bar", cmb.Text, "#2");
391 public void ComboBoxPropertyTest ()
393 ComboBox mycmbbox = new ComboBox ();
394 Assert.AreEqual (DrawMode.Normal, mycmbbox.DrawMode, "#1");
395 Assert.AreEqual (ComboBoxStyle.DropDown, mycmbbox.DropDownStyle, "#2");
396 Assert.AreEqual (false, mycmbbox.DroppedDown, "#4");
397 Assert.AreEqual (true, mycmbbox.IntegralHeight, "#5");
398 Assert.AreEqual (0, mycmbbox.Items.Count, "#6");
399 //Assert.AreEqual (15, mycmbbox.ItemHeight, "#7"); // Note: Item height depends on the current font.
400 Assert.AreEqual (8, mycmbbox.MaxDropDownItems, "#8");
401 Assert.AreEqual (0, mycmbbox.MaxLength, "#9");
402 //Assert.AreEqual (20, mycmbbox.PreferredHeight, "#10");
403 // Note: Item height depends on the current font.
404 Assert.AreEqual (-1, mycmbbox.SelectedIndex, "#11");
405 Assert.AreEqual (null, mycmbbox.SelectedItem, "#12");
406 Assert.AreEqual ("", mycmbbox.SelectedText, "#13");
407 Assert.AreEqual (0, mycmbbox.SelectionLength, "#14");
408 Assert.AreEqual (0, mycmbbox.SelectionStart, "#15");
409 Assert.AreEqual (false, mycmbbox.Sorted, "#16");
410 Assert.AreEqual ("", mycmbbox.Text, "#17");
412 Assert.AreEqual (true, mycmbbox.AutoCompleteCustomSource != null, "#18");
413 Assert.AreEqual (AutoCompleteMode.None, mycmbbox.AutoCompleteMode, "#19");
414 Assert.AreEqual (AutoCompleteSource.None, mycmbbox.AutoCompleteSource, "#20");
416 mycmbbox.AutoCompleteCustomSource = null;
417 Assert.AreEqual (true, mycmbbox.AutoCompleteCustomSource != null, "#21");
419 Assert.AreEqual (ImageLayout.Tile, mycmbbox.BackgroundImageLayout, "#22");
420 Assert.AreEqual (null, mycmbbox.DataSource, "#23");
421 Assert.AreEqual (106, mycmbbox.DropDownHeight, "#24");
422 Assert.AreEqual (FlatStyle.Standard, mycmbbox.FlatStyle, "#25");
423 Assert.AreEqual ("{Width=0, Height=0}", mycmbbox.MaximumSize.ToString (), "#26");
424 Assert.AreEqual ("{Width=0, Height=0}", mycmbbox.MinimumSize.ToString (), "#27");
425 Assert.AreEqual ("{Left=0,Top=0,Right=0,Bottom=0}", mycmbbox.Padding.ToString (), "#28");
431 public void PreferredHeight ()
433 // PreferredHeight is not tied to ItemHeight like we had it
434 ComboBox cb = new ComboBox ();
436 int h = cb.PreferredHeight;
439 Assert.AreEqual (h, cb.PreferredHeight, "A2");
442 Assert.AreEqual (h, cb.PreferredHeight, "A3");
447 public void ResetTextTest ()
449 ComboBox cmbbox = new ComboBox ();
450 Assert.AreEqual ("", cmbbox.Text, "#01");
452 Assert.AreEqual ("abc", cmbbox.Text, "#02");
454 Assert.AreEqual ("", cmbbox.Text, "#03");
458 public void BackgroundImageLayoutTest ()
460 ComboBox cmbbox = new ComboBox ();
461 cmbbox.BackgroundImageLayout = ImageLayout.Stretch;
462 Assert.AreEqual (ImageLayout.Stretch, cmbbox.BackgroundImageLayout, "#01");
466 public void DropDownHeightTest ()
468 ComboBox cmbbox = new ComboBox ();
469 cmbbox.DropDownHeight = 225;
470 Assert.AreEqual (225, cmbbox.DropDownHeight, "#01");
471 cmbbox.DropDownHeight = 1;
472 Assert.AreEqual (1, cmbbox.DropDownHeight, "#02");
476 [ExpectedException (typeof (ArgumentOutOfRangeException))]
477 public void DropDownHeightExceptionTest1 ()
479 ComboBox cmbbox = new ComboBox ();
480 cmbbox.DropDownHeight = -225;
484 [ExpectedException (typeof (ArgumentOutOfRangeException))]
485 public void DropDownHeightExceptionTest2 ()
487 ComboBox cmbbox = new ComboBox ();
488 cmbbox.DropDownHeight = 0;
492 public void FlatStyleTest ()
494 ComboBox cmbbox = new ComboBox ();
495 cmbbox.FlatStyle = FlatStyle.Popup;
496 Assert.AreEqual (FlatStyle.Popup, cmbbox.FlatStyle, "#01");
500 [ExpectedException (typeof (InvalidEnumArgumentException))]
501 public void FlatStyleExceptionTest ()
503 ComboBox cmbbox = new ComboBox ();
504 cmbbox.FlatStyle = (FlatStyle) (-123);
508 public void MaximumSizeTest ()
510 ComboBox cmbbox = new ComboBox ();
511 cmbbox.MaximumSize = new Size (25, 25);
512 Assert.AreEqual ("{Width=25, Height=0}", cmbbox.MaximumSize.ToString (), "#01");
513 cmbbox.MaximumSize = new Size (50, 75);
514 Assert.AreEqual ("{Width=50, Height=0}", cmbbox.MaximumSize.ToString (), "#02");
518 public void MinumumSizeTest ()
520 ComboBox cmbbox = new ComboBox ();
521 cmbbox.MinimumSize = new Size (25, 25);
522 Assert.AreEqual ("{Width=25, Height=0}", cmbbox.MinimumSize.ToString (), "#1");
523 cmbbox.MinimumSize = new Size (50, 75);
524 Assert.AreEqual ("{Width=50, Height=0}", cmbbox.MinimumSize.ToString (), "#2");
528 public void PaddingTest ()
530 ComboBox cmbbox = new ComboBox ();
531 cmbbox.Padding = new Padding (21);
532 Assert.AreEqual ("{Left=21,Top=21,Right=21,Bottom=21}", cmbbox.Padding.ToString (), "#01");
537 public void BeginEndUpdateTest ()
539 Form myform = new Form ();
540 myform.ShowInTaskbar = false;
541 myform.Visible = true;
542 ComboBox cmbbox = new ComboBox ();
543 cmbbox.Items.Add ("A");
544 cmbbox.Visible = true;
545 myform.Controls.Add (cmbbox);
546 cmbbox.BeginUpdate ();
547 for (int x = 1 ; x < 5000 ; x++) {
548 cmbbox.Items.Add ("Item " + x.ToString ());
555 public void FindString ()
557 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
559 ComboBox cmbbox = new ComboBox ();
560 Assert.AreEqual (-1, cmbbox.FindString ("Hello"), "#A1");
561 Assert.AreEqual (-1, cmbbox.FindString (string.Empty), "#A2");
562 Assert.AreEqual (-1, cmbbox.FindString (null), "#A3");
563 Assert.AreEqual (-1, cmbbox.FindString ("Hola", -5), "#A4");
564 Assert.AreEqual (-1, cmbbox.FindString ("Hola", 40), "#A5");
566 cmbbox.Items.AddRange (new object [] { "in", "BADTest", "IN", "BAD", "Bad", "In" });
567 Assert.AreEqual (2, cmbbox.FindString ("I"), "#B1");
568 Assert.AreEqual (0, cmbbox.FindString ("in"), "#B2");
569 Assert.AreEqual (1, cmbbox.FindString ("BAD"), "#B3");
570 Assert.AreEqual (1, cmbbox.FindString ("Bad"), "#B4");
571 Assert.AreEqual (1, cmbbox.FindString ("b"), "#B5");
572 Assert.AreEqual (0, cmbbox.FindString (string.Empty), "#B6");
573 Assert.AreEqual (-1, cmbbox.FindString (null), "#B7");
575 Assert.AreEqual (3, cmbbox.FindString ("b", 2), "#C1");
576 Assert.AreEqual (5, cmbbox.FindString ("I", 3), "#C2");
577 Assert.AreEqual (4, cmbbox.FindString ("B", 3), "#C3");
578 Assert.AreEqual (1, cmbbox.FindString ("B", 4), "#C4");
579 Assert.AreEqual (5, cmbbox.FindString ("I", 4), "#C5");
580 Assert.AreEqual (4, cmbbox.FindString ("BA", 3), "#C6");
581 Assert.AreEqual (0, cmbbox.FindString ("i", -1), "#C7");
582 Assert.AreEqual (3, cmbbox.FindString (string.Empty, 2), "#C8");
583 Assert.AreEqual (-1, cmbbox.FindString (null, 1), "#C9");
585 cmbbox.Items.Add (string.Empty);
586 Assert.AreEqual (0, cmbbox.FindString (string.Empty), "#D1");
587 Assert.AreEqual (-1, cmbbox.FindString (null), "#D2");
589 Assert.AreEqual (4, cmbbox.FindString (string.Empty, 3), "#E1");
590 Assert.AreEqual (-1, cmbbox.FindString (null, 99), "#E2");
591 Assert.AreEqual (-1, cmbbox.FindString (null, -5), "#E3");
595 public void FindString_StartIndex_ItemCount ()
597 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
599 ComboBox cmbbox = new ComboBox ();
600 cmbbox.Items.AddRange (new object [] { "BA", "BB" });
602 Assert.AreEqual (0, cmbbox.FindString ("b", 1));
605 cmbbox.FindString ("b", 1);
607 } catch (ArgumentOutOfRangeException ex) {
608 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
609 Assert.IsNull (ex.InnerException, "#3");
610 Assert.IsNotNull (ex.Message, "#4");
611 Assert.IsNotNull (ex.ParamName, "#5");
612 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
618 public void FindString_StartIndex_Min ()
620 ComboBox cmbbox = new ComboBox ();
621 cmbbox.Items.AddRange (new object [] { "ACBD", "ABDC", "ACBD", "ABCD" });
623 cmbbox.FindString ("Hola", -2);
625 } catch (ArgumentOutOfRangeException ex) {
626 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
627 Assert.IsNull (ex.InnerException, "#3");
628 Assert.IsNotNull (ex.Message, "#4");
629 Assert.IsNotNull (ex.ParamName, "#5");
630 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
635 public void FindString_StartIndex_Max ()
637 ComboBox cmbbox = new ComboBox ();
638 cmbbox.Items.AddRange (new object [] { "ACBD", "ABDC", "ACBD", "ABCD" });
640 cmbbox.FindString ("Hola", 4);
642 } catch (ArgumentOutOfRangeException ex) {
643 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
644 Assert.IsNull (ex.InnerException, "#3");
645 Assert.IsNotNull (ex.Message, "#4");
646 Assert.IsNotNull (ex.ParamName, "#5");
647 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
652 public void FindStringExact ()
654 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
656 ComboBox cmbbox = new ComboBox ();
657 Assert.AreEqual (-1, cmbbox.FindStringExact ("Hello"), "#A1");
658 Assert.AreEqual (-1, cmbbox.FindStringExact (string.Empty), "#A2");
659 Assert.AreEqual (-1, cmbbox.FindStringExact (null), "#A3");
660 Assert.AreEqual (-1, cmbbox.FindStringExact ("Hola", -5), "#A4");
661 Assert.AreEqual (-1, cmbbox.FindStringExact ("Hola", 40), "#A5");
663 cmbbox.Items.AddRange (new object [] { "in", "BADTest", "IN", "BAD", "Bad", "In" });
664 Assert.AreEqual (2, cmbbox.FindStringExact ("IN"), "#B1");
665 Assert.AreEqual (0, cmbbox.FindStringExact ("in"), "#B2");
666 Assert.AreEqual (3, cmbbox.FindStringExact ("BAD"), "#B3");
667 Assert.AreEqual (3, cmbbox.FindStringExact ("bad"), "#B4");
668 Assert.AreEqual (-1, cmbbox.FindStringExact ("B"), "#B5");
669 Assert.AreEqual (-1, cmbbox.FindStringExact ("NonExistant"), "#B6");
670 Assert.AreEqual (-1, cmbbox.FindStringExact (string.Empty), "#B7");
671 Assert.AreEqual (-1, cmbbox.FindStringExact (null), "#B8");
673 Assert.AreEqual (2, cmbbox.FindStringExact ("In", 1), "#C1");
674 Assert.AreEqual (5, cmbbox.FindStringExact ("In", 2), "#C2");
675 Assert.AreEqual (4, cmbbox.FindStringExact ("BaD", 3), "#C3");
676 Assert.AreEqual (3, cmbbox.FindStringExact ("bad", -1), "#C4");
677 Assert.AreEqual (5, cmbbox.FindStringExact ("In", 4), "#C5");
678 Assert.AreEqual (3, cmbbox.FindStringExact ("bad", 4), "#C6");
679 Assert.AreEqual (-1, cmbbox.FindStringExact ("B", 4), "#C7");
680 Assert.AreEqual (-1, cmbbox.FindStringExact ("BADNOT", 0), "#C8");
681 Assert.AreEqual (-1, cmbbox.FindStringExact ("i", -1), "#C9");
682 Assert.AreEqual (-1, cmbbox.FindStringExact (string.Empty, 2), "#C10");
683 Assert.AreEqual (-1, cmbbox.FindStringExact (null, 1), "#C11");
685 cmbbox.Items.Add (string.Empty);
686 Assert.AreEqual (6, cmbbox.FindStringExact (string.Empty), "#D1");
687 Assert.AreEqual (-1, cmbbox.FindStringExact (null), "#D2");
689 Assert.AreEqual (6, cmbbox.FindStringExact (string.Empty, 3), "#E1");
690 Assert.AreEqual (-1, cmbbox.FindStringExact (null, 99), "#E2");
691 Assert.AreEqual (-1, cmbbox.FindStringExact (null, -5), "#E3");
695 public void FindStringExact_StartIndex_ItemCount ()
697 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
699 ComboBox cmbbox = new ComboBox ();
700 cmbbox.Items.AddRange (new object [] { "AB", "BA", "AB", "BA" });
702 Assert.AreEqual (1, cmbbox.FindStringExact ("BA", 3));
705 cmbbox.FindString ("BA", 3);
707 } catch (ArgumentOutOfRangeException ex) {
708 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
709 Assert.IsNull (ex.InnerException, "#3");
710 Assert.IsNotNull (ex.Message, "#4");
711 Assert.IsNotNull (ex.ParamName, "#5");
712 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
718 public void FindStringExact_StartIndex_Min ()
720 ComboBox cmbbox = new ComboBox ();
721 cmbbox.Items.AddRange (new object [] { "ACBD", "ABDC", "ACBD", "ABCD" });
723 cmbbox.FindStringExact ("Hola", -2);
725 } catch (ArgumentOutOfRangeException ex) {
726 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
727 Assert.IsNull (ex.InnerException, "#3");
728 Assert.IsNotNull (ex.Message, "#4");
729 Assert.IsNotNull (ex.ParamName, "#5");
730 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
735 public void FindStringExact_StartIndex_Max ()
737 ComboBox cmbbox = new ComboBox ();
738 cmbbox.Items.AddRange (new object [] { "ACBD", "ABDC", "ACBD", "ABCD" });
740 cmbbox.FindStringExact ("Hola", 4);
742 } catch (ArgumentOutOfRangeException ex) {
743 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
744 Assert.IsNull (ex.InnerException, "#3");
745 Assert.IsNotNull (ex.Message, "#4");
746 Assert.IsNotNull (ex.ParamName, "#5");
747 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
752 public void GetItemHeightTest ()
754 ComboBox cmbbox = new ComboBox ();
755 cmbbox.Items.Add ("ABC");
756 cmbbox.Items.Add ("BCD");
757 cmbbox.Items.Add ("DEF");
759 x = cmbbox.GetItemHeight (x);
760 Assert.IsTrue (cmbbox.ItemHeight > 0, "#21");
768 [ExpectedException (typeof (InvalidEnumArgumentException))]
769 public void DropDownStyleException ()
771 ComboBox cmbbox = new ComboBox ();
772 cmbbox.DropDownStyle = (ComboBoxStyle) 10;
776 [ExpectedException (typeof (InvalidEnumArgumentException))]
777 public void DrawModeException ()
779 ComboBox cmbbox = new ComboBox ();
780 cmbbox.DrawMode = (DrawMode) 10;
784 public void DropDownWidth ()
786 ComboBox cmbbox = new ComboBox ();
787 Assert.AreEqual (121, cmbbox.DropDownWidth, "#A1");
788 cmbbox.DropDownWidth = 1;
789 Assert.AreEqual (1, cmbbox.DropDownWidth, "#A2");
792 cmbbox.DropDownWidth = 0;
796 catch (ArgumentOutOfRangeException ex) {
797 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
798 Assert.IsNotNull (ex.Message, "#B3");
799 Assert.IsNotNull (ex.ParamName, "#B4");
800 Assert.AreEqual ("DropDownWidth", ex.ParamName, "#B5");
801 Assert.IsNull (ex.InnerException, "#B6");
804 catch (ArgumentException ex) {
805 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
806 Assert.IsNotNull (ex.Message, "#B3");
807 Assert.IsNull (ex.ParamName, "#B4");
808 Assert.IsNull (ex.InnerException, "#B5");
814 public void ItemHeight ()
816 ComboBox cmbbox = new ComboBox ();
817 Assert.IsTrue (cmbbox.ItemHeight >= 1, "#A1");
818 cmbbox.ItemHeight = 1;
819 Assert.AreEqual (1, cmbbox.ItemHeight, "#A2");
822 cmbbox.ItemHeight = 0;
826 catch (ArgumentOutOfRangeException ex) {
827 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
828 Assert.IsNotNull (ex.Message, "#B3");
829 Assert.IsNotNull (ex.ParamName, "#B4");
830 Assert.AreEqual ("ItemHeight", ex.ParamName, "#B5");
831 Assert.IsNull (ex.InnerException, "#B6");
834 catch (ArgumentException ex) {
835 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
836 Assert.IsNotNull (ex.Message, "#B3");
837 Assert.IsNull (ex.ParamName, "#B4");
838 Assert.IsNull (ex.InnerException, "#B5");
844 [ExpectedException (typeof (ArgumentOutOfRangeException))]
845 public void SelectedIndexException ()
847 ComboBox cmbbox = new ComboBox ();
848 cmbbox.SelectedIndex = -2;
854 private bool eventFired;
855 private DrawItemEventArgs drawItemsArgs;
856 private void DrawItemEventH (object sender, DrawItemEventArgs e)
862 private void GenericHandler (object sender, EventArgs e)
867 [Ignore ("Bugs in X11 prevent this test to run properly")]
868 public void DrawItemEventTest ()
871 drawItemsArgs = null;
872 Form myform = new Form ();
873 myform.ShowInTaskbar = false;
874 ComboBox cmbbox = new ComboBox ();
875 cmbbox.DropDownStyle = ComboBoxStyle.Simple;
876 cmbbox.DrawMode = DrawMode.OwnerDrawFixed;
877 cmbbox.DrawItem += new DrawItemEventHandler (DrawItemEventH);
879 myform.Controls.Add (cmbbox);
880 cmbbox.Items.AddRange(new object[] {"Item1"});
882 myform.Visible = true;
883 cmbbox.Visible = true;
886 Assert.AreEqual (true, eventFired, "DW1");
887 Assert.AreEqual (0, drawItemsArgs.Index, "DW2");
892 public void DropDownStyleEventTest ()
895 ComboBox cmbbox = new ComboBox ();
896 cmbbox.DropDownStyleChanged += new EventHandler (GenericHandler);
897 cmbbox.DropDownStyle = ComboBoxStyle.Simple;
899 Assert.AreEqual (true, eventFired, "DI1");
903 public void SelectedIndexTest ()
906 ComboBox cmbbox = new ComboBox ();
907 cmbbox.Items.AddRange(new object[] {"Item1", "Item2"});
908 cmbbox.SelectedIndexChanged += new EventHandler (GenericHandler);
909 cmbbox.SelectedIndex = 1;
910 Assert.AreEqual (true, eventFired, "SI1");
914 public void SelectionWithAdd()
916 ComboBox cb = new ComboBox();
917 cb.SelectedIndexChanged += new EventHandler(GenericHandler);
918 cb.Items.Add("Item 1");
919 cb.Items.Add("Item 3");
920 cb.SelectedIndex = 1;
922 cb.Items.Add("Item 4");
923 Assert.AreEqual(1, cb.SelectedIndex, "SWA1");
924 Assert.AreEqual(false, eventFired, "SWA2");
926 cb.SelectedIndex = 1;
928 cb.Items.Add("Item 5");
929 Assert.AreEqual(1, cb.SelectedIndex, "SWA3");
930 Assert.AreEqual("Item 3", cb.SelectedItem, "SWA4");
931 Assert.AreEqual(false, eventFired, "SWA5");
932 cb.SelectedIndex = 1;
934 cb.Items.Add("Item 2");
935 Assert.AreEqual(1, cb.SelectedIndex, "SWA6");
936 Assert.AreEqual("Item 2", cb.SelectedItem, "SWA7");
937 Assert.AreEqual(false, eventFired, "SWA8");
941 public void SelectionWithInsert()
943 ComboBox cb = new ComboBox();
944 cb.SelectedIndexChanged += new EventHandler(GenericHandler);
945 cb.Items.Add("Item 1");
946 cb.SelectedIndex = 0;
948 cb.Items.Insert(0, "Item 2");
949 Assert.AreEqual(0, cb.SelectedIndex, "SWI1");
950 Assert.AreEqual(false, eventFired, "SWI2");
954 public void SelectionWithClear()
956 ComboBox cb = new ComboBox();
957 cb.SelectedIndexChanged += new EventHandler(GenericHandler);
958 cb.Items.Add("Item 1");
959 cb.SelectedIndex = 0;
962 Assert.AreEqual(-1, cb.SelectedIndex, "SWC1");
963 Assert.AreEqual(false, eventFired, "SWC2");
966 // Bug #333750 - DisplayMember assignation
967 // when ComboBox already has a BindingContext BUT
968 // handle hasn't been created yet.
970 public void SelectedTextWithBindingTest ()
972 Form form = new Form ();
973 form.ShowInTaskbar = false;
974 ComboBox cb = new ComboBox ();
977 MockItem [] items = new MockItem [] {
978 new MockItem ("A", 0),
979 new MockItem ("B", 1),
980 new MockItem ("C", 2)
983 cb.DataSource = items;
984 cb.DisplayMember = "Text";
988 Assert.AreEqual ("A", cb.SelectedText, "#A1");
994 public void SortedTest()
996 ComboBox mycb = new ComboBox();
997 Assert.AreEqual(false, mycb.Sorted, "#1");
998 mycb.Items.Add("Item 2");
999 mycb.Items.Add("Item 1");
1000 Assert.AreEqual("Item 2", mycb.Items[0], "#2");
1001 Assert.AreEqual("Item 1", mycb.Items[1], "#3");
1003 Assert.AreEqual(true, mycb.Sorted, "#4");
1004 Assert.AreEqual("Item 1", mycb.Items[0], "#5");
1005 Assert.AreEqual("Item 2", mycb.Items[1], "#6");
1006 mycb.Sorted = false;
1007 Assert.AreEqual(false, mycb.Sorted, "#7");
1008 Assert.AreEqual("Item 1", mycb.Items[0], "#8");
1009 Assert.AreEqual("Item 2", mycb.Items[1], "#9");
1013 public void SortedAddTest()
1015 ComboBox mycb = new ComboBox();
1016 mycb.Items.Add("Item 2");
1017 mycb.Items.Add("Item 1");
1019 Assert.AreEqual("Item 1", mycb.Items[0], "#I1");
1020 Assert.AreEqual("Item 2", mycb.Items[1], "#I2");
1024 public void SortedInsertTest()
1026 ComboBox mycb = new ComboBox();
1027 mycb.Items.Add("Item 2");
1028 mycb.Items.Add("Item 1");
1030 mycb.Items.Insert (0, "Item 3");
1031 Assert.AreEqual("Item 1", mycb.Items[0], "#J1");
1032 Assert.AreEqual("Item 2", mycb.Items[1], "#J2");
1033 Assert.AreEqual("Item 3", mycb.Items[2], "#J3");
1037 public void SortedSelectionInteractions()
1039 ComboBox cb = new ComboBox();
1040 cb.SelectedIndexChanged += new EventHandler(GenericHandler);
1041 cb.Items.Add("Item 1");
1042 cb.Items.Add("Item 2");
1043 cb.Items.Add("Item 3");
1044 cb.SelectedIndex = 1;
1047 Assert.AreEqual(-1, cb.SelectedIndex, "#SSI1");
1048 Assert.AreEqual(true, eventFired, "#SSI2");
1049 cb.SelectedIndex = 1;
1052 Assert.AreEqual(1, cb.SelectedIndex, "#SSI3");
1053 Assert.AreEqual(false, eventFired, "#SSI4");
1054 cb.SelectedIndex = 1;
1057 Assert.AreEqual(-1, cb.SelectedIndex, "#SSI5");
1058 Assert.AreEqual(true, eventFired, "#SSI6");
1062 public void Text_DropDown ()
1064 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
1066 ComboBox cmbbox = new ComboBox ();
1067 Assert.IsNotNull (cmbbox.Text, "#A1");
1068 Assert.AreEqual (string.Empty, cmbbox.Text, "#A2");
1069 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#A3");
1071 cmbbox.Items.Add ("Another");
1072 cmbbox.Items.Add ("Bad");
1073 cmbbox.Items.Add ("IN");
1074 cmbbox.Items.Add ("Combobox");
1075 cmbbox.Items.Add ("BAD");
1076 cmbbox.Items.Add ("iN");
1077 cmbbox.Items.Add ("Bad");
1079 Assert.IsNotNull (cmbbox.Text, "#B1");
1080 Assert.AreEqual (string.Empty, cmbbox.Text, "#B2");
1081 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#B3");
1083 cmbbox.SelectedIndex = 3;
1084 Assert.IsNotNull (cmbbox.Text, "#C1");
1085 Assert.AreEqual ("Combobox", cmbbox.Text, "#C2");
1086 Assert.AreEqual (3, cmbbox.SelectedIndex, "#C3");
1088 cmbbox.Text = string.Empty;
1089 Assert.IsNotNull (cmbbox.Text, "#D1");
1090 Assert.AreEqual (string.Empty, cmbbox.Text, "#D2");
1091 Assert.AreEqual (3, cmbbox.SelectedIndex, "#D3");
1093 cmbbox.SelectedIndex = 1;
1094 Assert.IsNotNull (cmbbox.Text, "#E1");
1095 Assert.AreEqual ("Bad", cmbbox.Text, "#E2");
1096 Assert.AreEqual (1, cmbbox.SelectedIndex, "#E3");
1099 Assert.IsNotNull (cmbbox.Text, "#F1");
1100 Assert.AreEqual (string.Empty, cmbbox.Text, "#F2");
1101 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#F3");
1103 cmbbox.SelectedIndex = 0;
1105 Assert.IsNotNull (cmbbox.Text, "#G1");
1106 Assert.AreEqual ("Q", cmbbox.Text, "#G2");
1107 Assert.AreEqual (0, cmbbox.SelectedIndex, "#G3");
1110 Assert.IsNotNull (cmbbox.Text, "#H1");
1111 Assert.AreEqual ("B", cmbbox.Text, "#H2");
1112 Assert.AreEqual (0, cmbbox.SelectedIndex, "#H3");
1114 cmbbox.Text = "BAD";
1115 Assert.IsNotNull (cmbbox.Text, "#I1");
1116 Assert.AreEqual ("BAD", cmbbox.Text, "#I2");
1117 Assert.AreEqual (4, cmbbox.SelectedIndex, "#I3");
1119 cmbbox.Text = "BAD";
1120 Assert.IsNotNull (cmbbox.Text, "#J1");
1121 Assert.AreEqual ("BAD", cmbbox.Text, "#J2");
1122 Assert.AreEqual (4, cmbbox.SelectedIndex, "#J3");
1124 cmbbox.Text = "baD";
1125 Assert.IsNotNull (cmbbox.Text, "#K1");
1126 Assert.AreEqual ("Bad", cmbbox.Text, "#K2");
1127 Assert.AreEqual (1, cmbbox.SelectedIndex, "#K3");
1129 cmbbox.SelectedIndex = -1;
1131 Assert.IsNotNull (cmbbox.Text, "#L1");
1132 Assert.AreEqual ("E", cmbbox.Text, "#L2");
1133 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#L3");
1136 Assert.IsNotNull (cmbbox.Text, "#M1");
1137 Assert.AreEqual ("iN", cmbbox.Text, "#M2");
1138 Assert.AreEqual (5, cmbbox.SelectedIndex, "#M3");
1141 Assert.IsNotNull (cmbbox.Text, "#N1");
1142 Assert.AreEqual ("IN", cmbbox.Text, "#N2");
1143 Assert.AreEqual (2, cmbbox.SelectedIndex, "#N3");
1145 cmbbox.Text = "Badd";
1146 Assert.IsNotNull (cmbbox.Text, "#O1");
1147 Assert.AreEqual ("Badd", cmbbox.Text, "#O2");
1148 Assert.AreEqual (2, cmbbox.SelectedIndex, "#O3");
1150 cmbbox.SelectedIndex = -1;
1151 Assert.IsNotNull (cmbbox.Text, "#P1");
1152 Assert.AreEqual (string.Empty, cmbbox.Text, "#P2");
1153 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#P3");
1155 cmbbox.Text = "Something";
1156 Assert.IsNotNull (cmbbox.Text, "#Q1");
1157 Assert.AreEqual ("Something", cmbbox.Text, "#Q2");
1158 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#Q3");
1160 cmbbox.SelectedIndex = -1;
1161 Assert.IsNotNull (cmbbox.Text, "#R1");
1162 Assert.AreEqual ("Something", cmbbox.Text, "#R2");
1163 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#R3");
1166 Assert.IsNotNull (cmbbox.Text, "#S1");
1167 Assert.AreEqual (string.Empty, cmbbox.Text, "#S2");
1168 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#S3");
1172 public void Text_DataBinding ()
1174 ArrayList objects = new ArrayList ();
1175 objects.Add (new MockItem ("A", 0));
1176 objects.Add (new MockItem ("B", 1));
1178 ComboBox cb = new ComboBox ();
1179 cb.BindingContext = new BindingContext ();
1180 cb.DataSource = objects;
1181 cb.DisplayMember = "Text";
1183 Assert.AreEqual ("A", cb.Text, "#A1");
1184 Assert.AreEqual ("A", ((MockItem)cb.SelectedItem).Text, "#B2");
1185 Assert.AreEqual (0, ((MockItem)cb.SelectedItem).Value, "#B3");
1188 Assert.AreEqual ("B", cb.Text, "#B1");
1189 Assert.AreEqual ("B", ((MockItem)cb.SelectedItem).Text, "#B2");
1190 Assert.AreEqual (1, ((MockItem)cb.SelectedItem).Value, "#B3");
1192 // the text will change graphically, but Text and
1193 // SelectedItem will keep their previous valid values.
1194 cb.Text = "dontexist";
1195 Assert.AreEqual ("B", ((MockItem)cb.SelectedItem).Text, "#C2");
1196 Assert.AreEqual (1, ((MockItem)cb.SelectedItem).Value, "#C3");
1199 [Test] // bug 360862
1200 public void SizeChangesAtCreateHandle ()
1202 ComboBox cb = new ComboBox ();
1203 cb.Font = new Font ("Arial", 24f);
1205 int original = cb.Height;
1207 IntPtr h = cb.Handle;
1209 Assert.IsTrue (cb.Height > original, string.Format ("ComboBox height ({0}) should be bigger than original ({1})", cb.Height, original));
1213 public void Bug424270 ()
1215 ComboBox cb = new ComboBox ();
1216 cb.Items.Add ("ab");
1218 cb.SelectedIndex = 0;
1220 Assert.AreEqual (0, cb.SelectedIndex, "A1");
1221 Assert.AreEqual ("ab", cb.SelectedItem, "A2");
1223 cb.SelectedItem = null;
1225 Assert.AreEqual (-1, cb.SelectedIndex, "A3");
1226 Assert.AreEqual (null, cb.SelectedItem, "A4");
1231 public void BehaviorAutoSize ()
1233 if (TestHelper.RunningOnUnix)
1234 Assert.Ignore ("Depends on font measurements, corresponds to windows");
1236 Form f = new Form ();
1237 f.ShowInTaskbar = false;
1241 Image i = new Bitmap (20, 20);
1242 String s = "My test string";
1244 CheckBox b = new CheckBox ();
1245 Size s_size = TextRenderer.MeasureText (s, b.Font);
1247 b.UseCompatibleTextRendering = false;
1248 b.Size = new Size (5, 5);
1254 b.TextImageRelation = TextImageRelation.Overlay;
1255 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A1");
1256 b.TextImageRelation = TextImageRelation.ImageAboveText;
1257 b.Size = new Size (5, 5);
1258 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A2");
1259 b.TextImageRelation = TextImageRelation.ImageBeforeText;
1260 b.Size = new Size (5, 5);
1261 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A3");
1262 b.TextImageRelation = TextImageRelation.TextAboveImage;
1263 b.Size = new Size (5, 5);
1264 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A4");
1265 b.TextImageRelation = TextImageRelation.TextBeforeImage;
1266 b.Size = new Size (5, 5);
1267 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A5");
1271 b.TextImageRelation = TextImageRelation.Overlay;
1272 b.Size = new Size (5, 5);
1273 Assert.AreEqual (new Size (s_size.Width + 19, i.Height), b.Size, "A6");
1274 b.TextImageRelation = TextImageRelation.ImageAboveText;
1275 b.Size = new Size (5, 5);
1276 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + i.Height + 4), b.Size, "A7");
1277 b.TextImageRelation = TextImageRelation.ImageBeforeText;
1278 b.Size = new Size (5, 5);
1279 Assert.AreEqual (new Size (s_size.Width + i.Width + 19, i.Height), b.Size, "A8");
1280 b.TextImageRelation = TextImageRelation.TextAboveImage;
1281 b.Size = new Size (5, 5);
1282 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + i.Height + 4), b.Size, "A9");
1283 b.TextImageRelation = TextImageRelation.TextBeforeImage;
1284 b.Size = new Size (5, 5);
1285 Assert.AreEqual (new Size (s_size.Width + i.Width + 19, i.Height), b.Size, "A10");
1288 b.Text = string.Empty;
1289 b.TextImageRelation = TextImageRelation.Overlay;
1290 b.Size = new Size (5, 5);
1291 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A11");
1292 b.TextImageRelation = TextImageRelation.ImageAboveText;
1293 b.Size = new Size (5, 5);
1294 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A12");
1295 b.TextImageRelation = TextImageRelation.ImageBeforeText;
1296 b.Size = new Size (5, 5);
1297 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A13");
1298 b.TextImageRelation = TextImageRelation.TextAboveImage;
1299 b.Size = new Size (5, 5);
1300 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A14");
1301 b.TextImageRelation = TextImageRelation.TextBeforeImage;
1302 b.Size = new Size (5, 5);
1303 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A15");
1307 b.TextImageRelation = TextImageRelation.Overlay;
1308 b.Size = new Size (5, 5);
1309 Assert.AreEqual (new Size (15, 14), b.Size, "A16");
1310 b.TextImageRelation = TextImageRelation.ImageAboveText;
1311 b.Size = new Size (5, 5);
1312 Assert.AreEqual (new Size (15, 14), b.Size, "A17");
1313 b.TextImageRelation = TextImageRelation.ImageBeforeText;
1314 b.Size = new Size (5, 5);
1315 Assert.AreEqual (new Size (15, 14), b.Size, "A18");
1316 b.TextImageRelation = TextImageRelation.TextAboveImage;
1317 b.Size = new Size (5, 5);
1318 Assert.AreEqual (new Size (15, 14), b.Size, "A19");
1319 b.TextImageRelation = TextImageRelation.TextBeforeImage;
1320 b.Size = new Size (5, 5);
1321 Assert.AreEqual (new Size (15, 14), b.Size, "A20");
1324 b.Padding = new Padding (5, 10, 15, 20);
1325 Assert.AreEqual (new Size (15 + b.Padding.Horizontal, 14 + b.Padding.Vertical), b.Size, "A21");
1331 public void MethodScaleControl ()
1333 Form f = new Form ();
1334 f.ShowInTaskbar = false;
1338 PublicComboBox gb = new PublicComboBox ();
1339 gb.Location = new Point (5, 10);
1340 f.Controls.Add (gb);
1342 Assert.AreEqual (new Rectangle (5, 10, 121, gb.PreferredHeight), gb.Bounds, "A1");
1344 gb.PublicScaleControl (new SizeF (2.0f, 2.0f), BoundsSpecified.All);
1345 Assert.AreEqual (new Rectangle (10, 20, 238, gb.PreferredHeight), gb.Bounds, "A2");
1347 gb.PublicScaleControl (new SizeF (.5f, .5f), BoundsSpecified.Location);
1348 Assert.AreEqual (new Rectangle (5, 10, 238, gb.PreferredHeight), gb.Bounds, "A3");
1350 gb.PublicScaleControl (new SizeF (.5f, .5f), BoundsSpecified.Size);
1351 Assert.AreEqual (new Rectangle (5, 10, 121, gb.PreferredHeight), gb.Bounds, "A4");
1353 gb.PublicScaleControl (new SizeF (3.5f, 3.5f), BoundsSpecified.Size);
1354 Assert.AreEqual (new Rectangle (5, 10, 414, gb.PreferredHeight), gb.Bounds, "A5");
1356 gb.PublicScaleControl (new SizeF (2.5f, 2.5f), BoundsSpecified.Size);
1357 Assert.AreEqual (new Rectangle (5, 10, 1029, gb.PreferredHeight), gb.Bounds, "A6");
1359 gb.PublicScaleControl (new SizeF (.2f, .2f), BoundsSpecified.Size);
1360 Assert.AreEqual (new Rectangle (5, 10, 209, gb.PreferredHeight), gb.Bounds, "A7");
1365 private class PublicComboBox : ComboBox
1367 public void PublicScaleControl (SizeF factor, BoundsSpecified specified)
1369 base.ScaleControl (factor, specified);
1374 private struct ComboVal
1378 public ComboVal (string t)
1383 public override string ToString ()
1390 public void SortTest ()
1392 // Test sorting of objects with no IComparer
1395 ComboBox cmb = new ComboBox ();
1396 cmb.Items.Add (new ComboVal ("B"));
1397 cmb.Items.Add (new ComboVal ("A"));
1403 public class ComboBoxObjectCollectionTest : TestHelper
1406 public void ComboBoxObjectCollectionPropertyTest ()
1408 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1409 Assert.AreEqual (false, col.IsReadOnly, "#B1");
1410 Assert.AreEqual (false, ((ICollection)col).IsSynchronized, "#B2");
1411 Assert.AreEqual (col, ((ICollection)col).SyncRoot, "#B3");
1412 Assert.AreEqual (false, ((IList)col).IsFixedSize, "#B4");
1416 public void AddTest ()
1418 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1421 Assert.AreEqual (2, col.Count, "#C1");
1425 public void Add_Null ()
1427 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1431 } catch (ArgumentNullException ex) {
1432 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1433 Assert.IsNull (ex.InnerException, "#3");
1434 Assert.IsNotNull (ex.Message, "#4");
1435 Assert.IsNotNull (ex.ParamName, "#5");
1436 Assert.AreEqual ("item", ex.ParamName, "#6");
1441 public void AddRange_Null ()
1443 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1445 col.AddRange (null);
1447 } catch (ArgumentNullException ex) {
1448 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1449 Assert.IsNull (ex.InnerException, "#3");
1450 Assert.IsNotNull (ex.Message, "#4");
1451 Assert.IsNotNull (ex.ParamName, "#5");
1452 Assert.AreEqual ("items", ex.ParamName, "#6");
1457 public void ClearTest ()
1459 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1463 Assert.AreEqual (0, col.Count, "#D1");
1467 public void ContainsTest ()
1469 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1470 object obj = "Item1";
1472 Assert.AreEqual (true, col.Contains ("Item1"), "#E1");
1473 Assert.AreEqual (false, col.Contains ("Item2"), "#E2");
1477 public void Contains_Null ()
1479 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1481 col.Contains (null);
1483 } catch (ArgumentNullException ex) {
1484 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1485 Assert.IsNull (ex.InnerException, "#3");
1486 Assert.IsNotNull (ex.Message, "#4");
1487 Assert.IsNotNull (ex.ParamName, "#5");
1489 Assert.AreEqual ("value", ex.ParamName, "#6");
1495 public void IndexOfTest ()
1497 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1500 Assert.AreEqual (1, col.IndexOf ("Item2"), "#F1");
1504 public void IndexOf_Null ()
1506 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1510 } catch (ArgumentNullException ex) {
1511 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1512 Assert.IsNull (ex.InnerException, "#3");
1513 Assert.IsNotNull (ex.Message, "#4");
1514 Assert.IsNotNull (ex.ParamName, "#5");
1516 Assert.AreEqual ("value", ex.ParamName, "#6");
1522 public void Insert_Null ()
1524 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1527 col.Insert (0, null);
1529 } catch (ArgumentNullException ex) {
1530 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1531 Assert.IsNull (ex.InnerException, "#3");
1532 Assert.IsNotNull (ex.Message, "#4");
1533 Assert.IsNotNull (ex.ParamName, "#5");
1534 Assert.AreEqual ("item", ex.ParamName, "#6");
1539 public void RemoveTest ()
1541 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1544 col.Remove ("Item1");
1545 Assert.AreEqual (1, col.Count, "#1");
1547 Assert.AreEqual (1, col.Count, "#2");
1551 public void RemoveAtTest ()
1553 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1557 Assert.AreEqual (1, col.Count, "#H1");
1558 Assert.AreEqual (true, col.Contains ("Item2"), "#H1");
1562 public void Indexer_Null ()
1564 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1569 } catch (ArgumentNullException ex) {
1570 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1571 Assert.IsNull (ex.InnerException, "#3");
1572 Assert.IsNotNull (ex.Message, "#4");
1573 Assert.IsNotNull (ex.ParamName, "#5");
1574 Assert.AreEqual ("value", ex.ParamName, "#6");
1579 public class ComboBoxTests : TestHelper
1582 bool textChanged, layoutUpdated;
1585 protected override void SetUp () {
1586 comboBox = new ComboBox ();
1587 textChanged = false;
1588 layoutUpdated = false;
1589 comboBox.TextChanged += new EventHandler (textChangedEventHandler);
1590 comboBox.Layout += new LayoutEventHandler (layoutEventHandler);
1594 private void textChangedEventHandler (object sender, EventArgs e)
1599 private void layoutEventHandler (object sender, LayoutEventArgs e)
1601 layoutUpdated = true;
1605 public void InitialPropertyValues ()
1608 Assert.AreEqual (String.Empty, comboBox.Text);
1609 Assert.AreEqual (-1, comboBox.SelectedIndex);
1610 Assert.IsNull (comboBox.SelectedItem);
1611 Assert.AreEqual (121, comboBox.Size.Width);
1612 //Note: it is environment dependent
1613 //Assert.AreEqual(20, comboBox.Size.Height);
1614 Assert.IsFalse (textChanged);
1615 Assert.IsFalse (layoutUpdated);
1619 public void SetNegativeOneSelectedIndex ()
1621 comboBox.SelectedIndex = -1;
1622 Assert.AreEqual (String.Empty, comboBox.Text);
1623 Assert.IsFalse (textChanged);
1627 public void SetDifferentText ()
1629 comboBox.Text = "foooooooooooooooooooooooooo";
1630 Assert.IsTrue (textChanged);
1631 Assert.IsFalse (layoutUpdated);
1635 public void SetSameText ()
1637 comboBox.Text = String.Empty;
1638 Assert.IsFalse (textChanged);
1639 Assert.IsFalse (layoutUpdated);
1642 [Test] // bug #79812
1643 public void Add_Item_NonString ()
1645 comboBox.Sorted = true;
1646 comboBox.Items.Add (new Person ("B"));
1647 comboBox.Items.Add (new Person ("A"));
1648 comboBox.Items.Add (new Person ("C"));
1649 Assert.AreEqual (string.Empty, comboBox.Text, "#1");
1650 comboBox.SelectedIndex = 0;
1651 Assert.AreEqual ("A", comboBox.Text, "#2");
1652 comboBox.SelectedIndex = 2;
1653 Assert.AreEqual ("C", comboBox.Text, "#3");
1657 [Category ("NotWorking")]
1658 public void SelectedText ()
1660 Form form = new Form ();
1661 form.ShowInTaskbar = false;
1662 form.Visible = false;
1663 form.Controls.Add (comboBox);
1665 comboBox.Items.Add ("Bar");
1666 comboBox.Items.Add ("Foo");
1667 Assert.AreEqual (-1, comboBox.SelectedIndex, "#A1");
1668 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#A2");
1669 comboBox.SelectedIndex = 0;
1670 Assert.AreEqual (0, comboBox.SelectedIndex, "#B1");
1671 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#B2");
1673 Assert.AreEqual (0, comboBox.SelectedIndex, "#C1");
1674 Assert.AreEqual ("Bar", comboBox.SelectedText, "#C2");
1675 comboBox.SelectedIndex = 1;
1676 Assert.AreEqual (1, comboBox.SelectedIndex, "#D1");
1677 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#D2");
1678 comboBox.SelectedText = "Ba";
1679 Assert.AreEqual (-1, comboBox.SelectedIndex, "#E1");
1680 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#E2");
1681 comboBox.SelectedText = "Bar";
1682 Assert.AreEqual (-1, comboBox.SelectedIndex, "#F1");
1683 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#F2");
1684 comboBox.SelectedText = "doesnotexist";
1685 Assert.AreEqual (-1, comboBox.SelectedIndex, "#G1");
1686 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#G2");
1687 comboBox.SelectedIndex = 0;
1688 Assert.AreEqual (0, comboBox.SelectedIndex, "#H1");
1689 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#H2");
1690 comboBox.SelectedText = "Foo";
1691 Assert.AreEqual (-1, comboBox.SelectedIndex, "#I1");
1692 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#I2");
1696 public void SortedSelectedItem ()
1698 using (Form form = new Form ()) {
1699 ComboBox box = new ComboBox ();
1702 form.Controls.Add (box);
1703 form.ShowInTaskbar = false;
1706 box.Items.Add ("English");
1707 box.SelectedItem = "English";
1709 box.Items.Add ("Danish");
1710 Assert.AreEqual ("English", box.SelectedItem, "A1");
1712 box.Items.Add ("French");
1713 Assert.AreEqual ("English", box.SelectedItem, "A2");
1715 box.Items.Add ("Brazilian Portuguese");
1716 box.Items.Add ("Arabic");
1717 Assert.AreEqual ("English", box.SelectedItem, "A3");
1723 private readonly string _name;
1725 public Person (string name)
1738 public override string ToString ()