2 // Tests for System.Web.UI.Adapters.PageAdapter
5 // Dean Brettle (dean@brettle.com)
7 // Copyright (C) 2007 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.
30 using NUnit.Framework;
32 using System.Collections;
33 using System.Collections.Specialized;
36 using System.Globalization;
39 using System.Web.UI.WebControls;
40 using System.Web.UI.Adapters;
41 using System.Web.Configuration;
42 using MonoTests.SystemWeb.Framework;
43 using MonoTests.stand_alone.WebHarness;
45 namespace MonoTests.System.Web.UI.Adapters
48 public class PageAdapterTest
50 private MyPageAdapter mpa;
54 public void SetUpTest ()
56 WebTest.CopyResource (GetType (), "PageWithAdapter.aspx", "PageWithAdapter.aspx");
63 mpa = new MyPageAdapter (page);
67 public void CacheVaryByHeaders ()
69 Assert.IsNull (mpa.CacheVaryByHeaders, "CacheVaryByHeaders #1");
73 public void CacheVaryByParams ()
75 Assert.IsNull (mpa.CacheVaryByParams, "CacheVaryByParams #1");
79 public void GetStatePersister ()
81 PageStatePersister persister = mpa.GetStatePersister ();
82 Assert.AreEqual (typeof(HiddenFieldPageStatePersister),
83 persister.GetType (), "GetStatePersister #1");
87 public void GetPostBackFormReference ()
89 Assert.AreEqual("document.forms['test']", mpa.GetPostBackFormReference ("test"),
90 "GetPostBackFormReference #1");
94 public void DeterminePostBackMode ()
96 Assert.AreEqual(page.MyDeterminePostBackMode (), mpa.DeterminePostBackMode (),
97 "DeterminePostBackMode #1");
101 public void RenderBeginHyperlink_NoEncode ()
103 StringWriter sw = new StringWriter ();
104 HtmlTextWriter htw = new HtmlTextWriter (sw);
105 mpa.RenderBeginHyperlink (htw, "url with &, <, and \"", false, "softKeyLabel");
106 Assert.AreEqual("<a href=\"url with &, <, and \"\">", sw.ToString(),
107 "RenderBeginHyperlink_NoEncode #1");
111 public void RenderBeginHyperlink_Encode ()
113 StringWriter sw = new StringWriter ();
114 HtmlTextWriter htw = new HtmlTextWriter (sw);
115 mpa.RenderBeginHyperlink (htw, "url with &, <, and \"", true, "softKeyLabel");
116 Assert.AreEqual("<a href=\"url with &, <, and "\">", sw.ToString(),
117 "RenderBeginHyperlink_Encode #1");
121 public void RenderBeginHyperlink_NoEncode_AccessKey ()
123 StringWriter sw = new StringWriter ();
124 HtmlTextWriter htw = new HtmlTextWriter (sw);
125 mpa.RenderBeginHyperlink (htw, "url with &, <, and \"", false, "softKeyLabel", "X");
126 Assert.AreEqual("<a href=\"url with &, <, and \"\" accesskey=\"X\">",
127 sw.ToString(), "RenderBeginHyperlink_NoEncode_AccessKey #1");
131 public void RenderBeginHyperlink_Encode_AccessKey ()
133 StringWriter sw = new StringWriter ();
134 HtmlTextWriter htw = new HtmlTextWriter (sw);
135 mpa.RenderBeginHyperlink (htw, "url with &, <, and \"", true, "softKeyLabel", "X");
136 Assert.AreEqual("<a href=\"url with &, <, and "\" accesskey=\"X\">",
137 sw.ToString(), "RenderBeginHyperlink_Encode_AccessKey #1");
141 [ExpectedException (typeof (ArgumentOutOfRangeException))]
142 public void RenderBeginHyperlink_LongAccessKey ()
144 StringWriter sw = new StringWriter ();
145 HtmlTextWriter htw = new HtmlTextWriter (sw);
146 mpa.RenderBeginHyperlink (htw, "url with &, <, and \"", true, "softKeyLabel", "accessKey");
150 public void EndHyperlink ()
152 StringWriter sw = new StringWriter ();
153 HtmlTextWriter htw = new HtmlTextWriter (sw);
154 mpa.RenderBeginHyperlink (htw, "url", false, null);
155 mpa.RenderEndHyperlink (htw);
156 Assert.AreEqual("<a href=\"url\"></a>", sw.ToString(), "RenderEndHyperlink #1");
160 [Category ("NunitWeb")]
161 public void RenderPostBackEvent ()
163 WebTest t = new WebTest ("PageWithAdapter.aspx");
164 PageDelegates pd = new PageDelegates ();
165 pd.SaveStateComplete = RenderPostBackEvent_OnSaveStateComplete;
166 t.Invoker = new PageInvoker (pd);
167 string html = t.Run ();
170 public static void RenderPostBackEvent_OnSaveStateComplete (Page p)
172 TestPageWithAdapter pageWithAdapter = (TestPageWithAdapter) p;
173 TestAdapter testAdapter = (TestAdapter)pageWithAdapter.PageAdapter;
175 StringWriter sw = new StringWriter ();
176 HtmlTextWriter htw = new HtmlTextWriter (sw);
177 testAdapter.RenderPostBackEvent (htw, "target", "argument", "softKeyLabel", "text", "postUrl", "X", true);
178 string origHtml = "<a href=\"postUrl?__VIEWSTATE=DAAAAA%3d%3d&__EVENTTARGET=target&__EVENTARGUMENT=argument&__PREVIOUSPAGE=/NunitWeb/PageWithAdapter.aspx\" accesskey=\"X\">text</a>";
179 string renderedHtml = sw.ToString ();
180 HtmlDiff.AssertAreEqual(origHtml, renderedHtml, "RenderPostBackEvent #1");
183 StringWriter sw = new StringWriter ();
184 HtmlTextWriter htw = new HtmlTextWriter (sw);
185 testAdapter.RenderPostBackEvent (htw, "target", "argument", "softKeyLabel", "text", "postUrl", "X", false);
186 string origHtml = "<a href=\"postUrl?__VIEWSTATE=DAAAAA%3d%3d&__EVENTTARGET=target&__EVENTARGUMENT=argument&__PREVIOUSPAGE=/NunitWeb/PageWithAdapter.aspx\" accesskey=\"X\">text</a>";
187 string renderedHtml = sw.ToString ();
188 HtmlDiff.AssertAreEqual(origHtml, renderedHtml, "RenderPostBackEvent #2");
191 StringWriter sw = new StringWriter ();
192 HtmlTextWriter htw = new HtmlTextWriter (sw);
193 string origHtml = "<a href=\"postUrl?__VIEWSTATE=DAAAAA%3d%3d&__EVENTTARGET=target&__EVENTARGUMENT=argument&__PREVIOUSPAGE=/NunitWeb/PageWithAdapter.aspx\" accesskey=\"X\">text</a>";
194 testAdapter.RenderPostBackEvent (htw, "target", "argument", "softKeyLabel", "text", "postUrl", "X");
195 string renderedHtml = sw.ToString ();
196 HtmlDiff.AssertAreEqual(origHtml, renderedHtml, "RenderPostBackEvent #3");
199 StringWriter sw = new StringWriter ();
200 HtmlTextWriter htw = new HtmlTextWriter (sw);
201 string origHtml = "<a href=\"/NunitWeb/PageWithAdapter.aspx?__VIEWSTATE=DAAAAA%3d%3d&__EVENTTARGET=target&__EVENTARGUMENT=argument&__PREVIOUSPAGE=/NunitWeb/PageWithAdapter.aspx\">text</a>";
202 testAdapter.RenderPostBackEvent (htw, "target", "argument", "softKeyLabel", "text");
203 string renderedHtml = sw.ToString ();
204 HtmlDiff.AssertAreEqual(origHtml, renderedHtml, "RenderPostBackEvent #4");
210 public void RadioButtons ()
212 ArrayList group = new ArrayList (mpa.GetRadioButtonsByGroup ("Group1"));
213 Assert.AreEqual (0, group.Count, "RadioButtons #0");
215 RadioButton g1b1 = new RadioButton ();
216 g1b1.GroupName = "Group1";
217 mpa.RegisterRadioButton(g1b1);
218 RadioButton g1b2 = new RadioButton ();
219 g1b2.GroupName = "Group1";
220 mpa.RegisterRadioButton(g1b2);
221 RadioButton g2b1 = new RadioButton ();
222 g2b1.GroupName = "Group2";
223 mpa.RegisterRadioButton (g2b1);
224 RadioButton noGroupB1 = new RadioButton ();
225 mpa.RegisterRadioButton (noGroupB1);
227 Assert.AreEqual (0, mpa.GetRadioButtonsByGroup ("Non-existent group").Count, "RadioButtons #1");
229 ArrayList group1 = new ArrayList (mpa.GetRadioButtonsByGroup ("Group1"));
230 Assert.AreEqual (2, group1.Count, "RadioButtons #2");
231 Assert.IsTrue (group1.Contains (g1b1), "RadioButtons #3");
232 Assert.IsTrue (group1.Contains (g1b2), "RadioButtons #4");
234 ArrayList group2 = new ArrayList (mpa.GetRadioButtonsByGroup ("Group2"));
235 Assert.AreEqual (1, group2.Count, "RadioButtons #5");
236 Assert.IsTrue (group2.Contains (g2b1), "RadioButtons #6");
238 ArrayList noGroup = new ArrayList (mpa.GetRadioButtonsByGroup (""));
239 Assert.AreEqual (1, noGroup.Count, "RadioButtons #7");
240 Assert.IsTrue (noGroup.Contains (noGroupB1), "RadioButtons #8");
244 public void ClientState ()
246 page.RawViewState = "test";
247 Assert.AreEqual ("test", mpa.ClientState, "ClientState #1");
251 public void TransformText ()
253 Assert.AreEqual ("test", mpa.TransformText("test"), "TransformText #1");
254 Assert.IsNull (mpa.TransformText(null), "TransformText #2");
257 [TestFixtureTearDown]
258 public void TearDown ()
263 class MyPageAdapter : SystemWebTestShim.PageAdapter
265 internal MyPageAdapter (MyPage p) : base (p)
269 new internal string ClientState {
270 get { return base.ClientState; }
273 new internal string GetPostBackFormReference (string s)
275 return base.GetPostBackFormReference (s);
279 class MyPage : SystemWebTestShim.Page
281 NameValueCollection post_back_mode = new NameValueCollection ();
283 override protected internal NameValueCollection DeterminePostBackMode ()
285 return post_back_mode;
288 internal NameValueCollection MyDeterminePostBackMode ()
290 return DeterminePostBackMode ();