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 DropDownStyle ()
69 ComboBox comboBox = new ComboBox ();
70 comboBox.Items.Add ("abc");
72 Form form = new Form ();
73 form.Controls.Add (comboBox);
76 Assert.AreEqual (ComboBoxStyle.DropDown, comboBox.DropDownStyle, "#1");
77 comboBox.DropDownStyle = ComboBoxStyle.Simple;
78 Assert.AreEqual (ComboBoxStyle.Simple, comboBox.DropDownStyle, "#2");
79 comboBox.DropDownStyle = ComboBoxStyle.DropDown;
80 Assert.AreEqual (ComboBoxStyle.DropDown, comboBox.DropDownStyle, "#3");
86 [Category ("NotWorking")]
87 public void InitialBoundValue ()
90 using (Form f = new Form ()) {
91 f.ShowInTaskbar = false;
93 DataTable t = new DataTable ();
94 t.Columns.Add ("displaymember");
95 t.Columns.Add ("valuemember");
96 t.Rows.Add (new object [] {"lower", "a"});
97 t.Rows.Add (new object [] {"upper", "A"});
99 // This test seems to prove that the SelectedItem is updated when:
100 // - We have a parent
101 // - We're setting either DisplayMember, ValueMember or DataSource.
103 comboBox1 = new ComboBox ();
104 comboBox1.DisplayMember = "displaymember";
105 comboBox1.ValueMember = "valuemember";
106 comboBox1.DataSource = t;
107 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
108 f.Controls.Add (comboBox1);
109 Assert.AreEqual (string.Empty, comboBox1.Text, "#??");
111 comboBox1 = new ComboBox ();
112 f.Controls.AddRange (new Control [] { comboBox1 });
113 comboBox1.DisplayMember = "displaymember";
114 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02-1");
115 comboBox1.ValueMember = "valuemember";
116 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02-1");
117 comboBox1.DataSource = t;
118 Assert.AreEqual ("lower", comboBox1.Text, "#A02");
119 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
120 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
122 comboBox1 = new ComboBox ();
123 comboBox1.DisplayMember = "displaymember";
124 comboBox1.ValueMember = "valuemember";
125 comboBox1.DataSource = t;
126 Assert.AreEqual (string.Empty, comboBox1.Text, "#A01");
127 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
128 Assert.AreEqual (string.Empty, comboBox1.Text, "#A04");
129 f.Controls.AddRange (new Control [] { comboBox1 });
130 Assert.AreEqual (string.Empty, comboBox1.Text, "#A04");
132 comboBox1 = new ComboBox ();
133 f.Controls.AddRange (new Control [] { comboBox1 });
134 comboBox1.DisplayMember = "displaymember";
135 comboBox1.ValueMember = "valuemember";
136 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02");
137 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
138 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02-1");
139 comboBox1.DataSource = t;
140 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
142 comboBox1 = new ComboBox ();
143 f.Controls.AddRange (new Control [] { comboBox1 });
144 comboBox1.DataSource = t;
145 Assert.AreEqual ("System.Data.DataRowView", comboBox1.Text, "#A03");
146 comboBox1.DisplayMember = "displaymember";
147 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
148 comboBox1.ValueMember = "valuemember";
149 Assert.AreEqual ("lower", comboBox1.Text, "#A02");
150 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
151 Assert.AreEqual ("lower", comboBox1.Text, "#A02-1");
154 comboBox1 = new ComboBox ();
155 comboBox1.DisplayMember = "displaymember";
156 comboBox1.ValueMember = "valuemember";
157 Assert.AreEqual ("", comboBox1.Text, "#A02");
158 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
159 Assert.AreEqual (string.Empty, comboBox1.Text, "#A02-1");
160 comboBox1.DataSource = t;
161 Assert.AreEqual (string.Empty, comboBox1.Text, "#A03");
162 f.Controls.AddRange (new Control [] { comboBox1 });
163 Assert.AreEqual (string.Empty, comboBox1.Text, "#A03");
165 comboBox1 = new ComboBox ();
166 comboBox1.DataSource = t;
167 Assert.AreEqual ("", comboBox1.Text, "#A03");
168 comboBox1.DisplayMember = "displaymember";
169 Assert.AreEqual ("", comboBox1.Text, "#A03");
170 comboBox1.ValueMember = "valuemember";
171 Assert.AreEqual ("", comboBox1.Text, "#A02");
172 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
173 Assert.AreEqual ("", comboBox1.Text, "#A02-1");
174 f.Controls.AddRange (new Control [] { comboBox1 });
175 Assert.AreEqual ("", comboBox1.Text, "#A02-1");
178 comboBox1 = new ComboBox ();
179 f.Controls.AddRange (new Control [] { comboBox1 });
180 comboBox1.DisplayMember = "displaymember";
181 Assert.AreEqual ("", comboBox1.Text, "#A03");
182 comboBox1.ValueMember = "valuemember";
183 Assert.AreEqual ("", comboBox1.Text, "#A03");
184 comboBox1.DataSource = t;
185 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
186 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
187 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
189 comboBox1 = new ComboBox ();
190 f.Controls.AddRange (new Control [] { comboBox1 });
191 comboBox1.DisplayMember = "displaymember";
192 Assert.AreEqual ("", comboBox1.Text, "#A03");
193 comboBox1.ValueMember = "valuemember";
194 Assert.AreEqual ("", comboBox1.Text, "#A03");
195 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
196 Assert.AreEqual ("", comboBox1.Text, "#A03");
197 comboBox1.DataSource = t;
198 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
200 comboBox1 = new ComboBox ();
201 f.Controls.AddRange (new Control [] { comboBox1 });
202 comboBox1.ValueMember = "valuemember";
203 Assert.AreEqual ("", comboBox1.Text, "#A03");
204 comboBox1.DataSource = t;
205 Assert.AreEqual ("a", comboBox1.Text, "#A03");
206 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
207 Assert.AreEqual ("a", comboBox1.Text, "#A03");
208 comboBox1.DisplayMember = "displaymember";
209 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
211 comboBox1 = new ComboBox ();
212 comboBox1.DataSource = t;
213 Assert.AreEqual ("", comboBox1.Text, "#A03");
214 comboBox1.DisplayMember = "displaymember";
215 Assert.AreEqual ("", comboBox1.Text, "#A03");
216 comboBox1.ValueMember = "valuemember";
217 Assert.AreEqual ("", comboBox1.Text, "#A03");
218 f.Controls.AddRange (new Control [] { comboBox1 });
219 Assert.AreEqual ("lower", comboBox1.Text, "#A03");
220 InitialBoundValue_dummy e = new InitialBoundValue_dummy ();
222 comboBox1.DataBindings.Add ("SelectedValue", e, "controlsrc");
223 Assert.AreEqual ("", comboBox1.Text, "#A03");
225 Assert.AreEqual ("", comboBox1.Text, "#A03");
227 // The real failing test
228 comboBox1 = new ComboBox ();
229 comboBox1.DisplayMember = "displaymember";
230 Assert.AreEqual ("", comboBox1.Text, "#A03");
231 comboBox1.ValueMember = "valuemember";
232 Assert.AreEqual ("", comboBox1.Text, "#A03");
233 comboBox1.DataSource = t;
234 Assert.AreEqual ("", comboBox1.Text, "#A03");
235 comboBox1.DataBindings.Add ("SelectedValue", new InitialBoundValue_dummy (), "controlsrc");
236 Assert.AreEqual ("", comboBox1.Text, "#A03");
237 f.Controls.AddRange (new Control [] { comboBox1 });
238 Assert.AreEqual ("", comboBox1.Text, "#A03");
240 Assert.AreEqual ("", comboBox1.Text, "#A03");
242 Assert.AreEqual ("", comboBox1.Text, "#bug");
245 @"<?xml version=""1.0"" standalone=""yes""?>
253 @"<?xml version=""1.0"" standalone=""yes""?>
265 using (Form frm = new Form ()) {
266 frm.ShowInTaskbar = false;
267 DataSet dsTable = new DataSet ();
268 dsTable.ReadXml (new StringReader (table));
269 DataSet dsLookup = new DataSet ();
270 dsLookup.ReadXml (new StringReader (lookup));
271 ComboBox cb = new ComboBox ();
272 cb.DataSource = dsLookup.Tables [0];
273 cb.DisplayMember = "nimi";
274 cb.ValueMember = "kood";
275 InitialBoundValue_dummy d = new InitialBoundValue_dummy();
276 d.controlsrc = "287";
277 cb.DataBindings.Add ("SelectedValue", d, "controlsrc");
278 frm.Controls.Add (cb);
279 Assert.AreEqual ("", cb.Text, "#01");
281 Assert.AreEqual ("SUCCESS", cb.Text, "#02");
286 class InitialBoundValue_dummy
289 public string controlsrc
297 public void ContextMenuTest ()
299 ComboBox cmb = new ComboBox ();
300 ContextMenu cm = new ContextMenu ();
302 Assert.IsNull (cmb.ContextMenu, "#1");
303 cmb.ContextMenu = cm;
304 Assert.AreSame (cmb.ContextMenu, cm, "#2");
305 cmb.DropDownStyle = ComboBoxStyle.DropDown;
306 Assert.AreSame (cmb.ContextMenu, cm, "#3");
307 cmb.DropDownStyle = ComboBoxStyle.DropDownList;
308 Assert.AreSame (cmb.ContextMenu, cm, "#4");
309 cmb.DropDownStyle = ComboBoxStyle.Simple;
310 Assert.AreSame (cmb.ContextMenu, cm, "#5");
315 public void DataBindingTest ()
318 @"<?xml version=""1.0"" standalone=""yes""?>
326 @"<?xml version=""1.0"" standalone=""yes""?>
338 using (Form frm = new Form ()) {
339 frm.ShowInTaskbar = false;
340 DataSet dsTable = new DataSet ();
341 dsTable.ReadXml (new StringReader (table));
342 DataSet dsLookup = new DataSet ();
343 dsLookup.ReadXml (new StringReader (lookup));
344 ComboBox cb = new ComboBox ();
345 cb.DataSource = dsLookup.Tables [0];
346 cb.DisplayMember = "nimi";
347 cb.ValueMember = "kood";
348 cb.DataBindings.Add ("SelectedValue", dsTable.Tables [0], "klient");
349 frm.Controls.Add (cb);
350 Assert.AreEqual ("", cb.Text, "#01");
352 Assert.AreEqual ("SUCCESS", cb.Text, "#02");
357 public void DataBindingTest2 ()
359 ComboBox cmb = new ComboBox ();
360 cmb.Items.Add (new MockItem ("Foo", 9));
361 cmb.Items.Add (new MockItem ("Bar", 6));
362 cmb.ValueMember = "Value";
363 cmb.DisplayMember = "Text";
365 Form form = new Form ();
366 form.Controls.Add (cmb);
369 cmb.SelectedIndex = 0;
370 Assert.AreEqual ("Foo", cmb.Text, "#1");
371 cmb.SelectedIndex = 1;
372 Assert.AreEqual ("Bar", cmb.Text, "#2");
378 public void ComboBoxPropertyTest ()
380 ComboBox mycmbbox = new ComboBox ();
381 Assert.AreEqual (DrawMode.Normal, mycmbbox.DrawMode, "#1");
382 Assert.AreEqual (ComboBoxStyle.DropDown, mycmbbox.DropDownStyle, "#2");
383 Assert.AreEqual (false, mycmbbox.DroppedDown, "#4");
384 Assert.AreEqual (true, mycmbbox.IntegralHeight, "#5");
385 Assert.AreEqual (0, mycmbbox.Items.Count, "#6");
386 //Assert.AreEqual (15, mycmbbox.ItemHeight, "#7"); // Note: Item height depends on the current font.
387 Assert.AreEqual (8, mycmbbox.MaxDropDownItems, "#8");
388 Assert.AreEqual (0, mycmbbox.MaxLength, "#9");
389 //Assert.AreEqual (20, mycmbbox.PreferredHeight, "#10");
390 // Note: Item height depends on the current font.
391 Assert.AreEqual (-1, mycmbbox.SelectedIndex, "#11");
392 Assert.AreEqual (null, mycmbbox.SelectedItem, "#12");
393 Assert.AreEqual ("", mycmbbox.SelectedText, "#13");
394 Assert.AreEqual (0, mycmbbox.SelectionLength, "#14");
395 Assert.AreEqual (0, mycmbbox.SelectionStart, "#15");
396 Assert.AreEqual (false, mycmbbox.Sorted, "#16");
397 Assert.AreEqual ("", mycmbbox.Text, "#17");
399 Assert.AreEqual (true, mycmbbox.AutoCompleteCustomSource != null, "#18");
400 Assert.AreEqual (AutoCompleteMode.None, mycmbbox.AutoCompleteMode, "#19");
401 Assert.AreEqual (AutoCompleteSource.None, mycmbbox.AutoCompleteSource, "#20");
403 mycmbbox.AutoCompleteCustomSource = null;
404 Assert.AreEqual (true, mycmbbox.AutoCompleteCustomSource != null, "#21");
406 Assert.AreEqual (ImageLayout.Tile, mycmbbox.BackgroundImageLayout, "#22");
407 Assert.AreEqual (null, mycmbbox.DataSource, "#23");
408 Assert.AreEqual (106, mycmbbox.DropDownHeight, "#24");
409 Assert.AreEqual (FlatStyle.Standard, mycmbbox.FlatStyle, "#25");
410 Assert.AreEqual ("{Width=0, Height=0}", mycmbbox.MaximumSize.ToString (), "#26");
411 Assert.AreEqual ("{Width=0, Height=0}", mycmbbox.MinimumSize.ToString (), "#27");
412 Assert.AreEqual ("{Left=0,Top=0,Right=0,Bottom=0}", mycmbbox.Padding.ToString (), "#28");
418 public void PreferredHeight ()
420 // PreferredHeight is not tied to ItemHeight like we had it
421 ComboBox cb = new ComboBox ();
423 int h = cb.PreferredHeight;
426 Assert.AreEqual (h, cb.PreferredHeight, "A2");
429 Assert.AreEqual (h, cb.PreferredHeight, "A3");
434 public void ResetTextTest ()
436 ComboBox cmbbox = new ComboBox ();
437 Assert.AreEqual ("", cmbbox.Text, "#01");
439 Assert.AreEqual ("abc", cmbbox.Text, "#02");
441 Assert.AreEqual ("", cmbbox.Text, "#03");
445 public void BackgroundImageLayoutTest ()
447 ComboBox cmbbox = new ComboBox ();
448 cmbbox.BackgroundImageLayout = ImageLayout.Stretch;
449 Assert.AreEqual (ImageLayout.Stretch, cmbbox.BackgroundImageLayout, "#01");
453 public void DropDownHeightTest ()
455 ComboBox cmbbox = new ComboBox ();
456 cmbbox.DropDownHeight = 225;
457 Assert.AreEqual (225, cmbbox.DropDownHeight, "#01");
458 cmbbox.DropDownHeight = 1;
459 Assert.AreEqual (1, cmbbox.DropDownHeight, "#02");
463 [ExpectedException (typeof (ArgumentOutOfRangeException))]
464 public void DropDownHeightExceptionTest1 ()
466 ComboBox cmbbox = new ComboBox ();
467 cmbbox.DropDownHeight = -225;
471 [ExpectedException (typeof (ArgumentOutOfRangeException))]
472 public void DropDownHeightExceptionTest2 ()
474 ComboBox cmbbox = new ComboBox ();
475 cmbbox.DropDownHeight = 0;
479 public void FlatStyleTest ()
481 ComboBox cmbbox = new ComboBox ();
482 cmbbox.FlatStyle = FlatStyle.Popup;
483 Assert.AreEqual (FlatStyle.Popup, cmbbox.FlatStyle, "#01");
487 [ExpectedException (typeof (InvalidEnumArgumentException))]
488 public void FlatStyleExceptionTest ()
490 ComboBox cmbbox = new ComboBox ();
491 cmbbox.FlatStyle = (FlatStyle) (-123);
495 public void MaximumSizeTest ()
497 ComboBox cmbbox = new ComboBox ();
498 cmbbox.MaximumSize = new Size (25, 25);
499 Assert.AreEqual ("{Width=25, Height=0}", cmbbox.MaximumSize.ToString (), "#01");
500 cmbbox.MaximumSize = new Size (50, 75);
501 Assert.AreEqual ("{Width=50, Height=0}", cmbbox.MaximumSize.ToString (), "#02");
505 public void MinumumSizeTest ()
507 ComboBox cmbbox = new ComboBox ();
508 cmbbox.MinimumSize = new Size (25, 25);
509 Assert.AreEqual ("{Width=25, Height=0}", cmbbox.MinimumSize.ToString (), "#1");
510 cmbbox.MinimumSize = new Size (50, 75);
511 Assert.AreEqual ("{Width=50, Height=0}", cmbbox.MinimumSize.ToString (), "#2");
515 public void PaddingTest ()
517 ComboBox cmbbox = new ComboBox ();
518 cmbbox.Padding = new Padding (21);
519 Assert.AreEqual ("{Left=21,Top=21,Right=21,Bottom=21}", cmbbox.Padding.ToString (), "#01");
524 public void BeginEndUpdateTest ()
526 Form myform = new Form ();
527 myform.ShowInTaskbar = false;
528 myform.Visible = true;
529 ComboBox cmbbox = new ComboBox ();
530 cmbbox.Items.Add ("A");
531 cmbbox.Visible = true;
532 myform.Controls.Add (cmbbox);
533 cmbbox.BeginUpdate ();
534 for (int x = 1 ; x < 5000 ; x++) {
535 cmbbox.Items.Add ("Item " + x.ToString ());
542 public void FindString ()
544 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
546 ComboBox cmbbox = new ComboBox ();
547 Assert.AreEqual (-1, cmbbox.FindString ("Hello"), "#A1");
548 Assert.AreEqual (-1, cmbbox.FindString (string.Empty), "#A2");
549 Assert.AreEqual (-1, cmbbox.FindString (null), "#A3");
550 Assert.AreEqual (-1, cmbbox.FindString ("Hola", -5), "#A4");
551 Assert.AreEqual (-1, cmbbox.FindString ("Hola", 40), "#A5");
553 cmbbox.Items.AddRange (new object [] { "in", "BADTest", "IN", "BAD", "Bad", "In" });
554 Assert.AreEqual (2, cmbbox.FindString ("I"), "#B1");
555 Assert.AreEqual (0, cmbbox.FindString ("in"), "#B2");
556 Assert.AreEqual (1, cmbbox.FindString ("BAD"), "#B3");
557 Assert.AreEqual (1, cmbbox.FindString ("Bad"), "#B4");
558 Assert.AreEqual (1, cmbbox.FindString ("b"), "#B5");
559 Assert.AreEqual (0, cmbbox.FindString (string.Empty), "#B6");
560 Assert.AreEqual (-1, cmbbox.FindString (null), "#B7");
562 Assert.AreEqual (3, cmbbox.FindString ("b", 2), "#C1");
563 Assert.AreEqual (5, cmbbox.FindString ("I", 3), "#C2");
564 Assert.AreEqual (4, cmbbox.FindString ("B", 3), "#C3");
565 Assert.AreEqual (1, cmbbox.FindString ("B", 4), "#C4");
566 Assert.AreEqual (5, cmbbox.FindString ("I", 4), "#C5");
567 Assert.AreEqual (4, cmbbox.FindString ("BA", 3), "#C6");
568 Assert.AreEqual (0, cmbbox.FindString ("i", -1), "#C7");
569 Assert.AreEqual (3, cmbbox.FindString (string.Empty, 2), "#C8");
570 Assert.AreEqual (-1, cmbbox.FindString (null, 1), "#C9");
572 cmbbox.Items.Add (string.Empty);
573 Assert.AreEqual (0, cmbbox.FindString (string.Empty), "#D1");
574 Assert.AreEqual (-1, cmbbox.FindString (null), "#D2");
576 Assert.AreEqual (4, cmbbox.FindString (string.Empty, 3), "#E1");
577 Assert.AreEqual (-1, cmbbox.FindString (null, 99), "#E2");
578 Assert.AreEqual (-1, cmbbox.FindString (null, -5), "#E3");
582 public void FindString_StartIndex_ItemCount ()
584 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
586 ComboBox cmbbox = new ComboBox ();
587 cmbbox.Items.AddRange (new object [] { "BA", "BB" });
589 Assert.AreEqual (0, cmbbox.FindString ("b", 1));
592 cmbbox.FindString ("b", 1);
594 } catch (ArgumentOutOfRangeException ex) {
595 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
596 Assert.IsNull (ex.InnerException, "#3");
597 Assert.IsNotNull (ex.Message, "#4");
598 Assert.IsNotNull (ex.ParamName, "#5");
599 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
605 public void FindString_StartIndex_Min ()
607 ComboBox cmbbox = new ComboBox ();
608 cmbbox.Items.AddRange (new object [] { "ACBD", "ABDC", "ACBD", "ABCD" });
610 cmbbox.FindString ("Hola", -2);
612 } catch (ArgumentOutOfRangeException ex) {
613 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
614 Assert.IsNull (ex.InnerException, "#3");
615 Assert.IsNotNull (ex.Message, "#4");
616 Assert.IsNotNull (ex.ParamName, "#5");
617 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
622 public void FindString_StartIndex_Max ()
624 ComboBox cmbbox = new ComboBox ();
625 cmbbox.Items.AddRange (new object [] { "ACBD", "ABDC", "ACBD", "ABCD" });
627 cmbbox.FindString ("Hola", 4);
629 } catch (ArgumentOutOfRangeException ex) {
630 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
631 Assert.IsNull (ex.InnerException, "#3");
632 Assert.IsNotNull (ex.Message, "#4");
633 Assert.IsNotNull (ex.ParamName, "#5");
634 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
639 public void FindStringExact ()
641 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
643 ComboBox cmbbox = new ComboBox ();
644 Assert.AreEqual (-1, cmbbox.FindStringExact ("Hello"), "#A1");
645 Assert.AreEqual (-1, cmbbox.FindStringExact (string.Empty), "#A2");
646 Assert.AreEqual (-1, cmbbox.FindStringExact (null), "#A3");
647 Assert.AreEqual (-1, cmbbox.FindStringExact ("Hola", -5), "#A4");
648 Assert.AreEqual (-1, cmbbox.FindStringExact ("Hola", 40), "#A5");
650 cmbbox.Items.AddRange (new object [] { "in", "BADTest", "IN", "BAD", "Bad", "In" });
651 Assert.AreEqual (2, cmbbox.FindStringExact ("IN"), "#B1");
652 Assert.AreEqual (0, cmbbox.FindStringExact ("in"), "#B2");
653 Assert.AreEqual (3, cmbbox.FindStringExact ("BAD"), "#B3");
654 Assert.AreEqual (3, cmbbox.FindStringExact ("bad"), "#B4");
655 Assert.AreEqual (-1, cmbbox.FindStringExact ("B"), "#B5");
656 Assert.AreEqual (-1, cmbbox.FindStringExact ("NonExistant"), "#B6");
657 Assert.AreEqual (-1, cmbbox.FindStringExact (string.Empty), "#B7");
658 Assert.AreEqual (-1, cmbbox.FindStringExact (null), "#B8");
660 Assert.AreEqual (2, cmbbox.FindStringExact ("In", 1), "#C1");
661 Assert.AreEqual (5, cmbbox.FindStringExact ("In", 2), "#C2");
662 Assert.AreEqual (4, cmbbox.FindStringExact ("BaD", 3), "#C3");
663 Assert.AreEqual (3, cmbbox.FindStringExact ("bad", -1), "#C4");
664 Assert.AreEqual (5, cmbbox.FindStringExact ("In", 4), "#C5");
665 Assert.AreEqual (3, cmbbox.FindStringExact ("bad", 4), "#C6");
666 Assert.AreEqual (-1, cmbbox.FindStringExact ("B", 4), "#C7");
667 Assert.AreEqual (-1, cmbbox.FindStringExact ("BADNOT", 0), "#C8");
668 Assert.AreEqual (-1, cmbbox.FindStringExact ("i", -1), "#C9");
669 Assert.AreEqual (-1, cmbbox.FindStringExact (string.Empty, 2), "#C10");
670 Assert.AreEqual (-1, cmbbox.FindStringExact (null, 1), "#C11");
672 cmbbox.Items.Add (string.Empty);
673 Assert.AreEqual (6, cmbbox.FindStringExact (string.Empty), "#D1");
674 Assert.AreEqual (-1, cmbbox.FindStringExact (null), "#D2");
676 Assert.AreEqual (6, cmbbox.FindStringExact (string.Empty, 3), "#E1");
677 Assert.AreEqual (-1, cmbbox.FindStringExact (null, 99), "#E2");
678 Assert.AreEqual (-1, cmbbox.FindStringExact (null, -5), "#E3");
682 public void FindStringExact_StartIndex_ItemCount ()
684 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
686 ComboBox cmbbox = new ComboBox ();
687 cmbbox.Items.AddRange (new object [] { "AB", "BA", "AB", "BA" });
689 Assert.AreEqual (1, cmbbox.FindStringExact ("BA", 3));
692 cmbbox.FindString ("BA", 3);
694 } catch (ArgumentOutOfRangeException ex) {
695 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
696 Assert.IsNull (ex.InnerException, "#3");
697 Assert.IsNotNull (ex.Message, "#4");
698 Assert.IsNotNull (ex.ParamName, "#5");
699 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
705 public void FindStringExact_StartIndex_Min ()
707 ComboBox cmbbox = new ComboBox ();
708 cmbbox.Items.AddRange (new object [] { "ACBD", "ABDC", "ACBD", "ABCD" });
710 cmbbox.FindStringExact ("Hola", -2);
712 } catch (ArgumentOutOfRangeException ex) {
713 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
714 Assert.IsNull (ex.InnerException, "#3");
715 Assert.IsNotNull (ex.Message, "#4");
716 Assert.IsNotNull (ex.ParamName, "#5");
717 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
722 public void FindStringExact_StartIndex_Max ()
724 ComboBox cmbbox = new ComboBox ();
725 cmbbox.Items.AddRange (new object [] { "ACBD", "ABDC", "ACBD", "ABCD" });
727 cmbbox.FindStringExact ("Hola", 4);
729 } catch (ArgumentOutOfRangeException ex) {
730 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
731 Assert.IsNull (ex.InnerException, "#3");
732 Assert.IsNotNull (ex.Message, "#4");
733 Assert.IsNotNull (ex.ParamName, "#5");
734 Assert.AreEqual ("startIndex", ex.ParamName, "#6");
739 public void GetItemHeightTest ()
741 ComboBox cmbbox = new ComboBox ();
742 cmbbox.Items.Add ("ABC");
743 cmbbox.Items.Add ("BCD");
744 cmbbox.Items.Add ("DEF");
746 x = cmbbox.GetItemHeight (x);
747 Assert.IsTrue (cmbbox.ItemHeight > 0, "#21");
755 [ExpectedException (typeof (InvalidEnumArgumentException))]
756 public void DropDownStyleException ()
758 ComboBox cmbbox = new ComboBox ();
759 cmbbox.DropDownStyle = (ComboBoxStyle) 10;
763 [ExpectedException (typeof (InvalidEnumArgumentException))]
764 public void DrawModeException ()
766 ComboBox cmbbox = new ComboBox ();
767 cmbbox.DrawMode = (DrawMode) 10;
771 public void DropDownWidth ()
773 ComboBox cmbbox = new ComboBox ();
774 Assert.AreEqual (121, cmbbox.DropDownWidth, "#A1");
775 cmbbox.DropDownWidth = 1;
776 Assert.AreEqual (1, cmbbox.DropDownWidth, "#A2");
779 cmbbox.DropDownWidth = 0;
783 catch (ArgumentOutOfRangeException ex) {
784 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
785 Assert.IsNotNull (ex.Message, "#B3");
786 Assert.IsNotNull (ex.ParamName, "#B4");
787 Assert.AreEqual ("DropDownWidth", ex.ParamName, "#B5");
788 Assert.IsNull (ex.InnerException, "#B6");
791 catch (ArgumentException ex) {
792 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
793 Assert.IsNotNull (ex.Message, "#B3");
794 Assert.IsNull (ex.ParamName, "#B4");
795 Assert.IsNull (ex.InnerException, "#B5");
801 public void ItemHeight ()
803 ComboBox cmbbox = new ComboBox ();
804 Assert.IsTrue (cmbbox.ItemHeight >= 1, "#A1");
805 cmbbox.ItemHeight = 1;
806 Assert.AreEqual (1, cmbbox.ItemHeight, "#A2");
809 cmbbox.ItemHeight = 0;
813 catch (ArgumentOutOfRangeException ex) {
814 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
815 Assert.IsNotNull (ex.Message, "#B3");
816 Assert.IsNotNull (ex.ParamName, "#B4");
817 Assert.AreEqual ("ItemHeight", ex.ParamName, "#B5");
818 Assert.IsNull (ex.InnerException, "#B6");
821 catch (ArgumentException ex) {
822 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
823 Assert.IsNotNull (ex.Message, "#B3");
824 Assert.IsNull (ex.ParamName, "#B4");
825 Assert.IsNull (ex.InnerException, "#B5");
831 [ExpectedException (typeof (ArgumentOutOfRangeException))]
832 public void SelectedIndexException ()
834 ComboBox cmbbox = new ComboBox ();
835 cmbbox.SelectedIndex = -2;
841 private bool eventFired;
842 private DrawItemEventArgs drawItemsArgs;
843 private void DrawItemEventH (object sender, DrawItemEventArgs e)
849 private void GenericHandler (object sender, EventArgs e)
854 [Ignore ("Bugs in X11 prevent this test to run properly")]
855 public void DrawItemEventTest ()
858 drawItemsArgs = null;
859 Form myform = new Form ();
860 myform.ShowInTaskbar = false;
861 ComboBox cmbbox = new ComboBox ();
862 cmbbox.DropDownStyle = ComboBoxStyle.Simple;
863 cmbbox.DrawMode = DrawMode.OwnerDrawFixed;
864 cmbbox.DrawItem += new DrawItemEventHandler (DrawItemEventH);
866 myform.Controls.Add (cmbbox);
867 cmbbox.Items.AddRange(new object[] {"Item1"});
869 myform.Visible = true;
870 cmbbox.Visible = true;
873 Assert.AreEqual (true, eventFired, "DW1");
874 Assert.AreEqual (0, drawItemsArgs.Index, "DW2");
879 public void DropDownStyleEventTest ()
882 ComboBox cmbbox = new ComboBox ();
883 cmbbox.DropDownStyleChanged += new EventHandler (GenericHandler);
884 cmbbox.DropDownStyle = ComboBoxStyle.Simple;
886 Assert.AreEqual (true, eventFired, "DI1");
890 public void SelectedIndexTest ()
893 ComboBox cmbbox = new ComboBox ();
894 cmbbox.Items.AddRange(new object[] {"Item1", "Item2"});
895 cmbbox.SelectedIndexChanged += new EventHandler (GenericHandler);
896 cmbbox.SelectedIndex = 1;
897 Assert.AreEqual (true, eventFired, "SI1");
901 public void SelectionWithAdd()
903 ComboBox cb = new ComboBox();
904 cb.SelectedIndexChanged += new EventHandler(GenericHandler);
905 cb.Items.Add("Item 1");
906 cb.Items.Add("Item 3");
907 cb.SelectedIndex = 1;
909 cb.Items.Add("Item 4");
910 Assert.AreEqual(1, cb.SelectedIndex, "SWA1");
911 Assert.AreEqual(false, eventFired, "SWA2");
913 cb.SelectedIndex = 1;
915 cb.Items.Add("Item 5");
916 Assert.AreEqual(1, cb.SelectedIndex, "SWA3");
917 Assert.AreEqual("Item 3", cb.SelectedItem, "SWA4");
918 Assert.AreEqual(false, eventFired, "SWA5");
919 cb.SelectedIndex = 1;
921 cb.Items.Add("Item 2");
922 Assert.AreEqual(1, cb.SelectedIndex, "SWA6");
923 Assert.AreEqual("Item 2", cb.SelectedItem, "SWA7");
924 Assert.AreEqual(false, eventFired, "SWA8");
928 public void SelectionWithInsert()
930 ComboBox cb = new ComboBox();
931 cb.SelectedIndexChanged += new EventHandler(GenericHandler);
932 cb.Items.Add("Item 1");
933 cb.SelectedIndex = 0;
935 cb.Items.Insert(0, "Item 2");
936 Assert.AreEqual(0, cb.SelectedIndex, "SWI1");
937 Assert.AreEqual(false, eventFired, "SWI2");
941 public void SelectionWithClear()
943 ComboBox cb = new ComboBox();
944 cb.SelectedIndexChanged += new EventHandler(GenericHandler);
945 cb.Items.Add("Item 1");
946 cb.SelectedIndex = 0;
949 Assert.AreEqual(-1, cb.SelectedIndex, "SWC1");
950 Assert.AreEqual(false, eventFired, "SWC2");
953 // Bug #333750 - DisplayMember assignation
954 // when ComboBox already has a BindingContext BUT
955 // handle hasn't been created yet.
957 public void SelectedTextWithBindingTest ()
959 Form form = new Form ();
960 form.ShowInTaskbar = false;
961 ComboBox cb = new ComboBox ();
964 MockItem [] items = new MockItem [] {
965 new MockItem ("A", 0),
966 new MockItem ("B", 1),
967 new MockItem ("C", 2)
970 cb.DataSource = items;
971 cb.DisplayMember = "Text";
975 Assert.AreEqual ("A", cb.SelectedText, "#A1");
981 public void SortedTest()
983 ComboBox mycb = new ComboBox();
984 Assert.AreEqual(false, mycb.Sorted, "#1");
985 mycb.Items.Add("Item 2");
986 mycb.Items.Add("Item 1");
987 Assert.AreEqual("Item 2", mycb.Items[0], "#2");
988 Assert.AreEqual("Item 1", mycb.Items[1], "#3");
990 Assert.AreEqual(true, mycb.Sorted, "#4");
991 Assert.AreEqual("Item 1", mycb.Items[0], "#5");
992 Assert.AreEqual("Item 2", mycb.Items[1], "#6");
994 Assert.AreEqual(false, mycb.Sorted, "#7");
995 Assert.AreEqual("Item 1", mycb.Items[0], "#8");
996 Assert.AreEqual("Item 2", mycb.Items[1], "#9");
1000 public void SortedAddTest()
1002 ComboBox mycb = new ComboBox();
1003 mycb.Items.Add("Item 2");
1004 mycb.Items.Add("Item 1");
1006 Assert.AreEqual("Item 1", mycb.Items[0], "#I1");
1007 Assert.AreEqual("Item 2", mycb.Items[1], "#I2");
1011 public void SortedInsertTest()
1013 ComboBox mycb = new ComboBox();
1014 mycb.Items.Add("Item 2");
1015 mycb.Items.Add("Item 1");
1017 mycb.Items.Insert (0, "Item 3");
1018 Assert.AreEqual("Item 1", mycb.Items[0], "#J1");
1019 Assert.AreEqual("Item 2", mycb.Items[1], "#J2");
1020 Assert.AreEqual("Item 3", mycb.Items[2], "#J3");
1024 public void SortedSelectionInteractions()
1026 ComboBox cb = new ComboBox();
1027 cb.SelectedIndexChanged += new EventHandler(GenericHandler);
1028 cb.Items.Add("Item 1");
1029 cb.Items.Add("Item 2");
1030 cb.Items.Add("Item 3");
1031 cb.SelectedIndex = 1;
1034 Assert.AreEqual(-1, cb.SelectedIndex, "#SSI1");
1035 Assert.AreEqual(true, eventFired, "#SSI2");
1036 cb.SelectedIndex = 1;
1039 Assert.AreEqual(1, cb.SelectedIndex, "#SSI3");
1040 Assert.AreEqual(false, eventFired, "#SSI4");
1041 cb.SelectedIndex = 1;
1044 Assert.AreEqual(-1, cb.SelectedIndex, "#SSI5");
1045 Assert.AreEqual(true, eventFired, "#SSI6");
1049 public void Text_DropDown ()
1051 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
1053 ComboBox cmbbox = new ComboBox ();
1054 Assert.IsNotNull (cmbbox.Text, "#A1");
1055 Assert.AreEqual (string.Empty, cmbbox.Text, "#A2");
1056 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#A3");
1058 cmbbox.Items.Add ("Another");
1059 cmbbox.Items.Add ("Bad");
1060 cmbbox.Items.Add ("IN");
1061 cmbbox.Items.Add ("Combobox");
1062 cmbbox.Items.Add ("BAD");
1063 cmbbox.Items.Add ("iN");
1064 cmbbox.Items.Add ("Bad");
1066 Assert.IsNotNull (cmbbox.Text, "#B1");
1067 Assert.AreEqual (string.Empty, cmbbox.Text, "#B2");
1068 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#B3");
1070 cmbbox.SelectedIndex = 3;
1071 Assert.IsNotNull (cmbbox.Text, "#C1");
1072 Assert.AreEqual ("Combobox", cmbbox.Text, "#C2");
1073 Assert.AreEqual (3, cmbbox.SelectedIndex, "#C3");
1075 cmbbox.Text = string.Empty;
1076 Assert.IsNotNull (cmbbox.Text, "#D1");
1077 Assert.AreEqual (string.Empty, cmbbox.Text, "#D2");
1078 Assert.AreEqual (3, cmbbox.SelectedIndex, "#D3");
1080 cmbbox.SelectedIndex = 1;
1081 Assert.IsNotNull (cmbbox.Text, "#E1");
1082 Assert.AreEqual ("Bad", cmbbox.Text, "#E2");
1083 Assert.AreEqual (1, cmbbox.SelectedIndex, "#E3");
1086 Assert.IsNotNull (cmbbox.Text, "#F1");
1087 Assert.AreEqual (string.Empty, cmbbox.Text, "#F2");
1088 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#F3");
1090 cmbbox.SelectedIndex = 0;
1092 Assert.IsNotNull (cmbbox.Text, "#G1");
1093 Assert.AreEqual ("Q", cmbbox.Text, "#G2");
1094 Assert.AreEqual (0, cmbbox.SelectedIndex, "#G3");
1097 Assert.IsNotNull (cmbbox.Text, "#H1");
1098 Assert.AreEqual ("B", cmbbox.Text, "#H2");
1099 Assert.AreEqual (0, cmbbox.SelectedIndex, "#H3");
1101 cmbbox.Text = "BAD";
1102 Assert.IsNotNull (cmbbox.Text, "#I1");
1103 Assert.AreEqual ("BAD", cmbbox.Text, "#I2");
1104 Assert.AreEqual (4, cmbbox.SelectedIndex, "#I3");
1106 cmbbox.Text = "BAD";
1107 Assert.IsNotNull (cmbbox.Text, "#J1");
1108 Assert.AreEqual ("BAD", cmbbox.Text, "#J2");
1109 Assert.AreEqual (4, cmbbox.SelectedIndex, "#J3");
1111 cmbbox.Text = "baD";
1112 Assert.IsNotNull (cmbbox.Text, "#K1");
1113 Assert.AreEqual ("Bad", cmbbox.Text, "#K2");
1114 Assert.AreEqual (1, cmbbox.SelectedIndex, "#K3");
1116 cmbbox.SelectedIndex = -1;
1118 Assert.IsNotNull (cmbbox.Text, "#L1");
1119 Assert.AreEqual ("E", cmbbox.Text, "#L2");
1120 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#L3");
1123 Assert.IsNotNull (cmbbox.Text, "#M1");
1124 Assert.AreEqual ("iN", cmbbox.Text, "#M2");
1125 Assert.AreEqual (5, cmbbox.SelectedIndex, "#M3");
1128 Assert.IsNotNull (cmbbox.Text, "#N1");
1129 Assert.AreEqual ("IN", cmbbox.Text, "#N2");
1130 Assert.AreEqual (2, cmbbox.SelectedIndex, "#N3");
1132 cmbbox.Text = "Badd";
1133 Assert.IsNotNull (cmbbox.Text, "#O1");
1134 Assert.AreEqual ("Badd", cmbbox.Text, "#O2");
1135 Assert.AreEqual (2, cmbbox.SelectedIndex, "#O3");
1137 cmbbox.SelectedIndex = -1;
1138 Assert.IsNotNull (cmbbox.Text, "#P1");
1139 Assert.AreEqual (string.Empty, cmbbox.Text, "#P2");
1140 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#P3");
1142 cmbbox.Text = "Something";
1143 Assert.IsNotNull (cmbbox.Text, "#Q1");
1144 Assert.AreEqual ("Something", cmbbox.Text, "#Q2");
1145 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#Q3");
1147 cmbbox.SelectedIndex = -1;
1148 Assert.IsNotNull (cmbbox.Text, "#R1");
1149 Assert.AreEqual ("Something", cmbbox.Text, "#R2");
1150 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#R3");
1153 Assert.IsNotNull (cmbbox.Text, "#S1");
1154 Assert.AreEqual (string.Empty, cmbbox.Text, "#S2");
1155 Assert.AreEqual (-1, cmbbox.SelectedIndex, "#S3");
1158 [Test] // bug 360862
1159 public void SizeChangesAtCreateHandle ()
1161 ComboBox cb = new ComboBox ();
1162 cb.Font = new Font ("Arial", 24f);
1164 int original = cb.Height;
1166 IntPtr h = cb.Handle;
1168 Assert.IsTrue (cb.Height > original, string.Format ("ComboBox height ({0}) should be bigger than original ({1})", cb.Height, original));
1172 public void Bug424270 ()
1174 ComboBox cb = new ComboBox ();
1175 cb.Items.Add ("ab");
1177 cb.SelectedIndex = 0;
1179 Assert.AreEqual (0, cb.SelectedIndex, "A1");
1180 Assert.AreEqual ("ab", cb.SelectedItem, "A2");
1182 cb.SelectedItem = null;
1184 Assert.AreEqual (-1, cb.SelectedIndex, "A3");
1185 Assert.AreEqual (null, cb.SelectedItem, "A4");
1190 public void BehaviorAutoSize ()
1192 if (TestHelper.RunningOnUnix)
1193 Assert.Ignore ("Depends on font measurements, corresponds to windows");
1195 Form f = new Form ();
1196 f.ShowInTaskbar = false;
1200 Image i = new Bitmap (20, 20);
1201 String s = "My test string";
1203 CheckBox b = new CheckBox ();
1204 Size s_size = TextRenderer.MeasureText (s, b.Font);
1206 b.UseCompatibleTextRendering = false;
1207 b.Size = new Size (5, 5);
1213 b.TextImageRelation = TextImageRelation.Overlay;
1214 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A1");
1215 b.TextImageRelation = TextImageRelation.ImageAboveText;
1216 b.Size = new Size (5, 5);
1217 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A2");
1218 b.TextImageRelation = TextImageRelation.ImageBeforeText;
1219 b.Size = new Size (5, 5);
1220 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A3");
1221 b.TextImageRelation = TextImageRelation.TextAboveImage;
1222 b.Size = new Size (5, 5);
1223 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A4");
1224 b.TextImageRelation = TextImageRelation.TextBeforeImage;
1225 b.Size = new Size (5, 5);
1226 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + 4), b.Size, "A5");
1230 b.TextImageRelation = TextImageRelation.Overlay;
1231 b.Size = new Size (5, 5);
1232 Assert.AreEqual (new Size (s_size.Width + 19, i.Height), b.Size, "A6");
1233 b.TextImageRelation = TextImageRelation.ImageAboveText;
1234 b.Size = new Size (5, 5);
1235 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + i.Height + 4), b.Size, "A7");
1236 b.TextImageRelation = TextImageRelation.ImageBeforeText;
1237 b.Size = new Size (5, 5);
1238 Assert.AreEqual (new Size (s_size.Width + i.Width + 19, i.Height), b.Size, "A8");
1239 b.TextImageRelation = TextImageRelation.TextAboveImage;
1240 b.Size = new Size (5, 5);
1241 Assert.AreEqual (new Size (s_size.Width + 19, s_size.Height + i.Height + 4), b.Size, "A9");
1242 b.TextImageRelation = TextImageRelation.TextBeforeImage;
1243 b.Size = new Size (5, 5);
1244 Assert.AreEqual (new Size (s_size.Width + i.Width + 19, i.Height), b.Size, "A10");
1247 b.Text = string.Empty;
1248 b.TextImageRelation = TextImageRelation.Overlay;
1249 b.Size = new Size (5, 5);
1250 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A11");
1251 b.TextImageRelation = TextImageRelation.ImageAboveText;
1252 b.Size = new Size (5, 5);
1253 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A12");
1254 b.TextImageRelation = TextImageRelation.ImageBeforeText;
1255 b.Size = new Size (5, 5);
1256 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A13");
1257 b.TextImageRelation = TextImageRelation.TextAboveImage;
1258 b.Size = new Size (5, 5);
1259 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A14");
1260 b.TextImageRelation = TextImageRelation.TextBeforeImage;
1261 b.Size = new Size (5, 5);
1262 Assert.AreEqual (new Size (i.Height + 15, i.Height), b.Size, "A15");
1266 b.TextImageRelation = TextImageRelation.Overlay;
1267 b.Size = new Size (5, 5);
1268 Assert.AreEqual (new Size (15, 14), b.Size, "A16");
1269 b.TextImageRelation = TextImageRelation.ImageAboveText;
1270 b.Size = new Size (5, 5);
1271 Assert.AreEqual (new Size (15, 14), b.Size, "A17");
1272 b.TextImageRelation = TextImageRelation.ImageBeforeText;
1273 b.Size = new Size (5, 5);
1274 Assert.AreEqual (new Size (15, 14), b.Size, "A18");
1275 b.TextImageRelation = TextImageRelation.TextAboveImage;
1276 b.Size = new Size (5, 5);
1277 Assert.AreEqual (new Size (15, 14), b.Size, "A19");
1278 b.TextImageRelation = TextImageRelation.TextBeforeImage;
1279 b.Size = new Size (5, 5);
1280 Assert.AreEqual (new Size (15, 14), b.Size, "A20");
1283 b.Padding = new Padding (5, 10, 15, 20);
1284 Assert.AreEqual (new Size (15 + b.Padding.Horizontal, 14 + b.Padding.Vertical), b.Size, "A21");
1290 public void MethodScaleControl ()
1292 Form f = new Form ();
1293 f.ShowInTaskbar = false;
1297 PublicComboBox gb = new PublicComboBox ();
1298 gb.Location = new Point (5, 10);
1299 f.Controls.Add (gb);
1301 Assert.AreEqual (new Rectangle (5, 10, 121, gb.PreferredHeight), gb.Bounds, "A1");
1303 gb.PublicScaleControl (new SizeF (2.0f, 2.0f), BoundsSpecified.All);
1304 Assert.AreEqual (new Rectangle (10, 20, 238, gb.PreferredHeight), gb.Bounds, "A2");
1306 gb.PublicScaleControl (new SizeF (.5f, .5f), BoundsSpecified.Location);
1307 Assert.AreEqual (new Rectangle (5, 10, 238, gb.PreferredHeight), gb.Bounds, "A3");
1309 gb.PublicScaleControl (new SizeF (.5f, .5f), BoundsSpecified.Size);
1310 Assert.AreEqual (new Rectangle (5, 10, 121, gb.PreferredHeight), gb.Bounds, "A4");
1312 gb.PublicScaleControl (new SizeF (3.5f, 3.5f), BoundsSpecified.Size);
1313 Assert.AreEqual (new Rectangle (5, 10, 414, gb.PreferredHeight), gb.Bounds, "A5");
1315 gb.PublicScaleControl (new SizeF (2.5f, 2.5f), BoundsSpecified.Size);
1316 Assert.AreEqual (new Rectangle (5, 10, 1029, gb.PreferredHeight), gb.Bounds, "A6");
1318 gb.PublicScaleControl (new SizeF (.2f, .2f), BoundsSpecified.Size);
1319 Assert.AreEqual (new Rectangle (5, 10, 209, gb.PreferredHeight), gb.Bounds, "A7");
1324 private class PublicComboBox : ComboBox
1326 public void PublicScaleControl (SizeF factor, BoundsSpecified specified)
1328 base.ScaleControl (factor, specified);
1333 private struct ComboVal
1337 public ComboVal (string t)
1342 public override string ToString ()
1349 public void SortTest ()
1351 // Test sorting of objects with no IComparer
1354 ComboBox cmb = new ComboBox ();
1355 cmb.Items.Add (new ComboVal ("B"));
1356 cmb.Items.Add (new ComboVal ("A"));
1362 public class ComboBoxObjectCollectionTest : TestHelper
1365 public void ComboBoxObjectCollectionPropertyTest ()
1367 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1368 Assert.AreEqual (false, col.IsReadOnly, "#B1");
1369 Assert.AreEqual (false, ((ICollection)col).IsSynchronized, "#B2");
1370 Assert.AreEqual (col, ((ICollection)col).SyncRoot, "#B3");
1371 Assert.AreEqual (false, ((IList)col).IsFixedSize, "#B4");
1375 public void AddTest ()
1377 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1380 Assert.AreEqual (2, col.Count, "#C1");
1384 public void Add_Null ()
1386 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1390 } catch (ArgumentNullException ex) {
1391 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1392 Assert.IsNull (ex.InnerException, "#3");
1393 Assert.IsNotNull (ex.Message, "#4");
1394 Assert.IsNotNull (ex.ParamName, "#5");
1395 Assert.AreEqual ("item", ex.ParamName, "#6");
1400 public void AddRange_Null ()
1402 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1404 col.AddRange (null);
1406 } catch (ArgumentNullException ex) {
1407 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1408 Assert.IsNull (ex.InnerException, "#3");
1409 Assert.IsNotNull (ex.Message, "#4");
1410 Assert.IsNotNull (ex.ParamName, "#5");
1411 Assert.AreEqual ("items", ex.ParamName, "#6");
1416 public void ClearTest ()
1418 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1422 Assert.AreEqual (0, col.Count, "#D1");
1426 public void ContainsTest ()
1428 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1429 object obj = "Item1";
1431 Assert.AreEqual (true, col.Contains ("Item1"), "#E1");
1432 Assert.AreEqual (false, col.Contains ("Item2"), "#E2");
1436 public void Contains_Null ()
1438 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1440 col.Contains (null);
1442 } catch (ArgumentNullException ex) {
1443 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1444 Assert.IsNull (ex.InnerException, "#3");
1445 Assert.IsNotNull (ex.Message, "#4");
1446 Assert.IsNotNull (ex.ParamName, "#5");
1448 Assert.AreEqual ("value", ex.ParamName, "#6");
1454 public void IndexOfTest ()
1456 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1459 Assert.AreEqual (1, col.IndexOf ("Item2"), "#F1");
1463 public void IndexOf_Null ()
1465 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1469 } catch (ArgumentNullException ex) {
1470 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1471 Assert.IsNull (ex.InnerException, "#3");
1472 Assert.IsNotNull (ex.Message, "#4");
1473 Assert.IsNotNull (ex.ParamName, "#5");
1475 Assert.AreEqual ("value", ex.ParamName, "#6");
1481 public void Insert_Null ()
1483 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1486 col.Insert (0, null);
1488 } catch (ArgumentNullException ex) {
1489 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1490 Assert.IsNull (ex.InnerException, "#3");
1491 Assert.IsNotNull (ex.Message, "#4");
1492 Assert.IsNotNull (ex.ParamName, "#5");
1493 Assert.AreEqual ("item", ex.ParamName, "#6");
1498 public void RemoveTest ()
1500 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1503 col.Remove ("Item1");
1504 Assert.AreEqual (1, col.Count, "#1");
1506 Assert.AreEqual (1, col.Count, "#2");
1510 public void RemoveAtTest ()
1512 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1516 Assert.AreEqual (1, col.Count, "#H1");
1517 Assert.AreEqual (true, col.Contains ("Item2"), "#H1");
1521 public void Indexer_Null ()
1523 ComboBox.ObjectCollection col = new ComboBox.ObjectCollection (new ComboBox ());
1528 } catch (ArgumentNullException ex) {
1529 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1530 Assert.IsNull (ex.InnerException, "#3");
1531 Assert.IsNotNull (ex.Message, "#4");
1532 Assert.IsNotNull (ex.ParamName, "#5");
1533 Assert.AreEqual ("value", ex.ParamName, "#6");
1538 public class ComboBoxTests : TestHelper
1541 bool textChanged, layoutUpdated;
1544 protected override void SetUp () {
1545 comboBox = new ComboBox ();
1546 textChanged = false;
1547 layoutUpdated = false;
1548 comboBox.TextChanged += new EventHandler (textChangedEventHandler);
1549 comboBox.Layout += new LayoutEventHandler (layoutEventHandler);
1553 private void textChangedEventHandler (object sender, EventArgs e)
1558 private void layoutEventHandler (object sender, LayoutEventArgs e)
1560 layoutUpdated = true;
1564 public void InitialPropertyValues ()
1567 Assert.AreEqual (String.Empty, comboBox.Text);
1568 Assert.AreEqual (-1, comboBox.SelectedIndex);
1569 Assert.IsNull (comboBox.SelectedItem);
1570 Assert.AreEqual (121, comboBox.Size.Width);
1571 //Note: it is environment dependent
1572 //Assert.AreEqual(20, comboBox.Size.Height);
1573 Assert.IsFalse (textChanged);
1574 Assert.IsFalse (layoutUpdated);
1578 public void SetNegativeOneSelectedIndex ()
1580 comboBox.SelectedIndex = -1;
1581 Assert.AreEqual (String.Empty, comboBox.Text);
1582 Assert.IsFalse (textChanged);
1586 public void SetDifferentText ()
1588 comboBox.Text = "foooooooooooooooooooooooooo";
1589 Assert.IsTrue (textChanged);
1590 Assert.IsFalse (layoutUpdated);
1594 public void SetSameText ()
1596 comboBox.Text = String.Empty;
1597 Assert.IsFalse (textChanged);
1598 Assert.IsFalse (layoutUpdated);
1601 [Test] // bug #79812
1602 public void Add_Item_NonString ()
1604 comboBox.Sorted = true;
1605 comboBox.Items.Add (new Person ("B"));
1606 comboBox.Items.Add (new Person ("A"));
1607 comboBox.Items.Add (new Person ("C"));
1608 Assert.AreEqual (string.Empty, comboBox.Text, "#1");
1609 comboBox.SelectedIndex = 0;
1610 Assert.AreEqual ("A", comboBox.Text, "#2");
1611 comboBox.SelectedIndex = 2;
1612 Assert.AreEqual ("C", comboBox.Text, "#3");
1616 [Category ("NotWorking")]
1617 public void SelectedText ()
1619 Form form = new Form ();
1620 form.ShowInTaskbar = false;
1621 form.Visible = false;
1622 form.Controls.Add (comboBox);
1624 comboBox.Items.Add ("Bar");
1625 comboBox.Items.Add ("Foo");
1626 Assert.AreEqual (-1, comboBox.SelectedIndex, "#A1");
1627 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#A2");
1628 comboBox.SelectedIndex = 0;
1629 Assert.AreEqual (0, comboBox.SelectedIndex, "#B1");
1630 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#B2");
1632 Assert.AreEqual (0, comboBox.SelectedIndex, "#C1");
1633 Assert.AreEqual ("Bar", comboBox.SelectedText, "#C2");
1634 comboBox.SelectedIndex = 1;
1635 Assert.AreEqual (1, comboBox.SelectedIndex, "#D1");
1636 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#D2");
1637 comboBox.SelectedText = "Ba";
1638 Assert.AreEqual (-1, comboBox.SelectedIndex, "#E1");
1639 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#E2");
1640 comboBox.SelectedText = "Bar";
1641 Assert.AreEqual (-1, comboBox.SelectedIndex, "#F1");
1642 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#F2");
1643 comboBox.SelectedText = "doesnotexist";
1644 Assert.AreEqual (-1, comboBox.SelectedIndex, "#G1");
1645 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#G2");
1646 comboBox.SelectedIndex = 0;
1647 Assert.AreEqual (0, comboBox.SelectedIndex, "#H1");
1648 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#H2");
1649 comboBox.SelectedText = "Foo";
1650 Assert.AreEqual (-1, comboBox.SelectedIndex, "#I1");
1651 Assert.AreEqual (string.Empty, comboBox.SelectedText, "#I2");
1655 public void SortedSelectedItem ()
1657 using (Form form = new Form ()) {
1658 ComboBox box = new ComboBox ();
1661 form.Controls.Add (box);
1662 form.ShowInTaskbar = false;
1665 box.Items.Add ("English");
1666 box.SelectedItem = "English";
1668 box.Items.Add ("Danish");
1669 Assert.AreEqual ("English", box.SelectedItem, "A1");
1671 box.Items.Add ("French");
1672 Assert.AreEqual ("English", box.SelectedItem, "A2");
1674 box.Items.Add ("Brazilian Portuguese");
1675 box.Items.Add ("Arabic");
1676 Assert.AreEqual ("English", box.SelectedItem, "A3");
1682 private readonly string _name;
1684 public Person (string name)
1697 public override string ToString ()