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