2 // LoginStatusTest.cs - Unit tests for System.Web.UI.WebControls.LoginStatus
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
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:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
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.
32 using System.Collections;
34 using System.Security.Principal;
37 using System.Web.UI.HtmlControls;
38 using System.Web.UI.WebControls;
40 using NUnit.Framework;
42 namespace MonoTests.System.Web.UI.WebControls {
44 public class TestLoginStatus : LoginStatus {
47 private bool onLoggedOut;
48 private bool onLoggingOut;
49 private bool onPreRender;
52 get { return base.TagName; }
55 public StateBag StateBag {
56 get { return base.ViewState; }
59 private HtmlTextWriter GetWriter ()
61 StringWriter sw = new StringWriter ();
63 return new HtmlTextWriter (sw);
66 public string Render ()
68 HtmlTextWriter writer = GetWriter ();
70 return writer.InnerWriter.ToString ();
73 public string RenderContents ()
75 HtmlTextWriter writer = GetWriter ();
76 base.RenderContents (writer);
77 return writer.InnerWriter.ToString ();
80 public void SetDesignMode (IDictionary dic)
82 base.SetDesignModeState (dic);
86 get { return cancel; }
87 set { cancel = value; }
90 public bool OnLoggedOutCalled {
91 get { return onLoggedOut; }
92 set { onLoggedOut = value; }
95 protected override void OnLoggedOut (EventArgs e)
101 public void DoLoggedOut (EventArgs e)
103 base.OnLoggedOut (e);
106 public bool OnLoggingOutCalled {
107 get { return onLoggingOut; }
108 set { onLoggingOut = value; }
111 protected override void OnLoggingOut (LoginCancelEventArgs e)
115 base.OnLoggingOut (e);
118 public void DoLoggingIn (LoginCancelEventArgs e)
120 base.OnLoggingOut (e);
123 public bool OnPreRenderCalled {
124 get { return onPreRender; }
125 set { onPreRender = value; }
128 protected override void OnPreRender (EventArgs e)
131 base.OnPreRender (e);
136 public class LoginStatusTest {
138 private IPrincipal GetPrincipal (string name)
140 return new GenericPrincipal (new GenericIdentity (name), null);
143 private IPrincipal GetUnauthenticatedPrincipal (string name)
145 return new GenericPrincipal (new UnauthenticatedIdentity (name), null);
149 public void DefaultProperties ()
151 TestLoginStatus ls = new TestLoginStatus ();
152 Assert.AreEqual (0, ls.Attributes.Count, "Attributes.Count");
153 Assert.AreEqual (0, ls.StateBag.Count, "ViewState.Count");
155 Assert.AreEqual (String.Empty, ls.LoginImageUrl, "LoginImageUrl");
156 Assert.AreEqual ("Login", ls.LoginText, "LoginText");
157 Assert.AreEqual (LogoutAction.Refresh, ls.LogoutAction, "LogoutAction");
158 Assert.AreEqual (String.Empty, ls.LogoutImageUrl, "LogoutImageUrl");
159 Assert.AreEqual (String.Empty, ls.LogoutPageUrl, "LogoutPageUrl");
160 Assert.AreEqual ("Logout", ls.LogoutText, "LogoutText");
162 Assert.AreEqual ("a", ls.Tag, "TagName");
163 Assert.AreEqual (0, ls.Attributes.Count, "Attributes.Count-2");
164 Assert.AreEqual (0, ls.StateBag.Count, "ViewState.Count-2");
168 public void SetOriginalProperties ()
170 TestLoginStatus ls = new TestLoginStatus ();
172 ls.LoginImageUrl = String.Empty;
173 Assert.AreEqual (String.Empty, ls.LoginImageUrl, "LoginImageUrl");
174 ls.LoginText = "Login";
175 Assert.AreEqual ("Login", ls.LoginText, "LoginText");
176 ls.LogoutAction = LogoutAction.Refresh;
177 Assert.AreEqual (LogoutAction.Refresh, ls.LogoutAction, "LogoutAction");
178 ls.LogoutImageUrl = String.Empty;
179 Assert.AreEqual (String.Empty, ls.LogoutImageUrl, "LogoutImageUrl");
180 ls.LogoutPageUrl = String.Empty;
181 Assert.AreEqual (String.Empty, ls.LogoutPageUrl, "LogoutPageUrl");
182 ls.LogoutText = "Logout";
183 Assert.AreEqual ("Logout", ls.LogoutText, "LogoutText");
185 Assert.AreEqual ("a", ls.Tag, "TagName");
186 Assert.AreEqual (6, ls.StateBag.Count, "ViewState.Count-1");
190 public void CleanProperties ()
192 TestLoginStatus ls = new TestLoginStatus ();
193 ls.LoginImageUrl = String.Empty;
194 ls.LoginText = "Login";
195 ls.LogoutAction = LogoutAction.Refresh;
196 ls.LogoutImageUrl = String.Empty;
197 ls.LogoutPageUrl = String.Empty;
198 ls.LogoutText = "Logout";
199 Assert.AreEqual (6, ls.StateBag.Count, "ViewState.Count-1");
201 ls.LoginImageUrl = null;
202 Assert.AreEqual (String.Empty, ls.LoginImageUrl, "LoginImageUrl");
204 Assert.AreEqual ("Login", ls.LoginText, "LoginText");
205 ls.LogoutImageUrl = null;
206 Assert.AreEqual (String.Empty, ls.LogoutImageUrl, "LogoutImageUrl");
207 ls.LogoutPageUrl = null;
208 Assert.AreEqual (String.Empty, ls.LogoutPageUrl, "LogoutPageUrl");
209 ls.LogoutText = null;
210 Assert.AreEqual ("Logout", ls.LogoutText, "LogoutText");
212 Assert.AreEqual ("a", ls.Tag, "TagName");
213 Assert.AreEqual (1, ls.StateBag.Count, "ViewState.Count-2");
219 TestLoginStatus ls = new TestLoginStatus ();
220 Assert.AreEqual ("a", ls.Tag, "TagName");
222 ls.LoginImageUrl = "http://www.go-mono.com";
223 ls.LogoutImageUrl = "http://www.mono-project.com";
224 Assert.AreEqual ("a", ls.Tag, "TagName");
228 public void Controls ()
230 TestLoginStatus ls = new TestLoginStatus ();
231 Assert.AreEqual (4, ls.Controls.Count, "Count");
233 Assert.IsTrue (ls.Controls[0] is LinkButton, "Type-0");
234 Assert.IsTrue (ls.Controls[1] is ImageButton, "Type-1");
235 Assert.IsTrue (ls.Controls[2] is LinkButton, "Type-2");
236 Assert.IsTrue (ls.Controls[3] is ImageButton, "Type-3");
238 Assert.IsTrue (ls.Controls[0].Visible, "Visible-0");
239 Assert.IsTrue (ls.Controls[1].Visible, "Visible-1");
240 Assert.IsTrue (ls.Controls[2].Visible, "Visible-2");
241 Assert.IsTrue (ls.Controls[3].Visible, "Visible-3");
243 Assert.IsNotNull (ls.Controls[0].UniqueID, "UniqueID-0");
244 Assert.IsNotNull (ls.Controls[1].UniqueID, "UniqueID-1");
245 Assert.IsNotNull (ls.Controls[2].UniqueID, "UniqueID-2");
246 Assert.IsNotNull (ls.Controls[3].UniqueID, "UniqueID-3");
248 Assert.IsNull (ls.Controls[0].ID, "ID-0");
249 Assert.IsNull (ls.Controls[1].ID, "ID-1");
250 Assert.IsNull (ls.Controls[2].ID, "ID-2");
251 Assert.IsNull (ls.Controls[3].ID, "ID-3");
253 ls.LoginText = "LoginText";
254 ls.LoginImageUrl = "LoginImageUrl";
255 ls.LogoutText = "LogoutText";
256 ls.LogoutImageUrl = "LogoutImageUrl";
258 Assert.AreEqual (String.Empty, (ls.Controls[0] as LinkButton).Text, "Text-0");
259 Assert.AreEqual (String.Empty, (ls.Controls[1] as ImageButton).ImageUrl, "ImageUrl-1");
260 Assert.AreEqual (String.Empty, (ls.Controls[2] as LinkButton).Text, "Text-2");
261 Assert.AreEqual (String.Empty, (ls.Controls[3] as ImageButton).ImageUrl, "ImageUrl-3");
264 Assert.IsFalse (ls.OnPreRenderCalled, "!OnPreRender");
266 Assert.IsFalse (ls.Controls[0].Visible, "Render-Visible-0");
267 Assert.IsFalse (ls.Controls[1].Visible, "Render-Visible-1");
268 Assert.IsFalse (ls.Controls[2].Visible, "Render-Visible-2");
269 Assert.IsTrue (ls.Controls[3].Visible, "Render-Visible-3");
271 Assert.AreEqual (String.Empty, (ls.Controls[0] as LinkButton).Text, "Render-Text-0");
272 Assert.AreEqual (String.Empty, (ls.Controls[1] as ImageButton).ImageUrl, "Render-ImageUrl-1");
273 Assert.AreEqual (String.Empty, (ls.Controls[2] as LinkButton).Text, "Render-Text-2");
274 Assert.AreEqual ("LoginImageUrl", (ls.Controls[3] as ImageButton).ImageUrl, "Render-ImageUrl-3");
278 public void Render_NoPage ()
280 TestLoginStatus ls = new TestLoginStatus ();
281 Assert.AreEqual ("<a>Login</a>", ls.Render (), "Render");
282 Assert.AreEqual ("<a>Login</a>", ls.RenderContents (), "RenderContents");
283 ls.LoginText = "Log In";
284 Assert.AreEqual ("<a>Log In</a>", ls.Render (), "Render-2");
285 Assert.AreEqual ("<a>Log In</a>", ls.RenderContents (), "RenderContents-2");
286 ls.LoginImageUrl = "http://www.go-mono-com";
288 string s = ls.Render ();
289 Assert.IsTrue (s.StartsWith ("<input "), "Render-3a");
290 Assert.IsTrue (s.IndexOf (" type=\"image\" ") > 0, "Render-3b");
291 Assert.IsTrue (s.IndexOf (" name=\"" + ls.Controls [3].UniqueID + "\" ") > 0, "Render-3c");
292 Assert.IsTrue (s.IndexOf (" src=\"http://www.go-mono-com\" ") > 0, "Render-3d");
293 Assert.IsTrue (s.IndexOf (" alt=\"Log In\" ") > 0, "Render-3e");
294 Assert.IsTrue (s.EndsWith (" />"), "Render-3z");
295 Assert.AreEqual (s, ls.RenderContents (), "RenderContents-3");
296 // rendering <input> but we're still report an A as tag
297 Assert.AreEqual ("a", ls.Tag, "TagName");
301 [ExpectedException (typeof (HttpException))]
302 public void Render_User_WithoutForm ()
304 ContextPage page = new ContextPage (GetPrincipal ("me"));
305 TestLoginStatus ls = new TestLoginStatus ();
308 // must be in a server form
311 // all other rendering fails because I can't setup a proper environment
312 // mostly because overriding Context doesn't make Page.Request to work :-(