1 // 2 // Tests for System.Web.UI.Adapters.ControlAdapter 3 // 4 // Author: 5 // Dean Brettle (dean@brettle.com) 6 // 7 // Copyright (C) 2007 Novell, Inc (http://www.novell.com) 8 // 9 // Permission is hereby granted, free of charge, to any person obtaining 10 // a copy of this software and associated documentation files (the 11 // "Software"), to deal in the Software without restriction, including 12 // without limitation the rights to use, copy, modify, merge, publish, 13 // distribute, sublicense, and/or sell copies of the Software, and to 14 // permit persons to whom the Software is furnished to do so, subject to 15 // the following conditions: 16 // 17 // The above copyright notice and this permission notice shall be 18 // included in all copies or substantial portions of the Software. 19 // 20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 // 28 29 using NUnit.Framework; 30 using System; 31 using System.Collections; 32 using System.Drawing; 33 using System.IO; 34 using System.Globalization; 35 using System.Web; 36 using System.Web.UI; 37 using System.Web.UI.WebControls; 38 using System.Web.UI.Adapters; 39 using System.Web.Configuration; 40 using MonoTests.SystemWeb.Framework; 41 42 43 namespace MonoTests.System.Web.UI.Adapters 44 { 45 [TestFixture] 46 public class ControlAdapterTest 47 { 48 [Test (Description="Bug #517172")] CreateChildControls()49 public void CreateChildControls () 50 { 51 MyControl c = new MyControl (); 52 c.AdapterCallCreateChildControls (); 53 Assert.IsTrue (c.create_child_controls_called, "CreateChildControls #1"); 54 } 55 56 [Test] BeginRender()57 public void BeginRender () 58 { 59 MyControlAdapter a = new MyControlAdapter (); 60 MyHtmlTextWriter w = new MyHtmlTextWriter (); 61 a.CallBeginRender (w); 62 Assert.IsTrue (w.begin_render_called, "BeginRender #1"); 63 } 64 65 [Test] EndRender()66 public void EndRender () 67 { 68 MyControlAdapter a = new MyControlAdapter (); 69 MyHtmlTextWriter w = new MyHtmlTextWriter (); 70 a.CallEndRender (w); 71 Assert.IsTrue (w.end_render_called, "EndRender #1"); 72 } 73 74 [Test] Render()75 public void Render () 76 { 77 MyControl c = new MyControl(); 78 MyHtmlTextWriter w = new MyHtmlTextWriter (); 79 c.AdapterCallRender (w); 80 Assert.IsTrue (c.render_called, "Render #1"); 81 } 82 83 [Test] RenderChildren()84 public void RenderChildren () 85 { 86 MyControl c = new MyControl (); 87 MyHtmlTextWriter w = new MyHtmlTextWriter (); 88 c.AdapterCallRenderChildren (w); 89 Assert.IsTrue (c.render_children_called, "RenderChildren #1"); 90 } 91 92 [Test] OnInit()93 public void OnInit () 94 { 95 MyControl c = new MyControl (); 96 EventArgs e = new EventArgs (); 97 c.AdapterCallOnInit (e); 98 Assert.AreEqual (e, c.on_init_arg, "OnInit #1"); 99 } 100 101 [Test] OnLoad()102 public void OnLoad () 103 { 104 MyControl c = new MyControl (); 105 EventArgs e = new EventArgs (); 106 c.AdapterCallOnLoad (e); 107 Assert.AreEqual (e, c.on_load_arg, "OnLoad #1"); 108 } 109 110 [Test] OnPreRender()111 public void OnPreRender () 112 { 113 MyControl c = new MyControl (); 114 EventArgs e = new EventArgs (); 115 c.AdapterCallOnPreRender (e); 116 Assert.AreEqual (e, c.on_pre_render_arg, "OnPreRender #1"); 117 } 118 119 [Test] OnUnload()120 public void OnUnload () 121 { 122 MyControl c = new MyControl (); 123 EventArgs e = new EventArgs (); 124 c.AdapterCallOnUnload (e); 125 Assert.AreEqual (e, c.on_unload_arg, "OnUnload #1"); 126 } 127 128 [Test] Page()129 public void Page () 130 { 131 MyControl c = new MyControl (); 132 c.Page = new Page (); 133 c.AdapterGetPage (); 134 Assert.AreEqual (c.Page, c.AdapterGetPage (), "Page #1"); 135 } 136 137 [Test] PageAdapter()138 public void PageAdapter () 139 { 140 MyControl c = new MyControl (); 141 PageAdapter pa = new MyPageAdapter (); 142 c.Page = new MyPage (pa); 143 c.AdapterGetPageAdapter (); 144 Assert.AreEqual (c.Page.PageAdapter, c.AdapterGetPageAdapter (), "PageAdapter #1"); 145 } 146 147 [Test] 148 [Category ("NunitWeb")] Browser()149 public void Browser () 150 { 151 WebTest t = new WebTest (PageInvoker.CreateOnInit (Browser_OnInit)); 152 t.Run (); 153 } 154 Browser_OnInit(Page p)155 public static void Browser_OnInit (Page p) 156 { 157 MyControl c = new MyControl (); 158 p.Controls.Add (c); 159 160 Assert.AreEqual (p.Request.Browser, c.AdapterGetBrowser (), "Browser #1"); 161 } 162 163 164 [Test] 165 [Category ("NunitWeb")] ConfigCapabilitiesNotCalled()166 public void ConfigCapabilitiesNotCalled () 167 { 168 WebTest t = new WebTest (new HandlerInvoker (ConfigCapabilitiesNotCalled_Reset)); 169 t.Run (); 170 t = new WebTest (PageInvoker.CreateOnInit (ConfigCapabilitiesNotCalled_OnInit)); 171 t.Run (); 172 } 173 ConfigCapabilitiesNotCalled_Reset()174 public static void ConfigCapabilitiesNotCalled_Reset () 175 { 176 #if !TARGET_DOTNET 177 SystemWebTestShim.HttpCapabilitiesBase.GetConfigCapabilities_called = false; 178 #endif 179 } 180 181 private static EventHandler end_request_handler; 182 ConfigCapabilitiesNotCalled_OnInit(Page p)183 public static void ConfigCapabilitiesNotCalled_OnInit (Page p) 184 { 185 end_request_handler = new EventHandler (ConfigCapabilitiesNotCalled_EndRequest); 186 HttpContext.Current.ApplicationInstance.EndRequest += end_request_handler; 187 } 188 ConfigCapabilitiesNotCalled_EndRequest(object sender, EventArgs args)189 public static void ConfigCapabilitiesNotCalled_EndRequest (object sender, EventArgs args) 190 { 191 // Ensure that this handler doesn't stick around for other tests. 192 HttpContext.Current.ApplicationInstance.EndRequest -= end_request_handler; 193 194 // GetConfigCapabilities() should not have been called because there are no 195 // files in App_Browsers/. 196 #if !TARGET_DOTNET 197 Assert.IsFalse (SystemWebTestShim.HttpCapabilitiesBase.GetConfigCapabilities_called, 198 "ConfigCapabilitiesNotCalled #1"); 199 #endif 200 } 201 202 #region Support classes 203 204 class MyPageAdapter : PageAdapter 205 { MyPageAdapter()206 internal MyPageAdapter () : base () 207 { 208 } 209 } 210 211 class MyPage : Page 212 { MyPage(PageAdapter pa)213 internal MyPage (PageAdapter pa) : base () 214 { 215 page_adapter = pa; 216 } 217 218 private PageAdapter page_adapter; 219 ResolveAdapter()220 protected override ControlAdapter ResolveAdapter () 221 { 222 return page_adapter; 223 } 224 } 225 226 class MyControl : Control 227 { 228 internal bool create_child_controls_called; CreateChildControls()229 protected internal override void CreateChildControls () 230 { 231 create_child_controls_called = true; 232 } 233 234 internal bool render_called = false; Render(HtmlTextWriter w)235 protected internal override void Render (HtmlTextWriter w) 236 { 237 render_called = true; 238 } 239 240 internal bool render_children_called = false; RenderChildren(HtmlTextWriter w)241 protected internal override void RenderChildren (HtmlTextWriter w) 242 { 243 render_children_called = true; 244 } 245 246 internal EventArgs on_init_arg = null; OnInit(EventArgs e)247 protected internal override void OnInit (EventArgs e) 248 { 249 on_init_arg = e; 250 } 251 252 internal EventArgs on_load_arg = null; OnLoad(EventArgs e)253 protected internal override void OnLoad (EventArgs e) 254 { 255 on_load_arg = e; 256 } 257 258 internal EventArgs on_pre_render_arg = null; OnPreRender(EventArgs e)259 protected internal override void OnPreRender (EventArgs e) 260 { 261 on_pre_render_arg = e; 262 } 263 264 internal EventArgs on_unload_arg = null; OnUnload(EventArgs e)265 protected internal override void OnUnload (EventArgs e) 266 { 267 on_unload_arg = e; 268 } 269 270 internal MyControlAdapter adapter = new MyControlAdapter (); ResolveAdapter()271 protected override ControlAdapter ResolveAdapter () 272 { 273 return adapter; 274 } 275 AdapterCallRender(HtmlTextWriter w)276 internal void AdapterCallRender (HtmlTextWriter w) 277 { 278 ((MyControlAdapter)Adapter).CallRender (w); 279 } 280 AdapterCallRenderChildren(HtmlTextWriter w)281 internal void AdapterCallRenderChildren (HtmlTextWriter w) 282 { 283 ((MyControlAdapter)Adapter).CallRenderChildren (w); 284 } 285 AdapterCallCreateChildControls()286 internal void AdapterCallCreateChildControls () 287 { 288 ((MyControlAdapter)Adapter).CallCreateChildControls (); 289 } 290 AdapterCallOnInit(EventArgs e)291 internal void AdapterCallOnInit (EventArgs e) 292 { 293 ((MyControlAdapter)Adapter).CallOnInit (e); 294 } 295 AdapterCallOnLoad(EventArgs e)296 internal void AdapterCallOnLoad (EventArgs e) 297 { 298 ((MyControlAdapter)Adapter).CallOnLoad (e); 299 } 300 AdapterCallOnPreRender(EventArgs e)301 internal void AdapterCallOnPreRender (EventArgs e) 302 { 303 ((MyControlAdapter)Adapter).CallOnPreRender (e); 304 } 305 AdapterCallOnUnload(EventArgs e)306 internal void AdapterCallOnUnload (EventArgs e) 307 { 308 ((MyControlAdapter)Adapter).CallOnUnload (e); 309 } 310 AdapterGetPage()311 internal Page AdapterGetPage () 312 { 313 return ((MyControlAdapter)Adapter).GetPage (); 314 } 315 AdapterGetPageAdapter()316 internal PageAdapter AdapterGetPageAdapter () 317 { 318 return ((MyControlAdapter)Adapter).GetPageAdapter (); 319 } 320 AdapterGetBrowser()321 internal HttpBrowserCapabilities AdapterGetBrowser () 322 { 323 return ((MyControlAdapter)Adapter).GetBrowser (); 324 } 325 } 326 327 class MyControlAdapter : ControlAdapter 328 { MyControlAdapter()329 internal MyControlAdapter () : base () 330 { 331 } 332 CallCreateChildControls()333 internal void CallCreateChildControls () 334 { 335 CreateChildControls (); 336 } 337 CallBeginRender(HtmlTextWriter w)338 internal void CallBeginRender (HtmlTextWriter w) 339 { 340 BeginRender (w); 341 } 342 CallEndRender(HtmlTextWriter w)343 internal void CallEndRender (HtmlTextWriter w) 344 { 345 EndRender (w); 346 } 347 CallRender(HtmlTextWriter w)348 internal void CallRender (HtmlTextWriter w) 349 { 350 Render (w); 351 } 352 CallRenderChildren(HtmlTextWriter w)353 internal void CallRenderChildren (HtmlTextWriter w) 354 { 355 RenderChildren (w); 356 } 357 CallOnInit(EventArgs e)358 internal void CallOnInit (EventArgs e) 359 { 360 OnInit (e); 361 } 362 CallOnLoad(EventArgs e)363 internal void CallOnLoad (EventArgs e) 364 { 365 OnLoad (e); 366 } 367 CallOnPreRender(EventArgs e)368 internal void CallOnPreRender (EventArgs e) 369 { 370 OnPreRender (e); 371 } 372 CallOnUnload(EventArgs e)373 internal void CallOnUnload (EventArgs e) 374 { 375 OnUnload (e); 376 } 377 GetPage()378 internal Page GetPage () 379 { 380 return Page; 381 } 382 GetPageAdapter()383 internal PageAdapter GetPageAdapter () 384 { 385 return PageAdapter; 386 } 387 GetBrowser()388 internal HttpBrowserCapabilities GetBrowser () 389 { 390 return Browser; 391 } 392 } 393 394 class MyHtmlTextWriter : HtmlTextWriter 395 { MyHtmlTextWriter()396 internal MyHtmlTextWriter () : base (new StringWriter ()) 397 { 398 } 399 400 internal bool begin_render_called = false; BeginRender()401 public override void BeginRender () 402 { 403 begin_render_called = true; 404 } 405 406 internal bool end_render_called = false; EndRender()407 public override void EndRender () 408 { 409 end_render_called = true; 410 } 411 } 412 #endregion 413 } 414 } 415