svn path=/trunk/mcs/; revision=62376
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / MenuTest.cs
1 //
2 // Tests for System.Web.UI.WebControls.MenuTest.cs
3 //
4 // Author:
5 //      Yoni Klein (yonik@mainsoft.com)
6 //
7 //
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 //
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 //
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
29
30 #if NET_2_0
31
32
33 using NUnit.Framework;
34 using System;
35 using System.Collections.Generic;
36 using System.Text;
37 using System.Web;
38 using System.Web.UI;
39 using System.Web.UI.WebControls;
40 using System.IO;
41 using System.Drawing;
42 using System.Threading;
43 using MyWebControl = System.Web.UI.WebControls;
44 using System.Collections;
45 using MonoTests.SystemWeb.Framework;
46 using MonoTests.stand_alone.WebHarness;
47 using System.Text.RegularExpressions;
48 using System.Reflection;
49
50 namespace MonoTests.System.Web.UI.WebControls
51 {
52         
53         
54         class PokerMenu:Menu
55         {
56                 public PokerMenu ()
57                 {
58                     TrackViewState();
59                 }
60                 public StateBag StateBag
61                 {
62                     get { return base.ViewState; }
63                 }
64                 public HtmlTextWriterTag OnTagKey()
65                 {
66                         return  TagKey;
67                 }
68                 public void DoOnDataBind(EventArgs e)
69                 {
70                         OnDataBinding(e);
71                 }
72                 public void DoOnDataBound (EventArgs e)
73                 {
74                         OnDataBound(e);
75                 }
76                 public void DoCreateChildControls ()
77                 {
78                         CreateChildControls ();
79                 }
80                 public void DoEnsureDataBound ()
81                 {
82                         EnsureDataBound ();
83                 }
84                 public void DoLoadViewState (object state)
85                 {
86                         LoadViewState (state);
87                 }
88                 public object DoSaveViewState ()
89                 {
90                         return SaveViewState ();
91                 }
92                 public void DoLoadControlState (object state)
93                 {
94                         LoadControlState (state);
95                 }
96                 public object DoSaveControlState ()
97                 {
98                        return SaveControlState ();
99                 }
100                 public void DoOnMenuItemClick (MenuEventArgs e)
101                 {
102                         OnMenuItemClick(e);
103                 }
104                 public void DoOnInit(EventArgs e)
105                 {
106                         OnInit(e);
107                 }
108                 public void DoMenuItemDataBound (MenuEventArgs e)
109                 {
110                         OnMenuItemDataBound (e);        
111                 }
112                 public void DoOnPreRender (EventArgs e)
113                 {
114                         base.OnPreRender(e);
115                 }
116                 public bool DoOnBubbleEvent(EventArgs e)
117                 {
118                         return base.OnBubbleEvent(this,e);
119                 }
120         }
121
122         [Serializable]
123         [TestFixture]
124         public class MenuTest
125         {       
126                 [Test]
127                 public void Menu_DefaultProperties ()
128                 {
129                         PokerMenu p = new PokerMenu ();
130                         Assert.AreEqual ("Click",PokerMenu.MenuItemClickCommandName,"Staic_MenuItemClickCommandName");
131                         Assert.AreEqual (0,p.Controls.Count,"ControlsCollection");
132                         Assert.AreEqual (0,p.DataBindings.Count,"DataBindings");
133                         Assert.AreEqual (500,p.DisappearAfter,"DisappearAfter");
134                         Assert.AreEqual (string.Empty, p.DynamicBottomSeparatorImageUrl, "DynamicBottomSeparatorImageUrl");
135                         Assert.IsTrue (p.DynamicEnableDefaultPopOutImage, "DynamicEnableDefaultPopOutImage");
136                         Assert.AreEqual (0, p.DynamicHorizontalOffset, "DynamicHorizontalOffset");
137                         Assert.IsNotNull (p.DynamicHoverStyle, "DynamicHoverStyle");
138                         Assert.AreEqual ("", p.DynamicItemFormatString, "DynamicItemFormatString");
139                         Assert.IsNull (p.DynamicItemTemplate, "DynamicItemTemplate");
140                         Assert.IsNotNull (p.DynamicMenuItemStyle, "DynamicMenuItemStyle");
141                         Assert.IsNotNull (p.DynamicMenuStyle, "DynamicMenuStyle");
142                         Assert.AreEqual (string.Empty,p.DynamicPopOutImageUrl,"DynamicPopOutImageUrl");
143                         Assert.IsNotNull (p.DynamicSelectedStyle, "DynamicSelectedStyle");
144                         Assert.AreEqual (string.Empty, p.DynamicTopSeparatorImageUrl, "DynamicTopSeparatorImageUrl");
145                         Assert.AreEqual (0, p.DynamicVerticalOffset, "DynamicVerticalOffset");
146                         Assert.AreEqual (0, p.Items.Count, "Items");
147                         Assert.AreEqual (false, p.ItemWrap, "ItemWrap");
148                         Assert.IsNotNull (p.LevelSelectedStyles, "LevelSelectedStyles");
149                         Assert.IsNotNull (p.LevelSubMenuStyles, "LevelSubMenuStyles");
150                         Assert.AreEqual (3, p.MaximumDynamicDisplayLevels, "MaximumDynamicDisplayLevels");
151                         Assert.AreEqual (Orientation.Vertical, p.Orientation, "Orientation");
152                         Assert.AreEqual ("/", p.PathSeparator.ToString(), "PathSeparator");
153                         Assert.AreEqual (string.Empty, p.ScrollDownImageUrl, "ScrollDownImageUrl");
154                         Assert.AreEqual (null, p.SelectedItem, "p.SelectedItem");
155                         Assert.AreEqual (string.Empty, p.StaticBottomSeparatorImageUrl, "StaticBottomSeparatorImageUrl");
156                         Assert.AreEqual (1, p.StaticDisplayLevels, "StaticDisplayLevels");
157                         Assert.AreEqual (true, p.StaticEnableDefaultPopOutImage, "StaticEnableDefaultPopOutImage");
158                         Assert.IsNotNull (p.StaticHoverStyle, "StaticHoverStyle");
159                         Assert.AreEqual ("", p.StaticItemFormatString, "StaticItemFormatString");
160                         Assert.AreEqual (null, p.StaticItemTemplate, "StaticItemTemplate");
161                         Assert.IsNotNull (p.StaticMenuItemStyle, "StaticMenuItemStyle");
162                         Assert.IsNotNull (p.StaticMenuStyle, "StaticMenuStyle");
163                         Assert.AreEqual ("", p.StaticPopOutImageUrl, "StaticPopOutImageUrl");
164                         Assert.IsNotNull (p.StaticSelectedStyle, "StaticSelectedStyle");
165                         Assert.AreEqual (Unit.Pixel(16), p.StaticSubMenuIndent, "StaticSubMenuIndent");
166                         Assert.AreEqual ("", p.StaticTopSeparatorImageUrl, "StaticTopSeparatorImageUrl");
167                         Assert.AreEqual ("", p.Target, "Target");
168                         Assert.IsNotNull (p.OnTagKey (), "TagKey");
169
170                 }
171
172                 [Test]
173                 [Category ("NotWorking")]
174                 public void Menu_DefaultPropertiesNotWorking ()
175                 {
176                         PokerMenu p = new PokerMenu ();
177                         Assert.AreEqual ("Skip Navigation Links", p.SkipLinkText, "SkipLinkText");
178                         Assert.AreEqual (string.Empty, p.SelectedValue, "SelectedValue");
179                         Assert.AreEqual ("Scroll up", p.ScrollUpText, "ScrollUpText");
180                         Assert.AreEqual ("Expand {0}", p.StaticPopOutImageTextFormatString, "StaticPopOutImageTextFormatString"); //not implemented
181                         Assert.AreEqual ("Scroll down", p.ScrollDownText, "ScrollDownText");
182                         Assert.AreEqual ("Expand {0}", p.DynamicPopOutImageTextFormatString, "DynamicPopOutImageTextFormatString"); //not implemented 
183                 }
184
185
186
187                 [Test]
188                 public void Menu_ChangeDefaultProperties ()
189                 {
190                         PokerMenu p = new PokerMenu ();
191                         Button B = new Button ();
192                         p.Controls.Add (B);
193                         Assert.AreEqual (1,p.Controls.Count, "ControlsCollection");
194
195                         MenuItemBinding M = new MenuItemBinding ();
196                         M.DataMember = "test";
197                         M.Depth = 0;
198                         M.TextField = "title"; 
199                         M.NavigateUrl="url";
200                         Object C = p.DataBindings;
201                         Assert.AreEqual (0, p.DataBindings.Count, "DataBindings#1");
202                         ((MenuItemBindingCollection)C).Add (M);
203                         Assert.AreEqual (1,p.DataBindings.Count,"DataBindings#2");
204
205                         p.DisappearAfter = 100;
206                         Assert.AreEqual (100, p.DisappearAfter, "DisappearAfter");
207
208                         p.DynamicBottomSeparatorImageUrl = "test.aspx";
209                         Assert.AreEqual ("test.aspx", p.DynamicBottomSeparatorImageUrl, "DynamicBottomSeparatorImageUrl");
210
211                         p.DynamicEnableDefaultPopOutImage = false;
212                         Assert.AreEqual (false,p.DynamicEnableDefaultPopOutImage, "DynamicEnableDefaultPopOutImage");
213
214                         p.DynamicHorizontalOffset = 10;
215                         Assert.AreEqual (10, p.DynamicHorizontalOffset, "DynamicHorizontalOffset");
216
217                         p.DynamicHoverStyle.BackColor = Color.Red;
218                         Assert.AreEqual (Color.Red ,p.DynamicHoverStyle.BackColor, "DynamicHoverStyle");
219
220                         p.DynamicItemFormatString = "Mytest";
221                         Assert.AreEqual ("Mytest", p.DynamicItemFormatString, "DynamicItemFormatString");
222
223                         MyWebControl.Image myImage = new MyWebControl.Image ();
224                         myImage.ImageUrl = "myimage.jpg";
225                         ImageTemplate Template = new ImageTemplate ();
226                         Template.MyImage = myImage;
227                         // end create template image
228                         p.DynamicItemTemplate = Template;
229                         Assert.IsNotNull (p.DynamicItemTemplate, "RootNodeTemplate");
230                         Assert.AreEqual (typeof (ImageTemplate), p.DynamicItemTemplate.GetType (), "RootNodeTemplate#1");
231
232                         p.DynamicMenuItemStyle.BackColor = Color.Red;                   
233                         Assert.AreEqual (Color.Red, p.DynamicMenuItemStyle.BackColor, "DynamicMenuItemStyle");
234
235                         p.DynamicMenuStyle.BackColor = Color.Red;
236                         Assert.AreEqual (Color.Red,p.DynamicMenuStyle.BackColor, "DynamicMenuStyle");
237
238                         p.DynamicPopOutImageUrl = "test";
239                         Assert.AreEqual ("test", p.DynamicPopOutImageUrl, "DynamicPopOutImageUrl");
240
241                         p.DynamicSelectedStyle.BackColor = Color.Red;
242                         Assert.AreEqual (Color.Red,p.DynamicSelectedStyle.BackColor, "DynamicSelectedStyle");
243
244                         p.DynamicTopSeparatorImageUrl = "test";
245                         Assert.AreEqual ("test", p.DynamicTopSeparatorImageUrl, "DynamicTopSeparatorImageUrl");
246
247                         p.DynamicVerticalOffset = 10;
248                         Assert.AreEqual (10, p.DynamicVerticalOffset, "DynamicVerticalOffset");
249
250                         MenuItem I = new MenuItem ();
251                         I.NavigateUrl = "default.aspx";
252                         I.Text = "MyText";
253                         I.ToolTip = "Test";
254                         p.Items.Add (I);
255                         Assert.AreEqual (1, p.Items.Count, "Items");
256
257                         p.ItemWrap = true;
258                         Assert.AreEqual (true, p.ItemWrap, "ItemWrap");
259
260                         MenuItemStyle S = new MenuItemStyle ();
261                         S.BackColor = Color.Red;
262                         p.LevelSelectedStyles.Add (S);
263                         Assert.AreEqual (1,p.LevelSelectedStyles.Count , "LevelSelectedStyles#1");
264                         Assert.AreEqual (true, p.LevelSelectedStyles.Contains (S), "LevelSelectedStyles#2");
265
266                         SubMenuStyle SM = new SubMenuStyle ();
267                         SM.BackColor = Color.Red;
268                         p.LevelSubMenuStyles.Add (SM);
269                         Assert.AreEqual(1, p.LevelSubMenuStyles.Count, "LevelSubMenuStyles#1");
270                         Assert.AreEqual (true, p.LevelSubMenuStyles.Contains (SM), "LevelSubMenuStyles#2");
271
272                         p.MaximumDynamicDisplayLevels = 5; 
273                         Assert.AreEqual (5, p.MaximumDynamicDisplayLevels, "MaximumDynamicDisplayLevels");
274
275                         p.Orientation = Orientation.Horizontal;
276                         Assert.AreEqual (Orientation.Horizontal, p.Orientation, "Orientation");
277
278                         p.PathSeparator = 'A';
279                         Assert.AreEqual ('A', p.PathSeparator, "PathSeparator");
280
281                         p.ScrollDownImageUrl = "test";
282                         Assert.AreEqual ("test", p.ScrollDownImageUrl, "ScrollDownImageUrl");
283
284                         p.ScrollDownText = "test";
285                         Assert.AreEqual ("test", p.ScrollDownText, "ScrollDownText");
286
287                         // This properties will be checked in events part of tests
288                         // Assert.AreEqual (0, p.SelectedItem, "p.SelectedItem");
289                         // Assert.AreEqual (string.Empty, p.SelectedValue, "SelectedValue");
290
291                         p.SkipLinkText = "test";
292                         Assert.AreEqual ("test", p.SkipLinkText, "SkipLinkText");
293
294                         p.StaticBottomSeparatorImageUrl = "test";
295                         Assert.AreEqual ("test", p.StaticBottomSeparatorImageUrl, "StaticBottomSeparatorImageUrl");
296
297                         p.StaticDisplayLevels = 2;
298                         Assert.AreEqual (2, p.StaticDisplayLevels, "StaticDisplayLevels");
299
300                         p.StaticEnableDefaultPopOutImage = false;
301                         Assert.AreEqual (false, p.StaticEnableDefaultPopOutImage, "StaticEnableDefaultPopOutImage");
302
303                         p.StaticHoverStyle.BackColor = Color.Red;
304                         Assert.AreEqual(Color.Red, p.StaticHoverStyle.BackColor, "StaticHoverStyle");
305
306                         p.StaticItemFormatString = "test";
307                         Assert.AreEqual ("test", p.StaticItemFormatString, "StaticItemFormatString");
308
309                         
310                         p.StaticItemTemplate = Template;
311                         Assert.IsNotNull (p.StaticItemTemplate, "StaticItemTemplate");
312
313                         p.StaticMenuItemStyle.BackColor = Color.Red;
314                         Assert.AreEqual(Color.Red,p.StaticMenuItemStyle.BackColor, "StaticMenuItemStyle");
315
316                         p.StaticMenuStyle.BackColor = Color.Red;
317                         Assert.AreEqual (Color.Red,p.StaticMenuStyle.BackColor, "StaticMenuStyle");
318
319                         p.StaticPopOutImageUrl = "test";
320                         Assert.AreEqual ("test", p.StaticPopOutImageUrl, "StaticPopOutImageUrl");
321
322                         p.StaticSelectedStyle.BackColor = Color.Red;
323                         Assert.AreEqual(Color.Red,p.StaticSelectedStyle.BackColor, "StaticSelectedStyle");
324
325                         p.StaticSubMenuIndent = 20;
326                         Assert.AreEqual (Unit.Pixel (20), p.StaticSubMenuIndent, "StaticSubMenuIndent");
327
328                         p.StaticTopSeparatorImageUrl = "test";
329                         Assert.AreEqual ("test", p.StaticTopSeparatorImageUrl, "StaticTopSeparatorImageUrl");
330
331                         p.Target = "test";
332                         Assert.AreEqual ("test", p.Target, "Target");
333                 }
334
335                 [Test]
336                 [Category ("NotWorking")]
337                 public void Menu_ChangeDefaultPropertiesNotWorking ()
338                 {
339                         PokerMenu p = new PokerMenu ();
340                         p.ScrollUpText = "test";
341                         Assert.AreEqual ("test", p.ScrollUpText, "ScrollUpText");
342                         p.DynamicPopOutImageTextFormatString = "test";
343                         Assert.AreEqual ("test", p.DynamicPopOutImageTextFormatString, "DynamicPopOutImageTextFormatString");
344                         p.StaticPopOutImageTextFormatString = "test";
345                         Assert.AreEqual ("test", p.StaticPopOutImageTextFormatString, "StaticPopOutImageTextFormatString");
346                 }
347
348                 [Test]
349                 public void Menu_ControlState()
350                 {
351                         PokerMenu p = new PokerMenu ();
352                         MenuItem I1 = new MenuItem ();
353                         MenuItem I2 = new MenuItem ();
354                         p.Items.Add (I1);
355                         p.Items.Add (I2);
356                         MenuEventArgs e = new MenuEventArgs (I1);
357                         p.DoOnMenuItemClick (e);
358                         object state = p.DoSaveControlState ();
359                         p.DoLoadControlState (state);
360                         e = new MenuEventArgs (I2);
361                         p.DoOnMenuItemClick (e);
362                         Console.WriteLine();
363                 }
364
365                 [Test]
366                 public void Menu_FindItem ()
367                 {
368                         PokerMenu p = new PokerMenu ();
369                         MenuItem I = new MenuItem ();
370                         string path = I.ValuePath;  
371                         p.Items.Add (I);
372                         MenuItem V = new MenuItem ();
373                         I.ChildItems.Add (V);
374                         MenuItem copy = p.FindItem (path);
375                         Assert.AreEqual (I, copy, "FindItem#1");
376                         path = V.ValuePath;
377                         Assert.AreEqual (V, p.FindItem (path), "FindItem#2");
378                 }
379
380                 
381                  // Set & Get DesignModeState dosn't tested 
382                  // Can't test on Page Load event 
383                  
384
385                 [Test]
386                 [Category ("NunitWeb")]
387                 [Category ("NotWorking")]  
388                 public void Menu_RenderBeginTag ()
389                 {
390                         new WebTest (PageInvoker.CreateOnLoad (_BeginTagRender)).Run ();
391                 }
392                 public static void _BeginTagRender(Page p)
393                 {
394                         PokerMenu pm = new PokerMenu ();
395                         p.Form.Controls.Add (pm);
396                         StringWriter sw = new StringWriter ();
397                         HtmlTextWriter tw = new HtmlTextWriter (sw);
398                         pm.RenderBeginTag (tw);
399                         string RenderedControlHtml = sw.ToString();
400                         string OriginControlHtml = @"<a href=""#ctl01_SkipLink"">
401                                                      <img alt=""Skip Navigation Links"" src=""/NunitWeb/WebResource.axd?d=gZrz8lvSQfolS1pG07HX9g2&amp;t=632784640484505569"" 
402                                                       width=""0"" style=""border-width:0px"" height=""0"" style=""border-width:0px;"" />
403                                                      </a><table id=""ctl01"" cellpadding=""0"" cellspacing=""0"" border=""0"">";
404
405
406
407                         HtmlDiff.AssertAreEqual(OriginControlHtml,RenderedControlHtml,"RenderBeginTag");
408                 }
409
410                 [Test]
411                 [Category ("NunitWeb")]
412                 [Category ("NotWorking")]  
413                 public void Menu_RenderEndTag ()
414                 {
415                         new WebTest (PageInvoker.CreateOnLoad (_EndTagRender)).Run ();
416                 }
417                 public static void _EndTagRender (Page p)
418                 {
419                         PokerMenu pm = new PokerMenu ();
420                         p.Form.Controls.Add (pm);
421                         StringWriter sw = new StringWriter ();
422                         HtmlTextWriter tw = new HtmlTextWriter (sw);
423                         pm.RenderBeginTag (tw);
424                         pm.RenderEndTag (tw);
425                         string RenderedControlHtml = sw.ToString ();
426                         string OriginControlHtml = @"<a href=""#ctl01_SkipLink"">
427                                                      <img alt=""Skip Navigation Links"" src=""/NunitWeb/WebResource.axd?d=gZrz8lvSQfolS1pG07HX9g2&amp;t=632784640484505569""
428                                                       width=""0"" style=""border-width:0px"" height=""0"" style=""border-width:0px;"" />
429                                                      </a><table id=""ctl01"" cellpadding=""0"" cellspacing=""0"" border=""0"">
430                                                      </table><a id=""ctl01_SkipLink""></a>";
431
432                 
433
434                         HtmlDiff.AssertAreEqual(OriginControlHtml, RenderedControlHtml,"RenderEndTag");
435                         
436                 }
437
438                 [Test]
439                 public void Menu_ViewState()
440                 {
441                         PokerMenu b = new PokerMenu ();
442                         PokerMenu copy = new PokerMenu ();
443                         b.ToolTip = "mytest1";
444                         b.Target = "mytest2";
445                         b.BackColor = Color.Red;
446                         b.BorderColor = Color.Red;
447                         b.BorderStyle = BorderStyle.Dotted;
448                         b.BorderWidth = 1;
449                         b.ForeColor = Color.Red;
450                         b.Height = 100;
451                         b.MaximumDynamicDisplayLevels = 2;
452                         b.Orientation = Orientation.Vertical;
453                         b.PathSeparator = '-';
454                         b.ScrollDownImageUrl = "test";
455                         b.ScrollDownText = "test";
456                         b.ScrollUpImageUrl = "test";
457                         b.ScrollUpText = "test";
458                         b.SkipLinkText = "test";
459                         b.Visible = false;
460                         b.Width = 100;
461                         b.TabIndex = 1;
462                         
463                         object state = b.DoSaveViewState ();
464                         copy.DoLoadViewState (state);
465                         Assert.AreEqual ("mytest1", copy.ToolTip, "ViewState#1");
466                         Assert.AreEqual ("mytest2", copy.Target, "ViewState#2");
467                         Assert.AreEqual (Color.Red, copy.BackColor, "ViewState#3");
468                         Assert.AreEqual (Color.Red, copy.BorderColor , "ViewState#4");
469                         Assert.AreEqual (BorderStyle.Dotted, copy.BorderStyle, "ViewState#5");
470                         Assert.AreEqual (Unit.Pixel(1), copy.BorderWidth, "ViewState#6");
471                         
472                         Assert.AreEqual (Color.Red, copy.ForeColor, "ViewState#8");
473                         Assert.AreEqual (Unit.Pixel(100), copy.Height, "ViewState#9");
474                         Assert.AreEqual (2, copy.MaximumDynamicDisplayLevels, "ViewState#10");
475                         Assert.AreEqual (Orientation.Vertical, copy.Orientation, "ViewState#11");
476                         Assert.AreEqual ('-', copy.PathSeparator, "ViewState#12");
477                         Assert.AreEqual ("test", copy.ScrollDownImageUrl, "ViewState#13");
478                         Assert.AreEqual ("test", copy.ScrollDownText, "ViewState#14");
479                         Assert.AreEqual ("test", copy.ScrollUpImageUrl, "ViewState#15");
480                         Assert.AreEqual ("test", copy.ScrollUpText, "ViewState#16");
481                         Assert.AreEqual ("test", copy.SkipLinkText, "ViewState#17");
482                         Assert.AreEqual (1, copy.TabIndex, "ViewState#18");
483                         Assert.AreEqual (false, copy.Visible, "ViewState#19");
484                         Assert.AreEqual (Unit.Pixel (100), copy.Width, "ViewState#20");
485                 
486
487                 }
488
489                 [Test]
490                 [Category ("NotWorking")]
491                 public void Menu_ViewStateNotWorking()
492                 {
493                         PokerMenu b = new PokerMenu ();
494                         PokerMenu copy = new PokerMenu ();
495                         b.Font.Size = 10;
496                         object state = b.DoSaveViewState ();
497                         copy.DoLoadViewState (state);
498                         Assert.AreEqual ("10pt", copy.Font.Size.ToString() , "ViewState#7");                    
499                 }
500                  
501                  // Rendering Menu controll with some possible options, styles and items
502                  
503
504                 [Test]
505                 [Category ("NunitWeb")]
506                 [Category ("NotWorking")]  
507                 public void Menu_DefaultRender ()
508                 {
509                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (_DefaultRender)).Run ();
510                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
511                         string OriginControlHtml = "";
512                         HtmlDiff.AssertAreEqual(OriginControlHtml, RenderedControlHtml,"RenderDefault");
513                 }
514         
515                  // All this methods are delegates for running tests in host assembly. 
516                  
517                 public static void _DefaultRender (Page p)
518                 {
519                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
520                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
521                         Menu menu = new Menu ();
522                         p.Form.Controls.Add (lcb);
523                         p.Form.Controls.Add (menu);
524                         p.Form.Controls.Add (lce);
525                 }
526                 [Test]
527                 [Category ("NunitWeb")]
528                 [Category ("NotWorking")]  
529                 public void Menu_ItemsRender ()
530                 {
531                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (_ItemsRender)).Run ();
532                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
533                         string OriginControlHtml = @"<a href=""#ctl01_SkipLink""><img alt=""Skip Navigation Links"" src=""/NunitWeb/WebResource.axd?d=gZrz8lvSQfolS1pG07HX9g2&amp;t=632784640484505569"" width=""0"" height=""0"" 
534                                 style=""border-width:0px;"" /></a>
535                                 <table id=""ctl01"" class=""ctl01_2"" cellpadding=""0"" cellspacing=""0"" border=""0"">
536                                 <tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""ctl01n0"">
537                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">
538                                 <tr>
539                                 <td style=""white-space:nowrap;width:100%;""><a class=""ctl01_1"" href=""javascript:__doPostBack('ctl01','value1')"">root</a></td><td style=""width:0;"">
540                                 <img src=""/NunitWeb/WebResource.axd?d=jEQEPhExqNH3fus0nmWZ3pFNw-rGIVoBqrGqFcOqB1U1&amp;t=632784640484505569"" alt=""Expand root"" style=""border-style:none;vertical-align:middle;"" /></td>
541                                 </tr>
542                                 </table></td>
543                                 </tr>
544                                 </table><div id=""ctl01n0Items"" class=""ctl01_0"">
545                                 <table border=""0"" cellpadding=""0"" cellspacing=""0"">
546                                 <tr onmouseover=""Menu_HoverDynamic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""ctl01n1"">
547                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">
548                                 <tr>
549                                 <td style=""white-space:nowrap;width:100%;""><a class=""ctl01_1"" href=""javascript:__doPostBack('ctl01','value1\\value2')"">node1</a></td>
550                                 </tr>
551                                 </table></td>
552                                 </tr><tr onmouseover=""Menu_HoverDynamic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""ctl01n2"">
553                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">
554                                 <tr>
555                                 <td style=""white-space:nowrap;width:100%;""><a class=""ctl01_1"" href=""javascript:__doPostBack('ctl01','value1\\value3')"">node2</a></td>
556                                 </tr>
557                                 </table></td>
558                                 </tr>
559                                 </table><div class=""ctl01_0"" id=""ctl01n0ItemsUp"" onmouseover=""PopOut_Up(this)"" onmouseout=""PopOut_Stop(this)"" style=""text-align:center;"">
560                                 <img src=""/NunitWeb/WebResource.axd?d=Kql4shtTcfCiKn_s1ZX6W6WIJmS2VsB7hDFw8oD-9I01&amp;t=632784640484505569"" alt=""Scroll up"" />
561                                 </div><div class=""ctl01_0"" id=""ctl01n0ItemsDn"" onmouseover=""PopOut_Down(this)"" onmouseout=""PopOut_Stop(this)"" style=""text-align:center;"">
562                                 <img src=""/NunitWeb/WebResource.axd?d=QxI-WSWnY8jfAZsv_BcOLFGj_CTJTI_bGi0dPzQPCtI1&amp;t=632784640484505569"" alt=""Scroll down"" />
563                                 </div>
564                                 </div><a id=""ctl01_SkipLink""></a>";
565
566                         HtmlDiff.AssertAreEqual(OriginControlHtml, RenderedControlHtml,"Render Items");
567                 }
568
569                 public static void _ItemsRender (Page p)
570                 {
571                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
572                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
573                         Menu menu = new Menu ();
574                         MenuItem R = new MenuItem ("root", "value1");
575                         MenuItem N1 = new MenuItem ("node1", "value2");
576                         MenuItem N2 = new MenuItem ("node2", "value3");
577                         R.ChildItems.Add (N1);
578                         R.ChildItems.Add (N2);
579                         menu.Items.Add (R);
580                         p.Form.Controls.Add (lcb);
581                         p.Form.Controls.Add (menu);
582                         p.Form.Controls.Add (lce);
583                 }
584
585                  //Events Stuff
586                 private bool OnDataBinding;
587                 private bool OnDataBound;
588                 private bool OnMenuItemClick;
589                 private bool OnInit;
590                 private bool OnMenuItemDataBound;
591                 private bool OnPreRender;
592                                 
593                 private void OnMenuItemDataBoundHandler(object sender, MenuEventArgs e)
594                 {
595                         OnMenuItemDataBound = true;
596                 }
597                 private void OnInitHandler (object sender, EventArgs e)
598                 {
599                         OnInit = true;
600                 }
601                 private void OnDataBindingHandler (object sender, EventArgs e)
602                 {
603                         OnDataBinding = true;
604                 }
605                 private void OnDataDataBoundHandler (object sender, EventArgs e)
606                 {
607                         OnDataBound = true;
608                 }
609                 private void OnMenuItemClickHandler (object sender, MenuEventArgs e)
610                 {
611                         OnMenuItemClick = true;
612                 }
613                 private void OnPreRenderHandler (object sender, EventArgs e)
614                 {
615                         OnPreRender = true;
616                 }
617                 private void ResetEvents ()
618                 {
619                         OnMenuItemClick = false;
620                         OnDataBinding = false;
621                         OnDataBound = false;
622                         OnInit = false;
623                         OnPreRender = false;
624                 }
625                 [Test]
626                 public void Menu_Events ()
627                 {
628                         Page myPage = new Page ();
629                         PokerMenu p = new PokerMenu ();
630                         MenuItem I = new MenuItem ();
631                         p.Items.Add (I);
632                         myPage.Controls.Add(p);
633
634                         
635                         p.Init += new EventHandler(OnInitHandler); 
636                         p.DataBinding += new EventHandler (OnDataBindingHandler);
637                         p.DataBound  += new EventHandler(OnDataDataBoundHandler);
638                         p.MenuItemClick += new MenuEventHandler(OnMenuItemClickHandler);
639                         p.MenuItemDataBound += new MenuEventHandler (OnMenuItemDataBoundHandler);
640                         Assert.AreEqual (false, OnDataBinding, "BeforeOnDataBinding");
641                         p.DoOnDataBind (new EventArgs ());
642                         Assert.AreEqual (true, OnDataBinding, "AfterOnDataBinding");
643                         Assert.AreEqual (false, OnDataBound, "BeforeOnDataBound");
644                         p.DoOnDataBound (new EventArgs ());
645                         Assert.AreEqual (true, OnDataBound, "AfterOnDataBinding");
646                         MenuEventArgs e = new MenuEventArgs (I);
647                         Assert.AreEqual (false, OnMenuItemClick, "BeforeMenuItemClick");
648                         p.DoOnMenuItemClick (e);
649                         Assert.AreEqual (true, OnMenuItemClick, "AfterMenuItemClick");
650                         Assert.AreEqual (false, OnInit, "BeforeOnInit");
651                         p.DoOnInit (new EventArgs());
652                         Assert.AreEqual (true, OnInit, "AfterOnInit");
653                         Assert.AreEqual (false, OnMenuItemDataBound, "BeforeMenuItemDataBound");
654                         p.DoMenuItemDataBound(e);
655                         Assert.AreEqual (true, OnMenuItemDataBound, "AfterMenuItemDataBound");
656                 }
657                 [Test]
658                 [Category ("NotWorking")] // NotImplementedException
659                 public void Menu_BubbleEvent()
660                 {
661                         PokerMenu pm = new PokerMenu ();
662                         CommandEventArgs commandarg = new CommandEventArgs (Menu.MenuItemClickCommandName, null);
663                         Assert.AreEqual (true, pm.DoOnBubbleEvent (commandarg), "Bubble Event#1");
664                         Assert.AreEqual (false, pm.DoOnBubbleEvent (new EventArgs ()), "Bubble Event#2");
665                 }
666                 [Test]
667                 [Category ("NunitWeb")]
668                 public void Menu_PreRenderEvent ()
669                 {
670                         new WebTest (PageInvoker.CreateOnLoad (PreRenderEvent)).Run ();
671                 }
672                 public void PreRenderEvent (Page p)
673                 {
674                         PokerMenu pm = new PokerMenu ();
675                         p.Controls.Add (pm);
676                         pm.PreRender += new EventHandler (OnPreRenderHandler);
677                         Assert.AreEqual (false, OnPreRender, "BeforePreRender");
678                         pm.DoOnPreRender (new EventArgs ());
679                         Assert.AreEqual (true, OnPreRender, "AfterPreRender");
680                 }
681                 [TestFixtureTearDown]
682                 public void TearDown ()
683                 {
684                         Thread.Sleep (100);
685                         WebTest.Unload ();
686                 }
687         
688                 // A simple Template class to wrap an image.
689                 public class ImageTemplate : ITemplate
690                 {
691                         private MyWebControl.Image myImage;
692                         public MyWebControl.Image MyImage
693                         {
694                                 get
695                                 {
696                                         return myImage;
697                                 }
698                                 set
699                                 {
700                                         myImage = value;
701                                 }
702                         }
703                         public void InstantiateIn (Control container)
704                         {
705                                 container.Controls.Add (MyImage);
706                         }
707                 }
708                 [Test]
709                 public void MenuClass ()
710                 {
711 #if DOT_NET
712                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.menuclass.aspx", "menuclass.aspx");
713 #else
714                         WebTest.CopyResource (GetType (), "menuclass.aspx", "menuclass.aspx");
715 #endif
716                         string res = new WebTest ("menuclass.aspx").Run ();
717                         string menua_pattern="<table[^>]*class=\"[^\"]*menua[^\"]*\"[^>]*>";
718                         Assert.IsTrue (Regex.IsMatch (res, ".*"+menua_pattern+".*",
719                                 RegexOptions.IgnoreCase|RegexOptions.Singleline),
720                                 "check that <table class=\"menua\"> is found");
721                         Assert.IsFalse (Regex.IsMatch (res, ".*"+menua_pattern+".*"+menua_pattern+".*",
722                                 RegexOptions.IgnoreCase|RegexOptions.Singleline),
723                                 "check that <table class=\"menua\"> is found only once");
724                 }
725
726                 [Test]
727                 [Category ("NunitWeb")]
728                 public void Menu_PostBack ()
729                 {
730 #if DOT_NET
731                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.PostBackMenuTest.aspx", "PostBackMenuTest.aspx");
732 #else
733                         WebTest.CopyResource (GetType (), "PostBackMenuTest.aspx", "PostBackMenuTest.aspx");
734 #endif
735                         WebTest t = new WebTest ("PostBackMenuTest.aspx");
736                         string str = t.Run ();
737                         FormRequest fr = new FormRequest (t.Response, "form1");
738                         fr.Controls.Add ("__EVENTTARGET");
739                         fr.Controls.Add ("__EVENTARGUMENT");
740                         fr.Controls["__EVENTTARGET"].Value = "Menu1";
741                         fr.Controls["__EVENTARGUMENT"].Value = "root\\node2";
742                         t.Request = fr;
743                         PageDelegates pd = new PageDelegates ();
744                         pd.PreRender = _MenuItemsPost;
745                         t.Invoker = new PageInvoker (pd);
746                         t.Run ();
747                 }
748
749                 public static void _MenuItemsPost (Page p)
750                 {
751                         foreach (Control c in p.Form.Controls) {
752                                 Menu m = c as Menu;
753                                 if (m != null)
754                                         Assert.AreEqual ("node2", m.SelectedValue, "MenuItemsPostBack");
755                         }
756                 }
757         }
758 }
759 #endif