static void CreateFieldTemplate_OnLoad_2 (Page p)
		{
			MetaModel m = MetaModel.Default;
			MetaTable t = m.GetTable ("EmployeeTable");
			MetaColumn mc = t.GetColumn ("FirstName");

			var ftf = new FieldTemplateFactory ();

			// Without this, the class will fail miserably by passing invalid virtual path to internal .NET's
			// mapping routines...
			ftf.Initialize (m);
			IFieldTemplate template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, null);
			Assert.IsNotNull (template, "#A1");

			var ftuc = template as FieldTemplateUserControl;
			Assert.IsNotNull (ftuc, "#A2");
			Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftuc.AppRelativeVirtualPath, "#A2-1");

			template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "Boolean");
			Assert.IsNotNull (template, "#B1");

			ftuc = template as FieldTemplateUserControl;
			Assert.IsNotNull (ftuc, "#B2");
			Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftuc.AppRelativeVirtualPath, "#B2-2");

			template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
			Assert.IsNotNull (template, "#D1");
			ftuc = template as FieldTemplateUserControl;
			Assert.IsNotNull (ftuc, "#D2");
			Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftuc.AppRelativeVirtualPath, "#D2-2");

			template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "MyCustomUIHintTemplate_Text");
			Assert.IsNotNull (template, "#E1");

			ftuc = template as FieldTemplateUserControl;
			Assert.IsNotNull (ftuc, "#E2");
			Assert.AreEqual (ftf.TemplateFolderVirtualPath + "MyCustomUIHintTemplate_Text.ascx", ftuc.AppRelativeVirtualPath, "#E2-2");

			mc = t.GetColumn ("FavoriteColor");
			AssertExtensions.Throws<HttpException> (() => {
				template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "PlainControlTemplate");
			}, "#F1");

			mc = t.GetColumn ("FavoriteColor");
			template = ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "CustomColor");
			Assert.IsNotNull (template, "#G1");
			ftuc = template as FieldTemplateUserControl;
			Assert.IsNotNull (ftuc, "#G2");
			Assert.AreEqual (ftf.TemplateFolderVirtualPath + "CustomColor.ascx", ftuc.AppRelativeVirtualPath, "#G2-2");
		}
		public void CreateFieldTemplate ()
		{
			// This test is (sort of) bogus as the .NET code completely falls apart when invoked outside
			// real web request environment. Talk about code testability...
			//
			// Most of the exceptions thrown below come from methods other than CreateFieldTemplate
			MetaModel m = Utils.CommonInitialize ();
			MetaTable t = m.Tables[TestDataContext.TableBaz];
			MetaColumn mc = t.GetColumn ("Column1");

			var ftf = new FieldTemplateFactory ();

			// And here we go again...
			AssertExtensions.Throws<NullReferenceException> (() => {
				ftf.CreateFieldTemplate (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
			}, "#A1");

#if TARGET_DOTNET
			// Not going to emulate those on Mono. There are limits...

			// ...and again
			AssertExtensions.Throws<NullReferenceException> (() => {
				ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, null);
			}, "#A2");

			// ...and again
			AssertExtensions.Throws<NullReferenceException> (() => {
				ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, String.Empty);
			}, "#A3");

			// ...and again
			AssertExtensions.Throws<NullReferenceException> (() => {
				ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
			}, "#A4");
#endif
		}