1 // 2 // DynamicControlTest.cs 3 // 4 // Authors: 5 // Marek Habersack <mhabersack@novell.com> 6 // 7 // Copyright (C) 2009 Novell Inc. http://novell.com 8 // 9 10 // 11 // Permission is hereby granted, free of charge, to any person obtaining 12 // a copy of this software and associated documentation files (the 13 // "Software"), to deal in the Software without restriction, including 14 // without limitation the rights to use, copy, modify, merge, publish, 15 // distribute, sublicense, and/or sell copies of the Software, and to 16 // permit persons to whom the Software is furnished to do so, subject to 17 // the following conditions: 18 // 19 // The above copyright notice and this permission notice shall be 20 // included in all copies or substantial portions of the Software. 21 // 22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 29 // 30 using System; 31 using System.Collections; 32 using System.Collections.Generic; 33 using System.Collections.ObjectModel; 34 using System.Collections.Specialized; 35 using System.ComponentModel.DataAnnotations; 36 using System.Data.SqlClient; 37 using System.Data.Linq; 38 using System.Data.Linq.Mapping; 39 using System.Globalization; 40 using System.Linq; 41 using System.Net; 42 using System.Reflection; 43 using System.Security.Permissions; 44 using System.Security.Principal; 45 using System.Web; 46 using System.Web.UI; 47 using System.Web.DynamicData; 48 using System.Web.DynamicData.ModelProviders; 49 using System.Web.Routing; 50 using System.Web.UI.HtmlControls; 51 using System.Web.UI.WebControls; 52 using System.IO; 53 54 using NUnit.Framework; 55 using MonoTests.stand_alone.WebHarness; 56 using MonoTests.SystemWeb.Framework; 57 using MonoTests.Common; 58 using MonoTests.DataSource; 59 using MonoTests.DataObjects; 60 61 using MetaModel = System.Web.DynamicData.MetaModel; 62 using MetaTable = System.Web.DynamicData.MetaTable; 63 64 namespace MonoTests.System.Web.DynamicData 65 { 66 [TestFixture] 67 public class DynamicControlTest 68 { 69 [SetUp] PerTestSetUp()70 public void PerTestSetUp () 71 { 72 // This is ran before every test 73 FieldTemplatePathTables.CleanUp_FullTypeNameTemplates (); 74 FieldTemplatePathTables.CleanUp_ShortTypeNameTemplates (); 75 } 76 77 [TestFixtureSetUp] SetUp()78 public void SetUp () 79 { 80 Type type = GetType (); 81 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx", "ListView_DynamicControl_01.aspx"); 82 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx.cs", "ListView_DynamicControl_01.aspx.cs"); 83 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_02.aspx", "ListView_DynamicControl_02.aspx"); 84 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_02.aspx.cs", "ListView_DynamicControl_02.aspx.cs"); 85 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_03.aspx", "ListView_DynamicControl_03.aspx"); 86 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_03.aspx.cs", "ListView_DynamicControl_03.aspx.cs"); 87 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_04.aspx", "ListView_DynamicControl_04.aspx"); 88 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_04.aspx.cs", "ListView_DynamicControl_04.aspx.cs"); 89 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_05.aspx", "ListView_DynamicControl_05.aspx"); 90 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_05.aspx.cs", "ListView_DynamicControl_05.aspx.cs"); 91 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_06.aspx", "ListView_DynamicControl_06.aspx"); 92 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_06.aspx.cs", "ListView_DynamicControl_06.aspx.cs"); 93 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_07.aspx", "ListView_DynamicControl_07.aspx"); 94 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_07.aspx.cs", "ListView_DynamicControl_07.aspx.cs"); 95 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_08.aspx", "ListView_DynamicControl_08.aspx"); 96 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_08.aspx.cs", "ListView_DynamicControl_08.aspx.cs"); 97 } 98 99 [TestFixtureTearDown] TearDown()100 public void TearDown () 101 { 102 FieldTemplatePathTables.CleanUp_FullTypeNameTemplates (); 103 FieldTemplatePathTables.CleanUp_ShortTypeNameTemplates (); 104 WebTest.Unload (); 105 } 106 107 [Test] Defaults()108 public void Defaults () 109 { 110 var dc = new DynamicControl (); 111 112 Assert.AreEqual (false, dc.ApplyFormatInEditMode, "#A1"); 113 Assert.AreEqual (null, dc.Column, "#A2"); 114 Assert.AreEqual (false, dc.ConvertEmptyStringToNull, "#A3"); 115 Assert.AreEqual (String.Empty, dc.CssClass, "#A4"); 116 Assert.AreEqual (String.Empty, dc.DataField, "#A5"); 117 Assert.AreEqual (String.Empty, dc.DataFormatString, "#A6"); 118 Assert.AreEqual (null, dc.FieldTemplate, "#A7"); 119 Assert.AreEqual (true, dc.HtmlEncode, "#A8"); 120 Assert.AreEqual (dc, ((IFieldTemplateHost)dc).FormattingOptions, "#A9"); 121 Assert.AreEqual (DataBoundControlMode.ReadOnly, dc.Mode, "#A10"); 122 Assert.AreEqual (String.Empty, dc.NullDisplayText, "#A11"); 123 // Throws NREX on .NET .... (why am I still surprised by this?) 124 // Calls DynamicDataExtensions.FindMetaTable which is where the exception is thrown from 125 // Assert.AreEqual (null, dc.Table, "#A12"); 126 Assert.AreEqual (String.Empty, dc.UIHint, "#A13"); 127 Assert.AreEqual (String.Empty, dc.ValidationGroup, "#A14"); 128 } 129 130 [Test] ApplyFormatInEditMode()131 public void ApplyFormatInEditMode () 132 { 133 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 134 test.Invoker = PageInvoker.CreateOnLoad (ApplyFormatInEditMode_OnLoad); 135 var p = test.Run (); 136 Assert.IsNotNull (test.Response, "#X1"); 137 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 138 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 139 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 140 } 141 ApplyFormatInEditMode_OnLoad(Page p)142 static void ApplyFormatInEditMode_OnLoad (Page p) 143 { 144 var lc = p.FindControl ("ListView1") as ListView; 145 Assert.IsNotNull (lc, "#A1"); 146 147 var dc = lc.FindChild<DynamicControl> ("FirstName"); 148 Assert.IsNotNull (dc, "#B1-1"); 149 Assert.AreEqual ("FirstName", dc.ID, "#B1-2"); 150 Assert.AreEqual (false, dc.Column.ApplyFormatInEditMode, "#B1-3"); 151 Assert.AreEqual (false, dc.ApplyFormatInEditMode, "#B1-4"); 152 153 dc = lc.FindChild<DynamicControl> ("Active"); 154 Assert.IsNotNull (dc, "#C1"); 155 Assert.AreEqual ("Active", dc.ID, "#C1-1"); 156 Assert.AreEqual (true, dc.Column.ApplyFormatInEditMode, "#C1-2"); 157 Assert.AreEqual (true, dc.ApplyFormatInEditMode, "#C1-3"); 158 159 dc.ApplyFormatInEditMode = false; 160 Assert.AreEqual (false, dc.ApplyFormatInEditMode, "#C1-4"); 161 Assert.AreEqual (true, dc.Column.ApplyFormatInEditMode, "#C1-5"); 162 } 163 164 [Test] Column()165 public void Column () 166 { 167 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 168 test.Invoker = PageInvoker.CreateOnLoad (Column_OnLoad); 169 var p = test.Run (); 170 Assert.IsNotNull (test.Response, "#X1"); 171 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 172 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 173 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 174 } 175 Column_OnLoad(Page p)176 static void Column_OnLoad (Page p) 177 { 178 var lc = p.FindControl ("ListView1") as ListView; 179 Assert.IsNotNull (lc, "#A1"); 180 181 var dc = lc.FindChild<DynamicControl> ("FirstName"); 182 Assert.IsNotNull (dc, "#A1-1"); 183 Assert.IsNotNull (dc.Column, "#B1"); 184 185 // Safe not to check for GetModel's return value - it throws if model isn't found, same 186 // goes for GetTable and GetColumn 187 MetaTable table = MetaModel.GetModel (typeof (EmployeesDataContext)).GetTable ("EmployeeTable"); 188 MetaColumn column = table.GetColumn ("FirstName"); 189 Assert.AreEqual (column, dc.Column, "#B1-1"); 190 Assert.AreEqual (dc.Column.Table, dc.Table, "#B1-2"); 191 192 dc.Column = column; 193 Assert.AreEqual (column, dc.Column, "#C1-3"); 194 195 column = table.GetColumn ("Active"); 196 dc.Column = column; 197 Assert.AreEqual (column, dc.Column, "#C1-4"); 198 199 // Talk about consistency... 200 table = MetaModel.GetModel (typeof (EmployeesDataContext)).GetTable ("SeasonalEmployeeTable"); 201 column = table.GetColumn ("FirstName"); 202 dc.Column = column; 203 204 Assert.AreNotEqual (dc.Column.Table, dc.Table, "#C1-5"); 205 } 206 207 [Test] ConvertEmptyStringToNull()208 public void ConvertEmptyStringToNull () 209 { 210 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 211 test.Invoker = PageInvoker.CreateOnLoad (ConvertEmptyStringToNull_OnLoad); 212 var p = test.Run (); 213 Assert.IsNotNull (test.Response, "#X1"); 214 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 215 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 216 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 217 } 218 ConvertEmptyStringToNull_OnLoad(Page p)219 static void ConvertEmptyStringToNull_OnLoad (Page p) 220 { 221 var lc = p.FindControl ("ListView1") as ListView; 222 Assert.IsNotNull (lc, "#A1"); 223 224 var dc = lc.FindChild<DynamicControl> ("FirstName"); 225 Assert.IsNotNull (dc, "#B1-1"); 226 Assert.AreEqual ("FirstName", dc.ID, "#B1-2"); 227 Assert.AreEqual (true, dc.Column.ConvertEmptyStringToNull, "#B1-3"); 228 Assert.AreEqual (true, dc.ConvertEmptyStringToNull, "#B1-4"); 229 230 dc = lc.FindChild<DynamicControl> ("LastName"); 231 Assert.IsNotNull (dc, "#C1"); 232 Assert.AreEqual (true, dc.ConvertEmptyStringToNull, "#C1-1"); 233 234 dc.ConvertEmptyStringToNull = false; 235 Assert.AreEqual (false, dc.ConvertEmptyStringToNull, "#C1-2"); 236 Assert.AreEqual (true, dc.Column.ConvertEmptyStringToNull, "#C1-3"); 237 } 238 239 [Test] CssClass()240 public void CssClass () 241 { 242 var dc = new DynamicControl (); 243 dc.CssClass = "MyCssClass"; 244 Assert.AreEqual ("MyCssClass", dc.CssClass, "#A1"); 245 246 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 247 test.Invoker = PageInvoker.CreateOnLoad (CssClass_OnLoad); 248 var p = test.Run (); 249 Assert.IsNotNull (test.Response, "#X1"); 250 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 251 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 252 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 253 254 string html = @"<span class=""activeCssClass""> 255 256 <span class=""field"">Active</span>:"; 257 Assert.IsTrue (p.IndexOf (html.Replace ("\r\n", "\n")) != -1, "#Y1"); 258 } 259 CssClass_OnLoad(Page p)260 static void CssClass_OnLoad (Page p) 261 { 262 var lc = p.FindControl ("ListView1") as ListView; 263 Assert.IsNotNull (lc, "#B1"); 264 265 var dc = lc.FindChild<PokerDynamicControl> ("Active"); 266 Assert.IsNotNull (dc, "#C1"); 267 Assert.AreEqual ("Active", dc.DataField, "#C1-1"); 268 Assert.AreEqual ("activeCssClass", dc.CssClass, "#C1-2"); 269 } 270 271 [Test] DataField()272 public void DataField () 273 { 274 var dc = new DynamicControl (); 275 276 Assert.AreEqual (String.Empty, dc.DataField, "#A1"); 277 dc.DataField = "MyField"; 278 Assert.AreEqual ("MyField", dc.DataField, "#A2"); 279 280 dc.DataField = "AnotherField"; 281 Assert.AreEqual ("AnotherField", dc.DataField, "#A3"); 282 283 dc.DataField = String.Empty; 284 Assert.AreEqual (String.Empty, dc.DataField, "#A4"); 285 286 dc.DataField = null; 287 Assert.AreEqual (String.Empty, dc.DataField, "#A5"); 288 } 289 290 [Test] DataField_1()291 public void DataField_1 () 292 { 293 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 294 test.Invoker = PageInvoker.CreateOnLoad (DataField_OnLoad_1); 295 var p = test.Run (); 296 Assert.IsNotNull (test.Response, "#X1"); 297 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 298 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 299 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 300 } 301 DataField_OnLoad_1(Page p)302 static void DataField_OnLoad_1 (Page p) 303 { 304 var lc = p.FindControl ("ListView1") as ListView; 305 Assert.IsNotNull (lc, "#A1"); 306 307 var dc = lc.FindChild<DynamicControl> ("FirstName"); 308 Assert.IsNotNull (dc, "#A1-1"); 309 Assert.IsNotNull (dc.DataField, "#A1-2"); 310 Assert.AreEqual ("FirstName", dc.DataField, "#A1-3"); 311 312 // Column and Table aren't set on DataField assignment... 313 dc.DataField = "Active"; 314 Assert.AreEqual ("Active", dc.DataField, "#B1"); 315 Assert.AreEqual ("FirstName", dc.Column.Name, "#B1-1"); 316 317 dc.DataField = String.Empty; 318 Assert.AreEqual (String.Empty, dc.DataField, "#C1"); 319 Assert.AreEqual ("FirstName", dc.Column.Name, "#C1-1"); 320 321 dc.DataField = null; 322 Assert.AreEqual (String.Empty, dc.DataField, "#D1"); 323 Assert.AreEqual ("FirstName", dc.Column.Name, "#D1-1"); 324 } 325 326 [Test] DataField_2()327 public void DataField_2 () 328 { 329 var dc = new DynamicControl (); 330 331 dc.DataField = null; 332 Assert.AreEqual (String.Empty, dc.DataField, "#A1"); 333 334 var c = dc.Column; 335 Assert.IsNull (c, "#A1-1"); 336 337 dc.DataField = "MyField"; 338 Assert.AreEqual ("MyField", dc.DataField, "#B1"); 339 340 c = dc.Column; 341 Assert.IsNull (c, "#B1-1"); 342 } 343 344 [Test] DataField_3()345 public void DataField_3 () 346 { 347 var test = new WebTest ("ListView_DynamicControl_05.aspx"); 348 test.Invoker = PageInvoker.CreateOnLoad (DataField_OnLoad_3); 349 var p = test.Run (); 350 Assert.IsNotNull (test.Response, "#X1"); 351 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 352 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 353 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 354 } 355 DataField_OnLoad_3(Page p)356 static void DataField_OnLoad_3 (Page p) 357 { 358 var lc = p.FindControl ("ListView1") as ListView; 359 Assert.IsNotNull (lc, "#A1"); 360 361 // System.InvalidOperationException : System.InvalidOperationException: The 'PokerDynamicControl' control 'FirstName' must have a DataField attribute. 362 // at System.Web.DynamicData.DynamicControl.ResolveColumn() 363 // at System.Web.DynamicData.DynamicControl.OnInit(EventArgs e) 364 365 Assert.Throws<InvalidOperationException> (() => { 366 var c = lc.FindChild<DynamicControl> ("FirstName"); 367 }, "#A1"); 368 } 369 370 [Test] DataField_4()371 public void DataField_4 () 372 { 373 var test = new WebTest ("ListView_DynamicControl_06.aspx"); 374 test.Invoker = PageInvoker.CreateOnLoad (DataField_OnLoad_4); 375 var p = test.Run (); 376 Assert.IsNotNull (test.Response, "#X1"); 377 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 378 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 379 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 380 } 381 DataField_OnLoad_4(Page p)382 static void DataField_OnLoad_4 (Page p) 383 { 384 var lc = p.FindControl ("ListView1") as ListView; 385 Assert.IsNotNull (lc, "#A1"); 386 387 // System.InvalidOperationException : System.InvalidOperationException: The table 'EmployeeTable' does not have a column named 'NoSuchColumn'. 388 // at System.Web.DynamicData.MetaTable.GetColumn(String columnName) 389 // at System.Web.DynamicData.DynamicControl.ResolveColumn() 390 // at System.Web.DynamicData.DynamicControl.OnInit(EventArgs e) 391 392 Assert.Throws<InvalidOperationException> (() => { 393 var dc = lc.FindChild<DynamicControl> ("FirstName"); 394 }, "#A1"); 395 } 396 397 [Test] DataField_5()398 public void DataField_5 () 399 { 400 var test = new WebTest ("ListView_DynamicControl_07.aspx"); 401 test.Invoker = PageInvoker.CreateOnLoad (DataField_OnLoad_5); 402 var p = test.Run (); 403 Assert.IsNotNull (test.Response, "#X1"); 404 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 405 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 406 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 407 } 408 DataField_OnLoad_5(Page p)409 static void DataField_OnLoad_5 (Page p) 410 { 411 var lc = p.FindControl ("ListView1") as ListView; 412 Assert.IsNotNull (lc, "#A1"); 413 414 // If Column is intialized before OnInit is run, the column is not resolved - no exception here. 415 var dc = lc.FindChild<DynamicControl> ("FirstName"); 416 Assert.IsNotNull (dc, "#A1"); 417 Assert.AreEqual ("FirstName", dc.Column.Name, "#A1-1"); 418 } 419 420 [Test] DataFormatString()421 public void DataFormatString () 422 { 423 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 424 test.Invoker = PageInvoker.CreateOnLoad (DataFormatString_OnLoad); 425 var p = test.Run (); 426 Assert.IsNotNull (test.Response, "#X1"); 427 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 428 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 429 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 430 } 431 DataFormatString_OnLoad(Page p)432 static void DataFormatString_OnLoad (Page p) 433 { 434 var lc = p.FindControl ("ListView1") as ListView; 435 Assert.IsNotNull (lc, "#A1"); 436 437 var dc = lc.FindChild<DynamicControl> ("FirstName"); 438 Assert.IsNotNull (dc, "#B1-1"); 439 Assert.AreEqual ("FirstName", dc.ID, "#B1-2"); 440 Assert.AreEqual (String.Empty, dc.Column.DataFormatString, "#B1-3"); 441 Assert.AreEqual (String.Empty, dc.DataFormatString, "#B1-4"); 442 443 dc = lc.FindChild<DynamicControl> ("Active"); 444 Assert.IsNotNull (dc, "#C1"); 445 Assert.AreEqual ("Active", dc.ID, "#C1-1"); 446 Assert.AreEqual ("Boolean value: {0}", dc.Column.DataFormatString, "#C1-2"); 447 Assert.AreEqual ("Boolean value: {0}", dc.DataFormatString, "#C1-3"); 448 449 dc.DataFormatString = String.Empty; 450 Assert.AreEqual (String.Empty, dc.DataFormatString, "#C1-4"); 451 Assert.AreEqual ("Boolean value: {0}", dc.Column.DataFormatString, "#C1-5"); 452 } 453 454 [Test] FieldTemplate()455 public void FieldTemplate () 456 { 457 var test = new WebTest ("ListView_DynamicControl_03.aspx"); 458 test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad); 459 var p = test.Run (); 460 Assert.IsNotNull (test.Response, "#X1"); 461 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 462 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 463 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 464 } 465 FieldTemplate_OnLoad(Page p)466 static void FieldTemplate_OnLoad (Page p) 467 { 468 var lc = p.FindControl ("ListView3") as ListView; 469 Assert.IsNotNull (lc, "#A1"); 470 471 int counter = 1; 472 foreach (var entry in FieldTemplatePathTables.FieldTemplateReadOnlyColumns) { 473 string columnName = entry.ColumnName; 474 var dc = lc.FindChild<PokerDynamicControl> (columnName); 475 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1}", counter, columnName)); 476 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName)); 477 478 var templateControl = dc.FieldTemplate; 479 var template = templateControl as FieldTemplateUserControl; 480 if (entry.IsNull) { 481 Assert.IsNull (templateControl, String.Format ("#B{0}-3 ({1})", counter, columnName)); 482 Assert.IsNull (template, String.Format ("#B{0}-4 ({1})", counter, columnName)); 483 } else { 484 Assert.IsNotNull (templateControl, String.Format ("#B{0}-5 ({1})", counter, columnName)); 485 Assert.IsNotNull (template, String.Format ("#B{0}-6 ({1})", counter, columnName)); 486 Assert.AreEqual (entry.ControlVirtualPath, template.AppRelativeVirtualPath, String.Format ("#B{0}-7 ({1})", counter, columnName)); 487 } 488 489 counter++; 490 } 491 } 492 493 [Test] FieldTemplate_1()494 public void FieldTemplate_1 () 495 { 496 var test = new WebTest ("ListView_DynamicControl_04.aspx"); 497 var p = test.Run (); 498 499 // Fake post-back 500 var delegates = new PageDelegates (); 501 delegates.PreRenderComplete = FieldTemplate_OnPreRenderComplete_1; 502 test.Invoker = new PageInvoker (delegates); 503 var fr = new FormRequest (test.Response, "form1"); 504 #if TARGET_DOTNET 505 fr.Controls.Add ("ListView4$ctrl0$editMe"); 506 fr.Controls["ListView4$ctrl0$editMe"].Value = "Edit"; 507 #else 508 fr.Controls.Add ("ListView4$ctl01$editMe"); 509 fr.Controls["ListView4$ctl01$editMe"].Value = "Edit"; 510 #endif 511 test.Request = fr; 512 p = test.Run (); 513 514 Assert.IsNotNull (test.Response, "#X1"); 515 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 516 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 517 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 518 } 519 FieldTemplate_OnPreRenderComplete_1(Page p)520 static void FieldTemplate_OnPreRenderComplete_1 (Page p) 521 { 522 var lc = p.FindControl ("ListView4") as ListView; 523 Assert.IsNotNull (lc, "#A1"); 524 525 int counter = 1; 526 foreach (var entry in FieldTemplatePathTables.FieldTemplateEditColumns) { 527 string columnName = entry.ColumnName; 528 var dc = lc.FindChild<PokerDynamicControl> (columnName); 529 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName)); 530 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName)); 531 532 var templateControl = dc.FieldTemplate; 533 var template = templateControl as FieldTemplateUserControl; 534 if (entry.IsNull) { 535 Assert.IsNull (templateControl, String.Format ("#B{0}-3 ({1})", counter, columnName)); 536 Assert.IsNull (template, String.Format ("#B{0}-4 ({1})", counter, columnName)); 537 } else { 538 Assert.IsNotNull (templateControl, String.Format ("#B{0}-5 ({1})", counter, columnName)); 539 Assert.IsNotNull (template, String.Format ("#B{0}-6 ({1})", counter, columnName)); 540 Assert.AreEqual (entry.ControlVirtualPath, template.AppRelativeVirtualPath, String.Format ("#B{0}-7 ({1})", counter, columnName)); 541 } 542 543 counter++; 544 } 545 } 546 547 // This tests full type name templates 548 [Test] FieldTemplate_2()549 public void FieldTemplate_2 () 550 { 551 FieldTemplatePathTables.SetUp_FullTypeNameTemplates (this); 552 var test = new WebTest ("ListView_DynamicControl_03.aspx"); 553 test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad_2); 554 var p = test.Run (); 555 Assert.IsNotNull (test.Response, "#X1"); 556 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 557 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 558 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 559 560 } 561 FieldTemplate_OnLoad_2(Page p)562 static void FieldTemplate_OnLoad_2 (Page p) 563 { 564 var lc = p.FindControl ("ListView3") as ListView; 565 Assert.IsNotNull (lc, "#A1"); 566 567 int counter = 1; 568 foreach (var entry in FieldTemplatePathTables.FieldTemplateNonDefaultColumns) { 569 string columnName = entry.ColumnName; 570 var dc = lc.FindChild<PokerDynamicControl> (columnName); 571 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName)); 572 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName)); 573 574 var templateControl = dc.FieldTemplate; 575 var template = templateControl as FieldTemplateUserControl; 576 if (entry.IsNull) { 577 Assert.IsNull (templateControl, String.Format ("#B{0}-3 ({1})", counter, columnName)); 578 Assert.IsNull (template, String.Format ("#B{0}-4 ({1})", counter, columnName)); 579 } else { 580 Assert.IsNotNull (templateControl, String.Format ("#B{0}-5 ({1})", counter, columnName)); 581 Assert.IsNotNull (template, String.Format ("#B{0}-6 ({1})", counter, columnName)); 582 Assert.AreEqual (entry.ControlVirtualPath, template.AppRelativeVirtualPath, String.Format ("#B{0}-7 ({1})", counter, columnName)); 583 } 584 585 counter++; 586 } 587 } 588 589 // This tests short type name templates 590 [Test] FieldTemplate_3()591 public void FieldTemplate_3 () 592 { 593 try { 594 FieldTemplatePathTables.SetUp_ShortTypeNameTemplates (this); 595 var test = new WebTest ("ListView_DynamicControl_03.aspx"); 596 test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad_3); 597 var p = test.Run (); 598 Assert.IsNotNull (test.Response, "#X1"); 599 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 600 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 601 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 602 } finally { 603 604 } 605 } 606 FieldTemplate_OnLoad_3(Page p)607 static void FieldTemplate_OnLoad_3 (Page p) 608 { 609 var lc = p.FindControl ("ListView3") as ListView; 610 Assert.IsNotNull (lc, "#A1"); 611 612 int counter = 1; 613 foreach (var entry in FieldTemplatePathTables.FieldTemplateNonDefaultShortColumns) { 614 string columnName = entry.ColumnName; 615 var dc = lc.FindChild<PokerDynamicControl> (columnName); 616 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName)); 617 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName)); 618 619 var templateControl = dc.FieldTemplate; 620 var template = templateControl as FieldTemplateUserControl; 621 if (entry.IsNull) { 622 Assert.IsNull (templateControl, String.Format ("#B{0}-3 ({1})", counter, columnName)); 623 Assert.IsNull (template, String.Format ("#B{0}-4 ({1})", counter, columnName)); 624 } else { 625 Assert.IsNotNull (templateControl, String.Format ("#B{0}-5 ({1})", counter, columnName)); 626 Assert.IsNotNull (template, String.Format ("#B{0}-6 ({1})", counter, columnName)); 627 Assert.AreEqual (entry.ControlVirtualPath, template.AppRelativeVirtualPath, String.Format ("#B{0}-7 ({1})", counter, columnName)); 628 } 629 630 counter++; 631 } 632 } 633 634 [Test] GetAttribute()635 public void GetAttribute () 636 { 637 var dc = new DynamicControl (); 638 Assert.AreEqual (String.Empty, dc.GetAttribute ("NoSuchAttribute"), "#A1"); 639 640 dc.SetAttribute ("MyAttribute", "value"); 641 Assert.AreEqual ("value", dc.GetAttribute ("MyAttribute"), "#B1"); 642 643 // Nice... 644 Assert.Throws<KeyNotFoundException> (() => { 645 dc.GetAttribute ("NoSuchAttribute"); 646 }, "#C1"); 647 } 648 649 [Test] HtmlEncode()650 public void HtmlEncode () 651 { 652 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 653 test.Invoker = PageInvoker.CreateOnLoad (HtmlEncode_OnLoad); 654 var p = test.Run (); 655 Assert.IsNotNull (test.Response, "#X1"); 656 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 657 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 658 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 659 } 660 HtmlEncode_OnLoad(Page p)661 static void HtmlEncode_OnLoad (Page p) 662 { 663 var lc = p.FindControl ("ListView1") as ListView; 664 Assert.IsNotNull (lc, "#A1"); 665 666 var dc = lc.FindChild<DynamicControl> ("FirstName"); 667 Assert.IsNotNull (dc, "#A1-1"); 668 Assert.IsNotNull (dc.Column, "#A1-2"); 669 670 Assert.AreEqual (true, dc.HtmlEncode, "#B1"); 671 Assert.AreEqual (dc.HtmlEncode, dc.Column.HtmlEncode, "#B1-1"); 672 673 dc.HtmlEncode = false; 674 Assert.AreEqual (false, dc.HtmlEncode, "#C1"); 675 Assert.AreNotEqual (dc.HtmlEncode, dc.Column.HtmlEncode, "#C1-1"); 676 } 677 678 [Test] IFieldTemplateHost_FormattingOptions()679 public void IFieldTemplateHost_FormattingOptions () 680 { 681 var dc = new DynamicControl (); 682 683 Assert.IsNotNull (((IFieldTemplateHost)dc).FormattingOptions, "#A1"); 684 Assert.AreEqual (dc, ((IFieldTemplateHost)dc).FormattingOptions, "#A2"); 685 } 686 687 [Test] Mode()688 public void Mode () 689 { 690 var dc = new DynamicControl (DataBoundControlMode.Edit); 691 Assert.AreEqual (DataBoundControlMode.Edit, dc.Mode, "#A1"); 692 693 dc.Mode = DataBoundControlMode.Insert; 694 Assert.AreEqual (DataBoundControlMode.Insert, dc.Mode, "#A2"); 695 696 dc.Mode = DataBoundControlMode.ReadOnly; 697 Assert.AreEqual (DataBoundControlMode.ReadOnly, dc.Mode, "#A3"); 698 } 699 700 [Test] NullDisplayText()701 public void NullDisplayText () 702 { 703 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 704 test.Invoker = PageInvoker.CreateOnLoad (NullDisplayText_OnLoad); 705 var p = test.Run (); 706 Assert.IsNotNull (test.Response, "#X1"); 707 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 708 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 709 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 710 } 711 NullDisplayText_OnLoad(Page p)712 static void NullDisplayText_OnLoad (Page p) 713 { 714 var lc = p.FindControl ("ListView1") as ListView; 715 Assert.IsNotNull (lc, "#A1"); 716 717 var dc = lc.FindChild<DynamicControl> ("FirstName"); 718 Assert.IsNotNull (dc, "#A1-1"); 719 Assert.IsNotNull (dc.Column, "#A1-2"); 720 721 Assert.AreEqual (String.Empty, dc.NullDisplayText, "#B1"); 722 Assert.AreEqual (dc.NullDisplayText, dc.Column.NullDisplayText, "#B1-1"); 723 724 dc.NullDisplayText = "Text"; 725 Assert.AreEqual ("Text", dc.NullDisplayText, "#C1"); 726 Assert.AreNotEqual (dc.NullDisplayText, dc.Column.NullDisplayText, "#C1-1"); 727 728 dc = lc.FindChild<DynamicControl> ("LastName"); 729 Assert.IsNotNull (dc, "#D1"); 730 Assert.IsNotNull (dc.Column, "#D1-1"); 731 Assert.AreEqual ("No value for this column", dc.NullDisplayText, "#D1-2"); 732 Assert.AreEqual (dc.NullDisplayText, dc.Column.NullDisplayText, "#D1-3"); 733 734 dc.NullDisplayText = String.Empty; 735 Assert.AreEqual (String.Empty, dc.NullDisplayText, "#E1"); 736 Assert.AreNotEqual (dc.NullDisplayText, dc.Column.NullDisplayText, "#E1-1"); 737 } 738 739 [Test] SetAttribute()740 public void SetAttribute () 741 { 742 var dc = new PokerDynamicControl (); 743 744 string html = dc.RenderToString (); 745 Assert.IsNotNull (html, "#A1"); 746 747 dc.SetAttribute ("MyAttribute", "Value"); 748 html = dc.RenderToString (); 749 Assert.IsNotNull (html, "#B1"); 750 Assert.AreEqual ("Value", dc.GetAttribute ("MyAttribute"), "#B2"); 751 752 dc.SetAttribute ("MyAttribute", "Another value"); 753 Assert.AreEqual ("Another value", dc.GetAttribute ("MyAttribute"), "#C1"); 754 } 755 756 [Test] SetAttribute_1()757 public void SetAttribute_1 () 758 { 759 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 760 var delegates = new PageDelegates (); 761 delegates.PreRenderComplete = SetAttribute_OnPreRenderComplete_1; 762 test.Invoker = new PageInvoker (delegates); 763 764 var p = test.Run (); 765 Assert.IsNotNull (test.Response, "#X1"); 766 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 767 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 768 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 769 } 770 SetAttribute_OnPreRenderComplete_1(Page p)771 static void SetAttribute_OnPreRenderComplete_1 (Page p) 772 { 773 // TODO: figure out how the attributes are used. They aren't rendered along with the control, 774 // but obviously they must be used somewhere... 775 var lc = p.FindControl ("ListView1") as ListView; 776 Assert.IsNotNull (lc, "#A1"); 777 778 var dc = lc.FindChild<PokerDynamicControl> ("FirstName"); 779 Assert.IsNotNull (dc, "#A1-1"); 780 781 string html = dc.RenderToString (); 782 Assert.IsFalse (String.IsNullOrEmpty (html), "#B1"); 783 784 dc.SetAttribute ("MyAttribute", "value"); 785 html = dc.RenderToString (); 786 Assert.IsFalse (String.IsNullOrEmpty (html), "#C1"); 787 } 788 789 [Test] Table()790 public void Table () 791 { 792 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 793 test.Invoker = PageInvoker.CreateOnLoad (Table_OnLoad); 794 var p = test.Run (); 795 Assert.IsNotNull (test.Response, "#X1"); 796 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 797 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 798 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 799 } 800 Table_OnLoad(Page p)801 static void Table_OnLoad (Page p) 802 { 803 var lc = p.FindControl ("ListView1") as ListView; 804 Assert.IsNotNull (lc, "#A1"); 805 806 var dc = lc.FindChild<DynamicControl> ("FirstName"); 807 Assert.IsNotNull (dc, "#A1-1"); 808 Assert.IsNotNull (dc.Table, "#B1"); 809 810 // Safe not to check for GetModel's return value - it throws if model isn't found, same 811 // goes for GetTable 812 MetaTable table = MetaModel.GetModel (typeof (EmployeesDataContext)).GetTable ("EmployeeTable"); 813 Assert.AreEqual (table, dc.Table, "#B1-1"); 814 Assert.AreEqual (dc.Table, dc.Column.Table, "#B1-2"); 815 } 816 817 [Test] UIHint()818 public void UIHint () 819 { 820 var test = new WebTest ("ListView_DynamicControl_01.aspx"); 821 test.Invoker = PageInvoker.CreateOnLoad (UIHint_OnLoad); 822 var p = test.Run (); 823 Assert.IsNotNull (test.Response, "#X1"); 824 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 825 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 826 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 827 828 Assert.IsTrue (p.IndexOf ("<span class=\"field\">LastName</span>: <span class=\"customFieldTemplate\">") != -1, "#Y1"); 829 Assert.IsTrue (p.IndexOf ("<span class=\"field\">FirstName</span>: <span class=\"defaultTemplate\">") != -1, "#Y1-1"); 830 } 831 UIHint_OnLoad(Page p)832 static void UIHint_OnLoad (Page p) 833 { 834 var lc = p.FindControl ("ListView1") as ListView; 835 Assert.IsNotNull (lc, "#A1"); 836 837 var dc = lc.FindChild<DynamicControl> ("FirstName"); 838 Assert.IsNotNull (dc, "#B1"); 839 Assert.AreEqual ("FirstName", dc.DataField, "#B1-1"); 840 841 // Changes below won't affect rendering - we're being called too late in the process 842 // This is just to test if the property is settable, what are the defaults and whether 843 // they can be overriden 844 845 // No UIHint attribute on the associated field, no explicit setting 846 Assert.AreEqual (String.Empty, dc.UIHint, "#C1"); 847 dc.UIHint = "MyCustomUIHintTemplate_Text"; 848 Assert.AreEqual ("MyCustomUIHintTemplate_Text", dc.UIHint, "#C1-1"); 849 850 dc = lc.FindChild<DynamicControl> ("LastName"); 851 Assert.IsNotNull (dc, "#D1"); 852 Assert.AreEqual ("LastName", dc.DataField, "#D1-1"); 853 854 // UIHint attribute found on the associated field 855 Assert.AreEqual ("CustomFieldTemplate", dc.UIHint, "#D1-2"); 856 dc.UIHint = "MyCustomUIHintTemplate_Text"; 857 Assert.AreEqual ("MyCustomUIHintTemplate_Text", dc.UIHint, "#D1-3"); 858 859 dc.UIHint = null; 860 Assert.AreEqual (String.Empty, dc.UIHint, "#E1"); 861 } 862 863 [Test] UIHint_1()864 public void UIHint_1 () 865 { 866 var test = new WebTest ("ListView_DynamicControl_02.aspx"); 867 test.Invoker = PageInvoker.CreateOnLoad (UIHint_OnLoad_1); 868 var p = test.Run (); 869 Assert.IsNotNull (test.Response, "#X1"); 870 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 871 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 872 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 873 874 Assert.IsTrue (p.IndexOf ("<span class=\"field\">LastName</span>: <span class=\"myCustomUIHintTemplate_Text\">") != -1, "#Y1"); 875 Assert.IsTrue (p.IndexOf ("<span class=\"field\">FirstName</span>: <span class=\"defaultTemplate\">") != -1, "#Y1-1"); 876 } 877 UIHint_OnLoad_1(Page p)878 static void UIHint_OnLoad_1 (Page p) 879 { 880 var lc = p.FindControl ("ListView2") as ListView; 881 Assert.IsNotNull (lc, "#A1"); 882 883 var dc = lc.FindChild<DynamicControl> ("FirstName2"); 884 Assert.IsNotNull (dc, "#B1"); 885 Assert.AreEqual ("FirstName", dc.DataField, "#B1-1"); 886 887 // No UIHint attribute on the associated field, no explicit setting 888 Assert.AreEqual (String.Empty, dc.UIHint, "#C1"); 889 890 dc = lc.FindChild<DynamicControl> ("LastName2"); 891 Assert.IsNotNull (dc, "#D1"); 892 Assert.AreEqual ("LastName", dc.DataField, "#D1-1"); 893 894 // UIHint attribute found on the associated field but overriden in the page 895 Assert.AreEqual ("MyCustomUIHintTemplate_Text", dc.UIHint, "#D1-2"); 896 } 897 898 [Test] UIHint_2()899 public void UIHint_2 () 900 { 901 var test = new WebTest ("ListView_DynamicControl_08.aspx"); 902 test.Invoker = PageInvoker.CreateOnLoad (UIHint_OnLoad_2); 903 var p = test.Run (); 904 Assert.IsNotNull (test.Response, "#X1"); 905 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p); 906 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p); 907 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3"); 908 909 Assert.IsTrue (p.IndexOf ("<span class=\"field\">LastName</span>: <span class=\"customFieldTemplate\">") != -1, "#Y1"); 910 Assert.IsTrue (p.IndexOf ("<span class=\"field\">FirstName</span>: <span class=\"defaultTemplate\">") != -1, "#Y1-1"); 911 } 912 UIHint_OnLoad_2(Page p)913 static void UIHint_OnLoad_2 (Page p) 914 { 915 var lc = p.FindControl ("ListView1") as ListView; 916 Assert.IsNotNull (lc, "#A1"); 917 918 // Invalid field template name 919 var dc = lc.FindChild<DynamicControl> ("FirstName"); 920 Assert.IsNotNull (dc, "#B1"); 921 Assert.AreEqual ("NonExistingTemplate", dc.UIHint, "#B1-1"); 922 923 // Falls back to the text template 924 Assert.IsNotNull (dc.FieldTemplate, "#C1"); 925 926 var ftuc = dc.FieldTemplate as FieldTemplateUserControl; 927 Assert.IsNotNull (ftuc, "#C1-2"); 928 Assert.AreEqual ("~/DynamicData/FieldTemplates/Text.ascx", ftuc.AppRelativeVirtualPath, "#C1-3"); 929 } 930 931 [Test] ValidationGroup()932 public void ValidationGroup () 933 { 934 // TODO: more complicated tests involving actual page and validation 935 var dc = new DynamicControl (); 936 dc.ValidationGroup = "Group1"; 937 Assert.AreEqual ("Group1", dc.ValidationGroup, "#A1"); 938 } 939 } 940 } 941