2 // Tests for System.Web.UI.WebControls.ListBoxTest.cs
5 // Jackson Harper (jackson@ximian.com)
9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using NUnit.Framework;
35 using System.Collections;
36 using System.Globalization;
39 using System.Web.UI.WebControls;
41 namespace MonoTests.System.Web.UI.WebControls {
43 public class ListControlPoker : ListControl {
45 public ListControlPoker ()
49 public void TrackState ()
54 public object SaveState ()
56 return SaveViewState ();
59 public void LoadState (object state)
61 LoadViewState (state);
64 public object ViewStateValue (string name)
66 return ViewState [name];
70 public void LoadControl (object state)
72 LoadControlState (state);
75 public object SaveControl ()
77 return SaveControlState ();
80 public string Render ()
82 StringWriter sw = new StringWriter ();
84 HtmlTextWriter writer = new HtmlTextWriter (sw);
86 return writer.InnerWriter.ToString ();
90 public HtmlTextWriterTag GetTagKey ()
98 public class ListControlTest {
100 private Hashtable changed = new Hashtable ();
103 public void DefaultProperties ()
105 ListControlPoker p = new ListControlPoker ();
107 Assert.AreEqual (p.AutoPostBack, false, "A1");
108 Assert.AreEqual (p.DataMember, String.Empty, "A2");
109 Assert.AreEqual (p.DataSource, null, "A3");
110 Assert.AreEqual (p.DataTextField, String.Empty, "A4");
111 Assert.AreEqual (p.DataTextFormatString, String.Empty, "A5");
112 Assert.AreEqual (p.DataValueField, String.Empty, "A6");
113 Assert.AreEqual (p.Items.Count, 0, "A7");
114 Assert.AreEqual (p.SelectedIndex, -1,"A8");
115 Assert.AreEqual (p.SelectedItem, null, "A9");
116 Assert.AreEqual (p.SelectedValue, String.Empty, "A10");
118 Assert.IsFalse (p.AppendDataBoundItems, "A11");
119 Assert.AreEqual (p.Text, "", "A12");
120 Assert.AreEqual (p.GetTagKey(), HtmlTextWriterTag.Select, "A13");
125 public void CleanProperties ()
127 ListControlPoker p = new ListControlPoker ();
129 p.AutoPostBack = true;
130 Assert.AreEqual (p.AutoPostBack, true, "A2");
132 p.DataMember = "DataMember";
133 Assert.AreEqual (p.DataMember, "DataMember", "A3");
135 p.DataSource = "DataSource";
136 Assert.AreEqual (p.DataSource, "DataSource", "A4");
138 p.DataTextField = "DataTextField";
139 Assert.AreEqual (p.DataTextField, "DataTextField", "A5");
141 p.DataTextFormatString = "DataTextFormatString";
142 Assert.AreEqual (p.DataTextFormatString, "DataTextFormatString", "A6");
144 p.DataValueField = "DataValueField";
145 Assert.AreEqual (p.DataValueField, "DataValueField", "A7");
147 p.SelectedIndex = 10;
148 Assert.AreEqual (p.SelectedIndex, -1, "A8");
150 p.SelectedValue = "SelectedValue";
151 Assert.AreEqual (p.SelectedValue, String.Empty, "A9");
155 public void NullProperties ()
157 ListControlPoker p = new ListControlPoker ();
160 Assert.AreEqual (p.DataMember, String.Empty, "A1");
163 Assert.AreEqual (p.DataSource, null, "A2");
165 p.DataTextField = null;
166 Assert.AreEqual (p.DataTextField, String.Empty, "A3");
168 p.DataTextFormatString = null;
169 Assert.AreEqual (p.DataTextFormatString, String.Empty, "A4");
171 p.DataValueField = null;
172 Assert.AreEqual (p.DataValueField, String.Empty, "A5");
174 p.SelectedValue = null;
175 Assert.AreEqual (p.SelectedValue, String.Empty, "A6");
179 public void ClearSelection ()
181 ListControlPoker p = new ListControlPoker ();
183 ListItem foo = new ListItem ("foo");
184 ListItem bar = new ListItem ("bar");
186 BeginIndexChanged (p);
192 // sanity for the real test
193 Assert.AreEqual (p.Items.Count, 2, "A1");
194 Assert.AreEqual (p.SelectedIndex, 1, "A2");
195 Assert.AreEqual (p.SelectedItem, bar, "A3");
196 Assert.AreEqual (p.SelectedValue, bar.Value, "A4");
200 Assert.AreEqual (p.SelectedIndex, -1, "A5");
201 Assert.AreEqual (p.SelectedItem, null, "A6");
202 Assert.AreEqual (p.SelectedValue, String.Empty, "A7");
203 Assert.IsFalse (EndIndexChanged (p), "A8");
205 // make sure we are still sane
206 Assert.AreEqual (p.Items.Count, 2, "A9");
211 // Tests Save/Load ControlState
212 public void ControlState ()
214 ListControlPoker a = new ListControlPoker ();
215 ListControlPoker b = new ListControlPoker ();
228 object state = a.SaveControl();
229 b.LoadControl (state);
231 Assert.AreEqual (b.SelectedIndex, 2, "A1");
236 // Tests Save/Load/Track ViewState
237 public void ViewState ()
239 ListControlPoker a = new ListControlPoker ();
240 ListControlPoker b = new ListControlPoker ();
244 BeginIndexChanged (a);
245 BeginIndexChanged (b);
252 object state = a.SaveState ();
256 Assert.AreEqual (b.SelectedIndex, -1, "A1");
258 Assert.AreEqual (b.SelectedIndex, 2, "A1");
260 Assert.AreEqual (b.Items.Count, 3, "A2");
262 Assert.AreEqual (b.Items [0].Value, "a", "A3");
263 Assert.AreEqual (b.Items [1].Value, "b", "A4");
264 Assert.AreEqual (b.Items [2].Value, "c", "A5");
266 Assert.IsFalse (EndIndexChanged (a), "A6");
267 Assert.IsFalse (EndIndexChanged (b), "A7");
271 public void ViewStateContents ()
273 ListControlPoker p = new ListControlPoker ();
277 // So the selected index can be set
281 p.AutoPostBack = false;
282 p.DataMember = "DataMember";
283 p.DataSource = "DataSource";
284 p.DataTextField = "DataTextField";
285 p.DataTextFormatString = "DataTextFormatString";
286 p.DataValueField = "DataValueField";
289 p.AppendDataBoundItems = true;
293 Assert.AreEqual (p.ViewStateValue ("AutoPostBack"), false, "A1");
294 Assert.AreEqual (p.ViewStateValue ("DataMember"), "DataMember", "A2");
296 Assert.AreEqual (p.ViewStateValue ("DataSource"), null, "A3");
297 Assert.AreEqual (p.ViewStateValue ("DataTextField"), "DataTextField", "A4");
298 Assert.AreEqual (p.ViewStateValue ("DataTextFormatString"),
299 "DataTextFormatString", "A5");
300 Assert.AreEqual (p.ViewStateValue ("DataValueField"), "DataValueField", "A6");
303 Assert.AreEqual (p.ViewStateValue ("AppendDataBoundItems"), true, "A7");
306 // None of these are saved
307 Assert.AreEqual (p.ViewStateValue ("SelectedIndex"), null, "A8");
308 Assert.AreEqual (p.ViewStateValue ("SelectedItem"), null, "A9");
309 Assert.AreEqual (p.ViewStateValue ("SelectedValue"), null, "A10");
311 Assert.AreEqual (p.ViewStateValue ("Text"), null, "A11");
317 public void SelectedIndex ()
319 ListControlPoker p = new ListControlPoker ();
323 p.Items.Add ("three");
324 p.Items.Add ("four");
326 p.Items [2].Selected = true;
327 p.Items [1].Selected = true;
329 Assert.AreEqual (p.SelectedIndex, 1, "A1");
332 p.Items [3].Selected = true;
334 Assert.AreEqual (p.SelectedIndex, 3, "A2");
337 Assert.AreEqual (p.SelectedIndex, 1, "A3");
338 Assert.IsFalse (p.Items [3].Selected, "A4");
342 public void Render ()
344 ListControlPoker p = new ListControlPoker ();
346 string s = p.Render ();
347 string expected = "<select>\n\n</select>";
348 Assert.AreEqual (s, expected, "A1");
353 [ExpectedException (typeof (ArgumentOutOfRangeException))]
355 public void ItemsTooHigh ()
357 ListControlPoker l = new ListControlPoker ();
364 [ExpectedException (typeof (ArgumentOutOfRangeException))]
365 public void ItemsTooLow ()
367 ListControlPoker l = new ListControlPoker ();
370 l.SelectedIndex = -2;
374 public void ItemsOk ()
376 ListControlPoker l = new ListControlPoker ();
380 l.SelectedIndex = -1;
383 private void BeginIndexChanged (ListControl l)
385 l.SelectedIndexChanged += new EventHandler (IndexChangedHandler);
388 private bool EndIndexChanged (ListControl l)
390 bool res = changed [l] != null;
395 private void IndexChangedHandler (object sender, EventArgs e)
397 changed [sender] = new object ();