2006-11-01 Igor Zelmanovich <igorz@mainsoft.com>
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / FormViewTest.cs
index 0950f3e1b5dc6f5030b4a1a6bbc1791bd985d4f7..3d0cc0918fa175535b19014afc82da1aaef5c61e 100644 (file)
-//
-// Tests for System.Web.UI.WebControls.FormView.cs 
-//
-// Author:
-//     Chris Toshok (toshok@ximian.com)
-//
-
-//
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-#if NET_2_0
-using NUnit.Framework;
-using System;
-using System.IO;
-using System.Globalization;
-using System.Web;
-using System.Web.UI;
-using System.Web.UI.WebControls;
-
-namespace MonoTests.System.Web.UI.WebControls
-{
-       [TestFixture]   
-       public class FormViewTest {     
-               class Poker : FormView {
-                       public Poker () {
-                               TrackViewState ();
-                       }
-
-                       public object SaveState () {
-                               return SaveViewState ();
-                       }
-
-                       public void LoadState (object state) {
-                               LoadViewState (state);
-                       }
-               }
-               
-               [Test]
-               public void Defaults ()
-               {
-                       Poker p = new Poker ();
-
-                       Assert.IsFalse (p.AllowPaging, "A1");
-                       Assert.AreEqual ("", p.BackImageUrl, "A2");
-                       Assert.IsNull (p.BottomPagerRow, "A3");
-                       Assert.AreEqual ("", p.Caption, "A4");
-                       Assert.AreEqual (TableCaptionAlign.NotSet, p.CaptionAlign ,"A5");
-                       Assert.AreEqual (-1, p.CellPadding, "A6");
-                       Assert.AreEqual (0, p.CellSpacing, "A7");
-                       Assert.AreEqual (FormViewMode.ReadOnly, p.CurrentMode, "A8");
-                       Assert.AreEqual (FormViewMode.ReadOnly, p.DefaultMode, "A9");
-                       Assert.IsNotNull (p.DataKeyNames, "A10");
-                       Assert.AreEqual (0, p.DataKeyNames.Length, "A10.1");
-                       Assert.IsNotNull (p.DataKey, "A11");
-                       Assert.AreEqual (0, p.DataKey.Values.Count, "A11.1");
-                       Assert.IsNull (p.EditItemTemplate, "A12");
-                       Assert.IsNotNull (p.EditRowStyle, "A13");
-                       Assert.IsTrue (Style.IsStyleEmpty (p.EditRowStyle), "A13.1");
-                       Assert.IsNotNull (p.EmptyDataRowStyle, "A14");
-                       Assert.IsTrue (Style.IsStyleEmpty (p.EmptyDataRowStyle), "A14.1");
-                       Assert.IsNull (p.EmptyDataTemplate, "A15");
-                       Assert.AreEqual ("", p.EmptyDataText, "A16");
-                       Assert.IsNull (p.FooterRow, "A17");
-                       Assert.IsNull (p.FooterTemplate, "A18");
-                       Assert.AreEqual ("", p.FooterText, "A19");
-                       Assert.IsNotNull (p.FooterStyle, "A20");
-                       Assert.IsTrue (Style.IsStyleEmpty (p.FooterStyle), "A20.1");
-                       Assert.AreEqual (GridLines.None, p.GridLines, "A21");
-                       Assert.IsNull (p.HeaderRow, "A22");
-                       Assert.IsNotNull (p.HeaderStyle, "A23");
-                       Assert.IsTrue (Style.IsStyleEmpty (p.HeaderStyle), "A23.1");
-                       Assert.IsNull (p.HeaderTemplate, "A24");
-                       Assert.AreEqual ("", p.HeaderText, "A25");
-                       Assert.AreEqual (HorizontalAlign.NotSet, p.HorizontalAlign, "A26");
-                       Assert.IsNull (p.InsertItemTemplate, "A27");
-                       Assert.IsNotNull (p.InsertRowStyle, "A28");
-                       Assert.IsTrue (Style.IsStyleEmpty (p.InsertRowStyle), "A28.1");
-                       Assert.IsNull (p.ItemTemplate, "A29");
-                       Assert.AreEqual (0, p.PageCount, "A30");
-                       Assert.AreEqual (0, p.PageIndex, "A31");
-                       Assert.IsNull (p.PagerTemplate, "A32");
-                       Assert.IsNull (p.Row, "A33");
-                       Assert.IsNotNull (p.RowStyle, "A34");
-                       Assert.IsTrue (Style.IsStyleEmpty (p.RowStyle), "A34.1");
-                       Assert.IsNull (p.SelectedValue, "A35");
-                       Assert.IsNull (p.TopPagerRow, "A36");
-                       Assert.IsNull (p.DataItem, "A37");
-                       Assert.AreEqual (0, p.DataItemCount, "A38");
-                       Assert.AreEqual (0, p.DataItemIndex, "A39");
-               }
-       }
-}
-#endif
+//\r
+// Tests for System.Web.UI.WebControls.FormView.cs \r
+//\r
+// Author:\r
+//     Chris Toshok (toshok@ximian.com)\r
+//\r
+\r
+//\r
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
+//\r
+// Permission is hereby granted, free of charge, to any person obtaining\r
+// a copy of this software and associated documentation files (the\r
+// "Software"), to deal in the Software without restriction, including\r
+// without limitation the rights to use, copy, modify, merge, publish,\r
+// distribute, sublicense, and/or sell copies of the Software, and to\r
+// permit persons to whom the Software is furnished to do so, subject to\r
+// the following conditions:\r
+// \r
+// The above copyright notice and this permission notice shall be\r
+// included in all copies or substantial portions of the Software.\r
+// \r
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+//\r
+\r
+#if NET_2_0\r
+\r
+using NUnit.Framework;\r
+using System;\r
+using System.Data;\r
+using System.IO;\r
+using System.Drawing;\r
+using System.Collections;\r
+using System.Collections.Generic;\r
+using System.Collections.Specialized;\r
+using System.Globalization;\r
+using System.Web;\r
+using System.Web.UI;\r
+using System.Web.UI.HtmlControls;\r
+using System.Web.UI.WebControls;\r
+using MonoTests.SystemWeb.Framework;\r
+using MonoTests.stand_alone.WebHarness;\r
+using System.Text.RegularExpressions;\r
+using System.Reflection;\r
+using System.Threading;\r
+\r
+\r
+namespace MonoTests.System.Web.UI.WebControls\r
+{\r
+       [TestFixture]   \r
+       public class FormViewTest {     \r
+\r
+               public class DataSourceObject\r
+               {\r
+                       public static List<string> GetList (string sortExpression, int startRowIndex, int maximumRows) {\r
+                               return GetList ();\r
+                       }\r
+\r
+                       public static List<string> GetList (int startRowIndex, int maximumRows) {\r
+                               return GetList ();\r
+                       }\r
+\r
+                       public static List<string> GetList (string sortExpression) {\r
+                               return GetList ();\r
+                       }\r
+\r
+                       public static List<string> GetList () {\r
+                               List<string> list = new List<string> ();\r
+                               list.Add ("Norway");\r
+                               list.Add ("Sweden");\r
+                               list.Add ("France");\r
+                               list.Add ("Italy");\r
+                               list.Add ("Israel");\r
+                               list.Add ("Russia");\r
+                               return list;\r
+                       }\r
+\r
+                       public static int GetCount () {\r
+                               return GetList ().Count;\r
+                       }\r
+               }\r
+               \r
+               public class Poker : FormView {\r
+                       public bool isInitializePager=false;\r
+                       public bool ensureDataBound=false;\r
+                       public bool controlHierarchy=false;\r
+                       bool _onPageIndexChangingCalled = false;\r
+                       bool _onPageIndexChangedCalled = false;\r
+                       \r
+                       public Poker () {                                                               \r
+                               TrackViewState ();\r
+                       }\r
+\r
+                       public object SaveState () {\r
+                               return SaveViewState ();\r
+                       }\r
+\r
+                       public void LoadState (object state) {\r
+                               LoadViewState (state);\r
+                               \r
+                       }\r
+\r
+                       public HtmlTextWriterTag PokerTagKey\r
+                       {\r
+                               get { return base.TagKey; }\r
+                       }\r
+                       \r
+                       public  int DoCreateChildControls (IEnumerable source,bool dataBind)\r
+                       {\r
+                               return CreateChildControls (source, dataBind);\r
+                               \r
+                       }                       \r
+\r
+                       public Style DoCreateControlStyle ()\r
+                       {                               \r
+                               return base.CreateControlStyle (); \r
+                       }\r
+\r
+                       public DataSourceSelectArguments DoCreateDataSourceSelectArguments ()\r
+                       {\r
+                               return CreateDataSourceSelectArguments ();\r
+                       }\r
+\r
+                       public DataSourceView DoGetData ()\r
+                       {\r
+                               return GetData ();\r
+                       }\r
+\r
+                       public FormViewRow DoCreateRow (int itemIndex,DataControlRowType rowType,DataControlRowState rowState)\r
+                       {\r
+                               return CreateRow( itemIndex, rowType,rowState); \r
+                       }\r
+\r
+                       public Table DoCreateTable ()\r
+                       {\r
+                               return CreateTable (); \r
+                       }\r
+\r
+                       protected override void EnsureDataBound ()\r
+                       {\r
+                               base.EnsureDataBound ();\r
+                               ensureDataBound = true;\r
+                       }\r
+\r
+                       public void DoExtractRowValues (IOrderedDictionary filedValues, bool includeKeys)\r
+                       {\r
+                               base.ExtractRowValues (filedValues, includeKeys);\r
+                               \r
+                       }\r
+\r
+                       protected override void InitializePager (FormViewRow row, PagedDataSource pageData)\r
+                       {\r
+                               base.InitializePager (row, pageData);\r
+                               isInitializePager = true;\r
+                       }\r
+\r
+                       public void DoInitializeRow (FormViewRow row)\r
+                       {\r
+                               InitializeRow (row); \r
+                       }\r
+                       public void DoLoadControlState (object savedState)\r
+                       {\r
+                               LoadControlState (savedState);  \r
+                       }\r
+\r
+                       public void DoLoadViewState (object savedState)\r
+                       {\r
+                               LoadViewState (savedState);  \r
+                       }                       \r
+\r
+                       public bool DoOnBubbleEvent (object source, EventArgs e)\r
+                       {\r
+                               return OnBubbleEvent (source, e); \r
+                       }\r
+\r
+                       public void DoOnInit (EventArgs e)\r
+                       {\r
+                               OnInit (e); \r
+                       }\r
+\r
+                       public void DoOnItemCommand (FormViewCommandEventArgs e)\r
+                       {\r
+                               OnItemCommand (e); \r
+                       }\r
+\r
+                       public void DoOnItemCreated (EventArgs e)\r
+                       {\r
+                               OnItemCreated (e); \r
+                       }\r
+\r
+                       public void DoOnItemDeleted (FormViewDeletedEventArgs e)\r
+                       {\r
+                               OnItemDeleted (e); \r
+                       }\r
+\r
+                       public void DoOnItemDeleting (FormViewDeleteEventArgs e)\r
+                       {\r
+                               OnItemDeleting (e); \r
+                       }\r
+\r
+                       public void DoOnItemInserted (FormViewInsertedEventArgs e)\r
+                       {\r
+                               OnItemInserted (e); \r
+                       }\r
+\r
+                       public void DoOnItemInserting (FormViewInsertEventArgs e)\r
+                       {\r
+                               OnItemInserting (e);\r
+                       }\r
+\r
+                       public void DoOnItemUpdated (FormViewUpdatedEventArgs e)\r
+                       {\r
+                               OnItemUpdated (e); \r
+                       }\r
+\r
+                       public void DoOnItemUpdating (FormViewUpdateEventArgs e)\r
+                       {\r
+                               OnItemUpdating (e); \r
+                       }\r
+\r
+                       public void DoOnModeChanged (EventArgs e )\r
+                       {\r
+                               OnModeChanged (e); \r
+                       }\r
+\r
+                       public void DoOnModeChanging (FormViewModeEventArgs  e)\r
+                       {\r
+                               OnModeChanging (e); \r
+                       }\r
+\r
+                       public void DoOnPageIndexChanged (EventArgs e)\r
+                       {\r
+                               OnPageIndexChanged (e); \r
+                       }\r
+\r
+                       public void DoOnPageIndexChanging (FormViewPageEventArgs e)\r
+                       {\r
+                               OnPageIndexChanging (e); \r
+                       }\r
+\r
+                       public void DoPerformDataBinding (IEnumerable data)\r
+                       {\r
+                               PerformDataBinding (data);\r
+                       }\r
+\r
+                       protected override void PrepareControlHierarchy ()\r
+                       {\r
+\r
+                               base.PrepareControlHierarchy ();\r
+                               controlHierarchy = true;\r
+                       }\r
+\r
+                       public void DoRaisePostBackEvent (string eventArgument)\r
+                       {\r
+                               RaisePostBackEvent (eventArgument); \r
+                       }\r
+                       \r
+                       public string Render ()\r
+                       {\r
+\r
+                               StringWriter sw = new StringWriter ();\r
+                               HtmlTextWriter tw = new HtmlTextWriter (sw);\r
+                               Render (tw);\r
+                               return sw.ToString ();\r
+\r
+                       }\r
+\r
+\r
+\r
+                       public object DoSaveControlState ()\r
+                       {\r
+                               return SaveControlState (); \r
+                       }\r
+\r
+\r
+                       \r
+                       public void DoConfirmInitState ()\r
+                       {\r
+                               base.ConfirmInitState ();\r
+                       }\r
+       \r
+                       public void DoOnPreRender (EventArgs e)\r
+                       {\r
+                               base.OnPreRender (e);\r
+                       }\r
+\r
+                       public void DoOnDataBinding (EventArgs e)\r
+                       {\r
+                               base.OnDataBinding (e); \r
+                       }\r
+                       public void DoOnDataBound (EventArgs e)\r
+                       {\r
+                               base.OnDataBound (e); \r
+                       }                       \r
+                       \r
+                       public bool OnPageIndexChangingCalled {\r
+                               set { _onPageIndexChangingCalled = value; }\r
+                               get { return _onPageIndexChangingCalled; }\r
+                       }\r
+       \r
+                       public bool OnPageIndexChangedCalled {\r
+                               set { _onPageIndexChangedCalled = value; }\r
+                               get { return _onPageIndexChangedCalled; }\r
+                       }\r
+       \r
+                       protected override void OnPageIndexChanging (FormViewPageEventArgs e) {\r
+                               OnPageIndexChangingCalled = true;\r
+                               base.OnPageIndexChanging (e);\r
+                       }\r
+       \r
+                       protected override void OnPageIndexChanged (EventArgs e) {\r
+                               OnPageIndexChangedCalled = true;\r
+                               base.OnPageIndexChanged (e);\r
+                       }\r
+               }\r
+               \r
+               class Template : ITemplate\r
+               {\r
+                       bool _instantiated;\r
+                       \r
+                       public bool Instantiated {\r
+                              get { return _instantiated; }\r
+                       }\r
+                       \r
+#region ITemplate Members\r
+                       \r
+                       public void InstantiateIn (Control container) {\r
+                              _instantiated = true;\r
+                       }\r
+                       \r
+                       #endregion\r
+               }\r
+               \r
+\r
+               ArrayList myds = new ArrayList ();      \r
+               [TestFixtureSetUp]\r
+               public void setup ()\r
+               {\r
+                       myds.Add ("Item1");\r
+                       myds.Add ("Item2");\r
+                       myds.Add ("Item3");\r
+                       myds.Add ("Item4");\r
+                       myds.Add ("Item5");\r
+                       myds.Add ("Item6");\r
+#if VISUAL_STUDIO\r
+                       WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.FormView.aspx",\r
+                               "FormView.aspx");\r
+                       WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.FormViewTest1.aspx",\r
+                               "FormViewTest1.aspx");\r
+                       WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.FormViewInsertEditDelete.aspx",\r
+                               "FormViewInsertEditDelete.aspx");\r
+#else\r
+                       WebTest.CopyResource (GetType (), "FormView.aspx", "FormView.aspx");\r
+                       WebTest.CopyResource (GetType (), "FormViewTest1.aspx", "FormViewTest1.aspx");\r
+                       WebTest.CopyResource (GetType (), "FormViewInsertEditDelete.aspx", "FormViewInsertEditDelete.aspx");\r
+#endif\r
+\r
+               }\r
+\r
+               [Test]\r
+               public void Defaults ()\r
+               {\r
+                       Poker p = new Poker ();\r
+                       Assert.IsFalse (p.AllowPaging, "A1");\r
+                       Assert.AreEqual ("", p.BackImageUrl, "A2");\r
+                       Assert.IsNull (p.BottomPagerRow, "A3");\r
+                       Assert.AreEqual ("", p.Caption, "A4");\r
+                       Assert.AreEqual (TableCaptionAlign.NotSet, p.CaptionAlign, "A5");\r
+                       Assert.AreEqual (-1, p.CellPadding, "A6");\r
+                       Assert.AreEqual (0, p.CellSpacing, "A7");\r
+                       Assert.AreEqual (FormViewMode.ReadOnly, p.CurrentMode, "A8");\r
+                       Assert.AreEqual (FormViewMode.ReadOnly, p.DefaultMode, "A9");\r
+                       Assert.IsNotNull (p.DataKeyNames, "A10");\r
+                       Assert.AreEqual (0, p.DataKeyNames.Length, "A10.1");\r
+                       Assert.IsNotNull (p.DataKey, "A11");\r
+                       Assert.AreEqual (0, p.DataKey.Values.Count, "A11.1");\r
+                       Assert.IsNull (p.EditItemTemplate, "A12");\r
+                       Assert.IsNotNull (p.EditRowStyle, "A13");\r
+                       Assert.IsNotNull (p.EmptyDataRowStyle, "A14");\r
+                       Assert.IsNull (p.EmptyDataTemplate, "A15");\r
+                       Assert.AreEqual ("", p.EmptyDataText, "A16");\r
+                       Assert.IsNull (p.FooterRow, "A17");\r
+                       Assert.IsNull (p.FooterTemplate, "A18");\r
+                       Assert.AreEqual ("", p.FooterText, "A19");\r
+                       Assert.IsNotNull (p.FooterStyle, "A20");\r
+                       Assert.AreEqual (GridLines.None, p.GridLines, "A21");\r
+                       Assert.IsNull (p.HeaderRow, "A22");\r
+                       Assert.IsNotNull (p.HeaderStyle, "A23");\r
+                       Assert.IsNull (p.HeaderTemplate, "A24");\r
+                       Assert.AreEqual ("", p.HeaderText, "A25");\r
+                       Assert.AreEqual (HorizontalAlign.NotSet, p.HorizontalAlign, "A26");\r
+                       Assert.IsNull (p.InsertItemTemplate, "A27");\r
+                       Assert.IsNotNull (p.InsertRowStyle, "A28");\r
+                       Assert.IsNull (p.ItemTemplate, "A29");\r
+                       Assert.AreEqual (0, p.PageCount, "A30");\r
+                       Assert.AreEqual (0, p.PageIndex, "A31");\r
+                       Assert.IsNull (p.PagerTemplate, "A32");\r
+                       Assert.IsNull (p.Row, "A33");\r
+                       Assert.IsNotNull (p.RowStyle, "A34");\r
+                       Assert.IsNull (p.SelectedValue, "A35");\r
+                       Assert.IsNull (p.TopPagerRow, "A36");\r
+                       Assert.IsNull (p.DataItem, "A37");\r
+                       Assert.AreEqual (0, p.DataItemCount, "A38");\r
+                       Assert.AreEqual (0, p.DataItemIndex, "A39");\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_AssignToDefaultProperties ()\r
+               {\r
+                       Poker p = new Poker ();\r
+                       MyTemplate customTemplate = new MyTemplate ();\r
+                       TableItemStyle tableStyle = new TableItemStyle ();                      \r
+                       p.AllowPaging = true;\r
+                       Assert.AreEqual (true, p.AllowPaging, "A40");\r
+                       p.BackImageUrl = "image.jpg";\r
+                       Assert.AreEqual ("image.jpg", p.BackImageUrl, "A41");\r
+                       // ToDo: p.BottomPagerRow\r
+                       p.Caption = "Employee Details";\r
+                       Assert.AreEqual ("Employee Details", p.Caption, "A42");\r
+                       p.CaptionAlign = TableCaptionAlign.Bottom;\r
+                       Assert.AreEqual (TableCaptionAlign.Bottom, p.CaptionAlign, "A43");\r
+                       p.CaptionAlign = TableCaptionAlign.Left;\r
+                       Assert.AreEqual (TableCaptionAlign.Left, p.CaptionAlign, "A44");\r
+                       p.CaptionAlign = TableCaptionAlign.NotSet;\r
+                       Assert.AreEqual (TableCaptionAlign.NotSet, p.CaptionAlign, "A45");\r
+                       p.CaptionAlign = TableCaptionAlign.Right;\r
+                       Assert.AreEqual (TableCaptionAlign.Right, p.CaptionAlign, "A46");\r
+                       p.CaptionAlign = TableCaptionAlign.Top;\r
+                       Assert.AreEqual (TableCaptionAlign.Top, p.CaptionAlign, "A47");\r
+                       p.CellPadding = 10;\r
+                       Assert.AreEqual (10, p.CellPadding, "A48");\r
+                       p.CellSpacing = 20;\r
+                       Assert.AreEqual (20, p.CellSpacing, "A49");                     \r
+                       Assert.AreEqual (FormViewMode.ReadOnly, p.CurrentMode, "A52");                  \r
+                       p.DefaultMode = FormViewMode.Edit;\r
+                       Assert.AreEqual (FormViewMode.Edit, p.DefaultMode, "A53");\r
+                       p.DefaultMode = FormViewMode.Insert;\r
+                       Assert.AreEqual (FormViewMode.Insert, p.DefaultMode, "A54");\r
+                       p.DefaultMode = FormViewMode.ReadOnly;\r
+                       Assert.AreEqual (FormViewMode.ReadOnly, p.DefaultMode, "A55");\r
+                       p.EditRowStyle.BackColor = Color.Red;\r
+                       Assert.AreEqual (Color.Red, p.EditRowStyle.BackColor, "A56");                   \r
+                       p.EmptyDataRowStyle.ForeColor = Color.Purple;\r
+                       Assert.AreEqual (Color.Purple, p.EmptyDataRowStyle.ForeColor, "A57");\r
+                       p.EmptyDataTemplate = customTemplate;\r
+                       Assert.AreEqual (customTemplate, p.EmptyDataTemplate, "A58");\r
+                       p.EmptyDataText = "No data";\r
+                       Assert.AreEqual ("No data", p.EmptyDataText, "A59");\r
+                       p.EditItemTemplate = customTemplate;\r
+                       Assert.AreEqual (customTemplate, p.EditItemTemplate, "A60");\r
+                       p.FooterTemplate = customTemplate;\r
+                       Assert.AreEqual (customTemplate, p.FooterTemplate, "A61");\r
+                       p.FooterText = "Test Footer";\r
+                       Assert.AreEqual ("Test Footer", p.FooterText, "A62");\r
+                       p.FooterStyle.BorderStyle = BorderStyle.Double;\r
+                       Assert.AreEqual (BorderStyle.Double, p.FooterStyle.BorderStyle, "A63");\r
+                       p.GridLines = GridLines.Both;\r
+                       Assert.AreEqual (GridLines.Both, p.GridLines, "A64");\r
+                       p.GridLines = GridLines.Horizontal;\r
+                       Assert.AreEqual (GridLines.Horizontal, p.GridLines, "A65");\r
+                       p.GridLines = GridLines.None;\r
+                       Assert.AreEqual (GridLines.None, p.GridLines, "A66");\r
+                       p.GridLines = GridLines.Vertical;\r
+                       Assert.AreEqual (GridLines.Vertical, p.GridLines, "A67");\r
+                       p.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;\r
+                       Assert.AreEqual (HorizontalAlign.Left, p.HeaderStyle.HorizontalAlign, "A68");\r
+                       p.HeaderTemplate = customTemplate;\r
+                       Assert.AreEqual (customTemplate, p.HeaderTemplate, "A69");\r
+                       p.HeaderText = "Test Header";\r
+                       Assert.AreEqual ("Test Header", p.HeaderText, "A70");\r
+                       p.HorizontalAlign = HorizontalAlign.Center;\r
+                       Assert.AreEqual (HorizontalAlign.Center, p.HorizontalAlign, "A71");\r
+                       p.HorizontalAlign = HorizontalAlign.Justify;\r
+                       Assert.AreEqual (HorizontalAlign.Justify, p.HorizontalAlign, "A72");\r
+                       p.HorizontalAlign = HorizontalAlign.Left;\r
+                       Assert.AreEqual (HorizontalAlign.Left, p.HorizontalAlign, "A73");\r
+                       p.HorizontalAlign = HorizontalAlign.NotSet;\r
+                       Assert.AreEqual (HorizontalAlign.NotSet, p.HorizontalAlign, "A74");\r
+                       p.HorizontalAlign = HorizontalAlign.Right;\r
+                       Assert.AreEqual (HorizontalAlign.Right, p.HorizontalAlign, "A75");\r
+                       p.InsertItemTemplate = customTemplate;\r
+                       Assert.AreEqual (customTemplate, p.InsertItemTemplate, "A76");\r
+                       p.InsertRowStyle.BorderStyle = BorderStyle.Outset;\r
+                       Assert.AreEqual (BorderStyle.Outset, p.InsertRowStyle.BorderStyle, "A77");\r
+                       p.ItemTemplate = customTemplate;\r
+                       Assert.AreEqual (customTemplate, p.ItemTemplate, "A78");\r
+                       p.PagerSettings.FirstPageText = "PagerSettings Test";\r
+                       Assert.AreEqual ("PagerSettings Test", p.PagerSettings.FirstPageText, "A79");\r
+                       p.PagerStyle.BorderStyle = BorderStyle.Groove;\r
+                       Assert.AreEqual (BorderStyle.Groove, p.PagerStyle.BorderStyle, "A80");\r
+                       p.PagerTemplate = customTemplate;\r
+                       Assert.AreEqual (customTemplate, p.PagerTemplate, "A81");\r
+                       p.RowStyle.ForeColor = Color.Plum;\r
+                       Assert.AreEqual (Color.Plum, p.RowStyle.ForeColor, "A82");\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_ItemsProperties ()\r
+               {\r
+                       Poker p = new Poker ();\r
+                       p.Page = new Page ();\r
+                       p.AllowPaging = true;\r
+                       p.DataSource = myds;\r
+                       p.DataBind ();\r
+                       //Assert.AreEqual (typeof (FormViewPagerRow), (p.BottomPagerRow).GetType (), "BottomPagerRow1");\r
+                       Assert.AreEqual (0, p.BottomPagerRow.ItemIndex, "BottomPagerRow2");\r
+                       Assert.AreEqual (DataControlRowType.Pager, p.BottomPagerRow.RowType, "BottomPagerRow2");\r
+                       Assert.AreEqual ("Item1", p.DataItem, "DataItem");\r
+                       Assert.AreEqual (6, p.DataItemCount, "DataItemCount");\r
+                       Assert.AreEqual (0, p.DataItemIndex, "DataItemIndex");\r
+                       Assert.AreEqual (0, p.DataItemIndex, "DataItemIndex");\r
+                       string[] str = new string[] { "1", "2", "3", "4", "5", "6" };\r
+                       Assert.AreEqual (typeof (DataKey), p.DataKey.GetType (), "DataKey");\r
+                       p.DataKeyNames = str;\r
+                       Assert.AreEqual (str, p.DataKeyNames, "DataKeyNames");\r
+                       p.ChangeMode (FormViewMode.Edit);\r
+                       Assert.AreEqual (FormViewMode.Edit, p.CurrentMode, "CurrentModeEdit");\r
+                       p.ChangeMode (FormViewMode.Insert);\r
+                       Assert.AreEqual (FormViewMode.Insert, p.CurrentMode, "CurrentModeInsert");\r
+\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_DefaultProtectedProperties ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       Assert.AreEqual (HtmlTextWriterTag.Table, fv.PokerTagKey, "TagKey");\r
+               }\r
+\r
+               // Protected methods\r
+\r
+               [Test]\r
+               public void FormView_CreateChildControls ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       fv.DataSource = myds;\r
+                       fv.Page = new Page ();\r
+                       Assert.AreEqual (6, fv.DoCreateChildControls (myds, true), "CreateChildControlFromDS");\r
+                       myds.Add ("item7");\r
+                       Assert.AreEqual (7, fv.DoCreateChildControls (myds, false), "CreateChildControlFromViewState");\r
+                       myds.Remove ("item7");\r
+\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_CreateDataSourceSelectArguments ()\r
+               {\r
+                       //Checks the default DataSourceSelectArgument object returned.\r
+                       Poker fv = new Poker ();\r
+                       DataSourceSelectArguments selectArgs = fv.DoCreateDataSourceSelectArguments ();\r
+                       Assert.AreEqual (0, selectArgs.MaximumRows, "CreateDataSourceSelectArguments1");\r
+                       Assert.AreEqual (false, selectArgs.RetrieveTotalRowCount, "CreateDataSourceSelectArguments2");                                          \r
+\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_CreateControlStyle ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       Style s = fv.DoCreateControlStyle ();\r
+                       Assert.AreEqual (typeof (TableStyle), s.GetType (), "CreateControlStyle1");\r
+                       Assert.AreEqual (GridLines.None, ((TableStyle) s).GridLines, "CreateControlStyle2");\r
+                       Assert.AreEqual ("", ((TableStyle) s).BackImageUrl, "CreateControlStyle3");\r
+                       Assert.AreEqual (0, ((TableStyle) s).CellSpacing, "CreateControlStyle4");\r
+                       Assert.AreEqual (-1, ((TableStyle) s).CellPadding, "CreateControlStyle5");\r
+\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_InitializeRow ()\r
+               {\r
+                       //not implemented\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_InitializePager ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       Page page = new Page ();\r
+                       page.Controls.Add (fv);\r
+                       fv.AllowPaging = true;\r
+                       fv.DataSource = myds;\r
+                       Assert.AreEqual (false, fv.isInitializePager, "BeforeInitializePager");\r
+                       Assert.AreEqual (0, fv.PageCount, "BeforeInitializePagerPageCount");\r
+                       fv.DataBind ();\r
+                       Assert.AreEqual (true, fv.isInitializePager, "AfterInitializePager");\r
+                       Assert.AreEqual (6, fv.PageCount, "AfterInitializePagerPageCount");\r
+               }\r
+               \r
+               [Test]\r
+               public void FormView_CreateRow ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       fv.AllowPaging =true;\r
+                       fv.DataSource = myds;\r
+                       fv.Page = new Page ();\r
+                       fv.DataBind ();\r
+                       FormViewRow row = fv.DoCreateRow (2,DataControlRowType.DataRow ,DataControlRowState.Normal );\r
+                       Assert.AreEqual (2, row.ItemIndex, "CreatedRowItemIndex1");\r
+                       Assert.AreEqual (DataControlRowState.Normal , row.RowState, "CreatedRowState1");\r
+                       Assert.AreEqual (DataControlRowType.DataRow , row.RowType, "CreatedRowType1");                   \r
+                       row = fv.DoCreateRow (4, DataControlRowType.Footer, DataControlRowState.Edit);\r
+                       Assert.AreEqual (4, row.ItemIndex, "CreatedRowItemIndex2");\r
+                       Assert.AreEqual (DataControlRowState.Edit , row.RowState, "CreatedRowState2");\r
+                       Assert.AreEqual (DataControlRowType.Footer , row.RowType, "CreatedRowType2");\r
+                       //FormViewPagerRow pagerRow = (FormViewPagerRow)fv.DoCreateRow (3, DataControlRowType.Pager , DataControlRowState.Insert);\r
+                       //Assert.AreEqual (3, pagerRow.ItemIndex, "CreatedPageRowItemIndex");\r
+                       //Assert.AreEqual (DataControlRowState.Insert, pagerRow.RowState, "CreatedPageRowState");\r
+                       //Assert.AreEqual (DataControlRowType.Pager, pagerRow.RowType, "CreatedPageRowType");                    \r
+                       \r
+               }\r
+\r
+               [Test]\r
+               public void FormView_CreateTable ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       Table tb = fv.DoCreateTable ();\r
+                       fv.Page = new Page ();\r
+                       Assert.AreEqual ("", tb.BackImageUrl , "CreateTable1");\r
+                       Assert.AreEqual (0, tb.Rows.Count, "CreateTable2");\r
+                       fv.DataSource = myds;\r
+                       fv.DataBind ();                 \r
+                       fv.ID = "TestFormView";\r
+                       tb = fv.DoCreateTable ();\r
+                       Assert.AreEqual (-1, tb.CellPadding , "CreateTable3");                  \r
+\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_EnsureDataBound ()\r
+               {\r
+                       Poker fv = new Poker ();                        \r
+                       fv.DataSource = myds;                   \r
+                       fv.DoOnPreRender (EventArgs.Empty);\r
+                       Assert.AreEqual (true, fv.ensureDataBound, "EnsureDataBound");\r
+                       \r
+               }\r
+\r
+               [Test]\r
+               public void FormView_PerformDataBinding ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       fv.Page = new Page ();\r
+                       Assert.AreEqual (0,fv.DataItemCount, "BeforePerformDataBinding"); \r
+                       fv.DoPerformDataBinding (myds);\r
+                       Assert.AreEqual (6, fv.DataItemCount, "AfterPerformDataBinding"); \r
+               }\r
+\r
+               [Test]\r
+               public void FormView_ExtractRowValues ()\r
+               {\r
+                       Poker fv=new Poker ();\r
+                       fv.ItemTemplate = new MyTemplate ();\r
+                       fv.DataKeyNames = new string[] { "ID", "FName", "LName" };\r
+                       //IOrderedDictionary dict = (IOrderedDictionary) new OrderedDictionary (0x19);\r
+                       //fv.DoExtractRowValues (dict, true);                   \r
+                       //DataTable ds = CreateDataTable ();\r
+                       //fv.DataSource = ds;\r
+                       //fv.DataBind ();\r
+                       //OrderedDictionary fieldsValues = new OrderedDictionary ();\r
+                       //fv.DoExtractRowValues (fieldsValues, true);\r
+                       //Assert.AreEqual (3, fieldsValues.Count, "ExtractRowValues1");\r
+                       //Assert.AreEqual (3, fieldsValues.Keys.Count, "ExtractRowValues2");\r
+                       //Assert.AreEqual (3, fieldsValues.Values.Count, "ExtractRowValues3");\r
+                       //Assert.AreEqual (true, fieldsValues.Contains ("ID"), "ExtractRowValues4");\r
+                       //IDictionaryEnumerator enumerator = fieldsValues.GetEnumerator ();\r
+                       //enumerator.MoveNext ();\r
+                       //Assert.AreEqual ("ID", enumerator.Key, "FieldValue1");\r
+                       //Assert.AreEqual ("1001", enumerator.Value, "FieldValue2");\r
+                       //enumerator.MoveNext ();\r
+                       //Assert.AreEqual ("FName", enumerator.Key, "FieldValue3");\r
+                       //Assert.AreEqual ("Mahesh", enumerator.Value, "FieldValue4");\r
+                       //enumerator.MoveNext ();\r
+                       //Assert.AreEqual ("LName", enumerator.Key, "FieldValue5");\r
+                       //Assert.AreEqual ("Chand", enumerator.Value, "FieldValue6");           \r
+  \r
+               }\r
+\r
+               [Test]\r
+               public void FormView_PrepareControlHierarcy ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       fv.Page = new Page ();\r
+                       fv.controlHierarchy = false;\r
+                       fv.Render ();\r
+                       Assert.AreEqual (0, fv.Controls.Count, "ControlHierarchy1");\r
+                       Assert.AreEqual (true, fv.controlHierarchy, "ControlHierarchy2");\r
+                       fv.AllowPaging = true;\r
+                       fv.DataSource = myds;\r
+                       fv.DataBind ();\r
+                       fv.controlHierarchy = false;\r
+                       fv.Render ();\r
+                       Assert.AreEqual (1, fv.Controls.Count, "ControlHierarchy3");\r
+                       Assert.AreEqual (true, fv.controlHierarchy, "ControlHierarchy4");\r
+\r
+\r
+               }\r
+\r
+               //Public Methods\r
+\r
+               [Test]\r
+               public void FormView_ChangeMode ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       Assert.AreEqual (FormViewMode.ReadOnly, fv.CurrentMode, "ChangeModeDefault");\r
+                       fv.ChangeMode (FormViewMode.Insert);\r
+                       Assert.AreEqual (FormViewMode.Insert, fv.CurrentMode, "ChangeModeInsert");\r
+                       fv.ChangeMode (FormViewMode.Edit);\r
+                       Assert.AreEqual (FormViewMode.Edit, fv.CurrentMode, "ChangeModeEdit");\r
+                       fv.ChangeMode (FormViewMode.ReadOnly);\r
+                       Assert.AreEqual (FormViewMode.ReadOnly, fv.CurrentMode, "ChangeModeReadOnly");\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_DataBind ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       fv.AllowPaging = true;\r
+                       fv.DataSource = myds;\r
+                       fv.Page = new Page ();\r
+                       Assert.AreEqual (0, fv.PageCount, "BeforeDataBind1");\r
+                       Assert.AreEqual (null, fv.DataItem, "BeforeDataBind2");\r
+                       fv.DataBind ();\r
+                       Assert.AreEqual (6, fv.PageCount, "AfterDataBind1");\r
+                       Assert.AreEqual (6, fv.DataItemCount, "AfterDataBind2");\r
+                       Assert.AreEqual ("Item1", fv.DataItem, "AfterDataBind3");\r
+               }\r
+\r
+               private bool isDeleted = false;\r
+\r
+               [Test]\r
+               public void FormView_DeleteItem ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       fv.Page = new Page ();\r
+                       fv.DataSource = myds;\r
+                       fv.DataBind ();\r
+                       Assert.AreEqual (false, isDeleted, "BeforeDeleteItem");\r
+                       fv.ItemDeleting += new FormViewDeleteEventHandler (fv_DeleteingHandler);\r
+                       fv.DeleteItem ();\r
+                       Assert.AreEqual (true, isDeleted, "BeforeDeleteItem");\r
+\r
+               }\r
+\r
+               public void fv_DeleteingHandler (Object sender, FormViewDeleteEventArgs e)\r
+               {\r
+                       isDeleted = true;\r
+               }\r
+\r
+               private bool insertItem = false;\r
+\r
+               [Test]\r
+               public void FormView_InsertItem ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       fv.Page = new Page ();\r
+                       fv.ChangeMode (FormViewMode.Insert);\r
+                       fv.ItemInserting += new FormViewInsertEventHandler (insert_item);\r
+                       Assert.AreEqual (false, insertItem, "BeforeInsertItem");\r
+                       fv.InsertItem (false);\r
+                       Assert.AreEqual (true, insertItem, "AfterInsertItem");\r
+\r
+               }\r
+\r
+               public void insert_item (object sender, FormViewInsertEventArgs e)\r
+               {\r
+                       insertItem = true;\r
+               }\r
+\r
+               private bool updateItem = false;\r
+               [Test]\r
+               public void FormView_UpdateItem ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       fv.Page = new Page ();\r
+                       fv.DataSource = myds;\r
+                       fv.DataBind ();\r
+                       fv.ChangeMode (FormViewMode.Edit);\r
+                       fv.ItemUpdating += new FormViewUpdateEventHandler (update_item);\r
+                       Assert.AreEqual (false, updateItem, "BeforeUpdateItem");\r
+                       fv.UpdateItem (false);\r
+                       Assert.AreEqual (true, updateItem, "AfterUpdateItem");\r
+\r
+               }\r
+\r
+               public void update_item (object sender, FormViewUpdateEventArgs e)\r
+               {\r
+                       updateItem = true;\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_IsBindableType ()\r
+               {\r
+                       bool isBindable = false;\r
+                       Poker fv = new Poker ();\r
+                       isBindable = fv.IsBindableType (typeof (Decimal));\r
+                       Assert.AreEqual (true, isBindable, "IsBindableTypeDecimal");\r
+                       isBindable = fv.IsBindableType (typeof (Int32));\r
+                       Assert.AreEqual (true, isBindable, "IsBindableTypeInt32");\r
+                       isBindable = fv.IsBindableType (typeof (String));\r
+                       Assert.AreEqual (true, isBindable, "IsBindableTypeString");\r
+                       isBindable = fv.IsBindableType (typeof (Boolean));\r
+                       Assert.AreEqual (true, isBindable, "IsBindableTypeBoolean");\r
+                       isBindable = fv.IsBindableType (typeof (DateTime));\r
+                       Assert.AreEqual (true, isBindable, "IsBindableTypeDateTime");\r
+                       isBindable = fv.IsBindableType (typeof (Byte));\r
+                       Assert.AreEqual (true, isBindable, "IsBindableTypeByte");\r
+                       isBindable = fv.IsBindableType (typeof (Guid));\r
+                       Assert.AreEqual (true, isBindable, "IsBindableTypeGuid");\r
+                       isBindable = fv.IsBindableType (typeof (MyTemplate));\r
+                       Assert.AreEqual (false, isBindable, "IsBindableTypeMyTemplate");\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_ControlState ()            {\r
+\r
+                       Poker fv = new Poker ();\r
+                       Poker copy = new Poker ();\r
+                       string[] keys = new String[2];\r
+                       keys[0] = "key1";\r
+                       keys[1] = "key2";\r
+                       fv.DataKeyNames = keys;\r
+                       fv.BackImageUrl = "photo.jpg";                  \r
+                       fv.DefaultMode  = FormViewMode.Insert  ;\r
+                       fv.ChangeMode (FormViewMode.Edit);\r
+                       object state = fv.DoSaveControlState ();\r
+                       copy.DoLoadControlState (state);\r
+                       Assert.AreEqual (2, copy.DataKeyNames.Length, "DataKeyNames.Length");\r
+                       Assert.AreEqual ("key1", copy.DataKeyNames[0], "ControlStateDataKeyValue");\r
+                       Assert.AreEqual ("key2", copy.DataKeyNames[1], "ControlStateDataKeyValue2");                    \r
+                       Assert.AreEqual (FormViewMode.Insert, copy.DefaultMode, "ControlStateDefaultMode");\r
+                       Assert.AreEqual (FormViewMode.Edit, copy.CurrentMode, "ControlStateCurrentMode");\r
+\r
+               }\r
+\r
+               //ViewState\r
+               [Test]\r
+               public void FormView_ViewState ()\r
+               {\r
+                       Poker fv = new Poker ();\r
+                       Poker copy = new Poker ();\r
+                       fv.AllowPaging = true;\r
+                       fv.HeaderText = "Testing";\r
+                       fv.CssClass = "style.css";\r
+                       object state = fv.SaveState ();\r
+                       copy.LoadState (state);\r
+                       Assert.AreEqual (true, copy.AllowPaging, "ViewStateAllowPaging");\r
+                       Assert.AreEqual ("Testing", copy.HeaderText, "ViewStateHeaderText");\r
+                       Assert.AreEqual ("style.css", copy.CssClass, "ViewStateCssClass");\r
+               }\r
+\r
+               //Events \r
+               private bool init;\r
+               private bool itemCommand;\r
+               private bool itemCreated;\r
+               private bool itemDeleted;\r
+               private bool itemDeleting;\r
+               private bool itemInserted;\r
+               private bool itemInserting;\r
+               private bool itemUpdated;\r
+               private bool itemUpdating;\r
+               private bool modeChanged;\r
+               private bool modeChanging;\r
+               private bool pageIndexChanged;\r
+               private bool pageIndexChanging;\r
+               private int newPageIndex;\r
+\r
+               public void ResetEvents ()\r
+               {\r
+                       init = false;\r
+                       itemCommand = false;\r
+                       itemCreated = false;\r
+                       itemDeleted = false;\r
+                       itemDeleting = false;\r
+                       itemInserted = false;\r
+                       itemInserting = false;\r
+                       itemUpdated = false;\r
+                       itemUpdating = false;\r
+                       modeChanged = false;\r
+                       modeChanging = false;\r
+                       pageIndexChanged = false;\r
+                       pageIndexChanging = false;\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_BubbleEvent ()\r
+               {\r
+                       FormViewCommandEventArgs com;\r
+                       Poker fv = new Poker ();\r
+                       Page page = new Page ();\r
+                       Button bt = new Button ();\r
+                       fv.AllowPaging = true;\r
+                       fv.DataSource = myds;\r
+                       page.Controls.Add (fv);\r
+                       fv.DataBind ();\r
+                       ResetEvents ();\r
+                       fv.ItemCommand += new FormViewCommandEventHandler (fv_ItemCommand);\r
+                       fv.ItemDeleted += new FormViewDeletedEventHandler (fv_ItemDeleted);\r
+                       //Delete\r
+                       fv.ItemDeleting += new FormViewDeleteEventHandler (fv_ItemDeleting);\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Delete", null));\r
+                       Assert.AreEqual (false, itemDeleting, "BeforeDeleteCommandBubbleEvent");\r
+                       Assert.AreEqual (false, itemCommand, "BeforeDeleteBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Delete");\r
+                       Assert.AreEqual (true, itemDeleting, "AfterDeleteBubbleEvent");\r
+                       Assert.AreEqual (true, itemCommand, "AfterDeleteCommandBubbleEvent");\r
+\r
+\r
+                       //Insert\r
+                       itemCommand = false;\r
+                       fv.ItemInserting += new FormViewInsertEventHandler (fv_ItemInserting);\r
+                       fv.ChangeMode (FormViewMode.Insert);\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Insert", null));\r
+                       Assert.AreEqual (false, itemCommand, "BeforeInsertCommandBubbleEvent");\r
+                       Assert.AreEqual (false, itemInserting, "BeforeInsertBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Insert");\r
+                       Assert.AreEqual (true, itemCommand, "AfterInsertCommandBubbleEvent");\r
+                       Assert.AreEqual (true, itemInserting, "AfterInsertBubbleEvent");\r
+\r
+\r
+                       //Update\r
+                       itemCommand = false;\r
+                       fv.ItemUpdating += new FormViewUpdateEventHandler (fv_ItemUpdating);\r
+                       fv.ChangeMode (FormViewMode.Edit);\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Update", null));\r
+                       Assert.AreEqual (false, itemUpdating, "BeforeUpdateEvent");\r
+                       Assert.AreEqual (false, itemCommand, "BeforeUpdateCommandEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Update");\r
+                       Assert.AreEqual (true, itemCommand, "AfterUpdateCommandBubbleEvent");\r
+                       Assert.AreEqual (true, itemUpdating, "AfterUpdateBubbleEvent");\r
+\r
+\r
+                       //Cancel \r
+                       itemCommand = false;\r
+                       fv.ModeChanging += new FormViewModeEventHandler (fv_ModeChanging);\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Cancel", null));\r
+                       Assert.AreEqual (false, itemCommand, "BeforeCancelCommandBubbleEvent");\r
+                       Assert.AreEqual (false, modeChanging, "BeforeCancelBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Cancel");\r
+                       Assert.AreEqual (true, itemCommand, "AfterCancelCommandBubbleEvent");\r
+                       Assert.AreEqual (true, modeChanging, "AfterCancelBubbleEvent");\r
+\r
+                       //Edit\r
+                       itemCommand = false;\r
+                       modeChanging = false;\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Edit", null));\r
+                       Assert.AreEqual (false, itemCommand, "BeforeEditCommandBubbleEvent");\r
+                       Assert.AreEqual (false, modeChanging, "BeforeEditBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Edit");\r
+                       Assert.AreEqual (true, itemCommand, "AfterEditCommandBubbleEvent");\r
+                       Assert.AreEqual (true, modeChanging, "AfterEditBubbleEvent");\r
+\r
+                       //New\r
+                       itemCommand = false;\r
+                       modeChanging = false;\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("New", null));\r
+                       Assert.AreEqual (false, itemCommand, "BeforeNewCommandBubbleEvent");\r
+                       Assert.AreEqual (false, modeChanging, "BeforeNewBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - New");\r
+                       Assert.AreEqual (true, itemCommand, "AfterNewCommandBubbleEvent");\r
+                       Assert.AreEqual (true, modeChanging, "AfterNewBubbleEvent");\r
+\r
+                       //Page Index default\r
+                       itemCommand = false;\r
+                       fv.PageIndexChanging += new FormViewPageEventHandler (fv_PageIndexChanging);\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", null));\r
+                       Assert.AreEqual (false, itemCommand, "BeforePageCommandBubbleEvent");\r
+                       Assert.AreEqual (false, pageIndexChanging, "BeforePageBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Page Index default");\r
+                       Assert.AreEqual (true, itemCommand, "AfterPageCommandBubbleEvent");\r
+                       Assert.AreEqual (true, pageIndexChanging, "AfterPageBubbleEvent");\r
+                       Assert.AreEqual (-1, newPageIndex, "PageIndex");\r
+\r
+                       //Next Page\r
+                       itemCommand = false;\r
+                       pageIndexChanging = false;\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Next"));\r
+                       Assert.AreEqual (false, itemCommand, "BeforeNextPageCommandBubbleEvent");\r
+                       Assert.AreEqual (false, pageIndexChanging, "BeforeNextPageBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Next Page");\r
+                       Assert.AreEqual (true, itemCommand, "AfterNextPageCommandBubbleEvent");\r
+                       Assert.AreEqual (true, pageIndexChanging, "AfterNextPageBubbleEvent");\r
+                       Assert.AreEqual (1, newPageIndex, "NextPageIndex");\r
+\r
+                       //Prev Page\r
+                       itemCommand = false;\r
+                       pageIndexChanging = false;\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Prev"));\r
+                       Assert.AreEqual (false, itemCommand, "BeforePrevPageCommandBubbleEvent");\r
+                       Assert.AreEqual (false, pageIndexChanging, "BeforePrevPageBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Prev Page");\r
+                       Assert.AreEqual (true, itemCommand, "AfterPrevPageCommandBubbleEvent");\r
+                       Assert.AreEqual (true, pageIndexChanging, "AfterPrevPageBubbleEvent");\r
+                       Assert.AreEqual (-1, newPageIndex, "PrevPageIndex");\r
+\r
+                       //First Page\r
+                       itemCommand = false;\r
+                       pageIndexChanging = false;\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", "First"));\r
+                       Assert.AreEqual (false, itemCommand, "BeforeFirstPageCommandBubbleEvent");\r
+                       Assert.AreEqual (false, pageIndexChanging, "BeforeFirstPageBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - First Page");\r
+                       Assert.AreEqual (true, itemCommand, "AfterFirstPageCommandBubbleEvent");\r
+                       Assert.AreEqual (true, pageIndexChanging, "AfterFirstPageBubbleEvent");\r
+                       Assert.AreEqual (0, newPageIndex, "FirstPageIndex");\r
+\r
+                       //Last Page\r
+                       itemCommand = false;\r
+                       pageIndexChanging = false;\r
+                       com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Last"));\r
+                       Assert.AreEqual (false, itemCommand, "BeforeLastPageCommandBubbleEvent");\r
+                       Assert.AreEqual (false, pageIndexChanging, "BeforeLastPageBubbleEvent");\r
+                       Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Last Page");\r
+                       Assert.AreEqual (true, itemCommand, "AfterLastPageCommandBubbleEvent");\r
+                       Assert.AreEqual (true, pageIndexChanging, "AfterLastPageBubbleEvent");\r
+                       Assert.AreEqual (5, newPageIndex, "FirstPageIndex");\r
+\r
+               }\r
+\r
+\r
+               [Test]\r
+               public void FormView_Events ()\r
+               {\r
+                       ResetEvents ();\r
+                       Poker fv = new Poker ();\r
+                       fv.Page = new Page ();\r
+                       fv.Init += new EventHandler (fv_Init);\r
+                       fv.ItemCommand += new FormViewCommandEventHandler (fv_ItemCommand);\r
+                       fv.ItemCreated += new EventHandler (fv_ItemCreated);\r
+                       fv.ItemDeleted += new FormViewDeletedEventHandler (fv_ItemDeleted);\r
+                       fv.ItemDeleting += new FormViewDeleteEventHandler (fv_ItemDeleting);\r
+                       fv.ItemInserted += new FormViewInsertedEventHandler (fv_ItemInserted);\r
+                       fv.ItemInserting += new FormViewInsertEventHandler (fv_ItemInserting);\r
+                       fv.ItemUpdated += new FormViewUpdatedEventHandler (fv_ItemUpdated);\r
+                       fv.ItemUpdating += new FormViewUpdateEventHandler (fv_ItemUpdating);\r
+                       fv.ModeChanged += new EventHandler (fv_ModeChanged);\r
+                       fv.ModeChanging += new FormViewModeEventHandler (fv_ModeChanging);\r
+                       fv.PageIndexChanged += new EventHandler (fv_PageIndexChanged);\r
+                       fv.PageIndexChanging += new FormViewPageEventHandler (fv_PageIndexChanging);\r
+\r
+                       Assert.AreEqual (false, init, "BeforeInit");\r
+                       fv.DoOnInit (new EventArgs ());\r
+                       Assert.AreEqual (true, init, "AfterInit");\r
+                       Assert.AreEqual (false, itemCommand, "BeforeItemCommandEvent");\r
+                       Button bt = new Button ();\r
+                       fv.DoOnItemCommand (new FormViewCommandEventArgs (bt, new CommandEventArgs ("", null)));\r
+                       Assert.AreEqual (true, itemCommand, "AfterItemCommandEvent");\r
+                       Assert.AreEqual (false, itemCreated, "BeforeItemCreatedEvent");\r
+                       fv.DoOnItemCreated (new EventArgs ());\r
+                       Assert.AreEqual (true, itemCreated, "AfterItemCreatedEvent");\r
+                       Assert.AreEqual (false, itemDeleted, "BeforeItemDeletedEvent");\r
+                       fv.DoOnItemDeleted (new FormViewDeletedEventArgs (3, new Exception ()));\r
+                       Assert.AreEqual (true, itemDeleted, "AfterItemDeletedEvent");\r
+                       Assert.AreEqual (false, itemDeleting, "BeforeItemDeletingEvent");\r
+                       fv.DoOnItemDeleting (new FormViewDeleteEventArgs (1));\r
+                       Assert.AreEqual (true, itemDeleting, "AfterItemDeletingEvent");\r
+                       Assert.AreEqual (false, itemInserted, "BeforeItemInsertedEvent");\r
+                       fv.DoOnItemInserted (new FormViewInsertedEventArgs (2, new Exception ()));\r
+                       Assert.AreEqual (true, itemInserted, "AfterItemInsetedEvent");\r
+                       Assert.AreEqual (false, itemInserting, "BeforeItemInsertingEvent");\r
+                       fv.DoOnItemInserting (new FormViewInsertEventArgs (bt));\r
+                       Assert.AreEqual (true, itemInserting, "AfterItemInsetingEvent");\r
+                       Assert.AreEqual (false, itemUpdated, "BeforeItemUpdatedEvent");\r
+                       fv.DoOnItemUpdated (new FormViewUpdatedEventArgs (1, new Exception ()));\r
+                       Assert.AreEqual (true, itemUpdated, "AfterItemUpdatedEvent");\r
+                       Assert.AreEqual (false, itemUpdating, "BeforeItemUpdatingEvent");\r
+                       fv.DoOnItemUpdating (new FormViewUpdateEventArgs (bt));\r
+                       Assert.AreEqual (true, itemUpdating, "AfterItemUpdatingEvent");\r
+                       Assert.AreEqual (false, modeChanged, "BeforeModeChangedEvent");\r
+                       fv.DoOnModeChanged (new EventArgs ());\r
+                       Assert.AreEqual (true, modeChanged, "AfterModeChangedEvent");\r
+                       Assert.AreEqual (false, modeChanging, "BeforeModeChangingEvent");\r
+                       fv.DoOnModeChanging (new FormViewModeEventArgs (FormViewMode.Edit, true));\r
+                       Assert.AreEqual (true, modeChanging, "AfterModeChangingEvent");\r
+                       Assert.AreEqual (false, pageIndexChanged, "BeforePageIndexChangedEvent");\r
+                       fv.DoOnPageIndexChanged (new EventArgs ());\r
+                       Assert.AreEqual (true, pageIndexChanged, "AfterPageIndexChangedEvent");\r
+                       Assert.AreEqual (false, pageIndexChanging, "BeforePageIndexChangingEvent");\r
+                       fv.DoOnPageIndexChanging (new FormViewPageEventArgs (1));\r
+                       Assert.AreEqual (true, pageIndexChanging, "AfterPageIndexChangingEvent");\r
+               }\r
+               private void fv_Init (object sender, EventArgs e)\r
+               {\r
+                       init = true;\r
+               }\r
+\r
+               private void fv_ItemCommand (object sender, FormViewCommandEventArgs e)\r
+               {\r
+                       itemCommand = true;\r
+               }\r
+\r
+               private void fv_ItemCreated (object sender, EventArgs e)\r
+               {\r
+                       itemCreated = true;\r
+               }\r
+\r
+               private void fv_ItemDeleted (object sender, FormViewDeletedEventArgs e)\r
+               {\r
+                       itemDeleted = true;\r
+               }\r
+\r
+               private void fv_ItemDeleting (object sender, FormViewDeleteEventArgs e)\r
+               {\r
+                       itemDeleting = true;\r
+               }\r
+\r
+               private void fv_ItemInserted (object sender, FormViewInsertedEventArgs e)\r
+               {\r
+                       itemInserted = true;\r
+               }\r
+\r
+               private void fv_ItemInserting (object sender, FormViewInsertEventArgs e)\r
+               {\r
+                       itemInserting = true;\r
+               }\r
+\r
+               private void fv_ItemUpdated (object sender, FormViewUpdatedEventArgs e)\r
+               {\r
+                       itemUpdated = true;\r
+               }\r
+\r
+               private void fv_ItemUpdating (object sender, FormViewUpdateEventArgs e)\r
+               {\r
+                       itemUpdating = true;\r
+               }\r
+\r
+               private void fv_ModeChanged (object sender, EventArgs e)\r
+               {\r
+                       modeChanged = true;\r
+               }\r
+\r
+               private void fv_ModeChanging (object sender, FormViewModeEventArgs e)\r
+               {\r
+                       modeChanging = true;\r
+               }\r
+\r
+               private void fv_PageIndexChanged (object sender, EventArgs e)\r
+               {\r
+                       pageIndexChanged = true;\r
+               }\r
+               private void fv_PageIndexChanging (object sender, FormViewPageEventArgs e)\r
+               {\r
+                       pageIndexChanging = true;\r
+                       newPageIndex = e.NewPageIndex;\r
+                       e.NewPageIndex = -1;\r
+               }\r
+\r
+               //Exceptions            \r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
+               public void CellPaddingException ()\r
+               {\r
+                      Poker p = new Poker ();\r
+                       p.CellPadding = -2;\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
+               public void CellSpacingException ()\r
+               {\r
+                       Poker p = new Poker ();\r
+                       p.CellSpacing = -5;\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
+               public void PageIndexException ()\r
+               {\r
+                       Poker p = new Poker ();\r
+                       p.PageIndex = -5;\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (HttpException))]\r
+               public void InsertItemException ()\r
+               {\r
+                       Poker p = new Poker ();\r
+                       p.InsertItem (true); \r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (HttpException))]\r
+               public void UpdateItemException ()\r
+               {\r
+                       Poker p = new Poker ();\r
+                       p.UpdateItem (true);\r
+               }\r
+\r
+               \r
+               [Test]\r
+               [Category ("NotDotNet")] //TODO\r
+               public void PageIndex ()\r
+               {\r
+                       ObjectDataSource ds = new ObjectDataSource ();\r
+                       ds.ID = "ObjectDataSource1";\r
+                       ds.TypeName = "System.Guid";\r
+                       ds.SelectMethod = "ToByteArray";                        \r
+                       Page p = new Page ();\r
+                       Poker f = new Poker ();\r
+                       f.Page = p;\r
+                       ds.Page = p;\r
+                       p.Controls.Add (f);\r
+                       p.Controls.Add (ds);\r
+                       f.DataSourceID = "ObjectDataSource1";\r
+                       f.DoConfirmInitState ();\r
+                       f.DoOnPreRender (EventArgs.Empty);\r
+                       object cur = f.DataItem;\r
+                       f.PageIndex = 1;\r
+                       Assert.IsTrue (cur != f.DataItem, "#01");\r
+\r
+CommandEventArgs cargs = new CommandEventArgs ("Page", "Prev");\r
+                       FormViewCommandEventArgs fvargs = new FormViewCommandEventArgs (f, cargs);\r
+                       f.DoOnBubbleEvent (f, fvargs);\r
+                       Assert.IsTrue (f.OnPageIndexChangingCalled, "#02");\r
+                       Assert.IsTrue (f.OnPageIndexChangedCalled, "#03");\r
+                       f.OnPageIndexChangingCalled = false;\r
+                       f.OnPageIndexChangedCalled = false;\r
+\r
+                       f.DoOnBubbleEvent (f, fvargs);\r
+                       Assert.IsTrue (f.OnPageIndexChangingCalled, "#04");\r
+                       Assert.IsFalse (f.OnPageIndexChangedCalled, "#05");\r
+                       f.OnPageIndexChangingCalled = false;\r
+                       f.OnPageIndexChangedCalled = false;\r
+\r
+                       f.PageIndex = f.PageCount - 1;\r
+                       cargs = new CommandEventArgs ("Page", "Next");\r
+                       fvargs = new FormViewCommandEventArgs (f, cargs);\r
+                       f.DoOnBubbleEvent (f, fvargs);\r
+                       Assert.IsTrue (f.OnPageIndexChangingCalled, "#06");\r
+                       Assert.IsFalse (f.OnPageIndexChangedCalled, "#07");\r
+                       f.OnPageIndexChangingCalled = false;\r
+                       f.OnPageIndexChangedCalled = false;\r
+               }\r
+               \r
+               [Test]\r
+               public void PageCount ()\r
+               {\r
+                       ObjectDataSource ds = new ObjectDataSource ();\r
+                       ds.ID = "ObjectDataSource1";\r
+                       ds.TypeName = "System.Guid";\r
+                       ds.SelectMethod = "ToByteArray";\r
+                       Page p = new Page ();\r
+                       Poker f = new Poker ();\r
+                       f.Page = p;\r
+                       ds.Page = p;\r
+                       p.Controls.Add (f);\r
+                       p.Controls.Add (ds);\r
+                       f.DataSourceID = "ObjectDataSource1";\r
+                       f.DoConfirmInitState ();\r
+                       f.DoOnPreRender (EventArgs.Empty);\r
+                       f.PageIndex = 1;\r
+                       Assert.AreEqual (16, f.PageCount, "#01");\r
+               } \r
+               \r
+               [Test]\r
+               public void InsertTemplate () {\r
+                       ObjectDataSource ds = new ObjectDataSource ();\r
+                       ds.ID = "ObjectDataSource1";\r
+                       ds.TypeName = "System.Collections.ArrayList";\r
+                       ds.SelectMethod = "ToArray";\r
+                       Page p = new Page ();\r
+                       Poker f = new Poker ();\r
+                       Template itemTemplate = new Template ();\r
+                       Template emptyTemplate = new Template ();\r
+                       Template insertTemplate = new Template ();\r
+                       f.ItemTemplate = itemTemplate;\r
+                       f.EmptyDataTemplate = emptyTemplate;\r
+                       f.InsertItemTemplate = insertTemplate;\r
+                       f.DefaultMode = FormViewMode.Insert;\r
+                       f.Page = p;\r
+                       ds.Page = p;\r
+                       p.Controls.Add (f);\r
+                       p.Controls.Add (ds);\r
+                       f.DataSourceID = "ObjectDataSource1";\r
+                       f.DoConfirmInitState ();\r
+                       f.DoOnPreRender (EventArgs.Empty);\r
+                       \r
+                       f.AllowPaging = true;\r
+                       Assert.IsFalse(itemTemplate.Instantiated, "#01");\r
+                       Assert.IsFalse(emptyTemplate.Instantiated, "#02");\r
+                       Assert.IsTrue(insertTemplate.Instantiated, "#03");\r
+               }\r
+               \r
+               [TestFixtureTearDown]\r
+               public void TearDown ()\r
+               {\r
+                       Thread.Sleep (100);\r
+                       //WebTest.Unload ();\r
+               }\r
+       \r
+               //[TestFixtureStartUp]\r
+               //public void StartUp ()\r
+               //{\r
+               //      WebTest.CopyResource (GetType (), "FormView.aspx", "FormView.aspx");\r
+               //}\r
+\r
+               [Test]\r
+               [Category("NunitWeb")]\r
+               public void FormViewCssClass ()\r
+               {\r
+                       string res = new WebTest ("FormView.aspx").Run ();\r
+                       Assert.IsTrue (Regex.IsMatch (\r
+                               res, ".*<table[^>]*class=\"[^\"]*test1[^\"]*\"[^>]*>.*",\r
+                               RegexOptions.IgnoreCase|RegexOptions.Singleline),\r
+                               "check that <table class=\"test1\"> is found. Actual: "+res);\r
+                       Assert.IsFalse (Regex.IsMatch (\r
+                               res, ".*<table[^>]*class=\"\"[^>]*>.*",\r
+                               RegexOptions.IgnoreCase|RegexOptions.Singleline),\r
+                               "check that <table class=\"\"> is not found. Actual: "+res);\r
+               }\r
+\r
+\r
+\r
+\r
+               [Test]\r
+               public void FormView_RenderSimpleTemplate()\r
+               {\r
+                       string RenderedPageHtml = new WebTest ("FormViewTest1.aspx").Run ();                    \r
+                       string newHtmlValue = RenderedPageHtml.Substring (RenderedPageHtml.IndexOf ("test1") + 5, RenderedPageHtml.IndexOf ("test2") - RenderedPageHtml.IndexOf ("test1") - 5);                 \r
+                       string origHtmlValue = @" &nbsp;<table cellspacing=""2"" cellpadding=""3"" rules=""all"" border=""1"" id=""FormView1"" style=""background-color:#DEBA84;border-color:#DEBA84;border-width:1px;border-style:None;"">\r
+                                               <tr style=""color:#8C4510;background-color:#FFF7E7;"">\r
+                                               <td colspan=""2"">\r
+                                                <span id=""FormView1_Label1"">1</span>\r
+                                                </td>\r
+                                               </tr><tr align=""center"" style=""color:#8C4510;"">\r
+                                               <td colspan=""2""><table border=""0"">\r
+                                               <tr>\r
+                                               <td><span>1</span></td><td><a href=""javascript:__doPostBack('FormView1','Page$2')"" style=""color:#8C4510;"">2</a></td><td><a href=""javascript:__doPostBack('FormView1','Page$3')"" style=""color:#8C4510;"">3</a></td><td><a href=""javascript:__doPostBack('FormView1','Page$4')"" style=""color:#8C4510;"">4</a></td><td><a href=""javascript:__doPostBack('FormView1','Page$5')"" style=""color:#8C4510;"">5</a></td><td><a href=""javascript:__doPostBack('FormView1','Page$6')"" style=""color:#8C4510;"">6</a></td>\r
+                                               </tr>\r
+                                               </table></td>\r
+                                               </tr>\r
+                                               </table>";         \r
+        \r
+                       HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderSimpleTemplate");                  \r
+\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_RenderFooterAndPager()\r
+               {\r
+                       string RenderedPageHtml = new WebTest ("FormViewTest1.aspx").Run ();                    \r
+                       string newHtmlValue = RenderedPageHtml.Substring (RenderedPageHtml.IndexOf ("test2") + 5, RenderedPageHtml.IndexOf ("test3") - RenderedPageHtml.IndexOf ("test2") - 5);\r
+                       string origHtmlValue = @" <table cellspacing=""0"" cellpadding=""4"" border=""0"" id=""FormView2"" style=""color:#333333;border-collapse:collapse;"">\r
+                                               <tr style=""color:#333333;background-color:#F7F6F3;"">\r
+                                               <td colspan=""2"">\r
+                                                <span id=""FormView2_Label2"">1</span>\r
+                                                </td>\r
+                                               </tr><tr style=""color:White;background-color:#5D7B9D;font-weight:bold;"">\r
+                                               <td colspan=""2"">\r
+                                               <span id=""FormView2_Label3"">Footer Template Test</span>\r
+                                                </td>\r
+                                               </tr><tr align=""center"" style=""color:White;background-color:#284775;"">\r
+                                               <td colspan=""2"">\r
+                                               <input type=""submit"" name=""FormView2$ctl01$Button1"" value=""Prev Item"" id=""FormView2_ctl01_Button1"" />\r
+                                               <input type=""submit"" name=""FormView2$ctl01$Button2"" value=""Next Item"" id=""FormView2_ctl01_Button2"" />\r
+                                                <input type=""submit"" name=""FormView2$ctl01$Button3"" value=""First Item"" id=""FormView2_ctl01_Button3"" />\r
+                                                <input type=""submit"" name=""FormView2$ctl01$Button4"" value=""Last Item"" id=""FormView2_ctl01_Button4"" />\r
+                                                </td>\r
+                                               </tr>\r
+                                               </table>    \r
+                                               </div>";    \r
+                       HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "FormView_RenderFooterAndPager");\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NunitWeb")]\r
+               public void FormView_RenderWithHeader()\r
+               {\r
+                       string RenderedPageHtml = new WebTest ("FormViewTest1.aspx").Run ();\r
+                       string newHtmlValue = RenderedPageHtml.Substring (RenderedPageHtml.IndexOf ("test4") + 5, RenderedPageHtml.IndexOf ("endtest") - RenderedPageHtml.IndexOf ("test4") - 5);\r
+                       string origHtmlValue = @" <table cellspacing=""10"" cellpadding=""3"" align=""Right"" rules=""all"" border=""1"" id=""FormView4"" style=""background-color:White;border-color:#CCCCCC;border-width:1px;border-style:None;"">\r
+                                               <tr align=""left"" style=""color:White;background-color:#006699;font-weight:bold;"">\r
+                                               <td colspan=""2"">Using Header Text property</td>\r
+                                               </tr><tr align=""center"" style=""color:#000066;background-color:Maroon;"">\r
+                                               <td colspan=""2"">Using Footer Text property</td>\r
+                                               </tr><tr align=""left"" style=""color:#000066;background-color:LightGrey;"">\r
+                                               <td colspan=""2"">\r
+                                               <a id=""FormView4_ctl01_LinkButton1"" href=""javascript:__doPostBack('FormView4$ctl01$LinkButton1','')"">Next</a>\r
+                                                <a id=""FormView4_ctl01_LinkButton2"" href=""javascript:__doPostBack('FormView4$ctl01$LinkButton2','')"">Prev</a>\r
+                                               <span id=""FormView4_ctl01_Label7"">Page Index: 0</span>\r
+                                               </td>\r
+                                               </tr>\r
+                                               </table>";                      \r
+                       HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderingDefaultPaging");\r
+               }\r
+\r
+\r
+               [Test]\r
+               [Category ("NunitWeb")]\r
+               public void FormView_Render ()\r
+               {\r
+                       string RenderedPageHtml = new WebTest ("FormViewTest1.aspx").Run ();\r
+                       string newHtmlValue = RenderedPageHtml.Substring (RenderedPageHtml.IndexOf ("test3") + 5, RenderedPageHtml.IndexOf ("test4") - RenderedPageHtml.IndexOf ("test3") - 5);\r
+                       string origHtmlValue = @" <table cellspacing=""0"" cellpadding=""2"" border=""0"" id=""FormView3"" style=""color:Black;background-color:LightGoldenrodYellow;border-color:Tan;border-width:1px;border-style:solid;border-collapse:collapse;"">\r
+                               <tr align=""center"" valign=""top"" style=""color:#C00000;background-color:Tan;font-weight:bold;"">\r
+                               <td colspan=""2"">\r
+                               <span id=""FormView3_Label5"">Header Template Test</span>\r
+                               </td>\r
+                               </tr><tr>\r
+                               <td colspan=""2"">\r
+                               <span id=""FormView3_Label4"">1</span>\r
+                               </td>\r
+                               </tr><tr align=""center"" style=""color:DarkSlateBlue;background-color:PaleGoldenrod;"">\r
+                               <td colspan=""2""><table border=""0"">\r
+                               <tr>\r
+                               <td><span>1</span></td><td>\r
+                               <a href=""javascript:__doPostBack('FormView3','Page$2')"" style=""color:DarkSlateBlue;"">2</a></td><td>\r
+                               <a href=""javascript:__doPostBack('FormView3','Page$3')"" style=""color:DarkSlateBlue;"">3</a></td><td>\r
+                               <a href=""javascript:__doPostBack('FormView3','Page$4')"" style=""color:DarkSlateBlue;"">4</a></td><td>\r
+                               <a href=""javascript:__doPostBack('FormView3','Page$5')"" style=""color:DarkSlateBlue;"">5</a></td><td>\r
+                               <a href=""javascript:__doPostBack('FormView3','Page$6')"" style=""color:DarkSlateBlue;"">6</a></td>\r
+                               </tr><tr align=""right"" style=""color:#FFC0FF;background-color:Tan;"">\r
+                               <td colspan=""2"">\r
+                               <span id=""FormView3_Label6"">FormView Footer</span>\r
+                               </td>\r
+                               </tr>\r
+                               </table></td>\r
+                               </tr>\r
+                               </table>";        \r
+                       HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderingDefaultPaging");\r
+               }\r
+               \r
+\r
+               [Test]\r
+               [Category ("NotDotNet")] // becaue Naming container: use "FormView1$....." for DotNet\r
+               [Category ("NotWorking")]\r
+               public void FormView_EditPostback ()\r
+               {\r
+                       WebTest t = new WebTest ("FormViewInsertEditDelete.aspx");\r
+                       string pageHTML = t.Run ();\r
+                       string newHtml = pageHTML.Substring (pageHTML.IndexOf ("start") + 5, pageHTML.IndexOf ("end") - pageHTML.IndexOf ("start") - 5);\r
+                       string origHtml = @" <div> \r
+                                       &nbsp;\r
+                                       <table cellspacing=""0"" border=""0"" id=""FormView1"" style=""border-collapse:collapse;"">\r
+                                       <tr>\r
+                                       <td colspan=""2"">\r
+                                       <span id=""FormView1_ID"">1001</span>&nbsp;\r
+                                        <span id=""FormView1_LName"">Chand</span>                \r
+                                        <span id=""FormView1_FName"">Mahesh</span>&nbsp;\r
+                                       <a id=""FormView1_EditButton"" href=""javascript:__doPostBack('FormView1$EditButton','')"">Edit</a>\r
+                                        <a id=""FormView1_NewButton"" href=""javascript:__doPostBack('FormView1$NewButton','')"">New</a>\r
+                                       <a id=""FormView1_DeleteButton"" href=""javascript:__doPostBack('FormView1$DeleteButton','')"">Delete</a>\r
+                                       </td>\r
+                                       </tr><tr>\r
+                                       <td colspan=""2""><table border=""0"">\r
+                                       <tr>\r
+                                       <td><span>1</span></td><td><a href=""javascript:__doPostBack('FormView1','Page$2')"">2</a></td><td><a href=""javascript:__doPostBack('FormView1','Page$3')"">3</a></td>\r
+                                       </tr>\r
+                                       </table></td>\r
+                                       </tr>\r
+                                       </table>     \r
+                                        </div>";\r
+                       HtmlDiff.AssertAreEqual (origHtml, newHtml, "BeforeEditPostback");\r
+\r
+                       //Edit button postback (change to edit mode - buttons "Update" and "Cancel" should appear.\r
+                       \r
+                       FormRequest fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");\r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:EditButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";\r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();\r
+                       newHtml = pageHTML.Substring (pageHTML.IndexOf ("start") + 5, pageHTML.IndexOf ("end") - pageHTML.IndexOf ("start") - 5);\r
+                       origHtml = @" <div>\r
+                                       &nbsp;\r
+                                       <table cellspacing=""0"" border=""0"" id=""FormView1"" style=""border-collapse:collapse;"">\r
+                                       <tr>\r
+                                       <td colspan=""2"">                \r
+                                        Enter First Name:<input name=""FormView1$FNameEdit"" type=""text"" value=""Mahesh"" id=""FormView1_FNameEdit"" /><br />\r
+                                        Enter Last Name:<input name=""FormView1$LNameEdit"" type=""text"" value=""Chand"" id=""FormView1_LNameEdit"" /><br />\r
+                                        <a id=""FormView1_UpdateButton"" href=""javascript:__doPostBack('FormView1$UpdateButton','')"">Update</a>\r
+                                       <a id=""FormView1_CancelUpdateButton"" href=""javascript:__doPostBack('FormView1$CancelUpdateButton','')"">Cancel</a>\r
+                                        </td>\r
+                                       </tr><tr>\r
+                                       <td colspan=""2""><table border=""0"">\r
+                                       <tr>\r
+                                       <td><span>1</span></td><td><a href=""javascript:__doPostBack('FormView1','Page$2')"">2</a></td><td><a href=""javascript:__doPostBack('FormView1','Page$3')"">3</a></td>\r
+                                       </tr>\r
+                                       </table></td>\r
+                                       </tr>\r
+                                       </table>    \r
+                                       </div>";\r
+                       HtmlDiff.AssertAreEqual (origHtml, newHtml, "AfterEditPostback");\r
+\r
+                       //Update record postback                \r
+                       \r
+                       fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");\r
+                       fr.Controls.Add ("FormView1:FNameEdit");\r
+                       fr.Controls.Add ("FormView1:LNameEdit");\r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:UpdateButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";                      \r
+                       fr.Controls["FormView1:FNameEdit"].Value = "Merav";\r
+                       fr.Controls["FormView1:LNameEdit"].Value = "Test";                      \r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();\r
+                       newHtml = pageHTML.Substring (pageHTML.IndexOf ("start") + 5, pageHTML.IndexOf ("end") - pageHTML.IndexOf ("start") - 5);\r
+                       origHtml=@"  <div>\r
+                               &nbsp;\r
+                                <table cellspacing=""0"" border=""0"" id=""FormView1"" style=""border-collapse:collapse;"">\r
+                               <tr>\r
+                               <td colspan=""2"">\r
+                               <span id=""FormView1_ID"">1001</span>&nbsp;\r
+                                <span id=""FormView1_LName"">Test</span>                \r
+                               <span id=""FormView1_FName"">Merav</span>&nbsp;\r
+                               <a id=""FormView1_EditButton"" href=""javascript:__doPostBack('FormView1$EditButton','')"">Edit</a>\r
+                               <a id=""FormView1_NewButton"" href=""javascript:__doPostBack('FormView1$NewButton','')"">New</a>\r
+                               <a id=""FormView1_DeleteButton"" href=""javascript:__doPostBack('FormView1$DeleteButton','')"">Delete</a>\r
+                               </td>\r
+                               </tr><tr>\r
+                               <td colspan=""2""><table border=""0"">\r
+                               <tr>\r
+                               <td><span>1</span></td><td><a href=""javascript:__doPostBack('FormView1','Page$2')"">2</a></td><td><a href=""javascript:__doPostBack('FormView1','Page$3')"">3</a></td>\r
+                               </tr>\r
+                               </table></td>\r
+                               </tr>\r
+                               </table>     \r
+                               </div>";\r
+                       HtmlDiff.AssertAreEqual (origHtml, newHtml, "AfterUpdatePostback"); \r
+  \r
+                       //Postback to return to Edit mode\r
+                       fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");\r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:EditButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";                      \r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();\r
+                       newHtml = pageHTML.Substring (pageHTML.IndexOf ("start") + 5, pageHTML.IndexOf ("end") - pageHTML.IndexOf ("start") - 5);\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Merav"), "EditModePostback1");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("CancelUpdateButton"), "EditModePostback2"); \r
+\r
+                       // Cancel edited record postback\r
+                       fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");\r
+                       fr.Controls.Add ("FormView1:FNameEdit");\r
+                       fr.Controls.Add ("FormView1:LNameEdit");\r
+                       fr.Controls["FormView1:FNameEdit"].Value = "EditFirstName";\r
+                       fr.Controls["FormView1:LNameEdit"].Value = "EditLastName";\r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:CancelUpdateButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";\r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();\r
+                       newHtml = pageHTML.Substring (pageHTML.IndexOf ("start") + 5, pageHTML.IndexOf ("end") - pageHTML.IndexOf ("start") - 5);\r
+                       origHtml = @" <div>\r
+                                       &nbsp;\r
+                                        <table cellspacing=""0"" border=""0"" id=""FormView1"" style=""border-collapse:collapse;"">\r
+                                       <tr>\r
+                                       <td colspan=""2"">\r
+                                       <span id=""FormView1_ID"">1001</span>&nbsp;\r
+                                       <span id=""FormView1_LName"">Test</span>                \r
+                                       <span id=""FormView1_FName"">Merav</span>&nbsp;\r
+                                        <a id=""FormView1_EditButton"" href=""javascript:__doPostBack('FormView1$EditButton','')"">Edit</a>\r
+                                       <a id=""FormView1_NewButton"" href=""javascript:__doPostBack('FormView1$NewButton','')"">New</a>\r
+                                        <a id=""FormView1_DeleteButton"" href=""javascript:__doPostBack('FormView1$DeleteButton','')"">Delete</a>\r
+                                        </td>\r
+                                       </tr><tr>\r
+                                       <td colspan=""2""><table border=""0"">\r
+                                       <tr>\r
+                                       <td><span>1</span></td><td><a href=""javascript:__doPostBack('FormView1','Page$2')"">2</a></td><td><a href=""javascript:__doPostBack('FormView1','Page$3')"">3</a></td>\r
+                                       </tr>\r
+                                       </table></td>\r
+                                       </tr>\r
+                                       </table>     \r
+                                       </div>";\r
+                       HtmlDiff.AssertAreEqual (origHtml, newHtml, "CancelEditedRecordPostback");   \r
+                       \r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               [Category ("NotDotNet")] // becaue Naming container: use "FormView1$....." for DotNet\r
+               public void FormView_InsertPostback ()\r
+               {\r
+                       WebTest t = new WebTest ("FormViewInsertEditDelete.aspx");\r
+                       string pageHTML = t.Run ();\r
+                       Assert.AreEqual (true, pageHTML.Contains ("1001"), "BeforeInsert1");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Mahesh"), "BeforeInsert2");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Chand"), "BeforeInsert3");\r
+                       Assert.AreEqual (false, pageHTML.Contains ("Page$4"), "BeforeInsert4");\r
+                       FormRequest fr = new FormRequest (t.Response, "form1"); \r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");                    \r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:NewButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";                                              \r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();\r
+                       string newHtml = pageHTML.Substring (pageHTML.IndexOf ("start") + 5, pageHTML.IndexOf ("end") - pageHTML.IndexOf ("start") - 5);\r
+                       string origHtml = @" <div>\r
+                       &nbsp;\r
+                       <table cellspacing=""0"" border=""0"" id=""FormView1"" style=""border-collapse:collapse;"">\r
+                       <tr>\r
+                       <td colspan=""2"">\r
+                       Insert ID:\r
+                        <input name=""FormView1$IDInsert"" type=""text"" id=""FormView1_IDInsert"" /><br />\r
+                       Insert First Name:\r
+                        <input name=""FormView1$FNameInsert"" type=""text"" id=""FormView1_FNameInsert"" />\r
+                       <br />\r
+                       Insert Last Name:&nbsp;\r
+                        <input name=""FormView1$LNameInsert"" type=""text"" id=""FormView1_LNameInsert"" />\r
+                       <a id=""FormView1_InsertButton"" href=""javascript:__doPostBack('FormView1$InsertButton','')"">Insert</a>\r
+                       <a id=""FormView1_CancelInsertButton"" href=""javascript:__doPostBack('FormView1$CancelInsertButton','')"">Cancel</a>\r
+                       </td>\r
+                       </tr>\r
+                       </table>   \r
+                        </div>";\r
+                       HtmlDiff.AssertAreEqual (origHtml, newHtml, "InsertPostback");\r
+\r
+                       //Insert new record\r
+\r
+                       fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");\r
+                       fr.Controls.Add ("FormView1:IDInsert");\r
+                       fr.Controls.Add ("FormView1:FNameInsert");\r
+                       fr.Controls.Add ("FormView1:LNameInsert");\r
+                       fr.Controls["FormView1:IDInsert"].Value = "33";\r
+                       fr.Controls["FormView1:FNameInsert"].Value = "InsertFirstName";\r
+                       fr.Controls["FormView1:LNameInsert"].Value ="InsertLastName";\r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:InsertButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";\r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();                    \r
+                       Assert.AreEqual (true, pageHTML.Contains ("1001"), "AfterInsert1");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Mahesh"), "AfterInsert2");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Chand"), "AfterInsert3");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Page$4"), "AfterInsert4");\r
+\r
+                       //Checking that the inserted record appears on page 4.\r
+\r
+                       fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");                    \r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "Page$4";\r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();\r
+                       Assert.AreEqual (true, pageHTML.Contains ("33"), "AfterInsert1");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("InsertLastName"), "AfterInsert2");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("InsertFirstName"), "AfterInsert3");\r
+                       \r
+               }               \r
+\r
+               [Test]\r
+               [Category ("NotDotNet")] // becaue Naming container: use "FormView1$DeleteButton" for DotNet\r
+               public void FormView_DeleteAndEmptyTemplatePostback ()\r
+               {\r
+                       WebTest t = new WebTest ("FormViewInsertEditDelete.aspx");\r
+                       string pageHTML = t.Run ();\r
+                       //Before Delete\r
+                       Assert.AreEqual (true, pageHTML.Contains ("1001"), "BeforeDelete1");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Mahesh"), "BeforeDelete2");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Chand"), "BeforeDelete3");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Page$3"), "BeforeDelete4");  \r
+                       //Delete First Item\r
+                       FormRequest fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");\r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:DeleteButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";\r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();                    \r
+                       Assert.AreEqual (true, pageHTML.Contains ("1002"), "AfterFirstDelete1");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Talmadge"), "AfterFirstDelete2");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Melanie"), "AfterFirstDelete3");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Page$2"), "AfterFirstDelete4");\r
+                       Assert.AreEqual (false, pageHTML.Contains ("Page$3"), "AfterFirstDelete5");\r
+\r
+                       //Delete second item\r
+\r
+                       fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");\r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:DeleteButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";\r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();\r
+                       Assert.AreEqual (true, pageHTML.Contains ("1003"), "AfterSecondDelete1");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Bansal"), "AfterSecondDelete2");\r
+                       Assert.AreEqual (true, pageHTML.Contains ("Vinay"), "AfterSecondDelete3");\r
+                       Assert.AreEqual (false, pageHTML.Contains ("Page$2"), "AfterSecondDelete4");    \r
+\r
+                       //Delete last item and checking that the EmptyDataTemplate appears.\r
+\r
+                       fr = new FormRequest (t.Response, "form1");\r
+                       fr.Controls.Add ("__EVENTTARGET");\r
+                       fr.Controls.Add ("__EVENTARGUMENT");\r
+                       fr.Controls["__EVENTTARGET"].Value = "FormView1:DeleteButton";\r
+                       fr.Controls["__EVENTARGUMENT"].Value = "";\r
+                       t.Request = fr;\r
+                       pageHTML = t.Run ();                    \r
+                       Assert.AreEqual (true, pageHTML.Contains ("FormView1_Label1"), "EmptyTemplateTest1"); \r
+                       Assert.AreEqual (true, pageHTML.Contains ("The Database is empty"), "EmptyTemplateTest2");\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_CurrentMode () {\r
+                       FormView view = new FormView ();\r
+                       view.DefaultMode = FormViewMode.Insert;\r
+                       Assert.AreEqual (FormViewMode.Insert, view.CurrentMode, "FormView_CurrentMode#1");\r
+                       view.ChangeMode (FormViewMode.Edit);\r
+                       Assert.AreEqual (FormViewMode.Edit, view.CurrentMode, "FormView_CurrentMode#2");\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_CreateDataSourceSelectArguments2 () {\r
+                       DataSourceView view;\r
+                       Page p = new Page ();\r
+\r
+                       Poker dv = new Poker ();\r
+                       p.Controls.Add (dv);\r
+\r
+                       ObjectDataSource data = new ObjectDataSource ();\r
+                       data.TypeName = typeof (DataSourceObject).AssemblyQualifiedName;\r
+                       data.SelectMethod = "GetList";\r
+                       data.SortParameterName = "sortExpression";\r
+                       DataSourceSelectArguments arg;\r
+                       p.Controls.Add (data);\r
+\r
+                       dv.DataSource = data;\r
+                       dv.DataBind ();\r
+\r
+                       arg = dv.DoCreateDataSourceSelectArguments ();\r
+                       Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "Default");\r
+\r
+                       dv.AllowPaging = true;\r
+                       dv.PageIndex = 2;\r
+                       arg = dv.DoCreateDataSourceSelectArguments ();\r
+                       view = dv.DoGetData ();\r
+                       Assert.IsFalse (view.CanPage);\r
+                       Assert.IsTrue (view.CanRetrieveTotalRowCount);\r
+                       Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = true, CanPage = false, CanRetrieveTotalRowCount = true");\r
+\r
+                       // make DataSourceView.CanPage = true\r
+                       data.EnablePaging = true;\r
+\r
+                       arg = dv.DoCreateDataSourceSelectArguments ();\r
+                       view = dv.DoGetData ();\r
+                       Assert.IsTrue (view.CanPage);\r
+                       Assert.IsFalse (view.CanRetrieveTotalRowCount);\r
+                       Assert.IsTrue (arg.Equals (new DataSourceSelectArguments (2, -1)), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = false");\r
+\r
+                       dv.AllowPaging = false;\r
+                       arg = dv.DoCreateDataSourceSelectArguments ();\r
+                       Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = false, CanPage = true, CanRetrieveTotalRowCount = false");\r
+\r
+                       // make DataSourceView.CanRetrieveTotalRowCount = true\r
+                       data.SelectCountMethod = "GetCount";\r
+\r
+                       arg = dv.DoCreateDataSourceSelectArguments ();\r
+                       Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = false, CanPage = true, CanRetrieveTotalRowCount = true");\r
+\r
+                       dv.AllowPaging = true;\r
+                       arg = dv.DoCreateDataSourceSelectArguments ();\r
+                       DataSourceSelectArguments arg1 = new DataSourceSelectArguments (2, 1);\r
+                       arg1.RetrieveTotalRowCount = true;\r
+                       view = dv.DoGetData ();\r
+                       Assert.IsTrue (view.CanPage);\r
+                       Assert.IsTrue (view.CanRetrieveTotalRowCount);\r
+                       Assert.IsTrue (arg.Equals (arg1), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = true");\r
+               }\r
+\r
+               [Test]\r
+               public void FormView_GetPostBackOptions () {\r
+                       FormView fv = new FormView ();\r
+                       fv.Page = new Page ();\r
+                       IButtonControl btn = new Button ();\r
+                       btn.CausesValidation = false;\r
+                       Assert.IsFalse (btn.CausesValidation);\r
+                       Assert.AreEqual (String.Empty, btn.CommandName);\r
+                       Assert.AreEqual (String.Empty, btn.CommandArgument);\r
+                       Assert.AreEqual (String.Empty, btn.PostBackUrl);\r
+                       Assert.AreEqual (String.Empty, btn.ValidationGroup);\r
+                       PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (btn);\r
+                       Assert.IsFalse (options.PerformValidation);\r
+                       Assert.IsFalse (options.AutoPostBack);\r
+                       Assert.IsFalse (options.TrackFocus);\r
+                       Assert.IsTrue (options.ClientSubmit);\r
+                       Assert.IsTrue (options.RequiresJavaScriptProtocol);\r
+                       Assert.AreEqual ("$", options.Argument);\r
+                       Assert.AreEqual (null, options.ActionUrl);\r
+                       Assert.AreEqual (null, options.ValidationGroup);\r
+                       Assert.IsTrue (object.ReferenceEquals (options.TargetControl, fv));\r
+\r
+                       btn.ValidationGroup = "VG";\r
+                       btn.CommandName = "CMD";\r
+                       btn.CommandArgument = "ARG";\r
+                       btn.PostBackUrl = "Page.aspx";\r
+                       Assert.IsFalse (btn.CausesValidation);\r
+                       Assert.AreEqual ("CMD", btn.CommandName);\r
+                       Assert.AreEqual ("ARG", btn.CommandArgument);\r
+                       Assert.AreEqual ("Page.aspx", btn.PostBackUrl);\r
+                       Assert.AreEqual ("VG", btn.ValidationGroup);\r
+                       options = ((IPostBackContainer) fv).GetPostBackOptions (btn);\r
+                       Assert.IsFalse (options.PerformValidation);\r
+                       Assert.IsFalse (options.AutoPostBack);\r
+                       Assert.IsFalse (options.TrackFocus);\r
+                       Assert.IsTrue (options.ClientSubmit);\r
+                       Assert.IsTrue (options.RequiresJavaScriptProtocol);\r
+                       Assert.AreEqual ("CMD$ARG", options.Argument);\r
+                       Assert.AreEqual (null, options.ActionUrl);\r
+                       Assert.AreEqual (null, options.ValidationGroup);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (InvalidOperationException))]\r
+               public void FormView_GetPostBackOptions_CausesValidation () {\r
+                       FormView fv = new FormView ();\r
+                       fv.Page = new Page ();\r
+                       IButtonControl btn = new Button ();\r
+                       Assert.IsTrue (btn.CausesValidation);\r
+                       Assert.AreEqual (String.Empty, btn.CommandName);\r
+                       Assert.AreEqual (String.Empty, btn.CommandArgument);\r
+                       Assert.AreEqual (String.Empty, btn.PostBackUrl);\r
+                       Assert.AreEqual (String.Empty, btn.ValidationGroup);\r
+                       PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (btn);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentNullException))]\r
+               public void FormView_GetPostBackOptions_Null_Argument () {\r
+                       FormView fv = new FormView ();\r
+                       fv.Page = new Page ();\r
+                       PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (null);\r
+               }\r
+       }\r
+\r
+       public class TestMyData\r
+       {\r
+               static IList<int> str = (IList<int>) new int[] { 1, 2, 3, 4, 5, 6 };\r
+\r
+\r
+               public static IList<int> GetMyList ()\r
+               {\r
+                       return str;\r
+               }\r
+\r
+               public static int UpdateList (int index,int value)\r
+               {\r
+                       str[index] = value;\r
+                       return str[index];\r
+               }\r
+\r
+               public static int InsertList (int value)\r
+               {\r
+                       str.Add (value);\r
+                       return value;\r
+               }\r
+\r
+               public static void DeleteList (int value)\r
+               {\r
+                       str.Remove (value);\r
+               }\r
+\r
+       }\r
+\r
+       public class MyTemplate : ITemplate\r
+       {\r
+\r
+               Label l = new Label ();\r
+#region ITemplate Members\r
+\r
+               public void InstantiateIn (Control container)\r
+               {\r
+                       container.Controls.Add (l);\r
+\r
+               }\r
+\r
+               public void SetDataItem (object value)\r
+               {\r
+                       l.Text = value.ToString ();\r
+               }\r
+\r
+#endregion\r
+       }\r
+\r
+public class FormViewDataObject\r
+       {\r
+\r
+               public static DataTable ds = CreateDataTable();\r
+\r
+               public static DataTable Select()\r
+               {\r
+\r
+                       return ds;\r
+\r
+               }\r
+\r
+\r
+\r
+               public static DataTable Delete(string ID, string FName, string LName)\r
+               {\r
+\r
+                       DataRow dr = ds.Rows.Find(ID);\r
+\r
+                       if (dr != null)\r
+                       {\r
+\r
+                               ds.Rows.Remove(dr);\r
+\r
+                       }\r
+\r
+                       return ds;\r
+\r
+               }\r
+\r
+\r
+\r
+               public static DataTable Insert(string ID, string FName, string LName)\r
+               {\r
+\r
+                       DataRow dr = ds.NewRow();\r
+                       dr["ID"] = ID;\r
+                       dr["FName"] = FName;\r
+                       dr["LName"] = LName;\r
+                       ds.Rows.Add(dr);\r
+                       return ds;\r
+               }\r
+\r
+\r
+\r
+               public static DataTable Update(string ID, string FName, string LName)\r
+               {\r
+                       DataRow dr = ds.Rows.Find(ID);\r
+                       if (dr == null)\r
+                       {\r
+                               Label lbl = new Label();\r
+                               lbl.Text = "ID doesn't exist ";\r
+                               return ds;\r
+                       }\r
+                       dr["FName"] = FName;\r
+                       dr["LName"] = LName;\r
+                       return ds;\r
+\r
+               }\r
+\r
+\r
+\r
+               public static DataTable CreateDataTable()\r
+               {\r
+\r
+                       DataTable aTable = new DataTable("A");\r
+                       DataColumn dtCol;\r
+                       DataRow dtRow;\r
+\r
+                       // Create ID column and add to the DataTable.\r
+\r
+                       dtCol = new DataColumn();\r
+                       dtCol.DataType = Type.GetType("System.Int32");\r
+                       dtCol.ColumnName = "ID";\r
+                       dtCol.AutoIncrement = true;\r
+                       dtCol.Caption = "ID";\r
+                       dtCol.ReadOnly = true;\r
+                       dtCol.Unique = true;\r
+                       aTable.Columns.Add(dtCol);\r
+\r
+\r
+\r
+                       // Create Name column and add to the table\r
+\r
+                       dtCol = new DataColumn();\r
+                       dtCol.DataType = Type.GetType("System.String");\r
+                       dtCol.ColumnName = "FName";\r
+                       dtCol.AutoIncrement = false;\r
+                       dtCol.Caption = "First Name";\r
+                       dtCol.ReadOnly = false;\r
+                       dtCol.Unique = false;\r
+                       aTable.Columns.Add(dtCol);\r
+\r
+\r
+\r
+                       // Create Last Name column and add to the table.\r
+\r
+                       dtCol = new DataColumn();\r
+                       dtCol.DataType = Type.GetType("System.String");\r
+                       dtCol.ColumnName = "LName";\r
+                       dtCol.AutoIncrement = false;\r
+                       dtCol.Caption = "Last Name";\r
+                       dtCol.ReadOnly = false;\r
+                       dtCol.Unique = false;\r
+                       aTable.Columns.Add(dtCol);\r
+\r
+\r
+\r
+                       // Create three rows to the table\r
+\r
+                       dtRow = aTable.NewRow();\r
+                       dtRow["ID"] = 1001;\r
+                       dtRow["FName"] = "Mahesh";\r
+                       dtRow["LName"] = "Chand";\r
+                       aTable.Rows.Add(dtRow);\r
+\r
+                       dtRow = aTable.NewRow();\r
+                       dtRow["ID"] = 1002;\r
+                       dtRow["FName"] = "Melanie";\r
+                       dtRow["LName"] = "Talmadge";\r
+                       aTable.Rows.Add(dtRow);\r
+\r
+                       dtRow = aTable.NewRow();\r
+                       dtRow["ID"] = 1003;\r
+                       dtRow["FName"] = "Vinay";\r
+                       dtRow["LName"] = "Bansal";\r
+                       aTable.Rows.Add(dtRow);\r
+\r
+                       aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };\r
+                       return aTable;\r
+\r
+               }\r
+       }\r
+}\r
+\r
+\r
+#endif\r