296b2b19304246f377aefae1b3ba02886e466b4e
[mono.git] / mcs / class / System.Web / Test / mainsoft / NunitWeb / NunitWeb / PageInvoker.cs
1 #if TARGET_JVM
2 #define BUG_78521_FIXED
3 #endif
4
5 using System;
6 using System.Web.UI;
7
8 namespace MonoTests.SystemWeb.Framework
9 {
10         /// <summary>
11         /// This class is used to pass and invoke the user callbacks to all possible
12         /// <see cref="System.Web.UI.Page"/> lifecycle events. For the most
13         /// used events <see cref="System.Web.UI.Control.Init"/> and
14         /// <see cref="System.Web.UI.Control.Load"/> there are convenience
15         /// creation methods <see cref="CreateOnInit"/> and <see cref="CreateOnLoad"/>.
16         /// In .NET 2.0 there same applies to PreInit event.
17         /// </summary>
18         /// <seealso cref="System.Web.UI.Control.Init"/>
19         /// <seealso cref="System.Web.UI.Control.Load"/>
20         /// <seealso cref="CreateOnInit"/>
21         /// <seealso cref="CreateOnLoad"/>
22         [Serializable]
23         public class PageInvoker:BaseInvoker
24         {
25                 /// <summary>
26                 /// The constructor method.
27                 /// </summary>
28                 /// <param name="delegates">Value which initializes <see cref="Delegates"/> property.</param>
29                 /// <seealso cref="Delegates"/>
30                 public PageInvoker (PageDelegates delegates)
31                 {
32                         Delegates = delegates;
33                 }
34
35                 PageDelegates _delegates;
36                 /// <summary>
37                 /// Set or get the <see cref="PageDelegates"/> collection.
38                 /// </summary>
39                 /// <seealso cref="PageDelegates"/>
40                 public PageDelegates Delegates
41                 {
42                         get { return _delegates; }
43                         set { _delegates = value; }
44                 }
45
46 #if NET_2_0
47                 /// <summary>
48                 /// Create a new <see cref="PageInvoker"/> which Delegates contain the
49                 /// given callback for PreInit event.
50                 /// </summary>
51                 /// <param name="callback">The user callback.</param>
52                 /// <returns>A new <see cref="PageInvoker"/> instance.</returns>
53                 public static PageInvoker CreateOnPreInit (PageDelegate callback)
54                 {
55                         PageDelegates pd = new PageDelegates ();
56                         pd.PreInit = callback;
57                         PageInvoker pi = new PageInvoker (pd);
58                         return pi;
59                 }
60 #endif
61
62                 /// <summary>
63                 /// Create a new <see cref="PageInvoker"/> which Delegates contain the
64                 /// given callback for Init event.
65                 /// </summary>
66                 /// <param name="callback">The user callback.</param>
67                 /// <returns>A new <see cref="PageInvoker"/> instance.</returns>
68                 public static PageInvoker CreateOnInit (PageDelegate callback)
69                 {
70                         PageDelegates pd = new PageDelegates ();
71                         pd.Init = callback;
72                         PageInvoker pi = new PageInvoker (pd);
73                         return pi;
74                 }
75
76                 /// <summary>
77                 /// Create a new <see cref="PageInvoker"/> which Delegates contain the
78                 /// given callback for Load event.
79                 /// </summary>
80                 /// <param name="callback">The user callback.</param>
81                 /// <returns>A new <see cref="PageInvoker"/> instance.</returns>
82                 public static PageInvoker CreateOnLoad (PageDelegate callback)
83                 {
84                         PageDelegates pd = new PageDelegates ();
85                         pd.Load = callback;
86                         PageInvoker pi = new PageInvoker (pd);
87                         return pi;
88                 }
89
90                 [NonSerialized]
91                 Page _page;
92
93                 /// <summary>
94                 /// Add the callbacks contained in <see cref="Delegates"/> to
95                 /// the given page's events.
96                 /// </summary>
97                 /// <param name="parameters">Must contain one parameter of type
98                 /// <see cref="System.Web.UI.Page"/></param>
99                 /// <seealso cref="Delegates"/>
100                 public override void DoInvoke (params object [] parameters)
101                 {
102                         base.DoInvoke (parameters);
103                         if (parameters.Length != 1 || !(parameters[0] is Page))
104                                 throw new ArgumentException ("A single parameter with type System.Web.UI.Page is expected");
105
106                         _page = (Page) parameters[0];
107
108 #if NET_2_0
109 #if BUG_78521_FIXED
110                         _page.PreInit += OnPreInit;
111 #else
112                         OnPreInit (null, null);
113 #endif
114                         _page.LoadComplete += OnLoadComplete;
115                         _page.PreLoad += OnPreLoad;
116                         _page.PreRenderComplete += OnPreRenderComplete;
117                         _page.InitComplete += OnInitComplete;
118                         _page.SaveStateComplete += OnSaveStateComplete;
119 #endif
120                         _page.CommitTransaction += new EventHandler (OnCommitTransaction);
121                         _page.AbortTransaction += new EventHandler (OnAbortTransaction);
122                         _page.Error += new EventHandler (OnError);
123                         _page.Disposed += new EventHandler (OnDisposed);
124                         _page.DataBinding += new EventHandler (OnDataBinding);
125                         _page.Init += new EventHandler (OnInit);
126                         _page.Load += new EventHandler (OnLoad);
127                         _page.PreRender += new EventHandler (OnPreRender);
128                         _page.Unload += new EventHandler (OnUnload);
129                 }
130
131                 #region Handlers
132
133 #if NET_2_0
134                 /// <summary>
135                 /// This must be made private as soon as Mono allows using private methods for delegates
136                 /// </summary>
137                 /// <param name="sender"></param>
138                 /// <param name="a"></param>
139                 public void OnLoadComplete (object sender, EventArgs a)
140                 {
141                         Invoke (Delegates.LoadComplete);
142                 }
143                 /// <summary>
144                 /// This must be made private as soon as Mono allows using private methods for delegates
145                 /// </summary>
146                 /// <param name="sender"></param>
147                 /// <param name="a"></param>
148                 public void OnPreInit (object sender, EventArgs a)
149                 {
150                         Invoke (Delegates.PreInit);
151                 }
152                 /// <summary>
153                 /// This must be made private as soon as Mono allows using private methods for delegates
154                 /// </summary>
155                 /// <param name="sender"></param>
156                 /// <param name="a"></param>
157                 public void OnPreLoad (object sender, EventArgs a)
158                 {
159                         Invoke (Delegates.PreLoad);
160                 }
161                 /// <summary>
162                 /// This must be made private as soon as Mono allows using private methods for delegates
163                 /// </summary>
164                 /// <param name="sender"></param>
165                 /// <param name="a"></param>
166                 public void OnPreRenderComplete (object sender, EventArgs a)
167                 {
168                         Invoke (Delegates.PreRenderComplete);
169                 }
170                 /// <summary>
171                 /// This must be made private as soon as Mono allows using private methods for delegates
172                 /// </summary>
173                 /// <param name="sender"></param>
174                 /// <param name="a"></param>
175                 public void OnInitComplete (object sender, EventArgs a)
176                 {
177                         Invoke (Delegates.InitComplete);
178                 }
179                 /// <summary>
180                 /// This must be made private as soon as Mono allows using private methods for delegates
181                 /// </summary>
182                 /// <param name="sender"></param>
183                 /// <param name="a"></param>
184                 public void OnSaveStateComplete (object sender, EventArgs a)
185                 {
186                         Invoke (Delegates.SaveStateComplete);
187                 }
188 #endif
189                 /// <summary>
190                 /// This must be made private as soon as Mono allows using private methods for delegates
191                 /// </summary>
192                 /// <param name="sender"></param>
193                 /// <param name="a"></param>
194                 public void OnCommitTransaction (object sender, EventArgs a)
195                 {
196                         Invoke (Delegates.CommitTransaction);
197                 }
198                 /// <summary>
199                 /// This must be made private as soon as Mono allows using private methods for delegates
200                 /// </summary>
201                 /// <param name="sender"></param>
202                 /// <param name="a"></param>
203                 public void OnAbortTransaction (object sender, EventArgs a)
204                 {
205                         Invoke (Delegates.AbortTransaction);
206                 }
207                 /// <summary>
208                 /// This must be made private as soon as Mono allows using private methods for delegates
209                 /// </summary>
210                 /// <param name="sender"></param>
211                 /// <param name="a"></param>
212                 public void OnError (object sender, EventArgs a)
213                 {
214                         Invoke (Delegates.Error);
215                 }
216                 /// <summary>
217                 /// This must be made private as soon as Mono allows using private methods for delegates
218                 /// </summary>
219                 /// <param name="sender"></param>
220                 /// <param name="a"></param>
221                 public void OnDisposed (object sender, EventArgs a)
222                 {
223                         Invoke (Delegates.Disposed);
224                 }
225                 /// <summary>
226                 /// This must be made private as soon as Mono allows using private methods for delegates
227                 /// </summary>
228                 /// <param name="sender"></param>
229                 /// <param name="a"></param>
230                 public void OnDataBinding (object sender, EventArgs a)
231                 {
232                         Invoke (Delegates.DataBinding);
233                 }
234                 /// <summary>
235                 /// This must be made private as soon as Mono allows using private methods for delegates
236                 /// </summary>
237                 /// <param name="sender"></param>
238                 /// <param name="a"></param>
239                 public void OnInit (object sender, EventArgs a)
240                 {
241                         Invoke (Delegates.Init);
242                 }
243                 /// <summary>
244                 /// This must be made private as soon as Mono allows using private methods for delegates
245                 /// </summary>
246                 /// <param name="sender"></param>
247                 /// <param name="a"></param>
248                 public void OnLoad (object sender, EventArgs a)
249                 {
250                         Invoke (Delegates.Load);
251                 }
252                 /// <summary>
253                 /// This must be made private as soon as Mono allows using private methods for delegates
254                 /// </summary>
255                 /// <param name="sender"></param>
256                 /// <param name="a"></param>
257                 public void OnPreRender (object sender, EventArgs a)
258                 {
259                         Invoke (Delegates.PreRender);
260                 }
261                 /// <summary>
262                 /// This must be made private as soon as Mono allows using private methods for delegates
263                 /// </summary>
264                 /// <param name="sender"></param>
265                 /// <param name="a"></param>
266                 public void OnUnload (object sender, EventArgs a)
267                 {
268                         Invoke (Delegates.Unload);
269                 }
270                 #endregion
271
272                 void Invoke (PageDelegate callback)
273                 {
274                         try {
275                                 if (callback != null)
276                                         callback (_page);
277                         }
278                         catch (Exception e) {
279                                 WebTest.RegisterException (e);
280                                 throw;
281                         }
282                 }
283
284                 /// <summary>
285                 /// Returns the URL of a generic empty page.
286                 /// </summary>
287                 /// <returns>The default URL.</returns>
288                 public override string GetDefaultUrl ()
289                 {
290                         return StandardUrl.EMPTY_PAGE;
291                 }
292         }
293 }