2 // FieldTemplateFactoryTest.cs
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;
61 using MonoTests.ModelProviders;
63 using MetaModel = System.Web.DynamicData.MetaModel;
64 using MetaTable = System.Web.DynamicData.MetaTable;
66 namespace MonoTests.System.Web.DynamicData
69 public class FieldTemplateFactoryTest
71 DynamicDataContainerModelProvider<TestDataContext> dynamicModelProvider;
76 Type type = GetType ();
77 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx", "ListView_DynamicControl_01.aspx");
78 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx.cs", "ListView_DynamicControl_01.aspx.cs");
79 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_03.aspx", "ListView_DynamicControl_03.aspx");
80 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_03.aspx.cs", "ListView_DynamicControl_03.aspx.cs");
81 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_04.aspx", "ListView_DynamicControl_04.aspx");
82 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_04.aspx.cs", "ListView_DynamicControl_04.aspx.cs");
83 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_09.aspx", "ListView_DynamicControl_09.aspx");
84 WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_09.aspx.cs", "ListView_DynamicControl_09.aspx.cs");
86 dynamicModelProvider = new DynamicDataContainerModelProvider<TestDataContext> ();
87 Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
91 public void TearDown ()
93 FieldTemplatePathTables.CleanUp_FullTypeNameTemplates ();
94 FieldTemplatePathTables.CleanUp_ShortTypeNameTemplates ();
99 public void PerTestSetUp ()
101 // This is ran before every test
102 FieldTemplatePathTables.CleanUp_FullTypeNameTemplates ();
103 FieldTemplatePathTables.CleanUp_ShortTypeNameTemplates ();
107 public void Defaults ()
109 var ftf = new FieldTemplateFactory ();
111 Assert.AreEqual (null, ftf.Model, "#A1");
112 Assert.AreEqual ("FieldTemplates/", ftf.TemplateFolderVirtualPath, "#A2");
116 public void Defaults_Initialized ()
118 MetaModel m = Utils.CommonInitialize ();
119 var ftf = new FieldTemplateFactory ();
120 string origFolderPath = ftf.TemplateFolderVirtualPath;
122 // It seems the ftf.TemplateFolderVirtualPath call above initializes the property to the
123 // "non-prefixed" value and all subsequent requests will return that value instead of one
124 // prefixed with the model's path. That's why we need to recreate ftf here.
125 ftf = new FieldTemplateFactory ();
127 Assert.AreEqual (m, ftf.Model, "#A1");
128 Assert.AreEqual (VirtualPathUtility.Combine (m.DynamicDataFolderVirtualPath, origFolderPath), ftf.TemplateFolderVirtualPath, "#A2");
132 public void BuildVirtualPath ()
134 MetaModel m = Utils.CommonInitialize ();
135 MetaTable t = m.Tables[TestDataContext.TableBaz];
136 MetaColumn mc = t.GetColumn ("Column1");
138 var ftf = new FieldTemplateFactory ();
139 AssertExtensions.Throws<ArgumentNullException> (() => {
140 ftf.BuildVirtualPath (null, mc, DataBoundControlMode.ReadOnly);
143 AssertExtensions.Throws<ArgumentNullException> (() => {
144 ftf.BuildVirtualPath (String.Empty, mc, DataBoundControlMode.ReadOnly);
147 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer.ascx.ascx", ftf.BuildVirtualPath ("Integer.ascx", mc, DataBoundControlMode.ReadOnly), "#B1");
148 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer.ascx", ftf.BuildVirtualPath ("Integer", mc, DataBoundControlMode.ReadOnly), "#B2");
149 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer_Edit.ascx", ftf.BuildVirtualPath ("Integer", mc, DataBoundControlMode.Edit), "#B3");
150 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer_Insert.ascx", ftf.BuildVirtualPath ("Integer", mc, DataBoundControlMode.Insert), "#B4");
151 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "NoSuchTemplate.ascx", ftf.BuildVirtualPath ("NoSuchTemplate", mc, DataBoundControlMode.ReadOnly), "#B5");
152 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer.ascx", ftf.BuildVirtualPath ("Integer", null, DataBoundControlMode.ReadOnly), "#B6");
153 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer.ascx", ftf.BuildVirtualPath ("Integer", mc, (DataBoundControlMode)10), "#B7");
157 public void BuildVirtualPath_1 ()
159 MetaModel m = Utils.CommonInitialize ();
160 MetaTable t = m.Tables[TestDataContext.TableBaz];
161 MetaColumn mc = t.GetColumn ("CustomUIHintColumn");
163 var ftf = new FieldTemplateFactory ();
165 // It seems MetaColumn.UIHint is ignored (or rather it suggests that column is not used at all)
166 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Test.ascx", ftf.BuildVirtualPath ("Test", mc, DataBoundControlMode.ReadOnly), "#A1");
170 public void CreateFieldTemplate ()
172 // This test is (sort of) bogus as the .NET code completely falls apart when invoked outside
173 // real web request environment. Talk about code testability...
175 // Most of the exceptions thrown below come from methods other than CreateFieldTemplate
176 MetaModel m = Utils.CommonInitialize ();
177 MetaTable t = m.Tables[TestDataContext.TableBaz];
178 MetaColumn mc = t.GetColumn ("Column1");
180 var ftf = new FieldTemplateFactory ();
182 // And here we go again...
183 AssertExtensions.Throws<NullReferenceException> (() => {
184 ftf.CreateFieldTemplate (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
188 // Not going to emulate those on Mono. There are limits...
191 AssertExtensions.Throws<NullReferenceException> (() => {
192 ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, null);
196 AssertExtensions.Throws<NullReferenceException> (() => {
197 ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, String.Empty);
201 AssertExtensions.Throws<NullReferenceException> (() => {
202 ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
208 public void CreateFieldTemplate_2 ()
210 var test = new WebTest ("ListView_DynamicControl_01.aspx");
211 test.Invoker = PageInvoker.CreateOnLoad (CreateFieldTemplate_OnLoad_2);
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");
219 static void CreateFieldTemplate_OnLoad_2 (Page p)
221 MetaModel m = MetaModel.Default;
222 MetaTable t = m.GetTable ("EmployeeTable");
223 MetaColumn mc = t.GetColumn ("FirstName");
225 var ftf = new FieldTemplateFactory ();
227 // Without this, the class will fail miserably by passing invalid virtual path to internal .NET's
228 // mapping routines...
230 IFieldTemplate template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, null);
231 Assert.IsNotNull (template, "#A1");
233 var ftuc = template as FieldTemplateUserControl;
234 Assert.IsNotNull (ftuc, "#A2");
235 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftuc.AppRelativeVirtualPath, "#A2-1");
237 template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "Boolean");
238 Assert.IsNotNull (template, "#B1");
240 ftuc = template as FieldTemplateUserControl;
241 Assert.IsNotNull (ftuc, "#B2");
242 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftuc.AppRelativeVirtualPath, "#B2-2");
244 template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
245 Assert.IsNotNull (template, "#D1");
246 ftuc = template as FieldTemplateUserControl;
247 Assert.IsNotNull (ftuc, "#D2");
248 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftuc.AppRelativeVirtualPath, "#D2-2");
250 template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "MyCustomUIHintTemplate_Text");
251 Assert.IsNotNull (template, "#E1");
253 ftuc = template as FieldTemplateUserControl;
254 Assert.IsNotNull (ftuc, "#E2");
255 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "MyCustomUIHintTemplate_Text.ascx", ftuc.AppRelativeVirtualPath, "#E2-2");
257 mc = t.GetColumn ("FavoriteColor");
258 AssertExtensions.Throws<HttpException> (() => {
259 template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "PlainControlTemplate");
262 mc = t.GetColumn ("FavoriteColor");
263 template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "CustomColor");
264 Assert.IsNotNull (template, "#G1");
265 ftuc = template as FieldTemplateUserControl;
266 Assert.IsNotNull (ftuc, "#G2");
267 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "CustomColor.ascx", ftuc.AppRelativeVirtualPath, "#G2-2");
271 public void GetFieldTemplateVirtualPath ()
273 // This test is (sort of) bogus as the .NET code completely falls apart when invoked outside
274 // real web request environment. Talk about code testability...
276 // Most of the exceptions thrown below come from methods other than CreateFieldTemplate
277 MetaModel m = Utils.CommonInitialize ();
278 MetaTable t = m.Tables[TestDataContext.TableBaz];
279 MetaColumn mc = t.GetColumn ("Column1");
281 var ftf = new FieldTemplateFactory ();
283 // And here we go again...
284 AssertExtensions.Throws<NullReferenceException> (() => {
285 ftf.GetFieldTemplateVirtualPath (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
290 AssertExtensions.Throws<NullReferenceException> (() => {
291 ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
295 AssertExtensions.Throws<NullReferenceException> (() => {
296 ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty);
300 AssertExtensions.Throws<NullReferenceException> (() => {
301 ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
307 public void GetFieldTemplateVirtualPath_02 ()
309 var test = new WebTest ("ListView_DynamicControl_01.aspx");
310 test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_02);
312 Assert.IsNotNull (test.Response, "#X1");
313 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
314 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
315 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
318 static void GetFieldTemplateVirtualPath_OnLoad_02 (Page p)
320 MetaModel m = MetaModel.Default;
321 MetaTable t = m.GetTable ("EmployeeTable");
322 MetaColumn mc = t.GetColumn ("FirstName");
324 var ftf = new FieldTemplateFactory ();
326 // Without this, the class will fail miserably by passing invalid virtual path to internal .NET's
327 // mapping routines...
329 string templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
330 Assert.IsFalse (String.IsNullOrEmpty (templatePath), "#A1");
331 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#A1-1");
333 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean");
334 Assert.IsNotNull (templatePath, "#B1");
335 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", templatePath, "#B1-2");
337 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
338 Assert.IsNotNull (templatePath, "#D1");
339 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#D1-2");
341 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "MyCustomUIHintTemplate_Text");
342 Assert.IsNotNull (templatePath, "#E1");
343 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "MyCustomUIHintTemplate_Text.ascx", templatePath, "#E1-2");
345 mc = t.GetColumn ("LastName");
346 Assert.AreEqual ("CustomFieldTemplate", mc.UIHint, "#F1");
347 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
348 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#F1-1");
350 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "CustomFieldTemplate");
351 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "CustomFieldTemplate.ascx", templatePath, "#F2");
355 public void GetFieldTemplateVirtualPath_03 ()
357 var test = new WebTest ("ListView_DynamicControl_09.aspx");
358 test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_03);
360 Assert.IsNotNull (test.Response, "#X1");
361 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
362 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
363 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
366 static void GetFieldTemplateVirtualPath_OnLoad_03 (Page p)
368 MetaModel m = MetaModel.Default;
369 MetaTable t = m.GetTable ("AssociatedFooTable");
370 MetaColumn mc = t.GetColumn ("PrimaryKeyColumn2");
372 Assert.AreEqual (typeof (MetaChildrenColumn), mc.GetType (), "#A1");
374 var ftf = new FieldTemplateFactory ();
377 string templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Text.ascx");
378 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#A2");
380 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
381 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Children.ascx", templatePath, "#A3");
383 // When MetaColumn.DataTypeAttribute is not null (which will always be the case for string columns), column type is ignored
384 mc = t.GetColumn ("ForeignKeyColumn1");
385 Assert.AreEqual (typeof (MetaForeignKeyColumn), mc.GetType (), "#B1");
386 Assert.IsNotNull (mc.DataTypeAttribute, "#B1-1");
388 ftf = new FieldTemplateFactory ();
391 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Text.ascx");
392 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#B2");
394 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
395 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#B3");
397 mc = t.GetColumn ("ForeignKeyColumn2");
398 Assert.AreEqual (typeof (MetaForeignKeyColumn), mc.GetType (), "#C1");
399 Assert.IsNull (mc.DataTypeAttribute, "#C1-1");
401 ftf = new FieldTemplateFactory ();
404 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Text.ascx");
405 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#C2");
407 templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
408 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "ForeignKey.ascx", templatePath, "#C3");
412 public void GetFieldTemplateVirtualPath_04 ()
414 var test = new WebTest ("ListView_DynamicControl_03.aspx");
415 test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_04);
417 Assert.IsNotNull (test.Response, "#X1");
418 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
419 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
420 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
423 static void GetFieldTemplateVirtualPath_OnLoad_04 (Page p)
425 var lc = p.FindControl ("ListView3") as ListView;
426 Assert.IsNotNull (lc, "#A1");
429 var ftf = new FieldTemplateFactory ();
430 ftf.Initialize (MetaModel.Default);
432 foreach (var entry in FieldTemplatePathTables.FieldTemplateReadOnlyColumns) {
433 string columnName = entry.ColumnName;
434 var dc = lc.FindChild<PokerDynamicControl> (columnName);
435 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
436 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
438 string path = ftf.GetFieldTemplateVirtualPath (dc.Column, DataBoundControlMode.ReadOnly, null);
440 Assert.IsNull (path, String.Format ("#B{0}-3 ({1})", counter, columnName));
442 Assert.IsNotNull (path, String.Format ("#B{0}-4 ({1})", counter, columnName));
443 Assert.AreEqual (entry.ControlVirtualPath, path, String.Format ("#B{0}-5 ({1})", counter, columnName));
451 public void GetFieldTemplateVirtualPath_05 ()
453 var test = new WebTest ("ListView_DynamicControl_04.aspx");
457 var delegates = new PageDelegates ();
458 delegates.PreRenderComplete = GetFieldTemplateVirtualPath_OnPreRenderComplete_05;
459 test.Invoker = new PageInvoker (delegates);
460 var fr = new FormRequest (test.Response, "form1");
462 fr.Controls.Add ("ListView4$ctrl0$editMe");
463 fr.Controls["ListView4$ctrl0$editMe"].Value = "Edit";
465 fr.Controls.Add ("ListView4$ctl01$editMe");
466 fr.Controls["ListView4$ctl01$editMe"].Value = "Edit";
471 Assert.IsNotNull (test.Response, "#X1");
472 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
473 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
474 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
477 static void GetFieldTemplateVirtualPath_OnPreRenderComplete_05 (Page p)
479 var lc = p.FindControl ("ListView4") as ListView;
480 Assert.IsNotNull (lc, "#A1");
482 var ftf = new FieldTemplateFactory ();
483 ftf.Initialize (MetaModel.Default);
485 foreach (var entry in FieldTemplatePathTables.FieldTemplateEditColumns) {
486 string columnName = entry.ColumnName;
487 var dc = lc.FindChild<PokerDynamicControl> (columnName);
488 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
489 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
491 string path = ftf.GetFieldTemplateVirtualPath (dc.Column, DataBoundControlMode.Edit, null);
493 Assert.IsNull (path, String.Format ("#B{0}-3 ({1})", counter, columnName));
495 Assert.IsNotNull (path, String.Format ("#B{0}-4 ({1})", counter, columnName));
496 Assert.AreEqual (entry.ControlVirtualPath, path, String.Format ("#B{0}-5 ({1})", counter, columnName));
503 // This tests full type name templates
505 public void GetFieldTemplateVirtualPath_06 ()
507 FieldTemplatePathTables.SetUp_FullTypeNameTemplates (this);
508 var test = new WebTest ("ListView_DynamicControl_03.aspx");
509 test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_06);
511 Assert.IsNotNull (test.Response, "#X1");
512 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
513 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
514 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
517 static void GetFieldTemplateVirtualPath_OnLoad_06 (Page p)
519 var lc = p.FindControl ("ListView3") as ListView;
520 Assert.IsNotNull (lc, "#A1");
522 var ftf = new FieldTemplateFactory ();
523 ftf.Initialize (MetaModel.Default);
525 foreach (var entry in FieldTemplatePathTables.FieldTemplateNonDefaultColumns) {
526 string columnName = entry.ColumnName;
527 var dc = lc.FindChild<PokerDynamicControl> (columnName);
528 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
529 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
531 string path = ftf.GetFieldTemplateVirtualPath (dc.Column, DataBoundControlMode.ReadOnly, null);
533 Assert.IsNull (path, String.Format ("#B{0}-3 ({1})", counter, columnName));
535 Assert.IsNotNull (path, String.Format ("#B{0}-4 ({1})", counter, columnName));
536 Assert.AreEqual (entry.ControlVirtualPath, path, String.Format ("#B{0}-5 ({1})", counter, columnName));
543 // This tests short type name templates
545 public void GetFieldTemplateVirtualPath_07 ()
547 FieldTemplatePathTables.SetUp_ShortTypeNameTemplates (this);
548 var test = new WebTest ("ListView_DynamicControl_03.aspx");
549 test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_07);
551 Assert.IsNotNull (test.Response, "#X1");
552 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
553 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
554 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
557 static void GetFieldTemplateVirtualPath_OnLoad_07 (Page p)
559 var lc = p.FindControl ("ListView3") as ListView;
560 Assert.IsNotNull (lc, "#A1");
562 var ftf = new FieldTemplateFactory ();
563 ftf.Initialize (MetaModel.Default);
565 foreach (var entry in FieldTemplatePathTables.FieldTemplateNonDefaultShortColumns) {
566 string columnName = entry.ColumnName;
567 var dc = lc.FindChild<PokerDynamicControl> (columnName);
568 Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
569 Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
571 string path = ftf.GetFieldTemplateVirtualPath (dc.Column, DataBoundControlMode.ReadOnly, null);
573 Assert.IsNull (path, String.Format ("#B{0}-3 ({1})", counter, columnName));
575 Assert.IsNotNull (path, String.Format ("#B{0}-4 ({1})", counter, columnName));
576 Assert.AreEqual (entry.ControlVirtualPath, path, String.Format ("#B{0}-5 ({1})", counter, columnName));
584 public void GetFieldTemplateVirtualPath_08 ()
586 var test = new WebTest ("ListView_DynamicControl_09.aspx");
587 test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_08);
589 Assert.IsNotNull (test.Response, "#X1");
590 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
591 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
592 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
595 static void GetFieldTemplateVirtualPath_OnLoad_08 (Page p)
597 MetaModel m = MetaModel.Default;
598 MetaTable t = m.GetTable ("AssociatedFooTable");
599 MetaColumn mc = t.GetColumn ("PrimaryKeyColumn2");
601 var ftf = new FieldTemplateFactory ();
605 AssertExtensions.Throws<NullReferenceException> (() => {
606 ftf.GetFieldTemplateVirtualPath (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
610 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Children.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#A2");
611 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Children.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#A3");
612 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate"), "#A4");
616 public void GetFieldTemplateVirtualPath_09 ()
618 var test = new WebTest ("ListView_DynamicControl_09.aspx");
619 test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_09);
621 Assert.IsNotNull (test.Response, "#X1");
622 Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
623 Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
624 Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
627 static void GetFieldTemplateVirtualPath_OnLoad_09 (Page p)
629 MetaModel m = MetaModel.Default;
630 MetaTable t = m.GetTable ("BazWithDataTypeAttributeTable");
631 MetaColumn mc = t.GetColumn ("CustomColumn1");
633 var ftf = new FieldTemplateFactory ();
637 // It appears that DataTypeAttribute's custom type name is passed to BuildVirtualPath
638 AssertExtensions.Throws<InvalidOperationException> (() => {
639 string path = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
642 AssertExtensions.Throws<InvalidOperationException> (() => {
643 string path = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
645 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#A1-2");
647 // Custom with UIHint attribute
648 mc = t.GetColumn ("CustomColumn2");
649 Assert.IsNotNull (mc.UIHint, "#A2");
650 Assert.Greater (mc.UIHint.Length, 0, "#A2-1");
652 // Proves that UIHint on the column is not used, just the uiHint argument
653 AssertExtensions.Throws<InvalidOperationException> (() => {
654 string path = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
657 AssertExtensions.Throws<InvalidOperationException> (() => {
658 string path = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
661 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#A2-4");
663 mc = t.GetColumn ("CustomColumn3");
664 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#A3");
665 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate"), "#A3-1");
666 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#A3-2");
667 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#A3-3");
669 // Custom with UIHint attribute
670 mc = t.GetColumn ("CustomColumn4");
671 Assert.IsNotNull (mc.UIHint, "#A4");
672 Assert.Greater (mc.UIHint.Length, 0, "#A4-1");
674 // Proves that UIHint on the column is not used, just the uiHint argument
675 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#A4-2");
676 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate"), "#A4-3");
677 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#A4-4");
678 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#A4-5");
681 mc = t.GetColumn ("DateTimeColumn1");
682 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#B1");
683 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#B1-1");
684 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#B1-2");
685 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#B1-3");
687 mc = t.GetColumn ("DateTimeColumn2");
688 Assert.IsNotNull (mc.UIHint, "#B2");
689 Assert.Greater (mc.UIHint.Length, 0, "#B2-1");
690 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#B2-3");
691 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#B2-4");
692 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#B2-5");
693 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#B2-6");
695 // Date -> maps to Text.ascx, regardless of underlying type and uiHint passed
696 mc = t.GetColumn ("DateColumn1");
697 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C1");
698 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C1-1");
699 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C1-2");
700 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C1-3");
702 mc = t.GetColumn ("DateColumn2");
703 Assert.IsNotNull (mc.UIHint, "#C2");
704 Assert.Greater (mc.UIHint.Length, 0, "#C2-1");
705 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C2-3");
706 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C2-4");
707 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C2-5");
708 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C2-6");
710 mc = t.GetColumn ("DateColumn3");
711 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C3");
712 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C3-1");
713 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C3-2");
714 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C3-3");
716 mc = t.GetColumn ("DateColumn4");
717 Assert.IsNotNull (mc.UIHint, "#C4");
718 Assert.Greater (mc.UIHint.Length, 0, "#C4-1");
719 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C4-3");
720 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C4-4");
721 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C4-5");
722 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C4-6");
725 mc = t.GetColumn ("TimeColumn1");
726 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#D1");
727 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#D1-1");
728 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#D1-2");
729 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#D1-3");
731 mc = t.GetColumn ("TimeColumn2");
732 Assert.IsNotNull (mc.UIHint, "#D2");
733 Assert.Greater (mc.UIHint.Length, 0, "#D2-1");
734 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#D2-3");
735 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#D2-4");
736 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#D2-5");
737 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#D2-6");
740 mc = t.GetColumn ("DurationColumn1");
741 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#E1");
742 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#E1-1");
743 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#E1-2");
744 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#E1-3");
746 mc = t.GetColumn ("DurationColumn2");
747 Assert.IsNotNull (mc.UIHint, "#E2");
748 Assert.Greater (mc.UIHint.Length, 0, "#E2-1");
749 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#E2-3");
750 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#E2-4");
751 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#E2-5");
752 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#E2-6");
755 mc = t.GetColumn ("PhoneNumberColumn1");
756 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#F1");
757 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#F1-1");
758 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#F1-2");
759 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#F1-3");
761 mc = t.GetColumn ("PhoneNumberColumn2");
762 Assert.IsNotNull (mc.UIHint, "#F2");
763 Assert.Greater (mc.UIHint.Length, 0, "#F2-1");
764 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#F2-3");
765 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#F2-4");
766 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#F2-5");
767 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#F2-6");
770 mc = t.GetColumn ("CurrencyColumn1");
771 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#G1");
772 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#G1-1");
773 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#G1-2");
774 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#G1-3");
776 mc = t.GetColumn ("CurrencyColumn2");
777 Assert.IsNotNull (mc.UIHint, "#G2");
778 Assert.Greater (mc.UIHint.Length, 0, "#G2-1");
779 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#G2-3");
780 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#G2-4");
781 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#G2-5");
782 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#G2-6");
785 mc = t.GetColumn ("TextColumn1");
786 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#H1");
787 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#H1-1");
788 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#H1-2");
789 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#H1-3");
791 mc = t.GetColumn ("TextColumn2");
792 Assert.IsNotNull (mc.UIHint, "#H2");
793 Assert.Greater (mc.UIHint.Length, 0, "#H2-1");
794 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#H2-3");
795 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#H2-4");
796 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#H2-5");
797 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#H2-6");
800 mc = t.GetColumn ("HtmlColumn1");
801 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#I1");
802 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#I1-1");
803 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#I1-2");
804 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#I1-3");
806 mc = t.GetColumn ("HtmlColumn2");
807 Assert.IsNotNull (mc.UIHint, "#I2");
808 Assert.Greater (mc.UIHint.Length, 0, "#I2-1");
809 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#I2-3");
810 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#I2-4");
811 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#I2-5");
812 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#I2-6");
815 mc = t.GetColumn ("MultilineTextColumn1");
816 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#J1");
817 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#J1-1");
818 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#J1-2");
819 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#J1-3");
821 mc = t.GetColumn ("MultilineTextColumn2");
822 Assert.IsNotNull (mc.UIHint, "#J2");
823 Assert.Greater (mc.UIHint.Length, 0, "#J2-1");
824 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#J2-3");
825 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#J2-4");
826 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#J2-5");
827 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#J2-6");
830 mc = t.GetColumn ("EmailAddressColumn1");
831 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#K1");
832 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#K1-1");
833 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#K1-2");
834 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#K1-3");
836 mc = t.GetColumn ("EmailAddressColumn2");
837 Assert.IsNotNull (mc.UIHint, "#K2");
838 Assert.Greater (mc.UIHint.Length, 0, "#K2-1");
839 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#K2-3");
840 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#K2-4");
841 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#K2-5");
842 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#K2-6");
845 mc = t.GetColumn ("PasswordColumn1");
846 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#L1");
847 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#L1-1");
848 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#L1-2");
849 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#L1-3");
851 mc = t.GetColumn ("PasswordColumn2");
852 Assert.IsNotNull (mc.UIHint, "#L2");
853 Assert.Greater (mc.UIHint.Length, 0, "#L2-1");
854 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#L2-3");
855 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#L2-4");
856 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#L2-5");
857 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#L2-6");
860 mc = t.GetColumn ("UrlColumn1");
861 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#M1");
862 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#M1-1");
863 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#M1-2");
864 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#M1-3");
866 mc = t.GetColumn ("UrlColumn2");
867 Assert.IsNotNull (mc.UIHint, "#M2");
868 Assert.Greater (mc.UIHint.Length, 0, "#M2-1");
869 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#M2-3");
870 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#M2-4");
871 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#M2-5");
872 Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#M2-6");
876 public void Initialize ()
878 MetaModel m = Utils.CommonInitialize ();
880 var ftf = new FieldTemplateFactory ();
881 Assert.IsNull (ftf.Model, "#A1");
883 ftf.Initialize (null);
884 Assert.IsNull (ftf.Model, "#A2");
887 Assert.IsNotNull (ftf.Model, "#A3");
888 Assert.AreEqual (m, ftf.Model, "#A3-1");
894 MetaModel m = Utils.CommonInitialize ();
896 var ftf = new FieldTemplateFactory ();
897 Assert.IsNull (ftf.Model, "#A1");
899 ftf.Initialize (null);
900 Assert.IsNull (ftf.Model, "#A2");
903 Assert.IsNotNull (ftf.Model, "#A3");
904 Assert.AreEqual (m, ftf.Model, "#A3-1");
908 public void PreprocessMode ()
910 MetaModel m = Utils.CommonInitialize ();
911 MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
912 MetaColumn mc = t.GetColumn ("Column1");
914 var ftf = new FieldTemplateFactory ();
917 AssertExtensions.Throws<NullReferenceException> (() => {
918 ftf.PreprocessMode (null, DataBoundControlMode.ReadOnly);
921 var mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
922 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#A2");
924 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
925 Assert.AreEqual (DataBoundControlMode.Insert, mode, "#A2-1");
927 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
928 Assert.AreEqual (DataBoundControlMode.Edit, mode, "#A2-2");
930 mc = t.GetColumn ("PrimaryKeyColumn1");
931 mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
932 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#B1");
934 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
935 Assert.AreEqual (DataBoundControlMode.Insert, mode, "#B1-1");
937 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
938 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#B1-2");
940 t = m.Tables[TestDataContext.TableAssociatedFoo];
941 mc = t.GetColumn ("ForeignKeyColumn1");
943 Assert.AreEqual (true, mc.IsForeignKeyComponent, "#C1");
944 mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
945 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#C1-1");
947 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
948 Assert.AreEqual (DataBoundControlMode.Insert, mode, "#C1-2");
950 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
951 Assert.AreEqual (DataBoundControlMode.Edit, mode, "#C1-3");
953 t = m.Tables[TestDataContext.TableBaz];
954 mc = t.GetColumn ("GeneratedColumn1");
956 Assert.AreEqual (true, mc.IsGenerated, "#D1");
957 mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
958 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-1");
960 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
961 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-2");
963 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
964 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-3");
966 t = m.Tables[TestDataContext.TableAssociatedFoo];
967 mc = t.GetColumn ("PrimaryKeyColumn1");
969 Assert.AreEqual (true, mc.IsForeignKeyComponent, "#D1");
970 Assert.AreEqual (true, mc.IsPrimaryKey, "#D1-1");
971 mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
972 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-2");
974 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
975 Assert.AreEqual (DataBoundControlMode.Insert, mode, "#D1-3");
977 mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
978 Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-4");
982 public void TemplateFolderVirtualPath ()
984 MetaModel m = Utils.CommonInitialize ();
985 var ftf = new FieldTemplateFactory ();
986 string origFolderPath = ftf.TemplateFolderVirtualPath;
988 ftf = new FieldTemplateFactory ();
990 Assert.AreEqual ("FieldTemplates/", ftf.TemplateFolderVirtualPath, "#A1");
991 ftf.TemplateFolderVirtualPath = "MyFolder";
992 Assert.AreEqual ("MyFolder/", ftf.TemplateFolderVirtualPath, "#A2");
994 ftf.TemplateFolderVirtualPath = null;
995 Assert.AreEqual ("FieldTemplates/", ftf.TemplateFolderVirtualPath, "#A3");
997 ftf.TemplateFolderVirtualPath = String.Empty;
998 Assert.AreEqual (String.Empty, ftf.TemplateFolderVirtualPath, "#A4");
1001 Assert.AreEqual (String.Empty, ftf.TemplateFolderVirtualPath, "#A5");
1003 ftf.TemplateFolderVirtualPath = "MyFolder";
1004 Assert.AreEqual (m.DynamicDataFolderVirtualPath + "MyFolder/", ftf.TemplateFolderVirtualPath, "#A6");
1006 ftf.TemplateFolderVirtualPath = null;
1007 Assert.AreEqual (m.DynamicDataFolderVirtualPath + "FieldTemplates/", ftf.TemplateFolderVirtualPath, "#A7");
1009 ftf.TemplateFolderVirtualPath = String.Empty;
1010 // Thrown from some internal method - no checks _again_
1011 AssertExtensions.Throws<ArgumentNullException> (() => {
1012 string path = ftf.TemplateFolderVirtualPath;
1015 ftf = new FieldTemplateFactory ();
1016 ftf.TemplateFolderVirtualPath = "MyFolder";
1017 Assert.AreEqual ("MyFolder/", ftf.TemplateFolderVirtualPath, "#B1");
1019 Assert.AreEqual ("MyFolder/", ftf.TemplateFolderVirtualPath, "#B2");
1021 ftf = new FieldTemplateFactory ();
1023 Assert.AreEqual (m.DynamicDataFolderVirtualPath + origFolderPath, ftf.TemplateFolderVirtualPath, "#C1");
1025 ftf.TemplateFolderVirtualPath = "MyFolder";
1026 Assert.AreEqual (m.DynamicDataFolderVirtualPath + "MyFolder/", ftf.TemplateFolderVirtualPath, "#C2");
1028 ftf = new FieldTemplateFactory ();
1030 m.DynamicDataFolderVirtualPath = "~/MyPath";
1031 Assert.AreEqual (m.DynamicDataFolderVirtualPath + "FieldTemplates/", ftf.TemplateFolderVirtualPath, "#D1");
1033 ftf = new FieldTemplateFactory ();
1034 ftf.TemplateFolderVirtualPath = "MyFolder";
1035 Assert.AreEqual ("MyFolder/", ftf.TemplateFolderVirtualPath, "#E1");
1038 m.DynamicDataFolderVirtualPath = "~/MyPath";
1039 Assert.AreEqual ("MyFolder/", ftf.TemplateFolderVirtualPath, "#F1");
1041 ftf = new FieldTemplateFactory ();
1043 ftf.TemplateFolderVirtualPath = String.Empty;
1045 AssertExtensions.Throws<ArgumentNullException> (() => {
1046 string path = ftf.TemplateFolderVirtualPath;