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