1 // 2 // TableRowTest.cs 3 // - Unit tests for System.Web.UI.WebControls.TableRow 4 // 5 // Author: 6 // Sebastien Pouliot <sebastien@ximian.com> 7 // 8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com) 9 // 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: 17 // 18 // The above copyright notice and this permission notice shall be 19 // included in all copies or substantial portions of the Software. 20 // 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. 28 // 29 30 using System; 31 using System.Drawing; 32 using System.IO; 33 using System.Web; 34 using System.Web.UI; 35 using System.Web.UI.WebControls; 36 37 using NUnit.Framework; 38 39 namespace MonoTests.System.Web.UI.WebControls { 40 41 public interface ITableRowTest { 42 43 // testing 44 string Tag { get; } 45 StateBag StateBag { get; } Render()46 string Render (); GetStyle()47 Style GetStyle (); 48 49 // TableRow 50 AttributeCollection Attributes { get; } 51 Color BackColor { get; set; } 52 ControlCollection Controls { get; } 53 TableCellCollection Cells { get; } 54 Style ControlStyle { get; } 55 HorizontalAlign HorizontalAlign { get; set; } 56 VerticalAlign VerticalAlign { get; set; } 57 TableRowSection TableSection { get; set; } 58 } 59 60 public class TestTableRow : TableRow, ITableRowTest { 61 62 public string Tag { 63 get { return base.TagName; } 64 } 65 66 public StateBag StateBag { 67 get { return base.ViewState; } 68 } 69 Render()70 public string Render () 71 { 72 StringWriter sw = new StringWriter (); 73 sw.NewLine = "\n"; 74 HtmlTextWriter writer = new HtmlTextWriter (sw); 75 base.Render (writer); 76 return writer.InnerWriter.ToString (); 77 } 78 GetStyle()79 public Style GetStyle () 80 { 81 return base.CreateControlStyle (); 82 } 83 } 84 85 [TestFixture] 86 public class TableRowTest { 87 GetWriter()88 private HtmlTextWriter GetWriter () 89 { 90 StringWriter sw = new StringWriter (); 91 sw.NewLine = "\n"; 92 return new HtmlTextWriter (sw); 93 } 94 GetNewTableRow()95 public virtual TableRow GetNewTableRow () 96 { 97 return new TableRow (); 98 } 99 GetNewTestTableRow()100 public virtual ITableRowTest GetNewTestTableRow () 101 { 102 return new TestTableRow (); 103 } 104 105 [Test] DefaultProperties()106 public void DefaultProperties () 107 { 108 ITableRowTest tr = GetNewTestTableRow (); 109 Assert.AreEqual (0, tr.Attributes.Count, "Attributes.Count"); 110 Assert.AreEqual (0, tr.StateBag.Count, "ViewState.Count"); 111 112 Assert.AreEqual (0, tr.Cells.Count, "Cells.Count"); 113 Assert.AreEqual (HorizontalAlign.NotSet, tr.HorizontalAlign, "HorizontalAlign"); 114 Assert.AreEqual (VerticalAlign.NotSet, tr.VerticalAlign, "VerticalAlign"); 115 Assert.AreEqual (TableRowSection.TableBody, tr.TableSection, "TableSection"); 116 Assert.AreEqual ("tr", tr.Tag, "TagName"); 117 Assert.AreEqual (0, tr.Attributes.Count, "Attributes.Count-2"); 118 Assert.AreEqual (0, tr.StateBag.Count, "ViewState.Count-2"); 119 } 120 121 [Test] NullProperties()122 public void NullProperties () 123 { 124 ITableRowTest tr = GetNewTestTableRow (); 125 tr.HorizontalAlign = HorizontalAlign.NotSet; 126 Assert.AreEqual (HorizontalAlign.NotSet, tr.HorizontalAlign, "HorizontalAlign"); 127 tr.VerticalAlign = VerticalAlign.NotSet; 128 Assert.AreEqual (VerticalAlign.NotSet, tr.VerticalAlign, "VerticalAlign"); 129 tr.TableSection = TableRowSection.TableBody; 130 Assert.AreEqual (TableRowSection.TableBody, tr.TableSection, "TableSection"); 131 Assert.AreEqual (3, tr.StateBag.Count, "ViewState.Count-1"); 132 Assert.AreEqual (0, tr.Attributes.Count, "Attributes.Count"); 133 } 134 135 [Test] CleanProperties()136 public void CleanProperties () 137 { 138 ITableRowTest tr = GetNewTestTableRow (); 139 tr.HorizontalAlign = HorizontalAlign.Justify; 140 Assert.AreEqual (HorizontalAlign.Justify, tr.HorizontalAlign, "HorizontalAlign"); 141 tr.VerticalAlign = VerticalAlign.Bottom; 142 Assert.AreEqual (VerticalAlign.Bottom, tr.VerticalAlign, "VerticalAlign"); 143 Assert.AreEqual (0, tr.Attributes.Count, "Attributes.Count"); 144 Assert.AreEqual (2, tr.StateBag.Count, "ViewState.Count"); 145 146 tr.HorizontalAlign = HorizontalAlign.NotSet; 147 Assert.AreEqual (HorizontalAlign.NotSet, tr.HorizontalAlign, "HorizontalAlign"); 148 tr.VerticalAlign = VerticalAlign.NotSet; 149 Assert.AreEqual (VerticalAlign.NotSet, tr.VerticalAlign, "VerticalAlign"); 150 tr.TableSection = TableRowSection.TableFooter; 151 Assert.AreEqual (TableRowSection.TableFooter, tr.TableSection, "TableFooter"); 152 tr.TableSection = TableRowSection.TableHeader; 153 Assert.AreEqual (TableRowSection.TableHeader, tr.TableSection, "TableHeader"); 154 tr.TableSection = TableRowSection.TableBody; 155 Assert.AreEqual (TableRowSection.TableBody, tr.TableSection, "TableBody"); 156 Assert.AreEqual (3, tr.StateBag.Count, "ViewState.Count-1"); 157 Assert.AreEqual (0, tr.Attributes.Count, "Attributes.Count"); 158 } 159 160 [Test] 161 // LAMESPEC: undocumented exception but similar to Image 162 [ExpectedException (typeof (ArgumentOutOfRangeException))] HorizontalAlign_Invalid()163 public void HorizontalAlign_Invalid () 164 { 165 TableRow tr = GetNewTableRow (); 166 tr.HorizontalAlign = (HorizontalAlign)Int32.MinValue; 167 } 168 169 [Test] 170 // LAMESPEC: undocumented exception but similar to Image 171 [ExpectedException (typeof (ArgumentOutOfRangeException))] VerticalAlign_Invalid()172 public void VerticalAlign_Invalid () 173 { 174 TableRow tr = GetNewTableRow (); 175 tr.VerticalAlign = (VerticalAlign)Int32.MinValue; 176 } 177 [Test] 178 [ExpectedException (typeof (ArgumentOutOfRangeException))] TableSection_Invalid()179 public void TableSection_Invalid () 180 { 181 TableRow tr = GetNewTableRow (); 182 tr.TableSection = (TableRowSection)Int32.MinValue; 183 } 184 [Test] Render()185 public void Render () 186 { 187 ITableRowTest tr = GetNewTestTableRow (); 188 string s = tr.Render (); 189 Assert.AreEqual ("<tr>\n\n</tr>", s, "empty/default"); 190 191 // case varies with fx versions 192 tr.HorizontalAlign = HorizontalAlign.Left; 193 s = tr.Render (); 194 Assert.IsTrue ((s.ToLower ().IndexOf (" align=\"left\"") > 0), "HorizontalAlign.Left"); 195 tr.HorizontalAlign = HorizontalAlign.Center; 196 s = tr.Render (); 197 Assert.IsTrue ((s.ToLower ().IndexOf (" align=\"center\"") > 0), "HorizontalAlign.Center"); 198 tr.HorizontalAlign = HorizontalAlign.Right; 199 s = tr.Render (); 200 Assert.IsTrue ((s.ToLower ().IndexOf (" align=\"right\"") > 0), "HorizontalAlign.Justify"); 201 tr.HorizontalAlign = HorizontalAlign.Justify; 202 s = tr.Render (); 203 Assert.IsTrue ((s.ToLower ().IndexOf (" align=\"justify\"") > 0), "HorizontalAlign.Justify"); 204 tr.HorizontalAlign = HorizontalAlign.NotSet; 205 206 tr.VerticalAlign = VerticalAlign.Top; 207 s = tr.Render (); 208 Assert.IsTrue ((s.ToLower ().IndexOf (" valign=\"top\"") > 0), "VerticalAlign.Top"); 209 tr.VerticalAlign = VerticalAlign.Middle; 210 s = tr.Render (); 211 Assert.IsTrue ((s.ToLower ().IndexOf (" valign=\"middle\"") > 0), "VerticalAlign.Middle"); 212 tr.VerticalAlign = VerticalAlign.Bottom; 213 s = tr.Render (); 214 Assert.IsTrue ((s.ToLower ().IndexOf (" valign=\"bottom\"") > 0), "VerticalAlign.Bottom"); 215 tr.VerticalAlign = VerticalAlign.NotSet; 216 // TableSection has no influence over the "row" rendering 217 tr.TableSection = TableRowSection.TableFooter; 218 s = tr.Render (); 219 Assert.AreEqual ("<tr>\n\n</tr>", s, "TableRowSection.TableFooter"); 220 tr.TableSection = TableRowSection.TableHeader; 221 s = tr.Render (); 222 Assert.AreEqual ("<tr>\n\n</tr>", s, "TableRowSection.TableHeader"); 223 tr.TableSection = TableRowSection.TableBody; 224 s = tr.Render (); 225 Assert.AreEqual ("<tr>\n\n</tr>", s, "TableRowSection.TableBody"); 226 } 227 228 [Test] Render_Style()229 public void Render_Style () 230 { 231 ITableRowTest tr = GetNewTestTableRow (); 232 tr.BackColor = Color.Aqua; 233 string s = tr.Render (); 234 Assert.AreEqual ("<tr style=\"background-color:Aqua;\">\n\n</tr>", s, "direct"); 235 236 TableItemStyle tis = new TableItemStyle (); 237 tis.BackColor = Color.Red; 238 tr.ControlStyle.CopyFrom (tis); 239 s = tr.Render (); 240 Assert.AreEqual ("<tr style=\"background-color:Red;\">\n\n</tr>", s, "CopyFrom"); 241 } 242 243 [Test] CreateControlStyle()244 public void CreateControlStyle () 245 { 246 ITableRowTest tr = GetNewTestTableRow (); 247 tr.HorizontalAlign = HorizontalAlign.Left; 248 tr.VerticalAlign = VerticalAlign.Bottom; 249 250 TableItemStyle tis = (TableItemStyle)tr.GetStyle (); 251 // is it live ? 252 tis.HorizontalAlign = HorizontalAlign.Right; 253 Assert.AreEqual (HorizontalAlign.Right, tr.HorizontalAlign, "HorizontalAlign-2"); 254 tis.VerticalAlign = VerticalAlign.Top; 255 Assert.AreEqual (VerticalAlign.Top, tr.VerticalAlign, "VerticalAlign-2"); 256 } 257 Adjust(string s)258 private string Adjust (string s) 259 { 260 // right now Mono doesn't generate the exact same indentation/lines as MS implementation 261 // and different fx versions have different casing for enums 262 return s.Replace ("\n", "").Replace ("\t", "").ToLower (); 263 } 264 265 [Test] Cells()266 public void Cells () 267 { 268 ITableRowTest tr = GetNewTestTableRow (); 269 Assert.AreEqual (0, tr.Cells.Count, "0"); 270 TableCell td = new TableCell (); 271 272 tr.Cells.Add (td); 273 Assert.AreEqual (1, tr.Cells.Count, "c1"); 274 Assert.AreEqual (1, tr.Controls.Count, "k1"); 275 string s = tr.Render (); 276 Assert.AreEqual (Adjust ("<tr>\n\t<td></td>\n</tr>"), Adjust (s), "td-1"); 277 278 // change instance properties 279 td.RowSpan = 1; 280 s = tr.Render (); 281 Assert.AreEqual (Adjust ("<tr>\n\t<td rowspan=\"1\"></td>\n</tr>"), Adjust (s), "td-1r"); 282 283 // add it again (same instance) 284 tr.Cells.Add (td); 285 Assert.AreEqual (1, tr.Cells.Count, "c1bis"); 286 Assert.AreEqual (1, tr.Controls.Count, "k1bis"); 287 s = tr.Render (); 288 Assert.AreEqual (Adjust ("<tr>\n\t<td rowspan=\"1\"></td>\n</tr>"), Adjust (s), "tr-1bis"); 289 290 td = new TableCell (); 291 td.VerticalAlign = VerticalAlign.Top; 292 tr.Cells.Add (td); 293 Assert.AreEqual (2, tr.Cells.Count, "c2"); 294 Assert.AreEqual (2, tr.Controls.Count, "k2"); 295 s = tr.Render (); 296 Assert.AreEqual (Adjust ("<tr>\n\t<td rowspan=\"1\"></td><td valign=\"top\"></td>\n</tr>"), Adjust (s), "tr-2"); 297 298 td = new TableCell (); 299 td.HorizontalAlign = HorizontalAlign.Center; 300 tr.Cells.Add (td); 301 Assert.AreEqual (3, tr.Cells.Count, "c3"); 302 Assert.AreEqual (3, tr.Controls.Count, "k3"); 303 s = tr.Render (); 304 Assert.AreEqual (Adjust ("<tr>\n\t<td rowspan=\"1\"></td><td valign=\"top\"></td><td align=\"center\"></td>\n</tr>"), Adjust (s), "tr-3"); 305 306 tr.HorizontalAlign = HorizontalAlign.Right; 307 s = tr.Render (); 308 Assert.AreEqual (Adjust ("<tr align=\"right\">\n\t<td rowspan=\"1\"></td><td valign=\"top\"></td><td align=\"center\"></td>\n</tr>"), Adjust (s), "tr-3a"); 309 } 310 311 [Test] 312 [ExpectedException (typeof (NullReferenceException))] ControlsAdd_Null()313 public void ControlsAdd_Null () 314 { 315 GetNewTableRow ().Controls.Add (null); 316 } 317 318 [Test] 319 [ExpectedException (typeof (ArgumentException))] ControlsAdd_LiteralControl()320 public void ControlsAdd_LiteralControl () 321 { 322 GetNewTableRow ().Controls.Add (new LiteralControl ("mono")); 323 } 324 325 [Test] ControlsAdd_TableCell()326 public void ControlsAdd_TableCell () 327 { 328 TableRow tr = GetNewTableRow (); 329 tr.Controls.Add (new TableCell ()); 330 Assert.AreEqual (1, tr.Controls.Count, "Controls"); 331 Assert.AreEqual (1, tr.Cells.Count, "Cells"); 332 } 333 334 [Test] ControlsAdd_TestTableRow()335 public void ControlsAdd_TestTableRow () 336 { 337 TableRow tr = GetNewTableRow (); 338 tr.Controls.Add (new TestTableCell ()); 339 Assert.AreEqual (1, tr.Controls.Count, "Controls"); 340 Assert.AreEqual (1, tr.Cells.Count, "Cells"); 341 } 342 343 [Test] 344 [ExpectedException (typeof (NullReferenceException))] ControlsAddAt_Null()345 public void ControlsAddAt_Null () 346 { 347 GetNewTableRow ().Controls.AddAt (0, null); 348 } 349 350 [Test] 351 [ExpectedException (typeof (ArgumentException))] 352 // note: for Table it's ArgumentOutOfRangeException ControlsAddAt_Negative()353 public void ControlsAddAt_Negative () 354 { 355 GetNewTableRow ().Controls.AddAt (Int32.MinValue, new TableRow ()); 356 } 357 358 [Test] 359 [ExpectedException (typeof (ArgumentException))] ControlsAddAt_LiteralControl()360 public void ControlsAddAt_LiteralControl () 361 { 362 GetNewTableRow ().Controls.AddAt (0, new LiteralControl ("mono")); 363 } 364 365 [Test] ControlsAddAt_TableRow()366 public void ControlsAddAt_TableRow () 367 { 368 TableRow tr = GetNewTableRow (); 369 tr.Controls.AddAt (0, new TableCell ()); 370 Assert.AreEqual (1, tr.Controls.Count, "Controls"); 371 Assert.AreEqual (1, tr.Cells.Count, "Cells"); 372 } 373 374 [Test] ControlsAddAt_TestTableRow()375 public void ControlsAddAt_TestTableRow () 376 { 377 TableRow tr = GetNewTableRow (); 378 tr.Controls.AddAt (0, new TestTableCell ()); 379 Assert.AreEqual (1, tr.Controls.Count, "Controls"); 380 Assert.AreEqual (1, tr.Cells.Count, "Cells"); 381 } 382 383 [Test] 384 [ExpectedException (typeof (NullReferenceException))] RenderBeginTag_Null()385 public void RenderBeginTag_Null () 386 { 387 TableRow tr = GetNewTableRow (); 388 tr.RenderBeginTag (null); 389 } 390 391 [Test] RenderBeginTag_Empty()392 public void RenderBeginTag_Empty () 393 { 394 HtmlTextWriter writer = GetWriter (); 395 TableRow tr = GetNewTableRow (); 396 tr.RenderBeginTag (writer); 397 string s = writer.InnerWriter.ToString (); 398 Assert.AreEqual ("<tr>\n", s, "empty"); 399 } 400 401 [Test] RenderBeginTag_HorizontalAlign()402 public void RenderBeginTag_HorizontalAlign () 403 { 404 HtmlTextWriter writer = GetWriter (); 405 TableRow tr = GetNewTableRow (); 406 tr.HorizontalAlign = HorizontalAlign.Center; 407 tr.RenderBeginTag (writer); 408 string s = writer.InnerWriter.ToString (); 409 Assert.IsTrue (s.ToLower ().StartsWith ("<tr align=\"center\">"), "HorizontalAlign"); 410 } 411 412 [Test] RenderBeginTag_Cells()413 public void RenderBeginTag_Cells () 414 { 415 HtmlTextWriter writer = GetWriter (); 416 TableRow tr = GetNewTableRow (); 417 tr.Cells.Add (new TableCell ()); 418 tr.RenderBeginTag (writer); 419 string s = writer.InnerWriter.ToString (); 420 Assert.AreEqual ("<tr>\n", s, "td"); 421 } 422 } 423 } 424