1 //
2 // Tests for System.Web.UI.WebControls.BulletedList.cs
3 //
4 // Author:
5 //	Yoni Klein (yonik@mainsoft.com)
6 //	Merav Sudri(meravs@mainsoft.com)
7 //      Tal Klahr (talk@mainsoft.com)
8 //
9 //
10 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
11 //
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 //
31 using NUnit.Framework;
32 using System;
33 using System.Collections;
34 using System.IO;
35 using System.Globalization;
36 using System.Web;
37 using System.Web.UI;
38 using System.Web.UI.WebControls;
39 using MonoTests.SystemWeb.Framework;
40 using MonoTests.stand_alone.WebHarness;
41 
42 
43 namespace MonoTests.System.Web.UI.WebControls
44 {
45 	class PokerBulletedList : BulletedList
46 	{
PokerBulletedList()47 		public PokerBulletedList ()
48 		{
49 			TrackViewState ();
50 		}
SaveState()51 		public object SaveState ()
52 		{
53 			return SaveViewState ();
54 		}
LoadState(object o)55 		public void LoadState (object o)
56 		{
57 			LoadViewState (o);
58 		}
59 		public StateBag StateBag
60 		{
61 			get { return base.ViewState; }
62 		}
63 
Render()64 		public string Render ()
65 		{
66 			StringWriter sw = new StringWriter ();
67 			HtmlTextWriter tw = new HtmlTextWriter (sw);
68 			tw.NewLine = "\n";
69 			Render (tw);
70 			return sw.ToString ();
71 		}
72 
DoRenderContents(HtmlTextWriter tw)73 		public void DoRenderContents (HtmlTextWriter tw)
74 		{
75 			RenderContents (tw);
76 		}
77 
DoRenderBulletText(ListItem item, int index, HtmlTextWriter tw)78 		public void DoRenderBulletText (ListItem item, int index, HtmlTextWriter tw)
79 		{
80 			RenderBulletText (item, index, tw);
81 		}
82 
DoOnClick(BulletedListEventArgs e)83 		public void DoOnClick (BulletedListEventArgs e)
84 		{
85 			OnClick (e);
86 		}
87 
88 
89 	}
90 
91     class VerifyMultiSelectBulletedList : BulletedList
92     {
VerifyMultiSelect()93         public new virtual void VerifyMultiSelect()
94         {
95             base.VerifyMultiSelect();
96         }
97     }
98 
99 	[TestFixture]
100 	public class BulletedListTest
101 	{
102 		[TestFixtureSetUp]
SetUp()103 		public void SetUp ()
104 		{
105 			WebTest.CopyResource (GetType (), "NoEventValidation.aspx", "NoEventValidation.aspx");
106 		}
107 
108 		[Test]
BulletedList_DefaultProperties()109 		public void BulletedList_DefaultProperties ()
110 		{
111 
112 			PokerBulletedList b = new PokerBulletedList ();
113 			Assert.AreEqual (0, b.StateBag.Count, "ViewState.Count");
114 			Assert.AreEqual (string.Empty, b.BulletImageUrl, "BulletImageUrl");
115 			Assert.AreEqual (BulletStyle.NotSet, b.BulletStyle, "BulletStyle");
116 			EmptyControlCollection c = new EmptyControlCollection (b);
117 			EmptyControlCollection c2 = (EmptyControlCollection) b.Controls;
118 			Assert.AreEqual ("System.Web.UI.EmptyControlCollection", b.Controls.GetType ().ToString (), "Controls");
119 			Assert.AreEqual ("Text", b.DisplayMode.ToString (), "DisplayMode");
120 			Assert.AreEqual (1, b.FirstBulletNumber, "FirstBulletNumber");
121 			Assert.AreEqual (-1, b.SelectedIndex, "SelectedIndex");
122 			Assert.AreEqual (null, b.SelectedItem, "SelectedItem");
123 			Assert.AreEqual (string.Empty, b.Target, "Target");
124 		}
125 
126 		[Test]
BulletedList_DefaultPropertiesNotWorking()127 		public void BulletedList_DefaultPropertiesNotWorking ()
128 		{
129 			PokerBulletedList b = new PokerBulletedList ();
130 			Assert.AreEqual (string.Empty, b.SelectedValue, "SelectedValue"); // NotImplementedException on Mono
131 			Assert.AreEqual (string.Empty, b.Text, "Text");
132 		}
133 
134 		[Test]
BulletedList_AssignToDefaultProperties()135 		public void BulletedList_AssignToDefaultProperties ()
136 		{
137 			PokerBulletedList b = new PokerBulletedList ();
138 			Assert.AreEqual (0, b.StateBag.Count, "ViewState.Count");
139 			b.BulletImageUrl = "Images/edit.gif";
140 			Assert.AreEqual ("Images/edit.gif", b.BulletImageUrl, "BulletImageUrl");
141 			b.BulletStyle = BulletStyle.Numbered;
142 			Assert.AreEqual (BulletStyle.Numbered, b.BulletStyle, "BulletStyle");
143 			b.BulletStyle = BulletStyle.LowerAlpha;
144 			Assert.AreEqual (BulletStyle.LowerAlpha, b.BulletStyle, "BulletStyle");
145 			b.BulletStyle = BulletStyle.CustomImage;
146 			Assert.AreEqual (BulletStyle.CustomImage, b.BulletStyle, "BulletStyle");
147 			b.BulletStyle = BulletStyle.Square;
148 			Assert.AreEqual (BulletStyle.Square, b.BulletStyle, "BulletStyle");
149 			b.DisplayMode = BulletedListDisplayMode.HyperLink;
150 			Assert.AreEqual (BulletedListDisplayMode.HyperLink, b.DisplayMode, "DisplayMode");
151 			b.FirstBulletNumber = 4;
152 			Assert.AreEqual (4, b.FirstBulletNumber, "FirstBulletNumber");
153 			b.Target = "_search";
154 			Assert.AreEqual ("_search", b.Target, "Target_search");
155 			b.Target = "_top";
156 			Assert.AreEqual ("_top", b.Target, "Target_top");
157 			b.Target = "_parent";
158 			Assert.AreEqual ("_parent", b.Target, "Target_parent");
159 			b.Target = "_blank";
160 			Assert.AreEqual ("_blank", b.Target, "Target_blank");
161 			b.Target = "_self";
162 			Assert.AreEqual ("_self", b.Target, "Target_self");
163 
164 		}
165 
166 		[Test]
BulletedList_NullProperties()167 		public void BulletedList_NullProperties ()
168 		{
169 			PokerBulletedList b = new PokerBulletedList ();
170 			Assert.AreEqual (0, b.StateBag.Count, "ViewState.Count");
171 			b.BulletImageUrl = null;
172 			Assert.AreEqual (string.Empty, b.BulletImageUrl, "BulletImageUrl");
173 			b.Target = null;
174 			Assert.AreEqual (string.Empty, b.Target, "Target");
175 
176 		}
177 
178 		[Test]
BulletedList_BulletStyle_Render()179 		public void BulletedList_BulletStyle_Render ()
180 		{
181 			PokerBulletedList b = new PokerBulletedList ();
182 			AddListItems (b);
183 			Assert.AreEqual (b.Render (), "<ul>\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ul>", "Render1");
184 			b.BulletStyle = BulletStyle.Square;
185 			Assert.AreEqual (b.Render (), "<ul style=\"list-style-type:square;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ul>", "BulletStyle.Square");
186 			b.BulletStyle = BulletStyle.LowerRoman;
187 			Assert.AreEqual (b.Render (), "<ol style=\"list-style-type:lower-roman;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ol>", "BulletStyle.LowerRoman");
188 			b.BulletStyle = BulletStyle.Circle;
189 			Assert.AreEqual (b.Render (), "<ul style=\"list-style-type:circle;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ul>", "BulletStyle.Circle");
190 			b.BulletStyle = BulletStyle.Disc;
191 			Assert.AreEqual (b.Render (), "<ul style=\"list-style-type:disc;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ul>", "BulletStyle.Disc");
192 			b.BulletStyle = BulletStyle.LowerAlpha;
193 			Assert.AreEqual (b.Render (), "<ol style=\"list-style-type:lower-alpha;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ol>", "BulletStyle.LowerAlpha");
194 			b.BulletStyle = BulletStyle.Numbered;
195 			Assert.AreEqual (b.Render (), "<ol style=\"list-style-type:decimal;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ol>", "BulletStyle.Numbered");
196 			b.BulletStyle = BulletStyle.UpperAlpha;
197 			Assert.AreEqual (b.Render (), "<ol style=\"list-style-type:upper-alpha;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ol>", "BulletStyle.UpperAlpha");
198 			b.BulletStyle = BulletStyle.UpperRoman;
199 			Assert.AreEqual (b.Render (), "<ol style=\"list-style-type:upper-roman;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ol>", "BulletStyle.UpperRoman");
200 			b.BulletStyle = BulletStyle.NotSet;
201 			Assert.AreEqual (b.Render (), "<ul>\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ul>", "BulletStyle.NotSet");
202 			b.BulletStyle = BulletStyle.CustomImage;
203 			b.BulletImageUrl = "Images/edit.gif";
204 			Assert.AreEqual (b.Render (), "<ul style=\"list-style-image:url(Images/edit.gif);\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ul>", "BulletStyle.CustomImage");
205 		}
206 
207 		[Test]
BulletedList_HyperLinkDisplayMode_Render()208 		public void BulletedList_HyperLinkDisplayMode_Render ()
209 		{
210 			PokerBulletedList b = new PokerBulletedList ();
211 			ListItem item1 = new ListItem ("HyperLink1", "TextFile1.txt");
212 			ListItem item2 = new ListItem ("HyperLink2", "TextFile2.txt");
213 			b.Items.Add (item1);
214 			b.Items.Add (item2);
215 			b.DisplayMode = BulletedListDisplayMode.HyperLink;
216 			Assert.AreEqual (b.Render (), "<ul>\n\t<li><a href=\"TextFile1.txt\">HyperLink1</a></li><li><a href=\"TextFile2.txt\">HyperLink2</a></li>\n</ul>", "BulletedListDisplayMode.HyperLink");
217 		}
218 
219 		[Test]
BulletedList_ButtonLinkDisplayMode_Render()220 		public void BulletedList_ButtonLinkDisplayMode_Render ()
221 		{
222 			PokerBulletedList b = new PokerBulletedList ();
223 			AddListItems (b);
224 			b.DisplayMode = BulletedListDisplayMode.LinkButton;
225 			b.ID = "BulletedListTest";
226 			Page p = new Page ();
227 			p.Controls.Add (b);
228 			p.EnableEventValidation = false;
229 			string html = b.Render ();
230 			MonoTests.stand_alone.WebHarness.HtmlDiff.AssertAreEqual (b.Render (), "<ul id=\"BulletedListTest\">\n\t<li><a href=\"javascript:__doPostBack('BulletedListTest','0')\">Item1</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','1')\">Item2</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','2')\">Item3</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','3')\">Item4</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','4')\">Item5</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','5')\">Item6</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','6')\">Item7</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','7')\">Item8</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','8')\">Item9</a></li><li><a href=\"javascript:__doPostBack('BulletedListTest','9')\">Item10</a></li>\n</ul>", "BulletedListDisplayMode.LinkButton");
231 
232 		}
233 
234 
235 		[Test]
BulletedList_FirstBulletNumber_Render()236 		public void BulletedList_FirstBulletNumber_Render ()
237 		{
238 			PokerBulletedList b = new PokerBulletedList ();
239 			AddListItems (b);
240 			b.BulletStyle = BulletStyle.Numbered;
241 			b.FirstBulletNumber = 3;
242 			Assert.AreEqual (b.Render (), "<ol start=\"3\" style=\"list-style-type:decimal;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ol>", "FirstBulletNumber1");
243 			b.FirstBulletNumber = 6;
244 			Assert.AreEqual (b.Render (), "<ol start=\"6\" style=\"list-style-type:decimal;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ol>", "FirstBulletNumber2");
245 			b.FirstBulletNumber = -2;
246 			Assert.AreEqual (b.Render (), "<ol start=\"-2\" style=\"list-style-type:decimal;\">\n\t<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>\n</ol>", "FirstBulletNumber3");
247 
248 		}
249 
250 		[Test]
BulletedList_ViewState()251 		public void BulletedList_ViewState ()
252 		{
253 			PokerBulletedList b = new PokerBulletedList ();
254 			b.BulletImageUrl = "Images/edit.gif";
255 			Assert.AreEqual ("Images/edit.gif", b.BulletImageUrl, "ViewState1");
256 			b.BulletStyle = BulletStyle.Numbered;
257 			Assert.AreEqual (BulletStyle.Numbered, b.BulletStyle, "ViewState2");
258 			b.Target = "_search";
259 			Assert.AreEqual ("_search", b.Target, "ViewState3");
260 			b.DisplayMode = BulletedListDisplayMode.HyperLink;
261 			Assert.AreEqual (BulletedListDisplayMode.HyperLink, b.DisplayMode, "ViewState4");
262 			b.FirstBulletNumber = 5;
263 			Assert.AreEqual (5, b.FirstBulletNumber, "ViewState5");
264 			object state = b.SaveState ();
265 			PokerBulletedList copy = new PokerBulletedList ();
266 			copy.LoadState (state);
267 			Assert.AreEqual ("Images/edit.gif", b.BulletImageUrl, "ViewState6");
268 			Assert.AreEqual (BulletStyle.Numbered, b.BulletStyle, "ViewState7");
269 			Assert.AreEqual ("_search", b.Target, "ViewState8");
270 			Assert.AreEqual (BulletedListDisplayMode.HyperLink, b.DisplayMode, "ViewState9");
271 			Assert.AreEqual (5, b.FirstBulletNumber, "ViewState10");
272 		}
273 
274 		//Protected Methods
275 
276 		[Test]
BulletedList_RenderContents()277 		public void BulletedList_RenderContents ()
278 		{
279 			PokerBulletedList p = new PokerBulletedList ();
280 			StringWriter sw = new StringWriter ();
281 			HtmlTextWriter tw = new HtmlTextWriter (sw);
282 			AddListItems (p);
283 			p.DoRenderContents (tw);
284 			Assert.AreEqual (sw.ToString (), "<li>Item1</li><li>Item2</li><li>Item3</li><li>Item4</li><li>Item5</li><li>Item6</li><li>Item7</li><li>Item8</li><li>Item9</li><li>Item10</li>", "BulletedList_RenderContents");
285 		}
286 
287 		[Test]
BulletedList_RenderBulletText()288 		public void BulletedList_RenderBulletText ()
289 		{
290 			PokerBulletedList p = new PokerBulletedList ();
291 			StringWriter sw = new StringWriter ();
292 			HtmlTextWriter tw = new HtmlTextWriter (sw);
293 			AddListItems (p);
294 			p.DoRenderBulletText (p.Items[0], 0, tw);
295 			Assert.AreEqual (sw.ToString (), "Item1", "BulletedList_RenderBulletText1");
296 			p.DoRenderBulletText (p.Items[5], 5, tw);
297 			Assert.AreEqual (sw.ToString (), "Item1Item6", "BulletedList_RenderBulletText2");
298 		}
299 
300 		//Events
301 
302 		private bool clicked = false;
303 
BulletedListClickHandler(object sender, BulletedListEventArgs e)304 		private void BulletedListClickHandler (object sender, BulletedListEventArgs e)
305 		{
306 			clicked = true;
307 		}
308 
ResetEvents()309 		private void ResetEvents ()
310 		{
311 			clicked = false;
312 		}
313 
314 		[Test]
BulletedList_Events()315 		public void BulletedList_Events ()
316 		{
317 			PokerBulletedList pb = new PokerBulletedList ();
318 			AddListItems (pb);
319 			ResetEvents ();
320 			pb.Click += new BulletedListEventHandler (BulletedListClickHandler);
321 			Assert.AreEqual (false, clicked, "BeforeClick");
322 			pb.DoOnClick (new BulletedListEventArgs (0));
323 			Assert.AreEqual (true, clicked, "BeforeClick");
324 		}
325 
326 		//PostBack raise event
327 		[Test]
328 		[Category ("NunitWeb")]
BulletedList_PostBackEvent()329 		public void BulletedList_PostBackEvent ()
330 		{
331 			WebTest t = new WebTest ("NoEventValidation.aspx");
332 			t.Invoker = PageInvoker.CreateOnInit (new PageDelegate (_PostBackEvent));
333 			string html = t.Run ();
334 			if (html.IndexOf ("Test_Item") < 0)
335 				Assert.Fail ("BulletedList not created");
336 
337 			FormRequest fr = new FormRequest (t.Response, "form1");
338 			fr.Controls.Add ("__EVENTTARGET");
339 			fr.Controls.Add ("__EVENTARGUMENT");
340 			fr.Controls["__EVENTTARGET"].Value = "BL";
341 			fr.Controls["__EVENTARGUMENT"].Value = "0";
342 			t.Request = fr;
343 			html = t.Run ();
344 			if (t.UserData == null || (string) t.UserData != "list_Click Fired_0")
345 				Assert.Fail ("list_Click Not Fired");
346 		}
347 
348 		#region _PostBackEvent_helper
_PostBackEvent(Page p)349 		public static void _PostBackEvent (Page p)
350 		{
351 			BulletedList list = new BulletedList ();
352 			list.ID = "BL";
353 			list.DisplayMode = BulletedListDisplayMode.LinkButton;
354 			list.Items.Add (new ListItem ("Test_Item", "Test_Value", true));
355 			list.Click += new BulletedListEventHandler (list_Click);
356 			p.Controls.Add (list);
357 		}
358 
list_Click(object sender, BulletedListEventArgs e)359 		static void list_Click (object sender, BulletedListEventArgs e)
360 		{
361 			WebTest.CurrentTest.UserData = "list_Click Fired_" + e.Index.ToString();
362 		}
363 		#endregion
364 
365 		[Test]
366 		[ExpectedException (typeof (HttpException))]
VerifyMultiSelectTest()367 		public void VerifyMultiSelectTest ()
368 		{
369 			VerifyMultiSelectBulletedList list = new VerifyMultiSelectBulletedList ();
370 			list.VerifyMultiSelect ();
371 		}
372 
373 
374 		[TestFixtureTearDown]
TearDown()375 		public void TearDown ()
376 		{
377 			WebTest.Unload ();
378 		}
379 
380 		// Help class for DS creation
AddListItems(PokerBulletedList b)381 		private void AddListItems (PokerBulletedList b)
382 		{
383 			ListItem item1 = new ListItem ("Item1", "Item1");
384 			ListItem item2 = new ListItem ("Item2", "Item2");
385 			ListItem item3 = new ListItem ("Item3", "Item3");
386 			ListItem item4 = new ListItem ("Item4", "Item4");
387 			ListItem item5 = new ListItem ("Item5", "Item5");
388 			ListItem item6 = new ListItem ("Item6", "Item6");
389 			ListItem item7 = new ListItem ("Item7", "Item7");
390 			ListItem item8 = new ListItem ("Item8", "Item8");
391 			ListItem item9 = new ListItem ("Item9", "Item9");
392 			ListItem item10 = new ListItem ("Item10", "Item10");
393 			b.Items.Add (item1);
394 			b.Items.Add (item2);
395 			b.Items.Add (item3);
396 			b.Items.Add (item4);
397 			b.Items.Add (item5);
398 			b.Items.Add (item6);
399 			b.Items.Add (item7);
400 			b.Items.Add (item8);
401 			b.Items.Add (item9);
402 			b.Items.Add (item10);
403 		}
404 	}
405 }
406 
407