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