2 // DataListTest.cs - Unit tests for System.Web.UI.WebControls.DataList
5 // Sebastien Pouliot <sebastien@ximian.com>
6 // Gonzalo Paniagua Javier <gonzalo@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.
31 using System.Collections;
32 using System.ComponentModel;
38 using System.Web.UI.WebControls;
40 using NUnit.Framework;
42 namespace MonoTests.System.Web.UI.WebControls {
44 public class TestDataList : DataList {
47 get { return base.TagName; }
50 public StateBag StateBag {
51 get { return base.ViewState; }
55 private HtmlTextWriter GetWriter ()
57 StringWriter sw = new StringWriter ();
59 return new HtmlTextWriter (sw);
62 public string Render ()
64 HtmlTextWriter writer = GetWriter ();
66 return writer.InnerWriter.ToString ();
69 public string RenderItem (ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo)
71 HtmlTextWriter writer = GetWriter ();
72 (this as IRepeatInfoUser).RenderItem (itemType, repeatIndex, repeatInfo, writer);
73 return writer.InnerWriter.ToString ();
76 public void CreateCH ()
78 CreateControlHierarchy (true);
81 public void PrepareCH ()
83 PrepareControlHierarchy ();
86 public void TrackState ()
91 public void LoadState (object state)
93 LoadViewState (state);
96 public object SaveState ()
98 return SaveViewState ();
101 public void DoCancelCommand (DataListCommandEventArgs e)
106 public void DoDeleteCommand (DataListCommandEventArgs e)
111 public void DoEditCommand (DataListCommandEventArgs e)
116 public void DoItemCommand (DataListCommandEventArgs e)
121 public void DoUpdateCommand (DataListCommandEventArgs e)
126 public void DoItemCreated (DataListItemEventArgs e)
131 public void DoItemDataBound (DataListItemEventArgs e)
136 public void DoSelectedIndexChanged (EventArgs e)
138 OnSelectedIndexChanged (e);
141 public void DoBubbleEvent (object source, EventArgs e)
143 OnBubbleEvent (source, e);
147 public class TestTemplate : ITemplate {
149 public void InstantiateIn (Control container)
155 public class DataListTest {
157 private HtmlTextWriter GetWriter ()
159 StringWriter sw = new StringWriter ();
161 return new HtmlTextWriter (sw);
165 private ArrayList GetData (int n)
167 ArrayList al = new ArrayList ();
168 for (int i = 0; i < n; i++) {
169 al.Add (i.ToString ());
175 private TestDataSource GetDataSource (int n)
177 return new TestDataSource (GetData (n));
180 public void CheckIRepeatInfoUser (IRepeatInfoUser riu)
182 Assert.IsFalse (riu.HasFooter, "HasFooter");
183 Assert.IsFalse (riu.HasHeader, "HasHeader");
184 Assert.IsFalse (riu.HasSeparators, "HasSeparators");
185 Assert.AreEqual (0, riu.RepeatedItemCount, "RepeatedItemCount");
189 public void ConstantStrings ()
191 Assert.AreEqual ("Cancel", DataList.CancelCommandName, "CancelCommandName");
192 Assert.AreEqual ("Delete", DataList.DeleteCommandName, "DeleteCommandName");
193 Assert.AreEqual ("Edit", DataList.EditCommandName, "EditCommandName");
194 Assert.AreEqual ("Select", DataList.SelectCommandName, "SelectCommandName");
195 Assert.AreEqual ("Update", DataList.UpdateCommandName, "UpdateCommandName");
199 public void DefaultProperties ()
201 TestDataList dl = new TestDataList ();
202 CheckIRepeatInfoUser (dl);
204 Assert.AreEqual ("table", dl.Tag, "TagName");
206 Assert.AreEqual ("span", dl.Tag, "TagName");
208 Assert.AreEqual (0, dl.Attributes.Count, "Attributes.Count-1");
209 Assert.AreEqual (0, dl.StateBag.Count, "ViewState.Count-1");
212 Assert.IsNotNull (dl.AlternatingItemStyle, "AlternatingItemStyle");
213 Assert.IsNotNull (dl.EditItemStyle, "EditItemStyle");
214 Assert.IsNotNull (dl.FooterStyle, "FooterStyle");
215 Assert.IsNotNull (dl.HeaderStyle, "HeaderStyle");
216 Assert.IsNotNull (dl.ItemStyle, "ItemStyle");
217 Assert.IsNotNull (dl.SelectedItemStyle, "SelectedItemStyle");
218 Assert.IsNotNull (dl.SeparatorStyle, "SeparatorStyle");
221 Assert.IsNull (dl.AlternatingItemTemplate, "AlternatingItemTemplate");
222 Assert.IsNull (dl.EditItemTemplate, "EditItemTemplate");
223 Assert.IsNull (dl.FooterTemplate, "FooterTemplate");
224 Assert.IsNull (dl.HeaderTemplate, "HeaderTemplate");
225 Assert.IsNull (dl.ItemTemplate, "ItemTemplate");
226 Assert.IsNull (dl.SelectedItemTemplate, "SelectedItemTemplate");
227 Assert.IsNull (dl.SeparatorTemplate, "SeparatorTemplate");
230 Assert.AreEqual (-1, dl.EditItemIndex, "EditItemIndex");
231 Assert.AreEqual (-1, dl.SelectedIndex, "SelectedIndex");
233 // others (from DataList)
234 Assert.IsFalse (dl.ExtractTemplateRows, "ExtractTemplateRows");
235 Assert.AreEqual (0, dl.Items.Count, "Items.Count");
236 Assert.AreEqual (0, dl.RepeatColumns, "RepeatColumns");
237 Assert.AreEqual (RepeatDirection.Vertical, dl.RepeatDirection, "RepeatDirection");
238 Assert.AreEqual (RepeatLayout.Table, dl.RepeatLayout, "RepeatLayout");
239 Assert.IsNull (dl.SelectedItem, "SelectedItem");
240 Assert.IsTrue (dl.ShowFooter, "ShowFooter");
241 Assert.IsTrue (dl.ShowHeader, "ShowHeader");
243 // the CellPadding, CellSpacing, GridLines and HorizontalAlign are defined
244 // in BaseDataList but couldn't be totally tested from there
245 Assert.AreEqual (-1, dl.CellPadding, "CellPadding");
246 Assert.AreEqual (0, dl.CellSpacing, "CellSpacing");
248 Assert.AreEqual (GridLines.None, dl.GridLines, "GridLines");
250 Assert.AreEqual (GridLines.Both, dl.GridLines, "GridLines");
252 Assert.AreEqual (HorizontalAlign.NotSet, dl.HorizontalAlign, "HorizontalAlign");
254 Assert.AreEqual (0, dl.Attributes.Count, "Attributes.Count-2");
255 Assert.AreEqual (0, dl.StateBag.Count, "ViewState.Count-2");
259 public void NullProperties ()
261 TestDataList dl = new TestDataList ();
262 Assert.AreEqual (0, dl.Attributes.Count, "Attributes.Count-1");
263 Assert.AreEqual (0, dl.StateBag.Count, "ViewState.Count-1");
265 // some properties couldn't be set in BaseDataList without causing a
266 // InvalidCastException, so they get test here first...
268 Assert.AreEqual (-1, dl.CellPadding, "CellPadding");
270 Assert.AreEqual (0, dl.CellSpacing, "CellSpacing");
271 dl.GridLines = GridLines.None;
272 Assert.AreEqual (GridLines.None, dl.GridLines, "GridLines");
273 dl.HorizontalAlign = HorizontalAlign.NotSet;
274 Assert.AreEqual (HorizontalAlign.NotSet, dl.HorizontalAlign, "HorizontalAlign");
277 // so the TableStyle isn't kept directly in the ViewState
281 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-2");
283 // now for the DataList properties
284 // touching all styles
285 Assert.IsTrue (dl.AlternatingItemStyle.BackColor.IsEmpty, "AlternatingItemStyle");
286 Assert.IsTrue (dl.EditItemStyle.BackColor.IsEmpty, "EditItemStyle");
287 Assert.IsTrue (dl.FooterStyle.BackColor.IsEmpty, "FooterStyle");
288 Assert.IsTrue (dl.HeaderStyle.BackColor.IsEmpty, "HeaderStyle");
289 Assert.IsTrue (dl.ItemStyle.BackColor.IsEmpty, "ItemStyle");
290 Assert.IsTrue (dl.SelectedItemStyle.BackColor.IsEmpty, "SelectedItemStyle");
291 Assert.IsTrue (dl.SeparatorStyle.BackColor.IsEmpty, "SeparatorStyle");
292 dl.AlternatingItemTemplate = null;
293 Assert.IsNull (dl.AlternatingItemTemplate, "AlternatingItemTemplate");
294 dl.EditItemTemplate = null;
295 Assert.IsNull (dl.EditItemTemplate, "EditItemTemplate");
296 dl.FooterTemplate = null;
297 Assert.IsNull (dl.FooterTemplate, "FooterTemplate");
298 dl.HeaderTemplate = null;
299 Assert.IsNull (dl.HeaderTemplate, "HeaderTemplate");
300 dl.ItemTemplate = null;
301 Assert.IsNull (dl.ItemTemplate, "ItemTemplate");
302 dl.SelectedItemTemplate = null;
303 Assert.IsNull (dl.SelectedItemTemplate, "SelectedItemTemplate");
304 dl.SeparatorTemplate = null;
305 Assert.IsNull (dl.SeparatorTemplate, "SeparatorTemplate");
306 dl.EditItemIndex = -1;
307 Assert.AreEqual (-1, dl.EditItemIndex, "EditItemIndex");
308 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-2b");
309 dl.SelectedIndex = -1;
310 Assert.AreEqual (-1, dl.SelectedIndex, "SelectedIndex");
311 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-2c");
312 dl.ExtractTemplateRows = false;
313 Assert.IsFalse (dl.ExtractTemplateRows, "ExtractTemplateRows");
314 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-3");
315 dl.RepeatColumns = 0;
316 Assert.AreEqual (0, dl.RepeatColumns, "RepeatColumns");
317 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-4");
318 dl.RepeatDirection = RepeatDirection.Vertical;
319 Assert.AreEqual (RepeatDirection.Vertical, dl.RepeatDirection, "RepeatDirection");
320 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-5");
321 dl.RepeatLayout = RepeatLayout.Table;
322 Assert.AreEqual (RepeatLayout.Table, dl.RepeatLayout, "RepeatLayout");
323 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-6");
324 dl.ShowFooter = true;
325 Assert.IsTrue (dl.ShowFooter, "ShowFooter");
326 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-7");
327 dl.ShowHeader = true;
328 Assert.IsTrue (dl.ShowHeader, "ShowHeader");
329 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-8");
331 // and all this didn't affect IRepeatInfoUser
332 CheckIRepeatInfoUser (dl);
334 Assert.AreEqual (0, dl.Attributes.Count, "Attributes.Count-2");
338 public void CleanProperties ()
340 TestDataList dl = new TestDataList ();
341 IRepeatInfoUser riu = (dl as IRepeatInfoUser);
342 Assert.AreEqual (0, dl.Attributes.Count, "Attributes.Count-1");
343 Assert.AreEqual (0, dl.StateBag.Count, "ViewState.Count-1");
346 Assert.AreEqual (0, dl.CellPadding, "CellPadding");
348 Assert.AreEqual (1, dl.CellSpacing, "CellSpacing");
349 dl.GridLines = GridLines.Vertical;
350 Assert.AreEqual (GridLines.Vertical, dl.GridLines, "GridLines");
351 dl.HorizontalAlign = HorizontalAlign.Center;
352 Assert.AreEqual (HorizontalAlign.Center, dl.HorizontalAlign, "HorizontalAlign");
355 // so the TableStyle isn't kept directly in the ViewState
359 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-2");
361 // now for the DataList properties
362 // touching all styles
363 dl.AlternatingItemStyle.BackColor = Color.AliceBlue;
364 Assert.IsFalse (dl.AlternatingItemStyle.BackColor.IsEmpty, "AlternatingItemStyle");
365 dl.EditItemStyle.BackColor = Color.AntiqueWhite;
366 Assert.IsFalse (dl.EditItemStyle.BackColor.IsEmpty, "EditItemStyle");
367 dl.FooterStyle.BackColor = Color.Aqua;
368 Assert.IsFalse (dl.FooterStyle.BackColor.IsEmpty, "FooterStyle");
369 dl.HeaderStyle.BackColor = Color.Aquamarine;
370 Assert.IsFalse (dl.HeaderStyle.BackColor.IsEmpty, "HeaderStyle");
371 dl.ItemStyle.BackColor = Color.Azure;
372 Assert.IsFalse (dl.ItemStyle.BackColor.IsEmpty, "ItemStyle");
373 dl.SelectedItemStyle.BackColor = Color.Beige;
374 Assert.IsFalse (dl.SelectedItemStyle.BackColor.IsEmpty, "SelectedItemStyle");
375 dl.SeparatorStyle.BackColor = Color.Bisque;
376 Assert.IsFalse (dl.SeparatorStyle.BackColor.IsEmpty, "SeparatorStyle");
377 dl.AlternatingItemTemplate = new TestTemplate ();
378 Assert.IsNotNull (dl.AlternatingItemTemplate, "AlternatingItemTemplate");
379 dl.EditItemTemplate = new TestTemplate ();
380 Assert.IsNotNull (dl.EditItemTemplate, "EditItemTemplate");
381 dl.FooterTemplate = new TestTemplate ();
382 Assert.IsTrue (riu.HasFooter, "HasFooter");
383 Assert.IsNotNull (dl.FooterTemplate, "FooterTemplate");
384 dl.HeaderTemplate = new TestTemplate ();
385 Assert.IsTrue (riu.HasHeader, "HasHeader");
386 Assert.IsNotNull (dl.HeaderTemplate, "HeaderTemplate");
387 dl.ItemTemplate = new TestTemplate ();
388 Assert.IsNotNull (dl.ItemTemplate, "ItemTemplate");
389 dl.SelectedItemTemplate = new TestTemplate ();
390 Assert.IsNotNull (dl.SelectedItemTemplate, "SelectedItemTemplate");
391 dl.SeparatorTemplate = new TestTemplate ();
392 Assert.IsTrue (riu.HasSeparators, "HasSeparators");
393 Assert.IsNotNull (dl.SeparatorTemplate, "SeparatorTemplate");
394 dl.EditItemIndex = 0;
395 Assert.AreEqual (0, dl.EditItemIndex, "EditItemIndex");
397 dl.EditItemIndex = -1;
399 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-2b");
400 dl.SelectedIndex = 0;
401 Assert.AreEqual (0, dl.SelectedIndex, "SelectedIndex");
403 dl.SelectedIndex = -1;
405 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-2c");
406 dl.ExtractTemplateRows = true;
407 Assert.IsTrue (dl.ExtractTemplateRows, "ExtractTemplateRows");
408 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-3");
409 dl.RepeatColumns = 1;
410 Assert.AreEqual (1, dl.RepeatColumns, "RepeatColumns");
411 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-4");
412 dl.RepeatDirection = RepeatDirection.Horizontal;
413 Assert.AreEqual (RepeatDirection.Horizontal, dl.RepeatDirection, "RepeatDirection");
414 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-5");
415 dl.RepeatLayout = RepeatLayout.Flow;
416 Assert.AreEqual (RepeatLayout.Flow, dl.RepeatLayout, "RepeatLayout");
417 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-6");
418 dl.ShowFooter = false;
419 Assert.IsFalse (riu.HasFooter, "HasFooter(lost)");
420 Assert.IsFalse (dl.ShowFooter, "ShowFooter");
421 Assert.AreEqual (sc++, dl.StateBag.Count, "ViewState.Count-7");
422 dl.ShowHeader = false;
423 Assert.IsFalse (riu.HasHeader, "HasHeader(lost)");
424 Assert.IsFalse (dl.ShowHeader, "ShowHeader");
425 Assert.AreEqual (sc, dl.StateBag.Count, "ViewState.Count-8");
427 // reverting back changes to default...
430 Assert.AreEqual (-1, dl.CellPadding, "-CellPadding");
432 Assert.AreEqual (0, dl.CellSpacing, "-CellSpacing");
433 dl.GridLines = GridLines.None;
434 Assert.AreEqual (GridLines.None, dl.GridLines, "-GridLines");
435 dl.HorizontalAlign = HorizontalAlign.NotSet;
436 Assert.AreEqual (HorizontalAlign.NotSet, dl.HorizontalAlign, "-HorizontalAlign");
437 Assert.AreEqual (sc, dl.StateBag.Count, "ViewState.Count-9");
438 dl.AlternatingItemStyle.Reset ();
439 Assert.IsTrue (dl.AlternatingItemStyle.BackColor.IsEmpty, "-AlternatingItemStyle");
440 dl.EditItemStyle.Reset ();
441 Assert.IsTrue (dl.EditItemStyle.BackColor.IsEmpty, "-EditItemStyle");
442 dl.FooterStyle.Reset ();
443 Assert.IsTrue (dl.FooterStyle.BackColor.IsEmpty, "-FooterStyle");
444 dl.HeaderStyle.Reset ();
445 Assert.IsTrue (dl.HeaderStyle.BackColor.IsEmpty, "-HeaderStyle");
446 dl.ItemStyle.Reset ();
447 Assert.IsTrue (dl.ItemStyle.BackColor.IsEmpty, "-ItemStyle");
448 dl.SelectedItemStyle.Reset ();
449 Assert.IsTrue (dl.SelectedItemStyle.BackColor.IsEmpty, "-SelectedItemStyle");
450 dl.SeparatorStyle.Reset ();
451 Assert.IsTrue (dl.SeparatorStyle.BackColor.IsEmpty, "-SeparatorStyle");
452 dl.AlternatingItemTemplate = null;
453 Assert.IsNull (dl.AlternatingItemTemplate, "-AlternatingItemTemplate");
454 dl.EditItemTemplate = null;
455 Assert.IsNull (dl.EditItemTemplate, "-EditItemTemplate");
456 dl.FooterTemplate = null;
457 Assert.IsNull (dl.FooterTemplate, "-FooterTemplate");
458 dl.HeaderTemplate = null;
459 Assert.IsNull (dl.HeaderTemplate, "-HeaderTemplate");
460 dl.ItemTemplate = null;
461 Assert.IsNull (dl.ItemTemplate, "-ItemTemplate");
462 dl.SelectedItemTemplate = null;
463 Assert.IsNull (dl.SelectedItemTemplate, "-SelectedItemTemplate");
464 dl.SeparatorTemplate = null;
465 Assert.IsNull (dl.SeparatorTemplate, "-SeparatorTemplate");
466 dl.EditItemIndex = -1;
467 Assert.AreEqual (-1, dl.EditItemIndex, "-EditItemIndex");
468 dl.SelectedIndex = -1;
469 Assert.AreEqual (-1, dl.SelectedIndex, "-SelectedIndex");
470 dl.ExtractTemplateRows = false;
471 Assert.IsFalse (dl.ExtractTemplateRows, "-ExtractTemplateRows");
472 dl.RepeatColumns = 0;
473 Assert.AreEqual (0, dl.RepeatColumns, "-RepeatColumns");
474 dl.RepeatDirection = RepeatDirection.Vertical;
475 Assert.AreEqual (RepeatDirection.Vertical, dl.RepeatDirection, "-RepeatDirection");
476 dl.RepeatLayout = RepeatLayout.Table;
477 Assert.AreEqual (RepeatLayout.Table, dl.RepeatLayout, "-RepeatLayout");
478 dl.ShowFooter = true;
479 Assert.IsTrue (dl.ShowFooter, "-ShowFooter");
480 dl.ShowHeader = true;
481 Assert.IsTrue (dl.ShowHeader, "-ShowHeader");
482 Assert.AreEqual (sc, dl.StateBag.Count, "ViewState.Count-10");
484 // and all this didn't affect IRepeatInfoUser
485 CheckIRepeatInfoUser (dl);
487 Assert.AreEqual (0, dl.Attributes.Count, "Attributes.Count-2");
491 public void RepeatedItemCount ()
493 TestDataList dl = new TestDataList ();
494 IRepeatInfoUser riu = (dl as IRepeatInfoUser);
495 dl.DataSource = GetData (10);
496 Assert.AreEqual (0, riu.RepeatedItemCount, "before Bind");
498 Assert.AreEqual (10, riu.RepeatedItemCount, "after Bind");
502 [ExpectedException (typeof (ArgumentOutOfRangeException))]
503 public void GetItemStyle_Header_Empty ()
505 TestDataList dl = new TestDataList ();
506 IRepeatInfoUser riu = (dl as IRepeatInfoUser);
507 // empty list/controls
508 riu.GetItemStyle (ListItemType.Header, 0);
512 public void GetItemStyle_Header ()
514 TestDataList dl = new TestDataList ();
515 dl.DataSource = GetData (6);
517 IRepeatInfoUser riu = (dl as IRepeatInfoUser);
518 Assert.IsNull (riu.GetItemStyle (ListItemType.Header, 0));
522 [ExpectedException (typeof (ArgumentOutOfRangeException))]
523 public void GetItemStyle_Separator_Empty ()
525 TestDataList dl = new TestDataList ();
526 IRepeatInfoUser riu = (dl as IRepeatInfoUser);
527 // empty list/controls
528 riu.GetItemStyle (ListItemType.Separator, 0);
532 public void GetItemStyle_Separator ()
534 TestDataList dl = new TestDataList ();
535 dl.DataSource = GetData (6);
537 IRepeatInfoUser riu = (dl as IRepeatInfoUser);
538 Assert.IsNull (riu.GetItemStyle (ListItemType.Separator, 0));
542 public void GetItemStyle_Pager_Empty ()
544 TestDataList dl = new TestDataList ();
545 IRepeatInfoUser riu = (dl as IRepeatInfoUser);
546 // Pager isn't supported in DataList
547 Assert.IsNull (riu.GetItemStyle (ListItemType.Pager, 0), "Pager-0");
551 public void Controls ()
553 TestDataList dl = new TestDataList ();
554 Assert.AreEqual (0, dl.Controls.Count, "Controls-1");
555 Assert.AreEqual (0, dl.Items.Count, "Items-1");
556 dl.DataSource = GetDataSource (3);
557 Assert.AreEqual (0, dl.Controls.Count, "Controls-2");
558 Assert.AreEqual (0, dl.Items.Count, "Items-2");
560 Assert.AreEqual (0, dl.Controls.Count, "Controls-3");
561 Assert.AreEqual (0, dl.Items.Count, "Items-3");
565 [ExpectedException (typeof (ArgumentOutOfRangeException))]
566 public void EditItemIndexTooLow ()
568 TestDataList dl = new TestDataList ();
569 dl.EditItemIndex = -2;
573 [ExpectedException (typeof (ArgumentOutOfRangeException))]
574 public void SelectedIndexTooLow ()
576 TestDataList dl = new TestDataList ();
577 dl.SelectedIndex = -2;
581 public void SelectIndexOutOfRange ()
583 TestDataList dl = new TestDataList ();
584 // No exception is thrown
585 dl.SelectedIndex = 25;
589 [ExpectedException (typeof (ArgumentOutOfRangeException))]
590 public void SelectItemOutOfRange ()
592 TestDataList dl = new TestDataList ();
593 dl.SelectedIndex = 25;
594 DataListItem dli = dl.SelectedItem;
598 public void SaveViewState ()
600 TestDataList dl = new TestDataList ();
603 object[] vs = (object[]) dl.SaveState ();
605 Assert.AreEqual (9, vs.Length, "Size");
607 Assert.AreEqual (8, vs.Length, "Size");
609 // By default the viewstate is all null
611 for (; i < vs.Length; i++)
612 Assert.IsNull (vs [i], "Empty-" + i);
618 dl.GridLines = GridLines.Vertical;
619 vs = (object []) dl.SaveState ();
620 Assert.IsNotNull (vs[i++], "GridLines");
622 dl.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
623 vs = (object []) dl.SaveState ();
624 Assert.IsNotNull (vs[i++], "ItemStyle");
626 dl.SelectedItemStyle.HorizontalAlign = HorizontalAlign.Center;
627 vs = (object []) dl.SaveState ();
628 Assert.IsNotNull (vs[i++], "SelectedItemStyle");
630 dl.AlternatingItemStyle.HorizontalAlign = HorizontalAlign.Center;
631 vs = (object []) dl.SaveState ();
632 Assert.IsNotNull (vs[i++], "AlternatingItemStyle");
634 dl.EditItemStyle.HorizontalAlign = HorizontalAlign.Center;
635 vs = (object []) dl.SaveState ();
636 Assert.IsNotNull (vs[i++], "EditItemStyle");
638 dl.SeparatorStyle.HorizontalAlign = HorizontalAlign.Center;
639 vs = (object []) dl.SaveState ();
640 Assert.IsNotNull (vs[i++], "SeparatorStyle");
642 dl.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
643 vs = (object []) dl.SaveState ();
644 Assert.IsNotNull (vs[i++], "HeaderStyle");
646 dl.FooterStyle.HorizontalAlign = HorizontalAlign.Center;
647 vs = (object []) dl.SaveState ();
648 Assert.IsNotNull (vs[i++], "FooterStyle");
650 // GridLines was moved last
651 dl.GridLines = GridLines.Vertical;
652 vs = (object []) dl.SaveState ();
653 Assert.IsNotNull (vs[i++], "GridLines");
658 [ExpectedException (typeof (InvalidOperationException))]
659 public void SelectedValue_WithoutDataKeyField ()
661 TestDataList dl = new TestDataList ();
662 Assert.IsNull (dl.SelectedValue, "SelectedValue");
666 public void SelectedValue_WithUnexistingDataKeyField ()
668 TestDataList dl = new TestDataList ();
669 dl.DataKeyField = "mono";
670 Assert.IsNull (dl.SelectedValue, "SelectedValue");
673 private bool cancelCommandEvent;
674 private bool deleteCommandEvent;
675 private bool editCommandEvent;
676 private bool itemCommandEvent;
677 private bool itemCreatedEvent;
678 private bool itemDataBoundEvent;
679 private bool updateCommandEvent;
680 private bool selectedIndexChangedEvent;
682 private void ResetEvents ()
684 cancelCommandEvent = false;
685 deleteCommandEvent = false;
686 editCommandEvent = false;
687 itemCommandEvent = false;
688 itemCreatedEvent = false;
689 itemDataBoundEvent = false;
690 updateCommandEvent = false;
691 selectedIndexChangedEvent = false;
694 private void CancelCommandHandler (object sender, DataListCommandEventArgs e)
696 cancelCommandEvent = true;
699 private void DeleteCommandHandler (object sender, DataListCommandEventArgs e)
701 deleteCommandEvent = true;
704 private void EditCommandHandler (object sender, DataListCommandEventArgs e)
706 editCommandEvent = true;
709 private void ItemCommandHandler (object sender, DataListCommandEventArgs e)
711 itemCommandEvent = true;
714 private void ItemCreatedHandler (object sender, DataListItemEventArgs e)
716 itemCreatedEvent = true;
719 private void ItemDataBoundHandler (object sender, DataListItemEventArgs e)
721 itemDataBoundEvent = true;
724 private void SelectedIndexChangedHandler (object sender, EventArgs e)
726 selectedIndexChangedEvent = true;
729 private void UpdateCommandHandler (object sender, DataListCommandEventArgs e)
731 updateCommandEvent = true;
735 public void Events ()
737 TestDataList dl = new TestDataList ();
738 DataListCommandEventArgs command_args = new DataListCommandEventArgs (null,
739 null, new CommandEventArgs (String.Empty, String.Empty));
740 DataListItemEventArgs item_args = new DataListItemEventArgs (null);
743 dl.CancelCommand += new DataListCommandEventHandler (CancelCommandHandler);
744 dl.DoCancelCommand (command_args);
745 Assert.IsTrue (cancelCommandEvent, "cancelCommandEvent");
748 dl.DeleteCommand += new DataListCommandEventHandler (DeleteCommandHandler);
749 dl.DoDeleteCommand (command_args);
750 Assert.IsTrue (deleteCommandEvent, "deleteCommandEvent");
753 dl.EditCommand += new DataListCommandEventHandler (EditCommandHandler);
754 dl.DoEditCommand (command_args);
755 Assert.IsTrue (editCommandEvent, "editCommandEvent");
758 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
759 dl.DoItemCommand (command_args);
760 Assert.IsTrue (itemCommandEvent, "itemCommandEvent");
763 dl.ItemCreated += new DataListItemEventHandler (ItemCreatedHandler);
764 dl.DoItemCreated (item_args);
765 Assert.IsTrue (itemCreatedEvent, "itemCreatedEvent");
768 dl.ItemDataBound += new DataListItemEventHandler (ItemDataBoundHandler);
769 dl.DoItemDataBound (item_args);
770 Assert.IsTrue (itemDataBoundEvent, "itemDataBoundEvent");
773 dl.UpdateCommand += new DataListCommandEventHandler (UpdateCommandHandler);
774 dl.DoUpdateCommand (command_args);
775 Assert.IsTrue (updateCommandEvent, "updateCommandEvent");
778 dl.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler);
779 dl.DoSelectedIndexChanged (new EventArgs ());
780 Assert.IsTrue (selectedIndexChangedEvent, "selectedIndexChangedEvent");
784 public void BubbleEvent ()
786 TestDataList dl = new TestDataList ();
787 DataListCommandEventArgs command_args;
793 command_args = new DataListCommandEventArgs (null,
794 null, new CommandEventArgs ("Cancel", String.Empty));
795 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
796 dl.CancelCommand += new DataListCommandEventHandler (CancelCommandHandler);
797 dl.DoBubbleEvent (this, command_args);
798 Assert.IsTrue (cancelCommandEvent, "cancelCommandEvent-1");
799 Assert.IsTrue (itemCommandEvent, "#00");
802 command_args = new DataListCommandEventArgs (null,
803 null, new CommandEventArgs ("cancel", String.Empty));
804 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
805 dl.CancelCommand += new DataListCommandEventHandler (CancelCommandHandler);
806 dl.DoBubbleEvent (this, command_args);
807 Assert.IsTrue (cancelCommandEvent, "cancelCommandEvent-2");
808 Assert.IsTrue (itemCommandEvent, "#00");
811 command_args = new DataListCommandEventArgs (null,
812 null, new CommandEventArgs ("CANCEL", String.Empty));
813 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
814 dl.CancelCommand += new DataListCommandEventHandler (CancelCommandHandler);
815 dl.DoBubbleEvent (this, command_args);
816 Assert.IsTrue (cancelCommandEvent, "cancelCommandEvent-3");
817 Assert.IsTrue (itemCommandEvent, "#00");
823 command_args = new DataListCommandEventArgs (null,
824 null, new CommandEventArgs ("Delete", String.Empty));
825 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
826 dl.DeleteCommand += new DataListCommandEventHandler (DeleteCommandHandler);
827 dl.DoBubbleEvent (this, command_args);
828 Assert.IsTrue (deleteCommandEvent, "deleteCommandEvent-1");
829 Assert.IsTrue (itemCommandEvent, "#00");
832 command_args = new DataListCommandEventArgs (null,
833 null, new CommandEventArgs ("delete", String.Empty));
834 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
835 dl.DeleteCommand += new DataListCommandEventHandler (DeleteCommandHandler);
836 dl.DoBubbleEvent (this, command_args);
837 Assert.IsTrue (deleteCommandEvent, "deleteCommandEvent-2");
838 Assert.IsTrue (itemCommandEvent, "#00");
841 command_args = new DataListCommandEventArgs (null,
842 null, new CommandEventArgs ("DELETE", String.Empty));
843 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
844 dl.DeleteCommand += new DataListCommandEventHandler (DeleteCommandHandler);
845 dl.DoBubbleEvent (this, command_args);
846 Assert.IsTrue (deleteCommandEvent, "deleteCommandEvent-3");
847 Assert.IsTrue (itemCommandEvent, "#00");
853 command_args = new DataListCommandEventArgs (null,
854 null, new CommandEventArgs ("Edit", String.Empty));
855 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
856 dl.EditCommand += new DataListCommandEventHandler (EditCommandHandler);
857 dl.DoBubbleEvent (this, command_args);
858 Assert.IsTrue (editCommandEvent, "editCommandEvent-1");
859 Assert.IsTrue (itemCommandEvent, "#00");
862 command_args = new DataListCommandEventArgs (null,
863 null, new CommandEventArgs ("edit", String.Empty));
864 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
865 dl.EditCommand += new DataListCommandEventHandler (EditCommandHandler);
866 dl.DoBubbleEvent (this, command_args);
867 Assert.IsTrue (editCommandEvent, "editCommandEvent-2");
868 Assert.IsTrue (itemCommandEvent, "#00");
871 command_args = new DataListCommandEventArgs (null,
872 null, new CommandEventArgs ("EDIT", String.Empty));
873 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
874 dl.EditCommand += new DataListCommandEventHandler (EditCommandHandler);
875 dl.DoBubbleEvent (this, command_args);
876 Assert.IsTrue (editCommandEvent, "editCommandEvent-3");
877 Assert.IsTrue (itemCommandEvent, "#00");
883 command_args = new DataListCommandEventArgs (null,
884 null, new CommandEventArgs ("Item", String.Empty));
885 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
886 dl.DoBubbleEvent (this, command_args);
887 Assert.IsTrue (itemCommandEvent, "itemCommandEvent-1");
890 command_args = new DataListCommandEventArgs (null,
891 null, new CommandEventArgs ("item", String.Empty));
892 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
893 dl.DoBubbleEvent (this, command_args);
894 Assert.IsTrue (itemCommandEvent, "itemCommandEvent-2");
897 command_args = new DataListCommandEventArgs (null,
898 null, new CommandEventArgs ("ITEM", String.Empty));
899 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
900 dl.DoBubbleEvent (this, command_args);
901 Assert.IsTrue (itemCommandEvent, "itemCommandEvent-3");
907 command_args = new DataListCommandEventArgs (null,
908 null, new CommandEventArgs ("Update", String.Empty));
909 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
910 dl.UpdateCommand += new DataListCommandEventHandler (UpdateCommandHandler);
911 dl.DoBubbleEvent (this, command_args);
912 Assert.IsTrue (updateCommandEvent, "updateCommandEvent-1");
913 Assert.IsTrue (itemCommandEvent, "#00");
916 command_args = new DataListCommandEventArgs (null,
917 null, new CommandEventArgs ("update", String.Empty));
918 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
919 dl.UpdateCommand += new DataListCommandEventHandler (UpdateCommandHandler);
920 dl.DoBubbleEvent (this, command_args);
921 Assert.IsTrue (updateCommandEvent, "updateCommandEvent-2");
922 Assert.IsTrue (itemCommandEvent, "#00");
925 command_args = new DataListCommandEventArgs (null,
926 null, new CommandEventArgs ("UPDATE", String.Empty));
927 dl.UpdateCommand += new DataListCommandEventHandler (UpdateCommandHandler);
928 dl.DoBubbleEvent (this, command_args);
929 Assert.IsTrue (updateCommandEvent, "updateCommandEvent-3");
930 Assert.IsTrue (itemCommandEvent, "#00");
935 DataListItem item = new DataListItem (0, ListItemType.Item);
938 command_args = new DataListCommandEventArgs (item, null,
939 new CommandEventArgs ("Select", String.Empty));
940 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
941 dl.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler);
942 dl.DoBubbleEvent (this, command_args);
943 Assert.IsTrue (selectedIndexChangedEvent, "selectedIndexChangedEvent-1");
944 Assert.IsTrue (itemCommandEvent, "#00");
947 command_args = new DataListCommandEventArgs (item, null,
948 new CommandEventArgs ("select", String.Empty));
949 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
950 dl.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler);
951 dl.DoBubbleEvent (this, command_args);
952 Assert.IsTrue (selectedIndexChangedEvent, "selectedIndexChangedEvent-2");
953 Assert.IsTrue (itemCommandEvent, "#00");
956 command_args = new DataListCommandEventArgs (item, null,
957 new CommandEventArgs ("SELECT", String.Empty));
958 dl.ItemCommand += new DataListCommandEventHandler (ItemCommandHandler);
959 dl.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler);
960 dl.DoBubbleEvent (this, command_args);
961 Assert.IsTrue (selectedIndexChangedEvent, "selectedIndexChangedEvent-3");
962 Assert.IsTrue (itemCommandEvent, "#00");
966 public void NControls1 ()
968 TestDataList dl = new TestDataList ();
969 dl.DataSource = GetData (5);
971 Assert.AreEqual (5, dl.Controls.Count, "#01");
975 public void NControls2 ()
977 TestDataList dl = new TestDataList ();
978 dl.ShowHeader = true;
979 dl.ShowFooter = true;
980 dl.DataSource = GetData (5);
982 Assert.AreEqual (5, dl.Controls.Count, "#01");
985 class Templ : ITemplate {
986 public void InstantiateIn (Control ctrl)
988 ctrl.Controls.Add (new LiteralControl ("Lalalaa"));
992 //Some real templates for testing if proper Template was used
993 class ItemTemplate : ITemplate {
994 public void InstantiateIn (Control container)
996 Label lbl = new Label();
998 container.Controls.Add(lbl);
1002 class EditItemTemplate : ITemplate {
1003 public void InstantiateIn (Control container)
1005 TextBox tb = new TextBox();
1006 tb.ID = "eitemtmpl";
1007 container.Controls.Add(tb);
1012 public void ProperTemplateSelectedIndexEqualsEditIndex ()
1014 TestDataList dl = new TestDataList();
1015 dl.ItemTemplate = new ItemTemplate();
1016 dl.AlternatingItemTemplate = new ItemTemplate();
1017 dl.SelectedItemTemplate = new ItemTemplate();
1018 dl.EditItemTemplate = new EditItemTemplate();
1019 dl.DataSource = GetData(5);
1020 dl.SelectedIndex = 0;
1021 dl.EditItemIndex = 0;
1023 object canIGetMyEditItem = dl.Items[dl.EditItemIndex].FindControl("eitemtmpl");
1024 Assert.IsTrue(canIGetMyEditItem != null, "ProperTemplateSelectedIndexEqualsEditIndex");
1028 public void NControls3 ()
1030 TestDataList dl = new TestDataList ();
1031 dl.ShowHeader = true;
1032 dl.HeaderTemplate = new Templ ();
1033 dl.ShowFooter = true;
1034 dl.FooterTemplate = new Templ ();
1035 dl.DataSource = GetData (5);
1037 Assert.AreEqual (7, dl.Controls.Count, "#01");
1041 public void NControls4 ()
1043 TestDataList dl = new TestDataList ();
1044 dl.SeparatorTemplate = new Templ ();
1045 dl.DataSource = GetData (5);
1047 Assert.AreEqual (10, dl.Controls.Count, "#01");
1051 public void NControls5 ()
1053 TestDataList dl = new TestDataList ();
1054 dl.ShowHeader = true;
1055 dl.HeaderTemplate = new Templ ();
1056 dl.SeparatorTemplate = new Templ ();
1057 dl.DataSource = GetData (5);
1059 Assert.AreEqual (11, dl.Controls.Count, "#01");
1064 public void DataSourceID ()
1066 Page p = new Page();
1067 ObjectDataSource ds = new ObjectDataSource();
1068 ds.ID = "ObjectDataSource1";
1069 ds.TypeName = "System.Guid";
1070 ds.SelectMethod = "ToByteArray";
1071 TestDataList dl = new TestDataList ();
1076 dl.DataSourceID = "ObjectDataSource1";
1078 Assert.AreEqual (16, dl.Controls.Count, "#01");
1083 public void NControls6 ()
1085 TestDataList dl = new TestDataList ();
1086 dl.ShowHeader = true;
1087 dl.HeaderTemplate = new Templ ();
1088 dl.ShowFooter = true;
1089 dl.FooterTemplate = new Templ ();
1090 dl.SeparatorTemplate = new Templ ();
1091 dl.DataSource = GetData (6);
1093 Assert.AreEqual (14, dl.Controls.Count, "#01");
1095 Assert.AreEqual (ListItemType.Header, ((DataListItem) dl.Controls [0]).ItemType, "#02");
1096 for (int i = 0; i < 3; i++) {
1097 int b = (i * 4) + 1;
1098 DataListItem one = (DataListItem) dl.Controls [b];
1099 DataListItem two = (DataListItem) dl.Controls [b + 1];
1100 DataListItem three = (DataListItem) dl.Controls [b + 2];
1101 DataListItem four = (DataListItem) dl.Controls [b + 3];
1102 Assert.AreEqual (ListItemType.Item, one.ItemType, String.Format ("#02-{0}", b));
1103 Assert.AreEqual (ListItemType.Separator, two.ItemType, String.Format ("#02-{0}", b + 1));
1104 Assert.AreEqual (ListItemType.AlternatingItem, three.ItemType, String.Format ("#02-{0}", b + 2));
1105 Assert.AreEqual (ListItemType.Separator, four.ItemType, String.Format ("#02-{0}", b + 3));
1108 Assert.AreEqual (ListItemType.Footer, ((DataListItem) dl.Controls [13]).ItemType, "#03");
1112 public void RepeatInfo1 ()
1114 TestDataList dl = new TestDataList ();
1115 dl.ShowHeader = true;
1116 dl.HeaderTemplate = new Templ ();
1117 dl.ShowFooter = true;
1118 dl.FooterTemplate = new Templ ();
1119 dl.SeparatorTemplate = new Templ ();
1120 dl.DataSource = GetData (6);
1122 IRepeatInfoUser repeater = (IRepeatInfoUser) dl;
1123 Assert.AreEqual (true, repeater.HasHeader, "#01");
1124 Assert.AreEqual (true, repeater.HasFooter, "#02");
1125 Assert.AreEqual (true, repeater.HasSeparators, "#03");
1126 Assert.AreEqual (6, repeater.RepeatedItemCount, "#04");
1130 public void RepeatInfo2 ()
1132 TestDataList dl = new TestDataList ();
1133 dl.ShowHeader = true;
1134 dl.HeaderTemplate = new Templ ();
1135 dl.ShowFooter = true;
1136 dl.FooterTemplate = new Templ ();
1137 dl.SeparatorTemplate = new Templ ();
1138 dl.DataSource = GetData (6);
1140 IRepeatInfoUser repeater = (IRepeatInfoUser) dl;
1141 Style style = repeater.GetItemStyle (ListItemType.Pager, -1);
1142 Assert.IsNull (style, "#01");
1143 style = repeater.GetItemStyle (ListItemType.Pager, 0);
1144 Assert.IsNull (style, "#02");
1145 style = repeater.GetItemStyle (ListItemType.Pager, 15);
1146 Assert.IsNull (style, "#03");
1150 public void RepeatInfo3 ()
1152 TestDataList dl = new TestDataList ();
1153 dl.ShowHeader = true;
1154 dl.HeaderTemplate = new Templ ();
1155 dl.ShowFooter = true;
1156 dl.FooterTemplate = new Templ ();
1157 dl.SeparatorTemplate = new Templ ();
1158 dl.DataSource = GetData (6);
1160 IRepeatInfoUser repeater = (IRepeatInfoUser) dl;
1161 Style style = repeater.GetItemStyle (ListItemType.Header, -1);
1162 DataListItem header = (DataListItem) dl.Controls [0];
1163 Assert.IsNull (style, "#01");
1165 style = repeater.GetItemStyle (ListItemType.Footer, -1);
1166 DataListItem footer = (DataListItem) dl.Controls [13];
1167 Assert.IsNull (style, "#02");
1168 for (int i = 0; i < 6; i++) {
1169 style = repeater.GetItemStyle (ListItemType.Item, i);
1170 Assert.IsNull (style, String.Format ("#02-{0}", i));
1175 public void RepeatInfo4 ()
1177 TestDataList dl = new TestDataList ();
1178 dl.DataSource = GetData (6);
1179 dl.ItemStyle.ForeColor = Color.Blue;
1181 dl.PrepareCH (); // removing this causes all the GetItemStyle calls to return null
1182 IRepeatInfoUser repeater = (IRepeatInfoUser) dl;
1183 for (int i = 0; i < 6; i++) {
1184 Style style = repeater.GetItemStyle (ListItemType.Item, i);
1185 DataListItem item = (DataListItem) dl.Controls [i];
1186 Assert.AreEqual (style, item.ControlStyle, String.Format ("#01-{0}", i));