3 // - Unit tests for System.Web.UI.HtmlControls.HtmlSelect
6 // Dick Porter <dick@ximian.com>
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Web.UI.HtmlControls;
34 using System.Web.UI.WebControls;
36 using NUnit.Framework;
37 using MonoTests.stand_alone.WebHarness;
39 namespace MonoTests.System.Web.UI.HtmlControls {
41 public class TestHtmlSelect : HtmlSelect {
42 public TestHtmlSelect ()
46 public StateBag GetViewState ()
51 public HtmlTextWriter GetWriter ()
53 StringWriter text = new StringWriter ();
54 HtmlTextWriter writer = new HtmlTextWriter (text);
55 base.RenderAttributes (writer);
59 public int[] GetIndices ()
61 return (SelectedIndices);
69 public void SetIndices (int[] indices)
73 public string Render ()
75 StringWriter sw = new StringWriter ();
77 HtmlTextWriter writer = new HtmlTextWriter (sw);
79 return writer.InnerWriter.ToString ();
84 public class HtmlSelectTest {
87 public void DefaultProperties ()
89 HtmlSelect sel = new HtmlSelect ();
91 Assert.AreEqual (0, sel.Attributes.Count, "Attributes.Count");
93 Assert.AreEqual (String.Empty, sel.DataMember, "DataMember");
94 Assert.AreEqual (null, sel.DataSource, "DataSource");
95 Assert.AreEqual (String.Empty, sel.DataTextField, "DataTextField");
96 Assert.AreEqual (String.Empty, sel.DataValueField, "DataValueField");
97 Assert.IsTrue (sel.Items.GetType() == typeof (ListItemCollection), "Items");
98 Assert.AreEqual (false, sel.Multiple, "Multiple");
99 Assert.AreEqual (0, sel.SelectedIndex, "SelectedIndex");
100 Assert.AreEqual (-1, sel.Size, "Size");
101 Assert.AreEqual (String.Empty, sel.Value, "Value");
103 Assert.AreEqual ("select", sel.TagName, "TagName");
107 [ExpectedException (typeof (NotSupportedException))]
108 public void InnerHtmlGet ()
110 HtmlSelect sel = new HtmlSelect ();
111 Assert.IsNotNull (sel.InnerHtml);
116 [ExpectedException (typeof (NotSupportedException))]
117 public void InnerTextGet ()
119 HtmlSelect sel = new HtmlSelect ();
120 sel.InnerText = null;
124 [ExpectedException (typeof (NotSupportedException))]
125 public void InnerHtmlSet ()
127 HtmlSelect sel = new HtmlSelect ();
128 sel.InnerHtml = null;
132 [ExpectedException (typeof (NotSupportedException))]
133 public void InnerTextSet ()
135 HtmlSelect sel = new HtmlSelect ();
136 Assert.IsNotNull (sel.InnerText);
141 public void NullProperties ()
143 TestHtmlSelect sel = new TestHtmlSelect ();
145 sel.DataMember = null;
146 Assert.AreEqual (String.Empty, sel.DataMember, "DataMember");
147 sel.DataSource = null;
148 Assert.AreEqual (null, sel.DataSource, "DataSource");
149 sel.DataTextField = null;
150 Assert.AreEqual (String.Empty, sel.DataTextField, "DataTextField");
151 sel.DataValueField = null;
152 Assert.AreEqual (String.Empty, sel.DataValueField, "DataValueField");
153 sel.Multiple = false;
154 Assert.AreEqual (false, sel.Multiple, "Multiple");
155 sel.SelectedIndex = -1;
156 Assert.AreEqual (0, sel.SelectedIndex, "SelectedIndex");
158 Assert.AreEqual (-1, sel.Size, "Size");
160 Assert.AreEqual (String.Empty, sel.Value, "Value");
162 Assert.AreEqual (0, sel.Attributes.Count, "Attributes.Count");
164 StateBag sb = sel.GetViewState ();
165 Assert.AreEqual (0, sb.Count, "ViewState Count");
169 public void SourceType ()
171 HtmlSelect sel = new HtmlSelect ();
172 int[] source = new int[] {1,2,3,4};
174 sel.DataSource = source;
178 [ExpectedException (typeof (ArgumentException))]
179 public void BadSourceType ()
181 HtmlSelect sel = new HtmlSelect ();
182 object source = new object ();
184 sel.DataSource = source;
188 public void ViewStateCount ()
190 TestHtmlSelect sel = new TestHtmlSelect ();
191 int[] source = new int[] {1,2,3,4,5,6,7,8};
193 sel.DataMember = "*1*";
194 Assert.AreEqual ("*1*", sel.DataMember, "DataMember");
195 sel.DataSource = source;
196 Assert.AreEqual (source, sel.DataSource, "DataSource");
197 sel.DataTextField = "*3*";
198 Assert.AreEqual ("*3*", sel.DataTextField, "DataTextField");
199 sel.DataValueField = "*4*";
200 Assert.AreEqual ("*4*", sel.DataValueField, "DataValueField");
202 Assert.AreEqual (true, sel.Multiple, "Multiple");
203 sel.SelectedIndex = 6;
204 /* This doesn't stick */
205 Assert.AreEqual (-1, sel.SelectedIndex, "SelectedIndex");
207 Assert.AreEqual (7, sel.Size, "Size");
209 /* Neither does this */
210 Assert.AreEqual (String.Empty, sel.Value, "Value");
212 Assert.AreEqual (5, sel.Attributes.Count, "Attributes.Count");
214 foreach (string key in sel.Attributes.Keys) {
215 Console.WriteLine ("attr key {0} is {1}", key, sel.Attributes[key]);
219 StateBag sb = sel.GetViewState ();
220 Assert.AreEqual (5, sb.Count, "ViewState Count");
223 foreach (string key in sb.Keys) {
224 Console.WriteLine ("vs key {0} is {1}", key, sb[key]);
230 public void InternalDetails ()
232 /* Test the undocumented but visible
233 * properties and methods SelectedIndices,
234 * ClearSelection () and Select ()
236 TestHtmlSelect sel = new TestHtmlSelect ();
237 ListItemCollection items;
241 ListItem item1 = new ListItem ("text1", "value1");
244 ListItem item2 = new ListItem ("text2", "value2");
245 item2.Selected = true;
248 ListItem item3 = new ListItem ("text3", "value3");
251 ListItem item4 = new ListItem ("text4", "value4");
252 item4.Selected = true;
255 ListItem item5 = new ListItem ("text5", "value5");
256 item5.Selected = true;
259 ListItem item6 = new ListItem ("text6", "value6");
262 int[] indices = sel.GetIndices ();
264 Assert.AreEqual (1, sel.SelectedIndex, "SelectedIndex");
265 Assert.AreEqual (3, indices.Length, "SelectIndices Length");
266 Assert.AreEqual (1, indices[0], "SelectIndices 0");
267 Assert.AreEqual (3, indices[1], "SelectIndices 1");
268 Assert.AreEqual (4, indices[2], "SelectIndices 2");
269 Assert.IsFalse (item1.Selected, "Item1");
270 Assert.IsTrue (item2.Selected, "Item2");
271 Assert.IsFalse (item3.Selected, "Item3");
272 Assert.IsTrue (item4.Selected, "Item4");
273 Assert.IsTrue (item5.Selected, "Item5");
274 Assert.IsFalse (item6.Selected, "Item6");
277 Assert.IsFalse (item1.Selected, "Item1 after clear but before SelectedIndices and SelectedIndex");
279 indices = sel.GetIndices ();
280 Assert.IsFalse (item1.Selected, "Item1 after clear but between SelectedIndices and SelectedIndex");
281 Assert.AreEqual (0, sel.SelectedIndex, "SelectedIndex after clear");
282 Assert.AreEqual (0, indices.Length, "SelectIndices Length after clear");
284 /* NB: !multiple and size <= 1, therefore
285 * there must be one selected after
286 * SelectedIndex is called
288 Assert.IsTrue (item1.Selected, "Item1 after clear");
289 Assert.IsFalse (item2.Selected, "Item2 after clear");
290 Assert.IsFalse (item3.Selected, "Item3 after clear");
291 Assert.IsFalse (item4.Selected, "Item4 after clear");
292 Assert.IsFalse (item5.Selected, "Item5 after clear");
293 Assert.IsFalse (item6.Selected, "Item6 after clear");
295 int[] new_indices = new int[]{2, 4, 5};
297 sel.SetIndices (new_indices);
299 indices = sel.GetIndices ();
301 Assert.AreEqual (2, sel.SelectedIndex, "SelectedIndex after set");
302 Assert.AreEqual (3, indices.Length, "SelectIndices Length after set");
303 Assert.AreEqual (2, indices[0], "SelectIndices 0 after set");
304 Assert.AreEqual (4, indices[1], "SelectIndices 1 after set");
305 Assert.AreEqual (5, indices[2], "SelectIndices 2 after set");
306 Assert.IsFalse (item1.Selected, "Item1 after set");
307 Assert.IsFalse (item2.Selected, "Item2 after set");
308 Assert.IsTrue (item3.Selected, "Item3 after set");
309 Assert.IsFalse (item4.Selected, "Item4 after set");
310 Assert.IsTrue (item5.Selected, "Item5 after set");
311 Assert.IsTrue (item6.Selected, "Item6 after set");
313 new_indices = new int[]{2};
315 sel.SetIndices (new_indices);
317 indices = sel.GetIndices ();
319 Assert.AreEqual (2, sel.SelectedIndex, "SelectedIndex after short set");
320 Assert.AreEqual (1, indices.Length, "SelectIndices Length after short set");
321 Assert.AreEqual (2, indices[0], "SelectIndices 0 after short set");
322 Assert.IsFalse (item1.Selected, "Item1 after short set");
323 Assert.IsFalse (item2.Selected, "Item2 after short set");
324 Assert.IsTrue (item3.Selected, "Item3 after short set");
325 Assert.IsFalse (item4.Selected, "Item4 after short set");
326 Assert.IsFalse (item5.Selected, "Item5 after short set");
327 Assert.IsFalse (item6.Selected, "Item6 after short set");
329 new_indices = new int[]{-2, -1, 2, 4, 5, 6, 7, 8, 9, 10};
331 sel.SetIndices (new_indices);
333 indices = sel.GetIndices ();
335 Assert.AreEqual (2, sel.SelectedIndex, "SelectedIndex after long set");
336 Assert.AreEqual (3, indices.Length, "SelectIndices Length after long set");
337 Assert.AreEqual (2, indices[0], "SelectIndices 0 after long set");
338 Assert.AreEqual (4, indices[1], "SelectIndices 1 after long set");
339 Assert.AreEqual (5, indices[2], "SelectIndices 2 after long set");
340 Assert.IsFalse (item1.Selected, "Item1 after long set");
341 Assert.IsFalse (item2.Selected, "Item2 after long set");
342 Assert.IsTrue (item3.Selected, "Item3 after long set");
343 Assert.IsFalse (item4.Selected, "Item4 after long set");
344 Assert.IsTrue (item5.Selected, "Item5 after long set");
345 Assert.IsTrue (item6.Selected, "Item6 after long set");
349 public void Multiple ()
351 HtmlSelect sel = new HtmlSelect ();
354 Assert.AreEqual (-1, sel.SelectedIndex, "SelectedIndex");
360 HtmlSelect sel = new HtmlSelect ();
363 Assert.AreEqual (-1, sel.SelectedIndex, "SelectedIndex");
367 public void OneRowIndividual ()
369 HtmlSelect sel = new HtmlSelect ();
371 Assert.AreEqual (0, sel.SelectedIndex, "SelectedIndex");
375 public void RenderAttributes ()
377 TestHtmlSelect sel = new TestHtmlSelect ();
378 object source = new object ();
380 sel.DataMember = "*1*";
381 //sel.DataSource = source;
382 sel.DataTextField = "*3*";
383 sel.DataValueField = "*4*";
386 sel.SelectedIndex = 7;
390 Assert.AreEqual (5, sel.Attributes.Count, "Attributes.Count");
392 HtmlTextWriter writer = sel.GetWriter ();
393 Assert.AreEqual (" name multiple=\"multiple\" size=\"8\"", writer.InnerWriter.ToString ());
396 DataSet GetExampleData ()
398 DataSet ds = new DataSet ();
399 ds.ReadXml (new StringReader (@"
401 <Stocks Company='Novell Inc.' Symbol='NOVL' Price='6.14' />
402 <Stocks Company='Microsoft Corp.' Symbol='MSFT' Price='25.92' />
403 <Stocks Company='Google' Symbol='GOOG' Price='291.60' />
410 public void DataBind1 ()
412 TestHtmlSelect s = new TestHtmlSelect ();
413 s.DataSource = GetExampleData ();
414 s.DataTextField = "Symbol";
416 string exp = @"<select name>
417 <option value=""NOVL"">NOVL</option>
418 <option value=""MSFT"">MSFT</option>
419 <option value=""GOOG"">GOOG</option>
421 HtmlDiff.AssertAreEqual (exp, s.Render (), "DataBind1");
424 DataSet GetExampleDataWithEmpty ()
426 DataSet ds = new DataSet ();
427 ds.ReadXml (new StringReader (@"
429 <Stocks Company='Novell Inc.' Symbol='NOVL' Price='6.14' />
430 <Stocks Company='' Symbol='MSFT' Price='25.92' />
431 <Stocks Company='Google' Symbol='GOOG' Price='291.60' />
438 public void DataBind2 ()
440 TestHtmlSelect s = new TestHtmlSelect ();
441 s.DataSource = GetExampleDataWithEmpty ();
442 s.DataTextField = "Company";
443 s.DataValueField = "Symbol";
445 string exp = @"<select name>
446 <option value=""NOVL"">Novell Inc.</option>
447 <option value=""MSFT""></option>
448 <option value=""GOOG"">Google</option>
450 HtmlDiff.AssertAreEqual (exp, s.Render (), "DataBind2");
454 public void DataBind3 ()
456 TestHtmlSelect s = new TestHtmlSelect ();
457 s.DataSource = new string [] { "A", "B", "C" };
459 string exp = @"<select name>
460 <option value=""A"">A</option>
461 <option value=""B"">B</option>
462 <option value=""C"">C</option>
464 HtmlDiff.AssertAreEqual (exp, s.Render (), "DataBind3");
468 public void DataBindDoubleCall ()
470 TestHtmlSelect s = new TestHtmlSelect ();
471 s.DataSource = new string [] { "A", "B", "C" };
474 string exp = @"<select name>
475 <option value=""A"">A</option>
476 <option value=""B"">B</option>
477 <option value=""C"">C</option>
479 HtmlDiff.AssertAreEqual (exp, s.Render (), "DataBindDoubleCall");