2 // Tests for System.Web.UI.Adapters.ControlAdapter
5 // Dean Brettle (dean@brettle.com)
7 // Copyright (C) 2007 Novell, Inc (http://www.novell.com)
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:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
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.
30 using NUnit.Framework;
32 using System.Collections;
35 using System.Globalization;
38 using System.Web.UI.WebControls;
39 using System.Web.UI.Adapters;
40 using System.Web.Configuration;
41 using MonoTests.SystemWeb.Framework;
44 namespace MonoTests.System.Web.UI.Adapters
47 public class ControlAdapterTest
49 [Test (Description="Bug #517172")]
50 public void CreateChildControls ()
52 MyControl c = new MyControl ();
53 c.AdapterCallCreateChildControls ();
54 Assert.IsTrue (c.create_child_controls_called, "CreateChildControls #1");
58 public void BeginRender ()
60 MyControlAdapter a = new MyControlAdapter ();
61 MyHtmlTextWriter w = new MyHtmlTextWriter ();
62 a.CallBeginRender (w);
63 Assert.IsTrue (w.begin_render_called, "BeginRender #1");
67 public void EndRender ()
69 MyControlAdapter a = new MyControlAdapter ();
70 MyHtmlTextWriter w = new MyHtmlTextWriter ();
72 Assert.IsTrue (w.end_render_called, "EndRender #1");
78 MyControl c = new MyControl();
79 MyHtmlTextWriter w = new MyHtmlTextWriter ();
80 c.AdapterCallRender (w);
81 Assert.IsTrue (c.render_called, "Render #1");
85 public void RenderChildren ()
87 MyControl c = new MyControl ();
88 MyHtmlTextWriter w = new MyHtmlTextWriter ();
89 c.AdapterCallRenderChildren (w);
90 Assert.IsTrue (c.render_children_called, "RenderChildren #1");
96 MyControl c = new MyControl ();
97 EventArgs e = new EventArgs ();
98 c.AdapterCallOnInit (e);
99 Assert.AreEqual (e, c.on_init_arg, "OnInit #1");
103 public void OnLoad ()
105 MyControl c = new MyControl ();
106 EventArgs e = new EventArgs ();
107 c.AdapterCallOnLoad (e);
108 Assert.AreEqual (e, c.on_load_arg, "OnLoad #1");
112 public void OnPreRender ()
114 MyControl c = new MyControl ();
115 EventArgs e = new EventArgs ();
116 c.AdapterCallOnPreRender (e);
117 Assert.AreEqual (e, c.on_pre_render_arg, "OnPreRender #1");
121 public void OnUnload ()
123 MyControl c = new MyControl ();
124 EventArgs e = new EventArgs ();
125 c.AdapterCallOnUnload (e);
126 Assert.AreEqual (e, c.on_unload_arg, "OnUnload #1");
132 MyControl c = new MyControl ();
133 c.Page = new Page ();
135 Assert.AreEqual (c.Page, c.AdapterGetPage (), "Page #1");
139 public void PageAdapter ()
141 MyControl c = new MyControl ();
142 PageAdapter pa = new MyPageAdapter ();
143 c.Page = new MyPage (pa);
144 c.AdapterGetPageAdapter ();
145 Assert.AreEqual (c.Page.PageAdapter, c.AdapterGetPageAdapter (), "PageAdapter #1");
149 [Category ("NunitWeb")]
150 public void Browser ()
152 WebTest t = new WebTest (PageInvoker.CreateOnInit (Browser_OnInit));
156 public static void Browser_OnInit (Page p)
158 MyControl c = new MyControl ();
161 Assert.AreEqual (p.Request.Browser, c.AdapterGetBrowser (), "Browser #1");
166 [Category ("NunitWeb")]
167 public void ConfigCapabilitiesNotCalled ()
169 WebTest t = new WebTest (new HandlerInvoker (ConfigCapabilitiesNotCalled_Reset));
171 t = new WebTest (PageInvoker.CreateOnInit (ConfigCapabilitiesNotCalled_OnInit));
175 public static void ConfigCapabilitiesNotCalled_Reset ()
178 SystemWebTestShim.HttpCapabilitiesBase.GetConfigCapabilities_called = false;
182 private static EventHandler end_request_handler;
184 public static void ConfigCapabilitiesNotCalled_OnInit (Page p)
186 end_request_handler = new EventHandler (ConfigCapabilitiesNotCalled_EndRequest);
187 HttpContext.Current.ApplicationInstance.EndRequest += end_request_handler;
190 public static void ConfigCapabilitiesNotCalled_EndRequest (object sender, EventArgs args)
192 // Ensure that this handler doesn't stick around for other tests.
193 HttpContext.Current.ApplicationInstance.EndRequest -= end_request_handler;
195 // GetConfigCapabilities() should not have been called because there are no
196 // files in App_Browsers/.
198 Assert.IsFalse (SystemWebTestShim.HttpCapabilitiesBase.GetConfigCapabilities_called,
199 "ConfigCapabilitiesNotCalled #1");
203 #region Support classes
205 class MyPageAdapter : PageAdapter
207 internal MyPageAdapter () : base ()
214 internal MyPage (PageAdapter pa) : base ()
219 private PageAdapter page_adapter;
221 protected override ControlAdapter ResolveAdapter ()
227 class MyControl : Control
229 internal bool create_child_controls_called;
230 protected internal override void CreateChildControls ()
232 create_child_controls_called = true;
235 internal bool render_called = false;
236 protected internal override void Render (HtmlTextWriter w)
238 render_called = true;
241 internal bool render_children_called = false;
242 protected internal override void RenderChildren (HtmlTextWriter w)
244 render_children_called = true;
247 internal EventArgs on_init_arg = null;
248 protected internal override void OnInit (EventArgs e)
253 internal EventArgs on_load_arg = null;
254 protected internal override void OnLoad (EventArgs e)
259 internal EventArgs on_pre_render_arg = null;
260 protected internal override void OnPreRender (EventArgs e)
262 on_pre_render_arg = e;
265 internal EventArgs on_unload_arg = null;
266 protected internal override void OnUnload (EventArgs e)
271 internal MyControlAdapter adapter = new MyControlAdapter ();
272 protected override ControlAdapter ResolveAdapter ()
277 internal void AdapterCallRender (HtmlTextWriter w)
279 ((MyControlAdapter)Adapter).CallRender (w);
282 internal void AdapterCallRenderChildren (HtmlTextWriter w)
284 ((MyControlAdapter)Adapter).CallRenderChildren (w);
287 internal void AdapterCallCreateChildControls ()
289 ((MyControlAdapter)Adapter).CallCreateChildControls ();
292 internal void AdapterCallOnInit (EventArgs e)
294 ((MyControlAdapter)Adapter).CallOnInit (e);
297 internal void AdapterCallOnLoad (EventArgs e)
299 ((MyControlAdapter)Adapter).CallOnLoad (e);
302 internal void AdapterCallOnPreRender (EventArgs e)
304 ((MyControlAdapter)Adapter).CallOnPreRender (e);
307 internal void AdapterCallOnUnload (EventArgs e)
309 ((MyControlAdapter)Adapter).CallOnUnload (e);
312 internal Page AdapterGetPage ()
314 return ((MyControlAdapter)Adapter).GetPage ();
317 internal PageAdapter AdapterGetPageAdapter ()
319 return ((MyControlAdapter)Adapter).GetPageAdapter ();
322 internal HttpBrowserCapabilities AdapterGetBrowser ()
324 return ((MyControlAdapter)Adapter).GetBrowser ();
328 class MyControlAdapter : ControlAdapter
330 internal MyControlAdapter () : base ()
334 internal void CallCreateChildControls ()
336 CreateChildControls ();
339 internal void CallBeginRender (HtmlTextWriter w)
344 internal void CallEndRender (HtmlTextWriter w)
349 internal void CallRender (HtmlTextWriter w)
354 internal void CallRenderChildren (HtmlTextWriter w)
359 internal void CallOnInit (EventArgs e)
364 internal void CallOnLoad (EventArgs e)
369 internal void CallOnPreRender (EventArgs e)
374 internal void CallOnUnload (EventArgs e)
379 internal Page GetPage ()
384 internal PageAdapter GetPageAdapter ()
389 internal HttpBrowserCapabilities GetBrowser ()
395 class MyHtmlTextWriter : HtmlTextWriter
397 internal MyHtmlTextWriter () : base (new StringWriter ())
401 internal bool begin_render_called = false;
402 public override void BeginRender ()
404 begin_render_called = true;
407 internal bool end_render_called = false;
408 public override void EndRender ()
410 end_render_called = true;