svn path=/trunk/mcs/; revision=73100
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / BulletedListTest.cs
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 #if NET_2_0
32 using NUnit.Framework;
33 using System;
34 using System.Collections;
35 using System.IO;
36 using System.Globalization;
37 using System.Web;
38 using System.Web.UI;
39 using System.Web.UI.WebControls;
40 using MonoTests.SystemWeb.Framework;
41 using MonoTests.stand_alone.WebHarness;
42
43
44 namespace MonoTests.System.Web.UI.WebControls
45 {
46         class PokerBulletedList : BulletedList
47         {
48                 public PokerBulletedList ()
49                 {
50                         TrackViewState ();
51                 }
52                 public object SaveState ()
53                 {
54                         return SaveViewState ();
55                 }
56                 public void LoadState (object o)
57                 {
58                         LoadViewState (o);
59                 }
60                 public StateBag StateBag
61                 {
62                         get { return base.ViewState; }
63                 }
64
65                 public string Render ()
66                 {
67                         StringWriter sw = new StringWriter ();
68                         HtmlTextWriter tw = new HtmlTextWriter (sw);
69                         tw.NewLine = "\n";
70                         Render (tw);
71                         return sw.ToString ();
72                 }
73
74                 public void DoRenderContents (HtmlTextWriter tw)
75                 {
76                         RenderContents (tw);
77                 }
78
79                 public void DoRenderBulletText (ListItem item, int index, HtmlTextWriter tw)
80                 {
81                         RenderBulletText (item, index, tw);
82                 }
83
84                 public void DoOnClick (BulletedListEventArgs e)
85                 {
86                         OnClick (e);
87                 }
88
89
90         }
91
92     class VerifyMultiSelectBulletedList : BulletedList
93     {
94         public new virtual void VerifyMultiSelect()
95         {
96             base.VerifyMultiSelect();
97         }
98     }
99
100         [TestFixture]
101         public class BulletedListTest
102         {
103                 [TestFixtureSetUp]
104                 public void SetUp ()
105                 {
106                         WebTest.CopyResource (GetType (), "NoEventValidation.aspx", "NoEventValidation.aspx");
107                 }
108
109                 [Test]
110                 public void BulletedList_DefaultProperties ()
111                 {
112
113                         PokerBulletedList b = new PokerBulletedList ();
114                         Assert.AreEqual (0, b.StateBag.Count, "ViewState.Count");
115                         Assert.AreEqual (string.Empty, b.BulletImageUrl, "BulletImageUrl");
116                         Assert.AreEqual (BulletStyle.NotSet, b.BulletStyle, "BulletStyle");
117                         EmptyControlCollection c = new EmptyControlCollection (b);
118                         EmptyControlCollection c2 = (EmptyControlCollection) b.Controls;
119                         Assert.AreEqual ("System.Web.UI.EmptyControlCollection", b.Controls.GetType ().ToString (), "Controls");
120                         Assert.AreEqual ("Text", b.DisplayMode.ToString (), "DisplayMode");
121                         Assert.AreEqual (1, b.FirstBulletNumber, "FirstBulletNumber");
122                         Assert.AreEqual (-1, b.SelectedIndex, "SelectedIndex");
123                         Assert.AreEqual (null, b.SelectedItem, "SelectedItem");
124                         Assert.AreEqual (string.Empty, b.Target, "Target");
125                 }
126
127                 [Test]
128                 public void BulletedList_DefaultPropertiesNotWorking ()
129                 {
130                         PokerBulletedList b = new PokerBulletedList ();
131                         Assert.AreEqual (string.Empty, b.SelectedValue, "SelectedValue"); // NotImplementedException on Mono
132                         Assert.AreEqual (string.Empty, b.Text, "Text");
133                 }
134
135                 [Test]
136                 public void BulletedList_AssignToDefaultProperties ()
137                 {
138                         PokerBulletedList b = new PokerBulletedList ();
139                         Assert.AreEqual (0, b.StateBag.Count, "ViewState.Count");
140                         b.BulletImageUrl = "Images/edit.gif";
141                         Assert.AreEqual ("Images/edit.gif", b.BulletImageUrl, "BulletImageUrl");
142                         b.BulletStyle = BulletStyle.Numbered;
143                         Assert.AreEqual (BulletStyle.Numbered, b.BulletStyle, "BulletStyle");
144                         b.BulletStyle = BulletStyle.LowerAlpha;
145                         Assert.AreEqual (BulletStyle.LowerAlpha, b.BulletStyle, "BulletStyle");
146                         b.BulletStyle = BulletStyle.CustomImage;
147                         Assert.AreEqual (BulletStyle.CustomImage, b.BulletStyle, "BulletStyle");
148                         b.BulletStyle = BulletStyle.Square;
149                         Assert.AreEqual (BulletStyle.Square, b.BulletStyle, "BulletStyle");
150                         b.DisplayMode = BulletedListDisplayMode.HyperLink;
151                         Assert.AreEqual (BulletedListDisplayMode.HyperLink, b.DisplayMode, "DisplayMode");
152                         b.FirstBulletNumber = 4;
153                         Assert.AreEqual (4, b.FirstBulletNumber, "FirstBulletNumber");
154                         b.Target = "_search";
155                         Assert.AreEqual ("_search", b.Target, "Target_search");
156                         b.Target = "_top";
157                         Assert.AreEqual ("_top", b.Target, "Target_top");
158                         b.Target = "_parent";
159                         Assert.AreEqual ("_parent", b.Target, "Target_parent");
160                         b.Target = "_blank";
161                         Assert.AreEqual ("_blank", b.Target, "Target_blank");
162                         b.Target = "_self";
163                         Assert.AreEqual ("_self", b.Target, "Target_self");
164
165                 }
166
167                 [Test]
168                 public void BulletedList_NullProperties ()
169                 {
170                         PokerBulletedList b = new PokerBulletedList ();
171                         Assert.AreEqual (0, b.StateBag.Count, "ViewState.Count");
172                         b.BulletImageUrl = null;
173                         Assert.AreEqual (string.Empty, b.BulletImageUrl, "BulletImageUrl");
174                         b.Target = null;
175                         Assert.AreEqual (string.Empty, b.Target, "Target");
176
177                 }
178
179                 [Test]
180                 public void BulletedList_BulletStyle_Render ()
181                 {
182                         PokerBulletedList b = new PokerBulletedList ();
183                         AddListItems (b);
184                         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");
185                         b.BulletStyle = BulletStyle.Square;
186                         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");
187                         b.BulletStyle = BulletStyle.LowerRoman;
188                         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");
189                         b.BulletStyle = BulletStyle.Circle;
190                         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");
191                         b.BulletStyle = BulletStyle.Disc;
192                         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");
193                         b.BulletStyle = BulletStyle.LowerAlpha;
194                         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");
195                         b.BulletStyle = BulletStyle.Numbered;
196                         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");
197                         b.BulletStyle = BulletStyle.UpperAlpha;
198                         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");
199                         b.BulletStyle = BulletStyle.UpperRoman;
200                         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");
201                         b.BulletStyle = BulletStyle.NotSet;
202                         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");
203                         b.BulletStyle = BulletStyle.CustomImage;
204                         b.BulletImageUrl = "Images/edit.gif";
205                         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");
206                 }
207
208                 [Test]
209                 public void BulletedList_HyperLinkDisplayMode_Render ()
210                 {
211                         PokerBulletedList b = new PokerBulletedList ();
212                         ListItem item1 = new ListItem ("HyperLink1", "TextFile1.txt");
213                         ListItem item2 = new ListItem ("HyperLink2", "TextFile2.txt");
214                         b.Items.Add (item1);
215                         b.Items.Add (item2);
216                         b.DisplayMode = BulletedListDisplayMode.HyperLink;
217                         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");                        
218                 }
219
220                 [Test]
221                 public void BulletedList_ButtonLinkDisplayMode_Render ()
222                 {
223                         PokerBulletedList b = new PokerBulletedList ();
224                         AddListItems (b);
225                         b.DisplayMode = BulletedListDisplayMode.LinkButton;
226                         b.ID = "BulletedListTest";
227                         Page p = new Page ();
228                         p.Controls.Add (b);
229                         p.EnableEventValidation = false;
230                         string html = b.Render ();
231                         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");
232
233                 }
234
235
236                 [Test]
237                 public void BulletedList_FirstBulletNumber_Render ()
238                 {
239                         PokerBulletedList b = new PokerBulletedList ();
240                         AddListItems (b);
241                         b.BulletStyle = BulletStyle.Numbered;
242                         b.FirstBulletNumber = 3;
243                         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");
244                         b.FirstBulletNumber = 6;
245                         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");
246                         b.FirstBulletNumber = -2;
247                         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");
248
249                 }
250
251                 [Test]
252                 public void BulletedList_ViewState ()
253                 {
254                         PokerBulletedList b = new PokerBulletedList ();
255                         b.BulletImageUrl = "Images/edit.gif";
256                         Assert.AreEqual ("Images/edit.gif", b.BulletImageUrl, "ViewState1");
257                         b.BulletStyle = BulletStyle.Numbered;
258                         Assert.AreEqual (BulletStyle.Numbered, b.BulletStyle, "ViewState2");
259                         b.Target = "_search";
260                         Assert.AreEqual ("_search", b.Target, "ViewState3");
261                         b.DisplayMode = BulletedListDisplayMode.HyperLink;
262                         Assert.AreEqual (BulletedListDisplayMode.HyperLink, b.DisplayMode, "ViewState4");
263                         b.FirstBulletNumber = 5;
264                         Assert.AreEqual (5, b.FirstBulletNumber, "ViewState5");
265                         object state = b.SaveState ();
266                         PokerBulletedList copy = new PokerBulletedList ();
267                         copy.LoadState (state);
268                         Assert.AreEqual ("Images/edit.gif", b.BulletImageUrl, "ViewState6");
269                         Assert.AreEqual (BulletStyle.Numbered, b.BulletStyle, "ViewState7");
270                         Assert.AreEqual ("_search", b.Target, "ViewState8");
271                         Assert.AreEqual (BulletedListDisplayMode.HyperLink, b.DisplayMode, "ViewState9");
272                         Assert.AreEqual (5, b.FirstBulletNumber, "ViewState10");
273                 }
274
275                 //Protected Methods
276
277                 [Test]
278                 public void BulletedList_RenderContents ()
279                 {
280                         PokerBulletedList p = new PokerBulletedList ();
281                         StringWriter sw = new StringWriter ();
282                         HtmlTextWriter tw = new HtmlTextWriter (sw);
283                         AddListItems (p);
284                         p.DoRenderContents (tw);
285                         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");
286                 }
287
288                 [Test]
289                 public void BulletedList_RenderBulletText ()
290                 {
291                         PokerBulletedList p = new PokerBulletedList ();
292                         StringWriter sw = new StringWriter ();
293                         HtmlTextWriter tw = new HtmlTextWriter (sw);
294                         AddListItems (p);
295                         p.DoRenderBulletText (p.Items[0], 0, tw);
296                         Assert.AreEqual (sw.ToString (), "Item1", "BulletedList_RenderBulletText1");
297                         p.DoRenderBulletText (p.Items[5], 5, tw);
298                         Assert.AreEqual (sw.ToString (), "Item1Item6", "BulletedList_RenderBulletText2");
299                 }
300
301                 //Events
302
303                 private bool clicked = false;
304
305                 private void BulletedListClickHandler (object sender, BulletedListEventArgs e)
306                 {
307                         clicked = true;
308                 }
309
310                 private void ResetEvents ()
311                 {
312                         clicked = false;
313                 }
314
315                 [Test]
316                 public void BulletedList_Events ()
317                 {
318                         PokerBulletedList pb = new PokerBulletedList ();
319                         AddListItems (pb);
320                         ResetEvents ();
321                         pb.Click += new BulletedListEventHandler (BulletedListClickHandler);
322                         Assert.AreEqual (false, clicked, "BeforeClick");
323                         pb.DoOnClick (new BulletedListEventArgs (0));
324                         Assert.AreEqual (true, clicked, "BeforeClick");
325                 }
326
327                 //PostBack raise event
328                 [Test]
329                 [Category ("NunitWeb")]
330                 public void BulletedList_PostBackEvent ()
331                 {
332                         WebTest t = new WebTest ("NoEventValidation.aspx");
333                         t.Invoker = PageInvoker.CreateOnInit (new PageDelegate (_PostBackEvent));
334                         string html = t.Run ();
335                         if (html.IndexOf ("Test_Item") < 0)
336                                 Assert.Fail ("BulletedList not created");
337
338                         FormRequest fr = new FormRequest (t.Response, "form1");
339                         fr.Controls.Add ("__EVENTTARGET");
340                         fr.Controls.Add ("__EVENTARGUMENT");
341                         fr.Controls["__EVENTTARGET"].Value = "BL";
342                         fr.Controls["__EVENTARGUMENT"].Value = "0";
343                         t.Request = fr;
344                         html = t.Run ();
345                         if (t.UserData == null || (string) t.UserData != "list_Click Fired_0")
346                                 Assert.Fail ("list_Click Not Fired");
347                 }
348
349                 #region _PostBackEvent_helper
350                 public static void _PostBackEvent (Page p)
351                 {
352                         BulletedList list = new BulletedList ();
353                         list.ID = "BL";
354                         list.DisplayMode = BulletedListDisplayMode.LinkButton;
355                         list.Items.Add (new ListItem ("Test_Item", "Test_Value", true));
356                         list.Click += new BulletedListEventHandler (list_Click);
357                         p.Controls.Add (list);
358                 }
359
360                 static void list_Click (object sender, BulletedListEventArgs e)
361                 {
362                         WebTest.CurrentTest.UserData = "list_Click Fired_" + e.Index.ToString();
363                 }
364                 #endregion
365
366                 [Test]
367                 [ExpectedException (typeof (HttpException))]
368                 public void VerifyMultiSelectTest ()
369                 {
370                         VerifyMultiSelectBulletedList list = new VerifyMultiSelectBulletedList ();
371                         list.VerifyMultiSelect ();
372                 }
373        
374
375                 [TestFixtureTearDown]
376                 public void TearDown ()
377                 {
378                         WebTest.Unload ();
379                 }
380
381                 // Help class for DS creation
382                 private void AddListItems (PokerBulletedList b)
383                 {
384                         ListItem item1 = new ListItem ("Item1", "Item1");
385                         ListItem item2 = new ListItem ("Item2", "Item2");
386                         ListItem item3 = new ListItem ("Item3", "Item3");
387                         ListItem item4 = new ListItem ("Item4", "Item4");
388                         ListItem item5 = new ListItem ("Item5", "Item5");
389                         ListItem item6 = new ListItem ("Item6", "Item6");
390                         ListItem item7 = new ListItem ("Item7", "Item7");
391                         ListItem item8 = new ListItem ("Item8", "Item8");
392                         ListItem item9 = new ListItem ("Item9", "Item9");
393                         ListItem item10 = new ListItem ("Item10", "Item10");
394                         b.Items.Add (item1);
395                         b.Items.Add (item2);
396                         b.Items.Add (item3);
397                         b.Items.Add (item4);
398                         b.Items.Add (item5);
399                         b.Items.Add (item6);
400                         b.Items.Add (item7);
401                         b.Items.Add (item8);
402                         b.Items.Add (item9);
403                         b.Items.Add (item10);
404                 }
405         }
406 }
407
408 #endif