// // Tests for System.Web.UI.Control // // Author: // Peter Dennis Bartok (pbartok@novell.com) // Gonzalo Paniagua Javier (gonzalo@novell.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. // using NUnit.Framework; using System; using System.Collections; using System.Drawing; using System.IO; using System.Globalization; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using MonoTests.SystemWeb.Framework; #if NET_2_0 using System.Web.UI.Adapters; #endif namespace MonoTests.System.Web.UI { [TestFixture] public class ControlTest { [Test] public void DataBindingInterfaceTest () { Control c; DataBindingCollection db; c = new Control (); Assert.AreEqual (false, ((IDataBindingsAccessor) c).HasDataBindings, "DB1"); db = ((IDataBindingsAccessor) c).DataBindings; Assert.IsNotNull (db, "DB2"); Assert.AreEqual (false, ((IDataBindingsAccessor) c).HasDataBindings, "DB3"); db.Add (new DataBinding ("property", typeof (bool), "expression")); Assert.AreEqual (true, ((IDataBindingsAccessor) c).HasDataBindings); } [Test] // bug #82546 public void FindControl_NamingContainer () { Control topControl = new NamingContainer (); topControl.ID = "top"; Control controlLevel1A = new Control (); controlLevel1A.ID = "Level1#A"; topControl.Controls.Add (controlLevel1A); Control controlLevel1B = new Control (); controlLevel1B.ID = "Level1#B"; topControl.Controls.Add (controlLevel1B); Control controlLevel2AA = new Control (); controlLevel2AA.ID = "Level2#AA"; controlLevel1A.Controls.Add (controlLevel2AA); Control controlLevel2AB = new Control (); controlLevel2AB.ID = "Level2#AB"; controlLevel1A.Controls.Add (controlLevel2AB); Control foundControl = topControl.FindControl ("Level1#A"); Assert.IsNotNull (foundControl, "#A1"); Assert.AreSame (controlLevel1A, foundControl, "#A2"); foundControl = topControl.FindControl ("LEVEL1#B"); Assert.IsNotNull (foundControl, "#B1"); Assert.AreSame (controlLevel1B, foundControl, "#B2"); foundControl = topControl.FindControl ("LeVeL2#AB"); Assert.IsNotNull (foundControl, "#C1"); Assert.AreSame (controlLevel2AB, foundControl, "#C2"); foundControl = topControl.FindControl ("doesnotexist"); Assert.IsNull (foundControl, "#D1"); foundControl = topControl.FindControl ("top"); Assert.IsNull (foundControl, "#D2"); foundControl = controlLevel1A.FindControl ("Level2#AA"); Assert.IsNotNull (foundControl, "#E1"); Assert.AreSame (controlLevel2AA, foundControl, "#E2"); foundControl = controlLevel1A.FindControl ("LEveL2#ab"); Assert.IsNotNull (foundControl, "#F1"); Assert.AreSame (controlLevel2AB, foundControl, "#F2"); } [Test] public void UniqueID1 () { // Standalone NC Control nc = new MyNC (); Assert.IsNull (nc.UniqueID, "nulltest"); } [Test] public void UniqueID1_1 () { // Standalone NC Control nc = new MyNC (); Page p = new Page (); p.Controls.Add (nc); Assert.IsNotNull (nc.UniqueID, "notnull"); } [Test] public void UniqueID2 () { // NC in NC Control nc = new MyNC (); Control nc2 = new MyNC (); nc2.Controls.Add (nc); Assert.IsNotNull (nc.UniqueID, "notnull"); Assert.IsTrue (nc.UniqueID.IndexOfAny (new char[] { ':', '$' }) == -1, "separator"); } [Test] public void UniqueID2_1 () { // NC in NC Control nc = new MyNC (); Control nc2 = new MyNC (); nc2.Controls.Add (nc); Page p = new Page (); p.Controls.Add (nc2); Assert.IsNotNull (nc.UniqueID, "notnull"); Assert.IsTrue (nc.UniqueID.IndexOfAny (new char [] { ':', '$' }) != -1, "separator"); } [Test] public void UniqueID3 () { // NC in control Control control = new Control (); Control nc = new MyNC (); control.Controls.Add (nc); Assert.IsNull (nc.UniqueID, "null"); } [Test] public void UniqueID4 () { // NC in control Control control = new Control (); Control nc = new MyNC (); nc.Controls.Add (control); Assert.IsNotNull (control.UniqueID, "notnull"); } [Test] public void UniqueID5 () { // NC in control Control control = new Control (); Control nc = new MyNC (); Control nc2 = new MyNC (); nc2.Controls.Add (nc); nc.Controls.Add (control); Assert.IsNotNull (control.UniqueID, "notnull"); Assert.IsNull (nc2.ID, "null-1"); Assert.IsNull (nc.ID, "null-2"); Assert.IsTrue (-1 != control.UniqueID.IndexOfAny (new char[] { ':', '$' }), "separator"); } [Test] public void UniqueID6 () { // NC in NC Control nc = new MyNC (); Page p = new Page (); p.Controls.Add (nc); Assert.IsNotNull (nc.UniqueID, "notnull"); Control c1 = new Control (); Control c2 = new Control (); nc.Controls.Add (c1); nc.Controls.Add (c2); string uid1_1 = c1.UniqueID; string uid2_1 = c2.UniqueID; nc.Controls.Clear (); Assert.IsNull (c1.UniqueID); Assert.IsNull (c2.UniqueID); // ad in another order nc.Controls.Add (c2); nc.Controls.Add (c1); string uid1_2 = c1.UniqueID; string uid2_2 = c2.UniqueID; Assert.IsFalse (uid1_1 == uid1_2); Assert.IsFalse (uid2_1 == uid2_2); Assert.AreEqual (uid1_1, uid2_2); Assert.AreEqual (uid2_1, uid1_2); nc.Controls.Remove (c1); nc.Controls.Add (c1); string uid1_3 = c1.UniqueID; Assert.IsFalse (uid1_3 == uid1_2, "id was not reset"); #if NET_2_0 EnsureIDControl c3 = new EnsureIDControl (); nc.Controls.Add (c3); string uid3_1 = c3.UniqueID; c3.DoEnsureID (); Assert.IsNotNull (c3.ID); nc.Controls.Remove (c3); nc.Controls.Add (c3); string uid3_2 = c3.UniqueID; Assert.IsNull (c3.ID); Assert.IsFalse (uid3_1 == uid3_2, "id was not reset"); #endif } [Test] public void ClientID () { // NC in control Control control = new Control (); Control nc = new MyNC (); Control nc2 = new MyNC (); Control nc3 = new MyNC (); nc3.Controls.Add (nc2); nc2.Controls.Add (nc); nc.Controls.Add (control); #if NET_2_0 string expected = "ctl00_ctl00_ctl00"; #else string expected = "_ctl0__ctl0__ctl0"; #endif Assert.AreEqual (expected, control.ClientID, "ClientID"); } // From bug #76919: Control uses _controls instead of // Controls when RenderChildren is called. [Test] public void Controls1 () { DerivedControl derived = new DerivedControl (); derived.Controls.Add (new LiteralControl ("hola")); StringWriter sw = new StringWriter (); HtmlTextWriter htw = new HtmlTextWriter (sw); derived.RenderControl (htw); string result = sw.ToString (); Assert.AreEqual ("", result, "#01"); } [Test] // Bug #471305 [Category ("NunitWeb")] public void NoDoubleOnInitOnRemoveAdd () { #if VISUAL_STUDIO WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.NoDoubleOnInitOnRemoveAdd.aspx", "NoDoubleOnInitOnRemoveAdd.aspx"); WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.NoDoubleOnInitOnRemoveAdd.aspx.cs", "NoDoubleOnInitOnRemoveAdd.aspx.cs"); #else WebTest.CopyResource (GetType (), "NoDoubleOnInitOnRemoveAdd.aspx", "NoDoubleOnInitOnRemoveAdd.aspx"); WebTest.CopyResource (GetType (), "NoDoubleOnInitOnRemoveAdd.aspx.cs", "NoDoubleOnInitOnRemoveAdd.aspx.cs"); #endif WebTest t = new WebTest ("NoDoubleOnInitOnRemoveAdd.aspx"); string html = t.Run (); Assert.AreEqual (-1, html.IndexOf ("labellabel"), "#A1"); } #if NET_2_0 [Test] [Category("NunitWeb")] public void AppRelativeTemplateSourceDirectory () { new WebTest(PageInvoker.CreateOnLoad(AppRelativeTemplateSourceDirectory_Load)).Run(); } public static void AppRelativeTemplateSourceDirectory_Load(Page p) { Control ctrl = new Control(); Assert.AreEqual("~/", ctrl.AppRelativeTemplateSourceDirectory, "AppRelativeTemplateSourceDirectory#1"); ctrl.AppRelativeTemplateSourceDirectory = "~/Fake"; Assert.AreEqual("~/Fake", ctrl.AppRelativeTemplateSourceDirectory, "AppRelativeTemplateSourceDirectory#2"); } [Test] public void ApplyStyleSheetSkin () { Page p = new Page (); p.StyleSheetTheme = ""; Control c = new Control (); c.ApplyStyleSheetSkin (p); } [Test] [Category ("NunitWeb")] public void ApplyStyleSheetSkin_1 () { #if VISUAL_STUDIO WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.Theme2.skin", "App_Themes/Theme2/Theme2.skin"); #else WebTest.CopyResource (GetType (), "Theme2.skin", "App_Themes/Theme2/Theme2.skin"); #endif WebTest t = new WebTest (); PageDelegates pd = new PageDelegates (); pd.PreInit = ApplyStyleSheetSkin_PreInit; pd.Load = ApplyStyleSheetSkin_Load; t.Invoker = new PageInvoker (pd); string str = t.Run (); } public static void ApplyStyleSheetSkin_PreInit (Page p) { p.Theme = "Theme2"; } public static void ApplyStyleSheetSkin_Load (Page p) { Label lbl = new Label (); lbl.ID = "StyleLbl"; lbl.SkinID = "red"; lbl.Text = "StyleLabel"; p.Controls.Add (lbl); lbl.ApplyStyleSheetSkin (p); Assert.AreEqual (Color.Red, lbl.ForeColor, "ApplyStyleSheetSkin_BackColor"); Assert.AreEqual ("TextFromSkinFile", lbl.Text, "ApplyStyleSheetSkin"); } [Test] [Category ("NunitWeb")] public void ClearChildControlState () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (ClearChildControlState_Load)); t.Run (); FormRequest fr = new FormRequest (t.Response, "form1"); fr.Controls.Add ("__EVENTTARGET"); fr.Controls.Add ("__EVENTARGUMENT"); fr.Controls["__EVENTTARGET"].Value = ""; fr.Controls["__EVENTARGUMENT"].Value = ""; t.Request = fr; t.Run (); } public static void ClearChildControlState_Load (Page p) { ControlWithState c1 = new ControlWithState (); p.Form.Controls.Add (c1); if (p.IsPostBack) { c1.ClearChildControlState (); } ControlWithState c2 = new ControlWithState (); c1.Controls.Add (c2); ControlWithState c3 = new ControlWithState (); c2.Controls.Add (c3); if (!p.IsPostBack) { c1.State = "State"; c2.State = "Cool"; c3.State = "SubCool"; } else { Assert.AreEqual ("State", c1.State, "ControlState#1"); Assert.AreEqual (null, c2.State, "ControlState#2"); Assert.AreEqual (null, c3.State, "ControlState#2"); } } [Test] [Category ("NunitWeb")] public void ClearChildState () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (ClearChildState_Load)); t.Run (); FormRequest fr = new FormRequest (t.Response, "form1"); fr.Controls.Add ("__EVENTTARGET"); fr.Controls.Add ("__EVENTARGUMENT"); fr.Controls["__EVENTTARGET"].Value = ""; fr.Controls["__EVENTARGUMENT"].Value = ""; t.Request = fr; t.Run (); } public static void ClearChildState_Load (Page p) { ControlWithState c1 = new ControlWithState (); p.Form.Controls.Add (c1); if (p.IsPostBack) { c1.ClearChildState (); } ControlWithState c2 = new ControlWithState (); c1.Controls.Add (c2); ControlWithState c3 = new ControlWithState (); c2.Controls.Add (c3); if (!p.IsPostBack) { c1.State = "State"; c2.State = "Cool"; c2.Viewstate = "Very Cool"; c3.State = "SubCool"; c3.Viewstate = "Super Cool"; } else { Assert.AreEqual ("State", c1.State, "ClearChildState#1"); Assert.AreEqual (null, c2.State, "ClearChildState#2"); Assert.AreEqual (null, c3.State, "ClearChildState#3"); Assert.AreEqual (null, c2.Viewstate, "ClearChildState#4"); Assert.AreEqual (null, c3.Viewstate, "ClearChildState#5"); } } [Test] public void DataBind () { MyNC ctrl = new MyNC (); ctrl.DataBinding += new EventHandler (ctrl_DataBinding); Assert.AreEqual (false, _eventDataBinding, "Before DataBinding"); ctrl.DataBind (false); Assert.AreEqual (false, _eventDataBinding, "Before DataBinding"); ctrl.DataBind (true); Assert.AreEqual (true, _eventDataBinding, "After DataBinding"); } bool _eventDataBinding; void ctrl_DataBinding (object sender, EventArgs e) { _eventDataBinding = true; } [Test] public void DataBindChildren () { MyNC ctrl1 = new MyNC (); Control ctrl2 = new Control (); Control ctrl3 = new Control (); ctrl2.DataBinding += new EventHandler (ctrl2_DataBinding); ctrl3.DataBinding += new EventHandler (ctrl3_DataBinding); ctrl2.Controls.Add (ctrl3); ctrl1.Controls.Add (ctrl2); Assert.AreEqual (false, _eventChild1, "Before DataBinding#1"); Assert.AreEqual (false, _eventChild2, "Before DataBinding#2"); ctrl1.DataBindChildren (); Assert.AreEqual (true, _eventChild1, "After DataBinding#1"); Assert.AreEqual (true, _eventChild2, "After DataBinding#2"); } bool _eventChild1; bool _eventChild2; void ctrl3_DataBinding (object sender, EventArgs e) { _eventChild1 = true; } void ctrl2_DataBinding (object sender, EventArgs e) { _eventChild2 = true; } [Test] public void EnsureID () { MyNC ctrl = new MyNC (); MyNC ctrl1 = new MyNC (); ctrl.Controls.Add (ctrl1); Page p = new Page (); p.Controls.Add (ctrl); ctrl.EnsureID (); if (String.IsNullOrEmpty (ctrl.ID)) Assert.Fail ("EnsureID#1"); ctrl1.EnsureID (); if (String.IsNullOrEmpty (ctrl1.ID)) Assert.Fail ("EnsureID#2"); } [Test] [Category("NotWorking")] public void Focus () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (Focus_Load)); string html = t.Run (); Assert.AreEqual (3, contain (html, "TestBox"), "Focus script not created"); } public static void Focus_Load (Page p) { TextBox tbx = new TextBox (); tbx.ID = "TestBox"; p.Controls.Add (tbx); tbx.Focus (); } int contain (string orig, string compare) { if (orig.IndexOf (compare) == -1) return 0; return 1 + contain (orig.Substring (orig.IndexOf (compare) + compare.Length), compare); } [Test] public void HasEvent () { MyNC ctrl1 = new MyNC (); Assert.AreEqual (false, ctrl1.HasEvents (), "HasEvent#1"); EventHandler ctrl_hdlr = new EventHandler (ctrl1_Init); ctrl1.Init += new EventHandler (ctrl1_Init); ctrl1.Init += ctrl_hdlr; Assert.AreEqual (true, ctrl1.HasEvents (), "HasEvent#2"); // Dosn't work than removed handler //ctrl1.Init -= ctrl_hdlr; //Assert.AreEqual (false, ctrl1.HasEvents (), "HasEvent#3"); } void ctrl1_Init (object sender, EventArgs e) { throw new Exception ("The method or operation is not implemented."); } [Test] public void IsViewStateEnabled () { DerivedControl c = new DerivedControl (); Assert.IsTrue (c.DoIsViewStateEnabled); Page p = new Page (); c.Page = p; p.Controls.Add (c); Assert.IsTrue (c.DoIsViewStateEnabled); p.EnableViewState = false; Assert.IsFalse (c.DoIsViewStateEnabled); } [Test] [Category ("NunitWeb")] public void ControlState () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (ControlState_Load)); t.Run (); FormRequest fr = new FormRequest (t.Response, "form1"); fr.Controls.Add ("__EVENTTARGET"); fr.Controls.Add ("__EVENTARGUMENT"); fr.Controls["__EVENTTARGET"].Value = ""; fr.Controls["__EVENTARGUMENT"].Value = ""; t.Request = fr; t.Run (); } public static void ControlState_Load (Page p) { ControlWithState c1 = new ControlWithState (); ControlWithState c2 = new ControlWithState (); c1.Controls.Add (c2); p.Form.Controls.Add (c1); if (!p.IsPostBack) { c1.State = "State"; c2.State = "Cool"; } else { ControlWithState c3 = new ControlWithState (); p.Form.Controls.Add (c3); Assert.AreEqual ("State", c1.State, "ControlState"); Assert.AreEqual ("Cool", c2.State, "ControlState"); } } [Test] [Category ("NunitWeb")] public void ControlState2 () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (ControlState2_Load)); t.Run (); FormRequest fr = new FormRequest (t.Response, "form1"); fr.Controls.Add ("__EVENTTARGET"); fr.Controls.Add ("__EVENTARGUMENT"); fr.Controls ["__EVENTTARGET"].Value = ""; fr.Controls ["__EVENTARGUMENT"].Value = ""; t.Request = fr; t.Run (); fr = new FormRequest (t.Response, "form1"); fr.Controls.Add ("__EVENTTARGET"); fr.Controls.Add ("__EVENTARGUMENT"); fr.Controls ["__EVENTTARGET"].Value = ""; fr.Controls ["__EVENTARGUMENT"].Value = ""; t.Request = fr; t.Run (); } public static void ControlState2_Load (Page p) { ControlWithState parent = new ControlWithState (); p.Form.Controls.Add (parent); if (!p.IsPostBack) { // emulate DataBind parent.Controls.Clear (); parent.ClearChildControlState (); ControlWithState c1 = new ControlWithState (); ControlWithState c2 = new ControlWithState (); parent.Controls.Add (c1); parent.Controls.Add (c2); c1.State = "State1_1"; c2.State = "State1_2"; parent.State = "First"; } else if (parent.State == "First") { // emulate DataBind parent.Controls.Clear (); parent.ClearChildControlState (); ControlWithState c1 = new ControlWithState (); ControlWithState c2 = new ControlWithState (); parent.Controls.Add (c1); parent.Controls.Add (c2); c1.State = "State2_1"; c2.State = "State2_2"; parent.State = "Second"; } else { // emulate CrerateChildControl only parent.Controls.Clear (); ControlWithState c1 = new ControlWithState (); ControlWithState c2 = new ControlWithState (); parent.Controls.Add (c1); parent.Controls.Add (c2); Assert.AreEqual ("State2_1", c1.State, "ControlState#1"); Assert.AreEqual ("State2_2", c2.State, "ControlState#2"); } } [Test] public void ClientIDSeparator () { DerivedControl ctrl = new DerivedControl (); Assert.AreEqual (95, (int) ctrl.ClientIDSeparator, "ClientIDSeparator"); } [Test] public void IDSeparator () { DerivedControl ctrl = new DerivedControl (); Assert.AreEqual (36, (int) ctrl.IdSeparator, "IDSeparator"); } [Test] [Category ("NunitWeb")] public void IsChildControlStateCleared () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (IsChildControlStateCleared_Load)); t.Run (); FormRequest fr = new FormRequest (t.Response, "form1"); fr.Controls.Add ("__EVENTTARGET"); fr.Controls.Add ("__EVENTARGUMENT"); fr.Controls["__EVENTTARGET"].Value = ""; fr.Controls["__EVENTARGUMENT"].Value = ""; t.Request = fr; t.Run (); } public static void IsChildControlStateCleared_Load (Page p) { ControlWithState c1 = new ControlWithState (); p.Form.Controls.Add (c1); if (p.IsPostBack) { Assert.IsFalse (c1.IsChildControlStateCleared, "ControlState#1"); c1.ClearChildControlState (); Assert.IsTrue (c1.IsChildControlStateCleared, "ControlState#1"); } ControlWithState c2 = new ControlWithState (); c1.Controls.Add (c2); ControlWithState c3 = new ControlWithState (); c2.Controls.Add (c3); if (p.IsPostBack) { Assert.IsFalse (c2.IsChildControlStateCleared, "ControlState#1"); Assert.IsFalse (c3.IsChildControlStateCleared, "ControlState#1"); } if (!p.IsPostBack) { c1.State = "State"; c2.State = "Cool"; c3.State = "SubCool"; } } [Test] [Category ("NunitWeb")] public void LoadViewStateByID () { ControlWithState c1 = new ControlWithState (); ControlWithState c2 = new ControlWithState (); c1.Controls.Add (c2); Assert.AreEqual (false, c1.LoadViewStateByID, "LoadViewStateByID#1"); } [Test] [Category ("NunitWeb")] public void OpenFile () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (OpenFile_Load)); t.Run (); } public static void OpenFile_Load (Page p) { DerivedControl ctrl = new DerivedControl (); Stream strem = ctrl.OpenFile ("~/MyPage.aspx"); Assert.IsNotNull (strem, "OpenFile failed"); } [Test] [Category ("NunitWeb")] [ExpectedException (typeof (FileNotFoundException))] public void OpenFile_Exception () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (OpenFileException_Load)); t.Run (); } public static void OpenFileException_Load (Page p) { DerivedControl ctrl = new DerivedControl (); Stream strem = ctrl.OpenFile ("~/Fake.tmp"); } [Test] [Category ("NunitWeb")] public void ResolveClientUrl () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (ResolveClientUrl_Load)); string html = t.Run (); } public static void ResolveClientUrl_Load (Page p) { Control ctrl = new Control (); p.Controls.Add (ctrl); string url = ctrl.ResolveClientUrl ("~/MyPage.aspx"); Assert.AreEqual ("MyPage.aspx", url, "ResolveClientUrl Failed"); Assert.AreEqual ("", ctrl.ResolveClientUrl (""), "empty string"); Assert.AreEqual ("./", ctrl.ResolveClientUrl ("~"), "~"); Assert.AreEqual ("./", ctrl.ResolveClientUrl ("~/"), "~/"); Assert.AreEqual ("../MyPage.aspx", ctrl.ResolveClientUrl ("~/../MyPage.aspx"), "~/../MyPage.aspx"); Assert.AreEqual ("../MyPage.aspx", ctrl.ResolveClientUrl ("~\\..\\MyPage.aspx"), "~\\..\\MyPage.aspx"); Assert.AreEqual ("MyPage.aspx", ctrl.ResolveClientUrl ("~////MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveClientUrl ("/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/folder/MyPage.aspx", ctrl.ResolveClientUrl ("/folder/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("/NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("\\NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("\\NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("///NunitWeb\\..\\MyPage.aspx", ctrl.ResolveClientUrl ("///NunitWeb\\..\\MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("NunitWeb/../MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("NunitWeb/./MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/./MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("http://google.com/", ctrl.ResolveClientUrl ("http://google.com/"), "ResolveClientUrl Failed"); Assert.AreEqual ("MyPage.aspx?param=val&yes=no", ctrl.ResolveClientUrl ("~/MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("../MyPage.aspx?param=val&yes=no", ctrl.ResolveClientUrl ("~/../MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("./MyPage.aspx", ctrl.ResolveClientUrl ("./MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("../MyPage.aspx", ctrl.ResolveClientUrl ("../MyPage.aspx"), "ResolveClientUrl Failed"); } [Test] [Category ("NunitWeb")] public void ResolveClientUrl2 () { WebTest t = new WebTest ("ResolveUrl.aspx"); PageDelegates delegates = new PageDelegates (); delegates.Load = ResolveClientUrl2_Load; t.Invoker = new PageInvoker (delegates); string html = t.Run (); } public static void ResolveClientUrl2_Load (Page p) { Control uc = p.FindControl ("WebUserControl1"); Control ctrl = uc.FindControl ("Label"); string url = ctrl.ResolveClientUrl ("~/MyPage.aspx"); Assert.AreEqual ("MyPage.aspx", url, "ResolveClientUrl Failed"); Assert.AreEqual ("", ctrl.ResolveClientUrl (""), "empty string"); Assert.AreEqual ("./", ctrl.ResolveClientUrl ("~"), "~"); Assert.AreEqual ("./", ctrl.ResolveClientUrl ("~/"), "~/"); Assert.AreEqual ("../MyPage.aspx", ctrl.ResolveClientUrl ("~/../MyPage.aspx"), "~/../MyPage.aspx"); Assert.AreEqual ("../MyPage.aspx", ctrl.ResolveClientUrl ("~\\..\\MyPage.aspx"), "~\\..\\MyPage.aspx"); Assert.AreEqual ("MyPage.aspx", ctrl.ResolveClientUrl ("~////MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveClientUrl ("/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/folder/MyPage.aspx", ctrl.ResolveClientUrl ("/folder/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("/NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("\\NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("\\NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("///NunitWeb\\..\\MyPage.aspx", ctrl.ResolveClientUrl ("///NunitWeb\\..\\MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("Folder/NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("Folder/MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("Folder/NunitWeb/MyPage.aspx", ctrl.ResolveClientUrl ("NunitWeb/./MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("http://google.com/", ctrl.ResolveClientUrl ("http://google.com/"), "ResolveClientUrl Failed"); Assert.AreEqual ("MyPage.aspx?param=val&yes=no", ctrl.ResolveClientUrl ("~/MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("../MyPage.aspx?param=val&yes=no", ctrl.ResolveClientUrl ("~/../MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("Folder/MyPage.aspx", ctrl.ResolveClientUrl ("./MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("MyPage.aspx", ctrl.ResolveClientUrl ("../MyPage.aspx"), "ResolveClientUrl Failed"); } [Test] [Category ("NunitWeb")] public void ResolveUrl () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (ResolveUrl_Load)); string html = t.Run (); } public static void ResolveUrl_Load (Page p) { #if TARGET_JVM string appPath = "/MainsoftWebApp20"; #else string appPath = "/NunitWeb"; #endif Control ctrl = new Control (); p.Controls.Add (ctrl); Assert.AreEqual (appPath + "/MyPage.aspx", ctrl.ResolveUrl ("~/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("", ctrl.ResolveUrl (""), "empty string"); Assert.AreEqual (appPath + "/", ctrl.ResolveUrl ("~"), "~"); Assert.AreEqual (appPath + "/", ctrl.ResolveUrl ("~/"), "~/"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveUrl ("~/../MyPage.aspx"), "~/../MyPage.aspx"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveUrl ("~\\..\\MyPage.aspx"), "~\\..\\MyPage.aspx"); Assert.AreEqual (appPath + "/MyPage.aspx", ctrl.ResolveUrl ("~////MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveUrl ("/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/folder/MyPage.aspx", ctrl.ResolveUrl ("/folder/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("/NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("\\NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("\\NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("///NunitWeb\\..\\MyPage.aspx", ctrl.ResolveUrl ("///NunitWeb\\..\\MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/./MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("http://google.com/", ctrl.ResolveUrl ("http://google.com/"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/MyPage.aspx?param=val&yes=no", ctrl.ResolveUrl ("~/MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("/MyPage.aspx?param=val&yes=no", ctrl.ResolveUrl ("~/../MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual (appPath + "/MyPage.aspx", ctrl.ResolveUrl ("./MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveUrl ("../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/", ctrl.ResolveUrl (".."), ".."); Assert.AreEqual ("/", ctrl.ResolveUrl ("../"), "../"); } [Test] [Category ("NunitWeb")] public void ResolveUrl2 () { WebTest t = new WebTest ("ResolveUrl.aspx"); PageDelegates delegates = new PageDelegates (); delegates.Load = ResolveUrl2_Load; t.Invoker = new PageInvoker (delegates); string html = t.Run (); } public static void ResolveUrl2_Load (Page p) { #if TARGET_JVM string appPath = "/MainsoftWebApp20"; #else string appPath = "/NunitWeb"; #endif Control uc = p.FindControl ("WebUserControl1"); Control ctrl = uc.FindControl ("Label"); Assert.AreEqual (appPath + "/MyPage.aspx", ctrl.ResolveUrl ("~/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("", ctrl.ResolveUrl (""), "empty string"); Assert.AreEqual (appPath + "/", ctrl.ResolveUrl ("~"), "~"); Assert.AreEqual (appPath + "/", ctrl.ResolveUrl ("~/"), "~/"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveUrl ("~/../MyPage.aspx"), "~/../MyPage.aspx"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveUrl ("~\\..\\MyPage.aspx"), "~\\..\\MyPage.aspx"); Assert.AreEqual (appPath + "/MyPage.aspx", ctrl.ResolveUrl ("~////MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveUrl ("/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/folder/MyPage.aspx", ctrl.ResolveUrl ("/folder/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("/NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("\\NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("\\NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("///NunitWeb\\..\\MyPage.aspx", ctrl.ResolveUrl ("///NunitWeb\\..\\MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/Folder/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/Folder/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/Folder/NunitWeb/MyPage.aspx", ctrl.ResolveUrl ("NunitWeb/./MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual ("http://google.com/", ctrl.ResolveUrl ("http://google.com/"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/MyPage.aspx?param=val&yes=no", ctrl.ResolveUrl ("~/MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual ("/MyPage.aspx?param=val&yes=no", ctrl.ResolveUrl ("~/../MyPage.aspx?param=val&yes=no"), "~/../MyPage.aspx"); Assert.AreEqual (appPath + "/Folder/MyPage.aspx", ctrl.ResolveUrl ("./MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/MyPage.aspx", ctrl.ResolveUrl ("../MyPage.aspx"), "ResolveClientUrl Failed"); Assert.AreEqual (appPath + "/", ctrl.ResolveUrl (".."), ".."); Assert.AreEqual (appPath + "/", ctrl.ResolveUrl ("../"), "../"); Assert.AreEqual ("/", ctrl.ResolveUrl ("../.."), "../.."); Assert.AreEqual ("/", ctrl.ResolveUrl ("../../"), "../../"); Assert.AreEqual ("/MyPage.aspx", ctrl.ResolveUrl ("../../MyPage.aspx"), "../../MyPage.aspx"); } [Test] [Category ("NotWorking")] // Not implemented exception public void ResolveAdapter_2 () { DerivedControl ctrl = new DerivedControl (); Assert.AreEqual (null, ctrl.ResolveAdapter (), "ResolveAdapter"); } [Test] public void EnableTheming () { DerivedControl ctrl = new DerivedControl (); Assert.AreEqual (true, ctrl.EnableTheming, "EnableTheming#1"); ctrl.EnableTheming = false; Assert.AreEqual (false, ctrl.EnableTheming, "EnableTheming#2"); } #endif [Test] public void BindingContainer () { ControlWithTemplate c = new ControlWithTemplate (); c.Template = new CompiledTemplateBuilder (new BuildTemplateMethod (BindingContainer_BuildTemplate)); // cause CreateChildControls called c.FindControl ("stam"); } static void BindingContainer_BuildTemplate (Control control) { Control child1 = new Control (); control.Controls.Add (child1); Assert.IsTrue (Object.ReferenceEquals (child1.NamingContainer, control), "NamingContainer #1"); Assert.IsTrue (Object.ReferenceEquals (child1.BindingContainer, control), "BindingContainer #1"); NamingContainer nc = new NamingContainer (); Control child2 = new Control (); nc.Controls.Add (child2); control.Controls.Add (nc); Assert.IsTrue (Object.ReferenceEquals (child2.NamingContainer, nc), "NamingContainer #2"); Assert.IsTrue (Object.ReferenceEquals (child2.BindingContainer, nc), "BindingContainer #2"); #if NET_2_0 // DetailsViewPagerRow marked to be not BindingContainer DetailsViewPagerRow row = new DetailsViewPagerRow (0, DataControlRowType.Pager, DataControlRowState.Normal); TableCell cell = new TableCell (); Control child3 = new Control (); cell.Controls.Add (child3); row.Cells.Add (cell); control.Controls.Add (row); Assert.IsTrue (Object.ReferenceEquals (child3.NamingContainer, row), "NamingContainer #3"); Assert.IsTrue (Object.ReferenceEquals (child3.BindingContainer, control), "BindingContainer #3"); #endif } #if NET_2_0 [Test] public void Control_Adapter () { MyNC ctr = new MyNC (); Assert.AreEqual (null, ctr.Adapter (), "Adapter"); } #endif [Test] public void ChildControlsCreated () { ChildControlsCreatedControl ctr = new ChildControlsCreatedControl (); ctr.Controls.Add (new Control ()); //ctr.DoEnsureChildControls (); Assert.AreEqual (1, ctr.Controls.Count, "ChildControlsCreated#1"); ctr.SetChildControlsCreated (false); Assert.AreEqual (1, ctr.Controls.Count, "ChildControlsCreated#2"); } #if NET_2_0 [TestFixtureTearDown] public void Tear_down () { WebTest.Unload (); } [TestFixtureSetUp] public void TestFixtureSetUp () { #if VISUAL_STUDIO WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.ResolveUrl.aspx", "ResolveUrl.aspx"); WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.ResolveUrl.ascx", "Folder/ResolveUrl.ascx"); #else WebTest.CopyResource (GetType (), "ResolveUrl.aspx", "ResolveUrl.aspx"); WebTest.CopyResource (GetType (), "ResolveUrl.ascx", "Folder/ResolveUrl.ascx"); #endif } #endif #region helpcalsses #if NET_2_0 class ControlWithState : Control { string _state; public string State { get { return _state; } set { _state = value; } } public string Viewstate { get { return (string) ViewState ["Viewstate"]; } set { ViewState ["Viewstate"] = value; } } protected override void OnInit (EventArgs e) { base.OnInit (e); Page.RegisterRequiresControlState (this); } protected override object SaveControlState () { return State; } protected override void LoadControlState (object savedState) { State = (string) savedState; } public new void ClearChildState () { base.ClearChildState (); } public new void ClearChildControlState () { base.ClearChildControlState (); } public new bool IsChildControlStateCleared { get { return base.IsChildControlStateCleared; } } public new bool LoadViewStateByID { get { return base.LoadViewStateByID; } } } #endif class MyNC : Control, INamingContainer { #if NET_2_0 public ControlAdapter Adapter () { return base.Adapter; } public new void DataBind (bool opt) { base.DataBind (opt); } public new void DataBindChildren () { base.DataBindChildren (); } public new void EnsureID () { base.EnsureID (); } public new bool HasEvents () { return base.HasEvents (); } #endif } class DerivedControl : Control { ControlCollection coll; public DerivedControl () { coll = new ControlCollection (this); } public override ControlCollection Controls { get { return coll; } } #if NET_2_0 public bool DoIsViewStateEnabled { get { return IsViewStateEnabled; } } public new char ClientIDSeparator { get { return base.ClientIDSeparator; } } public new char IdSeparator { get { return base.IdSeparator; } } public new Stream OpenFile (string path) { return base.OpenFile (path); } public new ControlAdapter ResolveAdapter () { return base.ResolveAdapter (); } #endif } class NamingContainer : Control, INamingContainer { } class ControlWithTemplate : Control { ITemplate _template; [TemplateContainer (typeof (TemplateContainer))] public ITemplate Template { get { return _template; } set { _template = value; } } protected override void CreateChildControls () { Controls.Clear (); TemplateContainer container = new TemplateContainer (); Controls.Add (container); if (Template != null) Template.InstantiateIn (container); } } class TemplateContainer : Control, INamingContainer { } #endregion } #if NET_2_0 public class Customadaptercontrol : Control { public new ControlAdapter Adapter { get { return base.Adapter; } } public new ControlAdapter ResolveAdapter () { return base.ResolveAdapter (); } } public class Customadapter : ControlAdapter { } class EnsureIDControl : Control { public void DoEnsureID () { EnsureID (); } } #endif public class ChildControlsCreatedControl : Control { protected override void CreateChildControls () { Controls.Add (new Control ()); } public void DoEnsureChildControls () { EnsureChildControls (); } public void SetChildControlsCreated (bool value) { ChildControlsCreated = value; } } }