fixed tests
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / MenuTest.cs
1 //\r
2 // Tests for System.Web.UI.WebControls.MenuTest.cs\r
3 //\r
4 // Author:\r
5 //      Yoni Klein (yonik@mainsoft.com)\r
6 //\r
7 //\r
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
9 //\r
10 // Permission is hereby granted, free of charge, to any person obtaining\r
11 // a copy of this software and associated documentation files (the\r
12 // "Software"), to deal in the Software without restriction, including\r
13 // without limitation the rights to use, copy, modify, merge, publish,\r
14 // distribute, sublicense, and/or sell copies of the Software, and to\r
15 // permit persons to whom the Software is furnished to do so, subject to\r
16 // the following conditions:\r
17 //\r
18 // The above copyright notice and this permission notice shall be\r
19 // included in all copies or substantial portions of the Software.\r
20 //\r
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
28 \r
29 \r
30 #if NET_2_0\r
31 \r
32 \r
33 using NUnit.Framework;\r
34 using System;\r
35 using System.Collections.Generic;\r
36 using System.Text;\r
37 using System.Web;\r
38 using System.Web.UI;\r
39 using System.Web.UI.WebControls;\r
40 using System.IO;\r
41 using System.Drawing;\r
42 using System.Threading;\r
43 using MyWebControl = System.Web.UI.WebControls;\r
44 using System.Collections;\r
45 using MonoTests.SystemWeb.Framework;\r
46 using MonoTests.stand_alone.WebHarness;\r
47 using System.Text.RegularExpressions;\r
48 using System.Reflection;\r
49 using System.Xml;\r
50 \r
51 namespace MonoTests.System.Web.UI.WebControls\r
52 {\r
53         \r
54         \r
55         class PokerMenu:Menu\r
56         {\r
57                 public PokerMenu ()\r
58                 {\r
59                     TrackViewState();\r
60                 }\r
61                 public StateBag StateBag\r
62                 {\r
63                     get { return base.ViewState; }\r
64                 }\r
65                 public HtmlTextWriterTag OnTagKey()\r
66                 {\r
67                         return  TagKey;\r
68                 }\r
69                 public void DoOnDataBind(EventArgs e)\r
70                 {\r
71                         OnDataBinding(e);\r
72                 }\r
73                 public void DoOnDataBound (EventArgs e)\r
74                 {\r
75                         OnDataBound(e);\r
76                 }\r
77                 public void DoCreateChildControls ()\r
78                 {\r
79                         CreateChildControls ();\r
80                 }\r
81                 public void DoEnsureDataBound ()\r
82                 {\r
83                         EnsureDataBound ();\r
84                 }\r
85                 public void DoLoadViewState (object state)\r
86                 {\r
87                         LoadViewState (state);\r
88                 }\r
89                 public object DoSaveViewState ()\r
90                 {\r
91                         return SaveViewState ();\r
92                 }\r
93                 public void DoLoadControlState (object state)\r
94                 {\r
95                         LoadControlState (state);\r
96                 }\r
97                 public object DoSaveControlState ()\r
98                 {\r
99                        return SaveControlState ();\r
100                 }\r
101                 public void DoOnMenuItemClick (MenuEventArgs e)\r
102                 {\r
103                         OnMenuItemClick(e);\r
104                 }\r
105                 public void DoOnInit(EventArgs e)\r
106                 {\r
107                         OnInit(e);\r
108                 }\r
109                 public void DoMenuItemDataBound (MenuEventArgs e)\r
110                 {\r
111                         OnMenuItemDataBound (e);        \r
112                 }\r
113                 public void DoOnPreRender (EventArgs e)\r
114                 {\r
115                         base.OnPreRender(e);\r
116                 }\r
117                 public bool DoOnBubbleEvent(EventArgs e)\r
118                 {\r
119                         return base.OnBubbleEvent(this,e);\r
120                 }\r
121         }\r
122 \r
123         [Serializable]\r
124         [TestFixture]\r
125         public class MenuTest\r
126         {       \r
127 \r
128                 [TestFixtureSetUp]\r
129                 public void SetUp ()\r
130                 {\r
131 #if VISUAL_STUDIO\r
132                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.menuclass.aspx", "menuclass.aspx");\r
133                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.PostBackMenuTest.aspx", "PostBackMenuTest.aspx");\r
134 #else\r
135                         WebTest.CopyResource (GetType (), "menuclass.aspx", "menuclass.aspx");\r
136                         WebTest.CopyResource (GetType (), "PostBackMenuTest.aspx", "PostBackMenuTest.aspx");\r
137 #endif\r
138                 }\r
139 \r
140                 [Test]\r
141                 public void Menu_DefaultProperties ()\r
142                 {\r
143                         PokerMenu p = new PokerMenu ();\r
144                         Assert.AreEqual ("Click",PokerMenu.MenuItemClickCommandName,"Staic_MenuItemClickCommandName");\r
145                         Assert.AreEqual (0,p.Controls.Count,"ControlsCollection");\r
146                         Assert.AreEqual (0,p.DataBindings.Count,"DataBindings");\r
147                         Assert.AreEqual (500,p.DisappearAfter,"DisappearAfter");\r
148                         Assert.AreEqual (string.Empty, p.DynamicBottomSeparatorImageUrl, "DynamicBottomSeparatorImageUrl");\r
149                         Assert.IsTrue (p.DynamicEnableDefaultPopOutImage, "DynamicEnableDefaultPopOutImage");\r
150                         Assert.AreEqual (0, p.DynamicHorizontalOffset, "DynamicHorizontalOffset");\r
151                         Assert.IsNotNull (p.DynamicHoverStyle, "DynamicHoverStyle");\r
152                         Assert.AreEqual ("", p.DynamicItemFormatString, "DynamicItemFormatString");\r
153                         Assert.IsNull (p.DynamicItemTemplate, "DynamicItemTemplate");\r
154                         Assert.IsNotNull (p.DynamicMenuItemStyle, "DynamicMenuItemStyle");\r
155                         Assert.IsNotNull (p.DynamicMenuStyle, "DynamicMenuStyle");\r
156                         Assert.AreEqual (string.Empty,p.DynamicPopOutImageUrl,"DynamicPopOutImageUrl");\r
157                         Assert.IsNotNull (p.DynamicSelectedStyle, "DynamicSelectedStyle");\r
158                         Assert.AreEqual (string.Empty, p.DynamicTopSeparatorImageUrl, "DynamicTopSeparatorImageUrl");\r
159                         Assert.AreEqual (0, p.DynamicVerticalOffset, "DynamicVerticalOffset");\r
160                         Assert.AreEqual (0, p.Items.Count, "Items");\r
161                         Assert.AreEqual (false, p.ItemWrap, "ItemWrap");\r
162                         Assert.IsNotNull (p.LevelSelectedStyles, "LevelSelectedStyles");\r
163                         Assert.IsNotNull (p.LevelSubMenuStyles, "LevelSubMenuStyles");\r
164                         Assert.AreEqual (3, p.MaximumDynamicDisplayLevels, "MaximumDynamicDisplayLevels");\r
165                         Assert.AreEqual (Orientation.Vertical, p.Orientation, "Orientation");\r
166                         Assert.AreEqual ("/", p.PathSeparator.ToString(), "PathSeparator");\r
167                         Assert.AreEqual (string.Empty, p.ScrollDownImageUrl, "ScrollDownImageUrl");\r
168                         Assert.AreEqual (null, p.SelectedItem, "p.SelectedItem");\r
169                         Assert.AreEqual (string.Empty, p.StaticBottomSeparatorImageUrl, "StaticBottomSeparatorImageUrl");\r
170                         Assert.AreEqual (1, p.StaticDisplayLevels, "StaticDisplayLevels");\r
171                         Assert.AreEqual (true, p.StaticEnableDefaultPopOutImage, "StaticEnableDefaultPopOutImage");\r
172                         Assert.IsNotNull (p.StaticHoverStyle, "StaticHoverStyle");\r
173                         Assert.AreEqual ("", p.StaticItemFormatString, "StaticItemFormatString");\r
174                         Assert.AreEqual (null, p.StaticItemTemplate, "StaticItemTemplate");\r
175                         Assert.IsNotNull (p.StaticMenuItemStyle, "StaticMenuItemStyle");\r
176                         Assert.IsNotNull (p.StaticMenuStyle, "StaticMenuStyle");\r
177                         Assert.AreEqual ("", p.StaticPopOutImageUrl, "StaticPopOutImageUrl");\r
178                         Assert.IsNotNull (p.StaticSelectedStyle, "StaticSelectedStyle");\r
179                         Assert.AreEqual (Unit.Pixel(16), p.StaticSubMenuIndent, "StaticSubMenuIndent");\r
180                         Assert.AreEqual ("", p.StaticTopSeparatorImageUrl, "StaticTopSeparatorImageUrl");\r
181                         Assert.AreEqual ("", p.Target, "Target");\r
182                         Assert.IsNotNull (p.OnTagKey (), "TagKey");\r
183 \r
184                 }\r
185 \r
186                 [Test]\r
187                 public void Menu_DefaultProperties_2 ()\r
188                 {\r
189                         PokerMenu p = new PokerMenu ();\r
190                         Assert.AreEqual ("Skip Navigation Links", p.SkipLinkText, "SkipLinkText");\r
191                         Assert.AreEqual (string.Empty, p.SelectedValue, "SelectedValue");\r
192                         Assert.AreEqual ("Scroll up", p.ScrollUpText, "ScrollUpText");\r
193                         Assert.AreEqual ("Expand {0}", p.StaticPopOutImageTextFormatString, "StaticPopOutImageTextFormatString"); //not implemented\r
194                         Assert.AreEqual ("Scroll down", p.ScrollDownText, "ScrollDownText");\r
195                         Assert.AreEqual ("Expand {0}", p.DynamicPopOutImageTextFormatString, "DynamicPopOutImageTextFormatString"); //not implemented \r
196                 }\r
197 \r
198 \r
199 \r
200                 [Test]\r
201                 public void Menu_ChangeDefaultProperties ()\r
202                 {\r
203                         PokerMenu p = new PokerMenu ();\r
204                         Button B = new Button ();\r
205                         p.Controls.Add (B);\r
206                         Assert.AreEqual (1,p.Controls.Count, "ControlsCollection");\r
207 \r
208                         MenuItemBinding M = new MenuItemBinding ();\r
209                         M.DataMember = "test";\r
210                         M.Depth = 0;\r
211                         M.TextField = "title"; \r
212                         M.NavigateUrl="url";\r
213                         Object C = p.DataBindings;\r
214                         Assert.AreEqual (0, p.DataBindings.Count, "DataBindings#1");\r
215                         ((MenuItemBindingCollection)C).Add (M);\r
216                         Assert.AreEqual (1,p.DataBindings.Count,"DataBindings#2");\r
217 \r
218                         p.DisappearAfter = 100;\r
219                         Assert.AreEqual (100, p.DisappearAfter, "DisappearAfter");\r
220 \r
221                         p.DynamicBottomSeparatorImageUrl = "test.aspx";\r
222                         Assert.AreEqual ("test.aspx", p.DynamicBottomSeparatorImageUrl, "DynamicBottomSeparatorImageUrl");\r
223 \r
224                         p.DynamicEnableDefaultPopOutImage = false;\r
225                         Assert.AreEqual (false,p.DynamicEnableDefaultPopOutImage, "DynamicEnableDefaultPopOutImage");\r
226 \r
227                         p.DynamicHorizontalOffset = 10;\r
228                         Assert.AreEqual (10, p.DynamicHorizontalOffset, "DynamicHorizontalOffset");\r
229 \r
230                         p.DynamicHoverStyle.BackColor = Color.Red;\r
231                         Assert.AreEqual (Color.Red ,p.DynamicHoverStyle.BackColor, "DynamicHoverStyle");\r
232 \r
233                         p.DynamicItemFormatString = "Mytest";\r
234                         Assert.AreEqual ("Mytest", p.DynamicItemFormatString, "DynamicItemFormatString");\r
235 \r
236                         MyWebControl.Image myImage = new MyWebControl.Image ();\r
237                         myImage.ImageUrl = "myimage.jpg";\r
238                         ImageTemplate Template = new ImageTemplate ();\r
239                         Template.MyImage = myImage;\r
240                         // end create template image\r
241                         p.DynamicItemTemplate = Template;\r
242                         Assert.IsNotNull (p.DynamicItemTemplate, "RootNodeTemplate");\r
243                         Assert.AreEqual (typeof (ImageTemplate), p.DynamicItemTemplate.GetType (), "RootNodeTemplate#1");\r
244 \r
245                         p.DynamicMenuItemStyle.BackColor = Color.Red;                   \r
246                         Assert.AreEqual (Color.Red, p.DynamicMenuItemStyle.BackColor, "DynamicMenuItemStyle");\r
247 \r
248                         p.DynamicMenuStyle.BackColor = Color.Red;\r
249                         Assert.AreEqual (Color.Red,p.DynamicMenuStyle.BackColor, "DynamicMenuStyle");\r
250 \r
251                         p.DynamicPopOutImageUrl = "test";\r
252                         Assert.AreEqual ("test", p.DynamicPopOutImageUrl, "DynamicPopOutImageUrl");\r
253 \r
254                         p.DynamicSelectedStyle.BackColor = Color.Red;\r
255                         Assert.AreEqual (Color.Red,p.DynamicSelectedStyle.BackColor, "DynamicSelectedStyle");\r
256 \r
257                         p.DynamicTopSeparatorImageUrl = "test";\r
258                         Assert.AreEqual ("test", p.DynamicTopSeparatorImageUrl, "DynamicTopSeparatorImageUrl");\r
259 \r
260                         p.DynamicVerticalOffset = 10;\r
261                         Assert.AreEqual (10, p.DynamicVerticalOffset, "DynamicVerticalOffset");\r
262 \r
263                         MenuItem I = new MenuItem ();\r
264                         I.NavigateUrl = "default.aspx";\r
265                         I.Text = "MyText";\r
266                         I.ToolTip = "Test";\r
267                         p.Items.Add (I);\r
268                         Assert.AreEqual (1, p.Items.Count, "Items");\r
269 \r
270                         p.ItemWrap = true;\r
271                         Assert.AreEqual (true, p.ItemWrap, "ItemWrap");\r
272 \r
273                         MenuItemStyle S = new MenuItemStyle ();\r
274                         S.BackColor = Color.Red;\r
275                         p.LevelSelectedStyles.Add (S);\r
276                         Assert.AreEqual (1,p.LevelSelectedStyles.Count , "LevelSelectedStyles#1");\r
277                         Assert.AreEqual (true, p.LevelSelectedStyles.Contains (S), "LevelSelectedStyles#2");\r
278 \r
279                         SubMenuStyle SM = new SubMenuStyle ();\r
280                         SM.BackColor = Color.Red;\r
281                         p.LevelSubMenuStyles.Add (SM);\r
282                         Assert.AreEqual(1, p.LevelSubMenuStyles.Count, "LevelSubMenuStyles#1");\r
283                         Assert.AreEqual (true, p.LevelSubMenuStyles.Contains (SM), "LevelSubMenuStyles#2");\r
284 \r
285                         p.MaximumDynamicDisplayLevels = 5; \r
286                         Assert.AreEqual (5, p.MaximumDynamicDisplayLevels, "MaximumDynamicDisplayLevels");\r
287 \r
288                         p.Orientation = Orientation.Horizontal;\r
289                         Assert.AreEqual (Orientation.Horizontal, p.Orientation, "Orientation");\r
290 \r
291                         p.PathSeparator = 'A';\r
292                         Assert.AreEqual ('A', p.PathSeparator, "PathSeparator");\r
293 \r
294                         p.ScrollDownImageUrl = "test";\r
295                         Assert.AreEqual ("test", p.ScrollDownImageUrl, "ScrollDownImageUrl");\r
296 \r
297                         p.ScrollDownText = "test";\r
298                         Assert.AreEqual ("test", p.ScrollDownText, "ScrollDownText");\r
299 \r
300                         // This properties will be checked in events part of tests\r
301                         // Assert.AreEqual (0, p.SelectedItem, "p.SelectedItem");\r
302                         // Assert.AreEqual (string.Empty, p.SelectedValue, "SelectedValue");\r
303 \r
304                         p.SkipLinkText = "test";\r
305                         Assert.AreEqual ("test", p.SkipLinkText, "SkipLinkText");\r
306 \r
307                         p.StaticBottomSeparatorImageUrl = "test";\r
308                         Assert.AreEqual ("test", p.StaticBottomSeparatorImageUrl, "StaticBottomSeparatorImageUrl");\r
309 \r
310                         p.StaticDisplayLevels = 2;\r
311                         Assert.AreEqual (2, p.StaticDisplayLevels, "StaticDisplayLevels");\r
312 \r
313                         p.StaticEnableDefaultPopOutImage = false;\r
314                         Assert.AreEqual (false, p.StaticEnableDefaultPopOutImage, "StaticEnableDefaultPopOutImage");\r
315 \r
316                         p.StaticHoverStyle.BackColor = Color.Red;\r
317                         Assert.AreEqual(Color.Red, p.StaticHoverStyle.BackColor, "StaticHoverStyle");\r
318 \r
319                         p.StaticItemFormatString = "test";\r
320                         Assert.AreEqual ("test", p.StaticItemFormatString, "StaticItemFormatString");\r
321 \r
322                         \r
323                         p.StaticItemTemplate = Template;\r
324                         Assert.IsNotNull (p.StaticItemTemplate, "StaticItemTemplate");\r
325 \r
326                         p.StaticMenuItemStyle.BackColor = Color.Red;\r
327                         Assert.AreEqual(Color.Red,p.StaticMenuItemStyle.BackColor, "StaticMenuItemStyle");\r
328 \r
329                         p.StaticMenuStyle.BackColor = Color.Red;\r
330                         Assert.AreEqual (Color.Red,p.StaticMenuStyle.BackColor, "StaticMenuStyle");\r
331 \r
332                         p.StaticPopOutImageUrl = "test";\r
333                         Assert.AreEqual ("test", p.StaticPopOutImageUrl, "StaticPopOutImageUrl");\r
334 \r
335                         p.StaticSelectedStyle.BackColor = Color.Red;\r
336                         Assert.AreEqual(Color.Red,p.StaticSelectedStyle.BackColor, "StaticSelectedStyle");\r
337 \r
338                         p.StaticSubMenuIndent = 20;\r
339                         Assert.AreEqual (Unit.Pixel (20), p.StaticSubMenuIndent, "StaticSubMenuIndent");\r
340 \r
341                         p.StaticTopSeparatorImageUrl = "test";\r
342                         Assert.AreEqual ("test", p.StaticTopSeparatorImageUrl, "StaticTopSeparatorImageUrl");\r
343 \r
344                         p.Target = "test";\r
345                         Assert.AreEqual ("test", p.Target, "Target");\r
346                 }\r
347 \r
348                 [Test]\r
349                 public void Menu_ChangeDefaultProperties_2 ()\r
350                 {\r
351                         PokerMenu p = new PokerMenu ();\r
352                         p.ScrollUpText = "test";\r
353                         Assert.AreEqual ("test", p.ScrollUpText, "ScrollUpText");\r
354                         p.DynamicPopOutImageTextFormatString = "test";\r
355                         Assert.AreEqual ("test", p.DynamicPopOutImageTextFormatString, "DynamicPopOutImageTextFormatString");\r
356                         p.StaticPopOutImageTextFormatString = "test";\r
357                         Assert.AreEqual ("test", p.StaticPopOutImageTextFormatString, "StaticPopOutImageTextFormatString");\r
358                 }\r
359 \r
360                 [Test]\r
361                 public void Menu_ControlState()\r
362                 {\r
363                         PokerMenu p = new PokerMenu ();\r
364                         MenuItem I1 = new MenuItem ();\r
365                         MenuItem I2 = new MenuItem ();\r
366                         p.Items.Add (I1);\r
367                         p.Items.Add (I2);\r
368                         MenuEventArgs e = new MenuEventArgs (I1);\r
369                         p.DoOnMenuItemClick (e);\r
370                         object state = p.DoSaveControlState ();\r
371                         p.DoLoadControlState (state);\r
372                         e = new MenuEventArgs (I2);\r
373                         p.DoOnMenuItemClick (e);\r
374                         Console.WriteLine();\r
375                 }\r
376 \r
377                 [Test]\r
378                 public void Menu_FindItem ()\r
379                 {\r
380                         PokerMenu p = new PokerMenu ();\r
381                         MenuItem I = new MenuItem ();\r
382                         string path = I.ValuePath;  \r
383                         p.Items.Add (I);\r
384                         MenuItem V = new MenuItem ();\r
385                         I.ChildItems.Add (V);\r
386                         MenuItem copy = p.FindItem (path);\r
387                         Assert.AreEqual (I, copy, "FindItem#1");\r
388                         path = V.ValuePath;\r
389                         Assert.AreEqual (V, p.FindItem (path), "FindItem#2");\r
390                 }\r
391 \r
392                 \r
393                  // Set & Get DesignModeState dosn't tested \r
394                  // Can't test on Page Load event \r
395                  \r
396 \r
397                 [Test]\r
398                 [Category ("NunitWeb")]\r
399                 public void Menu_RenderBeginTag ()\r
400                 {\r
401                         new WebTest (PageInvoker.CreateOnLoad (_BeginTagRender)).Run ();\r
402                 }\r
403                 public static void _BeginTagRender(Page p)\r
404                 {\r
405                         PokerMenu pm = new PokerMenu ();\r
406                         p.Form.Controls.Add (pm);\r
407                         StringWriter sw = new StringWriter ();\r
408                         HtmlTextWriter tw = new HtmlTextWriter (sw);\r
409                         pm.RenderBeginTag (tw);\r
410                         string RenderedControlHtml = sw.ToString();\r
411                         string OriginControlHtml = @"<a href=""#ctl01_SkipLink"">\r
412                                                      <img alt=""Skip Navigation Links"" src=""/NunitWeb/WebResource.axd?d=gZrz8lvSQfolS1pG07HX9g2&amp;t=632784640484505569"" \r
413                                                       width=""0"" style=""border-width:0px"" height=""0"" style=""border-width:0px;"" />\r
414                                                      </a><table id=""ctl01"" cellpadding=""0"" cellspacing=""0"" border=""0"">";\r
415 \r
416 \r
417 \r
418                         HtmlDiff.AssertAreEqual(OriginControlHtml,RenderedControlHtml,"RenderBeginTag");\r
419                 }\r
420 \r
421                 [Test]\r
422                 [Category ("NunitWeb")]\r
423                 public void Menu_RenderEndTag ()\r
424                 {\r
425                         new WebTest (PageInvoker.CreateOnLoad (_EndTagRender)).Run ();\r
426                 }\r
427                 public static void _EndTagRender (Page p)\r
428                 {\r
429                         PokerMenu pm = new PokerMenu ();\r
430                         p.Form.Controls.Add (pm);\r
431                         StringWriter sw = new StringWriter ();\r
432                         HtmlTextWriter tw = new HtmlTextWriter (sw);\r
433                         pm.RenderBeginTag (tw);\r
434                         pm.RenderEndTag (tw);\r
435                         string RenderedControlHtml = sw.ToString ();\r
436                         string OriginControlHtml = @"<a href=""#ctl01_SkipLink"">\r
437                                                      <img alt=""Skip Navigation Links"" src=""/NunitWeb/WebResource.axd?d=gZrz8lvSQfolS1pG07HX9g2&amp;t=632784640484505569""\r
438                                                       width=""0"" style=""border-width:0px"" height=""0"" style=""border-width:0px;"" />\r
439                                                      </a><table id=""ctl01"" cellpadding=""0"" cellspacing=""0"" border=""0"">\r
440                                                      </table><a id=""ctl01_SkipLink""></a>";\r
441 \r
442                 \r
443 \r
444                         HtmlDiff.AssertAreEqual(OriginControlHtml, RenderedControlHtml,"RenderEndTag");\r
445                         \r
446                 }\r
447 \r
448                 [Test]\r
449                 public void Menu_DataBind () {\r
450                         Page p = new Page ();\r
451                         Menu m = CreateMenu ();\r
452                         m.DataBinding += new EventHandler (m_DataBinding);\r
453                         m.DataBound += new EventHandler (m_DataBound);\r
454                         p.Controls.Add (m);\r
455 \r
456                         ResetTemplateBoundFlags ();\r
457                         m.DataBind ();\r
458                 }\r
459 \r
460                 static void m_DataBinding (object sender, EventArgs e) {\r
461                         Assert.AreEqual (true, _StaticTemplateCreated, "StaticTemplateCreated");\r
462                         Assert.AreEqual (true, _DynamicTemplateCreated, "DynamicTemplateCreated");\r
463                 }\r
464                 \r
465                 static void m_DataBound (object sender, EventArgs e) {\r
466                         Assert.AreEqual (true, _StaticTemplateBound, "StaticTemplateBound");\r
467                         Assert.AreEqual (true, _DynamicTemplateBound, "DynamicTemplateBound");\r
468                 }\r
469 \r
470                 private static void ResetTemplateBoundFlags() {\r
471                         _StaticTemplateBound = false;\r
472                         _DynamicTemplateBound = false;\r
473                         _StaticTemplateCreated = false;\r
474                         _DynamicTemplateCreated = false;\r
475                 }\r
476 \r
477                 static Menu CreateMenu () {\r
478                         Menu m = new Menu ();\r
479                         MenuItem rootItem = new MenuItem ("RootItem-Text", "RootItem-Value");\r
480                         m.Items.Add (rootItem);\r
481                         rootItem.ChildItems.Add (new MenuItem ("Node1-Text", "Node1-Value"));\r
482                         rootItem.ChildItems.Add (new MenuItem ("Node2-Text", "Node2-Value"));\r
483                         m.StaticItemTemplate = new CompiledTemplateBuilder (_StaticItemTemplate);\r
484                         m.DynamicItemTemplate = new CompiledTemplateBuilder (_DynamicItemTemplate);\r
485                         return m;\r
486                 }\r
487 \r
488                 [Test]\r
489                 [Category ("NunitWeb")]\r
490                 public void Menu_DataBindByDataSourceID () {\r
491                         PageDelegates pd = new PageDelegates ();\r
492                         pd.Init = Menu_DataBindByDataSourceID_PageInit;\r
493                         pd.PreRenderComplete = Menu_DataBindByDataSourceID_PagePreRenderComplete;\r
494                         PageInvoker pi = new PageInvoker (pd);\r
495                         new WebTest (pi).Run ();\r
496                 }\r
497 \r
498                 public static void Menu_DataBindByDataSourceID_PageInit (Page p) {\r
499                         XmlDataSource xmlDs = new XmlDataSource ();\r
500                         xmlDs.ID = "XmlDataSource";\r
501                         xmlDs.Data = "<root><node /><node /><node><subnode /><subnode /></node></root>";\r
502                         p.Form.Controls.Add (xmlDs);\r
503 \r
504                         Menu m = CreateMenu ();\r
505                         m.DataSourceID = "XmlDataSource";\r
506                         m.MenuItemDataBound += new MenuEventHandler (m_MenuItemDataBound);\r
507                         p.Form.Controls.Add (m);\r
508 \r
509                         ResetTemplateBoundFlags ();\r
510                         _MenuItemBoundCount = 0;\r
511                         _MenuItemCreatedCount = 0;\r
512                 }\r
513 \r
514                 public static void m_MenuItemDataBound (object sender, MenuEventArgs e) {\r
515                         _MenuItemBoundCount++;\r
516                 }\r
517 \r
518                 [Test]\r
519                 [Category ("NunitWeb")]\r
520                 public void Menu_Templates () {\r
521                         PageDelegates pd = new PageDelegates ();\r
522                         pd.Init = Menu_Templates_PageInit;\r
523                         pd.PreRenderComplete = Menu_Templates_PagePreRenderComplete;\r
524                         PageInvoker pi = new PageInvoker (pd);\r
525                         new WebTest (pi).Run ();\r
526                 }\r
527 \r
528                 public static void Menu_Templates_PageInit (Page p) {\r
529                         Menu m = CreateMenu ();\r
530                         p.Form.Controls.Add (m);\r
531 \r
532                         ResetTemplateBoundFlags ();\r
533                 }\r
534 \r
535                 static bool _StaticTemplateBound;\r
536                 static bool _DynamicTemplateBound;\r
537 \r
538                 static bool _StaticTemplateCreated;\r
539                 static bool _DynamicTemplateCreated;\r
540 \r
541                 static int _MenuItemBoundCount;\r
542                 static int _MenuItemCreatedCount;\r
543 \r
544                 private static void CheckTemplateBoundFlags () {\r
545                         Assert.AreEqual (true, _StaticTemplateCreated, "StaticTemplateCreated");\r
546                         Assert.AreEqual (true, _DynamicTemplateCreated, "DynamicTemplateCreated");\r
547                         Assert.AreEqual (true, _StaticTemplateBound, "StaticTemplateBound");\r
548                         Assert.AreEqual (true, _DynamicTemplateBound, "DynamicTemplateBound");\r
549                 }\r
550 \r
551                 public static void Menu_Templates_PagePreRenderComplete (Page p) {\r
552                         CheckTemplateBoundFlags ();\r
553                 }\r
554 \r
555                 public static void Menu_DataBindByDataSourceID_PagePreRenderComplete (Page p) {\r
556                         CheckTemplateBoundFlags ();\r
557                         Assert.AreEqual (6, _MenuItemBoundCount, "MenuItemBoundCount");\r
558                         Assert.AreEqual (6, _MenuItemCreatedCount, "MenuItemBoundCount");\r
559                 }\r
560 \r
561                 private static void _StaticItemTemplate (Control container) {\r
562                         _StaticTemplateCreated = true;\r
563                         _MenuItemCreatedCount++;\r
564                         Literal l = new Literal ();\r
565                         container.Controls.Add (l);\r
566                         container.DataBinding += new EventHandler (StaticTemplate_DataBinding);\r
567                 }\r
568 \r
569                 static void StaticTemplate_DataBinding (object sender, EventArgs e) {\r
570                         _StaticTemplateBound = true;\r
571                 }\r
572 \r
573                 private static void _DynamicItemTemplate (Control container) {\r
574                         _DynamicTemplateCreated = true;\r
575                         _MenuItemCreatedCount++;\r
576                         Literal l = new Literal ();\r
577                         container.Controls.Add (l);\r
578                         container.DataBinding += new EventHandler (DynamicTemplate_DataBinding);\r
579                 }\r
580 \r
581                 static void DynamicTemplate_DataBinding (object sender, EventArgs e) {\r
582                         _DynamicTemplateBound = true;\r
583                 }\r
584 \r
585                 [Test]\r
586                 public void Menu_ViewState()\r
587                 {\r
588                         PokerMenu b = new PokerMenu ();\r
589                         PokerMenu copy = new PokerMenu ();\r
590                         b.ToolTip = "mytest1";\r
591                         b.Target = "mytest2";\r
592                         b.BackColor = Color.Red;\r
593                         b.BorderColor = Color.Red;\r
594                         b.BorderStyle = BorderStyle.Dotted;\r
595                         b.BorderWidth = 1;\r
596                         b.ForeColor = Color.Red;\r
597                         b.Height = 100;\r
598                         b.MaximumDynamicDisplayLevels = 2;\r
599                         b.Orientation = Orientation.Vertical;\r
600                         b.PathSeparator = '-';\r
601                         b.ScrollDownImageUrl = "test";\r
602                         b.ScrollDownText = "test";\r
603                         b.ScrollUpImageUrl = "test";\r
604                         b.ScrollUpText = "test";\r
605                         b.SkipLinkText = "test";\r
606                         b.Visible = false;\r
607                         b.Width = 100;\r
608                         b.TabIndex = 1;\r
609                         \r
610                         object state = b.DoSaveViewState ();\r
611                         copy.DoLoadViewState (state);\r
612                         Assert.AreEqual ("mytest1", copy.ToolTip, "ViewState#1");\r
613                         Assert.AreEqual ("mytest2", copy.Target, "ViewState#2");\r
614                         Assert.AreEqual (Color.Red, copy.BackColor, "ViewState#3");\r
615                         Assert.AreEqual (Color.Red, copy.BorderColor , "ViewState#4");\r
616                         Assert.AreEqual (BorderStyle.Dotted, copy.BorderStyle, "ViewState#5");\r
617                         Assert.AreEqual (Unit.Pixel(1), copy.BorderWidth, "ViewState#6");\r
618                         \r
619                         Assert.AreEqual (Color.Red, copy.ForeColor, "ViewState#8");\r
620                         Assert.AreEqual (Unit.Pixel(100), copy.Height, "ViewState#9");\r
621                         Assert.AreEqual (2, copy.MaximumDynamicDisplayLevels, "ViewState#10");\r
622                         Assert.AreEqual (Orientation.Vertical, copy.Orientation, "ViewState#11");\r
623                         Assert.AreEqual ('-', copy.PathSeparator, "ViewState#12");\r
624                         Assert.AreEqual ("test", copy.ScrollDownImageUrl, "ViewState#13");\r
625                         Assert.AreEqual ("test", copy.ScrollDownText, "ViewState#14");\r
626                         Assert.AreEqual ("test", copy.ScrollUpImageUrl, "ViewState#15");\r
627                         Assert.AreEqual ("test", copy.ScrollUpText, "ViewState#16");\r
628                         Assert.AreEqual ("test", copy.SkipLinkText, "ViewState#17");\r
629                         Assert.AreEqual (1, copy.TabIndex, "ViewState#18");\r
630                         Assert.AreEqual (false, copy.Visible, "ViewState#19");\r
631                         Assert.AreEqual (Unit.Pixel (100), copy.Width, "ViewState#20");\r
632                 \r
633 \r
634                 }\r
635 \r
636                 [Test]\r
637                 public void Menu_ViewStateNotWorking()\r
638                 {\r
639                         PokerMenu b = new PokerMenu ();\r
640                         PokerMenu copy = new PokerMenu ();\r
641                         b.Font.Size = 10;\r
642                         object state = b.DoSaveViewState ();\r
643                         copy.DoLoadViewState (state);\r
644                         Assert.AreEqual ("10pt", copy.Font.Size.ToString() , "ViewState#7");                    \r
645                 }\r
646 \r
647                 [Test]\r
648                 public void Menu_ViewStateItems () {\r
649                         PokerMenu b = new PokerMenu ();\r
650                         MenuItem R = new MenuItem ("root", "value-root");\r
651                         MenuItem N1 = new MenuItem ("node1", "value-node1");\r
652                         MenuItem N2 = new MenuItem ("node2", "value-node2");\r
653                         R.ChildItems.Add (N1);\r
654                         R.ChildItems.Add (N2);\r
655                         b.Items.Add (R);\r
656                         PokerMenu copy = new PokerMenu ();\r
657                         object state = b.DoSaveViewState ();\r
658                         copy.DoLoadViewState (state);\r
659                         Assert.AreEqual (1, copy.Items.Count, "ViewStateItems#1");\r
660                         Assert.AreEqual (2, copy.Items [0].ChildItems.Count, "ViewStateItems#2");\r
661                         Assert.AreEqual (0, copy.Items [0].ChildItems [0].ChildItems.Count, "ViewStateItems#3");\r
662                         Assert.AreEqual ("node1", copy.Items [0].ChildItems [0].Text, "ViewStateItems#4");\r
663                         Assert.AreEqual ("value-node1", copy.Items [0].ChildItems [0].Value, "ViewStateItems#5");\r
664                         Assert.AreEqual (false, copy.Items [0].ChildItems [0].DataBound, "ViewStateItems#6");\r
665                         Assert.AreEqual ("", copy.Items [0].ChildItems [0].DataPath, "ViewStateItems#7");\r
666                 }\r
667 \r
668 \r
669                 [Test]\r
670                 public void Menu_ViewStateDataBoundItems () {\r
671                         PokerMenu b = new PokerMenu ();\r
672                         SetDataBindings (b);\r
673                         b.DataSource = CreateXmlDataSource ();\r
674                         b.DataBind ();\r
675                         PokerMenu copy = new PokerMenu ();\r
676                         object state = b.DoSaveViewState ();\r
677                         copy.DoLoadViewState (state);\r
678                         CheckMenuItems (copy);\r
679                 }\r
680 \r
681                 private static void CheckMenuItems (Menu m) {\r
682                         Assert.AreEqual (1, m.Items.Count, "CheckMenuItems#1");\r
683                         Assert.AreEqual (10, m.Items [0].ChildItems.Count, "CheckMenuItems#2");\r
684                         Assert.AreEqual (0, m.Items [0].ChildItems [0].ChildItems.Count, "CheckMenuItems#3");\r
685                         Assert.AreEqual (true, m.Items [0].ChildItems [0].DataBound, "CheckMenuItems#4");\r
686                         Assert.AreEqual ("/*[position()=1]/*[position()=1]", m.Items [0].ChildItems [0].DataPath, "CheckMenuItems#5");\r
687 \r
688                         Assert.AreEqual (false, m.Items [0].Enabled, "CheckMenuItems_Enabled#1");\r
689                         Assert.AreEqual (true, m.Items [0].ChildItems [0].Enabled, "CheckMenuItems_Enabled#2");\r
690                         Assert.AreEqual (false, m.Items [0].ChildItems [1].Enabled, "CheckMenuItems_Enabled#3");\r
691                         Assert.AreEqual (false, m.Items [0].ChildItems [2].Enabled, "CheckMenuItems_Enabled#4");\r
692                         Assert.AreEqual (true, m.Items [0].ChildItems [2].ChildItems [0].Enabled, "CheckMenuItems_Enabled#5");\r
693 \r
694                         Assert.AreEqual ("img#root", m.Items [0].ImageUrl, "CheckMenuItems_ImageUrl#1");\r
695                         Assert.AreEqual ("img#1", m.Items [0].ChildItems [0].ImageUrl, "CheckMenuItems_ImageUrl#2");\r
696                         Assert.AreEqual ("img#2", m.Items [0].ChildItems [1].ImageUrl, "CheckMenuItems_ImageUrl#3");\r
697                         Assert.AreEqual ("img#default", m.Items [0].ChildItems [2].ImageUrl, "CheckMenuItems_ImageUrl#4");\r
698                         Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].ImageUrl, "CheckMenuItems_ImageUrl#5");\r
699 \r
700                         Assert.AreEqual ("url#root", m.Items [0].NavigateUrl, "CheckMenuItems_NavigateUrl#1");\r
701                         Assert.AreEqual ("url#1", m.Items [0].ChildItems [0].NavigateUrl, "CheckMenuItems_NavigateUrl#2");\r
702                         Assert.AreEqual ("url#2", m.Items [0].ChildItems [1].NavigateUrl, "CheckMenuItems_NavigateUrl#3");\r
703                         Assert.AreEqual ("url#default", m.Items [0].ChildItems [2].NavigateUrl, "CheckMenuItems_NavigateUrl#4");\r
704                         Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].NavigateUrl, "CheckMenuItems_NavigateUrl#5");\r
705 \r
706                         Assert.AreEqual ("popoutimg#root", m.Items [0].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#1");\r
707                         Assert.AreEqual ("popoutimg#1", m.Items [0].ChildItems [0].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#2");\r
708                         Assert.AreEqual ("popoutimg#2", m.Items [0].ChildItems [1].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#3");\r
709                         Assert.AreEqual ("popoutimg#default", m.Items [0].ChildItems [2].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#4");\r
710                         Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#5");\r
711 \r
712                         Assert.AreEqual (false, m.Items [0].Selectable, "CheckMenuItems_Selectable#1");\r
713                         Assert.AreEqual (true, m.Items [0].ChildItems [0].Selectable, "CheckMenuItems_Selectable#2");\r
714                         Assert.AreEqual (false, m.Items [0].ChildItems [1].Selectable, "CheckMenuItems_Selectable#3");\r
715                         Assert.AreEqual (false, m.Items [0].ChildItems [2].Selectable, "CheckMenuItems_Selectable#4");\r
716                         Assert.AreEqual (true, m.Items [0].ChildItems [2].ChildItems [0].Selectable, "CheckMenuItems_Selectable#5");\r
717 \r
718                         Assert.AreEqual ("separatorimg#root", m.Items [0].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#1");\r
719                         Assert.AreEqual ("separatorimg#1", m.Items [0].ChildItems [0].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#2");\r
720                         Assert.AreEqual ("separatorimg#2", m.Items [0].ChildItems [1].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#3");\r
721                         Assert.AreEqual ("separatorimg#default", m.Items [0].ChildItems [2].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#4");\r
722                         Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#5");\r
723 \r
724                         Assert.AreEqual ("target#root", m.Items [0].Target, "CheckMenuItems_Target#1");\r
725                         Assert.AreEqual ("target#1", m.Items [0].ChildItems [0].Target, "CheckMenuItems_Target#2");\r
726                         Assert.AreEqual ("target#2", m.Items [0].ChildItems [1].Target, "CheckMenuItems_Target#3");\r
727                         Assert.AreEqual ("target#default", m.Items [0].ChildItems [2].Target, "CheckMenuItems_Target#4");\r
728                         Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].Target, "CheckMenuItems_Target#5");\r
729 \r
730                         Assert.AreEqual ("text#root", m.Items [0].Text, "CheckMenuItems_Text#1");\r
731                         Assert.AreEqual ("text#1", m.Items [0].ChildItems [0].Text, "CheckMenuItems_Text#2");\r
732                         Assert.AreEqual ("text#2", m.Items [0].ChildItems [1].Text, "CheckMenuItems_Text#3");\r
733                         Assert.AreEqual ("text#", m.Items [0].ChildItems [2].Text, "CheckMenuItems_Text#4");\r
734                         Assert.AreEqual ("subnode", m.Items [0].ChildItems [2].ChildItems [0].Text, "CheckMenuItems_Text#5");\r
735 \r
736                         Assert.AreEqual ("tooltip#root", m.Items [0].ToolTip, "CheckMenuItems_ToolTip#1");\r
737                         Assert.AreEqual ("tooltip#1", m.Items [0].ChildItems [0].ToolTip, "CheckMenuItems_ToolTip#2");\r
738                         Assert.AreEqual ("tooltip#2", m.Items [0].ChildItems [1].ToolTip, "CheckMenuItems_ToolTip#3");\r
739                         Assert.AreEqual ("tooltip#default", m.Items [0].ChildItems [2].ToolTip, "CheckMenuItems_ToolTip#4");\r
740                         Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].ToolTip, "CheckMenuItems_ToolTip#5");\r
741 \r
742                         Assert.AreEqual ("value#root", m.Items [0].Value, "CheckMenuItems_Value#1");\r
743                         Assert.AreEqual ("value#1", m.Items [0].ChildItems [0].Value, "CheckMenuItems_Value#2");\r
744                         Assert.AreEqual ("value#2", m.Items [0].ChildItems [1].Value, "CheckMenuItems_Value#3");\r
745                         Assert.AreEqual ("value#default", m.Items [0].ChildItems [2].Value, "CheckMenuItems_Value#4");\r
746                         Assert.AreEqual ("subnode", m.Items [0].ChildItems [2].ChildItems [0].Value, "CheckMenuItems_Value#5");\r
747 \r
748                         Assert.AreEqual ("text#extra1", m.Items [0].ChildItems [3].Text, "CheckMenuItems_Extra1#1");\r
749                         Assert.AreEqual ("text#extra1", m.Items [0].ChildItems [3].Value, "CheckMenuItems_Extra1#2");\r
750 \r
751                         Assert.AreEqual ("value#extra2", m.Items [0].ChildItems [4].Text, "CheckMenuItems_Extra2#1");\r
752                         Assert.AreEqual ("value#extra2", m.Items [0].ChildItems [4].Value, "CheckMenuItems_Extra2#2");\r
753 \r
754                         Assert.AreEqual ("text#extra3", m.Items [0].ChildItems [5].Text, "CheckMenuItems_Extra3#1");\r
755                         Assert.AreEqual ("", m.Items [0].ChildItems [5].Value, "CheckMenuItems_Extra3#2");\r
756                         Assert.AreEqual ("", m.Items [0].ChildItems [6].Text, "CheckMenuItems_Extra3#3");\r
757                         Assert.AreEqual ("value#extra3", m.Items [0].ChildItems [6].Value, "CheckMenuItems_Extra3#4");\r
758                         Assert.AreEqual ("", m.Items [0].ChildItems [7].Text, "CheckMenuItems_Extra3#5");\r
759                         Assert.AreEqual ("", m.Items [0].ChildItems [7].Value, "CheckMenuItems_Extra3#6");\r
760 \r
761                         Assert.AreEqual ("text#extra4", m.Items [0].ChildItems [8].Text, "CheckMenuItems_Extra4#1");\r
762                         Assert.AreEqual ("text#default", m.Items [0].ChildItems [8].Value, "CheckMenuItems_Extra4#2");\r
763 \r
764                         Assert.AreEqual ("value#default", m.Items [0].ChildItems [9].Text, "CheckMenuItems_Extra5#1");\r
765                         Assert.AreEqual ("value#extra5", m.Items [0].ChildItems [9].Value, "CheckMenuItems_Extra5#2");\r
766                 }\r
767 \r
768                 void SetDataBindings (Menu menu) {\r
769                         MenuItemBinding b = new MenuItemBinding ();\r
770                         b.DataMember = "node";\r
771                         b.EnabledField = "enabled";\r
772                         b.Enabled = false;\r
773                         b.ImageUrlField = "img";\r
774                         b.ImageUrl = "img#default";\r
775                         b.NavigateUrlField = "url";\r
776                         b.NavigateUrl = "url#default";\r
777                         b.PopOutImageUrlField = "popoutimg";\r
778                         b.PopOutImageUrl = "popoutimg#default";\r
779                         b.SelectableField = "selectable";\r
780                         b.Selectable = false;\r
781                         b.SeparatorImageUrlField = "separatorimg";\r
782                         b.SeparatorImageUrl = "separatorimg#default";\r
783                         b.TargetField = "target";\r
784                         b.Target = "target#default";\r
785                         b.FormatString = "text#{0}";\r
786                         b.TextField = "text";\r
787                         b.Text = "text#default";\r
788                         b.ToolTipField = "tooltip";\r
789                         b.ToolTip = "tooltip#default";\r
790                         b.ValueField = "value";\r
791                         b.Value = "value#default";\r
792                         menu.DataBindings.Add (b);\r
793 \r
794                         b = new MenuItemBinding ();\r
795                         b.DataMember = "root";\r
796                         b.Enabled = false;\r
797                         b.ImageUrl = "img#root";\r
798                         b.NavigateUrl = "url#root";\r
799                         b.PopOutImageUrl = "popoutimg#root";\r
800                         b.Selectable = false;\r
801                         b.SeparatorImageUrl = "separatorimg#root";\r
802                         b.Target = "target#root";\r
803                         b.Text = "text#root";\r
804                         b.ToolTip = "tooltip#root";\r
805                         b.Value = "value#root";\r
806                         menu.DataBindings.Add (b);\r
807 \r
808                         b = new MenuItemBinding ();\r
809                         b.DataMember = "extra1";\r
810                         b.Text = "text#extra1";\r
811                         menu.DataBindings.Add (b);\r
812 \r
813                         b = new MenuItemBinding ();\r
814                         b.DataMember = "extra2";\r
815                         b.Value = "value#extra2";\r
816                         menu.DataBindings.Add (b);\r
817 \r
818                         b = new MenuItemBinding ();\r
819                         b.DataMember = "extra3";\r
820                         b.TextField = "text";\r
821                         b.ValueField = "value";\r
822                         menu.DataBindings.Add (b);\r
823 \r
824                         b = new MenuItemBinding ();\r
825                         b.DataMember = "extra4";\r
826                         b.TextField = "text";\r
827                         b.Text = "text#default";\r
828                         b.ValueField = "value";\r
829                         menu.DataBindings.Add (b);\r
830 \r
831                         b = new MenuItemBinding ();\r
832                         b.DataMember = "extra5";\r
833                         b.TextField = "text";\r
834                         b.Value = "value#default";\r
835                         b.ValueField = "value";\r
836                         menu.DataBindings.Add (b);\r
837                 }\r
838 \r
839                 XmlDataSource CreateXmlDataSource () {\r
840                         XmlDataSource xmlDs = new XmlDataSource ();\r
841                         xmlDs.ID = "XmlDataSource";\r
842                         xmlDs.Data = "<root>"+\r
843                                 "<node url=\"url#1\" img=\"img#1\" enabled=\"true\" selectable=\"true\" popoutimg=\"popoutimg#1\" separatorimg=\"separatorimg#1\" target=\"target#1\" text=\"1\" tooltip=\"tooltip#1\" value=\"value#1\" />" +\r
844                                 "<node url=\"url#2\" img=\"img#2\" enabled=\"false\" selectable=\"false\" popoutimg=\"popoutimg#2\" separatorimg=\"separatorimg#2\" target=\"target#2\" text=\"2\" tooltip=\"tooltip#2\" value=\"value#2\" />" +\r
845                                 "<node url=\"\" img=\"\" enabled=\"\" selectable=\"\" popoutimg=\"\" separatorimg=\"\" target=\"\" text=\"\" tooltip=\"\" value=\"\">" +\r
846                                 "<subnode url=\"url#unreachable\" img=\"img#unreachable\" enabled=\"false\" selectable=\"false\" popoutimg=\"popoutimg#unreachable\" separatorimg=\"separatorimg#unreachable\" target=\"target#unreachable\" text=\"text#unreachable\" tooltip=\"tooltip#unreachable\" value=\"value#unreachable\" />" +\r
847                                 "<subnode /></node>"+\r
848                                 "<extra1 /><extra2 />"+\r
849                                 "<extra3 text=\"text#extra3\" value=\"\" />" +\r
850                                 "<extra3 text=\"\" value=\"value#extra3\" />" +\r
851                                 "<extra3 text=\"\" value=\"\" />" +\r
852                                 "<extra4 text=\"text#extra4\" value=\"\" />" +\r
853                                 "<extra5 text=\"\" value=\"value#extra5\" />" +\r
854                                 "</root>";\r
855                         return xmlDs;\r
856                 }\r
857 \r
858                 [Test]\r
859                 public void Menu_DataBindings () {\r
860                         Menu m = new Menu ();\r
861                         SetDataBindings (m);\r
862                         m.DataSource = CreateXmlDataSource ();\r
863                         m.DataBind ();\r
864                         CheckMenuItems (m);\r
865                 }\r
866 \r
867                 // Rendering Menu controll with some possible options, styles and items\r
868                  \r
869 \r
870                 [Test]\r
871                 [Category ("NunitWeb")]\r
872                 public void Menu_DefaultRender ()\r
873                 {\r
874                         string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (_DefaultRender)).Run ();\r
875                         string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);\r
876                         string OriginControlHtml = "";\r
877                         HtmlDiff.AssertAreEqual(OriginControlHtml, RenderedControlHtml,"RenderDefault");\r
878                 }\r
879         \r
880                  // All this methods are delegates for running tests in host assembly. \r
881                  \r
882                 public static void _DefaultRender (Page p)\r
883                 {\r
884                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);\r
885                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);\r
886                         Menu menu = new Menu ();\r
887                         p.Form.Controls.Add (lcb);\r
888                         p.Form.Controls.Add (menu);\r
889                         p.Form.Controls.Add (lce);\r
890                 }\r
891 \r
892                 [Test]\r
893                 [Category ("NunitWeb")]\r
894                 public void Menu_RenderStaticItems () {\r
895                         string RenderedPageHtml, RenderedControlHtml, OriginControlHtml;\r
896                         RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Vertical)).Run ();\r
897                         RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);\r
898                         #region OriginControlHtml\r
899                         OriginControlHtml = @"<a href=""#Menu_SkipLink""><img alt=""Skip Navigation Links"" src=""/NunitWeb/WebResource.axd?d=QxfUEifeQdL5PTiZOF8HlA2&amp;t=632900536532114160"" width=""0"" height=""0"" style=""border-width:0px;"" /></a><table id=""Menu"" class=""Menu_2"" cellpadding=""0"" cellspacing=""0"" border=""0"">\r
900         <tr onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun0"">\r
901                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
902                         <tr>\r
903                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value')"">one-black</a></td>\r
904                         </tr>\r
905                 </table></td>\r
906         </tr><tr>\r
907                 <td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
908                         <tr onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun1"">\r
909                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
910                                         <tr>\r
911                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value')"" style=""margin-left:16px;"">two-black-1</a></td>\r
912                                         </tr>\r
913                                 </table></td>\r
914                         </tr><tr>\r
915                                 <td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
916                                         <tr onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun2"">\r
917                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
918                                                         <tr>\r
919                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-1-value')"" style=""margin-left:32px;"">three-black-1</a></td>\r
920                                                         </tr>\r
921                                                 </table></td>\r
922                                         </tr><tr>\r
923                                                 <td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
924                                                         <tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun3"">\r
925                                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
926                                                                         <tr>\r
927                                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-1-value\\four-black-1-value')"" style=""margin-left:48px;"">four-black-1</a></td>\r
928                                                                         </tr>\r
929                                                                 </table></td>\r
930                                                         </tr><tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun4"">\r
931                                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
932                                                                         <tr>\r
933                                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-1-value\\four-black-2-value')"" style=""margin-left:48px;"">four-black-2</a></td>\r
934                                                                         </tr>\r
935                                                                 </table></td>\r
936                                                         </tr>\r
937                                                 </table></td>\r
938                                         </tr><tr onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun5"">\r
939                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
940                                                         <tr>\r
941                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-2-value')"" style=""margin-left:32px;"">three-black-2</a></td>\r
942                                                         </tr>\r
943                                                 </table></td>\r
944                                         </tr><tr>\r
945                                                 <td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
946                                                         <tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun6"">\r
947                                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
948                                                                         <tr>\r
949                                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-2-value\\four-black-3-value')"" style=""margin-left:48px;"">four-black-3</a></td>\r
950                                                                         </tr>\r
951                                                                 </table></td>\r
952                                                         </tr><tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun7"">\r
953                                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
954                                                                         <tr>\r
955                                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-2-value\\four-black-4-value')"" style=""margin-left:48px;"">four-black-4</a></td>\r
956                                                                         </tr>\r
957                                                                 </table></td>\r
958                                                         </tr>\r
959                                                 </table></td>\r
960                                         </tr>\r
961                                 </table></td>\r
962                         </tr><tr onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun8"">\r
963                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
964                                         <tr>\r
965                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value')"" style=""margin-left:16px;"">two-black-2</a></td>\r
966                                         </tr>\r
967                                 </table></td>\r
968                         </tr><tr>\r
969                                 <td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
970                                         <tr onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun9"">\r
971                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
972                                                         <tr>\r
973                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-3-value')"" style=""margin-left:32px;"">three-black-3</a></td>\r
974                                                         </tr>\r
975                                                 </table></td>\r
976                                         </tr><tr>\r
977                                                 <td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
978                                                         <tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun10"">\r
979                                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
980                                                                         <tr>\r
981                                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-3-value\\four-black-5-value')"" style=""margin-left:48px;"">four-black-5</a></td>\r
982                                                                         </tr>\r
983                                                                 </table></td>\r
984                                                         </tr><tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun11"">\r
985                                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
986                                                                         <tr>\r
987                                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-3-value\\four-black-6-value')"" style=""margin-left:48px;"">four-black-6</a></td>\r
988                                                                         </tr>\r
989                                                                 </table></td>\r
990                                                         </tr>\r
991                                                 </table></td>\r
992                                         </tr><tr onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun12"">\r
993                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
994                                                         <tr>\r
995                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-4-value')"" style=""margin-left:32px;"">three-black-4</a></td>\r
996                                                         </tr>\r
997                                                 </table></td>\r
998                                         </tr><tr>\r
999                                                 <td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
1000                                                         <tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun13"">\r
1001                                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1002                                                                         <tr>\r
1003                                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-4-value\\four-black-7-value')"" style=""margin-left:48px;"">four-black-7</a></td>\r
1004                                                                         </tr>\r
1005                                                                 </table></td>\r
1006                                                         </tr><tr onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun14"">\r
1007                                                                 <td><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1008                                                                         <tr>\r
1009                                                                                 <td style=""white-space:nowrap;width:100%;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-4-value\\four-black-8-value')"" style=""margin-left:48px;"">four-black-8</a></td>\r
1010                                                                         </tr>\r
1011                                                                 </table></td>\r
1012                                                         </tr>\r
1013                                                 </table></td>\r
1014                                         </tr>\r
1015                                 </table></td>\r
1016                         </tr>\r
1017                 </table></td>\r
1018         </tr>\r
1019 </table><a id=""Menu_SkipLink""></a>";\r
1020                         #endregion\r
1021                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Vertical");\r
1022                         RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Horizontal)).Run ();\r
1023                         RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);\r
1024                         #region OriginControlHtml\r
1025                         OriginControlHtml = @"<a href=""#Menu_SkipLink""><img alt=""Skip Navigation Links"" src=""/NunitWeb/WebResource.axd?d=QxfUEifeQdL5PTiZOF8HlA2&amp;t=632900536532114160"" width=""0"" height=""0"" style=""border-width:0px;"" /></a><table id=""Menu"" class=""Menu_2"" cellpadding=""0"" cellspacing=""0"" border=""0"">\r
1026         <tr>\r
1027                 <td onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun0""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1028                         <tr>\r
1029                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value')"">one-black</a></td>\r
1030                         </tr>\r
1031                 </table></td><td style=""width:3px;""></td><td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
1032                         <tr>\r
1033                                 <td onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun1""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1034                                         <tr>\r
1035                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value')"" style=""margin-left:16px;"">two-black-1</a></td>\r
1036                                         </tr>\r
1037                                 </table></td><td style=""width:3px;""></td><td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
1038                                         <tr>\r
1039                                                 <td onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun2""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1040                                                         <tr>\r
1041                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-1-value')"" style=""margin-left:32px;"">three-black-1</a></td>\r
1042                                                         </tr>\r
1043                                                 </table></td><td style=""width:3px;""></td><td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
1044                                                         <tr>\r
1045                                                                 <td onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun3""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1046                                                                         <tr>\r
1047                                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-1-value\\four-black-1-value')"" style=""margin-left:48px;"">four-black-1</a></td>\r
1048                                                                         </tr>\r
1049                                                                 </table></td><td style=""width:3px;""></td><td onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun4""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1050                                                                         <tr>\r
1051                                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-1-value\\four-black-2-value')"" style=""margin-left:48px;"">four-black-2</a></td>\r
1052                                                                         </tr>\r
1053                                                                 </table></td><td style=""width:3px;""></td>\r
1054                                                         </tr>\r
1055                                                 </table></td><td onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun5""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1056                                                         <tr>\r
1057                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-2-value')"" style=""margin-left:32px;"">three-black-2</a></td>\r
1058                                                         </tr>\r
1059                                                 </table></td><td style=""width:3px;""></td><td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
1060                                                         <tr>\r
1061                                                                 <td onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun6""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1062                                                                         <tr>\r
1063                                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-2-value\\four-black-3-value')"" style=""margin-left:48px;"">four-black-3</a></td>\r
1064                                                                         </tr>\r
1065                                                                 </table></td><td style=""width:3px;""></td><td onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun7""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1066                                                                         <tr>\r
1067                                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-1-value\\three-black-2-value\\four-black-4-value')"" style=""margin-left:48px;"">four-black-4</a></td>\r
1068                                                                         </tr>\r
1069                                                                 </table></td><td style=""width:3px;""></td>\r
1070                                                         </tr>\r
1071                                                 </table></td>\r
1072                                         </tr>\r
1073                                 </table></td><td onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun8""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1074                                         <tr>\r
1075                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value')"" style=""margin-left:16px;"">two-black-2</a></td>\r
1076                                         </tr>\r
1077                                 </table></td><td style=""width:3px;""></td><td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
1078                                         <tr>\r
1079                                                 <td onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun9""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1080                                                         <tr>\r
1081                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-3-value')"" style=""margin-left:32px;"">three-black-3</a></td>\r
1082                                                         </tr>\r
1083                                                 </table></td><td style=""width:3px;""></td><td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
1084                                                         <tr>\r
1085                                                                 <td onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun10""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1086                                                                         <tr>\r
1087                                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-3-value\\four-black-5-value')"" style=""margin-left:48px;"">four-black-5</a></td>\r
1088                                                                         </tr>\r
1089                                                                 </table></td><td style=""width:3px;""></td><td onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun11""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1090                                                                         <tr>\r
1091                                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-3-value\\four-black-6-value')"" style=""margin-left:48px;"">four-black-6</a></td>\r
1092                                                                         </tr>\r
1093                                                                 </table></td><td style=""width:3px;""></td>\r
1094                                                         </tr>\r
1095                                                 </table></td><td onmouseover=""Menu_HoverRoot(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun12""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1096                                                         <tr>\r
1097                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-4-value')"" style=""margin-left:32px;"">three-black-4</a></td>\r
1098                                                         </tr>\r
1099                                                 </table></td><td style=""width:3px;""></td><td><table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">\r
1100                                                         <tr>\r
1101                                                                 <td onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun13""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1102                                                                         <tr>\r
1103                                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-4-value\\four-black-7-value')"" style=""margin-left:48px;"">four-black-7</a></td>\r
1104                                                                         </tr>\r
1105                                                                 </table></td><td style=""width:3px;""></td><td onmouseover=""Menu_HoverStatic(this)"" onmouseout=""Menu_Unhover(this)"" onkeyup=""Menu_Key(this)"" id=""Menun14""><table cellpadding=""0"" cellspacing=""0"" border=""0"" width=""100%"">\r
1106                                                                         <tr>\r
1107                                                                                 <td style=""white-space:nowrap;""><a class=""Menu_1"" href=""javascript:__doPostBack('Menu','one-black-value\\two-black-2-value\\three-black-4-value\\four-black-8-value')"" style=""margin-left:48px;"">four-black-8</a></td>\r
1108                                                                         </tr>\r
1109                                                                 </table></td>\r
1110                                                         </tr>\r
1111                                                 </table></td>\r
1112                                         </tr>\r
1113                                 </table></td>\r
1114                         </tr>\r
1115                 </table></td>\r
1116         </tr>\r
1117 </table><a id=""Menu_SkipLink""></a>";\r
1118                         #endregion\r
1119                         HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Horizontal");\r
1120                 }\r
1121 \r
1122                 public static void Menu_RenderStaticItems_Vertical (Page p) {\r
1123                         Menu m = CreateMenuForRenderTests ();\r
1124                         m.StaticDisplayLevels = 4;\r
1125                         AddMenuToPage (p, m);\r
1126                 }\r
1127 \r
1128                 public static void Menu_RenderStaticItems_Horizontal (Page p) {\r
1129                         Menu m = CreateMenuForRenderTests ();\r
1130                         m.Orientation = Orientation.Horizontal;\r
1131                         m.StaticDisplayLevels = 4;\r
1132                         AddMenuToPage (p, m);\r
1133                 }\r
1134 \r
1135                 private static void AddMenuToPage (Page p, Menu m) {\r
1136                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);\r
1137                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);\r
1138                         p.Form.Controls.Add (lcb);\r
1139                         p.Form.Controls.Add (m);\r
1140                         p.Form.Controls.Add (lce);\r
1141                 }\r
1142 \r
1143                 private static Menu CreateMenuForRenderTests () {\r
1144                         Menu menu = new Menu ();\r
1145                         menu.ID = "Menu";\r
1146                         MenuItem R, N1, N2, SN1, SN2, SN3, SN4;\r
1147                         R = new MenuItem ("one-black", "one-black-value");\r
1148                         N1 = new MenuItem ("two-black-1", "two-black-1-value");\r
1149                         N2 = new MenuItem ("two-black-2", "two-black-2-value");\r
1150                         SN1 = new MenuItem ("three-black-1", "three-black-1-value");\r
1151                         SN2 = new MenuItem ("three-black-2", "three-black-2-value");\r
1152                         SN3 = new MenuItem ("three-black-3", "three-black-3-value");\r
1153                         SN4 = new MenuItem ("three-black-4", "three-black-4-value");\r
1154                         SN1.ChildItems.Add (new MenuItem ("four-black-1", "four-black-1-value"));\r
1155                         SN1.ChildItems.Add (new MenuItem ("four-black-2", "four-black-2-value"));\r
1156                         SN2.ChildItems.Add (new MenuItem ("four-black-3", "four-black-3-value"));\r
1157                         SN2.ChildItems.Add (new MenuItem ("four-black-4", "four-black-4-value"));\r
1158                         SN3.ChildItems.Add (new MenuItem ("four-black-5", "four-black-5-value"));\r
1159                         SN3.ChildItems.Add (new MenuItem ("four-black-6", "four-black-6-value"));\r
1160                         SN4.ChildItems.Add (new MenuItem ("four-black-7", "four-black-7-value"));\r
1161                         SN4.ChildItems.Add (new MenuItem ("four-black-8", "four-black-8-value"));\r
1162                         N1.ChildItems.Add (SN1);\r
1163                         N1.ChildItems.Add (SN2);\r
1164                         N2.ChildItems.Add (SN3);\r
1165                         N2.ChildItems.Add (SN4);\r
1166                         R.ChildItems.Add (N1);\r
1167                         R.ChildItems.Add (N2);\r
1168                         menu.Items.Add (R);\r
1169                         return menu;\r
1170                 }\r
1171 \r
1172                  //Events Stuff\r
1173                 private bool OnDataBinding;\r
1174                 private bool OnDataBound;\r
1175                 private bool OnMenuItemClick;\r
1176                 private bool OnInit;\r
1177                 private bool OnMenuItemDataBound;\r
1178                 private bool OnPreRender;\r
1179                                 \r
1180                 private void OnMenuItemDataBoundHandler(object sender, MenuEventArgs e)\r
1181                 {\r
1182                         OnMenuItemDataBound = true;\r
1183                 }\r
1184                 private void OnInitHandler (object sender, EventArgs e)\r
1185                 {\r
1186                         OnInit = true;\r
1187                 }\r
1188                 private void OnDataBindingHandler (object sender, EventArgs e)\r
1189                 {\r
1190                         OnDataBinding = true;\r
1191                 }\r
1192                 private void OnDataDataBoundHandler (object sender, EventArgs e)\r
1193                 {\r
1194                         OnDataBound = true;\r
1195                 }\r
1196                 private void OnMenuItemClickHandler (object sender, MenuEventArgs e)\r
1197                 {\r
1198                         OnMenuItemClick = true;\r
1199                 }\r
1200                 private void OnPreRenderHandler (object sender, EventArgs e)\r
1201                 {\r
1202                         OnPreRender = true;\r
1203                 }\r
1204                 private void ResetEvents ()\r
1205                 {\r
1206                         OnMenuItemClick = false;\r
1207                         OnDataBinding = false;\r
1208                         OnDataBound = false;\r
1209                         OnInit = false;\r
1210                         OnPreRender = false;\r
1211                 }\r
1212                 [Test]\r
1213                 public void Menu_Events ()\r
1214                 {\r
1215                         Page myPage = new Page ();\r
1216                         PokerMenu p = new PokerMenu ();\r
1217                         MenuItem I = new MenuItem ();\r
1218                         p.Items.Add (I);\r
1219                         myPage.Controls.Add(p);\r
1220 \r
1221                         \r
1222                         p.Init += new EventHandler(OnInitHandler); \r
1223                         p.DataBinding += new EventHandler (OnDataBindingHandler);\r
1224                         p.DataBound  += new EventHandler(OnDataDataBoundHandler);\r
1225                         p.MenuItemClick += new MenuEventHandler(OnMenuItemClickHandler);\r
1226                         p.MenuItemDataBound += new MenuEventHandler (OnMenuItemDataBoundHandler);\r
1227                         Assert.AreEqual (false, OnDataBinding, "BeforeOnDataBinding");\r
1228                         p.DoOnDataBind (new EventArgs ());\r
1229                         Assert.AreEqual (true, OnDataBinding, "AfterOnDataBinding");\r
1230                         Assert.AreEqual (false, OnDataBound, "BeforeOnDataBound");\r
1231                         p.DoOnDataBound (new EventArgs ());\r
1232                         Assert.AreEqual (true, OnDataBound, "AfterOnDataBinding");\r
1233                         MenuEventArgs e = new MenuEventArgs (I);\r
1234                         Assert.AreEqual (false, OnMenuItemClick, "BeforeMenuItemClick");\r
1235                         p.DoOnMenuItemClick (e);\r
1236                         Assert.AreEqual (true, OnMenuItemClick, "AfterMenuItemClick");\r
1237                         Assert.AreEqual (false, OnInit, "BeforeOnInit");\r
1238                         p.DoOnInit (new EventArgs());\r
1239                         Assert.AreEqual (true, OnInit, "AfterOnInit");\r
1240                         Assert.AreEqual (false, OnMenuItemDataBound, "BeforeMenuItemDataBound");\r
1241                         p.DoMenuItemDataBound(e);\r
1242                         Assert.AreEqual (true, OnMenuItemDataBound, "AfterMenuItemDataBound");\r
1243                 }\r
1244                 [Test]\r
1245                 public void Menu_BubbleEvent () {\r
1246                         PokerMenu pm = new PokerMenu ();\r
1247                         MenuItem item = new MenuItem ("Root");\r
1248                         pm.Items.Add (item);\r
1249                         pm.MenuItemClick += new MenuEventHandler (pm_MenuItemClick);\r
1250                         _MenuItemClick = false;\r
1251                         MenuEventArgs clickCommandArg = new MenuEventArgs (item, null, new CommandEventArgs (Menu.MenuItemClickCommandName, null));\r
1252                         CommandEventArgs notClickCommandArg = new CommandEventArgs (Menu.MenuItemClickCommandName + "No", null);\r
1253                         Assert.AreEqual (true, pm.DoOnBubbleEvent (notClickCommandArg), "Bubble Event#1");\r
1254                         Assert.AreEqual (false, _MenuItemClick, "MenuItemClick Bubbled");\r
1255                         Assert.AreEqual (true, pm.DoOnBubbleEvent (clickCommandArg), "Bubble Event#2");\r
1256                         Assert.AreEqual (true, _MenuItemClick, "MenuItemClick Bubbled");\r
1257                         Assert.AreEqual (false, pm.DoOnBubbleEvent (new EventArgs ()), "Bubble Event#3");\r
1258                 }\r
1259 \r
1260                 bool _MenuItemClick;\r
1261 \r
1262                 void pm_MenuItemClick (object sender, MenuEventArgs e) {\r
1263                         _MenuItemClick = true;\r
1264                 }\r
1265 \r
1266                 [Test]\r
1267                 [Category ("NunitWeb")]\r
1268                 public void Menu_PreRenderEvent ()\r
1269                 {\r
1270                         new WebTest (PageInvoker.CreateOnLoad (PreRenderEvent)).Run ();\r
1271                 }\r
1272                 public void PreRenderEvent (Page p)\r
1273                 {\r
1274                         PokerMenu pm = new PokerMenu ();\r
1275                         p.Controls.Add (pm);\r
1276                         pm.PreRender += new EventHandler (OnPreRenderHandler);\r
1277                         Assert.AreEqual (false, OnPreRender, "BeforePreRender");\r
1278                         pm.DoOnPreRender (new EventArgs ());\r
1279                         Assert.AreEqual (true, OnPreRender, "AfterPreRender");\r
1280                 }\r
1281                 [TestFixtureTearDown]\r
1282                 public void TearDown ()\r
1283                 {\r
1284                         WebTest.Unload ();\r
1285                 }\r
1286         \r
1287                 // A simple Template class to wrap an image.\r
1288                 public class ImageTemplate : ITemplate\r
1289                 {\r
1290                         private MyWebControl.Image myImage;\r
1291                         public MyWebControl.Image MyImage\r
1292                         {\r
1293                                 get\r
1294                                 {\r
1295                                         return myImage;\r
1296                                 }\r
1297                                 set\r
1298                                 {\r
1299                                         myImage = value;\r
1300                                 }\r
1301                         }\r
1302                         public void InstantiateIn (Control container)\r
1303                         {\r
1304                                 container.Controls.Add (MyImage);\r
1305                         }\r
1306                 }\r
1307                 [Test]\r
1308                 [Category ("NunitWeb")]\r
1309                 public void MenuClass ()\r
1310                 {\r
1311                         string res = new WebTest ("menuclass.aspx").Run ();\r
1312                         string menua_pattern="<table[^>]*class=\"[^\"]*menua[^\"]*\"[^>]*>";\r
1313                         Assert.IsTrue (Regex.IsMatch (res, ".*"+menua_pattern+".*",\r
1314                                 RegexOptions.IgnoreCase|RegexOptions.Singleline),\r
1315                                 "check that <table class=\"menua\"> is found");\r
1316                         Assert.IsFalse (Regex.IsMatch (res, ".*"+menua_pattern+".*"+menua_pattern+".*",\r
1317                                 RegexOptions.IgnoreCase|RegexOptions.Singleline),\r
1318                                 "check that <table class=\"menua\"> is found only once");\r
1319                 }\r
1320 \r
1321                 [Test]\r
1322                 [Category ("NunitWeb")]\r
1323                 [Category ("NotDotNet")] // implementation specific\r
1324                 public void Menu_PostBack ()\r
1325                 {\r
1326                         WebTest t = new WebTest ("PostBackMenuTest.aspx");\r
1327                         string str = t.Run ();\r
1328                         FormRequest fr = new FormRequest (t.Response, "form1");\r
1329                         fr.Controls.Add ("__EVENTTARGET");\r
1330                         fr.Controls.Add ("__EVENTARGUMENT");\r
1331                         fr.Controls["__EVENTTARGET"].Value = "Menu1";\r
1332                         fr.Controls ["__EVENTARGUMENT"].Value = "0_1";\r
1333                         t.Request = fr;\r
1334                         PageDelegates pd = new PageDelegates ();\r
1335                         pd.PreRender = _MenuItemsPost;\r
1336                         t.Invoker = new PageInvoker (pd);\r
1337                         t.Run ();\r
1338                 }\r
1339 \r
1340                 public static void _MenuItemsPost (Page p)\r
1341                 {\r
1342                         foreach (Control c in p.Form.Controls) {\r
1343                                 Menu m = c as Menu;\r
1344                                 if (m != null) {\r
1345                                         Assert.AreEqual ("node2", m.SelectedValue, "MenuItemsPostBack");\r
1346                                 }\r
1347                         }\r
1348                 }\r
1349 \r
1350                 [Test]\r
1351                 [Category ("NunitWeb")]\r
1352                 public void Menu_PostBackFireEvents_1 ()\r
1353                 {\r
1354                         WebTest t = new WebTest ("PostBackMenuTest.aspx");\r
1355                         string str = t.Run ();\r
1356                         FormRequest fr = new FormRequest (t.Response, "form1");\r
1357                         fr.Controls.Add ("__EVENTTARGET");\r
1358                         fr.Controls.Add ("__EVENTARGUMENT");\r
1359                         fr.Controls["__EVENTTARGET"].Value = "Menu1";\r
1360 #if DOT_NET\r
1361                         fr.Controls["__EVENTARGUMENT"].Value = "root";  // "0_1";\r
1362 #else\r
1363                         fr.Controls ["__EVENTARGUMENT"].Value = "0";  // "0_1";\r
1364 #endif\r
1365                         t.Request = fr;\r
1366                         str = t.Run ();\r
1367                         Assert.AreEqual ("MenuItemClick", t.UserData.ToString (), "PostBackEvent");\r
1368                 }\r
1369 \r
1370                 [Test]\r
1371                 [Category ("NunitWeb")]\r
1372                 public void Menu_PostBackFireEvents_2 ()\r
1373                 {\r
1374                         WebTest t = new WebTest ("PostBackMenuTest.aspx");\r
1375                         PageDelegates pd = new PageDelegates ();\r
1376                         pd.Init = PostBackFireEvents_Init ;\r
1377                         t.Invoker = new PageInvoker (pd);\r
1378                         t.Run ();\r
1379                         Assert.AreEqual ("MenuItemDataBound", t.UserData.ToString (), "MenuItemDataBound");\r
1380                 }\r
1381 \r
1382                 public static void PostBackFireEvents_Init (Page p)\r
1383                 {\r
1384                         Menu m = new Menu ();\r
1385                         m.MenuItemDataBound += new MenuEventHandler (MenuItemDataBound_Event);\r
1386                         m.DataSource = LoadXml ();\r
1387                         p.Controls.Add (m);\r
1388                         m.DataBind ();\r
1389                 }\r
1390 \r
1391                 public static XmlDataSource LoadXml ()\r
1392                 {\r
1393                         XmlDataSource ds = new XmlDataSource ();\r
1394                         ds.EnableCaching = false;\r
1395                         #region xml_doc\r
1396                         String xml_text = @"<siteMapNode url=""1"" title=""root""  description="""">\r
1397                                                 <siteMapNode url=""~/MyPage.aspx"" title=""node1""  description="""" />\r
1398                                             </siteMapNode>";\r
1399                         #endregion\r
1400                         ds.Data = xml_text;\r
1401                         return ds;\r
1402                 }\r
1403 \r
1404                 static void MenuItemDataBound_Event (object sender, MenuEventArgs e)\r
1405                 {\r
1406                         WebTest.CurrentTest.UserData = "MenuItemDataBound"; \r
1407                 }\r
1408         }\r
1409 }\r
1410 #endif\r