1 //
2 // Tests for System.Web.UI.WebControls.Adapters.MenuAdapter
3 //
4 // Author:
5 //	Dean Brettle (dean@brettle.com)
6 //
7 // Copyright (C) 2008 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 
29 using NUnit.Framework;
30 using System;
31 using System.Collections;
32 using System.Drawing;
33 using System.IO;
34 using System.Globalization;
35 using System.Web;
36 using System.Web.UI;
37 using System.Web.UI.WebControls;
38 using System.Web.UI.WebControls.Adapters;
39 using System.Web.Configuration;
40 using MonoTests.SystemWeb.Framework;
41 
42 
43 namespace MonoTests.System.Web.UI.WebControls.Adapters
44 {
45 	[TestFixture]
46 	public class MenuAdapterTest
47 	{
48 		MyMenu c;
49 		MyMenuAdapter a;
50 		StringWriter sw;
51 		HtmlTextWriter w;
52 		Page p;
53 		EventArgs e;
54 
55 		[SetUp]
SetUp()56 		public void SetUp ()
57 		{
58 			p = new Page ();
59 			c = new MyMenu ();
60 			c.RenderingMode = MenuRenderingMode.Table;
61 			a = new MyMenuAdapter (c);
62 			p.Controls.Add(c);
63 			sw = new StringWriter ();
64 			w = new HtmlTextWriter (sw);
65 			e = new EventArgs();
66 		}
67 
68 		[Test]
OnInit()69 		public void OnInit ()
70 		{
71 			a.OnInit (e);
72 			Assert.IsTrue (p.RequiresControlState (c), "OnInit #1");
73 			Assert.AreEqual (e, c.on_init_arg, "OnInit #2");
74 		}
75 
76 		[Test]
OnPreRender()77 		public void OnPreRender ()
78 		{
79 			a.OnPreRender (e);
80 			Assert.AreEqual (e, c.on_pre_render_arg, "OnPreRender #1");
81 		}
82 
83 		[Test]
RaisePostBackEvent()84 		public void RaisePostBackEvent ()
85 		{
86 			((IPostBackEventHandler)a).RaisePostBackEvent ("eventArg");
87 			Assert.AreEqual ("eventArg", c.raise_post_back_event_arg, "RaisePostBackEvent #1");
88 		}
89 
90 		[Test]
RenderBeginTag()91 		public void RenderBeginTag ()
92 		{
93 			a.RenderBeginTag (w);
94 			Assert.AreEqual ("RenderBeginTag\n", sw.ToString ().Replace ("\r", ""), "RenderBeginTag #1");
95 		}
96 
97 		[Test]
RenderContentsTag()98 		public void RenderContentsTag ()
99 		{
100 			a.RenderContents (w);
101 			Assert.AreEqual ("RenderContents\n", sw.ToString ().Replace ("\r", ""), "RenderContents #1");
102 		}
103 
104 		[Test]
RenderEndTag()105 		public void RenderEndTag ()
106 		{
107 			a.RenderEndTag (w);
108 			Assert.AreEqual ("RenderEndTag\n", sw.ToString ().Replace ("\r", ""), "RenderEndTag #1");
109 		}
110 
111 		[Test]
RenderItem()112 		public void RenderItem ()
113 		{
114 			MenuItem item = new MenuItem("menu item text");
115 
116 			// This has to stay to work around event validation errors. If it's removed,
117 			// then RenderItem will eventually attempt to register for event validation,
118 			// which can only be done during the Render phase.
119 			item.NavigateUrl = "http://google.com/";
120 			a.RenderItem (w, item, 0);
121 			Assert.IsTrue (sw.ToString ().IndexOf("menu item text") != -1, "RenderItem #1");
122 		}
123 
124 		[Test]
Control()125 		public void Control ()
126 		{
127 			Assert.AreEqual (c, a.Control, "Control #1");
128 		}
129 
130 
131 
132 #region Support classes
133 
134 		class MyMenu : Menu
135 		{
136 
137 			internal EventArgs on_init_arg;
OnInit(EventArgs e)138 			protected internal override void OnInit (EventArgs e)
139 			{
140 				on_init_arg = e;
141 				base.OnInit (e);
142 			}
143 
144 			internal EventArgs on_pre_render_arg;
OnPreRender(EventArgs e)145 			protected internal override void OnPreRender (EventArgs e)
146 			{
147 				on_pre_render_arg = e;
148 				base.OnPreRender (e);
149 			}
150 
151 			internal string raise_post_back_event_arg;
RaisePostBackEvent(string eventArgument)152 			protected internal override void RaisePostBackEvent (string eventArgument)
153 			{
154 				raise_post_back_event_arg = eventArgument;
155 			}
156 
RenderBeginTag(HtmlTextWriter w)157 			public override void RenderBeginTag (HtmlTextWriter w)
158 			{
159 				w.WriteLine("RenderBeginTag");
160 			}
161 
RenderContents(HtmlTextWriter w)162 			protected internal override void RenderContents (HtmlTextWriter w)
163 			{
164 				w.WriteLine("RenderContents");
165 			}
166 
RenderEndTag(HtmlTextWriter w)167 			public override void RenderEndTag (HtmlTextWriter w)
168 			{
169 				w.WriteLine("RenderEndTag");
170 			}
171 
172 		}
173 
174 		class MyMenuAdapter : SystemWebTestShim.MenuAdapter
175 		{
MyMenuAdapter(Menu c)176 			internal MyMenuAdapter (Menu c) : base (c)
177 			{
178 			}
179 
OnInit(EventArgs e)180 			internal new void OnInit (EventArgs e)
181 			{
182 				base.OnInit (e);
183 			}
184 
OnPreRender(EventArgs e)185 			internal new void OnPreRender (EventArgs e)
186 			{
187 				base.OnPreRender (e);
188 			}
189 
RenderBeginTag(HtmlTextWriter w)190 			new internal void RenderBeginTag (HtmlTextWriter w)
191 			{
192 				base.RenderBeginTag (w);
193 			}
194 
RenderContents(HtmlTextWriter w)195 			new internal void RenderContents (HtmlTextWriter w)
196 			{
197 				base.RenderContents (w);
198 			}
199 
RenderEndTag(HtmlTextWriter w)200 			new internal void RenderEndTag (HtmlTextWriter w)
201 			{
202 				base.RenderEndTag (w);
203 			}
204 
205 			new internal Menu Control {
206 				get { return base.Control; }
207 			}
208 
RenderItem(HtmlTextWriter w, MenuItem mi, int i)209 			internal new void RenderItem (HtmlTextWriter w, MenuItem mi, int i)
210 			{
211 				base.RenderItem (w, mi, i);
212 			}
213 		}
214 
215 #endregion
216 	}
217 }
218