2 // System.Web.UI.WebControls.ListView
5 // Marek Habersack (mhabersack@novell.com)
7 // (C) 2008-2010 Novell, Inc
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 System.Collections.Generic;
32 using System.Collections.Specialized;
33 using System.Diagnostics;
35 using System.Reflection;
37 using System.Web.UI.HtmlControls;
38 using System.Web.UI.WebControls;
40 using NUnit.Framework;
41 using MonoTests.SystemWeb.Framework;
42 using MonoTests.stand_alone.WebHarness;
44 namespace MonoTests.System.Web.UI.WebControls
46 public sealed class ListViewPoker : ListView
48 EventRecorder recorder;
50 public StateBag StateBag {
51 get { return base.ViewState; }
54 void RecordEvent (string suffix)
59 recorder.Record (suffix);
62 public ListViewPoker ()
67 public ListViewPoker (EventRecorder recorder)
69 this.recorder = recorder;
72 internal void SetEventRecorder (EventRecorder recorder)
74 this.recorder = recorder;
77 public override void ExtractItemValues (IOrderedDictionary itemValues, ListViewItem item, bool includePrimaryKey)
79 RecordEvent ("Enter");
80 base.ExtractItemValues (itemValues, item, includePrimaryKey);
81 RecordEvent ("Leave");
84 protected override void OnItemCanceling (ListViewCancelEventArgs e)
86 RecordEvent ("Enter");
87 base.OnItemCanceling (e);
88 RecordEvent ("Leave");
91 protected override void OnItemCommand (ListViewCommandEventArgs e)
93 RecordEvent ("Enter");
94 base.OnItemCommand (e);
95 RecordEvent ("Leave");
98 protected override void OnItemCreated (ListViewItemEventArgs e)
100 RecordEvent ("Enter");
101 base.OnItemCreated (e);
102 RecordEvent ("Leave");
105 protected override void OnItemDataBound (ListViewItemEventArgs e)
107 RecordEvent ("Enter");
108 base.OnItemDataBound (e);
109 RecordEvent ("Leave");
112 protected override void OnItemDeleted (ListViewDeletedEventArgs e)
114 RecordEvent ("Enter");
115 base.OnItemDeleted (e);
116 RecordEvent ("Leave");
119 protected override void OnItemDeleting (ListViewDeleteEventArgs e)
121 RecordEvent ("Enter");
122 base.OnItemDeleting (e);
123 RecordEvent ("Leave");
126 protected override void OnItemEditing (ListViewEditEventArgs e)
128 RecordEvent ("Enter");
129 base.OnItemEditing (e);
130 RecordEvent ("Leave");
133 protected override void OnItemInserted (ListViewInsertedEventArgs e)
135 RecordEvent ("Enter");
136 base.OnItemInserted (e);
137 RecordEvent ("Leave");
140 protected override void OnItemInserting (ListViewInsertEventArgs e)
142 RecordEvent ("Enter");
143 base.OnItemInserting (e);
144 RecordEvent ("Leave");
147 protected override void OnItemUpdated (ListViewUpdatedEventArgs e)
149 RecordEvent ("Enter");
150 base.OnItemUpdated (e);
151 RecordEvent ("Leave");
154 protected override void OnItemUpdating (ListViewUpdateEventArgs e)
156 RecordEvent ("Enter");
157 base.OnItemUpdating (e);
158 RecordEvent ("Leave");
161 protected override void OnLayoutCreated (EventArgs e)
163 RecordEvent ("Enter");
164 base.OnLayoutCreated (e);
165 RecordEvent ("Leave");
168 protected override void OnPagePropertiesChanged (EventArgs e)
170 RecordEvent ("Enter");
171 base.OnPagePropertiesChanged (e);
172 RecordEvent ("Leave");
175 protected override void OnPagePropertiesChanging (PagePropertiesChangingEventArgs e)
177 RecordEvent ("Enter");
178 base.OnPagePropertiesChanging (e);
179 RecordEvent ("Leave");
182 protected override void OnSelectedIndexChanged (EventArgs e)
184 RecordEvent ("Enter");
185 base.OnSelectedIndexChanged (e);
186 RecordEvent ("Leave");
189 protected override void OnSelectedIndexChanging (ListViewSelectEventArgs e)
191 RecordEvent ("Enter");
192 base.OnSelectedIndexChanging (e);
193 RecordEvent ("Leave");
196 protected override void OnSorted (EventArgs e)
198 RecordEvent ("Enter");
200 RecordEvent ("Leave");
203 protected override void OnSorting (ListViewSortEventArgs e)
205 RecordEvent ("Enter");
207 RecordEvent ("Leave");
210 protected override void OnTotalRowCountAvailable (PageEventArgs e)
212 RecordEvent ("Enter");
213 base.OnTotalRowCountAvailable (e);
214 RecordEvent ("Leave");
217 public void DoSetPageProperties (int startRowIndex, int maximumRows, bool databind)
219 SetPageProperties (startRowIndex, maximumRows, databind);
222 public bool GetRequiresDataBinding ()
224 return RequiresDataBinding;
227 public int GetMaximumRowsProperty ()
232 public int GetStartRowIndexProperty ()
234 return StartRowIndex;
237 public void DoAddControlToContainer (Control control, Control container, int addLocation)
239 AddControlToContainer (control, container, addLocation);
242 public void DoCreateControlStyle ()
244 CreateControlStyle ();
247 public ListViewDataItem DoCreateDataItem (int dataItemIndex, int displayIndex)
249 return CreateDataItem (dataItemIndex, displayIndex);
252 public DataSourceSelectArguments DoCreateDataSourceSelectArguments ()
254 return CreateDataSourceSelectArguments ();
257 public void DoCreateEmptyDataItem ()
259 CreateEmptyDataItem ();
262 public ListViewItem DoCreateEmptyItem ()
264 return CreateEmptyItem ();
267 public ListViewItem DoCreateInsertItem ()
269 return CreateInsertItem ();
272 public ListViewItem DoCreateItem (ListViewItemType type)
274 return CreateItem (type);
277 public void DoCreateLayoutTemplate ()
279 CreateLayoutTemplate ();
282 public void DoEnsureLayoutTemplate ()
284 EnsureLayoutTemplate ();
287 public Control DoFindPlaceholder (string containerID, Control container)
289 return FindPlaceholder (containerID, container);
292 public void DoInstantiateEmptyDataTemplate (Control container)
294 InstantiateEmptyDataTemplate (container);
297 public void DoInstantiateEmptyItemTemplate (Control container)
299 InstantiateEmptyItemTemplate (container);
302 public void DoInstantiateGroupSeparatorTemplate (Control container)
304 InstantiateGroupSeparatorTemplate (container);
307 public void DoInstantiateGroupTemplate (Control container)
309 InstantiateGroupTemplate (container);
312 public void DoInstantiateInsertItemTemplate (Control container)
314 InstantiateInsertItemTemplate (container);
317 public void DoInstantiateItemSeparatorTemplate (Control container)
319 InstantiateItemSeparatorTemplate (container);
322 public void DoInstantiateItemTemplate (Control container, int displayIndex)
324 InstantiateItemTemplate (container, displayIndex);
328 class TestTemplate : ITemplate
330 public void InstantiateIn (Control container)
332 Control control = new Control ();
333 control.ID = "TestTemplateControl";
335 container.Controls.Add (control);
339 class DeepTestTemplate : ITemplate
341 public void InstantiateIn (Control container)
343 Control top = new Control (), control;
344 top.Controls.Add (new Control ());
345 control = new Control ();
346 control.ID = "DeepTestTemplateControl";
347 top.Controls [0].Controls.Add (control);
349 container.Controls.Add (top);
354 public class ListViewTest
356 enum ListViewItemTemplate
371 public void ListView_Init ()
374 WebTest.CopyResource (GetType (), "MonoTests.System.Web.Extensions.resources.ListViewTest.aspx", "ListViewTest.aspx");
375 WebTest.CopyResource (GetType (), "MonoTests.System.Web.Extensions.resources.ListViewTotalRowCount_Bug535701_1.aspx", "ListViewTotalRowCount_Bug535701_1.aspx");
376 WebTest.CopyResource (GetType (), "MonoTests.System.Web.Extensions.resources.ListViewTotalRowCount_Bug535701_2.aspx", "ListViewTotalRowCount_Bug535701_2.aspx");
377 WebTest.CopyResource (GetType (), "MonoTests.System.Web.Extensions.resources.ListViewTotalRowCount_Bug604053.aspx", "ListViewTotalRowCount_Bug604053.aspx");
379 WebTest.CopyResource (GetType (), "ListViewTest.aspx", "ListViewTest.aspx");
380 WebTest.CopyResource (GetType (), "ListViewTotalRowCount_Bug535701_1.aspx", "ListViewTotalRowCount_Bug535701_1.aspx");
381 WebTest.CopyResource (GetType (), "ListViewTotalRowCount_Bug535701_2.aspx", "ListViewTotalRowCount_Bug535701_2.aspx");
382 WebTest.CopyResource (GetType (), "ListViewTotalRowCount_Bug604053.aspx", "ListViewTotalRowCount_Bug604053.aspx");
387 public void ListView_InitialValues ()
389 ListViewPoker lvp = new ListViewPoker (null);
391 Assert.AreEqual (0, lvp.StateBag.Count, "ViewState.Count");
392 Assert.AreEqual (true, lvp.ConvertEmptyStringToNull, "ConvertEmptyStringToNull");
393 Assert.AreEqual (0, lvp.DataKeyNames.Length, "DataKeyNames.Length");
394 Assert.AreEqual (-1, lvp.EditIndex, "EditIndex");
395 Assert.AreEqual (null, lvp.EditItem, "EditItem");
396 Assert.AreEqual (null, lvp.EditItemTemplate, "EditItemTemplate");
397 Assert.AreEqual (null, lvp.EmptyDataTemplate, "EmptyDataTemplate");
398 Assert.AreEqual (null, lvp.EmptyItemTemplate, "EmptyItemTemplate");
399 Assert.AreEqual (false, lvp.EnableModelValidation, "EnableModelValidation");
400 Assert.AreEqual (1, lvp.GroupItemCount, "GroupItemCount");
401 Assert.AreEqual ("groupPlaceholder", lvp.GroupPlaceholderID, "GroupPlaceholderID");
402 Assert.AreEqual (null, lvp.GroupSeparatorTemplate, "GroupSeparatorTemplate");
403 Assert.AreEqual (null, lvp.GroupTemplate, "GroupTemplate");
404 Assert.AreEqual (null, lvp.InsertItem, "InsertItem");
405 Assert.AreEqual (InsertItemPosition.None, lvp.InsertItemPosition, "InsertItemPosition");
406 Assert.AreEqual (null, lvp.InsertItemTemplate, "InsertItemTemplate");
407 Assert.AreEqual ("itemPlaceholder", lvp.ItemPlaceholderID, "ItemPlaceholderID");
408 Assert.AreEqual (0, lvp.Items.Count, "Items.Length");
409 Assert.AreEqual (null, lvp.ItemSeparatorTemplate, "ItemSeparatorTemplate");
410 Assert.AreEqual (null, lvp.ItemTemplate, "ItemTemplate");
411 Assert.AreEqual (null, lvp.LayoutTemplate, "LayoutTemplate");
412 Assert.AreEqual (-1, lvp.GetMaximumRowsProperty (), "MaximumRows");
413 Assert.AreEqual (null, lvp.SelectedPersistedDataKey, "SelectedPersistedDataKey");
414 Assert.AreEqual (-1, lvp.SelectedIndex, "SelectedIndex");
415 Assert.AreEqual (null, lvp.SelectedItemTemplate, "SelectedItemTemplate");
416 Assert.AreEqual (SortDirection.Ascending, lvp.SortDirection, "SortDirection");
417 Assert.AreEqual (String.Empty, lvp.SortExpression, "SortExpression");
418 Assert.AreEqual (0, lvp.GetStartRowIndexProperty (), "StartRowIndex");
422 [ExpectedException (typeof (InvalidOperationException))]
423 public void ListView_InitialValues_SelectedValue ()
425 var lvp = new ListViewPoker (null);
426 Assert.AreEqual (null, lvp.SelectedValue, "SelectedValue");
430 public void ListView_SetPageProperties_Events ()
432 var events = new EventRecorder ();
433 var lvp = new ListViewPoker (events);
435 // No events expected: databind is false
437 lvp.DoSetPageProperties (0, 1, false);
439 // No events expected: startRowIndex and maximumRows don't change values
441 lvp.DoSetPageProperties (0, 1, true);
442 Assert.AreEqual (0, events.Count, "#A1");
444 // No events expected: startRowIndex changes, but databind is false
446 lvp.DoSetPageProperties(1, 1, false);
447 Assert.AreEqual (0, events.Count, "#A2");
449 // No events expected: maximumRows changes, but databind is false
451 lvp.DoSetPageProperties(1, 2, false);
452 Assert.AreEqual (0, events.Count, "#A3");
454 // No events expected: maximumRows and startRowIndex change but databind is
457 lvp.DoSetPageProperties(3, 4, false);
458 Assert.AreEqual (0, events.Count, "#A4");
460 // Events expected: maximumRows and startRowIndex change and databind is
463 lvp.DoSetPageProperties(5, 6, true);
464 Assert.AreEqual (4, events.Count, "#A5");
465 Assert.AreEqual ("OnPagePropertiesChanging:Enter", events [0], "#A6");
466 Assert.AreEqual ("OnPagePropertiesChanging:Leave", events [1], "#A7");
467 Assert.AreEqual ("OnPagePropertiesChanged:Enter", events [2], "#A8");
468 Assert.AreEqual ("OnPagePropertiesChanged:Leave", events [3], "#A9");
470 // Events expected: maximumRows changes and databind is true
472 lvp.DoSetPageProperties(5, 7, true);
473 Assert.AreEqual (4, events.Count, "#A10");
474 Assert.AreEqual ("OnPagePropertiesChanging:Enter", events [0], "#A11");
475 Assert.AreEqual ("OnPagePropertiesChanging:Leave", events [1], "#A12");
476 Assert.AreEqual ("OnPagePropertiesChanged:Enter", events [2], "#A13");
477 Assert.AreEqual ("OnPagePropertiesChanged:Leave", events [3], "#A14");
479 // Events expected: startRowIndex changes and databind is true
481 lvp.DoSetPageProperties(6, 7, true);
482 Assert.AreEqual (4, events.Count, "#A15");
483 Assert.AreEqual ("OnPagePropertiesChanging:Enter", events [0], "#A16");
484 Assert.AreEqual ("OnPagePropertiesChanging:Leave", events [1], "#A17");
485 Assert.AreEqual ("OnPagePropertiesChanged:Enter", events [2], "#A18");
486 Assert.AreEqual ("OnPagePropertiesChanged:Leave", events [3], "#A19");
490 [ExpectedException (typeof (ArgumentNullException))]
491 public void ListView_AddControlToContainer_NullControl ()
493 var lvp = new ListViewPoker ();
494 Control container = new Control ();
495 Control control = new Control ();
496 control.ID = "TestControl";
498 lvp.DoAddControlToContainer (null, container, 0);
499 Assert.AreEqual (0, container.Controls.Count, "#A1");
503 [ExpectedException (typeof (NullReferenceException))]
504 public void ListView_AddControlToContainer_NullContainer ()
506 var lvp = new ListViewPoker ();
507 Control container = new Control ();
508 Control control = new Control ();
509 control.ID = "TestControl";
511 lvp.DoAddControlToContainer (control, null, 0);
512 Assert.AreEqual (0, container.Controls.Count, "#A2");
516 public void ListView_AddControlToContainer ()
518 var lvp = new ListViewPoker ();
519 Control container = new Control ();
520 Control control = new Control ();
521 control.ID = "TestControl";
523 lvp.DoAddControlToContainer (control, container, 0);
524 Assert.AreEqual (typeof (Control), container.Controls [0].GetType (), "#A1");
525 Assert.AreEqual ("TestControl", container.Controls [0].ID, "#A2");
527 container = new HtmlTable ();
528 lvp.DoAddControlToContainer (control, container, 0);
529 Assert.AreEqual ("System.Web.UI.WebControls.ListViewTableRow", container.Controls [0].GetType ().ToString (), "#B1");
530 Assert.AreEqual ("TestControl", container.Controls [0].Controls [0].ID, "#B2");
532 container = new HtmlTableRow ();
533 lvp.DoAddControlToContainer (control, container, 0);
534 Assert.AreEqual ("System.Web.UI.WebControls.ListViewTableCell", container.Controls [0].GetType ().ToString (), "#C1");
535 Assert.AreEqual ("TestControl", container.Controls [0].Controls [0].ID, "#C2");
537 container = new Control ();
538 lvp.DoAddControlToContainer (control, container, -1);
542 [ExpectedException (typeof (NotSupportedException))]
543 public void ListView_CreateControlStyle ()
545 var lvp = new ListViewPoker ();
546 lvp.DoCreateControlStyle ();
550 public void ListView_CreateDataItem ()
552 var lvp = new ListViewPoker ();
553 ListViewDataItem lvdi = lvp.DoCreateDataItem (0, 0);
555 Assert.IsTrue (lvdi != null, "#A1");
556 Assert.AreEqual (null, lvdi.DataItem, "#A2");
557 Assert.AreEqual (0, lvdi.DataItemIndex, "#A3");
558 Assert.AreEqual (0, lvdi.DisplayIndex, "#A4");
559 Assert.AreEqual (ListViewItemType.DataItem, lvdi.ItemType, "#A5");
561 lvdi = lvp.DoCreateDataItem (-1, -1);
562 Assert.AreEqual (-1, lvdi.DataItemIndex, "#A6");
563 Assert.AreEqual (-1, lvdi.DisplayIndex, "#A7");
567 public void ListView_CreateDataSourceSelectArguments ()
569 var lvp = new ListViewPoker ();
570 DataSourceSelectArguments args = lvp.DoCreateDataSourceSelectArguments ();
572 Assert.IsTrue (args != null, "#A1");
576 public void ListView_CreateEmptyDataItem ()
578 var events = new EventRecorder ();
579 var lvp = new ListViewPoker (events);
580 lvp.DoCreateEmptyDataItem ();
582 Assert.AreEqual (0, events.Count, "#A1");
584 lvp.EmptyDataTemplate = new TestTemplate ();
585 lvp.DoCreateEmptyDataItem ();
586 Assert.AreEqual (1, lvp.Controls.Count, "#B1");
587 Assert.AreEqual (typeof (ListViewItem), lvp.Controls [0].GetType (), "#B2");
588 Assert.AreEqual ("TestTemplateControl", lvp.Controls [0].Controls [0].ID, "#B3");
589 Assert.AreEqual ("OnItemCreated:Enter", events [0], "#B4");
590 Assert.AreEqual ("OnItemCreated:Leave", events [1], "#B5");
594 public void ListView_CreateEmptyItem ()
596 var events = new EventRecorder ();
597 var lvp = new ListViewPoker (events);
598 ListViewItem item = lvp.DoCreateEmptyItem ();
600 Assert.AreEqual (0, events.Count, "#A1");
601 Assert.AreEqual (null, item, "#A2");
603 lvp.EmptyItemTemplate = new TestTemplate ();
604 item = lvp.DoCreateEmptyItem ();
605 Assert.AreEqual (0, lvp.Controls.Count, "#B1");
606 Assert.AreEqual (typeof (Control), item.Controls [0].GetType (), "#B2");
607 Assert.AreEqual ("TestTemplateControl", item.Controls [0].ID, "#B3");
608 Assert.AreEqual ("OnItemCreated:Enter", events [0], "#B4");
609 Assert.AreEqual ("OnItemCreated:Leave", events [1], "#B5");
613 [ExpectedException (typeof (InvalidOperationException))]
614 public void ListView_CreateInsertItem_NoInsertItemTemplate ()
616 var lvp = new ListViewPoker ();
617 ListViewItem item = lvp.DoCreateInsertItem ();
621 public void ListView_CreateInsertItem ()
623 var events = new EventRecorder ();
624 var lvp = new ListViewPoker (events);
626 lvp.InsertItemTemplate = new TestTemplate ();
627 ListViewItem item = lvp.DoCreateInsertItem ();
628 Assert.AreEqual (0, lvp.Controls.Count, "#A1");
629 Assert.AreEqual (typeof (ListViewItem), item.GetType (), "#A2");
630 Assert.AreEqual (typeof (Control), item.Controls [0].GetType (), "#A3");
632 Assert.AreEqual (2, events.Count, "#A4");
633 Assert.AreEqual ("TestTemplateControl", item.Controls [0].ID, "#A5");
634 Assert.AreEqual ("OnItemCreated:Enter", events [0], "#A6");
635 Assert.AreEqual ("OnItemCreated:Leave", events [1], "#A7");
637 Assert.AreEqual (ListViewItemType.InsertItem, item.ItemType, "#A7");
638 Assert.IsTrue (item.Equals (lvp.InsertItem), "#A8");
642 public void ListView_CreateItem ()
644 var events = new EventRecorder ();
645 var lvp = new ListViewPoker (events);
648 item = lvp.DoCreateItem (ListViewItemType.DataItem);
649 Assert.IsFalse (item == null, "#A1");
650 Assert.AreEqual (ListViewItemType.DataItem, item.ItemType, "#A2");
651 Assert.AreEqual (typeof (ListViewItem), item.GetType (), "#A3");
653 Assert.AreEqual (0, events.Count, "#B1");
655 item = lvp.DoCreateItem (ListViewItemType.InsertItem);
656 Assert.IsFalse (item == null, "#C1");
657 Assert.AreEqual (ListViewItemType.InsertItem, item.ItemType, "#C2");
658 Assert.AreEqual (typeof (ListViewItem), item.GetType (), "#C3");
660 item = lvp.DoCreateItem (ListViewItemType.EmptyItem);
661 Assert.IsFalse (item == null, "#D1");
662 Assert.AreEqual (ListViewItemType.EmptyItem, item.ItemType, "#D2");
663 Assert.AreEqual (typeof (ListViewItem), item.GetType (), "#D3");
667 public void ListView_CreateLayoutTemplate ()
669 var events = new EventRecorder ();
670 var lvp = new ListViewPoker (events);
672 lvp.DoCreateLayoutTemplate ();
673 Assert.AreEqual (2, events.Count, "#A1");
674 Assert.AreEqual ("OnLayoutCreated:Enter", events [0], "#A2");
675 Assert.AreEqual ("OnLayoutCreated:Leave", events [1], "#A3");
676 Assert.AreEqual (0, lvp.Controls.Count, "#A4");
679 lvp.LayoutTemplate = new TestTemplate ();
680 lvp.DoCreateLayoutTemplate ();
681 Assert.AreEqual (2, events.Count, "#B1");
682 Assert.AreEqual ("OnLayoutCreated:Enter", events [0], "#B2");
683 Assert.AreEqual ("OnLayoutCreated:Leave", events [1], "#B3");
684 Assert.AreEqual (1, lvp.Controls.Count, "#B4");
685 Assert.AreEqual (typeof (Control), lvp.Controls [0].GetType (), "#B5");
686 Assert.AreEqual ("TestTemplateControl", lvp.Controls [0].Controls [0].ID, "#B6");
690 public void ListView_EnsureLayoutTemplate ()
692 var events = new EventRecorder ();
693 var lvp = new ListViewPoker (events);
695 lvp.DoEnsureLayoutTemplate ();
696 Assert.AreEqual (2, events.Count, "#A1");
697 Assert.AreEqual ("OnLayoutCreated:Enter", events [0], "#A2");
698 Assert.AreEqual ("OnLayoutCreated:Leave", events [1], "#A3");
699 Assert.AreEqual (0, lvp.Controls.Count, "#A4");
702 lvp.LayoutTemplate = new TestTemplate ();
703 lvp.DoEnsureLayoutTemplate ();
704 Assert.AreEqual (2, events.Count, "#B1");
705 Assert.AreEqual ("OnLayoutCreated:Enter", events [0], "#B2");
706 Assert.AreEqual ("OnLayoutCreated:Leave", events [1], "#B3");
707 Assert.AreEqual (1, lvp.Controls.Count, "#B4");
708 Assert.AreEqual (typeof (Control), lvp.Controls [0].GetType (), "#B5");
709 Assert.AreEqual ("TestTemplateControl", lvp.Controls [0].Controls [0].ID, "#B6");
712 lvp.DoEnsureLayoutTemplate ();
713 Assert.AreEqual (0, events.Count, "#C1");
714 Assert.AreEqual (1, lvp.Controls.Count, "#C2");
715 Assert.AreEqual (typeof (Control), lvp.Controls [0].GetType (), "#C3");
716 Assert.AreEqual ("TestTemplateControl", lvp.Controls [0].Controls [0].ID, "#C4");
720 public void ListView_FindPlaceholder ()
722 var lvp = new ListViewPoker ();
725 control = lvp.DoFindPlaceholder ("somePlaceholder", lvp);
726 Assert.IsTrue (control == null, "#A1");
728 control = lvp.DoFindPlaceholder (null, lvp);
729 Assert.IsTrue (control == null, "#A2");
731 control = lvp.DoFindPlaceholder (String.Empty, lvp);
732 Assert.IsTrue (control == null, "#A3");
734 lvp.LayoutTemplate = new TestTemplate ();
735 lvp.DoEnsureLayoutTemplate ();
736 control = lvp.DoFindPlaceholder ("TestTemplateControl", lvp);
737 Assert.IsFalse (control == null, "#B1");
738 Assert.AreEqual ("TestTemplateControl", control.ID, "#B2");
739 control = lvp.DoFindPlaceholder ("DoesNotExist", lvp);
740 Assert.IsTrue (control == null, "#B3");
742 lvp = new ListViewPoker ();
743 lvp.LayoutTemplate = new DeepTestTemplate ();
744 lvp.DoEnsureLayoutTemplate ();
745 control = lvp.DoFindPlaceholder ("DeepTestTemplateControl", lvp);
746 Assert.IsFalse (control == null, "#C1");
747 Assert.AreEqual ("DeepTestTemplateControl", control.ID, "#C2");
748 control = lvp.DoFindPlaceholder ("DoesNotExist", lvp);
749 Assert.IsTrue (control == null, "#C3");
752 void DoInstantiateCall (ListViewItemTemplate whichTemplate)
754 var events = new EventRecorder ();
755 var lvp = new ListViewPoker (events);
756 var container = new Control ();
757 var template = new TestTemplate ();
759 switch (whichTemplate) {
760 case ListViewItemTemplate.EmptyData:
761 lvp.DoInstantiateEmptyDataTemplate (null);
762 lvp.EmptyDataTemplate = template;
763 lvp.DoInstantiateEmptyDataTemplate (container);
766 case ListViewItemTemplate.EmptyItem:
767 lvp.DoInstantiateEmptyItemTemplate (null);
768 lvp.EmptyItemTemplate = template;
769 lvp.DoInstantiateEmptyItemTemplate (container);
772 case ListViewItemTemplate.GroupSeparator:
773 lvp.DoInstantiateGroupSeparatorTemplate (null);
774 lvp.GroupSeparatorTemplate = template;
775 lvp.DoInstantiateGroupSeparatorTemplate (container);
778 case ListViewItemTemplate.Group:
779 lvp.DoInstantiateGroupTemplate (null);
780 lvp.GroupTemplate = template;
781 lvp.DoInstantiateGroupTemplate (container);
784 case ListViewItemTemplate.InsertItem:
785 lvp.DoInstantiateInsertItemTemplate (null);
786 lvp.InsertItemTemplate = template;
787 lvp.DoInstantiateInsertItemTemplate (container);
790 case ListViewItemTemplate.ItemSeparator:
791 lvp.DoInstantiateItemSeparatorTemplate (null);
792 lvp.ItemSeparatorTemplate = template;
793 lvp.DoInstantiateItemSeparatorTemplate (container);
796 case ListViewItemTemplate.Item:
797 lvp.ItemTemplate = template;
798 lvp.DoInstantiateItemTemplate (container, 0);
801 case ListViewItemTemplate.EditItem:
803 lvp.ItemTemplate = template;
804 lvp.EditItemTemplate = template;
805 lvp.DoInstantiateItemTemplate (container, 0);
808 case ListViewItemTemplate.AlternatingItem:
809 lvp.ItemTemplate = template;
810 lvp.AlternatingItemTemplate = template;
811 lvp.DoInstantiateItemTemplate (container, 1);
814 case ListViewItemTemplate.SelectedItem:
815 lvp.ItemTemplate = template;
816 lvp.SelectedIndex = 0;
817 lvp.SelectedItemTemplate = template;
818 lvp.DoInstantiateItemTemplate (container, 0);
822 throw new NotSupportedException ("Unsupported ListView item type.");
825 Assert.AreEqual (0, events.Count, "#A1");
826 Assert.AreEqual (typeof (Control), container.Controls [0].GetType (), "#A2");
827 Assert.AreEqual ("TestTemplateControl", container.Controls [0].ID, "#A3");
830 void DoInstantiateContainerNullCall (ListViewItemTemplate whichTemplate)
832 var lvp = new ListViewPoker ();
833 var template = new TestTemplate ();
835 switch (whichTemplate) {
836 case ListViewItemTemplate.EmptyData:
837 lvp.EmptyDataTemplate = template;
838 lvp.DoInstantiateEmptyDataTemplate (null);
841 case ListViewItemTemplate.EmptyItem:
842 lvp.EmptyItemTemplate = template;
843 lvp.DoInstantiateEmptyItemTemplate (null);
846 case ListViewItemTemplate.GroupSeparator:
847 lvp.GroupSeparatorTemplate = template;
848 lvp.DoInstantiateGroupSeparatorTemplate (null);
851 case ListViewItemTemplate.Group:
852 lvp.GroupTemplate = template;
853 lvp.DoInstantiateGroupTemplate (null);
856 case ListViewItemTemplate.InsertItem:
857 lvp.InsertItemTemplate = template;
858 lvp.DoInstantiateInsertItemTemplate (null);
861 case ListViewItemTemplate.ItemSeparator:
862 lvp.ItemSeparatorTemplate = template;
863 lvp.DoInstantiateItemSeparatorTemplate (null);
866 case ListViewItemTemplate.Item:
867 lvp.ItemTemplate = template;
868 lvp.DoInstantiateItemTemplate (null, 0);
871 case ListViewItemTemplate.EditItem:
872 lvp.EditItemTemplate = template;
873 lvp.ItemTemplate = template;
874 lvp.DoInstantiateItemTemplate (null, 0);
877 case ListViewItemTemplate.AlternatingItem:
878 lvp.AlternatingItemTemplate = template;
879 lvp.ItemTemplate = template;
880 lvp.DoInstantiateItemTemplate (null, 0);
883 case ListViewItemTemplate.SelectedItem:
884 lvp.SelectedItemTemplate = template;
885 lvp.ItemTemplate = template;
886 lvp.DoInstantiateItemTemplate (null, 0);
890 throw new NotSupportedException ("Unsupported ListView item type.");
895 [ExpectedException (typeof (InvalidOperationException))]
896 public void ListView_InstantiateItemTemplate_NoItemTemplate ()
898 var lvp = new ListViewPoker ();
899 lvp.DoInstantiateItemTemplate (new Control (), 0);
903 public void ListView_InstantiateEmptyDataTemplate ()
905 DoInstantiateCall (ListViewItemTemplate.EmptyData);
909 [ExpectedException (typeof (NullReferenceException))]
910 public void ListView_InstantiateEmptyDataTemplate_NullContainer ()
912 DoInstantiateContainerNullCall (ListViewItemTemplate.EmptyData);
916 public void ListView_InstantiateEmptyItemTemplate ()
918 DoInstantiateCall (ListViewItemTemplate.EmptyItem);
922 [ExpectedException (typeof (NullReferenceException))]
923 public void ListView_InstantiateEmptyItemTemplate_NullContainer ()
925 DoInstantiateContainerNullCall (ListViewItemTemplate.EmptyItem);
929 public void ListView_InstantiateGroupSeparatorTemplate ()
931 DoInstantiateCall (ListViewItemTemplate.GroupSeparator);
935 [ExpectedException (typeof (NullReferenceException))]
936 public void ListView_InstantiateGroupSeparatorTemplate_NullContainer ()
938 DoInstantiateContainerNullCall (ListViewItemTemplate.GroupSeparator);
942 public void ListView_InstantiateGroupTemplate ()
944 DoInstantiateCall (ListViewItemTemplate.Group);
948 [ExpectedException (typeof (NullReferenceException))]
949 public void ListView_InstantiateGroupTemplate_NullContainer ()
951 DoInstantiateContainerNullCall (ListViewItemTemplate.Group);
955 public void ListView_InstantiateInsertItemTemplate ()
957 DoInstantiateCall (ListViewItemTemplate.InsertItem);
961 [ExpectedException (typeof (NullReferenceException))]
962 public void ListView_InstantiateInsertItemTemplate_NullContainer ()
964 DoInstantiateContainerNullCall (ListViewItemTemplate.InsertItem);
968 public void ListView_InstantiateItemSeparatorTemplate ()
970 DoInstantiateCall (ListViewItemTemplate.ItemSeparator);
974 [ExpectedException (typeof (NullReferenceException))]
975 public void ListView_InstantiateItemSeparatorTemplate_NullContainer ()
977 DoInstantiateContainerNullCall (ListViewItemTemplate.ItemSeparator);
981 public void ListView_InstantiateItemTemplate ()
983 DoInstantiateCall (ListViewItemTemplate.Item);
987 [ExpectedException (typeof (NullReferenceException))]
988 public void ListView_InstantiateItemTemplate_NullContainer ()
990 DoInstantiateContainerNullCall (ListViewItemTemplate.Item);
994 public void ListView_InstantiateEditItemTemplate ()
996 DoInstantiateCall (ListViewItemTemplate.EditItem);
1000 [ExpectedException (typeof (NullReferenceException))]
1001 public void ListView_InstantiateEditItemTemplate_NullContainer ()
1003 DoInstantiateContainerNullCall (ListViewItemTemplate.EditItem);
1007 public void ListView_InstantiateAlternatingItemTemplate ()
1009 DoInstantiateCall (ListViewItemTemplate.AlternatingItem);
1013 [ExpectedException (typeof (NullReferenceException))]
1014 public void ListView_InstantiateAlternatingItemTemplate_NullContainer ()
1016 DoInstantiateContainerNullCall (ListViewItemTemplate.AlternatingItem);
1020 public void ListView_InstantiateSelectedItemTemplate ()
1022 DoInstantiateCall (ListViewItemTemplate.SelectedItem);
1026 [ExpectedException (typeof (NullReferenceException))]
1027 public void ListView_InstantiateSelectedItemTemplate_NullContainer ()
1029 DoInstantiateContainerNullCall (ListViewItemTemplate.SelectedItem);
1033 [ExpectedException (typeof (NullReferenceException))]
1034 public void ListView_FindPlaceholder_NullContainer ()
1036 var lvp = new ListViewPoker ();
1039 control = lvp.DoFindPlaceholder ("somePlaceholder", null);
1043 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1044 public void ListView_SetPageProperties_Parameters1 ()
1046 var lvp = new ListViewPoker ();
1047 lvp.DoSetPageProperties (-1, 1, false);
1051 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1052 public void ListView_SetPageProperties_Parameters2 ()
1054 var lvp = new ListViewPoker ();
1055 lvp.DoSetPageProperties (0, 0, false);
1059 [ExpectedException (typeof (NotSupportedException))]
1060 public void ListView_AccessKey ()
1062 var lvp = new ListViewPoker ();
1063 lvp.AccessKey = String.Empty;
1067 [ExpectedException (typeof (NotSupportedException))]
1068 public void ListView_BackColor ()
1070 var lvp = new ListViewPoker ();
1071 lvp.BackColor = Color.White;
1075 [ExpectedException (typeof (NotSupportedException))]
1076 public void ListView_BorderColor ()
1078 var lvp = new ListViewPoker ();
1079 lvp.BorderColor = Color.White;
1083 [ExpectedException (typeof (NotSupportedException))]
1084 public void ListView_BorderStyle ()
1086 var lvp = new ListViewPoker ();
1087 lvp.BorderStyle = BorderStyle.NotSet;
1091 [ExpectedException (typeof (NotSupportedException))]
1092 public void ListView_BorderWidth ()
1094 var lvp = new ListViewPoker ();
1095 lvp.BorderWidth = Unit.Empty;
1099 [ExpectedException (typeof (NotSupportedException))]
1100 public void ListView_CssClass ()
1102 var lvp = new ListViewPoker ();
1103 lvp.CssClass = String.Empty;
1107 [ExpectedException (typeof (NotSupportedException))]
1108 public void ListView_Font ()
1110 var lvp = new ListViewPoker ();
1111 lvp.Font.Bold = true;
1115 [ExpectedException (typeof (NotSupportedException))]
1116 public void ListView_ForeColor ()
1118 var lvp = new ListViewPoker ();
1119 lvp.ForeColor = Color.White;
1123 [ExpectedException (typeof (NotSupportedException))]
1124 public void ListView_Height ()
1126 var lvp = new ListViewPoker ();
1127 lvp.Height = Unit.Empty;
1131 [ExpectedException (typeof (NotSupportedException))]
1132 public void ListView_ToolTip ()
1134 var lvp = new ListViewPoker ();
1135 lvp.ToolTip = String.Empty;
1139 [ExpectedException (typeof (NotSupportedException))]
1140 public void ListView_Width ()
1142 var lvp = new ListViewPoker ();
1143 lvp.Width = Unit.Empty;
1147 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1148 public void ListView_EditIndex_SetInvalid ()
1150 var lvp = new ListViewPoker ();
1155 public void ListView_EditIndex_Set ()
1157 var lvp = new ListViewPoker ();
1159 Assert.AreEqual (0, lvp.EditIndex, "#A1");
1163 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1164 public void ListView_SelectedIndex_SetInvalid ()
1166 var lvp = new ListViewPoker ();
1167 lvp.SelectedIndex = -2;
1171 public void ListView_SelectedIndex_Set ()
1173 var lvp = new ListViewPoker ();
1174 lvp.SelectedIndex = 0;
1175 Assert.AreEqual (0, lvp.SelectedIndex, "#A1");
1179 public void ListView_Edit ()
1181 WebTest t = new WebTest ("ListViewTest.aspx");
1182 t.Invoker = PageInvoker.CreateOnInit (ListView_Edit_OnInit);
1185 FormRequest fr = new FormRequest(t.Response, "form1");
1187 fr.Controls.Add ("ListView1$ctrl0$ctl03$EditButton");
1188 fr.Controls.Add ("ListView1$ctrl6$ctrl7$CapitalTextBox");
1189 fr.Controls.Add ("ListView1$ctrl6$ctrl7$IDTextBox");
1190 fr.Controls.Add ("ListView1$ctrl6$ctrl7$NameTextBox");
1191 fr.Controls.Add ("ListView1$ctrl6$ctrl7$PopulationTextBox");
1192 fr.Controls ["ListView1$ctrl0$ctl03$EditButton"].Value = "Edit";
1194 fr.Controls.Add ("ListView1$ctl13$EditButton");
1195 fr.Controls.Add ("ListView1$ctl51$CapitalTextBox");
1196 fr.Controls.Add ("ListView1$ctl51$IDTextBox");
1197 fr.Controls.Add ("ListView1$ctl51$NameTextBox");
1198 fr.Controls.Add ("ListView1$ctl51$PopulationTextBox");
1199 fr.Controls ["ListView1$ctl13$EditButton"].Value = "Edit";
1203 EventRecorder events = new EventRecorder();
1204 t.UserData = events;
1208 public static void ListView_Edit_OnInit (Page p)
1210 ListViewPoker poker = p.FindControl ("ListView1") as ListViewPoker;
1211 poker.SetEventRecorder (WebTest.CurrentTest.UserData as EventRecorder);
1214 [Test (Description="Bug #535701, test 1")]
1215 public void Bug_535701_1 ()
1218 string originalHtml_1 = @"<span id=""ListViewTest"">
1221 <span id=""DataPager1""><a class=""aspNetDisabled"">First</a> <a class=""aspNetDisabled"">Previous</a> <span>1</span> <a href=""javascript:__doPostBack('DataPager1$ctl01$ctl01','')"">2</a> <a href=""javascript:__doPostBack('DataPager1$ctl02$ctl00','')"">Next</a> <a href=""javascript:__doPostBack('DataPager1$ctl02$ctl01','')"">Last</a> </span>";
1222 string originalHtml_2 = @"<span id=""ListViewTest"">
1225 <span id=""DataPager1""><a href=""javascript:__doPostBack('DataPager1$ctl00$ctl00','')"">First</a> <a href=""javascript:__doPostBack('DataPager1$ctl00$ctl01','')"">Previous</a> <a href=""javascript:__doPostBack('DataPager1$ctl01$ctl00','')"">1</a> <span>2</span> <a class=""aspNetDisabled"">Next</a> <a class=""aspNetDisabled"">Last</a> </span>";
1227 string originalHtml_1 = @"<span id=""ListViewTest"">
1230 <span id=""DataPager1""><a disabled=""disabled"">First</a> <a disabled=""disabled"">Previous</a> <span>1</span> <a href=""javascript:__doPostBack('DataPager1$ctl01$ctl01','')"">2</a> <a href=""javascript:__doPostBack('DataPager1$ctl02$ctl00','')"">Next</a> <a href=""javascript:__doPostBack('DataPager1$ctl02$ctl01','')"">Last</a> </span>";
1231 string originalHtml_2 = @"<span id=""ListViewTest"">
1234 <span id=""DataPager1""><a href=""javascript:__doPostBack('DataPager1$ctl00$ctl00','')"">First</a> <a href=""javascript:__doPostBack('DataPager1$ctl00$ctl01','')"">Previous</a> <a href=""javascript:__doPostBack('DataPager1$ctl01$ctl00','')"">1</a> <span>2</span> <a disabled=""disabled"">Next</a> <a disabled=""disabled"">Last</a> </span>";
1236 WebTest t = new WebTest ("ListViewTotalRowCount_Bug535701_1.aspx");
1237 string pageHtml = t.Run ();
1238 string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml);
1240 Assert.AreEqual (originalHtml_1, renderedHtml, "#A1");
1242 FormRequest fr = new FormRequest (t.Response, "form1");
1243 fr.Controls.Add ("__EVENTTARGET");
1244 fr.Controls ["__EVENTTARGET"].Value = "DataPager1$ctl01$ctl01";
1247 pageHtml = t.Run ();
1248 renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml);
1250 Assert.AreEqual (originalHtml_2, renderedHtml, "#A2");
1253 [Test (Description="Bug #535701, test 2")]
1254 public void Bug_535701_2 ()
1257 string originalHtml_1 = @"<span id=""ListViewTest2"">
1260 <span id=""DataPager1""><a class=""aspNetDisabled"">First</a> <a class=""aspNetDisabled"">Previous</a> <span>1</span> <a href=""javascript:__doPostBack('DataPager1$ctl01$ctl01','')"">2</a> <a href=""javascript:__doPostBack('DataPager1$ctl02$ctl00','')"">Next</a> <a href=""javascript:__doPostBack('DataPager1$ctl02$ctl01','')"">Last</a> </span>
1263 DataPager.TotalRowCount = 14<br />
1264 Actual TotalRowCount = 14</div>";
1265 string originalHtml_2 = @"<span id=""ListViewTest2"">
1268 <span id=""DataPager1""><a href=""javascript:__doPostBack('DataPager1$ctl00$ctl00','')"">First</a> <a href=""javascript:__doPostBack('DataPager1$ctl00$ctl01','')"">Previous</a> <a href=""javascript:__doPostBack('DataPager1$ctl01$ctl00','')"">1</a> <span>2</span> <a class=""aspNetDisabled"">Next</a> <a class=""aspNetDisabled"">Last</a> </span>
1271 DataPager.TotalRowCount = 14<br />
1272 Actual TotalRowCount = 14</div>";
1274 string originalHtml_1 = @"<span id=""ListViewTest2"">
1277 <span id=""DataPager1""><a disabled=""disabled"">First</a> <a disabled=""disabled"">Previous</a> <span>1</span> <a href=""javascript:__doPostBack('DataPager1$ctl01$ctl01','')"">2</a> <a href=""javascript:__doPostBack('DataPager1$ctl02$ctl00','')"">Next</a> <a href=""javascript:__doPostBack('DataPager1$ctl02$ctl01','')"">Last</a> </span>
1280 DataPager.TotalRowCount = 14<br />
1281 Actual TotalRowCount = 14</div>";
1282 string originalHtml_2 = @"<span id=""ListViewTest2"">
1285 <span id=""DataPager1""><a href=""javascript:__doPostBack('DataPager1$ctl00$ctl00','')"">First</a> <a href=""javascript:__doPostBack('DataPager1$ctl00$ctl01','')"">Previous</a> <a href=""javascript:__doPostBack('DataPager1$ctl01$ctl00','')"">1</a> <span>2</span> <a disabled=""disabled"">Next</a> <a disabled=""disabled"">Last</a> </span>
1288 DataPager.TotalRowCount = 14<br />
1289 Actual TotalRowCount = 14</div>";
1291 WebTest t = new WebTest ("ListViewTotalRowCount_Bug535701_2.aspx");
1292 string pageHtml = t.Run ();
1293 string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml);
1295 Assert.AreEqual (originalHtml_1, renderedHtml, "#A1");
1297 FormRequest fr = new FormRequest (t.Response, "form1");
1298 fr.Controls.Add ("__EVENTTARGET");
1299 fr.Controls ["__EVENTTARGET"].Value = "DataPager1$ctl01$ctl01";
1302 pageHtml = t.Run ();
1303 renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml);
1305 Assert.AreEqual (originalHtml_2, renderedHtml, "#A2");
1308 [Test (Description="Bug #604053")]
1309 public void Bug_604053 ()
1312 string originalHtml = "<span id=\"Bug604053ListView1\"><table id=\"Bug604053ListView1_itemPlaceholderContainer\" border=\"0\" style=\"\"><tr style=\"\"><th>\n\t\t\t\t\t\t\t\t\t\t\tM1</th><th>\n\t\t\t\t\t\t\t\t\t\t\tM2</th>\r\n\t</tr>\n\t\t\t\t\t<tr style=\"\">\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_ctl10_M1Label_0\">0</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_ctl10_M2Label_0\">0</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\r\n\t\t\n\t\t\t\t\t<tr style=\"\">\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_ctl12_M1Label_1\">1</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_ctl12_M2Label_1\">1</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\r\n\r\n\r\n</table>\r\n\n\t\t\t\t\t<table><tr><td>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</td>\r\n\t</tr><tr><td style=\"\">\n\t\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_DataPager1\"><input type=\"submit\" name=\"Bug604053ListView1$DataPager1$ctl00$ctl00\" value=\"First\" disabled=\"disabled\" /> <span>1</span> <a href=\"javascript:__doPostBack('Bug604053ListView1$DataPager1$ctl01$ctl01','')\">2</a> <a href=\"javascript:__doPostBack('Bug604053ListView1$DataPager1$ctl01$ctl02','')\">3</a> <a href=\"javascript:__doPostBack('Bug604053ListView1$DataPager1$ctl01$ctl03','')\">4</a> <a href=\"javascript:__doPostBack('Bug604053ListView1$DataPager1$ctl01$ctl04','')\">5</a> <input type=\"submit\" name=\"Bug604053ListView1$DataPager1$ctl02$ctl00\" value=\"Last\" /> </span>\n\t\t\t\t\t\t\t</td>\r\n\t</tr>\r\n\r\n</table>\r\n\n\t\t\t\t</span>\n\t\t\t<span id=\"Bug604053ListView2\"><table id=\"Bug604053ListView2_itemPlaceholderContainer\" border=\"0\" style=\"\"><tr style=\"\"><th>\n\t\t\t\t\t\t\t\t\t\t\tM1</th><th>\n\t\t\t\t\t\t\t\t\t\t\tM2</th>\r\n\t</tr>\n\t\t\t\t\t<tr style=\"\">\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_ctl10_M1Label_0\">0</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_ctl10_M2Label_0\">0</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\r\n\t\t\n\t\t\t\t\t<tr style=\"\">\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_ctl12_M1Label_1\">1</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_ctl12_M2Label_1\">1</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\r\n\r\n\r\n</table>\r\n\n\t\t\t\t\t<table><tr><td>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</td>\r\n\t</tr><tr><td style=\"\">\n\t\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_DataPager1\"><input type=\"submit\" name=\"Bug604053ListView2$DataPager1$ctl00$ctl00\" value=\"First\" disabled=\"disabled\" /> <input type=\"submit\" name=\"Bug604053ListView2$DataPager1$ctl00$ctl01\" value=\"Previous\" disabled=\"disabled\" /> <input type=\"submit\" name=\"Bug604053ListView2$DataPager1$ctl00$ctl02\" value=\"Next\" /> <input type=\"submit\" name=\"Bug604053ListView2$DataPager1$ctl00$ctl03\" value=\"Last\" /> </span>\n\t\t\t\t\t\t\t</td>\r\n\t</tr>\r\n\r\n</table>\r\n\n\t\t\t\t</span>";
1314 string originalHtml = "<span id=\"Bug604053ListView1\"><table id=\"Bug604053ListView1_itemPlaceholderContainer\" border=\"0\" style=\"\"><tr style=\"\"><th>\n\t\t\t\t\t\t\t\t\t\t\tM1</th><th>\n\t\t\t\t\t\t\t\t\t\t\tM2</th>\r\n\t</tr>\n\t\t\t\t\t<tr style=\"\">\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_ctl10_M1Label\">0</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_ctl10_M2Label\">0</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\r\n\t\t\n\t\t\t\t\t<tr style=\"\">\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_ctl12_M1Label\">1</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_ctl12_M2Label\">1</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\r\n\r\n\r\n</table>\r\n\n\t\t\t\t\t<table><tr><td>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</td>\r\n\t</tr><tr><td style=\"\">\n\t\t\t\t\t\t\t\t<span id=\"Bug604053ListView1_DataPager1\"><input type=\"submit\" name=\"Bug604053ListView1$DataPager1$ctl00$ctl00\" value=\"First\" disabled=\"disabled\" /> <span>1</span> <a href=\"javascript:__doPostBack('Bug604053ListView1$DataPager1$ctl01$ctl01','')\">2</a> <a href=\"javascript:__doPostBack('Bug604053ListView1$DataPager1$ctl01$ctl02','')\">3</a> <a href=\"javascript:__doPostBack('Bug604053ListView1$DataPager1$ctl01$ctl03','')\">4</a> <a href=\"javascript:__doPostBack('Bug604053ListView1$DataPager1$ctl01$ctl04','')\">5</a> <input type=\"submit\" name=\"Bug604053ListView1$DataPager1$ctl02$ctl00\" value=\"Last\" /> </span>\n\t\t\t\t\t\t\t</td>\r\n\t</tr>\r\n\r\n</table>\r\n\n\t\t\t\t</span>\n\t\t\t<span id=\"Bug604053ListView2\"><table id=\"Bug604053ListView2_itemPlaceholderContainer\" border=\"0\" style=\"\"><tr style=\"\"><th>\n\t\t\t\t\t\t\t\t\t\t\tM1</th><th>\n\t\t\t\t\t\t\t\t\t\t\tM2</th>\r\n\t</tr>\n\t\t\t\t\t<tr style=\"\">\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_ctl10_M1Label\">0</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_ctl10_M2Label\">0</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\r\n\t\t\n\t\t\t\t\t<tr style=\"\">\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_ctl12_M1Label\">1</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_ctl12_M2Label\">1</span>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\r\n\r\n\r\n</table>\r\n\n\t\t\t\t\t<table><tr><td>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</td>\r\n\t</tr><tr><td style=\"\">\n\t\t\t\t\t\t\t\t<span id=\"Bug604053ListView2_DataPager1\"><input type=\"submit\" name=\"Bug604053ListView2$DataPager1$ctl00$ctl00\" value=\"First\" disabled=\"disabled\" /> <input type=\"submit\" name=\"Bug604053ListView2$DataPager1$ctl00$ctl01\" value=\"Previous\" disabled=\"disabled\" /> <input type=\"submit\" name=\"Bug604053ListView2$DataPager1$ctl00$ctl02\" value=\"Next\" /> <input type=\"submit\" name=\"Bug604053ListView2$DataPager1$ctl00$ctl03\" value=\"Last\" /> </span>\n\t\t\t\t\t\t\t</td>\r\n\t</tr>\r\n\r\n</table>\r\n\n\t\t\t\t</span>";
1316 WebTest t = new WebTest ("ListViewTotalRowCount_Bug604053.aspx");
1317 string pageHtml = t.Run ();
1318 string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml);
1320 Assert.AreEqual (originalHtml, renderedHtml, "#A1");