2 // LoginNameTest.cs - Unit tests for System.Web.UI.WebControls.LoginName
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.Security.Principal;
35 using System.Web.UI.WebControls;
37 using NUnit.Framework;
39 namespace MonoTests.System.Web.UI.WebControls {
41 public class TestLoginName : LoginName {
43 public HttpContext HttpContext {
44 get { return base.Context; }
48 get { return base.TagName; }
51 public StateBag StateBag {
52 get { return base.ViewState; }
55 private HtmlTextWriter GetWriter ()
57 StringWriter sw = new StringWriter ();
59 return new HtmlTextWriter (sw);
62 public string Render ()
64 HtmlTextWriter writer = GetWriter ();
66 return writer.InnerWriter.ToString ();
69 public string RenderContents ()
71 HtmlTextWriter writer = GetWriter ();
72 base.RenderContents (writer);
73 return writer.InnerWriter.ToString ();
76 public string RenderBeginTag ()
78 HtmlTextWriter writer = GetWriter ();
79 base.RenderBeginTag (writer);
80 return writer.InnerWriter.ToString ();
83 public string RenderEndTag (bool includeBeginTag)
85 HtmlTextWriter writer = GetWriter ();
86 if (includeBeginTag) {
87 // required before calling RenderEndTag
88 base.RenderBeginTag (writer);
89 // unless we're not really calling our base...
91 base.RenderEndTag (writer);
92 return writer.InnerWriter.ToString ();
96 public class ContextPage : Page {
100 public ContextPage ()
104 public ContextPage (IPrincipal principal)
106 Context.User = principal;
109 protected internal override HttpContext Context {
112 ctx = new HttpContext (
113 new HttpRequest (String.Empty, "http://www.mono-project.com", String.Empty),
114 new HttpResponse (new StringWriter ())
122 public class UnauthenticatedIdentity : GenericIdentity {
124 public UnauthenticatedIdentity (string name)
129 public override bool IsAuthenticated {
130 get { return false; }
135 public class LoginNameTest {
137 private IPrincipal GetPrincipal (string name)
139 return new GenericPrincipal (new GenericIdentity (name), null);
142 private IPrincipal GetUnauthenticatedPrincipal (string name)
144 return new GenericPrincipal (new UnauthenticatedIdentity (name), null);
148 public void DefaultProperties ()
150 TestLoginName ln = new TestLoginName ();
151 Assert.AreEqual (0, ln.Attributes.Count, "Attributes.Count");
152 Assert.AreEqual (0, ln.StateBag.Count, "ViewState.Count");
154 Assert.AreEqual ("{0}", ln.FormatString, "FormatString");
156 Assert.AreEqual ("span", ln.Tag, "span");
157 Assert.AreEqual (0, ln.Attributes.Count, "Attributes.Count-1");
158 Assert.AreEqual (0, ln.StateBag.Count, "ViewState.Count-1");
162 public void SetOriginalProperties ()
164 TestLoginName ln = new TestLoginName ();
165 ln.FormatString = "{0}";
166 Assert.AreEqual (1, ln.StateBag.Count, "ViewState.Count-1");
170 public void CleanProperties ()
172 TestLoginName ln = new TestLoginName ();
173 ln.FormatString = "Hola {0}!";
174 Assert.AreEqual ("Hola {0}!", ln.FormatString, "FormatString-1");
175 Assert.AreEqual (1, ln.StateBag.Count, "ViewState.Count-1");
176 ln.FormatString = "{0}";
177 Assert.AreEqual ("{0}", ln.FormatString, "FormatString-2");
178 Assert.AreEqual (1, ln.StateBag.Count, "ViewState.Count-2");
179 ln.FormatString = String.Empty;
180 Assert.AreEqual (String.Empty, ln.FormatString, "FormatString-3");
181 Assert.AreEqual (1, ln.StateBag.Count, "ViewState.Count-3");
182 ln.FormatString = null;
183 Assert.AreEqual ("{0}", ln.FormatString, "FormatString-4");
184 Assert.AreEqual (0, ln.StateBag.Count, "ViewState.Count-4");
188 public void CacheIdentity ()
190 TestLoginName ln = new TestLoginName ();
191 Assert.AreEqual (String.Empty, ln.RenderContents (), "Anonymous");
192 ln.Page = new ContextPage (GetPrincipal ("me"));
193 Assert.AreEqual ("me", ln.RenderContents (), "me");
194 ln.Page = new ContextPage (GetPrincipal ("you"));
195 Assert.AreEqual ("you", ln.RenderContents (), "you");
199 public void Render_NoPage ()
201 TestLoginName ln = new TestLoginName ();
202 Assert.AreEqual (String.Empty, ln.Render (), "Render");
203 Assert.AreEqual (String.Empty, ln.RenderContents (), "RenderContents");
204 Assert.AreEqual (String.Empty, ln.RenderBeginTag (), "RenderBeginTag");
205 Assert.AreEqual (String.Empty, ln.RenderEndTag (false), "RenderEndTag");
209 public void Render_Anonymous_NoPrincipal ()
211 ContextPage page = new ContextPage ();
212 TestLoginName ln = new TestLoginName ();
214 Assert.AreEqual (String.Empty, ln.Render (), "Render");
215 Assert.AreEqual (String.Empty, ln.RenderContents (), "RenderContents");
216 Assert.AreEqual (String.Empty, ln.RenderBeginTag (), "RenderBeginTag");
217 Assert.AreEqual (String.Empty, ln.RenderEndTag (false), "RenderEndTag");
221 public void Render_Anonymous_IPrincipal ()
223 ContextPage page = new ContextPage (GetPrincipal (String.Empty));
224 TestLoginName ln = new TestLoginName ();
226 Assert.AreEqual (String.Empty, ln.Render (), "Render");
227 Assert.AreEqual (String.Empty, ln.RenderContents (), "RenderContents");
228 Assert.AreEqual (String.Empty, ln.RenderBeginTag (), "RenderBeginTag");
229 Assert.AreEqual (String.Empty, ln.RenderEndTag (false), "RenderEndTag");
233 public void Render_User ()
235 ContextPage page = new ContextPage (GetPrincipal ("me"));
236 TestLoginName ln = new TestLoginName ();
238 Assert.IsTrue (page.User.Identity.IsAuthenticated, "IsAuthenticated");
239 Assert.AreEqual ("<span>me</span>", ln.Render (), "Render");
240 Assert.AreEqual ("me", ln.RenderContents (), "RenderContents");
241 Assert.AreEqual ("<span>", ln.RenderBeginTag (), "RenderBeginTag");
242 Assert.AreEqual ("<span></span>", ln.RenderEndTag (true), "RenderEndTag");
246 public void Render_UnauthenticatedUser ()
248 ContextPage page = new ContextPage (GetUnauthenticatedPrincipal ("me"));
249 TestLoginName ln = new TestLoginName ();
251 Assert.IsFalse (page.User.Identity.IsAuthenticated, "IsAuthenticated");
252 Assert.AreEqual ("<span>me</span>", ln.Render (), "Render");
253 Assert.AreEqual ("me", ln.RenderContents (), "RenderContents");
254 Assert.AreEqual ("<span>", ln.RenderBeginTag (), "RenderBeginTag");
255 Assert.AreEqual ("<span></span>", ln.RenderEndTag (true), "RenderEndTag");
259 public void Render_StringFormat ()
261 ContextPage page = new ContextPage (GetPrincipal ("me"));
262 TestLoginName ln = new TestLoginName ();
264 ln.FormatString = "Hola {0}!";
265 Assert.AreEqual ("Hola me!", ln.RenderContents (), "RenderContents");
269 public void Render_StringFormat_Empty ()
271 ContextPage page = new ContextPage (GetPrincipal ("me"));
272 TestLoginName ln = new TestLoginName ();
274 ln.FormatString = String.Empty;
275 Assert.AreEqual ("me", ln.RenderContents (), "RenderContents");
279 public void Render_StringFormat_NoVar ()
281 ContextPage page = new ContextPage (GetPrincipal ("me"));
282 TestLoginName ln = new TestLoginName ();
284 ln.FormatString = "Hola!";
285 Assert.AreEqual ("Hola!", ln.RenderContents (), "RenderContents");
289 [ExpectedException (typeof (FormatException))]
290 public void Render_StringFormat_TwoVars ()
292 ContextPage page = new ContextPage (GetPrincipal ("me"));
293 TestLoginName ln = new TestLoginName ();
295 ln.FormatString = "Hola {0} {1}!";
296 Assert.AreEqual ("Hola me!", ln.RenderContents (), "RenderContents");