2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.Adapters / ControlAdapterTest.cs
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 #if NET_2_0
30 using NUnit.Framework;
31 using System;
32 using System.Collections;
33 using System.Drawing;
34 using System.IO;
35 using System.Globalization;
36 using System.Web;
37 using System.Web.UI;
38 using System.Web.UI.WebControls;
39 using System.Web.UI.Adapters;
40 using System.Web.Configuration;
41 using MonoTests.SystemWeb.Framework;
42
43
44 namespace MonoTests.System.Web.UI.Adapters
45 {
46         [TestFixture]
47         public class ControlAdapterTest
48         {
49                 [Test]
50                 public void BeginRender ()
51                 {
52                         MyControlAdapter a = new MyControlAdapter ();
53                         MyHtmlTextWriter w = new MyHtmlTextWriter ();
54                         a.CallBeginRender (w);
55                         Assert.IsTrue (w.begin_render_called, "BeginRender #1");
56                 }
57                 
58                 [Test]
59                 public void EndRender ()
60                 {
61                         MyControlAdapter a = new MyControlAdapter ();
62                         MyHtmlTextWriter w = new MyHtmlTextWriter ();
63                         a.CallEndRender (w);
64                         Assert.IsTrue (w.end_render_called, "EndRender #1");
65                 }
66
67                 [Test]
68                 public void Render ()
69                 {
70                         MyControl c = new MyControl();
71                         MyHtmlTextWriter w = new MyHtmlTextWriter ();
72                         c.AdapterCallRender (w);
73                         Assert.IsTrue (c.render_called, "Render #1");
74                 }
75                 
76                 [Test]
77                 public void RenderChildren ()
78                 {
79                         MyControl c = new MyControl ();
80                         MyHtmlTextWriter w = new MyHtmlTextWriter ();
81                         c.AdapterCallRenderChildren (w);
82                         Assert.IsTrue (c.render_children_called, "RenderChildren #1");
83                 }
84
85                 [Test]
86                 public void OnInit ()
87                 {
88                         MyControl c = new MyControl ();
89                         EventArgs e = new EventArgs ();
90                         c.AdapterCallOnInit (e);
91                         Assert.AreEqual (e, c.on_init_arg, "OnInit #1");
92                 }
93
94                 [Test]
95                 public void OnLoad ()
96                 {
97                         MyControl c = new MyControl ();
98                         EventArgs e = new EventArgs ();
99                         c.AdapterCallOnLoad (e);
100                         Assert.AreEqual (e, c.on_load_arg, "OnLoad #1");
101                 }
102                 
103                 [Test]
104                 public void OnPreRender ()
105                 {
106                         MyControl c = new MyControl ();
107                         EventArgs e = new EventArgs ();
108                         c.AdapterCallOnPreRender (e);
109                         Assert.AreEqual (e, c.on_pre_render_arg, "OnPreRender #1");
110                 }
111
112                 [Test]
113                 public void OnUnload ()
114                 {
115                         MyControl c = new MyControl ();
116                         EventArgs e = new EventArgs ();
117                         c.AdapterCallOnUnload (e);
118                         Assert.AreEqual (e, c.on_unload_arg, "OnUnload #1");
119                 }
120                 
121                 [Test]
122                 public void Page ()
123                 {
124                         MyControl c = new MyControl ();
125                         c.Page = new Page ();
126                         c.AdapterGetPage ();
127                         Assert.AreEqual (c.Page, c.AdapterGetPage (), "Page #1");
128                 }
129                 
130                 [Test]
131                 public void PageAdapter ()
132                 {
133                         MyControl c = new MyControl ();
134                         PageAdapter pa = new MyPageAdapter ();
135                         c.Page = new MyPage (pa);
136                         c.AdapterGetPageAdapter ();
137                         Assert.AreEqual (c.Page.PageAdapter, c.AdapterGetPageAdapter (), "PageAdapter #1");
138                 }
139                 
140                 [Test]
141                 [Category ("NunitWeb")]
142                 public void Browser () 
143                 {
144                         WebTest t = new WebTest (PageInvoker.CreateOnInit (Browser_OnInit));
145                         t.Run ();
146                 }
147                                 
148                 public static void Browser_OnInit (Page p) 
149                 {
150                         MyControl c = new MyControl ();
151                         p.Controls.Add (c);
152
153                         Assert.AreEqual (p.Request.Browser, c.AdapterGetBrowser (), "Browser #1");
154                 }
155                 
156                 
157                 [Test]
158                 [Category ("NunitWeb")]
159                 public void ConfigCapabilitiesNotCalled () 
160                 {
161                         WebTest t = new WebTest (new HandlerInvoker (ConfigCapabilitiesNotCalled_Reset));
162                         t.Run ();
163                         t = new WebTest (PageInvoker.CreateOnInit (ConfigCapabilitiesNotCalled_OnInit));
164                         t.Run ();
165                 }
166                 
167                 public static void ConfigCapabilitiesNotCalled_Reset ()
168                 {
169                         SystemWebTestShim.HttpCapabilitiesBase.GetConfigCapabilities_called = false;
170                 }
171                         
172                 private static EventHandler end_request_handler;
173                 
174                 public static void ConfigCapabilitiesNotCalled_OnInit (Page p) 
175                 {
176                         end_request_handler = new EventHandler (ConfigCapabilitiesNotCalled_EndRequest);
177                         HttpContext.Current.ApplicationInstance.EndRequest += end_request_handler;
178                 }
179                 
180                 public static void ConfigCapabilitiesNotCalled_EndRequest (object sender, EventArgs args)
181                 {
182                         // Ensure that this handler doesn't stick around for other tests.
183                         HttpContext.Current.ApplicationInstance.EndRequest -= end_request_handler;
184                 
185                         // GetConfigCapabilities() should not have been called because there are no
186                         // files in App_Browsers/.
187                         Assert.IsFalse (SystemWebTestShim.HttpCapabilitiesBase.GetConfigCapabilities_called,
188                                 "ConfigCapabilitiesNotCalled #1");
189                 }
190                 
191 #region Support classes
192                 
193                 class MyPageAdapter : PageAdapter
194                 {
195                         internal MyPageAdapter () : base ()
196                         {
197                         }
198                 }
199                 
200                 class MyPage : Page
201                 {
202                         internal MyPage (PageAdapter pa) : base ()
203                         {
204                                 page_adapter = pa;
205                         }
206                         
207                         private PageAdapter page_adapter;
208                         
209                         protected override ControlAdapter ResolveAdapter ()
210                         {
211                                 return page_adapter;
212                         }
213                 }
214
215                 class MyControl : Control
216                 {
217                         internal bool render_called = false;
218                         protected override void Render (HtmlTextWriter w)
219                         {
220                                 render_called = true;
221                         }
222                         
223                         internal bool render_children_called = false;
224                         protected override void RenderChildren (HtmlTextWriter w)
225                         {
226                                 render_children_called = true;
227                         }
228
229                         internal EventArgs on_init_arg = null;
230                         protected override void OnInit (EventArgs e)
231                         {
232                                 on_init_arg = e;
233                         }
234
235                         internal EventArgs on_load_arg = null;
236                         protected override void OnLoad (EventArgs e)
237                         {
238                                 on_load_arg = e;
239                         }
240                         
241                         internal EventArgs on_pre_render_arg = null;
242                         protected override void OnPreRender (EventArgs e)
243                         {
244                                 on_pre_render_arg = e;
245                         }
246
247                         internal EventArgs on_unload_arg = null;
248                         protected override void OnUnload (EventArgs e)
249                         {
250                                 on_unload_arg = e;
251                         }
252
253                         internal MyControlAdapter adapter = new MyControlAdapter ();
254                         protected override ControlAdapter ResolveAdapter ()
255                         {
256                                 return adapter;
257                         }
258                         
259                         internal void AdapterCallRender (HtmlTextWriter w)
260                         {
261                                 ((MyControlAdapter)Adapter).CallRender (w);
262                         }
263
264                         internal void AdapterCallRenderChildren (HtmlTextWriter w)
265                         {
266                                 ((MyControlAdapter)Adapter).CallRenderChildren (w);
267                         }
268
269                         internal void AdapterCallOnInit (EventArgs e)
270                         {
271                                 ((MyControlAdapter)Adapter).CallOnInit (e);
272                         }
273
274                         internal void AdapterCallOnLoad (EventArgs e)
275                         {
276                                 ((MyControlAdapter)Adapter).CallOnLoad (e);
277                         }
278
279                         internal void AdapterCallOnPreRender (EventArgs e)
280                         {
281                                 ((MyControlAdapter)Adapter).CallOnPreRender (e);
282                         }
283
284                         internal void AdapterCallOnUnload (EventArgs e)
285                         {
286                                 ((MyControlAdapter)Adapter).CallOnUnload (e);
287                         }
288
289                         internal Page AdapterGetPage ()
290                         {
291                                 return ((MyControlAdapter)Adapter).GetPage ();
292                         }
293
294                         internal PageAdapter AdapterGetPageAdapter ()
295                         {
296                                 return ((MyControlAdapter)Adapter).GetPageAdapter ();
297                         }
298
299                         internal HttpBrowserCapabilities AdapterGetBrowser ()
300                         {
301                                 return ((MyControlAdapter)Adapter).GetBrowser ();
302                         }
303                 }
304
305                 class MyControlAdapter : ControlAdapter
306                 {
307                         internal MyControlAdapter () : base ()
308                         {
309                         }
310                         
311                         internal void CallBeginRender (HtmlTextWriter w)
312                         {
313                                 BeginRender (w);
314                         }
315
316                         internal void CallEndRender (HtmlTextWriter w)
317                         {
318                                 EndRender (w);
319                         }
320
321                         internal void CallRender (HtmlTextWriter w)
322                         {
323                                 Render (w);
324                         }
325
326                         internal void CallRenderChildren (HtmlTextWriter w)
327                         {
328                                 RenderChildren (w);
329                         }
330
331                         internal void CallOnInit (EventArgs e)
332                         {
333                                 OnInit (e);
334                         }
335
336                         internal void CallOnLoad (EventArgs e)
337                         {
338                                 OnLoad (e);
339                         }
340
341                         internal void CallOnPreRender (EventArgs e)
342                         {
343                                 OnPreRender (e);
344                         }
345
346                         internal void CallOnUnload (EventArgs e)
347                         {
348                                 OnUnload (e);
349                         }
350
351                         internal Page GetPage ()
352                         {
353                                 return Page;
354                         }
355
356                         internal PageAdapter GetPageAdapter ()
357                         {
358                                 return PageAdapter;
359                         }
360                         
361                         internal HttpBrowserCapabilities GetBrowser ()
362                         {
363                                 return Browser;
364                         }
365                 }
366                 
367                 class MyHtmlTextWriter : HtmlTextWriter
368                 {
369                         internal MyHtmlTextWriter () : base (new StringWriter ())
370                         {
371                         }
372                         
373                         internal bool begin_render_called = false;
374                         public override void BeginRender ()
375                         {
376                                 begin_render_called = true;
377                         }
378
379                         internal bool end_render_called = false;
380                         public override void EndRender ()
381                         {
382                                 end_render_called = true;
383                         }
384                 }
385 #endregion
386         }
387 }
388 #endif