5 // Marek Habersack <mhabersack@novell.com>
7 // Copyright (C) 2009 Novell Inc. http://novell.com
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:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
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.
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;
42 using System.Reflection;
43 using System.Security.Permissions;
44 using System.Security.Principal;
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;
54 using NUnit.Framework;
56 using MonoTests.stand_alone.WebHarness;
57 using MonoTests.SystemWeb.Framework;
58 using MonoTests.Common;
59 using MonoTests.DataSource;
60 using MonoTests.DataObjects;
62 using MetaModel = System.Web.DynamicData.MetaModel;
63 using MetaTable = System.Web.DynamicData.MetaTable;
65 namespace MonoTests.System.Web.DynamicData
68 public class DynamicControlTest
70 sealed class FieldTemplateTestDescription
72 public string ColumnName { get; private set; }
73 public string ControlVirtualPath { get; private set; }
74 public bool IsNull { get; private set; }
76 public FieldTemplateTestDescription (string columnName)
77 : this (columnName, String.Empty, true)
80 public FieldTemplateTestDescription (string columnName, string virtualPath)
81 : this (columnName, virtualPath, false)
84 public FieldTemplateTestDescription (string columnName, string virtualPath, bool isNull)
86 ColumnName = columnName;
87 ControlVirtualPath = virtualPath;
93 public void PerTestSetUp ()
95 // This is ran before every test
96 CleanUp_FullTypeNameTemplates ();
97 CleanUp_ShortTypeNameTemplates ();
103 Type type = GetType ();
104 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx", "ListView_DynamicControl_01.aspx");
105 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx.cs", "ListView_DynamicControl_01.aspx.cs");
106 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_02.aspx", "ListView_DynamicControl_02.aspx");
107 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_02.aspx.cs", "ListView_DynamicControl_02.aspx.cs");
108 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_03.aspx", "ListView_DynamicControl_03.aspx");
109 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_03.aspx.cs", "ListView_DynamicControl_03.aspx.cs");
110 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_04.aspx", "ListView_DynamicControl_04.aspx");
111 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_04.aspx.cs", "ListView_DynamicControl_04.aspx.cs");
115 public void Defaults ()
117 var dc = new DynamicControl ();
119 Assert.AreEqual (false, dc.ApplyFormatInEditMode, "#A1");
120 Assert.AreEqual (null, dc.Column, "#A2");
121 Assert.AreEqual (false, dc.ConvertEmptyStringToNull, "#A3");
122 Assert.AreEqual (String.Empty, dc.CssClass, "#A4");
123 Assert.AreEqual (String.Empty, dc.DataField, "#A5");
124 Assert.AreEqual (String.Empty, dc.DataFormatString, "#A6");
125 Assert.AreEqual (null, dc.FieldTemplate, "#A7");
126 Assert.AreEqual (true, dc.HtmlEncode, "#A8");
127 Assert.AreEqual (dc, ((IFieldTemplateHost) dc).FormattingOptions, "#A9");
128 Assert.AreEqual (DataBoundControlMode.ReadOnly, dc.Mode, "#A10");
129 Assert.AreEqual (String.Empty, dc.NullDisplayText, "#A11");
130 // Throws NREX on .NET .... (why am I still surprised by this?)
131 // Calls DynamicDataExtensions.FindMetaTable which is where the exception is thrown from
132 // Assert.AreEqual (null, dc.Table, "#A12");
133 Assert.AreEqual (String.Empty, dc.UIHint, "#A13");
134 Assert.AreEqual (String.Empty, dc.ValidationGroup, "#A14");
138 public void ApplyFormatInEditMode ()
140 var test = new WebTest ("ListView_DynamicControl_01.aspx");
141 test.Invoker = PageInvoker.CreateOnLoad (ApplyFormatInEditMode_OnLoad);
143 Assert.IsNotNull (test.Response, "#X1");
144 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
145 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
146 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
149 static void ApplyFormatInEditMode_OnLoad (Page p)
151 var lc = p.FindControl ("ListView1") as ListView;
152 Assert.IsNotNull (lc, "#A1");
154 var dc = lc.FindChild<DynamicControl> ("FirstName");
155 Assert.IsNotNull (dc, "#B1-1");
156 Assert.AreEqual ("FirstName", dc.ID, "#B1-2");
157 Assert.AreEqual (false, dc.Column.ApplyFormatInEditMode, "#B1-3");
158 Assert.AreEqual (false, dc.ApplyFormatInEditMode, "#B1-4");
160 dc = lc.FindChild<DynamicControl> ("Active");
161 Assert.IsNotNull (dc, "#C1");
162 Assert.AreEqual ("Active", dc.ID, "#C1-1");
163 Assert.AreEqual (true, dc.Column.ApplyFormatInEditMode, "#C1-2");
164 Assert.AreEqual (true, dc.ApplyFormatInEditMode, "#C1-3");
166 dc.ApplyFormatInEditMode = false;
167 Assert.AreEqual (false, dc.ApplyFormatInEditMode, "#C1-4");
168 Assert.AreEqual (true, dc.Column.ApplyFormatInEditMode, "#C1-5");
172 public void Column ()
174 var test = new WebTest ("ListView_DynamicControl_01.aspx");
175 test.Invoker = PageInvoker.CreateOnLoad (Column_OnLoad);
177 Assert.IsNotNull (test.Response, "#X1");
178 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
179 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
180 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
183 static void Column_OnLoad (Page p)
185 var lc = p.FindControl ("ListView1") as ListView;
186 Assert.IsNotNull (lc, "#A1");
188 var dc = lc.FindChild<DynamicControl> ("FirstName");
189 Assert.IsNotNull (dc, "#A1-1");
190 Assert.IsNotNull (dc.Column, "#B1");
192 // Safe not to check for GetModel's return value - it throws if model isn't found, same
193 // goes for GetTable and GetColumn
194 MetaTable table = MetaModel.GetModel (typeof (EmployeesDataContext)).GetTable ("EmployeeTable");
195 MetaColumn column = table.GetColumn ("FirstName");
196 Assert.AreEqual (column, dc.Column, "#B1-1");
197 Assert.AreEqual (dc.Column.Table, dc.Table, "#B1-2");
200 Assert.AreEqual (column, dc.Column, "#C1-3");
202 column = table.GetColumn ("Active");
204 Assert.AreEqual (column, dc.Column, "#C1-4");
206 // Talk about consistency...
207 table = MetaModel.GetModel (typeof (EmployeesDataContext)).GetTable ("SeasonalEmployeeTable");
208 column = table.GetColumn ("FirstName");
211 Assert.AreNotEqual (dc.Column.Table, dc.Table, "#C1-5");
215 public void ConvertEmptyStringToNull ()
217 var test = new WebTest ("ListView_DynamicControl_01.aspx");
218 test.Invoker = PageInvoker.CreateOnLoad (ConvertEmptyStringToNull_OnLoad);
220 Assert.IsNotNull (test.Response, "#X1");
221 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
222 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
223 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
226 static void ConvertEmptyStringToNull_OnLoad (Page p)
228 var lc = p.FindControl ("ListView1") as ListView;
229 Assert.IsNotNull (lc, "#A1");
231 var dc = lc.FindChild<DynamicControl> ("FirstName");
232 Assert.IsNotNull (dc, "#B1-1");
233 Assert.AreEqual ("FirstName", dc.ID, "#B1-2");
234 Assert.AreEqual (true, dc.Column.ConvertEmptyStringToNull, "#B1-3");
235 Assert.AreEqual (true, dc.ConvertEmptyStringToNull, "#B1-4");
237 dc = lc.FindChild<DynamicControl> ("LastName");
238 Assert.IsNotNull (dc, "#C1");
239 Assert.AreEqual (true, dc.ConvertEmptyStringToNull, "#C1-1");
241 dc.ConvertEmptyStringToNull = false;
242 Assert.AreEqual (false, dc.ConvertEmptyStringToNull, "#C1-2");
243 Assert.AreEqual (true, dc.Column.ConvertEmptyStringToNull, "#C1-3");
247 public void CssClass ()
249 var dc = new DynamicControl ();
250 dc.CssClass = "MyCssClass";
251 Assert.AreEqual ("MyCssClass", dc.CssClass, "#A1");
253 var test = new WebTest ("ListView_DynamicControl_01.aspx");
254 test.Invoker = PageInvoker.CreateOnLoad (CssClass_OnLoad);
256 Assert.IsNotNull (test.Response, "#X1");
257 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
258 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
259 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
261 string html = @"<span class=""activeCssClass"">
263 <span class=""field"">Active</span>:";
264 Assert.IsTrue (p.IndexOf (html) != -1, "#Y1");
267 static void CssClass_OnLoad (Page p)
269 var lc = p.FindControl ("ListView1") as ListView;
270 Assert.IsNotNull (lc, "#B1");
272 var dc = lc.FindChild<PokerDynamicControl> ("Active");
273 Assert.IsNotNull (dc, "#C1");
274 Assert.AreEqual ("Active", dc.DataField, "#C1-1");
275 Assert.AreEqual ("activeCssClass", dc.CssClass, "#C1-2");
279 public void DataField ()
281 var dc = new DynamicControl ();
283 Assert.AreEqual (String.Empty, dc.DataField, "#A1");
284 dc.DataField = "MyField";
285 Assert.AreEqual ("MyField", dc.DataField, "#A2");
289 public void DataField_1 ()
291 var test = new WebTest ("ListView_DynamicControl_01.aspx");
292 test.Invoker = PageInvoker.CreateOnLoad (DataField_OnLoad_1);
294 Assert.IsNotNull (test.Response, "#X1");
295 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
296 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
297 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
300 static void DataField_OnLoad_1 (Page p)
302 var lc = p.FindControl ("ListView1") as ListView;
303 Assert.IsNotNull (lc, "#A1");
305 var dc = lc.FindChild<DynamicControl> ("FirstName");
306 Assert.IsNotNull (dc, "#A1-1");
307 Assert.IsNotNull (dc.DataField, "#A1-2");
308 Assert.AreEqual("FirstName", dc.DataField, "#A1-3");
310 // Column and Table aren't set on DataField assignment...
311 dc.DataField = "Active";
312 Assert.AreEqual ("Active", dc.DataField, "#B1");
313 Assert.AreEqual ("FirstName", dc.Column.Name, "#B1-1");
317 public void DataFormatString ()
319 var test = new WebTest ("ListView_DynamicControl_01.aspx");
320 test.Invoker = PageInvoker.CreateOnLoad (DataFormatString_OnLoad);
322 Assert.IsNotNull (test.Response, "#X1");
323 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
324 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
325 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
328 static void DataFormatString_OnLoad (Page p)
330 var lc = p.FindControl ("ListView1") as ListView;
331 Assert.IsNotNull (lc, "#A1");
333 var dc = lc.FindChild<DynamicControl> ("FirstName");
334 Assert.IsNotNull (dc, "#B1-1");
335 Assert.AreEqual ("FirstName", dc.ID, "#B1-2");
336 Assert.AreEqual (String.Empty, dc.Column.DataFormatString, "#B1-3");
337 Assert.AreEqual (String.Empty, dc.DataFormatString, "#B1-4");
339 dc = lc.FindChild<DynamicControl> ("Active");
340 Assert.IsNotNull (dc, "#C1");
341 Assert.AreEqual ("Active", dc.ID, "#C1-1");
342 Assert.AreEqual ("Boolean value: {0}", dc.Column.DataFormatString, "#C1-2");
343 Assert.AreEqual ("Boolean value: {0}", dc.DataFormatString, "#C1-3");
345 dc.DataFormatString = String.Empty;
346 Assert.AreEqual (String.Empty, dc.DataFormatString, "#C1-4");
347 Assert.AreEqual ("Boolean value: {0}", dc.Column.DataFormatString, "#C1-5");
351 public void FieldTemplate ()
353 var test = new WebTest ("ListView_DynamicControl_03.aspx");
354 test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad);
356 Assert.IsNotNull (test.Response, "#X1");
357 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
358 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
359 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
362 static List <FieldTemplateTestDescription> fieldTemplateReadOnlyColumns = new List <FieldTemplateTestDescription> ()
364 new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
365 new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
366 new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
367 new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
368 new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean.ascx"),
369 new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
370 new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
371 new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
372 new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
373 new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
374 new FieldTemplateTestDescription ("SByte_Column"),
375 new FieldTemplateTestDescription ("UInt_Column"),
376 new FieldTemplateTestDescription ("ULong_Column"),
377 new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
378 new FieldTemplateTestDescription ("UShort_Column"),
379 new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
380 new FieldTemplateTestDescription ("FooEmpty_Column"),
381 new FieldTemplateTestDescription ("Object_Column"),
382 new FieldTemplateTestDescription ("ByteArray_Column"),
383 new FieldTemplateTestDescription ("IntArray_Column"),
384 new FieldTemplateTestDescription ("StringArray_Column"),
385 new FieldTemplateTestDescription ("ObjectArray_Column"),
386 new FieldTemplateTestDescription ("StringList_Column"),
387 new FieldTemplateTestDescription ("Dictionary_Column"),
388 new FieldTemplateTestDescription ("ICollection_Column"),
389 new FieldTemplateTestDescription ("IEnumerable_Column"),
390 new FieldTemplateTestDescription ("ICollectionByte_Column"),
391 new FieldTemplateTestDescription ("IEnumerableByte_Column"),
392 new FieldTemplateTestDescription ("ByteMultiArray_Column"),
393 new FieldTemplateTestDescription ("BoolArray_Column"),
394 new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/Text.ascx"),
397 static void FieldTemplate_OnLoad (Page p)
399 var lc = p.FindControl ("ListView3") as ListView;
400 Assert.IsNotNull (lc, "#A1");
403 foreach (var entry in fieldTemplateReadOnlyColumns) {
404 string columnName = entry.ColumnName;
405 var dc = lc.FindChild<PokerDynamicControl> (columnName);
406 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1}", counter, columnName));
407 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
409 var templateControl = dc.FieldTemplate;
410 var template = templateControl as FieldTemplateUserControl;
412 Assert.IsNull (templateControl, String.Format ("#B{0}-3 ({1})", counter, columnName));
413 Assert.IsNull (template, String.Format ("#B{0}-4 ({1})", counter, columnName));
415 Assert.IsNotNull (templateControl, String.Format ("#B{0}-5 ({1})", counter, columnName));
416 Assert.IsNotNull (template, String.Format ("#B{0}-6 ({1})", counter, columnName));
417 Assert.AreEqual (entry.ControlVirtualPath, template.AppRelativeVirtualPath, String.Format ("#B{0}-7 ({1})", counter, columnName));
425 public void FieldTemplate_1 ()
427 var test = new WebTest ("ListView_DynamicControl_04.aspx");
431 var delegates = new PageDelegates ();
432 delegates.PreRenderComplete = FieldTemplate_OnPreRenderComplete_1;
433 test.Invoker = new PageInvoker (delegates);
434 var fr = new FormRequest (test.Response, "form1");
435 fr.Controls.Add ("ListView4$ctrl0$editMe");
436 fr.Controls["ListView4$ctrl0$editMe"].Value = "Edit";
440 Assert.IsNotNull (test.Response, "#X1");
441 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
442 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
443 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
446 static List<FieldTemplateTestDescription> fieldTemplateEditColumns = new List<FieldTemplateTestDescription> ()
448 new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Text_Edit.ascx"),
449 new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
450 new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
451 new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
452 new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean_Edit.ascx"),
453 new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text_Edit.ascx"),
454 new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
455 new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
456 new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
457 new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
458 new FieldTemplateTestDescription ("SByte_Column"),
459 new FieldTemplateTestDescription ("UInt_Column"),
460 new FieldTemplateTestDescription ("ULong_Column"),
461 new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
462 new FieldTemplateTestDescription ("UShort_Column"),
463 new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime_Edit.ascx"),
464 new FieldTemplateTestDescription ("FooEmpty_Column"),
465 new FieldTemplateTestDescription ("Object_Column"),
466 new FieldTemplateTestDescription ("ByteArray_Column"),
467 new FieldTemplateTestDescription ("IntArray_Column"),
468 new FieldTemplateTestDescription ("StringArray_Column"),
469 new FieldTemplateTestDescription ("ObjectArray_Column"),
470 new FieldTemplateTestDescription ("StringList_Column"),
471 new FieldTemplateTestDescription ("Dictionary_Column"),
472 new FieldTemplateTestDescription ("ICollection_Column"),
473 new FieldTemplateTestDescription ("IEnumerable_Column"),
474 new FieldTemplateTestDescription ("ICollectionByte_Column"),
475 new FieldTemplateTestDescription ("IEnumerableByte_Column"),
476 new FieldTemplateTestDescription ("ByteMultiArray_Column"),
477 new FieldTemplateTestDescription ("BoolArray_Column"),
478 new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/MultilineText_Edit.ascx"),
481 static void FieldTemplate_OnPreRenderComplete_1 (Page p)
483 var lc = p.FindControl ("ListView4") as ListView;
484 Assert.IsNotNull (lc, "#A1");
487 foreach (var entry in fieldTemplateEditColumns) {
488 string columnName = entry.ColumnName;
489 var dc = lc.FindChild<PokerDynamicControl> (columnName);
490 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
491 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
493 var templateControl = dc.FieldTemplate;
494 var template = templateControl as FieldTemplateUserControl;
496 Assert.IsNull (templateControl, String.Format ("#B{0}-3 ({1})", counter, columnName));
497 Assert.IsNull (template, String.Format ("#B{0}-4 ({1})", counter, columnName));
499 Assert.IsNotNull (templateControl, String.Format ("#B{0}-5 ({1})", counter, columnName));
500 Assert.IsNotNull (template, String.Format ("#B{0}-6 ({1})", counter, columnName));
501 Assert.AreEqual (entry.ControlVirtualPath, template.AppRelativeVirtualPath, String.Format ("#B{0}-7 ({1})", counter, columnName));
508 // This tests full type name templates
510 public void FieldTemplate_2 ()
513 SetUp_FullTypeNameTemplates ();
514 var test = new WebTest ("ListView_DynamicControl_03.aspx");
515 test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad_2);
517 Assert.IsNotNull (test.Response, "#X1");
518 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
519 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
520 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
526 static List<string> nonDefaultFullTypeNameTemplates = new List<string> () {
528 "System.Char.ascx.cs",
530 "System.Byte.ascx.cs",
531 "System.Boolean.ascx",
532 "System.Boolean.ascx.cs",
534 "System.Int16.ascx.cs",
536 "System.Int32.ascx.cs",
538 "System.Int64.ascx.cs",
539 "System.String.ascx",
540 "System.String.ascx.cs",
541 "System.UInt16.ascx",
542 "System.UInt16.ascx.cs",
543 "System.UInt32.ascx",
544 "System.UInt32.ascx.cs",
545 "System.UInt64.ascx",
546 "System.UInt64.ascx.cs",
548 "System.SByte.ascx.cs",
549 "System.Object.ascx",
550 "System.Object.ascx.cs",
551 "System.Byte[].ascx",
552 "System.Byte[].ascx.cs",
553 "System.Collections.Generic.List`1[System.String].ascx",
554 "System.Collections.Generic.List`1[System.String].ascx.cs",
555 "MonoTests.Common.FooEmpty.ascx",
556 "MonoTests.Common.FooEmpty.ascx.cs",
557 "System.Collections.ICollection.ascx",
558 "System.Collections.ICollection.ascx.cs",
561 void SetUp_FullTypeNameTemplates ()
563 Type type = GetType ();
564 foreach (string tname in nonDefaultFullTypeNameTemplates)
565 WebTest.CopyResource (type, "MonoTests.WebPages.DynamicData.FieldTemplates_NonDefault." + tname, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
568 void CleanUp_FullTypeNameTemplates ()
570 string baseDir = WebTest.TestBaseDir;
573 foreach (string tname in nonDefaultFullTypeNameTemplates) {
574 filePath = Path.Combine (baseDir, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
576 if (File.Exists (filePath))
577 File.Delete (filePath);
584 static List <FieldTemplateTestDescription> fieldTemplateNonDefaultColumns = new List <FieldTemplateTestDescription> ()
586 new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/System.Char.ascx"),
587 new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/System.Byte.ascx"),
588 new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/System.Int32.ascx"),
589 new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/System.Int64.ascx"),
590 new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/System.Boolean.ascx"),
591 new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
592 new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
593 new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
594 new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
595 new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
596 new FieldTemplateTestDescription ("SByte_Column", "~/DynamicData/FieldTemplates/System.SByte.ascx"),
597 new FieldTemplateTestDescription ("UInt_Column", "~/DynamicData/FieldTemplates/System.UInt32.ascx"),
598 new FieldTemplateTestDescription ("ULong_Column", "~/DynamicData/FieldTemplates/System.UInt64.ascx"),
599 new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/System.Int16.ascx"),
600 new FieldTemplateTestDescription ("UShort_Column", "~/DynamicData/FieldTemplates/System.UInt16.ascx"),
601 new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
602 new FieldTemplateTestDescription ("FooEmpty_Column", "~/DynamicData/FieldTemplates/MonoTests.Common.FooEmpty.ascx"),
603 new FieldTemplateTestDescription ("Object_Column", "~/DynamicData/FieldTemplates/System.Object.ascx"),
604 new FieldTemplateTestDescription ("ByteArray_Column", "~/DynamicData/FieldTemplates/System.Byte[].ascx"),
605 new FieldTemplateTestDescription ("IntArray_Column"),
606 new FieldTemplateTestDescription ("StringArray_Column"),
607 new FieldTemplateTestDescription ("ObjectArray_Column"),
608 new FieldTemplateTestDescription ("StringList_Column"),
610 // Doesn't work for some reason
611 //new FieldTemplateTestDescription ("StringList_Column", "~/DynamicData/FieldTemplates/System.Collections.Generic.List`1[System.String].ascx"),
612 new FieldTemplateTestDescription ("Dictionary_Column"),
613 new FieldTemplateTestDescription ("ICollection_Column", "~/DynamicData/FieldTemplates/System.Collections.ICollection.ascx"),
614 new FieldTemplateTestDescription ("IEnumerable_Column"),
615 new FieldTemplateTestDescription ("ICollectionByte_Column"),
616 new FieldTemplateTestDescription ("IEnumerableByte_Column"),
617 new FieldTemplateTestDescription ("ByteMultiArray_Column"),
618 new FieldTemplateTestDescription ("BoolArray_Column"),
619 new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/System.String.ascx"),
622 static void FieldTemplate_OnLoad_2 (Page p)
624 var lc = p.FindControl ("ListView3") as ListView;
625 Assert.IsNotNull (lc, "#A1");
628 foreach (var entry in fieldTemplateNonDefaultColumns) {
629 string columnName = entry.ColumnName;
630 var dc = lc.FindChild<PokerDynamicControl> (columnName);
631 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
632 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
634 var templateControl = dc.FieldTemplate;
635 var template = templateControl as FieldTemplateUserControl;
637 Assert.IsNull (templateControl, String.Format ("#B{0}-3 ({1})", counter, columnName));
638 Assert.IsNull (template, String.Format ("#B{0}-4 ({1})", counter, columnName));
640 Assert.IsNotNull (templateControl, String.Format ("#B{0}-5 ({1})", counter, columnName));
641 Assert.IsNotNull (template, String.Format ("#B{0}-6 ({1})", counter, columnName));
642 Assert.AreEqual (entry.ControlVirtualPath, template.AppRelativeVirtualPath, String.Format ("#B{0}-7 ({1})", counter, columnName));
649 // This tests short type name templates
651 public void FieldTemplate_3 ()
654 SetUp_ShortTypeNameTemplates ();
655 var test = new WebTest ("ListView_DynamicControl_03.aspx");
656 test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad_3);
658 Assert.IsNotNull (test.Response, "#X1");
659 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
660 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
661 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
667 static List<string> nonDefaultShortTypeNameTemplates = new List<string> () {
697 "ICollection.ascx.cs",
700 void SetUp_ShortTypeNameTemplates ()
702 Type type = GetType ();
703 foreach (string tname in nonDefaultShortTypeNameTemplates)
704 WebTest.CopyResource (type, "MonoTests.WebPages.DynamicData.FieldTemplates_NonDefault." + tname, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
707 void CleanUp_ShortTypeNameTemplates ()
709 string baseDir = WebTest.TestBaseDir;
712 foreach (string tname in nonDefaultShortTypeNameTemplates) {
713 filePath = Path.Combine (baseDir, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
715 if (File.Exists (filePath))
716 File.Delete (filePath);
723 static List<FieldTemplateTestDescription> fieldTemplateNonDefaultShortColumns = new List<FieldTemplateTestDescription> ()
725 new FieldTemplateTestDescription ("FooEmpty_Column", "~/DynamicData/FieldTemplates/FooEmpty.ascx"),
726 new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Char.ascx"),
727 new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Byte.ascx"),
728 new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Int32.ascx"),
729 new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Int64.ascx"),
730 new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean.ascx"),
731 new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
732 new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/String.ascx"),
733 new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/String.ascx"),
734 new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/String.ascx"),
735 new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/String.ascx"),
736 new FieldTemplateTestDescription ("SByte_Column", "~/DynamicData/FieldTemplates/SByte.ascx"),
737 new FieldTemplateTestDescription ("UInt_Column", "~/DynamicData/FieldTemplates/UInt32.ascx"),
738 new FieldTemplateTestDescription ("ULong_Column", "~/DynamicData/FieldTemplates/UInt64.ascx"),
739 new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Int16.ascx"),
740 new FieldTemplateTestDescription ("UShort_Column", "~/DynamicData/FieldTemplates/UInt16.ascx"),
741 new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
742 new FieldTemplateTestDescription ("Object_Column", "~/DynamicData/FieldTemplates/Object.ascx"),
743 new FieldTemplateTestDescription ("ByteArray_Column", "~/DynamicData/FieldTemplates/Byte[].ascx"),
744 new FieldTemplateTestDescription ("IntArray_Column"),
745 new FieldTemplateTestDescription ("StringArray_Column"),
746 new FieldTemplateTestDescription ("ObjectArray_Column"),
747 new FieldTemplateTestDescription ("StringList_Column"),
749 // Doesn't work for some reason
750 //new FieldTemplateTestDescription ("StringList_Column", "~/DynamicData/FieldTemplates/List`1[System.String].ascx"),
751 new FieldTemplateTestDescription ("Dictionary_Column"),
752 new FieldTemplateTestDescription ("ICollection_Column", "~/DynamicData/FieldTemplates/ICollection.ascx"),
753 new FieldTemplateTestDescription ("IEnumerable_Column"),
754 new FieldTemplateTestDescription ("ICollectionByte_Column"),
755 new FieldTemplateTestDescription ("IEnumerableByte_Column"),
756 new FieldTemplateTestDescription ("ByteMultiArray_Column"),
757 new FieldTemplateTestDescription ("BoolArray_Column"),
758 new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/String.ascx"),
761 static void FieldTemplate_OnLoad_3 (Page p)
763 var lc = p.FindControl ("ListView3") as ListView;
764 Assert.IsNotNull (lc, "#A1");
767 foreach (var entry in fieldTemplateNonDefaultShortColumns) {
768 string columnName = entry.ColumnName;
769 var dc = lc.FindChild<PokerDynamicControl> (columnName);
770 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
771 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
773 var templateControl = dc.FieldTemplate;
774 var template = templateControl as FieldTemplateUserControl;
776 Assert.IsNull (templateControl, String.Format ("#B{0}-3 ({1})", counter, columnName));
777 Assert.IsNull (template, String.Format ("#B{0}-4 ({1})", counter, columnName));
779 Assert.IsNotNull (templateControl, String.Format ("#B{0}-5 ({1})", counter, columnName));
780 Assert.IsNotNull (template, String.Format ("#B{0}-6 ({1})", counter, columnName));
781 Assert.AreEqual (entry.ControlVirtualPath, template.AppRelativeVirtualPath, String.Format ("#B{0}-7 ({1})", counter, columnName));
791 var test = new WebTest ("ListView_DynamicControl_01.aspx");
792 test.Invoker = PageInvoker.CreateOnLoad (Table_OnLoad);
794 Assert.IsNotNull (test.Response, "#X1");
795 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
796 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
797 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
800 static void Table_OnLoad (Page p)
802 var lc = p.FindControl ("ListView1") as ListView;
803 Assert.IsNotNull (lc, "#A1");
805 var dc = lc.FindChild<DynamicControl> ("FirstName");
806 Assert.IsNotNull (dc, "#A1-1");
807 Assert.IsNotNull (dc.Table, "#B1");
809 // Safe not to check for GetModel's return value - it throws if model isn't found, same
811 MetaTable table = MetaModel.GetModel (typeof (EmployeesDataContext)).GetTable ("EmployeeTable");
812 Assert.AreEqual (table, dc.Table, "#B1-1");
813 Assert.AreEqual (dc.Table, dc.Column.Table, "#B1-2");
817 public void UIHint ()
819 var test = new WebTest ("ListView_DynamicControl_01.aspx");
820 test.Invoker = PageInvoker.CreateOnLoad (UIHint_OnLoad);
822 Assert.IsNotNull (test.Response, "#X1");
823 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
824 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
825 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
827 Assert.IsTrue (p.IndexOf ("<span class=\"field\">LastName</span>: <span class=\"customFieldTemplate\">") != -1, "#Y1");
828 Assert.IsTrue (p.IndexOf ("<span class=\"field\">FirstName</span>: <span class=\"defaultTemplate\">") != -1, "#Y1-1");
831 static void UIHint_OnLoad (Page p)
833 var lc = p.FindControl ("ListView1") as ListView;
834 Assert.IsNotNull (lc, "#A1");
836 var dc = lc.FindChild<DynamicControl> ("FirstName");
837 Assert.IsNotNull (dc, "#B1");
838 Assert.AreEqual ("FirstName", dc.DataField, "#B1-1");
840 // Changes below won't affect rendering - we're being called too late in the process
841 // This is just to test if the property is settable, what are the defaults and whether
842 // they can be overriden
844 // No UIHint attribute on the associated field, no explicit setting
845 Assert.AreEqual (String.Empty, dc.UIHint, "#C1");
846 dc.UIHint = "MyCustomUIHintTemplate_Text";
847 Assert.AreEqual ("MyCustomUIHintTemplate_Text", dc.UIHint, "#C1-1");
849 dc = lc.FindChild<DynamicControl> ("LastName");
850 Assert.IsNotNull (dc, "#D1");
851 Assert.AreEqual ("LastName", dc.DataField, "#D1-1");
853 // UIHint attribute found on the associated field
854 Assert.AreEqual ("CustomFieldTemplate", dc.UIHint, "#D1-2");
855 dc.UIHint = "MyCustomUIHintTemplate_Text";
856 Assert.AreEqual ("MyCustomUIHintTemplate_Text", dc.UIHint, "#D1-3");
860 public void UIHint_1 ()
862 var test = new WebTest ("ListView_DynamicControl_02.aspx");
863 test.Invoker = PageInvoker.CreateOnLoad (UIHint_OnLoad_1);
865 Assert.IsNotNull (test.Response, "#X1");
866 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
867 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
868 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
870 Assert.IsTrue (p.IndexOf ("<span class=\"field\">LastName</span>: <span class=\"myCustomUIHintTemplate_Text\">") != -1, "#Y1");
871 Assert.IsTrue (p.IndexOf ("<span class=\"field\">FirstName</span>: <span class=\"defaultTemplate\">") != -1, "#Y1-1");
874 static void UIHint_OnLoad_1 (Page p)
876 var lc = p.FindControl ("ListView2") as ListView;
877 Assert.IsNotNull (lc, "#A1");
879 var dc = lc.FindChild<DynamicControl> ("FirstName2");
880 Assert.IsNotNull (dc, "#B1");
881 Assert.AreEqual ("FirstName", dc.DataField, "#B1-1");
883 // No UIHint attribute on the associated field, no explicit setting
884 Assert.AreEqual (String.Empty, dc.UIHint, "#C1");
886 dc = lc.FindChild<DynamicControl> ("LastName2");
887 Assert.IsNotNull (dc, "#D1");
888 Assert.AreEqual ("LastName", dc.DataField, "#D1-1");
890 // UIHint attribute found on the associated field but overriden in the page
891 Assert.AreEqual ("MyCustomUIHintTemplate_Text", dc.UIHint, "#D1-2");