[bcl] Remove NET_4_0 defines from class libs
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / DetailsViewTest.cs
1 //
2 // Tests for System.Web.UI.WebControls.FormView.cs 
3 //
4 // Author:
5 //      Merav Sudri (meravs@mainsoft.com)
6 //
7 //
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 //
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:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
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.
28 //
29
30
31 using NUnit.Framework;
32 using System;
33 using System.IO;
34 using System.Data;
35 using System.Drawing;
36 using System.Collections;
37 using System.Collections.Specialized;
38 using System.Globalization;
39 using System.Web;
40 using System.Web.UI;
41 using System.Web.UI.HtmlControls;
42 using System.Web.UI.WebControls;
43 using MonoTests.SystemWeb.Framework;
44 using MonoTests.stand_alone.WebHarness;
45 using System.Collections.Generic;
46
47
48 namespace MonoTests.System.Web.UI.WebControls
49 {
50         [TestFixture]   
51         public class DetailsViewTest {
52
53                 public class DataSourceObject
54                 {
55                         public static List<string> GetList (string sortExpression, int startRowIndex, int maximumRows) {
56                                 return GetList ();
57                         }
58
59                         public static List<string> GetList (int startRowIndex, int maximumRows) {
60                                 return GetList ();
61                         }
62
63                         public static List<string> GetList (string sortExpression) {
64                                 return GetList ();
65                         }
66
67                         public static List<string> GetList () {
68                                 List<string> list = new List<string> ();
69                                 list.Add ("Norway");
70                                 list.Add ("Sweden");
71                                 list.Add ("France");
72                                 list.Add ("Italy");
73                                 list.Add ("Israel");
74                                 list.Add ("Russia");
75                                 return list;
76                         }
77
78                         public static int GetCount () {
79                                 return GetList ().Count;
80                         }
81                 }
82                 
83                 public class TestObject
84                 {
85                         public int TestInt {
86                                 get { return 10; }
87                                 set { }
88                         }
89
90                         public int TestIntReadOnly {
91                                 get { return 10; }
92                         }
93
94                         public string TestString {
95                                 get { return "val"; }
96                                 set { }
97                         }
98
99                         public string TestStringReadOnly {
100                                 get { return "val"; }
101                         }
102
103                         public string this [int i] {
104                                 get { return "aaa"; }
105                                 set { }
106                         }
107
108                 }
109
110                 public class TestObject2
111                 {
112                         public Object Property {
113                                 get { return null; }
114                                 set { }
115                         }
116                 }
117
118                 public class DS : ObjectDataSource
119                 {
120                         public static List<string> GetList ()
121                         {
122                                 List<string> list = new List<string> ();
123                                 list.Add ("Norway");
124                                 list.Add ("Sweden");
125                                 list.Add ("France");
126                                 list.Add ("Italy");
127                                 list.Add ("Israel");
128                                 list.Add ("Russia");
129                                 return list;
130                         }
131
132                         public void DoRaiseDataSourceChangedEvent (EventArgs e)
133                         {
134                                 RaiseDataSourceChangedEvent (e);
135                         }
136                 }
137
138                 public class PokerDetailsView: DetailsView 
139                 {
140                         public bool ensureDataBound=false;
141                         public bool isInitializePager = false;
142                         public bool controlHierarchy = false;
143                         public bool ensureCreateChildControls = false;
144                         public bool createChildControls1 = false;
145                         public bool createChildControls2 = false;
146                         public PokerDetailsView () 
147                         {
148                          TrackViewState ();
149                         }
150
151                         public object SaveState ()
152                         {
153                          return SaveViewState ();
154                         }
155
156                          public void LoadState (object o)
157                         {
158                          LoadViewState (o);
159                         }
160
161                         public StateBag StateBag 
162                         {
163                           get { return base.ViewState; }
164                         }
165
166                         public HtmlTextWriterTag PokerTagKey
167                         {
168                                 get { return base.TagKey; }
169                         }
170
171                         public string Render ()
172                         {
173                                 StringWriter sw = new StringWriter ();
174                                 HtmlTextWriter tw = new HtmlTextWriter (sw);
175                                 Render (tw);
176                                 return sw.ToString ();
177                         }
178
179                         public void DoOnInit (EventArgs e)
180                         {
181                                 OnInit (e);
182                         }
183
184                         public void DoOnDataSourceViewChanged (Object sender, EventArgs e)
185                         {
186                                 OnDataSourceViewChanged (sender, e);
187                         }
188
189                         public void DoOnItemCommand (DetailsViewCommandEventArgs e)
190                         {
191                                 OnItemCommand (e);
192                         }
193
194                         public void DoOnItemCreated (EventArgs e)
195                         {
196                                 OnItemCreated (e); 
197                         }
198
199                         public void DoOnItemDeleted (DetailsViewDeletedEventArgs e)
200                         {
201                                 OnItemDeleted (e); 
202                         }
203
204                         public void DoOnItemDeleting  (DetailsViewDeleteEventArgs e)
205                         {
206                                 OnItemDeleting (e);
207                         }
208
209                         public void DoOnItemInserted (DetailsViewInsertedEventArgs e)
210                         {
211                                 OnItemInserted (e);
212                         }
213
214                         public void DoOnItemInserting (DetailsViewInsertEventArgs e)
215                         {
216                                 OnItemInserting (e); 
217                         }
218
219                         public void DoOnItemUpdated (DetailsViewUpdatedEventArgs  e)
220                         {
221                                 OnItemUpdated(e);
222                         }
223
224                         public void DoOnItemUpdating (DetailsViewUpdateEventArgs e)
225                         {
226                                 OnItemUpdating (e);
227                         }
228
229
230                         public void DoOnModeChanged (EventArgs e)
231                         {
232                                 OnModeChanged (e);
233                         }
234                         public void DoOnModeChanging (DetailsViewModeEventArgs e)
235                         {
236                                 OnModeChanging (e);
237                         }
238                         public void DoOnPageIndexChanged (EventArgs e)
239                         {
240                                 OnPageIndexChanged (e);
241                         }
242                         public void DoOnPageIndexChanging (DetailsViewPageEventArgs e)
243                         {
244                                 OnPageIndexChanging (e);
245                         }
246
247                         public void DoOnPagePreLoad  (Object sender , EventArgs e)
248                         {
249                                 OnPagePreLoad (sender, e);
250                         }
251                         public void DoOnPreRender (EventArgs e)
252                         {
253                                 OnPreRender (e);
254                         }
255                         public void DoOnUnload (EventArgs e)
256                         {
257                                 OnUnload (e);
258                         }
259                         public bool DoOnBubbleEvent (Object sender, EventArgs e)
260                         {
261                                 return OnBubbleEvent (sender, e);
262                         }
263
264                         public Object DoSaveControlState ()
265                         {
266                                 return SaveControlState ();
267                         }
268
269                         public void DoLoadControlState (Object saveState)
270                         {
271                                 LoadControlState (saveState);
272                         }
273
274                         public AutoGeneratedField DoCreateAutoGeneratedRow (AutoGeneratedFieldProperties filedProperties)
275                         {
276                                 return CreateAutoGeneratedRow (filedProperties);
277                         }
278
279                         public ICollection DoCreateAutoGeneratedRows (Object DataItem)
280                         {
281                                 return CreateAutoGeneratedRows (DataItem);
282                         }
283
284                         public int DoCreateChildControls (IEnumerable dataSource,bool dataBinding)
285                         {
286                                 return CreateChildControls (dataSource, dataBinding);
287                         }
288
289                         public Style DoCreateControlStyle ()
290                         {
291                                 return CreateControlStyle ();
292                         }
293
294                         public DetailsViewRow  DoCreateRow (int rowIndex,DataControlRowType rowType, DataControlRowState rowState)
295                         {
296                                 return CreateRow (rowIndex, rowType, rowState); 
297                         }
298
299                         public Table DoCreateTable ()
300                         {
301                                 return CreateTable ();
302                         }
303
304                         protected override void EnsureDataBound ()
305                         {
306                                 base.EnsureDataBound ();
307                                 ensureDataBound = true;
308                         }
309
310                         protected override void EnsureChildControls ()
311                         {
312                                 base.EnsureChildControls ();
313                                 ensureCreateChildControls = true;
314                         }
315
316                         protected internal override void CreateChildControls ()
317                         {
318                                 base.CreateChildControls ();
319                                 createChildControls1 = true;
320                         }
321
322                         protected override int CreateChildControls (IEnumerable data, bool dataBinding)
323                         {
324                                 createChildControls2 = true;
325                                 return base.CreateChildControls (data, dataBinding);
326                         }
327
328                         public void DoConfirmInitState ()
329                         {
330                                 base.ConfirmInitState ();
331                         }
332
333                         public void DoExtractRowValues (IOrderedDictionary fieldValues, bool includeReadOnlyFields, bool includeKeys)
334                         {
335                                 ExtractRowValues (fieldValues, includeReadOnlyFields, includeKeys);
336                         }
337
338                         public ICollection  DoCreateFieldSet (Object dataItem, bool useDataSource)
339                         {
340                                 return CreateFieldSet (dataItem, useDataSource);
341                         }
342
343                         public string DoGetCallbackResult ()
344                         {
345                                 return GetCallbackResult (); 
346                         }
347
348                         public string DoGetCallbackScript (IButtonControl buttonControl, string argument)
349                         {
350                                 return GetCallbackScript (buttonControl, argument);
351                         }
352
353                         protected override void InitializePager (DetailsViewRow row, PagedDataSource pagedDataSource)
354                         {
355                                 base.InitializePager (row,pagedDataSource);
356                                 isInitializePager = true;
357                         }
358
359                         public void DoPerformDataBinding (IEnumerable data)
360                         {
361                                 PerformDataBinding (data);
362                         }
363
364                         protected internal override void PrepareControlHierarchy ()
365                         {
366                                 base.PrepareControlHierarchy ();
367                                 controlHierarchy = true;
368                         }
369
370                         public void DoRaiseCallbackEvent (string eventArgument)
371                         {
372                                 base.RaiseCallbackEvent (eventArgument);
373                         }
374
375                         public void DoEnsureChildControls ()
376                         {
377                                 base.EnsureChildControls ();
378                         }
379
380                         public void DoEnsureDataBound ()
381                         {
382                                 base.EnsureDataBound ();
383                         }
384
385                         public DataSourceSelectArguments DoCreateDataSourceSelectArguments ()
386                         {
387                                 return CreateDataSourceSelectArguments ();
388                 }
389
390                         public DataSourceView DoGetData ()
391                         {
392                                 return GetData ();
393                         }
394
395                         public void SetRequiresDataBinding (bool value)
396                         {
397                                 RequiresDataBinding = value;
398                         }
399
400                         public bool GetRequiresDataBinding ()
401                         {
402                                 return RequiresDataBinding;
403                         }
404                         
405                         public bool GetInitialized ()
406                         {
407                                 return Initialized;
408                         }
409                 }
410
411                 ArrayList myds = new ArrayList ();
412
413                 [TestFixtureSetUp]
414                 public void constract ()
415                 {
416                         myds.Add ("Item1");
417                         myds.Add ("Item2");
418                         myds.Add ("Item3");
419                         myds.Add ("Item4");
420                         myds.Add ("Item5");
421                         myds.Add ("Item6");
422
423                         WebTest.CopyResource (GetType (), "FooterTemplateTest.aspx", "FooterTemplateTest.aspx");
424                         WebTest.CopyResource (GetType (), "DetailsViewTemplates.aspx", "DetailsViewTemplates.aspx");
425                         WebTest.CopyResource (GetType (), "DetailsViewTemplates_2.aspx", "DetailsViewTemplates_2.aspx");
426                         WebTest.CopyResource (GetType (), "DetailsViewTemplates_3.aspx", "DetailsViewTemplates_3.aspx");
427                         WebTest.CopyResource (GetType (), "DetailsViewDataActions.aspx", "DetailsViewDataActions.aspx");
428                         WebTest.CopyResource (GetType (), "DetailsViewProperties1.aspx", "DetailsViewProperties1.aspx");
429                 }
430
431                 [Test]
432                 public void DetailsView_DefaultProperties ()
433                 {
434                         PokerDetailsView dv = new PokerDetailsView ();
435                         Assert.IsNotNull (dv.Rows);                     
436                         Assert.AreEqual (false, dv.AllowPaging, "AllowPagingDefault");
437                         Assert.AreEqual (typeof(TableItemStyle), dv.AlternatingRowStyle.GetType(),"AlternatingRowStyleDefault") ;
438                         Assert.AreEqual (false, dv.AutoGenerateDeleteButton, "AutoGenerateDeleteButtonDefault");
439                         Assert.AreEqual (false, dv.AutoGenerateEditButton, "AutoGenerateEditButtonDefault");
440                         Assert.AreEqual (false, dv.AutoGenerateInsertButton, "AutoGenerateInsertButtonDefault");
441                         Assert.AreEqual (true, dv.AutoGenerateRows, "AutoGenerateRowsDefault");
442                         Assert.AreEqual ("", dv.BackImageUrl, "BackImageUrlDefault");
443                         Assert.AreEqual (null, dv.BottomPagerRow, "BottomPagerRowDefault");
444                         Assert.AreEqual ("", dv.Caption, "CaptionDefault");
445                         Assert.AreEqual (TableCaptionAlign.NotSet, dv.CaptionAlign, "CaptionAlignDefault");
446                         Assert.AreEqual (-1, dv.CellPadding, "CellPaddingDefault");
447                         Assert.AreEqual (0, dv.CellSpacing, "CellSpacingDefault");
448                         Assert.AreEqual (typeof(TableItemStyle), dv.CommandRowStyle.GetType(),"CommandRowStyleDefault");
449                         Assert.AreEqual (DetailsViewMode.ReadOnly, dv.CurrentMode, "CurrentModeDefault");
450                         Assert.AreEqual (null, dv.DataItem, "DataItemDefault");
451                         Assert.AreEqual (0, dv.DataItemCount, " DataItemCountDefault");
452                         Assert.AreEqual (0, dv.DataItemIndex, "DataItemIndexDefault");
453                         Assert.AreEqual (typeof (DataKey), dv.DataKey.GetType (), "DataKeyDefault");                    
454                         Assert.AreEqual (new string[0],dv.DataKeyNames,"DataKeyNamesDefault");
455                         Assert.AreEqual (DetailsViewMode.ReadOnly, dv.DefaultMode, "DefaultMode");
456                         Assert.AreEqual (typeof (TableItemStyle),dv.EditRowStyle.GetType(),"EditRowStyleDefault");
457                         Assert.AreEqual (typeof (TableItemStyle),dv.EmptyDataRowStyle.GetType(), " EmptyDataRowStyleDefault");
458                         Assert.AreEqual (null,dv.EmptyDataTemplate,"EmptyDataTemplate");
459                         Assert.AreEqual (false,dv.EnablePagingCallbacks, "EnablePagingCallbacksDefault");
460                         Assert.AreEqual (true,dv.FieldHeaderStyle.IsEmpty,"FieldHeaderStyleDefault");
461                         Assert.AreEqual (typeof (TableItemStyle),dv.FieldHeaderStyle.GetType() ,"FieldHeaderStyleDefault");
462                         Assert.AreEqual (0, dv.Fields.Count  ,"FiledsDefault");
463                         Assert.AreEqual (null, dv.FooterRow, "FooterRowDefault1");
464                         Assert.AreEqual (typeof (TableItemStyle), dv.FooterStyle.GetType (), "FooterStyleDefault");
465                         Assert.AreEqual (null, dv.FooterTemplate, "FooterTemplateDefault");
466                         Assert.AreEqual ("", dv.FooterText, "FooterTextDefault");
467                         Assert.AreEqual (GridLines.Both, dv.GridLines, "GridLinesDefault");
468                         Assert.AreEqual (null, dv.HeaderRow, "HeaderRowDefault");
469                         Assert.AreEqual (typeof (TableItemStyle), dv.HeaderStyle.GetType() , "HeaderStyleDefault");
470                         Assert.AreEqual (null, dv.HeaderTemplate, "HeaderTemplateDefault");
471                         Assert.AreEqual ("", dv.HeaderText, "HeaderTextDefault");
472                         Assert.AreEqual (HorizontalAlign.NotSet, dv.HorizontalAlign, "HorizontalAlignDefault");
473                         Assert.AreEqual (typeof (TableItemStyle), dv.InsertRowStyle.GetType (), "InsertRowStyleDefault");
474                         Assert.AreEqual (0, dv.PageCount, "PageCountDefault");
475                         Assert.AreEqual (0, dv.PageIndex, "PageIndexDefault");
476                         Assert.AreEqual (typeof (PagerSettings), dv.PagerSettings.GetType() , "PagerSettingsDefault");
477                         Assert.AreEqual (typeof (TableItemStyle), dv.PagerStyle.GetType() , "PagerStyleDefault");
478                         Assert.AreEqual (null, dv.PagerTemplate, "PagerTemplateDefault");
479                         Assert.AreEqual (0, dv.Rows.Count, "RowsDefault1");
480                         Assert.AreEqual (typeof (DetailsViewRowCollection), dv.Rows.GetType (), "RowDefault2");
481                         Assert.AreEqual (typeof (TableItemStyle), dv.RowStyle.GetType (), "RowStyleDefault");
482                         Assert.AreEqual (null, dv.SelectedValue, "SelectedValueDefault");
483                         Assert.AreEqual (null, dv.TopPagerRow, "TopPagerRow");
484                 }
485
486                 [Test]
487                 public void DetailsView_AssignToDefaultProperties ()
488                 {
489                         PokerDetailsView dv = new PokerDetailsView ();
490                         dv.AllowPaging = true;
491                         dv.DataSource = myds;
492                         dv.DataBind ();                 
493                         Assert.AreEqual (true, dv.AllowPaging, "AllowPaging");
494                         dv.AlternatingRowStyle.CssClass = "style.css";
495                         Assert.AreEqual ("style.css", dv.AlternatingRowStyle.CssClass, "AlternatingRowStyle");
496                         dv.AutoGenerateDeleteButton = true;
497                         Assert.AreEqual (true, dv.AutoGenerateDeleteButton, "AutoGenerateDeleteButton");
498                         dv.AutoGenerateEditButton = true;
499                         Assert.AreEqual (true, dv.AutoGenerateEditButton, "AutoGenerateEditButton");
500                         dv.AutoGenerateInsertButton = true;
501                         Assert.AreEqual (true, dv.AutoGenerateInsertButton, "AutoGenerateInsertButton");
502                         dv.AutoGenerateRows = false;
503                         Assert.AreEqual (false, dv.AutoGenerateRows, "AutoGenerateRows");
504                         dv.BackImageUrl = "image.jpg";
505                         Assert.AreEqual ("image.jpg", dv.BackImageUrl, "BackImageUrl");
506                         dv.Caption = "Caption Test";
507                         Assert.AreEqual ("Caption Test", dv.Caption, "Caption");
508                         dv.CaptionAlign = TableCaptionAlign.Right;
509                         Assert.AreEqual (TableCaptionAlign.Right, dv.CaptionAlign, "CaptionAlign");
510                         dv.CellPadding = 2;
511                         Assert.AreEqual (2, dv.CellPadding, "CellPadding");
512                         dv.CellSpacing = 5;
513                         Assert.AreEqual (5, dv.CellSpacing, "CellSpacing");
514                         dv.CommandRowStyle.BackColor = Color.Purple;
515                         Assert.AreEqual (Color.Purple, dv.CommandRowStyle.BackColor, "CommandRowStyle.BackColor");
516                         dv.ChangeMode (DetailsViewMode.Insert);
517                         Assert.AreEqual (DetailsViewMode.Insert, dv.CurrentMode, "CurrentModeInsert");
518                         dv.ChangeMode (DetailsViewMode.Edit );
519                         Assert.AreEqual (DetailsViewMode.Edit, dv.CurrentMode, "CurrentModeEdit");
520                         Assert.AreEqual ("Item1", dv.DataItem, "DataItem");
521                         Assert.AreEqual (6, dv.DataItemCount, "DataItemCount");
522                         Assert.AreEqual (0, dv.DataItemIndex, "DataItemIndex");
523                         string[] names ={ "test1", "test2", "test3" };
524                         dv.DataKeyNames = names;
525                         Assert.AreEqual (names, dv.DataKeyNames, "DataKeyNames");
526                         dv.DefaultMode = DetailsViewMode.Edit;
527                         Assert.AreEqual (DetailsViewMode.Edit, dv.DefaultMode, "DefaultModeEdit");
528                         dv.DefaultMode = DetailsViewMode.Insert;
529                         Assert.AreEqual (DetailsViewMode.Insert, dv.DefaultMode, "DefaultModeInsert");
530                         dv.DefaultMode = DetailsViewMode.ReadOnly;
531                         Assert.AreEqual (DetailsViewMode.ReadOnly, dv.DefaultMode, "DefaultModeReadOnly");
532                         dv.EditRowStyle.ForeColor = Color.Pink;
533                         Assert.AreEqual (Color.Pink, dv.EditRowStyle.ForeColor, "EditRowStyle");
534                         dv.EmptyDataRowStyle.HorizontalAlign = HorizontalAlign.Center;
535                         Assert.AreEqual (HorizontalAlign.Center, dv.EmptyDataRowStyle.HorizontalAlign, "HorizontalAlignCenter");
536                         dv.EmptyDataTemplate = new DTemplate ();
537                         Assert.AreEqual (typeof (DTemplate), dv.EmptyDataTemplate.GetType() , "EmptyDataTemplate");
538                         dv.EmptyDataText = "No Data";
539                         Assert.AreEqual ("No Data", dv.EmptyDataText, "EmptyDataText");
540                         dv.EnablePagingCallbacks = true;
541                         Assert.AreEqual (true, dv.EnablePagingCallbacks, "EnablePagingCallbacks");
542                         dv.FieldHeaderStyle.CssClass = "style.css";
543                         Assert.AreEqual ("style.css", dv.FieldHeaderStyle.CssClass, "FieldHeaderStyle");
544                         DataControlFieldCollection coll=new DataControlFieldCollection ();
545                         dv.FooterStyle.HorizontalAlign = HorizontalAlign.Right ;
546                         Assert.AreEqual (HorizontalAlign.Right, dv.FooterStyle.HorizontalAlign , "FooterStyle");
547                         dv.FooterTemplate = new DTemplate ();
548                         Assert.AreEqual (typeof(DTemplate ),dv.FooterTemplate.GetType() ,"FooterTemplate");
549                         dv.FooterText = "Footer Text";
550                         Assert.AreEqual ("Footer Text", dv.FooterText, "FooterText");
551                         dv.GridLines = GridLines.Horizontal;
552                         Assert.AreEqual (GridLines.Horizontal, dv.GridLines, "GridLinesHorizontal ");
553                         dv.GridLines = GridLines.None;
554                         Assert.AreEqual (GridLines.None , dv.GridLines, "GridLinesNone ");
555                         dv.GridLines = GridLines.Vertical;
556                         Assert.AreEqual (GridLines.Vertical, dv.GridLines, "GridLinesVertical ");
557                         dv.GridLines = GridLines.Both;
558                         Assert.AreEqual (GridLines.Both, dv.GridLines, "GridLinesBoth ");
559                         dv.HeaderStyle.BorderColor = Color.PapayaWhip;
560                         Assert.AreEqual (Color.PapayaWhip, dv.HeaderStyle.BorderColor, "HeaderStyle");
561                         dv.HeaderTemplate = new DTemplate ();
562                         Assert.AreEqual (typeof (DTemplate), dv.HeaderTemplate.GetType (), "HeaderTemplate"); 
563                         dv.HeaderText = "Header Text";
564                         Assert.AreEqual ("Header Text", dv.HeaderText, "HeaderText");
565                         dv.HorizontalAlign = HorizontalAlign.Center;
566                         Assert.AreEqual (HorizontalAlign.Center, dv.HorizontalAlign, "HorizontalAlignCenter");
567                         dv.HorizontalAlign = HorizontalAlign.Justify;
568                         Assert.AreEqual (HorizontalAlign.Justify , dv.HorizontalAlign, "HorizontalAlignJustify");
569                         dv.HorizontalAlign = HorizontalAlign.Left ;
570                         Assert.AreEqual (HorizontalAlign.Left , dv.HorizontalAlign, "HorizontalAlignLeft");
571                         dv.HorizontalAlign = HorizontalAlign.NotSet ;
572                         Assert.AreEqual (HorizontalAlign.NotSet , dv.HorizontalAlign, "HorizontalAlignNotSet");
573                         dv.HorizontalAlign = HorizontalAlign.Right ;
574                         Assert.AreEqual (HorizontalAlign.Right , dv.HorizontalAlign, "HorizontalAlignRight");
575                         dv.InsertRowStyle.BackColor = Color.PeachPuff;
576                         Assert.AreEqual (Color.PeachPuff, dv.InsertRowStyle.BackColor, "InsertRowStyle");
577                         Assert.AreEqual (6, dv.PageCount, "PageCount");
578                         Assert.AreEqual (0, dv.PageIndex, "PageIndex");
579                         dv.PagerSettings.LastPageImageUrl = "image.jpg";
580                         Assert.AreEqual ("image.jpg", dv.PagerSettings.LastPageImageUrl, "PagerSettings");
581                         dv.PagerStyle.CssClass = "style.css";
582                         Assert.AreEqual ("style.css", dv.PagerStyle.CssClass, "PagerStyle");
583                         dv.PagerTemplate = new DTemplate ();
584                         Assert.AreEqual (typeof (DTemplate), dv.PagerTemplate.GetType (), "PagerTemplate");
585                         Assert.AreEqual (1, dv.Rows.Count, "Rows");
586                         dv.RowStyle.BackColor  = Color.Plum  ;
587                         Assert.AreEqual (Color.Plum, dv.RowStyle.BackColor, "RowStyle");
588                         dv.FooterRow.CssClass="style.css";
589                         Assert.AreEqual ("style.css", dv.FooterRow.CssClass , "FooterRow");
590                         dv.HeaderRow.BackColor =Color.Pink ;
591                         Assert.AreEqual (Color.Pink, dv.HeaderRow.BackColor, "HeaderRow");  
592
593                 }
594
595                 [Test]          
596                 public void DetailsView_DefaultProtectedProperties ()
597                 {
598                         PokerDetailsView dv = new PokerDetailsView ();
599                         Assert.AreEqual (HtmlTextWriterTag.Table, dv.PokerTagKey, "TagKey");
600                 }
601
602                 [Test]
603                 public void DetailsView_AssignedPropertiesRender ()
604                 {
605                         string renderedPageHtml = new WebTest ("DetailsViewProperties1.aspx").Run ();
606                         string newHtmlValue = HtmlDiff.GetControlFromPageHtml (renderedPageHtml);
607                         string origHtmlValue = "<div>\n        <div>\r\n\t<table cellspacing=\"20\" cellpadding=\"30\" rules=\"all\" border=\"1\" id=\"DetailsView1\" style=\"height:50px;width:125px;background-image:url(Blue_hills.jpg);\">\r\n\t\t<caption align=\"Bottom\">\r\n\t\t\tCaption Test\r\n\t\t</caption><tr>\r\n\t\t\t<td>ID</td><td>1001</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Mahesh</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Chand</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
608                         HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderDetailsViewProperties1");
609                         Assert.AreEqual (true,origHtmlValue.Contains (@"cellpadding=""30"""),"CellpaddingRender");
610                         Assert.AreEqual (true, origHtmlValue.Contains (@"cellspacing=""20"""), "CellspacingRender");
611                         Assert.AreEqual (true, origHtmlValue.Contains ("Caption Test"), "CaptionRender");
612                         Assert.AreEqual (true, origHtmlValue.Contains (@"caption align=""Bottom"""), "CaptionalignRender");
613                         Assert.AreEqual (true, origHtmlValue.Contains ("Blue_hills.jpg"), "BackImageRender");
614                         //GridLines and HorizontalAlign were set but can not be shown in this rendering.
615                 }
616                 
617                 ///
618                 /// The test checks, that when the DataSource is empty, the control
619                 /// will not render the content even when footer/header are set to some
620                 /// values.
621                 ///
622                 [Test]
623                 [Category ("NunitWeb")]
624                 public void DetailsView_EmptyContentRendering()
625                 {
626                         PageDelegate pd = new PageDelegate (DetailsView_EmptyContentRendering_Load);
627                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (pd));
628                         string result = t.Run ();                                               
629                         FormRequest fr = new FormRequest (t.Response, "form1");
630                         fr.Controls.Add ("__EVENTTARGET");
631                         fr.Controls.Add ("__EVENTARGUMENT");
632                         fr.Controls["__EVENTTARGET"].Value = "LinkButton1";
633                         fr.Controls["__EVENTARGUMENT"].Value = "";
634                         t.Request = fr;
635                         result = t.Run ();
636                         string newHtml = HtmlDiff.GetControlFromPageHtml (result);
637                         string origHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\r\n\t</table>\r\n</div><a id=\"LinkButton1\" href=\"javascript:__doPostBack(&#39;LinkButton1&#39;,&#39;&#39;)\">Test</a>";
638                         HtmlDiff.AssertAreEqual(origHtml, newHtml, "EmptyContentTest");
639                 }
640                 
641                 public static void DetailsView_EmptyContentRendering_Load(Page p)
642                 {
643                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
644                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
645
646                         PokerDetailsView dv = new PokerDetailsView ();
647                         dv.DataSource = new ArrayList ();
648                         dv.HeaderText = "Header Text";
649                         dv.FooterText = "Footer Text";
650                         LinkButton lb = new LinkButton ();
651                         lb.ID = "LinkButton1";
652                         lb.Text = "Test";
653                         
654                         p.Form.Controls.Add (lcb);
655                         p.Form.Controls.Add (dv);
656                         dv.DataBind ();
657                         p.Form.Controls.Add (lb);
658                         p.Form.Controls.Add (lce);              
659                 }
660                 
661                 ///
662                 /// This test checks, that when the footer text is set, but
663                 /// the DataSource is empty, the footer is not rendered.
664                 ///
665                 [Test]
666                 [Category ("NunitWeb")]
667                 public void DetailsView_EmptyFooterRendering()
668                 {
669                         PageDelegate pd = new PageDelegate (DetailsView_EmptyFooterRendering_Load);
670                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (pd));
671                         string result = t.Run ();                                               
672                         FormRequest fr = new FormRequest (t.Response, "form1");
673                         fr.Controls.Add ("__EVENTTARGET");
674                         fr.Controls.Add ("__EVENTARGUMENT");
675                         fr.Controls["__EVENTTARGET"].Value = "LinkButton1";
676                         fr.Controls["__EVENTARGUMENT"].Value = "";
677                         t.Request = fr;
678                         result = t.Run ();
679                         string newHtml = HtmlDiff.GetControlFromPageHtml (result); 
680                         string origHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\r\n\t</table>\r\n</div><a id=\"LinkButton1\" href=\"javascript:__doPostBack(&#39;LinkButton1&#39;,&#39;&#39;)\">Test</a>";
681                         HtmlDiff.AssertAreEqual(origHtml, newHtml, "EmptyFooterTextTest");
682                 }
683                 
684                 public static void DetailsView_EmptyFooterRendering_Load(Page p)
685                 {
686                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
687                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
688
689                         PokerDetailsView dv = new PokerDetailsView ();
690                         dv.DataSource = new ArrayList ();
691                         dv.FooterText = "Footer Text";
692                         LinkButton lb = new LinkButton ();
693                         lb.ID = "LinkButton1";
694                         lb.Text = "Test";
695                         
696                         p.Form.Controls.Add (lcb);
697                         p.Form.Controls.Add (dv);
698                         dv.DataBind ();
699                         p.Form.Controls.Add (lb);
700                         p.Form.Controls.Add (lce);              
701                 }
702
703                 ///
704                 /// This test checks, that when the header text is set, but
705                 /// the DataSource is empty, the header is not rendered
706                 ///
707                 [Test]
708                 [Category ("NunitWeb")]
709                 public void DetailsView_EmptyHeaderRendering()
710                 {
711                         PageDelegate pd = new PageDelegate (DetailsView_EmptyHeaderRendering_Load);
712                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (pd));
713                         string result = t.Run ();                                               
714                         FormRequest fr = new FormRequest (t.Response, "form1");
715                         fr.Controls.Add ("__EVENTTARGET");
716                         fr.Controls.Add ("__EVENTARGUMENT");
717                         fr.Controls["__EVENTTARGET"].Value = "LinkButton1";
718                         fr.Controls["__EVENTARGUMENT"].Value = "";
719                         t.Request = fr;
720                         result = t.Run ();
721                         string newHtml = HtmlDiff.GetControlFromPageHtml (result); 
722                         string origHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\r\n\t</table>\r\n</div><a id=\"LinkButton1\" href=\"javascript:__doPostBack(&#39;LinkButton1&#39;,&#39;&#39;)\">Test</a>";
723                         HtmlDiff.AssertAreEqual(origHtml, newHtml, "EmptyHeaderTextTest");
724                 }
725                 
726                 public static void DetailsView_EmptyHeaderRendering_Load(Page p)
727                 {
728                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
729                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
730
731                         PokerDetailsView dv = new PokerDetailsView ();
732                         dv.DataSource = new ArrayList ();
733                         dv.HeaderText = "Header Text";
734                         LinkButton lb = new LinkButton ();
735                         lb.ID = "LinkButton1";
736                         lb.Text = "Test";
737                         
738                         p.Form.Controls.Add (lcb);
739                         p.Form.Controls.Add (dv);
740                         dv.DataBind ();
741                         p.Form.Controls.Add (lb);
742                         p.Form.Controls.Add (lce);      
743                 }
744                 
745                 [Test]
746                 [Category ("NunitWeb")]
747                 public void DetailsView_EmptyDataTextPropertyRender ()
748                 {       
749                         PageDelegate pd = new PageDelegate (DetailsView_EmptyDataTextProperty);
750                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (pd));
751                         string result = t.Run ();                                               
752                         FormRequest fr = new FormRequest (t.Response, "form1");
753                         fr.Controls.Add ("__EVENTTARGET");
754                         fr.Controls.Add ("__EVENTARGUMENT");
755                         fr.Controls["__EVENTTARGET"].Value = "LinkButton1";
756                         fr.Controls["__EVENTARGUMENT"].Value = "";
757                         t.Request = fr;
758                         //t.Invoker = PageInvoker.CreateOnLoad (pd);
759                         result = t.Run ();
760                         string newHtml = HtmlDiff.GetControlFromPageHtml (result); 
761                         string origHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>Empty Data</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div><a id=\"LinkButton1\" href=\"javascript:__doPostBack(&#39;LinkButton1&#39;,&#39;&#39;)\">Test</a>";
762                         HtmlDiff.AssertAreEqual(origHtml, newHtml, "EmptyDataTextTest");
763                 }
764
765                 public static void DetailsView_EmptyDataTextProperty (Page p)
766                 {
767                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
768                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
769
770                         PokerDetailsView dv = new PokerDetailsView ();
771                         dv.DataSource = new ArrayList ();
772                         dv.EmptyDataText = "Empty Data";
773                         LinkButton lb = new LinkButton ();
774                         lb.ID = "LinkButton1";
775                         lb.Text = "Test";
776                         
777                         p.Form.Controls.Add (lcb);
778                         p.Form.Controls.Add (dv);
779                         dv.DataBind ();
780                         p.Form.Controls.Add (lb);
781                         p.Form.Controls.Add (lce);
782                 }
783                 //ToDo: Add more properties rendering tests (PageSettings,AutoGeneratedRows etc...)
784
785                 
786                 //Public Methods
787
788                 [Test]
789                 public void DetailsView_ChangeMode ()
790                 {
791                         PokerDetailsView dv = new PokerDetailsView ();
792                         Assert.AreEqual (DetailsViewMode.ReadOnly, dv.CurrentMode, "ChangeModeDefault");
793                         dv.ChangeMode (DetailsViewMode.Insert);
794                         Assert.AreEqual (DetailsViewMode.Insert, dv.CurrentMode, "ChangeModeInsert");
795                         dv.ChangeMode (DetailsViewMode.Edit);
796                         Assert.AreEqual (DetailsViewMode.Edit, dv.CurrentMode, "ChangeModeEdit");
797                         dv.ChangeMode (DetailsViewMode.ReadOnly);
798                         Assert.AreEqual (DetailsViewMode.ReadOnly, dv.CurrentMode, "ChangeModeReadOnly");
799                 }
800
801                 [Test]
802                 public void FormView_DataBind ()
803                 {
804                         PokerDetailsView dv = new PokerDetailsView ();
805                         dv.AllowPaging = true;
806                         dv.DataSource = myds;
807                         Assert.AreEqual (0, dv.PageCount, "BeforeDataBind1");
808                         Assert.AreEqual (null, dv.DataItem, "BeforeDataBind2");
809                         dv.DataBind ();
810                         Assert.AreEqual (6, dv.PageCount, "AfterDataBind1");
811                         Assert.AreEqual (6, dv.DataItemCount, "AfterDataBind2");
812                         Assert.AreEqual ("Item1", dv.DataItem, "AfterDataBind3");
813                 }
814
815                 [Test]
816                 public void FormView_IsBindableType ()
817                 {
818                         bool isBindable = false;
819                         PokerDetailsView dv = new PokerDetailsView ();
820                         isBindable = dv.IsBindableType (typeof (Decimal));
821                         Assert.AreEqual (true, isBindable, "IsBindableTypeDecimal");
822                         isBindable = dv.IsBindableType (typeof (Int32));
823                         Assert.AreEqual (true, isBindable, "IsBindableTypeInt32");
824                         isBindable = dv.IsBindableType (typeof (String));
825                         Assert.AreEqual (true, isBindable, "IsBindableTypeString");
826                         isBindable = dv.IsBindableType (typeof (Boolean));
827                         Assert.AreEqual (true, isBindable, "IsBindableTypeBoolean");
828                         isBindable = dv.IsBindableType (typeof (DateTime));
829                         Assert.AreEqual (true, isBindable, "IsBindableTypeDateTime");
830                         isBindable = dv.IsBindableType (typeof (Byte));
831                         Assert.AreEqual (true, isBindable, "IsBindableTypeByte");
832                         isBindable = dv.IsBindableType (typeof (Guid));
833                         Assert.AreEqual (true, isBindable, "IsBindableTypeGuid");
834                         isBindable = dv.IsBindableType (typeof (DTemplate));
835                         Assert.AreEqual (false, isBindable, "IsBindableTypeMyTemplate");
836                 }
837
838
839                 private bool isDeleted = false;
840
841                 [Test]
842                 public void DetailsView_DeleteItemHandler ()
843                 {
844                         PokerDetailsView dv = new PokerDetailsView ();
845                         dv.DataSource = myds;
846                         dv.DataBind ();
847                         Assert.AreEqual (false, isDeleted, "BeforeDeleteItem");
848                         dv.ItemDeleting += new DetailsViewDeleteEventHandler (dv_DeleteingHandler);
849                         dv.DeleteItem ();
850                         Assert.AreEqual (true, isDeleted, "BeforeDeleteItem");
851
852                 }
853
854                 public void dv_DeleteingHandler (Object sender, DetailsViewDeleteEventArgs e)
855                 {
856                         isDeleted = true;
857                 }
858
859                 [Test]
860                 [Category ("NunitWeb")]
861                 public void DetailsView_DeleteItemTest ()
862                 {
863                         string html = new WebTest (PageInvoker.CreateOnLoad (
864                                 new PageDelegate (DetailsView_DeleteItem))).Run ();
865                         string newHtml = HtmlDiff.GetControlFromPageHtml (html);
866                         string origHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1002</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Melanie</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Talmadge</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$2&#39;)\">2</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
867                         HtmlDiff.AssertAreEqual (origHtml, newHtml, "DeleteItemMethod");
868                 }
869
870                 public static void DetailsView_DeleteItem (Page p)
871                 {
872                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
873                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
874                         PokerDetailsView dv = new PokerDetailsView ();
875                         ObjectDataSource ds = new ObjectDataSource ();
876                         ds.ID = "ObjectDataSource1";
877                         ds.TypeName = "MonoTests.System.Web.UI.WebControls.TableObject";
878                         ds.SelectMethod = "GetMyData";
879                         ds.DeleteMethod = "Delete";
880                         ds.InsertMethod = "Insert";
881                         ds.UpdateMethod = "Update";
882                         Parameter p1 = new Parameter ("ID", TypeCode.String);
883                         Parameter p2 = new Parameter ("FName", TypeCode.String);
884                         Parameter p3 = new Parameter ("LName", TypeCode.String);
885                         ds.DeleteParameters.Add (p1);
886                         ds.DeleteParameters.Add (p2);
887                         ds.DeleteParameters.Add (p3);
888                         dv.Page = p;
889                         ds.Page = p;
890                         p.Form.Controls.Add (lcb);
891                         p.Form.Controls.Add (dv);
892                         p.Form.Controls.Add (ds);
893                         p.Form.Controls.Add (lce);
894                         dv.AllowPaging = true;
895                         dv.DataKeyNames = new string[] { "ID", "FName", "LName" };
896                         dv.DataSourceID = "ObjectDataSource1";
897                         dv.DataBind ();
898                         dv.DeleteItem ();
899                 }
900
901                 //ToDo: InsertItem method should be checked using postback
902                 private bool insertItem = false;
903                 [Test]
904                 public void DetailsView_InsertItem ()
905                 {
906                         PokerDetailsView dv = new PokerDetailsView ();
907                         dv.Page = new Page ();
908                         dv.Page.Validate();
909                         dv.ChangeMode (DetailsViewMode.Insert);
910                         dv.ItemInserting += new DetailsViewInsertEventHandler (insert_item);
911                         Assert.AreEqual (false, insertItem, "BeforeInsertItem");
912                         dv.InsertItem (true);
913                         Assert.AreEqual (true, insertItem, "AfterInsertItem");
914
915                 }
916
917                 public void insert_item (object sender, DetailsViewInsertEventArgs e)
918                 {
919                         insertItem = true;
920                 }
921
922                 //ToDo: UpdateItem method should be checked using postback
923                 private bool updateItem = false;
924                 [Test]
925                 public void DetailsView_UpdateItem ()
926                 {
927                         PokerDetailsView dv = new PokerDetailsView ();
928                         dv.ChangeMode (DetailsViewMode.Edit);
929                         dv.Page = new Page ();
930                         dv.Page.Validate ();
931                         dv.ItemUpdating += new DetailsViewUpdateEventHandler (update_item);
932                         Assert.AreEqual (false, updateItem, "BeforeUpdateItem");
933                         dv.UpdateItem (true);
934                         Assert.AreEqual (true, updateItem, "AfterUpdateItem");
935
936                 }
937
938                 public void update_item (object sender, DetailsViewUpdateEventArgs e)
939                 {
940                         updateItem = true;
941                 }
942
943                 //protected methods
944
945                 [Test]
946                 public void DetailsView_CreateAutoGeneratedRows ()
947                 {
948                         PokerDetailsView dv = new PokerDetailsView ();                  
949                         DataTable ds = TableObject.CreateDataTable ();
950                         dv.DataSource = ds;
951                         dv.DataBind ();                 
952                         ICollection col = dv.DoCreateAutoGeneratedRows (dv.DataItem);
953                         Assert.AreEqual (typeof(ArrayList),col.GetType (),"CreateAutoGeneratedRowsType");
954                         Assert.AreEqual (3, col.Count , "CreateAutoGeneratedRowsCount");
955                         Assert.AreEqual (typeof (AutoGeneratedField), ((ArrayList) col)[0].GetType (), "AutoGeneratedRowType");
956                         Assert.AreEqual ("ID", ((ArrayList) col)[0].ToString (), "AutoGeneratedRowName1");
957                         Assert.AreEqual ("FName", ((AutoGeneratedField)((ArrayList) col)[1]).HeaderText, "AutoGeneratedRowName2");
958                         Assert.AreEqual ("LName", ((AutoGeneratedField) ((ArrayList) col)[2]).SortExpression , "AutoGeneratedRowName3");
959                         
960                 }
961
962                 [Test]
963                 public void DetailsView_CreateAutoGenerateRow ()
964                 {
965                         PokerDetailsView dv = new PokerDetailsView ();                  
966                         AutoGeneratedFieldProperties prop = new AutoGeneratedFieldProperties ();                        
967                         prop.Name = "FieldItem";                        
968                         prop.Type = typeof(String);
969                         AutoGeneratedField field = dv.DoCreateAutoGeneratedRow (prop);
970                         Assert.AreEqual (typeof (string), field.DataType, "FieldDataType");
971                         Assert.AreEqual ("FieldItem", field.HeaderText, "FieldHeaderText");
972                         Assert.AreEqual ("FieldItem",field.SortExpression ,"FieldSortExpretion");
973                         Assert.AreEqual (typeof(AutoGeneratedField), field.GetType (), "AutoGeneratedFieldType"); 
974
975                 }
976
977                 [Test]
978                 public void DetailsView_CreateChildControls ()
979                 {
980                         PokerDetailsView dv = new PokerDetailsView ();                  
981                         Assert.AreEqual (6,dv.DoCreateChildControls (myds, true),"CreateChildControls1");
982                         Assert.AreEqual (6, dv.DoCreateChildControls (myds, false), "CreateChildControls2");
983                 }
984
985                 class MyEnumSource : IEnumerable
986                 {
987                         int _count;
988
989                         public MyEnumSource (int count) {
990                                 _count = count;
991                         }
992
993                         #region IEnumerable Members
994
995                         public IEnumerator GetEnumerator () {
996
997                                 for (int i = 0; i < _count; i++)
998                                         yield return i;
999                         }
1000
1001                         #endregion
1002                 }
1003
1004                 [Test]
1005                 public void DetailsView_CreateChildControls2 ()
1006                 {
1007                         PokerDetailsView dv = new PokerDetailsView ();
1008                         dv.Page = new Page ();
1009                         dv.DataSource = new MyEnumSource (20);
1010                         dv.DataBind ();
1011
1012                         Assert.AreEqual (20, dv.PageCount, "CreateChildControls#0");
1013
1014                         Assert.AreEqual (0, dv.DoCreateChildControls (null, true), "CreateChildControls#1");
1015                         Assert.AreEqual (0, dv.DoCreateChildControls (new MyEnumSource (0), true), "CreateChildControls#1");
1016                         Assert.AreEqual (20, dv.DoCreateChildControls (new MyEnumSource (20), true), "CreateChildControls#2");
1017
1018                         Assert.AreEqual (0, dv.DoCreateChildControls (new object [0], false), "CreateChildControls#3");
1019                         Assert.AreEqual (5, dv.DoCreateChildControls (new object [5], false), "CreateChildControls#4");
1020                 }
1021
1022                 [Test]
1023                 public void DetailsView_PageIndex ()
1024                 {
1025                         PokerDetailsView p = new PokerDetailsView ();
1026                         Assert.AreEqual (0, p.PageIndex, "#00");
1027                         Assert.AreEqual (false, p.GetInitialized (), "#01");
1028                         Assert.AreEqual (false, p.GetRequiresDataBinding (), "#02");
1029                         p.PageIndex = 2;
1030                         Assert.AreEqual (2, p.PageIndex, "#03");
1031                         Assert.AreEqual (false, p.GetRequiresDataBinding (), "#04");
1032                         p.PageIndex = -1;
1033                         Assert.AreEqual (2, p.PageIndex, "#05");
1034                         Assert.AreEqual (false, p.GetRequiresDataBinding (), "#06");
1035                 }
1036
1037                 [Test]
1038                 [Category ("NunitWeb")]
1039                 public void DetailsView_PageIndex2 ()
1040                 {
1041                         PageDelegates delegates = new PageDelegates ();
1042                         delegates.Load = DetailsView_PageIndex2_load;
1043                         delegates.LoadComplete = DetailsView_PageIndex2_loadComplete;
1044                         PageInvoker invoker = new PageInvoker (delegates);
1045                         WebTest test = new WebTest (invoker);
1046                         test.Run ();
1047                 }
1048
1049                 public static void DetailsView_PageIndex2_load (Page p)
1050                 {
1051                         PokerDetailsView fv = new PokerDetailsView ();
1052                         p.Form.Controls.Add (fv);
1053                         Assert.AreEqual (0, fv.PageIndex, "#00");
1054                         Assert.AreEqual (false, fv.GetInitialized (), "#01");
1055                         Assert.AreEqual (false, fv.GetRequiresDataBinding (), "#02");
1056                         fv.PageIndex = 2;
1057                         Assert.AreEqual (2, fv.PageIndex, "#03");
1058                         Assert.AreEqual (false, fv.GetRequiresDataBinding (), "#04");
1059                         fv.PageIndex = -1;
1060                         Assert.AreEqual (2, fv.PageIndex, "#05");
1061                         Assert.AreEqual (false, fv.GetRequiresDataBinding (), "#06");
1062                 }
1063
1064                 public static void DetailsView_PageIndex2_loadComplete (Page p)
1065                 {
1066                         PokerDetailsView fv = new PokerDetailsView ();
1067                         p.Form.Controls.Add (fv);
1068                         Assert.AreEqual (0, fv.PageIndex, "#100");
1069                         Assert.AreEqual (true, fv.GetInitialized (), "#101");
1070                         Assert.AreEqual (true, fv.GetRequiresDataBinding (), "#102");
1071                         fv.PageIndex = 2;
1072                         Assert.AreEqual (2, fv.PageIndex, "#103");
1073                         Assert.AreEqual (true, fv.GetRequiresDataBinding (), "#104");
1074                         fv.PageIndex = -1;
1075                         Assert.AreEqual (2, fv.PageIndex, "#105");
1076                         Assert.AreEqual (true, fv.GetRequiresDataBinding (), "#106");
1077                 }
1078
1079                 [Test]
1080                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1081                 public void DetailsView_PageIndex_Ex ()
1082                 {
1083                         PokerDetailsView p = new PokerDetailsView ();
1084                         p.PageIndex = -2;
1085                 }
1086
1087                 [Test]
1088                 public void DetailsView_PageIndex3 ()
1089                 {
1090                         PokerDetailsView dv = new PokerDetailsView ();
1091                         dv.AutoGenerateRows = false;
1092                         dv.Fields.Add (new TemplateField ());
1093                         dv.Page = new Page ();
1094                         dv.PageIndex = 10;
1095                         dv.DefaultMode = DetailsViewMode.Insert;
1096                         dv.SetRequiresDataBinding (true);
1097
1098                         Assert.AreEqual (0, dv.PageCount, "#0");
1099                         Assert.AreEqual (-1, dv.PageIndex, "#1");
1100
1101                         dv.DataSource = myds;
1102                         dv.DoEnsureDataBound ();
1103
1104                         Assert.AreEqual (0, dv.PageCount, "#2");
1105                         Assert.AreEqual (-1, dv.PageIndex, "#3");
1106
1107                         dv.ChangeMode (DetailsViewMode.ReadOnly);
1108
1109                         Assert.AreEqual (0, dv.PageCount, "#4");
1110                         Assert.AreEqual (10, dv.PageIndex, "#5");
1111                 }
1112                 
1113                 [Test]
1114                 public void DetailsView_PageIndex4 ()
1115                 {
1116                         PokerDetailsView dv = new PokerDetailsView ();
1117                         dv.AllowPaging = true;
1118                         dv.AutoGenerateRows = false;
1119                         dv.Fields.Add (new TemplateField ());
1120                         dv.Page = new Page ();
1121                         dv.PageIndex = 10;
1122
1123                         dv.DataSource = myds;
1124                         dv.DataBind ();
1125
1126                         Assert.AreEqual (6, dv.PageCount, "#0");
1127                         Assert.AreEqual (5, dv.PageIndex, "#1");
1128                 }
1129
1130                 [Test]
1131                 public void DetailsView_PageIndex5 ()
1132                 {
1133                         PokerDetailsView dv = new PokerDetailsView ();
1134                         dv.AutoGenerateRows = false;
1135                         dv.Fields.Add (new TemplateField ());
1136                         dv.Page = new Page ();
1137                         dv.PageIndex = 10;
1138
1139                         dv.DataSource = new MyEnumSource(6);
1140                         dv.DataBind ();
1141
1142                         Assert.AreEqual (5, dv.PageIndex, "#1");
1143                 }
1144
1145                 [Test]
1146                 public void DetailsView_CreateControlStyle ()
1147                 {
1148                         PokerDetailsView dv = new PokerDetailsView ();
1149                         Style style = dv.DoCreateControlStyle ();
1150                         Assert.AreEqual (0, ((TableStyle) style).CellSpacing, "CreateControlStyle1");
1151                         Assert.AreEqual (GridLines.Both, ((TableStyle) style).GridLines, "CreateControlStyle2");
1152                          
1153                 }
1154
1155                 [Test]
1156                 public void DetailsView_CreateRow ()
1157                 {
1158                         PokerDetailsView dv = new PokerDetailsView ();
1159                         DetailsViewRow row = dv.DoCreateRow (1, DataControlRowType.DataRow, DataControlRowState.Alternate);
1160                         Assert.AreEqual (1, row.RowIndex, "rowIndex1");
1161                         Assert.AreEqual (DataControlRowType.DataRow, row.RowType, "RowType1");
1162                         Assert.AreEqual (DataControlRowState.Alternate, row.RowState, "RowState1");
1163                         row = dv.DoCreateRow (2, DataControlRowType.Header, DataControlRowState.Insert);
1164                         Assert.AreEqual (2, row.RowIndex, "rowIndex2");
1165                         Assert.AreEqual (DataControlRowType.Header , row.RowType, "RowType2");
1166                         Assert.AreEqual (DataControlRowState.Insert , row.RowState, "RowState2");
1167                         row = dv.DoCreateRow (3, DataControlRowType.EmptyDataRow , DataControlRowState.Selected );
1168                         Assert.AreEqual (3, row.RowIndex, "rowIndex3");
1169                         Assert.AreEqual (DataControlRowType.EmptyDataRow , row.RowType, "RowType3");
1170                         Assert.AreEqual (DataControlRowState.Selected , row.RowState, "RowState3");                     
1171                         DetailsViewPagerRow pagerRow = (DetailsViewPagerRow )dv.DoCreateRow (5, DataControlRowType.Pager , DataControlRowState.Edit );
1172                         Assert.AreEqual (5, pagerRow.RowIndex, "rowIndex4");
1173                         Assert.AreEqual (DataControlRowType.Pager, pagerRow.RowType, "RowType4");
1174                         Assert.AreEqual (DataControlRowState.Edit, pagerRow.RowState, "RowState4");
1175   
1176   
1177                 }
1178
1179                 [Test]
1180                 public void DetailsView_CreateTable ()
1181                 {
1182                         PokerDetailsView dv = new PokerDetailsView ();
1183                         Table tb = dv.DoCreateTable();
1184                         Assert.AreEqual (null, tb.Parent, "CreateTable1");
1185                         Assert.AreEqual (String.Empty, tb.BackImageUrl, "CreateTable2");
1186                         Assert.AreEqual (0, tb.Rows.Count, "CreateTable3");
1187                         Assert.AreEqual (String.Empty, tb.ClientID, "CreateTable3");
1188                         dv.ID = "testId"; //private filed _parentID should be set to "testId"                   
1189                         tb = dv.DoCreateTable ();
1190                         Assert.AreEqual (-1, tb.CellSpacing, "CreateTable4");
1191                         Assert.AreEqual (HorizontalAlign.NotSet , tb.HorizontalAlign , "CreateTable5");
1192                 }
1193
1194                 [Test]
1195                 public void DetailsView_EnsureDataBound ()
1196                 {
1197                         ObjectDataSource ds = new ObjectDataSource ();
1198                         ds.ID = "ObjectDataSource1";
1199                         ds.TypeName = "System.Guid";
1200                         ds.SelectMethod = "ToByteArray";
1201                         Page p = new Page ();
1202                         PokerDetailsView dv = new PokerDetailsView ();
1203                         dv.Page = p;
1204                         ds.Page = p;
1205                         p.Controls.Add (dv);
1206                         p.Controls.Add (ds);
1207                         dv.DataSourceID = "ObjectDataSource1";
1208                         Assert.AreEqual (false, dv.ensureDataBound, "BeforeEnsureDataBound");
1209                         dv.DoConfirmInitState ();
1210                         dv.DoOnPreRender (EventArgs.Empty);
1211                         Assert.AreEqual (true, dv.ensureDataBound, "AfterEnsureDataBound");
1212                 }
1213
1214                 [Test]
1215                 public void DetailsView_EnsureChildControls ()
1216                 {
1217                         PokerDetailsView dv = new PokerDetailsView ();
1218                         int i = dv.Rows.Count;
1219                         Assert.IsTrue (dv.ensureCreateChildControls);
1220                         Assert.IsFalse (dv.ensureDataBound);
1221                         Assert.IsTrue (dv.createChildControls1);
1222                         Assert.IsFalse (dv.createChildControls2);
1223                 }
1224
1225                 [Test]
1226                 public void DetailsView_ExtractRowValues ()
1227                 {
1228                         PokerDetailsView dv = new PokerDetailsView ();
1229                         DataTable ds = TableObject.CreateDataTable ();
1230                         dv.DataSource = ds;
1231                         dv.DataBind ();
1232                         OrderedDictionary fieldsValues = new OrderedDictionary ();
1233                         dv.DoExtractRowValues (fieldsValues, true, true);
1234                         Assert.AreEqual (3, fieldsValues.Count, "ExtractRowValues1");
1235                         Assert.AreEqual (3, fieldsValues.Keys.Count, "ExtractRowValues2");
1236                         Assert.AreEqual (3, fieldsValues.Values.Count, "ExtractRowValues3");
1237                         Assert.AreEqual (true, fieldsValues.Contains ("ID"), "ExtractRowValues4");
1238                         IDictionaryEnumerator enumerator=fieldsValues.GetEnumerator ();
1239                         enumerator.MoveNext ();
1240                         Assert.AreEqual ("ID",enumerator.Key,"FieldValue1");
1241                         Assert.AreEqual ("1001", enumerator.Value , "FieldValue2");
1242                         enumerator.MoveNext ();
1243                         Assert.AreEqual ("FName", enumerator.Key, "FieldValue3");
1244                         Assert.AreEqual ("Mahesh", enumerator.Value, "FieldValue4");
1245                         enumerator.MoveNext ();
1246                         Assert.AreEqual ("LName", enumerator.Key, "FieldValue5");
1247                         Assert.AreEqual ("Chand", enumerator.Value, "FieldValue6");
1248                         fieldsValues = new OrderedDictionary ();
1249                         dv.DoExtractRowValues (fieldsValues, false, false);
1250                         Assert.AreEqual (0, fieldsValues.Count, "ExtractRowValues-NotReadOnly1");
1251                         fieldsValues = new OrderedDictionary ();
1252                         dv.DoExtractRowValues (fieldsValues, true, false);
1253                         Assert.AreEqual (3, fieldsValues.Count, "ExtractRowValues-NoPrimaryKeys1");
1254                         Assert.AreEqual (3, fieldsValues.Keys.Count, "ExtractRowValues-NoPrimaryKeys2");
1255                         fieldsValues = new OrderedDictionary ();
1256                         dv.DoExtractRowValues (fieldsValues, false, true);
1257                         Assert.AreEqual (0, fieldsValues.Count, "ExtractRowValues-NotReadOnly2");
1258                         Assert.AreEqual (0, fieldsValues.Keys.Count, "ExtractRowValues-NotReadOnly3");
1259                 }
1260
1261                 [Test]
1262                 public void DetailsView_CreateFieldSet_dont_useDataSource ()
1263                 {
1264                         DataTable ds = TableObject.CreateDataTable ();
1265                         PokerDetailsView dv1 = new PokerDetailsView ();
1266                         dv1.DataSource = ds;
1267                         dv1.DataBind ();
1268                         ICollection fieldSet1 = dv1.DoCreateFieldSet ("FieldTest", true);
1269                         Assert.AreEqual (1, fieldSet1.Count, "FiledSetCount");
1270                         AutoGeneratedField agf = (AutoGeneratedField) ((ArrayList) fieldSet1)[0];
1271                         Assert.AreEqual ("Item", agf.HeaderText, "FieldSetCount");
1272                 }
1273
1274                 [Test]
1275                 public  void DetailsView_CreateFieldSet_useDataSource ()
1276                 {
1277                         DataTable ds = TableObject.CreateDataTable ();                  
1278                         PokerDetailsView dv2 = new PokerDetailsView ();
1279                         dv2.DataSource = ds;
1280                         dv2.DataBind ();
1281                         ICollection fieldSet2 = dv2.DoCreateFieldSet ("FieldTest", false);
1282                         Assert.AreEqual (3, fieldSet2.Count, "FiledSetCount");
1283                         Assert.AreEqual ("ID", ((ArrayList) fieldSet2)[0].ToString (), "FieldValue1");
1284                         Assert.AreEqual (typeof (Int32), ((AutoGeneratedField) ((ArrayList) fieldSet2)[0]).DataType, "FieldType1");
1285                         Assert.AreEqual ("FName", ((ArrayList) fieldSet2)[1].ToString (), "FieldValue2");
1286                         Assert.AreEqual (typeof (String), ((AutoGeneratedField) ((ArrayList) fieldSet2)[1]).DataType, "FieldType2");
1287                         Assert.AreEqual ("LName", ((ArrayList) fieldSet2)[2].ToString (), "FieldValue3");
1288                         Assert.AreEqual (typeof (String), ((AutoGeneratedField) ((ArrayList) fieldSet2)[2]).DataType, "FieldType3");
1289   
1290
1291                 }
1292
1293                 [Test]
1294                 public void DetailsView_CreateAutoGeneratedRows2 ()
1295                 {
1296                         PokerDetailsView dv = new PokerDetailsView ();
1297                         ICollection col = dv.DoCreateAutoGeneratedRows (new TestObject ());
1298
1299                         Assert.AreEqual (typeof (ArrayList), col.GetType (), "CreateAutoGeneratedRowsType");
1300                         Assert.AreEqual (4, col.Count, "CreateAutoGeneratedRowsCount");
1301                         Assert.AreEqual (typeof (AutoGeneratedField), ((ArrayList) col) [0].GetType (), "AutoGeneratedRowType");
1302
1303                         Assert.IsFalse (((AutoGeneratedField) ((ArrayList) col) [0]).ReadOnly, "AutoGeneratedRowReadOnly1");
1304                         Assert.IsFalse (((AutoGeneratedField) ((ArrayList) col) [1]).ReadOnly, "AutoGeneratedRowReadOnly2");
1305                         Assert.IsFalse (((AutoGeneratedField) ((ArrayList) col) [2]).ReadOnly, "AutoGeneratedRowReadOnly2");
1306                         Assert.IsFalse (((AutoGeneratedField) ((ArrayList) col) [3]).ReadOnly, "AutoGeneratedRowReadOnly3");
1307
1308                         col = dv.DoCreateAutoGeneratedRows ("aaa");
1309                         Assert.AreEqual (1, col.Count, "CreateAutoGeneratedRowsCount - IsBindableType");
1310
1311                         col = dv.DoCreateAutoGeneratedRows (null);
1312                         Assert.AreEqual (null, col, "null");
1313                 }
1314
1315                 [Test]
1316                 [ExpectedException (typeof (HttpException))]
1317                 public void DetailsView_CreateAutoGeneratedRows_Ex ()
1318                 {
1319                         PokerDetailsView dv = new PokerDetailsView ();
1320                         ICollection col = dv.DoCreateAutoGeneratedRows (new Object());
1321                 }
1322
1323                 [Test]
1324                 [ExpectedException (typeof (HttpException))]
1325                 public void DetailsView_CreateAutoGeneratedRows_Ex2 () {
1326                         PokerDetailsView dv = new PokerDetailsView ();
1327                         ICollection col = dv.DoCreateAutoGeneratedRows (new Object ());
1328                 }
1329
1330                 [Test]
1331                 public void DetailsView_GetCallBackResult ()
1332                 {
1333
1334                         PokerDetailsView dv = new PokerDetailsView ();
1335                         Page p = new Page ();
1336                         p.EnableEventValidation = false;
1337                         p.Controls.Add (dv);
1338
1339                         DataTable ds = TableObject.CreateDataTable ();
1340                         dv.AllowPaging = true;
1341                         dv.EnablePagingCallbacks = true;
1342                         dv.DataSource = ds;
1343                         dv.DataBind ();
1344                         dv.DoRaiseCallbackEvent ("1||0|");
1345                         string cbres = dv.DoGetCallbackResult ();
1346                         Assert.IsNotNull (cbres);
1347                         if (cbres.IndexOf ("1002") == -1)
1348                                 Assert.Fail ("Wrong item rendered fail");
1349                                 
1350                 }
1351
1352                 [Test]
1353                 public void DetailsView_GetCallbackScript ()
1354                 {
1355                         //Not implemented
1356                 }
1357
1358                 [Test]
1359                 public void DetailsView_InitializePager ()
1360                 {
1361                         PokerDetailsView dv = new PokerDetailsView ();
1362                         Page page = new Page ();
1363                         dv.AllowPaging = true;
1364                         dv.DataSource = myds;
1365                         page.Controls.Add (dv);                                         
1366                         Assert.AreEqual (0, dv.PageCount, "BeforeInitializePagerPageCount");
1367                         Assert.AreEqual (false, dv.isInitializePager, "BeforeInitializePager");
1368                         dv.DataBind ();
1369                         Assert.AreEqual (true, dv.isInitializePager, "AfterInitializePager");
1370                         Assert.AreEqual (6, dv.PageCount, "AfterInitializePagerPageCount");
1371                 }
1372
1373                 [Test]
1374                 public void DetailsView_InitializeRow ()
1375                 {
1376                         //Not implemented
1377                 }
1378
1379                 [Test]
1380                 public void DetailsView_PerformDataBinding ()
1381                 {
1382                         PokerDetailsView dv = new PokerDetailsView ();
1383                         Assert.AreEqual (0, dv.DataItemCount, "BeforePerformDataBinding");
1384                         dv.DoPerformDataBinding (myds);
1385                         Assert.AreEqual (6, dv.DataItemCount, "AfterPerformDataBinding");                                       
1386                 }
1387
1388                 [Test]
1389                 public void DetailsView_PrepareControlHierarchy ()
1390                 {
1391                         PokerDetailsView dv = new PokerDetailsView ();
1392                         //dv.Render ();
1393                         //Assert.AreEqual (0, dv.Controls.Count, "ControlHierarchy1");
1394                         //Assert.AreEqual (true, dv.controlHierarchy, "ControlHierarchy2");
1395                         dv.controlHierarchy = false;
1396                         dv.AllowPaging = true;
1397                         dv.DataSource = myds;
1398                         dv.DataBind ();
1399                         dv.Page = new Page ();
1400                         dv.Render ();
1401                         Assert.AreEqual (1, dv.Controls.Count, "ControlHierarchy3");
1402                         Assert.AreEqual (true, dv.controlHierarchy, "ControlHierarchy4");
1403                         Button bt = new Button ();
1404                         dv.Page.EnableEventValidation = false;
1405                         dv.Controls.Add (bt);
1406                         dv.controlHierarchy = false;
1407
1408                         dv.Render ();
1409                         Assert.AreEqual (2, dv.Controls.Count, "ControlHierarchy3");
1410                         Assert.AreEqual (true, dv.controlHierarchy, "ControlHierarchy4");
1411                 }
1412                 
1413                 //Render Methods
1414                 [Test]
1415                 public void DetailsView_FooterTemplateRender ()
1416                 {
1417                         //Footer Template property is checked.
1418                         string renderedPageHtml = new WebTest ("FooterTemplateTest.aspx").Run ();
1419                         string newHtmlValue = HtmlDiff.GetControlFromPageHtml (renderedPageHtml);
1420                         string origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView1\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1001</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Mahesh</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Chand</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\">\n                Footer Template Test<a id=\"DetailsView1_HyperLink1\">Footer</a>\n            </td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$2&#39;)\">2</a></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$3&#39;)\">3</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1421
1422                         HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderFooterTemplate");
1423                 }
1424
1425                 [Test]
1426                 [Category ("NunitWeb")] 
1427                 public void DetailsView_RenderHeaderTemplate ()
1428                 {
1429                         //Header Template property is checked
1430                         string renderedPageHtml = new WebTest ("DetailsViewTemplates.aspx").Run ();
1431                         string newHtmlValue = HtmlDiff.GetControlFromPageHtml (renderedPageHtml);
1432                         string origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView1\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td colspan=\"2\">\n                Header Template<input type=\"submit\" name=\"DetailsView1$Button1\" value=\"Header button\" id=\"DetailsView1_Button1\" />\n            </td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>ID</td><td>1001</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Mahesh</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Chand</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Delete$0&#39;)\">Delete</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$2&#39;)\">2</a></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$3&#39;)\">3</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1433                         HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderHeaderTemplate");
1434                 }
1435
1436                 [Test]
1437                 [Category ("NunitWeb")] 
1438                 public void DetailsView_PagerTemplateRender ()
1439                 {
1440                         //Pager Template property is checked
1441                         string renderedPageHtml = new WebTest ("DetailsViewTemplates_2.aspx").Run ();
1442                         string newHtmlValue = HtmlDiff.GetControlFromPageHtml (renderedPageHtml);
1443                         string origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView2\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1001</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Mahesh</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Chand</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\">\n                <input type=\"submit\" name=\"DetailsView2$ctl01$Button2\" value=\"Prev\" id=\"DetailsView2_ctl01_Button2\" />\n                <input type=\"submit\" name=\"DetailsView2$ctl01$Button3\" value=\"Next\" id=\"DetailsView2_ctl01_Button3\" />\n            </td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1444     
1445                         HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderPagerTemplate");
1446                 }
1447
1448                 [Test]
1449                 [Category ("NunitWeb")] 
1450                 public void DetailsView_EditFieldsRender ()
1451                 {
1452                         string renderedPageHtml = new WebTest ("DetailsViewTemplates_3.aspx").Run ();
1453                         string newHtmlValue = HtmlDiff.GetControlFromPageHtml (renderedPageHtml);
1454                         string origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView3\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1001</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Mahesh</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Chand</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><a href=\"javascript:__doPostBack(&#39;DetailsView3&#39;,&#39;$0&#39;)\">TestButtonField</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>&nbsp;</td><td><a></a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Image field</td><td></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>&nbsp;</td><td></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Template Field</td><td style=\"background-color:#FFE0C0;\">&nbsp;</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView3&#39;,&#39;Page$2&#39;)\">2</a></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView3&#39;,&#39;Page$3&#39;)\">3</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1455                                         
1456                         HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderDataFields");
1457                 }
1458
1459                 [Test]
1460                 [Category ("NunitWeb")]
1461                 public void DetailsView_PagingPostback ()
1462                 {
1463                         WebTest t = new WebTest ("DetailsViewDataActions.aspx");
1464                         t.Invoker = PageInvoker.CreateOnLoad (PagingPostback_Load);
1465                         string pageHTML = t.Run ();
1466                         string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHTML);
1467                         string origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView1\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1001</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Mahesh</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Chand</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Edit$0&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Delete$0&#39;)\">Delete</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;New$0&#39;)\">New</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$2&#39;)\">2</a></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$3&#39;)\">3</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1468                         HtmlDiff.AssertAreEqual (origHtmlValue, renderedHtml, "BeforePagingDataPostback");
1469                         FormRequest fr = new FormRequest (t.Response, "form1");
1470                         fr.Controls.Add ("__EVENTTARGET");
1471                         fr.Controls.Add ("__EVENTARGUMENT");            
1472                         fr.Controls["__EVENTTARGET"].Value = "DetailsView1";
1473                         fr.Controls["__EVENTARGUMENT"].Value = "Page$2";
1474                         t.Request = fr;
1475                         pageHTML = t.Run ();
1476                         renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHTML);
1477                         origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView1\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1002</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Melanie</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Talmadge</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Edit$1&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Delete$1&#39;)\">Delete</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;New$1&#39;)\">New</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$1&#39;)\">1</a></td><td><span>2</span></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$3&#39;)\">3</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1478                         HtmlDiff.AssertAreEqual (origHtmlValue, renderedHtml, "AfterPagingDataPostback");
1479
1480                         // Checking for change index event fired.
1481                         ArrayList eventlist = t.UserData as ArrayList;
1482                         if (eventlist == null)
1483                                 Assert.Fail ("User data does not been created fail");
1484
1485                         Assert.AreEqual ("PageIndexChanging", eventlist[0], "#1");
1486                         Assert.AreEqual ("PageIndexChanged", eventlist[1], "#2");
1487                 }
1488
1489                 #region EventIndexChanged
1490                 public static void PagingPostback_Load (Page p)
1491                 {
1492                         DetailsView d = p.FindControl ("DetailsView1") as DetailsView;
1493                         if (d != null) {
1494                                 d.PageIndexChanged += new EventHandler (d_PageIndexChanged);
1495                                 d.PageIndexChanging += new DetailsViewPageEventHandler (d_PageIndexChanging);
1496                         }
1497                 }
1498
1499                 static void d_PageIndexChanging (object sender, DetailsViewPageEventArgs e)
1500                 {
1501                         if (WebTest.CurrentTest.UserData == null) {
1502                                 ArrayList list = new ArrayList ();
1503                                 list.Add ("PageIndexChanging");
1504                                 WebTest.CurrentTest.UserData = list;
1505                         }
1506                         else {
1507                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1508                                 if (list == null)
1509                                         throw new NullReferenceException ();
1510                                 list.Add ("PageIndexChanging");
1511                                 WebTest.CurrentTest.UserData = list;
1512                         }
1513                 }
1514
1515                 static void d_PageIndexChanged (object sender, EventArgs e)
1516                 {
1517                         if (WebTest.CurrentTest.UserData == null) {
1518                                 ArrayList list = new ArrayList ();
1519                                 list.Add ("PageIndexChanged");
1520                                 WebTest.CurrentTest.UserData = list;
1521                         }
1522                         else {
1523                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1524                                 if (list == null)
1525                                         throw new NullReferenceException ();
1526                                 list.Add ("PageIndexChanged");
1527                                 WebTest.CurrentTest.UserData = list;
1528                         }
1529                 }
1530                 #endregion
1531
1532                 [Test]
1533                 [Category ("NunitWeb")]
1534                 public void DetailsView_EditPostback ()
1535                 {
1536                         WebTest t = new WebTest ("DetailsViewDataActions.aspx");
1537                         t.Invoker = PageInvoker.CreateOnLoad (EditPostback_Load);
1538                         string pageHTML = t.Run ();
1539                         Assert.AreEqual (true, pageHTML.Contains ("Edit"), "BeforeEditPostback");
1540                         FormRequest fr = new FormRequest (t.Response, "form1");
1541                         fr.Controls.Add ("__EVENTTARGET");
1542                         fr.Controls.Add ("__EVENTARGUMENT");
1543                         fr.Controls["__EVENTTARGET"].Value = "DetailsView1";
1544                         fr.Controls["__EVENTARGUMENT"].Value = "Edit$0";
1545                         t.Request = fr;                 
1546                         pageHTML = t.Run ();
1547                         string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHTML);
1548                         string origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView1\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1001</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td><input name=\"DetailsView1$ctl01\" type=\"text\" value=\"Mahesh\" title=\"FName\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td><input name=\"DetailsView1$ctl02\" type=\"text\" value=\"Chand\" title=\"LName\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><a href=\"javascript:__doPostBack(&#39;DetailsView1$ctl03&#39;,&#39;&#39;)\">Update</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Cancel$0&#39;)\">Cancel</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$2&#39;)\">2</a></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$3&#39;)\">3</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1549                         HtmlDiff.AssertAreEqual (origHtmlValue, renderedHtml, "AfterEditPostback");
1550                         // Checking for change mode event fired.
1551                         ArrayList eventlist = t.UserData as ArrayList;
1552                         if (eventlist == null)
1553                                 Assert.Fail ("User data does not been created fail");
1554
1555                         Assert.AreEqual ("ModeChanging", eventlist[0], "#1");
1556                         Assert.AreEqual ("ModeChanged", eventlist[1], "#2");
1557                 }
1558
1559                 #region EditPostbackEvent
1560                 public static void EditPostback_Load (Page p)
1561                 {
1562                         DetailsView d = p.FindControl ("DetailsView1") as DetailsView;
1563                         if (d != null) {
1564                                 d.ModeChanging += new DetailsViewModeEventHandler (d_ModeChanging);
1565                                 d.ModeChanged += new EventHandler (d_ModeChanged);
1566                         }
1567                 }
1568
1569                 static void d_ModeChanged (object sender, EventArgs e)
1570                 {
1571                         if (WebTest.CurrentTest.UserData == null) {
1572                                 ArrayList list = new ArrayList ();
1573                                 list.Add ("ModeChanged");
1574                                 WebTest.CurrentTest.UserData = list;
1575                         }
1576                         else {
1577                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1578                                 if (list == null)
1579                                         throw new NullReferenceException ();
1580                                 list.Add ("ModeChanged");
1581                                 WebTest.CurrentTest.UserData = list;
1582                         }
1583                 }
1584
1585                 static void d_ModeChanging (object sender, DetailsViewModeEventArgs e)
1586                 {
1587                         if (WebTest.CurrentTest.UserData == null) {
1588                                 ArrayList list = new ArrayList ();
1589                                 list.Add ("ModeChanging");
1590                                 WebTest.CurrentTest.UserData = list;
1591                         }
1592                         else {
1593                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1594                                 if (list == null)
1595                                         throw new NullReferenceException ();
1596                                 list.Add ("ModeChanging");
1597                                 WebTest.CurrentTest.UserData = list;
1598                         }
1599                 }
1600                 #endregion
1601                 
1602                 [Test]
1603                 [Category ("NunitWeb")]
1604                 public void DetailsView_DeletePostback ()
1605                 {
1606                         WebTest t = new WebTest ("DetailsViewDataActions.aspx");
1607                         t.Invoker = PageInvoker.CreateOnLoad (DeletePostback_Load);
1608                         string pageHTML = t.Run ();
1609                         Assert.AreEqual (true, pageHTML.Contains ("1001"), "BeforeDeletePostback");
1610                         FormRequest fr = new FormRequest (t.Response, "form1");
1611                         fr.Controls.Add ("__EVENTTARGET");
1612                         fr.Controls.Add ("__EVENTARGUMENT");
1613                         fr.Controls["__EVENTTARGET"].Value = "DetailsView1";
1614                         fr.Controls["__EVENTARGUMENT"].Value = "Delete$0";
1615                         t.Request = fr;
1616                         pageHTML = t.Run ();
1617                         //Console.WriteLine ("XXXXFAIL {0}", pageHTML);
1618                         string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHTML);
1619                         string origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView1\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1002</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Melanie</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Talmadge</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Edit$0&#39;)\">Edit</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Delete$0&#39;)\">Delete</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;New$0&#39;)\">New</a></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Page$2&#39;)\">2</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1620
1621                         HtmlDiff.AssertAreEqual (origHtmlValue, renderedHtml, "DeleteDataPostback");
1622                         Assert.AreEqual (false, renderedHtml.Contains ("1001"), "AfterDeletePostback");
1623
1624                         // Checking for delete event fired.
1625                         ArrayList eventlist = t.UserData as ArrayList;
1626                         if (eventlist == null)
1627                                 Assert.Fail ("User data does not been created fail");
1628
1629                         Assert.AreEqual ("ItemDeleting", eventlist[0], "#1");
1630                         Assert.AreEqual ("ItemDeleted", eventlist[1], "#2");
1631                 }
1632
1633                 #region DeletePostbackEvent
1634                 public static void DeletePostback_Load (Page p)
1635                 {
1636                         DetailsView d = p.FindControl ("DetailsView1") as DetailsView;
1637                         if (d != null) {
1638                                 d.ItemDeleting += new DetailsViewDeleteEventHandler (d_ItemDeleting);
1639                                 d.ItemDeleted += new DetailsViewDeletedEventHandler (d_ItemDeleted);
1640                         }
1641                 }
1642
1643                 static void d_ItemDeleted (object sender, DetailsViewDeletedEventArgs e)
1644                 {
1645                         if (WebTest.CurrentTest.UserData == null) {
1646                                 ArrayList list = new ArrayList ();
1647                                 list.Add ("ItemDeleted");
1648                                 WebTest.CurrentTest.UserData = list;
1649                         }
1650                         else {
1651                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1652                                 if (list == null)
1653                                         throw new NullReferenceException ();
1654                                 list.Add ("ItemDeleted");
1655                                 WebTest.CurrentTest.UserData = list;
1656                         }
1657                 }
1658
1659                 static void d_ItemDeleting (object sender, DetailsViewDeleteEventArgs e)
1660                 {
1661                         if (WebTest.CurrentTest.UserData == null) {
1662                                 ArrayList list = new ArrayList ();
1663                                 list.Add ("ItemDeleting");
1664                                 WebTest.CurrentTest.UserData = list;
1665                         }
1666                         else {
1667                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1668                                 if (list == null)
1669                                         throw new NullReferenceException ();
1670                                 list.Add ("ItemDeleting");
1671                                 WebTest.CurrentTest.UserData = list;
1672                         }
1673                 }
1674                 #endregion
1675
1676                 [Test]
1677                 [Category ("NunitWeb")]
1678                 public void DetailsView_InsertPostback ()
1679                 {
1680                         WebTest t = new WebTest ("DetailsViewDataActions.aspx");
1681                         t.Invoker = PageInvoker.CreateOnLoad (InsertPostback_Load);
1682                         string pageHTML = t.Run ();
1683                         FormRequest fr = new FormRequest (t.Response, "form1");
1684                         fr.Controls.Add ("__EVENTTARGET");
1685                         fr.Controls.Add ("__EVENTARGUMENT");
1686                         fr.Controls["__EVENTTARGET"].Value = "DetailsView1";
1687                         fr.Controls["__EVENTARGUMENT"].Value = "New$0";
1688                         t.Request = fr;                 
1689                         pageHTML = t.Run ();
1690                         string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHTML);
1691                         string origHtmlValue = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"DetailsView1\" style=\"height:50px;width:125px;border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td><input name=\"DetailsView1$ctl01\" type=\"text\" title=\"ID\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td><input name=\"DetailsView1$ctl02\" type=\"text\" title=\"FName\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td><input name=\"DetailsView1$ctl03\" type=\"text\" title=\"LName\" /></td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><a href=\"javascript:__doPostBack(&#39;DetailsView1$ctl04&#39;,&#39;&#39;)\">Insert</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;DetailsView1&#39;,&#39;Cancel$-1&#39;)\">Cancel</a></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
1692
1693                         HtmlDiff.AssertAreEqual (origHtmlValue, renderedHtml, "InsertDataPostback");
1694                         
1695                         fr = new FormRequest (t.Response, "form1");
1696
1697                         fr.Controls.Add ("__EVENTTARGET");
1698                         fr.Controls.Add ("__EVENTARGUMENT");
1699                         fr.Controls.Add ("DetailsView1$ctl01");
1700                         fr.Controls.Add ("DetailsView1$ctl02");
1701                         fr.Controls.Add ("DetailsView1$ctl03");
1702
1703                         fr.Controls["__EVENTTARGET"].Value = "DetailsView1$ctl04";
1704                         fr.Controls["__EVENTARGUMENT"].Value = "";
1705                         fr.Controls["DetailsView1$ctl01"].Value = "123";
1706                         fr.Controls["DetailsView1$ctl02"].Value = "123";
1707                         fr.Controls["DetailsView1$ctl03"].Value = "123";
1708
1709                         t.Request = fr;
1710                         pageHTML = t.Run ();
1711
1712                         // Checking for insert event fired.
1713                         ArrayList eventlist = t.UserData as ArrayList;
1714                         if (eventlist == null)
1715                                 Assert.Fail ("User data does not been created fail");
1716
1717                         Assert.AreEqual ("ItemCommand", eventlist[0], "#1");
1718                         Assert.AreEqual ("ItemCommand", eventlist[1], "#2");
1719                         Assert.AreEqual ("ItemInserting", eventlist[2], "#3");
1720                         Assert.AreEqual ("ItemInserted", eventlist[3], "#4");
1721                 }
1722
1723                 #region InsertEvent
1724                 public static void InsertPostback_Load (Page p)
1725                 {
1726                         DetailsView d = p.FindControl ("DetailsView1") as DetailsView;
1727                         if (d != null) {
1728                                 d.ItemCommand += new DetailsViewCommandEventHandler (d_ItemCommand);
1729                                 d.ItemInserted += new DetailsViewInsertedEventHandler (d_ItemInserted);
1730                                 d.ItemInserting += new DetailsViewInsertEventHandler (d_ItemInserting);
1731                         }
1732                 }
1733
1734                 static void d_ItemCommand (object sender, DetailsViewCommandEventArgs e)
1735                 {
1736                         if (WebTest.CurrentTest.UserData == null) {
1737                                 ArrayList list = new ArrayList ();
1738                                 list.Add ("ItemCommand");
1739                                 WebTest.CurrentTest.UserData = list;
1740                         }
1741                         else {
1742                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1743                                 if (list == null)
1744                                         throw new NullReferenceException ();
1745                                 list.Add ("ItemCommand");
1746                                 WebTest.CurrentTest.UserData = list;
1747                         }
1748                 }
1749
1750                 static void d_ItemInserting (object sender, DetailsViewInsertEventArgs e)
1751                 {
1752                         if (WebTest.CurrentTest.UserData == null) {
1753                                 ArrayList list = new ArrayList ();
1754                                 list.Add ("ItemInserting");
1755                                 WebTest.CurrentTest.UserData = list;
1756                         }
1757                         else {
1758                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1759                                 if (list == null)
1760                                         throw new NullReferenceException ();
1761                                 list.Add ("ItemInserting");
1762                                 WebTest.CurrentTest.UserData = list;
1763                         }
1764                 }
1765
1766                 static void d_ItemInserted (object sender, DetailsViewInsertedEventArgs e)
1767                 {
1768                         if (WebTest.CurrentTest.UserData == null) {
1769                                 ArrayList list = new ArrayList ();
1770                                 list.Add ("ItemInserted");
1771                                 WebTest.CurrentTest.UserData = list;
1772                         }
1773                         else {
1774                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1775                                 if (list == null)
1776                                         throw new NullReferenceException ();
1777                                 list.Add ("ItemInserted");
1778                                 WebTest.CurrentTest.UserData = list;
1779                         }
1780                 }
1781                 #endregion
1782
1783                 [Test]
1784                 [Category ("NunitWeb")]
1785                 public void DetailsView_ItemCreatedPostback ()
1786                 {
1787                         WebTest t = new WebTest ("DetailsViewDataActions.aspx");
1788                         t.Invoker = PageInvoker.CreateOnLoad (ItemCreatedPostback_Load);
1789                         string pageHTML = t.Run ();
1790                         pageHTML = t.Run ();
1791                         
1792                         // Checking for itemcreated event fired.
1793                         ArrayList eventlist = t.UserData as ArrayList;
1794                         if (eventlist == null)
1795                                 Assert.Fail ("User data does not been created fail");
1796
1797                         Assert.AreEqual ("ItemCreated", eventlist[0], "#1");
1798                         Assert.AreEqual ("ItemCreated", eventlist[1], "#2");
1799                 }
1800
1801                 #region ItemCreatedEvent
1802                 public static void ItemCreatedPostback_Load (Page p)
1803                 {
1804                         DetailsView d = p.FindControl ("DetailsView1") as DetailsView;
1805                         if (d != null) {
1806                                 d.ItemCreated += new EventHandler (d_ItemCreated);
1807                         }
1808                 }
1809
1810                 static void d_ItemCreated (object sender, EventArgs e)
1811                 {
1812                         if (WebTest.CurrentTest.UserData == null) {
1813                                 ArrayList list = new ArrayList ();
1814                                 list.Add ("ItemCreated");
1815                                 WebTest.CurrentTest.UserData = list;
1816                         }
1817                         else {
1818                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1819                                 if (list == null)
1820                                         throw new NullReferenceException ();
1821                                 list.Add ("ItemCreated");
1822                                 WebTest.CurrentTest.UserData = list;
1823                         }
1824                 }
1825                 #endregion
1826
1827                 [Test]
1828                 [Category ("NunitWeb")]
1829                 [Category ("NotDotNet")] // Implementation details in mono
1830                 public void DetailsView_UpdatePostback ()
1831                 {
1832                         WebTest t = new WebTest ("DetailsViewDataActions.aspx");
1833                         t.Invoker = PageInvoker.CreateOnLoad (UpdatePostback_Load);
1834                         string pageHTML = t.Run ();
1835                         FormRequest fr = new FormRequest (t.Response, "form1");
1836                         fr.Controls.Add ("__EVENTTARGET");
1837                         fr.Controls.Add ("__EVENTARGUMENT");
1838                         fr.Controls["__EVENTTARGET"].Value = "DetailsView1";
1839                         fr.Controls["__EVENTARGUMENT"].Value = "Edit$0";
1840                         t.Request = fr;
1841                         pageHTML = t.Run ();
1842                         
1843                         fr = new FormRequest (t.Response, "form1");
1844
1845                         fr.Controls.Add ("__EVENTTARGET");
1846                         fr.Controls.Add ("__EVENTARGUMENT");
1847                         fr.Controls.Add ("DetailsView1$ctl01");
1848                         fr.Controls.Add ("DetailsView1$ctl02");
1849
1850                         fr.Controls["__EVENTTARGET"].Value = "DetailsView1$ctl03";
1851                         fr.Controls["__EVENTARGUMENT"].Value = "";
1852                         fr.Controls["DetailsView1$ctl01"].Value = "1";
1853                         fr.Controls["DetailsView1$ctl02"].Value = "2";
1854
1855                         t.Request = fr;
1856                         t.Run ();
1857
1858                         // Checking for insert event fired.
1859                         ArrayList eventlist = t.UserData as ArrayList;
1860                         if (eventlist == null)
1861                                 Assert.Fail ("User data does not been created fail");
1862
1863                         Assert.AreEqual ("ItemCommand", eventlist[0], "#1");
1864                         Assert.AreEqual ("ItemCommand", eventlist[1], "#2");
1865                         Assert.AreEqual ("ItemUpdating", eventlist[2], "#3");
1866                         Assert.AreEqual ("ItemUpdated", eventlist[3], "#4");
1867                 }
1868
1869                 #region UpdatePostbackEvent
1870                 public static void UpdatePostback_Load (Page p)
1871                 {
1872                         DetailsView d = p.FindControl ("DetailsView1") as DetailsView;
1873                         if (d != null) {
1874                                 d.AutoGenerateDeleteButton = true;
1875                                 d.AutoGenerateEditButton = true;
1876                                 d.AutoGenerateInsertButton = true;
1877                                 d.ItemCommand += new DetailsViewCommandEventHandler (d_ItemCommand);
1878                                 d.ItemUpdated += new DetailsViewUpdatedEventHandler (d_ItemUpdated);
1879                                 d.ItemUpdating += new DetailsViewUpdateEventHandler (d_ItemUpdating);
1880                         }
1881                 }
1882
1883                 static void d_ItemUpdating (object sender, DetailsViewUpdateEventArgs e)
1884                 {
1885                         if (WebTest.CurrentTest.UserData == null) {
1886                                 ArrayList list = new ArrayList ();
1887                                 list.Add ("ItemUpdating");
1888                                 WebTest.CurrentTest.UserData = list;
1889                         }
1890                         else {
1891                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1892                                 if (list == null)
1893                                         throw new NullReferenceException ();
1894                                 list.Add ("ItemUpdating");
1895                                 WebTest.CurrentTest.UserData = list;
1896                         }
1897                 }
1898
1899                 static void d_ItemUpdated (object sender, DetailsViewUpdatedEventArgs e)
1900                 {
1901                         if (WebTest.CurrentTest.UserData == null) {
1902                                 ArrayList list = new ArrayList ();
1903                                 list.Add ("ItemUpdated");
1904                                 WebTest.CurrentTest.UserData = list;
1905                         }
1906                         else {
1907                                 ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
1908                                 if (list == null)
1909                                         throw new NullReferenceException ();
1910                                 list.Add ("ItemUpdated");
1911                                 WebTest.CurrentTest.UserData = list;
1912                         }
1913                 }
1914                 #endregion
1915
1916                 [Test]
1917                 public void DetailsView_ViewState ()
1918                 {
1919                         PokerDetailsView dv = new PokerDetailsView ();
1920                         PokerDetailsView copy = new PokerDetailsView ();
1921                         dv.HeaderText = "Header";
1922                         dv.GridLines = GridLines.Vertical;
1923                         dv.CssClass = "style.css";
1924                         object state = dv.SaveState ();
1925                         copy.LoadState (state);
1926                         Assert.AreEqual ("Header", copy.HeaderText, "ViewStateHeaderText");
1927                         Assert.AreEqual (GridLines.Vertical, copy.GridLines, "ViewStateGridLines");
1928                         Assert.AreEqual ("style.css", copy.CssClass, "ViewStateCssClass");
1929                 }
1930
1931
1932                 [Test]
1933                 public void DetailsView_ControlState ()
1934                 {
1935                         PokerDetailsView dv = new PokerDetailsView ();
1936                         PokerDetailsView copy = new PokerDetailsView ();
1937                         string[] keys = new String[2];
1938                         keys[0] = "key1";
1939                         keys[1] = "key2";
1940                         dv.DataKeyNames = keys;
1941                         dv.BackImageUrl = "photo.jpg";
1942                         dv.DefaultMode = DetailsViewMode.Insert;
1943                         object state = dv.DoSaveControlState ();
1944                         copy.DoLoadControlState (state);
1945                         Assert.AreEqual ("key1", copy.DataKeyNames[0], "ControlStateDataKeyValue");
1946                         Assert.AreEqual ("key2", copy.DataKeyNames[1], "ControlStateDataKeyValue2");
1947                         Assert.AreEqual (DetailsViewMode.Insert, copy.DefaultMode, "ControlStateDefaultMode");
1948
1949                 }
1950
1951                 //events
1952                 private bool init;
1953                 private bool itemCommand;
1954                 private bool itemCreated;
1955                 private bool itemDeleted;
1956                 private bool itemDeleting;
1957                 private bool itemInserted;
1958                 private bool itemInserting;
1959                 private bool itemUpdated;
1960                 private bool itemUpdating;
1961                 private bool modeChanged;
1962                 private bool modeChanging;
1963                 private bool pageIndexChanged;
1964                 private bool pageIndexChanging;
1965                 private bool pagePreLoad;
1966                 private bool dataSourceViewChanged;
1967                 private bool preRender;
1968                 private bool unload;
1969                 private int newPageIndex;
1970
1971                 public void ResetEvents ()
1972                 {
1973                         init = false;
1974                         itemCommand = false;
1975                         itemCreated = false;
1976                         itemDeleted = false;
1977                         itemDeleting = false;
1978                         itemInserted = false;
1979                         itemInserting = false;
1980                         itemUpdated = false;
1981                         itemUpdating = false;
1982                         modeChanged = false;
1983                         modeChanging = false;
1984                         pageIndexChanged = false;
1985                         pageIndexChanging = false;
1986                         pagePreLoad = false;
1987                         dataSourceViewChanged = false;
1988                         preRender = false;
1989                         unload = false;         
1990                 }
1991
1992                 [Test]
1993                 public void DetailsView_BubbleEvents ()
1994                 {
1995                         ResetEvents ();
1996                         DetailsViewCommandEventArgs com;
1997                         PokerDetailsView dv = new PokerDetailsView ();
1998                         dv.DataSource = TableObject.CreateDataTable ();
1999                         Page page = new Page ();
2000                         Button bt = new Button ();
2001                         dv.AllowPaging = true;
2002                         dv.DataSource = myds;
2003                         page.Controls.Add (dv);         
2004                         dv.DataBind ();
2005                         dv.ItemCommand += new DetailsViewCommandEventHandler (dv_ItemCommand );
2006                         dv.ItemDeleted += new DetailsViewDeletedEventHandler (dv_ItemDeleted );
2007                         //Delete
2008                         dv.ItemDeleting += new DetailsViewDeleteEventHandler (dv_ItemDeleting );
2009                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Delete", null));
2010                         Assert.AreEqual (false, itemCommand, "BeforeDeleteCommandBubbleEvent");
2011                         Assert.AreEqual (false, itemDeleting, "BeforeDeleteBubbleEvent");                       
2012                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Delete");
2013                         Assert.AreEqual (true, itemDeleting, "AfterDeleteBubbleEvent");                 
2014                         Assert.AreEqual (true, itemCommand, "AfterDeleteCommandBubbleEvent");
2015
2016                         //Insert
2017                         itemCommand = false;
2018                         dv.ItemInserting += new DetailsViewInsertEventHandler (dv_ItemInserting);
2019                         dv.ChangeMode (DetailsViewMode.Insert);
2020                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Insert", null));
2021                         Assert.AreEqual (false, itemCommand, "BeforeInsertCommandBubbleEvent");
2022                         Assert.AreEqual (false, itemInserting, "BeforeInsertBubbleEvent");
2023                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Insert");
2024                         Assert.AreEqual (true, itemCommand, "AfterInsertCommandBubbleEvent");
2025                         Assert.AreEqual (true, itemInserting, "AfterInsertBubbleEvent");
2026
2027                         //Update
2028                         itemCommand = false;
2029                         dv.ItemUpdating += new DetailsViewUpdateEventHandler (dv_ItemUpdating);
2030                         dv.ChangeMode (DetailsViewMode.Edit);
2031                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Update", null));
2032                         Assert.AreEqual (false, itemUpdating, "BeforeUpdateEvent");
2033                         Assert.AreEqual (false, itemCommand, "BeforeUpdateCommandEvent");
2034                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Update");
2035                         Assert.AreEqual (true, itemCommand, "AfterUpdateCommandBubbleEvent");
2036                         Assert.AreEqual (true, itemUpdating, "AfterUpdateBubbleEvent");
2037
2038                         //Cancel 
2039                         itemCommand = false;
2040                         dv.ModeChanging += new DetailsViewModeEventHandler (dv_ModeChanging);
2041                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Cancel", null));
2042                         Assert.AreEqual (false, itemCommand, "BeforeCancelCommandBubbleEvent");
2043                         Assert.AreEqual (false, modeChanging, "BeforeCancelBubbleEvent");
2044                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Cancel");
2045                         Assert.AreEqual (true, itemCommand, "AfterCancelCommandBubbleEvent");
2046                         Assert.AreEqual (true, modeChanging, "AfterCancelBubbleEvent");
2047
2048                         //Edit
2049                         itemCommand = false;
2050                         modeChanging = false;
2051                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Edit", null));
2052                         Assert.AreEqual (false, itemCommand, "BeforeEditCommandBubbleEvent");
2053                         Assert.AreEqual (false, modeChanging, "BeforeEditBubbleEvent");
2054                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Edit");
2055                         Assert.AreEqual (true, itemCommand, "AfterEditCommandBubbleEvent");
2056                         Assert.AreEqual (true, modeChanging, "AfterEditBubbleEvent");
2057
2058                         //New
2059                         itemCommand = false;
2060                         modeChanging = false;
2061                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("New", null));
2062                         Assert.AreEqual (false, itemCommand, "BeforeNewCommandBubbleEvent");
2063                         Assert.AreEqual (false, modeChanging, "BeforeNewBubbleEvent");
2064                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - New");
2065                         Assert.AreEqual (true, itemCommand, "AfterNewCommandBubbleEvent");
2066                         Assert.AreEqual (true, modeChanging, "AfterNewBubbleEvent");
2067
2068                         //Page Index default
2069                         itemCommand = false;
2070                         dv.PageIndexChanging += new DetailsViewPageEventHandler (dv_PageIndexChanging );
2071                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Page", null));
2072                         Assert.AreEqual (false, itemCommand, "BeforePageCommandBubbleEvent");
2073                         Assert.AreEqual (false, pageIndexChanging, "BeforePageBubbleEvent");
2074                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Page Index default");
2075                         Assert.AreEqual (true, itemCommand, "AfterPageCommandBubbleEvent");
2076                         Assert.AreEqual (true, pageIndexChanging, "AfterPageBubbleEvent");
2077                         Assert.AreEqual (-1, newPageIndex, "PageIndex");
2078
2079                         //Next Page
2080                         itemCommand = false;
2081                         pageIndexChanging = false;
2082                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Next"));
2083                         Assert.AreEqual (false, itemCommand, "BeforeNextPageCommandBubbleEvent");
2084                         Assert.AreEqual (false, pageIndexChanging, "BeforeNextPageBubbleEvent");
2085                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Next Page");
2086                         Assert.AreEqual (true, itemCommand, "AfterNextPageCommandBubbleEvent");
2087                         Assert.AreEqual (true, pageIndexChanging, "AfterNextPageBubbleEvent");
2088                         Assert.AreEqual (1, newPageIndex, "NextPageIndex");
2089
2090                         //Prev Page
2091                         itemCommand = false;
2092                         pageIndexChanging = false;
2093                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Prev"));
2094                         Assert.AreEqual (false, itemCommand, "BeforePrevPageCommandBubbleEvent");
2095                         Assert.AreEqual (false, pageIndexChanging, "BeforePrevPageBubbleEvent");
2096                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Prev Page");
2097                         Assert.AreEqual (true, itemCommand, "AfterPrevPageCommandBubbleEvent");
2098                         Assert.AreEqual (true, pageIndexChanging, "AfterPrevPageBubbleEvent");
2099                         Assert.AreEqual (-1, newPageIndex, "PrevPageIndex");
2100
2101                         //First Page
2102                         itemCommand = false;
2103                         pageIndexChanging = false;
2104                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Page", "First"));
2105                         Assert.AreEqual (false, itemCommand, "BeforeFirstPageCommandBubbleEvent");
2106                         Assert.AreEqual (false, pageIndexChanging, "BeforeFirstPageBubbleEvent");
2107                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - First Page");
2108                         Assert.AreEqual (true, itemCommand, "AfterFirstPageCommandBubbleEvent");
2109                         Assert.AreEqual (true, pageIndexChanging, "AfterFirstPageBubbleEvent");
2110                         Assert.AreEqual (0, newPageIndex, "FirstPageIndex");
2111
2112                         //Last Page
2113                         itemCommand = false;
2114                         pageIndexChanging = false;
2115                         com = new DetailsViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Last"));
2116                         Assert.AreEqual (false, itemCommand, "BeforeLastPageCommandBubbleEvent");
2117                         Assert.AreEqual (false, pageIndexChanging, "BeforeLastPageBubbleEvent");
2118                         Assert.IsTrue (dv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Last Page");
2119                         Assert.AreEqual (true, itemCommand, "AfterLastPageCommandBubbleEvent");
2120                         Assert.AreEqual (true, pageIndexChanging, "AfterLastPageBubbleEvent");
2121                         Assert.AreEqual (5, newPageIndex, "FirstPageIndex");
2122
2123                 }
2124
2125                 [Test]
2126                 [Category ("NunitWeb")]
2127                 public void DetailsView_DataSourceChangedEvent ()
2128                 {
2129                         WebTest t = new WebTest ();
2130                         PageDelegates pd = new PageDelegates ();
2131                         pd.Load = DetailsView_Init;
2132                         pd.PreRenderComplete = DetailsView_Load;
2133                         t.Invoker = new PageInvoker (pd);
2134                         t.Run ();
2135                         FormRequest fr = new FormRequest (t.Response, "form1");
2136                         fr.Controls.Add ("__EVENTTARGET");
2137                         fr.Controls.Add ("__EVENTARGUMENT");
2138                         fr.Controls["__EVENTTARGET"].Value = "";
2139                         fr.Controls["__EVENTARGUMENT"].Value = "";
2140                         t.Request = fr;
2141                         t.Run ();
2142                         if (t.UserData == null)
2143                                 Assert.Fail ("DataSourceChangedEvent#1");
2144                         Assert.AreEqual ("Data_rebounded", t.UserData.ToString (), "DataSourceChangedEvent#2");
2145                 }
2146
2147                 #region DetailsView_DataSourceChangedEvent
2148                 public static void DetailsView_Init (Page p)
2149                 {
2150                         PokerDetailsView dv = new PokerDetailsView ();
2151                         DS data = new DS ();
2152                         p.Controls.Add (dv);
2153                         p.Controls.Add (data);
2154                         data.TypeName = typeof (DS).AssemblyQualifiedName;
2155                         data.SelectMethod = "GetList";
2156                         data.ID = "Data";
2157                         dv.DataBinding += new EventHandler (data_DataBinding);
2158                         dv.DataSourceID = "Data";
2159                 }
2160
2161                 public static void DetailsView_Load (Page p)
2162                 {
2163                         if (p.IsPostBack) {
2164                                 DS data = (DS) p.FindControl ("Data");
2165                                 if (data == null)
2166                                         Assert.Fail ("Data soource control not created#1");
2167                                 data.DoRaiseDataSourceChangedEvent (new EventArgs ());
2168                         }
2169                 }
2170
2171                 public static void data_DataBinding (object sender, EventArgs e)
2172                 {
2173                         if (((WebControl) sender).Page.IsPostBack)
2174                                 WebTest.CurrentTest.UserData = "Data_rebounded";
2175                 }
2176                 #endregion
2177
2178                 [Test]
2179                 public void DetailsView_Events ()
2180                 {
2181                         ResetEvents ();
2182                         PokerDetailsView dv = new PokerDetailsView ();
2183                         Button bt = new Button ();
2184                         Page pg = new Page ();
2185                         dv.Page = pg;
2186                         dv.Init += new EventHandler (dv_Init);
2187                         dv.ItemCommand += new DetailsViewCommandEventHandler (dv_ItemCommand);
2188                         dv.ItemCreated += new EventHandler (dv_ItemCreated);
2189                         dv.ItemDeleted += new DetailsViewDeletedEventHandler (dv_ItemDeleted);
2190                         dv.ItemDeleting += new DetailsViewDeleteEventHandler (dv_ItemDeleting);
2191                         dv.ItemInserted += new DetailsViewInsertedEventHandler (dv_ItemInserted);
2192                         dv.ItemInserting += new DetailsViewInsertEventHandler (dv_ItemInserting);
2193                         dv.ItemUpdated += new DetailsViewUpdatedEventHandler (dv_ItemUpdated);
2194                         dv.ItemUpdating += new DetailsViewUpdateEventHandler (dv_ItemUpdating);
2195                         dv.ModeChanged += new EventHandler (dv_ModeChanged);
2196                         dv.ModeChanging += new DetailsViewModeEventHandler (dv_ModeChanging);
2197                         dv.PageIndexChanged += new EventHandler (dv_PageIndexChanged);
2198                         dv.PageIndexChanging += new DetailsViewPageEventHandler (dv_PageIndexChanging);
2199                         dv.DataBound += new EventHandler (dv_DataBound);
2200                         dv.PreRender += new EventHandler (dv_PreRender);
2201                         dv.Unload += new EventHandler (dv_Unload);                      
2202                         Assert.AreEqual (false, init, "BeforeInit");
2203                         dv.DoOnInit (new EventArgs ());
2204                         Assert.AreEqual (true, init, "AfterInit");
2205                         Assert.AreEqual (false, itemCommand, "BeforeItemCommand");
2206                         dv.DoOnItemCommand (new DetailsViewCommandEventArgs (bt,new CommandEventArgs ("",null)));
2207                         Assert.AreEqual (true, itemCommand , "AfterItemCommand");
2208                         Assert.AreEqual (false, itemCreated, "BeforeItemCreated");
2209                         dv.DoOnItemCreated (new EventArgs ());
2210                         Assert.AreEqual (true, itemCreated, "AfterItemCreated");
2211                         Assert.AreEqual (false, itemDeleted, "BeforeItemDeleted");
2212                         dv.DoOnItemDeleted (new DetailsViewDeletedEventArgs (3, new Exception ()));
2213                         Assert.AreEqual (true, itemDeleted, "AfterItemDeleted");
2214                         Assert.AreEqual (false, itemDeleting, "BeforeItemDeleting");
2215                         dv.DoOnItemDeleting(new DetailsViewDeleteEventArgs (2)); 
2216                         Assert.AreEqual (true, itemDeleting, "AfterItemDeleting");
2217                         Assert.AreEqual (false, itemInserted, "BeforeItemInserted");
2218                         dv.DoOnItemInserted (new DetailsViewInsertedEventArgs (3,new Exception()));
2219                         Assert.AreEqual (true, itemInserted, "AfterItemInserted");
2220                         Assert.AreEqual (false, itemInserting, "BeforeItemInserting");
2221                         dv.DoOnItemInserting (new DetailsViewInsertEventArgs (bt));
2222                         Assert.AreEqual (true, itemInserting, "AfterItemInserting");
2223                         Assert.AreEqual (false, itemUpdated, "BeforeItemUpdated");
2224                         dv.DoOnItemUpdated (new DetailsViewUpdatedEventArgs (2,new Exception()));
2225                         Assert.AreEqual (true, itemUpdated, "AfterItemUpdated");
2226                         Assert.AreEqual (false, itemUpdating, "BeforeItemUpdating");
2227                         dv.DoOnItemUpdating (new DetailsViewUpdateEventArgs (bt));
2228                         Assert.AreEqual (true, itemUpdating, "AfterItemUpdating");
2229                         Assert.AreEqual (false, modeChanged, "BeforeModeChanged");
2230                         dv.DoOnModeChanged (new EventArgs ());
2231                         Assert.AreEqual (true, modeChanged, "AfterModeChanged");
2232                         Assert.AreEqual (false, modeChanging, "BeforeModeChanging");
2233                         dv.DoOnModeChanging (new DetailsViewModeEventArgs (DetailsViewMode.Insert ,false));
2234                         Assert.AreEqual (true, modeChanging, "AfterModeChanging");
2235                         Assert.AreEqual (false, pageIndexChanged, "BeforePageIndexChanged");
2236                         dv.DoOnPageIndexChanged (new EventArgs ());
2237                         Assert.AreEqual (true, pageIndexChanged, "AfterPageIndexChanged");
2238                         Assert.AreEqual (false, pageIndexChanging, "BeforePageIndexChanging");
2239                         dv.DoOnPageIndexChanging (new DetailsViewPageEventArgs (2));
2240                         Assert.AreEqual (true, pageIndexChanging, "AfterPageIndexChanging");
2241                         //Assert.AreEqual (false, pagePreLoad, "BeforePagePreLoad");
2242                         //dv.DoOnPagePreLoad (pg, new EventArgs ());
2243                         //Assert.AreEqual (true, pagePreLoad, "AfterPagePreLoad");
2244                         Assert.AreEqual (false, preRender, "BeforePreRender");                  
2245                         dv.DoOnPreRender(new EventArgs ());
2246                         Assert.AreEqual (true, preRender, "AfterPreRender");
2247                         Assert.AreEqual (false, unload, "BeforeUnload");
2248                         dv.DoOnUnload (new EventArgs ());
2249                         Assert.AreEqual (true, unload, "AfterUnload");
2250                         //Assert.AreEqual (false, dataSourceViewChanged, "BeforeDataSourceViewChanged");
2251                         //dv.DoOnDataSourceViewChanged (bt, new EventArgs ());
2252                         //Assert.AreEqual (true, dataSourceViewChanged, "AfterDataSourceViewChanged");
2253
2254
2255
2256                         
2257                 }
2258
2259                 void dv_DataBound(object sender, EventArgs e)
2260                 {
2261                         dataSourceViewChanged = true;
2262                 }
2263
2264                 
2265                 void dv_Unload (object sender, EventArgs e)
2266                 {
2267                         unload = true;
2268                 }
2269
2270                 void dv_PreRender (object sender, EventArgs e)
2271                 {
2272                         preRender = true;                       
2273                 }
2274
2275                 void dv_PageIndexChanging (object sender, DetailsViewPageEventArgs e)
2276                 {
2277                         pageIndexChanging = true;
2278                         newPageIndex = e.NewPageIndex;
2279                         e.NewPageIndex = -1;
2280                 }
2281
2282                 void dv_PageIndexChanged (object sender, EventArgs e)
2283                 {
2284                         pageIndexChanged = true;
2285                 }
2286
2287                 void dv_ModeChanging (object sender, DetailsViewModeEventArgs e)
2288                 {
2289                         modeChanging = true;
2290                 }
2291
2292                 void dv_ModeChanged (object sender, EventArgs e)
2293                 {
2294                         modeChanged = true;
2295
2296                 }
2297
2298                 
2299
2300                 void dv_ItemUpdating (object sender, DetailsViewUpdateEventArgs e)
2301                 {
2302                         itemUpdating = true;
2303                 }
2304
2305                 void dv_ItemUpdated (object sender, DetailsViewUpdatedEventArgs e)
2306                 {
2307                         itemUpdated = true;
2308                 }
2309
2310                 void dv_ItemInserting (object sender, DetailsViewInsertEventArgs e)
2311                 {
2312                         itemInserting = true;
2313                 }
2314
2315                 void dv_ItemInserted (object sender, DetailsViewInsertedEventArgs e)
2316                 {
2317                         itemInserted = true;
2318                 }
2319
2320                 void dv_ItemDeleting (object sender, DetailsViewDeleteEventArgs e)
2321                 {
2322                         itemDeleting = true;
2323                 }
2324
2325                 void dv_ItemDeleted (object sender, DetailsViewDeletedEventArgs e)
2326                 {
2327                         itemDeleted = true;
2328                 }
2329
2330                 void dv_ItemCreated (object sender, EventArgs e)
2331                 {
2332                         itemCreated = true;
2333                 }
2334
2335                 void dv_ItemCommand (object sender, DetailsViewCommandEventArgs e)
2336                 {
2337                         itemCommand = true;
2338                 }
2339
2340                 void dv_Init (object sender, EventArgs e)
2341                 {
2342                         init = true;
2343                 }
2344
2345                 //Exceptions
2346
2347                 [Test]
2348                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2349                 public void CellPaddingException ()
2350                 {
2351                         PokerDetailsView dv = new PokerDetailsView ();
2352                         dv.CellPadding = -2;
2353                 }
2354
2355                 [Test]
2356                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2357                 public void CellSpacingException ()
2358                 {
2359                         PokerDetailsView dv = new PokerDetailsView ();
2360                         dv.CellSpacing = -5;
2361                 }
2362
2363                 [Test]
2364                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2365                 public void PageIndexException ()
2366                 {
2367                         PokerDetailsView dv = new PokerDetailsView ();
2368                         dv.PageIndex = -5;
2369                 }
2370
2371                 [Test]
2372                 [ExpectedException (typeof (HttpException))]
2373                 public void InsertItemException ()
2374                 {
2375                         PokerDetailsView dv = new PokerDetailsView ();
2376                         dv.InsertItem (true);
2377                 }
2378
2379                 [Test]
2380                 [ExpectedException (typeof (HttpException))]
2381                 public void UpdateItemException ()
2382                 {
2383                         PokerDetailsView dv = new PokerDetailsView ();
2384                         dv.UpdateItem (true);
2385                 }
2386
2387                 [Test]
2388                 public void DetailsView_PageCount () {
2389                         Page p = new Page ();
2390
2391                         PokerDetailsView gv = new PokerDetailsView ();
2392                         p.Controls.Add (gv);
2393
2394                         ObjectDataSource data = new ObjectDataSource ();
2395                         data.ID = "ObjectDataSource1";
2396                         data.TypeName = typeof (TableObject).AssemblyQualifiedName;
2397                         data.SelectMethod = "GetMyData";
2398                         p.Controls.Add (data);
2399
2400                         gv.DataSourceID = "ObjectDataSource1";
2401                         gv.DataKeyNames = new string [] { "ID", "FName" };
2402                         gv.SetRequiresDataBinding (true);
2403
2404                         Assert.AreEqual (0, gv.PageCount, "PageCount before binding");
2405
2406                         gv.DataBind ();
2407
2408                         Assert.AreEqual (3, gv.PageCount, "PageCount after binding");
2409
2410                         //PokerDetailsView copy = new PokerDetailsView ();
2411                         //object state = gv.SaveState ();
2412                         //copy.LoadState (state);
2413
2414                         //Assert.AreEqual (3, copy.PageCount, "PageCount from ViewState");
2415                 }
2416
2417                 [Test]
2418                 public void DetailsView_DataKey () {
2419                         Page p = new Page ();
2420
2421                         PokerDetailsView fv = new PokerDetailsView ();
2422                         p.Controls.Add (fv);
2423
2424                         ObjectDataSource data = new ObjectDataSource ();
2425                         data.TypeName = typeof (TableObject).AssemblyQualifiedName;
2426                         data.SelectMethod = "GetMyData";
2427                         p.Controls.Add (data);
2428
2429                         fv.DataSource = data;
2430                         fv.DataKeyNames = new string [] { "ID", "FName" };
2431
2432                         DataKey key1 = fv.DataKey;
2433
2434                         Assert.AreEqual (null, key1.Value, "DataKey.Value before binding");
2435                         Assert.AreEqual (0, key1.Values.Count, "DataKey.Values count before binding");
2436
2437                         fv.DataBind ();
2438
2439                         DataKey key2 = fv.DataKey;
2440                         DataKey key3 = fv.DataKey;
2441
2442                         Assert.IsFalse (Object.ReferenceEquals (key1, key2), "DataKey returns the same instans");
2443                         Assert.IsTrue (Object.ReferenceEquals (key2, key3), "DataKey returns the same instans");
2444
2445                         Assert.AreEqual (1001, key1.Value, "DataKey.Value after binding");
2446                         Assert.AreEqual (2, key1.Values.Count, "DataKey.Values count after binding");
2447                         Assert.AreEqual (1001, key1.Values [0], "DataKey.Values[0] after binding");
2448                         Assert.AreEqual ("Mahesh", key1.Values [1], "DataKey.Values[1] after binding");
2449
2450                         PokerDetailsView copy = new PokerDetailsView ();
2451                         object state = fv.DoSaveControlState ();
2452                         copy.DoLoadControlState (state);
2453
2454                         DataKey key4 = copy.DataKey;
2455
2456                         Assert.AreEqual (1001, key4.Value, "DataKey.Value from ControlState");
2457                         Assert.AreEqual (2, key4.Values.Count, "DataKey.Values count from ControlState");
2458                         Assert.AreEqual (1001, key4.Values [0], "DataKey.Values[0] from ControlState");
2459                         Assert.AreEqual ("Mahesh", key4.Values [1], "DataKey.Values[1] from ControlState");
2460                 }
2461
2462                 [Test]
2463                 public void DetailsView_CreateDataSourceSelectArguments () {
2464                         DataSourceView view;
2465                         Page p = new Page ();
2466
2467                         PokerDetailsView dv = new PokerDetailsView ();
2468                         p.Controls.Add (dv);
2469
2470                         ObjectDataSource data = new ObjectDataSource ();
2471                         data.TypeName = typeof (DataSourceObject).AssemblyQualifiedName;
2472                         data.SelectMethod = "GetList";
2473                         data.SortParameterName = "sortExpression";
2474                         DataSourceSelectArguments arg;
2475                         p.Controls.Add (data);
2476
2477                         dv.DataSource = data;
2478                         dv.DataBind ();
2479
2480                         arg = dv.DoCreateDataSourceSelectArguments ();
2481                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "Default");
2482
2483                         dv.AllowPaging = true;
2484                         dv.PageIndex = 2;
2485                         arg = dv.DoCreateDataSourceSelectArguments ();
2486                         view = dv.DoGetData ();
2487                         Assert.IsFalse (view.CanPage);
2488                         Assert.IsTrue (view.CanRetrieveTotalRowCount);
2489                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = true, CanPage = false, CanRetrieveTotalRowCount = true");
2490
2491                         // make DataSourceView.CanPage = true
2492                         data.EnablePaging = true;
2493
2494                         arg = dv.DoCreateDataSourceSelectArguments ();
2495                         view = dv.DoGetData ();
2496                         Assert.IsTrue (view.CanPage);
2497                         Assert.IsFalse (view.CanRetrieveTotalRowCount);
2498                         Assert.IsTrue (arg.Equals (new DataSourceSelectArguments (2, -1)), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = false");
2499
2500                         dv.AllowPaging = false;
2501                         arg = dv.DoCreateDataSourceSelectArguments ();
2502                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = false, CanPage = true, CanRetrieveTotalRowCount = false");
2503
2504                         // make DataSourceView.CanRetrieveTotalRowCount = true
2505                         data.SelectCountMethod = "GetCount";
2506
2507                         arg = dv.DoCreateDataSourceSelectArguments ();
2508                         Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = false, CanPage = true, CanRetrieveTotalRowCount = true");
2509
2510                         dv.AllowPaging = true;
2511                         arg = dv.DoCreateDataSourceSelectArguments ();
2512                         DataSourceSelectArguments arg1 = new DataSourceSelectArguments (2, 1);
2513                         arg1.RetrieveTotalRowCount = true;
2514                         view = dv.DoGetData ();
2515                         Assert.IsTrue (view.CanPage);
2516                         Assert.IsTrue (view.CanRetrieveTotalRowCount);
2517                         Assert.IsTrue (arg.Equals (arg1), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = true");
2518         }
2519
2520                 [Test]
2521                 public void DetailsView_CurrentMode () {
2522                         DetailsView view = new DetailsView ();
2523                         view.DefaultMode = DetailsViewMode.Insert;
2524                         Assert.AreEqual (DetailsViewMode.Insert, view.CurrentMode, "DetailsView_CurrentMode#1");
2525                         view.ChangeMode (DetailsViewMode.Edit);
2526                         Assert.AreEqual (DetailsViewMode.Edit, view.CurrentMode, "DetailsView_CurrentMode#2");
2527                 }
2528
2529                 [TestFixtureTearDown]
2530                 public void Tear ()
2531                 {
2532                         WebTest.Unload ();
2533                 }
2534
2535                 [Test]
2536                 public void DetailsView_GetPostBackOptions () {
2537                         DetailsView dv = new DetailsView ();
2538                         dv.Page = new Page ();
2539                         IButtonControl btn = new Button ();
2540                         btn.CausesValidation = false;
2541                         Assert.IsFalse (btn.CausesValidation, "DetailsView_GetPostBackOptions #1");
2542                         Assert.AreEqual (String.Empty, btn.CommandName, "DetailsView_GetPostBackOptions #2");
2543                         Assert.AreEqual (String.Empty, btn.CommandArgument, "DetailsView_GetPostBackOptions #3");
2544                         Assert.AreEqual (String.Empty, btn.PostBackUrl, "DetailsView_GetPostBackOptions #4");
2545                         Assert.AreEqual (String.Empty, btn.ValidationGroup, "DetailsView_GetPostBackOptions #5");
2546                         PostBackOptions options = ((IPostBackContainer) dv).GetPostBackOptions (btn);
2547                         Assert.IsFalse (options.PerformValidation, "DetailsView_GetPostBackOptions #6");
2548                         Assert.IsFalse (options.AutoPostBack, "DetailsView_GetPostBackOptions #7");
2549                         Assert.IsFalse (options.TrackFocus, "DetailsView_GetPostBackOptions #8");
2550                         Assert.IsTrue (options.ClientSubmit, "DetailsView_GetPostBackOptions #9");
2551                         Assert.IsTrue (options.RequiresJavaScriptProtocol, "DetailsView_GetPostBackOptions #10");
2552                         Assert.AreEqual ("$", options.Argument, "DetailsView_GetPostBackOptions #11");
2553                         Assert.AreEqual (null, options.ActionUrl, "DetailsView_GetPostBackOptions #12");
2554                         Assert.AreEqual (null, options.ValidationGroup, "DetailsView_GetPostBackOptions #13");
2555
2556                         btn.ValidationGroup = "VG";
2557                         btn.CommandName = "CMD";
2558                         btn.CommandArgument = "ARG";
2559                         btn.PostBackUrl = "Page.aspx";
2560                         Assert.IsFalse (btn.CausesValidation, "DetailsView_GetPostBackOptions #14");
2561                         Assert.AreEqual ("CMD", btn.CommandName, "DetailsView_GetPostBackOptions #15");
2562                         Assert.AreEqual ("ARG", btn.CommandArgument, "DetailsView_GetPostBackOptions #16");
2563                         Assert.AreEqual ("Page.aspx", btn.PostBackUrl, "DetailsView_GetPostBackOptions #17");
2564                         Assert.AreEqual ("VG", btn.ValidationGroup, "DetailsView_GetPostBackOptions #18");
2565                         options = ((IPostBackContainer) dv).GetPostBackOptions (btn);
2566                         Assert.IsFalse (options.PerformValidation, "DetailsView_GetPostBackOptions #19");
2567                         Assert.IsFalse (options.AutoPostBack, "DetailsView_GetPostBackOptions #20");
2568                         Assert.IsFalse (options.TrackFocus, "DetailsView_GetPostBackOptions #21");
2569                         Assert.IsTrue (options.ClientSubmit, "DetailsView_GetPostBackOptions #22");
2570                         Assert.IsTrue (options.RequiresJavaScriptProtocol, "DetailsView_GetPostBackOptions #23");
2571                         Assert.AreEqual ("CMD$ARG", options.Argument, "DetailsView_GetPostBackOptions #24");
2572                         Assert.AreEqual (null, options.ActionUrl, "DetailsView_GetPostBackOptions #25");
2573                         Assert.AreEqual (null, options.ValidationGroup, "DetailsView_GetPostBackOptions #26");
2574                 }
2575
2576                 [Test]
2577                 [ExpectedException (typeof (InvalidOperationException))]
2578                 public void DetailsView_GetPostBackOptions_CausesValidation () {
2579                         DetailsView dv = new DetailsView ();
2580                         dv.Page = new Page ();
2581                         IButtonControl btn = new Button ();
2582                         Assert.IsTrue (btn.CausesValidation);
2583                         Assert.AreEqual (String.Empty, btn.CommandName);
2584                         Assert.AreEqual (String.Empty, btn.CommandArgument);
2585                         Assert.AreEqual (String.Empty, btn.PostBackUrl);
2586                         Assert.AreEqual (String.Empty, btn.ValidationGroup);
2587                         PostBackOptions options = ((IPostBackContainer) dv).GetPostBackOptions (btn);
2588                 }
2589
2590                 [Test]
2591                 [ExpectedException (typeof (ArgumentNullException))]
2592                 public void DetailsView_GetPostBackOptions_Null_Argument () {
2593                         DetailsView dv = new DetailsView ();
2594                         dv.Page = new Page ();
2595                         PostBackOptions options = ((IPostBackContainer) dv).GetPostBackOptions (null);
2596                 }
2597
2598                 [Test]
2599                 [Category ("NunitWeb")]
2600                 public void DetailsView_RequiresDataBinding () {
2601                         PageDelegates delegates = new PageDelegates ();
2602                         delegates.LoadComplete = DetailsView_RequiresDataBinding_LoadComplete;
2603                         PageInvoker invoker = new PageInvoker (delegates);
2604                         WebTest t = new WebTest (invoker);
2605                         t.Run ();
2606                 }
2607
2608                 public static void DetailsView_RequiresDataBinding_LoadComplete (Page p) {
2609                         PokerDetailsView view = new PokerDetailsView ();
2610                         p.Form.Controls.Add (view);
2611
2612                         view.DataSource = new string [] { "A", "B", "C" };
2613                         view.DataBind ();
2614
2615                         Assert.AreEqual (false, view.GetRequiresDataBinding ());
2616
2617                         view.PagerTemplate = new CompiledTemplateBuilder (BuildTemplateMethod);
2618                         Assert.AreEqual (false, view.GetRequiresDataBinding (), "PagerTemplate was set");
2619
2620                         view.EmptyDataTemplate = new CompiledTemplateBuilder (BuildTemplateMethod);
2621                         Assert.AreEqual (false, view.GetRequiresDataBinding (), "EmptyDataTemplate was set");
2622
2623                         view.HeaderTemplate = new CompiledTemplateBuilder (BuildTemplateMethod);
2624                         Assert.AreEqual (false, view.GetRequiresDataBinding (), "HeaderTemplate was set");
2625
2626                         view.FooterTemplate = new CompiledTemplateBuilder (BuildTemplateMethod);
2627                         Assert.AreEqual (false, view.GetRequiresDataBinding (), "FooterTemplate was set");
2628                 }
2629
2630                 public static void BuildTemplateMethod (Control c) { }
2631         }
2632
2633         public class DTemplate : ITemplate
2634         {
2635
2636                 Label l = new Label ();
2637 #region ITemplate Members
2638
2639                 public void InstantiateIn (Control container)
2640                 {
2641                         container.Controls.Add (l);
2642
2643                 }
2644
2645                 public void SetDataItem (object value)
2646                 {
2647                         l.Text = value.ToString ();
2648                 }
2649
2650                 #endregion
2651         }
2652
2653         public class TableObject
2654         {
2655                 public static DataTable ds = CreateDataTable ();
2656                 public static DataTable GetMyData ()
2657                 {
2658                         return ds;
2659                 }
2660
2661                 public static DataTable Delete (string ID, string FName, string LName)
2662                 {
2663                         DataRow dr = ds.Rows.Find (ID);
2664                         Assert.IsNotNull (dr);
2665                         int oldCount = ds.Rows.Count;
2666                         ds.Rows.Remove (dr);
2667                         Assert.AreEqual (oldCount - 1, ds.Rows.Count);
2668                         return ds;
2669
2670                 }
2671
2672                 public static DataTable Update (string ID, string FName, string LName)
2673                 {
2674                         DataRow dr = ds.Rows.Find (ID);
2675                         if (dr == null) {
2676                                 Label lbl = new Label ();
2677                                 lbl.Text = "ID doesn't exist. update only FName and LName";
2678                                 return ds;
2679                         }
2680                         dr["FName"] = FName;
2681                         dr["LName"] = LName;
2682                         return ds;
2683
2684                 }
2685
2686                 public static DataTable Insert (string ID, string FName, string LName)
2687                 {
2688                         DataRow dr = ds.NewRow ();
2689                         dr["ID"] = ID;
2690                         dr["FName"] = FName;
2691                         dr["LName"] = LName;
2692                         int oldCount = ds.Rows.Count;
2693                         ds.Rows.Add (dr);
2694                         Assert.AreEqual (oldCount + 1, ds.Rows.Count);
2695                         return ds;
2696                 }
2697
2698
2699                 public static DataTable CreateDataTable ()
2700                 {
2701
2702                         DataTable aTable = new DataTable ("A");
2703                         DataColumn dtCol;
2704                         DataRow dtRow;
2705
2706                         // Create ID column and add to the DataTable.
2707
2708                         dtCol = new DataColumn ();
2709                         dtCol.DataType = Type.GetType ("System.Int32");
2710                         dtCol.ColumnName = "ID";
2711                         dtCol.AutoIncrement = true;
2712                         dtCol.Caption = "ID";
2713                         dtCol.ReadOnly = true;
2714                         dtCol.Unique = true;
2715
2716                         // Add the column to the DataColumnCollection.
2717
2718                         aTable.Columns.Add (dtCol);
2719
2720                         // Create Name column and add to the table
2721
2722                         dtCol = new DataColumn ();
2723                         dtCol.DataType = Type.GetType ("System.String");
2724                         dtCol.ColumnName = "FName";
2725                         dtCol.AutoIncrement = false;
2726                         dtCol.Caption = "First Name";
2727                         dtCol.ReadOnly = false;
2728                         dtCol.Unique = false;
2729                         aTable.Columns.Add (dtCol);
2730
2731
2732                         // Create Last Name column and add to the table.
2733
2734                         dtCol = new DataColumn ();
2735                         dtCol.DataType = Type.GetType ("System.String");
2736                         dtCol.ColumnName = "LName";
2737                         dtCol.AutoIncrement = false;
2738                         dtCol.Caption = "Last Name";
2739                         dtCol.ReadOnly = false;
2740                         dtCol.Unique = false;
2741                         aTable.Columns.Add (dtCol);
2742
2743
2744                         // Create three rows to the table
2745                         dtRow = aTable.NewRow ();
2746                         dtRow["ID"] = 1001;
2747                         dtRow["FName"] = "Mahesh";
2748                         dtRow["LName"] = "Chand";
2749                         aTable.Rows.Add (dtRow);
2750
2751
2752                         dtRow = aTable.NewRow ();
2753                         dtRow["ID"] = 1002;
2754                         dtRow["FName"] = "Melanie";
2755                         dtRow["LName"] = "Talmadge";
2756                         aTable.Rows.Add (dtRow);
2757
2758                         dtRow = aTable.NewRow ();
2759                         dtRow["ID"] = 1003;
2760                         dtRow["FName"] = "Vinay";
2761                         dtRow["LName"] = "Bansal";
2762                         aTable.Rows.Add (dtRow);
2763
2764                         aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };                  
2765                         return aTable;
2766
2767                 }
2768         }
2769 }
2770
2771
2772
2773
2774
2775
2776
2777