3 // - Unit tests for System.Web.UI.WebControls.DataListItem
6 // Sebastien Pouliot <sebastien@ximian.com>
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using System.Collections;
32 using System.ComponentModel;
36 using System.Web.UI.WebControls;
38 using NUnit.Framework;
40 namespace MonoTests.System.Web.UI.WebControls {
42 public class TestDataListItem : DataListItem {
44 public TestDataListItem (int index, ListItemType type)
50 public string Render (bool extractRows, bool tableLayout)
52 StringWriter sw = new StringWriter ();
54 HtmlTextWriter writer = new HtmlTextWriter (sw);
55 base.RenderItem (writer, extractRows, tableLayout);
56 return writer.InnerWriter.ToString ();
59 public void SetType (ListItemType type)
61 base.SetItemType (type);
66 public class DataListItemTest {
68 private void BaseTests (TestDataListItem dli)
70 Assert.IsNull (dli.DataItem, "DataItem");
71 Assert.AreEqual (String.Empty, dli.Render (true, true), "Render-Empty-T-T");
72 Assert.AreEqual (String.Empty, dli.Render (true, false), "Render-Empty-T-F");
73 Assert.AreEqual (String.Empty, dli.Render (false, true), "Render-Empty-F-T");
74 Assert.AreEqual ("<span></span>", dli.Render (false, false), "Render-Empty-F-F");
76 dli.DataItem = (object)Int32.MaxValue;
77 Assert.AreEqual (Int32.MaxValue, dli.DataItem, "DataItem-Int32");
78 Assert.AreEqual (String.Empty, dli.Render (true, true), "Render-Int32-T-T");
79 Assert.AreEqual (String.Empty, dli.Render (true, false), "Render-Int32-T-F");
80 Assert.AreEqual (String.Empty, dli.Render (false, true), "Render-Int32-F-T");
81 Assert.AreEqual ("<span></span>", dli.Render (false, false), "Render-Int32-F-F");
83 dli.DataItem = (object)"mono";
84 Assert.AreEqual ("mono", dli.DataItem, "DataItem-String");
85 Assert.AreEqual (String.Empty, dli.Render (true, true), "Render-String-T-T");
86 Assert.AreEqual (String.Empty, dli.Render (true, false), "Render-String-T-F");
87 Assert.AreEqual (String.Empty, dli.Render (false, true), "Render-String-F-T");
88 Assert.AreEqual ("<span></span>", dli.Render (false, false), "Render-String-F-F");
91 private void DataItemContainer (TestDataListItem dli, int index)
93 IDataItemContainer dic = (dli as IDataItemContainer);
94 Assert.IsNull (dic.DataItem, "IDataItemContainer-DataItem");
95 Assert.AreEqual (index, dic.DataItemIndex, "IDataItemContainer-DataItemIndex");
96 Assert.AreEqual (index, dic.DisplayIndex, "IDataItemContainer-DisplayIndex");
100 public void AlternatingItem ()
102 TestDataListItem dli = new TestDataListItem (0, ListItemType.AlternatingItem);
103 Assert.AreEqual (0, dli.ItemIndex, "ItemIndex");
104 Assert.AreEqual (ListItemType.AlternatingItem, dli.ItemType, "ItemType");
106 DataItemContainer (dli, 0);
109 dli.SetType (ListItemType.EditItem);
110 Assert.AreEqual (ListItemType.EditItem, dli.ItemType, "SetItemType");
114 public void EditItem ()
116 TestDataListItem dli = new TestDataListItem (Int32.MaxValue, ListItemType.EditItem);
117 Assert.AreEqual (Int32.MaxValue, dli.ItemIndex, "ItemIndex");
118 Assert.AreEqual (ListItemType.EditItem, dli.ItemType, "ItemType");
120 DataItemContainer (dli, Int32.MaxValue);
123 dli.SetType (ListItemType.Footer);
124 Assert.AreEqual (ListItemType.Footer, dli.ItemType, "SetItemType");
128 public void Footer ()
130 TestDataListItem dli = new TestDataListItem (Int32.MinValue, ListItemType.Footer);
131 Assert.AreEqual (Int32.MinValue, dli.ItemIndex, "ItemIndex");
132 Assert.AreEqual (ListItemType.Footer, dli.ItemType, "ItemType");
134 DataItemContainer (dli, Int32.MinValue);
137 dli.SetType (ListItemType.Header);
138 Assert.AreEqual (ListItemType.Header, dli.ItemType, "SetItemType");
142 public void Header ()
144 TestDataListItem dli = new TestDataListItem (0, ListItemType.Header);
145 Assert.AreEqual (0, dli.ItemIndex, "ItemIndex");
146 Assert.AreEqual (ListItemType.Header, dli.ItemType, "ItemType");
148 DataItemContainer (dli, 0);
151 dli.SetType (ListItemType.Item);
152 Assert.AreEqual (ListItemType.Item, dli.ItemType, "SetItemType");
158 TestDataListItem dli = new TestDataListItem (0, ListItemType.Item);
159 Assert.AreEqual (0, dli.ItemIndex, "ItemIndex");
160 Assert.AreEqual (ListItemType.Item, dli.ItemType, "ItemType");
162 DataItemContainer (dli, 0);
165 dli.SetType (ListItemType.Pager);
166 Assert.AreEqual (ListItemType.Pager, dli.ItemType, "SetItemType");
172 TestDataListItem dli = new TestDataListItem (0, ListItemType.Pager);
173 Assert.AreEqual (0, dli.ItemIndex, "ItemIndex");
174 Assert.AreEqual (ListItemType.Pager, dli.ItemType, "ItemType");
176 DataItemContainer (dli, 0);
179 dli.SetType (ListItemType.SelectedItem);
180 Assert.AreEqual (ListItemType.SelectedItem, dli.ItemType, "SetItemType");
184 public void SelectedItem ()
186 TestDataListItem dli = new TestDataListItem (1, ListItemType.SelectedItem);
187 Assert.AreEqual (1, dli.ItemIndex, "ItemIndex");
188 Assert.AreEqual (ListItemType.SelectedItem, dli.ItemType, "ItemType");
190 DataItemContainer (dli, 1);
193 dli.SetType (ListItemType.Separator);
194 Assert.AreEqual (ListItemType.Separator, dli.ItemType, "SetItemType");
198 public void Separator ()
200 TestDataListItem dli = new TestDataListItem (-1, ListItemType.Separator);
201 Assert.AreEqual (-1, dli.ItemIndex, "ItemIndex");
202 Assert.AreEqual (ListItemType.Separator, dli.ItemType, "ItemType");
204 DataItemContainer (dli, -1);
207 dli.SetType (ListItemType.AlternatingItem);
208 Assert.AreEqual (ListItemType.AlternatingItem, dli.ItemType, "SetItemType");
212 public void Bad_ListItemType ()
214 TestDataListItem dli = new TestDataListItem (0, (ListItemType)Int32.MinValue);
215 Assert.AreEqual (0, dli.ItemIndex, "ItemIndex");
216 Assert.AreEqual ((ListItemType)Int32.MinValue, dli.ItemType, "ItemType");
218 DataItemContainer (dli, 0);
222 private Table GetTable (string s)
224 LiteralControl lc = new LiteralControl (s);
225 TableCell td = new TableCell ();
226 td.Controls.Add (lc);
227 TableRow tr = new TableRow ();
229 Table t = new Table ();
234 private string Adjust (string s)
236 // right now Mono doesn't generate the exact same indentation/lines as MS implementation
237 // and different fx versions have different casing for enums
238 return s.Replace ("\n", "").Replace ("\t", "").ToLower ();
242 public void Controls_Table ()
244 string origHtml1 = "<tr>\n\t<td>mono</td>\n</tr>";
245 string origHtml2 = "<tr>\n\t<td>mono</td>\n</tr>";
246 string origHtml3 = "<table>\n\t<tr>\n\t\t<td>mono</td>\n\t</tr>\n</table>";
247 string origHtml4 = "<span><table>\n\t<tr>\n\t\t<td>mono</td>\n\t</tr>\n</table></span>";
248 TestDataListItem dli = new TestDataListItem (0, ListItemType.Item);
249 dli.Controls.Add (GetTable ("mono"));
251 string renderedHtml = dli.Render (true, true);
252 Assert.AreEqual (origHtml1, renderedHtml, "Render-Empty-T-T");
254 renderedHtml = dli.Render (true, false);
255 Assert.AreEqual (origHtml2, renderedHtml, "Render-Empty-T-F");
257 renderedHtml = dli.Render (false, true);
258 Assert.AreEqual (Adjust (origHtml3), Adjust (renderedHtml), "Render-Empty-F-T");
260 renderedHtml = dli.Render (false, false);
261 Assert.AreEqual (Adjust (origHtml4), Adjust (renderedHtml), "Render-Empty-F-F");
265 public void Controls_Table_Dual ()
267 string origHtml1 = "<tr>\n\t<td>mono</td>\n</tr>";
268 string origHtml2 = "<tr>\n\t<td>mono</td>\n</tr>";
269 string origHtml3 = "<table>\n\t<tr>\n\t\t<td>mono</td>\n\t</tr>\n</table><table>\n\t<tr>\n\t\t<td>monkey</td>\n\t</tr>\n</table>";
270 string origHtml4 = "<span><table>\n\t<tr>\n\t\t<td>mono</td>\n\t</tr>\n</table><table>\n\t<tr>\n\t\t<td>monkey</td>\n\t</tr>\n</table></span>";
271 TestDataListItem dli = new TestDataListItem (0, ListItemType.Item);
272 dli.Controls.Add (GetTable ("mono"));
273 dli.Controls.Add (GetTable ("monkey"));
275 // the second table is ignored if extractRows is true
276 string renderedHtml = dli.Render (true, true);
277 Assert.AreEqual (origHtml1, renderedHtml, "Render-Empty-T-T");
279 renderedHtml = dli.Render (true, false);
280 Assert.AreEqual (origHtml2, renderedHtml, "Render-Empty-T-F");
282 // but not if extractRows is false
283 renderedHtml = dli.Render (false, true);
284 Assert.AreEqual (Adjust (origHtml3), Adjust (renderedHtml), "Render-Empty-F-T");
286 renderedHtml = dli.Render (false, false);
287 Assert.AreEqual (Adjust (origHtml4), Adjust (renderedHtml), "Render-Empty-F-F");
291 public void Controls_LiteralControl ()
293 TestDataListItem dli = new TestDataListItem (0, ListItemType.Item);
294 LiteralControl lc = new LiteralControl ("mono");
295 dli.Controls.Add (lc);
297 // there's no table here (but there are controls), so calling Render with true for
298 // extractRows cause a NullReferenceException on MS implementation
299 //Assert.AreEqual ("<tr>\n\t<td></td>\n<\tr>", dli.Render (true, true), "Render-Empty-T-T");
300 //Assert.AreEqual ("<tr>\n\t<td></td>\n<\tr>", dli.Render (true, false), "Render-Empty-T-F");
301 Assert.AreEqual ("mono", dli.Render (false, true), "Render-Empty-F-T");
302 Assert.AreEqual ("<span>mono</span>", dli.Render (false, false), "Render-Empty-F-F");
305 public void SupportsDisabledAttribute ()
307 var ver40 = new Version (4, 0);
308 var ver35 = new Version (3, 5);
309 var p = new TestDataListItem (0, ListItemType.Item);
310 Assert.AreEqual (ver40, p.RenderingCompatibility, "#A1-1");
311 Assert.IsFalse (p.SupportsDisabledAttribute, "#A1-2");
313 p.RenderingCompatibility = new Version (3, 5);
314 Assert.AreEqual (ver35, p.RenderingCompatibility, "#A2-1");
315 Assert.IsTrue (p.SupportsDisabledAttribute, "#A2-2");