+2009-09-15 Marek Habersack <mhabersack@novell.com>
+
+ * DataTypeAttribute.cs: implemented GetDataTypeName
+
2009-06-23 Marek Habersack <mhabersack@novell.com>
* ValidationAttribute.cs: error message must not ever be empty.
public DataType DataType { get; private set; }
public DisplayFormatAttribute DisplayFormat { get; protected set; }
- [MonoTODO]
public virtual string GetDataTypeName ()
{
- throw new NotImplementedException ();
+ DataType dt = DataType;
+ if (dt == DataType.Custom)
+ return CustomDataType;
+
+ return dt.ToString ();
}
[MonoTODO]
+2009-09-15 Marek Habersack <mhabersack@novell.com>
+
+ * Makefile (TEST_RESOURCE_FILES): added
+ Test/WebPages/ListView_DynamicControl_09.aspx and
+ Test/WebPages/ListView_DynamicControl_09.aspx.cs
+
2009-09-10 Marek Habersack <mhabersack@novell.com>
* Makefile (TEST_RESOURCE_FILES): added
Test/WebPages/ListView_DynamicControl_07.aspx.cs,MonoTests.WebPages.ListView_DynamicControl_07.aspx.cs \
Test/WebPages/ListView_DynamicControl_08.aspx,MonoTests.WebPages.ListView_DynamicControl_08.aspx \
Test/WebPages/ListView_DynamicControl_08.aspx.cs,MonoTests.WebPages.ListView_DynamicControl_08.aspx.cs \
+ Test/WebPages/ListView_DynamicControl_09.aspx,MonoTests.WebPages.ListView_DynamicControl_09.aspx \
+ Test/WebPages/ListView_DynamicControl_09.aspx.cs,MonoTests.WebPages.ListView_DynamicControl_09.aspx.cs \
Test/WebPages/Site.css,MonoTests.WebPages.Site.css \
Test/WebPages/Site.master,MonoTests.WebPages.Site.master \
Test/WebPages/Site.master.cs,MonoTests.WebPages.Site.master.cs \
+2009-09-15 Marek Habersack <mhabersack@novell.com>
+
+ * MetaColumn.cs: DataTypeAttribtue created automatically for
+ string columns, must be of type MultilineText for long strings.
+
+ * FieldTemplateFactory.cs: implemented BuildVirtualPath,
+ CreateFieldTemplate, GetFieldTemplateVirtualPath, PreprocessMode
+ and fixed implementation of TemplateFolderVirtualPath.
+
2009-09-10 Marek Habersack <mhabersack@novell.com>
* DynamicControl.cs: implemented several properties.
//
// Author:
// Atsushi Enomoto <atsushi@ximian.com>
+// Marek Habersack <mhabersack@novell.com>
//
-// Copyright (C) 2008 Novell Inc. http://novell.com
+// Copyright (C) 2008-2009 Novell Inc. http://novell.com
//
//
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
using System.Globalization;
+using System.IO;
using System.Security.Permissions;
using System.Security.Principal;
using System.Web.Caching;
using System.Web.Compilation;
+using System.Web.Hosting;
using System.Web.UI.WebControls;
namespace System.Web.DynamicData
public class FieldTemplateFactory : IFieldTemplateFactory
{
const string DEFAULT_TEMPLATE_FOLDER_VIRTUAL_PATH = "FieldTemplates/";
+
+ static readonly Dictionary <Type, Type> typeFallbacks = new Dictionary <Type, Type> () {
+ {typeof (float), typeof (decimal)},
+ {typeof (double), typeof (decimal)},
+ {typeof (short), typeof (int)},
+ {typeof (long), typeof (int)},
+ {typeof (byte), typeof (int)},
+ {typeof (char), typeof (string)},
+ {typeof (int), typeof (string)},
+ {typeof (decimal), typeof (string)},
+ {typeof (Guid), typeof (string)},
+ {typeof (DateTime), typeof (string)},
+ {typeof (DateTimeOffset), typeof (string)},
+ {typeof (TimeSpan), typeof (string)}
+ };
string templateFolderVirtualPath;
+ string userTemplateVirtualPath;
public MetaModel Model { get; private set; }
get {
if (templateFolderVirtualPath == null) {
MetaModel m = Model;
+ string virtualPath = userTemplateVirtualPath == null ? DEFAULT_TEMPLATE_FOLDER_VIRTUAL_PATH : userTemplateVirtualPath;
+
+ if (m != null)
+ templateFolderVirtualPath = VirtualPathUtility.Combine (m.DynamicDataFolderVirtualPath, virtualPath);
+ else
+ templateFolderVirtualPath = virtualPath;
- templateFolderVirtualPath = m != null ?
- m.DynamicDataFolderVirtualPath + DEFAULT_TEMPLATE_FOLDER_VIRTUAL_PATH :
- DEFAULT_TEMPLATE_FOLDER_VIRTUAL_PATH;
+ templateFolderVirtualPath = VirtualPathUtility.AppendTrailingSlash (templateFolderVirtualPath);
}
return templateFolderVirtualPath;
}
set {
- MetaModel m = Model;
-
- if (m != null) {
- if (value == null)
- templateFolderVirtualPath = m.DynamicDataFolderVirtualPath + DEFAULT_TEMPLATE_FOLDER_VIRTUAL_PATH;
- else if (value.Length == 0)
- // "compatibility"
- throw new ArgumentNullException ("value");
- else
- templateFolderVirtualPath = m.DynamicDataFolderVirtualPath + value;
- } else {
- if (value == null)
- templateFolderVirtualPath = DEFAULT_TEMPLATE_FOLDER_VIRTUAL_PATH;
- else
- templateFolderVirtualPath = value;
- }
-
- templateFolderVirtualPath = VirtualPathUtility.AppendTrailingSlash (templateFolderVirtualPath);
+ userTemplateVirtualPath = value;
+ templateFolderVirtualPath = null;
}
}
- [MonoTODO]
public virtual string BuildVirtualPath (string templateName, MetaColumn column, DataBoundControlMode mode)
{
- throw new NotImplementedException ();
+ // Tests show the 'column' parameter is not used here
+
+ if (String.IsNullOrEmpty (templateName))
+ throw new ArgumentNullException ("templateName");
+
+ string basePath = TemplateFolderVirtualPath;
+ string suffix;
+
+ switch (mode) {
+ default:
+ case DataBoundControlMode.ReadOnly:
+ suffix = String.Empty;
+ break;
+
+ case DataBoundControlMode.Edit:
+ suffix = "_Edit";
+ break;
+
+ case DataBoundControlMode.Insert:
+ suffix = "_Insert";
+ break;
+ }
+
+ return basePath + templateName + suffix + ".ascx";
}
- [MonoTODO]
public virtual IFieldTemplate CreateFieldTemplate (MetaColumn column, DataBoundControlMode mode, string uiHint)
{
// NO checks are made on parameters in .NET, but well "handle" the NREX
// throws in the other methods
- DataBoundControlMode newMode = PreprocessMode (column, mode);
- string path = null;
-
- return (IFieldTemplate) BuildManager.CreateInstanceFromVirtualPath (path, typeof (IFieldTemplate));
+ return BuildManager.CreateInstanceFromVirtualPath (GetFieldTemplateVirtualPath (column, mode, uiHint), typeof (IFieldTemplate)) as IFieldTemplate;
}
- [MonoTODO]
public virtual string GetFieldTemplateVirtualPath (MetaColumn column, DataBoundControlMode mode, string uiHint)
{
// NO checks are made on parameters in .NET, but well "handle" the NREX
// throws in the other methods
DataBoundControlMode newMode = PreprocessMode (column, mode);
- throw new NotImplementedException ();
+ string templatePath;
+
+ // The algorithm is as follows:
+ //
+ // 1. If column has a DataTypeAttribute on it, get the data type
+ // - if it's Custom data type, uiHint is used unconditionally
+ // - if it's not a custom type, ignore uiHint and choose template based
+ // on type
+ //
+ // 2. If #1 is false and uiHint is not empty, use uiHint if the template
+ // exists
+ //
+ // 3. If #2 is false, look up type according to the following algorithm:
+ //
+ // 1. lookup column type's full name
+ // 2. if #1 fails, look up short type name
+ // 3. if #2 fails, map type to special type name (Int -> Integer, String
+ // -> Text etc)
+ // 4. if #3 fails, try to find a fallback type
+ // 5. if #4 fails, check if it's a foreign key or child column
+ // 6. if #5 fails, return null
+ //
+ // From: http://msdn.microsoft.com/en-us/library/cc488523.aspx (augmented)
+ //
+
+ DataTypeAttribute attr = column.DataTypeAttribute;
+ bool uiHintPresent = !String.IsNullOrEmpty (uiHint);
+ if (uiHintPresent && uiHint.EndsWith (".ascx", StringComparison.OrdinalIgnoreCase)) {
+ uiHint = uiHint.Substring (0, uiHint.Length - 5);
+ if (uiHint.Length == 0)
+ uiHintPresent = false;
+ }
+
+ templatePath = null;
+ int step = 1;
+ Type columnType = column.ColumnType;
+
+ if (uiHintPresent)
+ step = 0;
+ else if (attr == null && templatePath == null) {
+ if (column is MetaChildrenColumn)
+ templatePath = GetExistingTemplateVirtualPath ("Children", column, mode);
+ else if (column is MetaForeignKeyColumn)
+ templatePath = GetExistingTemplateVirtualPath ("ForeignKey", column, mode);
+ }
+
+ while (step < 6 && templatePath == null) {
+ switch (step) {
+ case 0:
+ templatePath = GetExistingTemplateVirtualPath (uiHint, column, mode);
+ break;
+
+ case 1:
+ if (attr != null)
+ templatePath = GetTemplateForDataType (attr.DataType, attr.GetDataTypeName (), uiHint, column, mode);
+ break;
+
+ case 2:
+ templatePath = GetExistingTemplateVirtualPath (columnType.FullName, column, mode);
+ break;
+
+ case 3:
+ templatePath = GetExistingTemplateVirtualPath (columnType.Name, column, mode);
+ break;
+
+ case 4:
+ templatePath = ColumnTypeToSpecialName (columnType, column, mode);
+ break;
+
+ case 5:
+ columnType = GetFallbackType (columnType, column, mode);
+ if (columnType == null)
+ step = 5;
+ else
+ step = uiHintPresent ? 0 : 1;
+ break;
+ }
+
+ step++;
+ }
+
+ return templatePath;
+ }
+
+ Type GetFallbackType (Type columnType, MetaColumn column, DataBoundControlMode mode)
+ {
+ Type ret;
+ if (typeFallbacks.TryGetValue (columnType, out ret))
+ return ret;
+
+ return null;
+ }
+
+ string ColumnTypeToSpecialName (Type columnType, MetaColumn column, DataBoundControlMode mode)
+ {
+ if (columnType == typeof (int))
+ return GetExistingTemplateVirtualPath ("Integer", column, mode);
+
+ if (columnType == typeof (string))
+ return GetExistingTemplateVirtualPath ("Text", column, mode);
+
+ return null;
+ }
+
+ string GetExistingTemplateVirtualPath (string baseName, MetaColumn column, DataBoundControlMode mode)
+ {
+ string templatePath = BuildVirtualPath (baseName, column, mode);
+ if (String.IsNullOrEmpty (templatePath))
+ return null;
+
+ // TODO: cache positive hits (and watch for removal events on those)
+ string physicalPath = HostingEnvironment.MapPath (templatePath);
+ if (File.Exists (physicalPath))
+ return templatePath;
+
+ return null;
+ }
+
+ string GetTemplateForDataType (DataType dataType, string customDataType, string uiHint, MetaColumn column, DataBoundControlMode mode)
+ {
+ switch (dataType) {
+ case DataType.Custom:
+ string ret;
+ if (!String.IsNullOrEmpty (uiHint))
+ ret = GetExistingTemplateVirtualPath (uiHint, column, mode);
+ else
+ ret = null;
+
+ if (ret == null)
+ ret = GetExistingTemplateVirtualPath (customDataType, column, mode);
+ return ret;
+
+ case DataType.DateTime:
+ return GetExistingTemplateVirtualPath ("DateTime", column, mode);
+
+ case DataType.MultilineText:
+ return GetExistingTemplateVirtualPath ("MultilineText", column, mode);
+
+ default:
+ return GetExistingTemplateVirtualPath ("Text", column, mode);
+ }
}
public virtual void Initialize (MetaModel model)
Model = model;
}
- [MonoTODO]
public virtual DataBoundControlMode PreprocessMode (MetaColumn column, DataBoundControlMode mode)
{
// In good tradition of .NET's DynamicData, let's not check the
// parameters...
if (column == null)
throw new NullReferenceException ();
+
+ if (column.IsGenerated)
+ return DataBoundControlMode.ReadOnly;
+
+ if (column.IsPrimaryKey) {
+ if (mode == DataBoundControlMode.Edit)
+ return DataBoundControlMode.ReadOnly;
+ }
- throw new NotImplementedException ();
+ return mode;
}
}
}
dataTypeReflected = true;
MetaModel.GetDataFieldAttribute <DataTypeAttribute> (Attributes, ref dataTypeAttr);
if (dataTypeAttr == null && (ColumnType == typeof (string)))
- return new DataTypeAttribute (DataType.Text);
+ return new DataTypeAttribute (IsLongString ? DataType.MultilineText : DataType.Text);
return dataTypeAttr;
}
../../System.Web/Test/mainsoft/NunitWeb/NunitWeb/StandardUrl.cs
../../System.Web/Test/mainsoft/NunitWeb/NunitWeb/WebTest.cs
../../System.Web/Test/mainsoft/NunitWeb/NunitWeb/WebTestResourcesSetupAttribute.cs
+
Assembly/AssemblyInfo.cs
Common/AFieldTemplate.cs
Common/AssertExtensions.cs
Common/BazDataTypeDefaultTypes.cs
Common/BazNoStrings.cs
Common/BazNoStringsNoPrimary.cs
+Common/BazWithDataTypeAttribute.cs
Common/EmployeesDataContext.cs
Common/FakeHttpWorkerRequest.cs
Common/FieldFormattingOptions.cs
+Common/FieldTemplatePathTables.cs
+Common/FieldTemplateTestDescription.cs
Common/FooBarNoScaffold.cs
Common/FooDisplayColumnAttribute.cs
Common/FooDisplayName.cs
Common/MyHttpContextWrapper.cs
Common/MyHttpRequestWrapper.cs
Common/PokerDynamicControl.cs
+Common/PokerFieldTemplateUserControl.cs
Common/TestDataColumn.cs
Common/TestDataContainer.cs
Common/TestDataContext2.cs
+Common/TestDataContext3.cs
Common/TestDataContext.cs
Common/TestDataTable.cs
Common/TestsBasePage.cs
System.Web.DynamicData/DynamicDataManagerTest.cs
System.Web.DynamicData/DynamicDataRouteHandlerTest.cs
System.Web.DynamicData/DynamicDataRouteTest.cs
+System.Web.DynamicData/FieldTemplateFactoryTest.cs
+System.Web.DynamicData/FieldTemplateUserControlTest.cs
System.Web.DynamicData/MetaColumnTest.cs
System.Web.DynamicData/MetaModelTest.cs
System.Web.DynamicData/MetaTableTest.cs
System.Web.DynamicData.ModelProviders/TableProviderTest.cs
+
namespace MonoTests.Common
{
- class AssociatedBar
+ public class AssociatedBar
{
public string Column1 { get; set; }
public int Column2 { get; set; }
public string Column3 { get; set; }
+ public int Column4 { get; set; }
public AssociatedBar ()
{
namespace MonoTests.Common
{
- class AssociatedFoo
+ public class AssociatedFoo
{
[DynamicDataAssociation ("AssociatedBarTable.Column1", AssociationDirection.OneToOne)]
public string ForeignKeyColumn1 { get; set; }
+ [DynamicDataAssociation ("AssociatedBarTable.Column4", AssociationDirection.OneToOne)]
+ public int ForeignKeyColumn2 { get; set; }
+
[DynamicDataAssociation ("AssociatedBarTable.Column3", AssociationDirection.ManyToOne)]
public string PrimaryKeyColumn1 { get; set; }
[DynamicDataAssociation ("AssociatedBarTable.Column2", AssociationDirection.OneToMany)]
- public int PrimarykeyColumn2 { get; set; }
+ public int PrimaryKeyColumn2 { get; set; }
public int Column1 { get; set; }
}
[DynamicDataSortable (true)]
public int SortableColumn1 { get; set; }
+ [UIHint ("MyCustomUIHintTemplate")]
+ public string CustomUIHintColumn { get; set; }
+
public Baz ()
{
Column1 = 123;
--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+
+namespace MonoTests.Common
+{
+ public class BazWithDataTypeAttribute
+ {
+ [DataType (DataType.Custom)]
+ public string CustomColumn1 { get; set; }
+
+ [DataType (DataType.Custom)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string CustomColumn2 { get; set; }
+
+ [DataType ("MyCustomType")]
+ public string CustomColumn3 { get; set; }
+
+ [DataType ("MyCustomType")]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string CustomColumn4 { get; set; }
+
+ [DataType (DataType.DateTime)]
+ public string DateTimeColumn1 { get; set; }
+
+ [DataType (DataType.DateTime)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string DateTimeColumn2 { get; set; }
+
+ [DataType (DataType.Date)]
+ public string DateColumn1 { get; set; }
+
+ [DataType (DataType.Date)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string DateColumn2 { get; set; }
+
+ [DataType (DataType.Date)]
+ public long DateColumn3 { get; set; }
+
+ [DataType (DataType.Date)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public long DateColumn4 { get; set; }
+
+ [DataType (DataType.Time)]
+ public string TimeColumn1 { get; set; }
+
+ [DataType (DataType.Time)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string TimeColumn2 { get; set; }
+
+ [DataType (DataType.Duration)]
+ public string DurationColumn1 { get; set; }
+
+ [DataType (DataType.Duration)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string DurationColumn2 { get; set; }
+
+ [DataType (DataType.PhoneNumber)]
+ public string PhoneNumberColumn1 { get; set; }
+
+ [DataType (DataType.PhoneNumber)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string PhoneNumberColumn2 { get; set; }
+
+ [DataType (DataType.Currency)]
+ public string CurrencyColumn1 { get; set; }
+
+ [DataType (DataType.Currency)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string CurrencyColumn2 { get; set; }
+
+ [DataType (DataType.Text)]
+ public long TextColumn1 { get; set; }
+
+ [DataType (DataType.Text)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public long TextColumn2 { get; set; }
+
+ [DataType (DataType.Html)]
+ public string HtmlColumn1 { get; set; }
+
+ [DataType (DataType.Html)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string HtmlColumn2 { get; set; }
+
+ [DataType (DataType.MultilineText)]
+ public string MultilineTextColumn1 { get; set; }
+
+ [DataType (DataType.MultilineText)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string MultilineTextColumn2 { get; set; }
+
+ [DataType (DataType.EmailAddress)]
+ public string EmailAddressColumn1 { get; set; }
+
+ [DataType (DataType.EmailAddress)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string EmailAddressColumn2 { get; set; }
+
+ [DataType (DataType.Password)]
+ public string PasswordColumn1 { get; set; }
+
+ [DataType (DataType.Password)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string PasswordColumn2 { get; set; }
+
+ [DataType (DataType.Url)]
+ public string UrlColumn1 { get; set; }
+
+ [DataType (DataType.Url)]
+ [UIHint ("MyCustomUIHintTemplate_Text")]
+ public string UrlColumn2 { get; set; }
+ }
+}
--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using NUnit.Framework;
+using MonoTests.stand_alone.WebHarness;
+using MonoTests.SystemWeb.Framework;
+using MonoTests.Common;
+using MonoTests.DataSource;
+using MonoTests.DataObjects;
+
+namespace MonoTests.Common
+{
+ sealed class FieldTemplatePathTables
+ {
+ public static readonly List<FieldTemplateTestDescription> FieldTemplateReadOnlyColumns = new List<FieldTemplateTestDescription> ()
+ {
+ new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean.ascx"),
+ new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("SByte_Column"),
+ new FieldTemplateTestDescription ("UInt_Column"),
+ new FieldTemplateTestDescription ("ULong_Column"),
+ new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("UShort_Column"),
+ new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
+ new FieldTemplateTestDescription ("FooEmpty_Column"),
+ new FieldTemplateTestDescription ("Object_Column"),
+ new FieldTemplateTestDescription ("ByteArray_Column"),
+ new FieldTemplateTestDescription ("IntArray_Column"),
+ new FieldTemplateTestDescription ("StringArray_Column"),
+ new FieldTemplateTestDescription ("ObjectArray_Column"),
+ new FieldTemplateTestDescription ("StringList_Column"),
+ new FieldTemplateTestDescription ("Dictionary_Column"),
+ new FieldTemplateTestDescription ("ICollection_Column"),
+ new FieldTemplateTestDescription ("IEnumerable_Column"),
+ new FieldTemplateTestDescription ("ICollectionByte_Column"),
+ new FieldTemplateTestDescription ("IEnumerableByte_Column"),
+ new FieldTemplateTestDescription ("ByteMultiArray_Column"),
+ new FieldTemplateTestDescription ("BoolArray_Column"),
+ new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/Text.ascx"),
+ };
+
+ public static readonly List<FieldTemplateTestDescription> FieldTemplateEditColumns = new List<FieldTemplateTestDescription> ()
+ {
+ new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Text_Edit.ascx"),
+ new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
+ new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
+ new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
+ new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean_Edit.ascx"),
+ new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text_Edit.ascx"),
+ new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
+ new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
+ new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
+ new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
+ new FieldTemplateTestDescription ("SByte_Column"),
+ new FieldTemplateTestDescription ("UInt_Column"),
+ new FieldTemplateTestDescription ("ULong_Column"),
+ new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
+ new FieldTemplateTestDescription ("UShort_Column"),
+ new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime_Edit.ascx"),
+ new FieldTemplateTestDescription ("FooEmpty_Column"),
+ new FieldTemplateTestDescription ("Object_Column"),
+ new FieldTemplateTestDescription ("ByteArray_Column"),
+ new FieldTemplateTestDescription ("IntArray_Column"),
+ new FieldTemplateTestDescription ("StringArray_Column"),
+ new FieldTemplateTestDescription ("ObjectArray_Column"),
+ new FieldTemplateTestDescription ("StringList_Column"),
+ new FieldTemplateTestDescription ("Dictionary_Column"),
+ new FieldTemplateTestDescription ("ICollection_Column"),
+ new FieldTemplateTestDescription ("IEnumerable_Column"),
+ new FieldTemplateTestDescription ("ICollectionByte_Column"),
+ new FieldTemplateTestDescription ("IEnumerableByte_Column"),
+ new FieldTemplateTestDescription ("ByteMultiArray_Column"),
+ new FieldTemplateTestDescription ("BoolArray_Column"),
+ new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/MultilineText_Edit.ascx"),
+ };
+
+ public static readonly List<string> NonDefaultFullTypeNameTemplates = new List<string> () {
+ "System.Char.ascx",
+ "System.Char.ascx.cs",
+ "System.Byte.ascx",
+ "System.Byte.ascx.cs",
+ "System.Boolean.ascx",
+ "System.Boolean.ascx.cs",
+ "System.Int16.ascx",
+ "System.Int16.ascx.cs",
+ "System.Int32.ascx",
+ "System.Int32.ascx.cs",
+ "System.Int64.ascx",
+ "System.Int64.ascx.cs",
+ "System.String.ascx",
+ "System.String.ascx.cs",
+ "System.UInt16.ascx",
+ "System.UInt16.ascx.cs",
+ "System.UInt32.ascx",
+ "System.UInt32.ascx.cs",
+ "System.UInt64.ascx",
+ "System.UInt64.ascx.cs",
+ "System.SByte.ascx",
+ "System.SByte.ascx.cs",
+ "System.Object.ascx",
+ "System.Object.ascx.cs",
+ "System.Byte[].ascx",
+ "System.Byte[].ascx.cs",
+ "System.Collections.Generic.List`1[System.String].ascx",
+ "System.Collections.Generic.List`1[System.String].ascx.cs",
+ "MonoTests.Common.FooEmpty.ascx",
+ "MonoTests.Common.FooEmpty.ascx.cs",
+ "System.Collections.ICollection.ascx",
+ "System.Collections.ICollection.ascx.cs",
+ };
+
+ public static readonly List<FieldTemplateTestDescription> FieldTemplateNonDefaultColumns = new List<FieldTemplateTestDescription> ()
+ {
+ new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/System.Char.ascx"),
+ new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/System.Byte.ascx"),
+ new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/System.Int32.ascx"),
+ new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/System.Int64.ascx"),
+ new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/System.Boolean.ascx"),
+ new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
+ new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
+ new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
+ new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
+ new FieldTemplateTestDescription ("SByte_Column", "~/DynamicData/FieldTemplates/System.SByte.ascx"),
+ new FieldTemplateTestDescription ("UInt_Column", "~/DynamicData/FieldTemplates/System.UInt32.ascx"),
+ new FieldTemplateTestDescription ("ULong_Column", "~/DynamicData/FieldTemplates/System.UInt64.ascx"),
+ new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/System.Int16.ascx"),
+ new FieldTemplateTestDescription ("UShort_Column", "~/DynamicData/FieldTemplates/System.UInt16.ascx"),
+ new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
+ new FieldTemplateTestDescription ("FooEmpty_Column", "~/DynamicData/FieldTemplates/MonoTests.Common.FooEmpty.ascx"),
+ new FieldTemplateTestDescription ("Object_Column", "~/DynamicData/FieldTemplates/System.Object.ascx"),
+ new FieldTemplateTestDescription ("ByteArray_Column", "~/DynamicData/FieldTemplates/System.Byte[].ascx"),
+ new FieldTemplateTestDescription ("IntArray_Column"),
+ new FieldTemplateTestDescription ("StringArray_Column"),
+ new FieldTemplateTestDescription ("ObjectArray_Column"),
+ new FieldTemplateTestDescription ("StringList_Column"),
+
+ // Doesn't work for some reason
+ //new FieldTemplateTestDescription ("StringList_Column", "~/DynamicData/FieldTemplates/System.Collections.Generic.List`1[System.String].ascx"),
+ new FieldTemplateTestDescription ("Dictionary_Column"),
+ new FieldTemplateTestDescription ("ICollection_Column", "~/DynamicData/FieldTemplates/System.Collections.ICollection.ascx"),
+ new FieldTemplateTestDescription ("IEnumerable_Column"),
+ new FieldTemplateTestDescription ("ICollectionByte_Column"),
+ new FieldTemplateTestDescription ("IEnumerableByte_Column"),
+ new FieldTemplateTestDescription ("ByteMultiArray_Column"),
+ new FieldTemplateTestDescription ("BoolArray_Column"),
+ new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/System.String.ascx"),
+ };
+
+ public static readonly List<string> NonDefaultShortTypeNameTemplates = new List<string> () {
+ "Char.ascx",
+ "Char.ascx.cs",
+ "Byte.ascx",
+ "Byte.ascx.cs",
+ "Int16.ascx",
+ "Int16.ascx.cs",
+ "Int32.ascx",
+ "Int32.ascx.cs",
+ "Int64.ascx",
+ "Int64.ascx.cs",
+ "String.ascx",
+ "String.ascx.cs",
+ "UInt16.ascx",
+ "UInt16.ascx.cs",
+ "UInt32.ascx",
+ "UInt32.ascx.cs",
+ "UInt64.ascx",
+ "UInt64.ascx.cs",
+ "SByte.ascx",
+ "SByte.ascx.cs",
+ "Object.ascx",
+ "Object.ascx.cs",
+ "Byte[].ascx",
+ "Byte[].ascx.cs",
+ "FooEmpty.ascx",
+ "FooEmpty.ascx.cs",
+ "ICollection.ascx",
+ "ICollection.ascx.cs",
+ };
+
+ public static readonly List<FieldTemplateTestDescription> FieldTemplateNonDefaultShortColumns = new List<FieldTemplateTestDescription> ()
+ {
+ new FieldTemplateTestDescription ("FooEmpty_Column", "~/DynamicData/FieldTemplates/FooEmpty.ascx"),
+ new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Char.ascx"),
+ new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Byte.ascx"),
+ new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Int32.ascx"),
+ new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Int64.ascx"),
+ new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean.ascx"),
+ new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
+ new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/String.ascx"),
+ new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/String.ascx"),
+ new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/String.ascx"),
+ new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/String.ascx"),
+ new FieldTemplateTestDescription ("SByte_Column", "~/DynamicData/FieldTemplates/SByte.ascx"),
+ new FieldTemplateTestDescription ("UInt_Column", "~/DynamicData/FieldTemplates/UInt32.ascx"),
+ new FieldTemplateTestDescription ("ULong_Column", "~/DynamicData/FieldTemplates/UInt64.ascx"),
+ new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Int16.ascx"),
+ new FieldTemplateTestDescription ("UShort_Column", "~/DynamicData/FieldTemplates/UInt16.ascx"),
+ new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
+ new FieldTemplateTestDescription ("Object_Column", "~/DynamicData/FieldTemplates/Object.ascx"),
+ new FieldTemplateTestDescription ("ByteArray_Column", "~/DynamicData/FieldTemplates/Byte[].ascx"),
+ new FieldTemplateTestDescription ("IntArray_Column"),
+ new FieldTemplateTestDescription ("StringArray_Column"),
+ new FieldTemplateTestDescription ("ObjectArray_Column"),
+ new FieldTemplateTestDescription ("StringList_Column"),
+
+ // Doesn't work for some reason
+ //new FieldTemplateTestDescription ("StringList_Column", "~/DynamicData/FieldTemplates/List`1[System.String].ascx"),
+ new FieldTemplateTestDescription ("Dictionary_Column"),
+ new FieldTemplateTestDescription ("ICollection_Column", "~/DynamicData/FieldTemplates/ICollection.ascx"),
+ new FieldTemplateTestDescription ("IEnumerable_Column"),
+ new FieldTemplateTestDescription ("ICollectionByte_Column"),
+ new FieldTemplateTestDescription ("IEnumerableByte_Column"),
+ new FieldTemplateTestDescription ("ByteMultiArray_Column"),
+ new FieldTemplateTestDescription ("BoolArray_Column"),
+ new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/String.ascx"),
+ };
+
+ public static void SetUp_ShortTypeNameTemplates (object caller)
+ {
+ if (caller == null)
+ throw new ArgumentNullException ("caller");
+ Type type = caller.GetType ();
+ foreach (string tname in NonDefaultShortTypeNameTemplates)
+ WebTest.CopyResource (type, "MonoTests.WebPages.DynamicData.FieldTemplates_NonDefault." + tname, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
+ }
+
+ public static void CleanUp_ShortTypeNameTemplates ()
+ {
+ string baseDir = WebTest.TestBaseDir;
+ string filePath;
+
+ foreach (string tname in NonDefaultShortTypeNameTemplates) {
+ filePath = Path.Combine (baseDir, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
+ try {
+ if (File.Exists (filePath))
+ File.Delete (filePath);
+ } catch {
+ // ignore
+ }
+ }
+ }
+
+ public static void SetUp_FullTypeNameTemplates (object caller)
+ {
+ if (caller == null)
+ throw new ArgumentNullException ("caller");
+ Type type = caller.GetType ();
+ foreach (string tname in NonDefaultFullTypeNameTemplates)
+ WebTest.CopyResource (type, "MonoTests.WebPages.DynamicData.FieldTemplates_NonDefault." + tname, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
+ }
+
+ public static void CleanUp_FullTypeNameTemplates ()
+ {
+ string baseDir = WebTest.TestBaseDir;
+ string filePath;
+
+ foreach (string tname in NonDefaultFullTypeNameTemplates) {
+ filePath = Path.Combine (baseDir, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
+ try {
+ if (File.Exists (filePath))
+ File.Delete (filePath);
+ } catch {
+ // ignore
+ }
+ }
+ }
+ }
+}
--- /dev/null
+using System;
+
+
+namespace MonoTests.Common
+{
+ sealed class FieldTemplateTestDescription
+ {
+ public string ColumnName { get; private set; }
+ public string ControlVirtualPath { get; private set; }
+ public bool IsNull { get; private set; }
+
+ public FieldTemplateTestDescription (string columnName)
+ : this (columnName, String.Empty, true) { }
+
+ public FieldTemplateTestDescription (string columnName, string virtualPath)
+ : this (columnName, virtualPath, false) { }
+
+ public FieldTemplateTestDescription (string columnName, string virtualPath, bool isNull)
+ {
+ ColumnName = columnName;
+ ControlVirtualPath = virtualPath;
+ IsNull = isNull;
+ }
+ }
+}
--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Web.DynamicData;
+
+namespace MonoTests.Common
+{
+ public class PokerFieldTemplateUserControl : FieldTemplateUserControl
+ {
+ public string GetChildrenPath ()
+ {
+ return ChildrenPath;
+ }
+
+ public string GetForeignKeyPath ()
+ {
+ return ForeignKeyPath;
+ }
+
+ public string CallBuildChildrenPath (string path)
+ {
+ return BuildChildrenPath (path);
+ }
+ }
+}
--- /dev/null
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Web.DynamicData;
+using System.Web.DynamicData.ModelProviders;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+using MonoTests.System.Web.DynamicData;
+using MonoTests.ModelProviders;
+using MonoTests.DataSource;
+
+namespace MonoTests.Common
+{
+ public class TestDataContext3 : ITestDataContext
+ {
+ List<AssociatedFoo> associatedFoo;
+ List<AssociatedBar> associatedBar;
+ List<BazWithDataTypeAttribute> bazWithDataTypeAttribute;
+
+ public List<AssociatedFoo> AssociatedFoo
+ {
+ get
+ {
+ if (associatedFoo == null)
+ associatedFoo = new List<AssociatedFoo> ();
+
+ return associatedFoo;
+ }
+ }
+
+ public List<AssociatedBar> AssociatedBar
+ {
+ get
+ {
+ if (associatedBar == null)
+ associatedBar = new List<AssociatedBar> ();
+
+ return associatedBar;
+ }
+ }
+
+ public List<BazWithDataTypeAttribute> BazWithDataTypeAttribute
+ {
+ get
+ {
+ if (bazWithDataTypeAttribute == null)
+ bazWithDataTypeAttribute = new List<BazWithDataTypeAttribute> ();
+
+ return bazWithDataTypeAttribute;
+ }
+ }
+
+ #region ITestDataContext Members
+ public IList GetTableData (string tableName, DataSourceSelectArguments args, string where, ParameterCollection whereParams)
+ {
+ if (String.Compare (tableName, "AssociatedFooTable", StringComparison.OrdinalIgnoreCase) == 0)
+ return AssociatedFoo;
+
+ if (String.Compare (tableName, "AssociatedBarTable", StringComparison.OrdinalIgnoreCase) == 0)
+ return AssociatedBar;
+
+ if (String.Compare (tableName, "BazWithDataTypeAttributeTable", StringComparison.OrdinalIgnoreCase) == 0)
+ return BazWithDataTypeAttribute;
+
+ return null;
+ }
+
+ public List<DynamicDataTable> GetTables ()
+ {
+ return new List<DynamicDataTable> {
+ new TestDataTable<AssociatedBar>(),
+ new TestDataTable<AssociatedFoo>(),
+ new TestDataTable<BazWithDataTypeAttribute> ()
+ };
+ }
+
+ #endregion
+ }
+}
+
}
}
- void ResolveAssociations ()
+ public void ResolveAssociations ()
{
foreach (var t in Tables) {
var table = t as DynamicDataContainerTableProvider <TContext>;
+2009-09-15 Marek Habersack <mhabersack@novell.com>
+
+ * FieldTemplateFactoryTest.cs: implemented tests for
+ BuildVirtualPath, GetFieldTemplateVirtualPath and PreprocessMode.
+
2009-09-10 Marek Habersack <mhabersack@novell.com>
* DynamicControlTest.cs: added seveal tests for DataField and UIHint
[TestFixture]
public class DynamicControlTest
{
- sealed class FieldTemplateTestDescription
- {
- public string ColumnName { get; private set; }
- public string ControlVirtualPath { get; private set; }
- public bool IsNull { get; private set; }
-
- public FieldTemplateTestDescription (string columnName)
- : this (columnName, String.Empty, true)
- { }
-
- public FieldTemplateTestDescription (string columnName, string virtualPath)
- : this (columnName, virtualPath, false)
- { }
-
- public FieldTemplateTestDescription (string columnName, string virtualPath, bool isNull)
- {
- ColumnName = columnName;
- ControlVirtualPath = virtualPath;
- IsNull = isNull;
- }
- }
-
[SetUp]
public void PerTestSetUp ()
{
// This is ran before every test
- CleanUp_FullTypeNameTemplates ();
- CleanUp_ShortTypeNameTemplates ();
+ FieldTemplatePathTables.CleanUp_FullTypeNameTemplates ();
+ FieldTemplatePathTables.CleanUp_ShortTypeNameTemplates ();
}
[TestFixtureSetUp]
[TestFixtureTearDown]
public void TearDown ()
{
- CleanUp_FullTypeNameTemplates ();
- CleanUp_ShortTypeNameTemplates ();
+ FieldTemplatePathTables.CleanUp_FullTypeNameTemplates ();
+ FieldTemplatePathTables.CleanUp_ShortTypeNameTemplates ();
WebTest.Unload ();
}
Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
}
- static List<FieldTemplateTestDescription> fieldTemplateReadOnlyColumns = new List<FieldTemplateTestDescription> ()
- {
- new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean.ascx"),
- new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("SByte_Column"),
- new FieldTemplateTestDescription ("UInt_Column"),
- new FieldTemplateTestDescription ("ULong_Column"),
- new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("UShort_Column"),
- new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
- new FieldTemplateTestDescription ("FooEmpty_Column"),
- new FieldTemplateTestDescription ("Object_Column"),
- new FieldTemplateTestDescription ("ByteArray_Column"),
- new FieldTemplateTestDescription ("IntArray_Column"),
- new FieldTemplateTestDescription ("StringArray_Column"),
- new FieldTemplateTestDescription ("ObjectArray_Column"),
- new FieldTemplateTestDescription ("StringList_Column"),
- new FieldTemplateTestDescription ("Dictionary_Column"),
- new FieldTemplateTestDescription ("ICollection_Column"),
- new FieldTemplateTestDescription ("IEnumerable_Column"),
- new FieldTemplateTestDescription ("ICollectionByte_Column"),
- new FieldTemplateTestDescription ("IEnumerableByte_Column"),
- new FieldTemplateTestDescription ("ByteMultiArray_Column"),
- new FieldTemplateTestDescription ("BoolArray_Column"),
- new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/Text.ascx"),
- };
-
static void FieldTemplate_OnLoad (Page p)
{
var lc = p.FindControl ("ListView3") as ListView;
Assert.IsNotNull (lc, "#A1");
int counter = 1;
- foreach (var entry in fieldTemplateReadOnlyColumns) {
+ foreach (var entry in FieldTemplatePathTables.FieldTemplateReadOnlyColumns) {
string columnName = entry.ColumnName;
var dc = lc.FindChild<PokerDynamicControl> (columnName);
Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1}", counter, columnName));
Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
}
- static List<FieldTemplateTestDescription> fieldTemplateEditColumns = new List<FieldTemplateTestDescription> ()
- {
- new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Text_Edit.ascx"),
- new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
- new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
- new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
- new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean_Edit.ascx"),
- new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text_Edit.ascx"),
- new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
- new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
- new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
- new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/Decimal_Edit.ascx"),
- new FieldTemplateTestDescription ("SByte_Column"),
- new FieldTemplateTestDescription ("UInt_Column"),
- new FieldTemplateTestDescription ("ULong_Column"),
- new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Integer_Edit.ascx"),
- new FieldTemplateTestDescription ("UShort_Column"),
- new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime_Edit.ascx"),
- new FieldTemplateTestDescription ("FooEmpty_Column"),
- new FieldTemplateTestDescription ("Object_Column"),
- new FieldTemplateTestDescription ("ByteArray_Column"),
- new FieldTemplateTestDescription ("IntArray_Column"),
- new FieldTemplateTestDescription ("StringArray_Column"),
- new FieldTemplateTestDescription ("ObjectArray_Column"),
- new FieldTemplateTestDescription ("StringList_Column"),
- new FieldTemplateTestDescription ("Dictionary_Column"),
- new FieldTemplateTestDescription ("ICollection_Column"),
- new FieldTemplateTestDescription ("IEnumerable_Column"),
- new FieldTemplateTestDescription ("ICollectionByte_Column"),
- new FieldTemplateTestDescription ("IEnumerableByte_Column"),
- new FieldTemplateTestDescription ("ByteMultiArray_Column"),
- new FieldTemplateTestDescription ("BoolArray_Column"),
- new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/MultilineText_Edit.ascx"),
- };
-
static void FieldTemplate_OnPreRenderComplete_1 (Page p)
{
var lc = p.FindControl ("ListView4") as ListView;
Assert.IsNotNull (lc, "#A1");
int counter = 1;
- foreach (var entry in fieldTemplateEditColumns) {
+ foreach (var entry in FieldTemplatePathTables.FieldTemplateEditColumns) {
string columnName = entry.ColumnName;
var dc = lc.FindChild<PokerDynamicControl> (columnName);
Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
[Test]
public void FieldTemplate_2 ()
{
- try {
- SetUp_FullTypeNameTemplates ();
- var test = new WebTest ("ListView_DynamicControl_03.aspx");
- test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad_2);
- var p = test.Run ();
- Assert.IsNotNull (test.Response, "#X1");
- Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
- Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
- Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
- } finally {
-
- }
- }
-
- static List<string> nonDefaultFullTypeNameTemplates = new List<string> () {
- "System.Char.ascx",
- "System.Char.ascx.cs",
- "System.Byte.ascx",
- "System.Byte.ascx.cs",
- "System.Boolean.ascx",
- "System.Boolean.ascx.cs",
- "System.Int16.ascx",
- "System.Int16.ascx.cs",
- "System.Int32.ascx",
- "System.Int32.ascx.cs",
- "System.Int64.ascx",
- "System.Int64.ascx.cs",
- "System.String.ascx",
- "System.String.ascx.cs",
- "System.UInt16.ascx",
- "System.UInt16.ascx.cs",
- "System.UInt32.ascx",
- "System.UInt32.ascx.cs",
- "System.UInt64.ascx",
- "System.UInt64.ascx.cs",
- "System.SByte.ascx",
- "System.SByte.ascx.cs",
- "System.Object.ascx",
- "System.Object.ascx.cs",
- "System.Byte[].ascx",
- "System.Byte[].ascx.cs",
- "System.Collections.Generic.List`1[System.String].ascx",
- "System.Collections.Generic.List`1[System.String].ascx.cs",
- "MonoTests.Common.FooEmpty.ascx",
- "MonoTests.Common.FooEmpty.ascx.cs",
- "System.Collections.ICollection.ascx",
- "System.Collections.ICollection.ascx.cs",
- };
-
- void SetUp_FullTypeNameTemplates ()
- {
- Type type = GetType ();
- foreach (string tname in nonDefaultFullTypeNameTemplates)
- WebTest.CopyResource (type, "MonoTests.WebPages.DynamicData.FieldTemplates_NonDefault." + tname, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
- }
+ FieldTemplatePathTables.SetUp_FullTypeNameTemplates (this);
+ var test = new WebTest ("ListView_DynamicControl_03.aspx");
+ test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad_2);
+ var p = test.Run ();
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
- void CleanUp_FullTypeNameTemplates ()
- {
- string baseDir = WebTest.TestBaseDir;
- string filePath;
-
- foreach (string tname in nonDefaultFullTypeNameTemplates) {
- filePath = Path.Combine (baseDir, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
- try {
- if (File.Exists (filePath))
- File.Delete (filePath);
- } catch {
- // ignore
- }
- }
}
- static List<FieldTemplateTestDescription> fieldTemplateNonDefaultColumns = new List<FieldTemplateTestDescription> ()
- {
- new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/System.Char.ascx"),
- new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/System.Byte.ascx"),
- new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/System.Int32.ascx"),
- new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/System.Int64.ascx"),
- new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/System.Boolean.ascx"),
- new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
- new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
- new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
- new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/System.String.ascx"),
- new FieldTemplateTestDescription ("SByte_Column", "~/DynamicData/FieldTemplates/System.SByte.ascx"),
- new FieldTemplateTestDescription ("UInt_Column", "~/DynamicData/FieldTemplates/System.UInt32.ascx"),
- new FieldTemplateTestDescription ("ULong_Column", "~/DynamicData/FieldTemplates/System.UInt64.ascx"),
- new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/System.Int16.ascx"),
- new FieldTemplateTestDescription ("UShort_Column", "~/DynamicData/FieldTemplates/System.UInt16.ascx"),
- new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
- new FieldTemplateTestDescription ("FooEmpty_Column", "~/DynamicData/FieldTemplates/MonoTests.Common.FooEmpty.ascx"),
- new FieldTemplateTestDescription ("Object_Column", "~/DynamicData/FieldTemplates/System.Object.ascx"),
- new FieldTemplateTestDescription ("ByteArray_Column", "~/DynamicData/FieldTemplates/System.Byte[].ascx"),
- new FieldTemplateTestDescription ("IntArray_Column"),
- new FieldTemplateTestDescription ("StringArray_Column"),
- new FieldTemplateTestDescription ("ObjectArray_Column"),
- new FieldTemplateTestDescription ("StringList_Column"),
-
- // Doesn't work for some reason
- //new FieldTemplateTestDescription ("StringList_Column", "~/DynamicData/FieldTemplates/System.Collections.Generic.List`1[System.String].ascx"),
- new FieldTemplateTestDescription ("Dictionary_Column"),
- new FieldTemplateTestDescription ("ICollection_Column", "~/DynamicData/FieldTemplates/System.Collections.ICollection.ascx"),
- new FieldTemplateTestDescription ("IEnumerable_Column"),
- new FieldTemplateTestDescription ("ICollectionByte_Column"),
- new FieldTemplateTestDescription ("IEnumerableByte_Column"),
- new FieldTemplateTestDescription ("ByteMultiArray_Column"),
- new FieldTemplateTestDescription ("BoolArray_Column"),
- new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/System.String.ascx"),
- };
-
static void FieldTemplate_OnLoad_2 (Page p)
{
var lc = p.FindControl ("ListView3") as ListView;
Assert.IsNotNull (lc, "#A1");
int counter = 1;
- foreach (var entry in fieldTemplateNonDefaultColumns) {
+ foreach (var entry in FieldTemplatePathTables.FieldTemplateNonDefaultColumns) {
string columnName = entry.ColumnName;
var dc = lc.FindChild<PokerDynamicControl> (columnName);
Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
public void FieldTemplate_3 ()
{
try {
- SetUp_ShortTypeNameTemplates ();
+ FieldTemplatePathTables.SetUp_ShortTypeNameTemplates (this);
var test = new WebTest ("ListView_DynamicControl_03.aspx");
test.Invoker = PageInvoker.CreateOnLoad (FieldTemplate_OnLoad_3);
var p = test.Run ();
}
}
- static List<string> nonDefaultShortTypeNameTemplates = new List<string> () {
- "Char.ascx",
- "Char.ascx.cs",
- "Byte.ascx",
- "Byte.ascx.cs",
- "Int16.ascx",
- "Int16.ascx.cs",
- "Int32.ascx",
- "Int32.ascx.cs",
- "Int64.ascx",
- "Int64.ascx.cs",
- "String.ascx",
- "String.ascx.cs",
- "UInt16.ascx",
- "UInt16.ascx.cs",
- "UInt32.ascx",
- "UInt32.ascx.cs",
- "UInt64.ascx",
- "UInt64.ascx.cs",
- "SByte.ascx",
- "SByte.ascx.cs",
- "Object.ascx",
- "Object.ascx.cs",
- "Byte[].ascx",
- "Byte[].ascx.cs",
- "FooEmpty.ascx",
- "FooEmpty.ascx.cs",
- "ICollection.ascx",
- "ICollection.ascx.cs",
- };
-
- void SetUp_ShortTypeNameTemplates ()
- {
- Type type = GetType ();
- foreach (string tname in nonDefaultShortTypeNameTemplates)
- WebTest.CopyResource (type, "MonoTests.WebPages.DynamicData.FieldTemplates_NonDefault." + tname, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
- }
-
- void CleanUp_ShortTypeNameTemplates ()
- {
- string baseDir = WebTest.TestBaseDir;
- string filePath;
-
- foreach (string tname in nonDefaultShortTypeNameTemplates) {
- filePath = Path.Combine (baseDir, TestsSetup.BuildPath ("DynamicData/FieldTemplates/" + tname));
- try {
- if (File.Exists (filePath))
- File.Delete (filePath);
- } catch {
- // ignore
- }
- }
- }
-
- static List<FieldTemplateTestDescription> fieldTemplateNonDefaultShortColumns = new List<FieldTemplateTestDescription> ()
- {
- new FieldTemplateTestDescription ("FooEmpty_Column", "~/DynamicData/FieldTemplates/FooEmpty.ascx"),
- new FieldTemplateTestDescription ("Char_Column", "~/DynamicData/FieldTemplates/Char.ascx"),
- new FieldTemplateTestDescription ("Byte_Column", "~/DynamicData/FieldTemplates/Byte.ascx"),
- new FieldTemplateTestDescription ("Int_Column", "~/DynamicData/FieldTemplates/Int32.ascx"),
- new FieldTemplateTestDescription ("Long_Column", "~/DynamicData/FieldTemplates/Int64.ascx"),
- new FieldTemplateTestDescription ("Bool_Column", "~/DynamicData/FieldTemplates/Boolean.ascx"),
- new FieldTemplateTestDescription ("String_Column", "~/DynamicData/FieldTemplates/Text.ascx"),
- new FieldTemplateTestDescription ("Float_Column", "~/DynamicData/FieldTemplates/String.ascx"),
- new FieldTemplateTestDescription ("Single_Column", "~/DynamicData/FieldTemplates/String.ascx"),
- new FieldTemplateTestDescription ("Double_Column", "~/DynamicData/FieldTemplates/String.ascx"),
- new FieldTemplateTestDescription ("Decimal_Column", "~/DynamicData/FieldTemplates/String.ascx"),
- new FieldTemplateTestDescription ("SByte_Column", "~/DynamicData/FieldTemplates/SByte.ascx"),
- new FieldTemplateTestDescription ("UInt_Column", "~/DynamicData/FieldTemplates/UInt32.ascx"),
- new FieldTemplateTestDescription ("ULong_Column", "~/DynamicData/FieldTemplates/UInt64.ascx"),
- new FieldTemplateTestDescription ("Short_Column", "~/DynamicData/FieldTemplates/Int16.ascx"),
- new FieldTemplateTestDescription ("UShort_Column", "~/DynamicData/FieldTemplates/UInt16.ascx"),
- new FieldTemplateTestDescription ("DateTime_Column", "~/DynamicData/FieldTemplates/DateTime.ascx"),
- new FieldTemplateTestDescription ("Object_Column", "~/DynamicData/FieldTemplates/Object.ascx"),
- new FieldTemplateTestDescription ("ByteArray_Column", "~/DynamicData/FieldTemplates/Byte[].ascx"),
- new FieldTemplateTestDescription ("IntArray_Column"),
- new FieldTemplateTestDescription ("StringArray_Column"),
- new FieldTemplateTestDescription ("ObjectArray_Column"),
- new FieldTemplateTestDescription ("StringList_Column"),
-
- // Doesn't work for some reason
- //new FieldTemplateTestDescription ("StringList_Column", "~/DynamicData/FieldTemplates/List`1[System.String].ascx"),
- new FieldTemplateTestDescription ("Dictionary_Column"),
- new FieldTemplateTestDescription ("ICollection_Column", "~/DynamicData/FieldTemplates/ICollection.ascx"),
- new FieldTemplateTestDescription ("IEnumerable_Column"),
- new FieldTemplateTestDescription ("ICollectionByte_Column"),
- new FieldTemplateTestDescription ("IEnumerableByte_Column"),
- new FieldTemplateTestDescription ("ByteMultiArray_Column"),
- new FieldTemplateTestDescription ("BoolArray_Column"),
- new FieldTemplateTestDescription ("MaximumLength_Column4", "~/DynamicData/FieldTemplates/String.ascx"),
- };
-
static void FieldTemplate_OnLoad_3 (Page p)
{
var lc = p.FindControl ("ListView3") as ListView;
Assert.IsNotNull (lc, "#A1");
int counter = 1;
- foreach (var entry in fieldTemplateNonDefaultShortColumns) {
+ foreach (var entry in FieldTemplatePathTables.FieldTemplateNonDefaultShortColumns) {
string columnName = entry.ColumnName;
var dc = lc.FindChild<PokerDynamicControl> (columnName);
Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
Type type = GetType ();
WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx", "ListView_DynamicControl_01.aspx");
WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx.cs", "ListView_DynamicControl_01.aspx.cs");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_03.aspx", "ListView_DynamicControl_03.aspx");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_03.aspx.cs", "ListView_DynamicControl_03.aspx.cs");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_04.aspx", "ListView_DynamicControl_04.aspx");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_04.aspx.cs", "ListView_DynamicControl_04.aspx.cs");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_09.aspx", "ListView_DynamicControl_09.aspx");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_09.aspx.cs", "ListView_DynamicControl_09.aspx.cs");
dynamicModelProvider = new DynamicDataContainerModelProvider<TestDataContext> ();
Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
[TestFixtureTearDown]
public void TearDown ()
{
+ FieldTemplatePathTables.CleanUp_FullTypeNameTemplates ();
+ FieldTemplatePathTables.CleanUp_ShortTypeNameTemplates ();
WebTest.Unload ();
}
+ [SetUp]
+ public void PerTestSetUp ()
+ {
+ // This is ran before every test
+ FieldTemplatePathTables.CleanUp_FullTypeNameTemplates ();
+ FieldTemplatePathTables.CleanUp_ShortTypeNameTemplates ();
+ }
+
[Test]
public void Defaults ()
{
Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer_Insert.ascx", ftf.BuildVirtualPath ("Integer", mc, DataBoundControlMode.Insert), "#B4");
Assert.AreEqual (ftf.TemplateFolderVirtualPath + "NoSuchTemplate.ascx", ftf.BuildVirtualPath ("NoSuchTemplate", mc, DataBoundControlMode.ReadOnly), "#B5");
Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer.ascx", ftf.BuildVirtualPath ("Integer", null, DataBoundControlMode.ReadOnly), "#B6");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Integer.ascx", ftf.BuildVirtualPath ("Integer", mc, (DataBoundControlMode)10), "#B7");
+ }
+
+ [Test]
+ public void BuildVirtualPath_1 ()
+ {
+ MetaModel m = Utils.CommonInitialize ();
+ MetaTable t = m.Tables[TestDataContext.TableBaz];
+ MetaColumn mc = t.GetColumn ("CustomUIHintColumn");
+
+ var ftf = new FieldTemplateFactory ();
+
+ // It seems MetaColumn.UIHint is ignored (or rather it suggests that column is not used at all)
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Test.ascx", ftf.BuildVirtualPath ("Test", mc, DataBoundControlMode.ReadOnly), "#A1");
}
[Test]
}
[Test]
- public static void GetFieldTemplateVirtualPath ()
+ public void GetFieldTemplateVirtualPath ()
{
// This test is (sort of) bogus as the .NET code completely falls apart when invoked outside
// real web request environment. Talk about code testability...
}
[Test]
- public void GetFieldTemplateVirtualPath_2 ()
+ public void GetFieldTemplateVirtualPath_02 ()
{
var test = new WebTest ("ListView_DynamicControl_01.aspx");
- test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_2);
+ test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_02);
var p = test.Run ();
Assert.IsNotNull (test.Response, "#X1");
Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
}
- static void GetFieldTemplateVirtualPath_OnLoad_2 (Page p)
+ static void GetFieldTemplateVirtualPath_OnLoad_02 (Page p)
{
MetaModel m = MetaModel.Default;
MetaTable t = m.GetTable ("EmployeeTable");
templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "MyCustomUIHintTemplate_Text");
Assert.IsNotNull (templatePath, "#E1");
Assert.AreEqual (ftf.TemplateFolderVirtualPath + "MyCustomUIHintTemplate_Text.ascx", templatePath, "#E1-2");
+
+ mc = t.GetColumn ("LastName");
+ Assert.AreEqual ("CustomFieldTemplate", mc.UIHint, "#F1");
+ templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#F1-1");
+
+ templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "CustomFieldTemplate");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "CustomFieldTemplate.ascx", templatePath, "#F2");
+ }
+
+ [Test]
+ public void GetFieldTemplateVirtualPath_03 ()
+ {
+ var test = new WebTest ("ListView_DynamicControl_09.aspx");
+ test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_03);
+ var p = test.Run ();
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+ }
+
+ static void GetFieldTemplateVirtualPath_OnLoad_03 (Page p)
+ {
+ MetaModel m = MetaModel.Default;
+ MetaTable t = m.GetTable ("AssociatedFooTable");
+ MetaColumn mc = t.GetColumn ("PrimaryKeyColumn2");
+
+ Assert.AreEqual (typeof (MetaChildrenColumn), mc.GetType (), "#A1");
+
+ var ftf = new FieldTemplateFactory ();
+ ftf.Initialize (m);
+
+ string templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Text.ascx");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#A2");
+
+ templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Children.ascx", templatePath, "#A3");
+
+ // When MetaColumn.DataTypeAttribute is not null (which will always be the case for string columns), column type is ignored
+ mc = t.GetColumn ("ForeignKeyColumn1");
+ Assert.AreEqual (typeof (MetaForeignKeyColumn), mc.GetType (), "#B1");
+ Assert.IsNotNull (mc.DataTypeAttribute, "#B1-1");
+
+ ftf = new FieldTemplateFactory ();
+ ftf.Initialize (m);
+
+ templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Text.ascx");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#B2");
+
+ templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#B3");
+
+ mc = t.GetColumn ("ForeignKeyColumn2");
+ Assert.AreEqual (typeof (MetaForeignKeyColumn), mc.GetType (), "#C1");
+ Assert.IsNull (mc.DataTypeAttribute, "#C1-1");
+
+ ftf = new FieldTemplateFactory ();
+ ftf.Initialize (m);
+
+ templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Text.ascx");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", templatePath, "#C2");
+
+ templatePath = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "ForeignKey.ascx", templatePath, "#C3");
+ }
+
+ [Test]
+ public void GetFieldTemplateVirtualPath_04 ()
+ {
+ var test = new WebTest ("ListView_DynamicControl_03.aspx");
+ test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_04);
+ var p = test.Run ();
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+ }
+
+ static void GetFieldTemplateVirtualPath_OnLoad_04 (Page p)
+ {
+ var lc = p.FindControl ("ListView3") as ListView;
+ Assert.IsNotNull (lc, "#A1");
+
+ int counter = 1;
+ var ftf = new FieldTemplateFactory ();
+ ftf.Initialize (MetaModel.Default);
+
+ foreach (var entry in FieldTemplatePathTables.FieldTemplateReadOnlyColumns) {
+ string columnName = entry.ColumnName;
+ var dc = lc.FindChild<PokerDynamicControl> (columnName);
+ Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
+ Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
+
+ string path = ftf.GetFieldTemplateVirtualPath (dc.Column, DataBoundControlMode.ReadOnly, null);
+ if (entry.IsNull)
+ Assert.IsNull (path, String.Format ("#B{0}-3 ({1})", counter, columnName));
+ else {
+ Assert.IsNotNull (path, String.Format ("#B{0}-4 ({1})", counter, columnName));
+ Assert.AreEqual (entry.ControlVirtualPath, path, String.Format ("#B{0}-5 ({1})", counter, columnName));
+ }
+
+ counter++;
+ }
+ }
+
+ [Test]
+ public void GetFieldTemplateVirtualPath_05 ()
+ {
+ var test = new WebTest ("ListView_DynamicControl_04.aspx");
+ var p = test.Run ();
+
+ // Fake post-back
+ var delegates = new PageDelegates ();
+ delegates.PreRenderComplete = GetFieldTemplateVirtualPath_OnPreRenderComplete_05;
+ test.Invoker = new PageInvoker (delegates);
+ var fr = new FormRequest (test.Response, "form1");
+#if TARGET_DOTNET
+ fr.Controls.Add ("ListView4$ctrl0$editMe");
+ fr.Controls["ListView4$ctrl0$editMe"].Value = "Edit";
+#else
+ fr.Controls.Add ("ListView4$ctl01$editMe");
+ fr.Controls["ListView4$ctl01$editMe"].Value = "Edit";
+#endif
+ test.Request = fr;
+ p = test.Run ();
+
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+ }
+
+ static void GetFieldTemplateVirtualPath_OnPreRenderComplete_05 (Page p)
+ {
+ var lc = p.FindControl ("ListView4") as ListView;
+ Assert.IsNotNull (lc, "#A1");
+
+ var ftf = new FieldTemplateFactory ();
+ ftf.Initialize (MetaModel.Default);
+ int counter = 1;
+ foreach (var entry in FieldTemplatePathTables.FieldTemplateEditColumns) {
+ string columnName = entry.ColumnName;
+ var dc = lc.FindChild<PokerDynamicControl> (columnName);
+ Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
+ Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
+
+ string path = ftf.GetFieldTemplateVirtualPath (dc.Column, DataBoundControlMode.Edit, null);
+ if (entry.IsNull)
+ Assert.IsNull (path, String.Format ("#B{0}-3 ({1})", counter, columnName));
+ else {
+ Assert.IsNotNull (path, String.Format ("#B{0}-4 ({1})", counter, columnName));
+ Assert.AreEqual (entry.ControlVirtualPath, path, String.Format ("#B{0}-5 ({1})", counter, columnName));
+ }
+
+ counter++;
+ }
+ }
+
+ // This tests full type name templates
+ [Test]
+ public void GetFieldTemplateVirtualPath_06 ()
+ {
+ FieldTemplatePathTables.SetUp_FullTypeNameTemplates (this);
+ var test = new WebTest ("ListView_DynamicControl_03.aspx");
+ test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_06);
+ var p = test.Run ();
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+ }
+
+ static void GetFieldTemplateVirtualPath_OnLoad_06 (Page p)
+ {
+ var lc = p.FindControl ("ListView3") as ListView;
+ Assert.IsNotNull (lc, "#A1");
+
+ var ftf = new FieldTemplateFactory ();
+ ftf.Initialize (MetaModel.Default);
+ int counter = 1;
+ foreach (var entry in FieldTemplatePathTables.FieldTemplateNonDefaultColumns) {
+ string columnName = entry.ColumnName;
+ var dc = lc.FindChild<PokerDynamicControl> (columnName);
+ Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
+ Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
+
+ string path = ftf.GetFieldTemplateVirtualPath (dc.Column, DataBoundControlMode.ReadOnly, null);
+ if (entry.IsNull)
+ Assert.IsNull (path, String.Format ("#B{0}-3 ({1})", counter, columnName));
+ else {
+ Assert.IsNotNull (path, String.Format ("#B{0}-4 ({1})", counter, columnName));
+ Assert.AreEqual (entry.ControlVirtualPath, path, String.Format ("#B{0}-5 ({1})", counter, columnName));
+ }
+
+ counter++;
+ }
+ }
+
+ // This tests short type name templates
+ [Test]
+ public void GetFieldTemplateVirtualPath_07 ()
+ {
+ FieldTemplatePathTables.SetUp_ShortTypeNameTemplates (this);
+ var test = new WebTest ("ListView_DynamicControl_03.aspx");
+ test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_07);
+ var p = test.Run ();
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+ }
+
+ static void GetFieldTemplateVirtualPath_OnLoad_07 (Page p)
+ {
+ var lc = p.FindControl ("ListView3") as ListView;
+ Assert.IsNotNull (lc, "#A1");
+
+ var ftf = new FieldTemplateFactory ();
+ ftf.Initialize (MetaModel.Default);
+ int counter = 1;
+ foreach (var entry in FieldTemplatePathTables.FieldTemplateNonDefaultShortColumns) {
+ string columnName = entry.ColumnName;
+ var dc = lc.FindChild<PokerDynamicControl> (columnName);
+ Assert.IsNotNull (dc, String.Format ("#B{0}-1 ({1})", counter, columnName));
+ Assert.AreEqual (columnName, dc.ID, String.Format ("#B{0}-2 ({1})", counter, columnName));
+
+ string path = ftf.GetFieldTemplateVirtualPath (dc.Column, DataBoundControlMode.ReadOnly, null);
+ if (entry.IsNull)
+ Assert.IsNull (path, String.Format ("#B{0}-3 ({1})", counter, columnName));
+ else {
+ Assert.IsNotNull (path, String.Format ("#B{0}-4 ({1})", counter, columnName));
+ Assert.AreEqual (entry.ControlVirtualPath, path, String.Format ("#B{0}-5 ({1})", counter, columnName));
+ }
+
+ counter++;
+ }
+ }
+
+ [Test]
+ public void GetFieldTemplateVirtualPath_08 ()
+ {
+ var test = new WebTest ("ListView_DynamicControl_09.aspx");
+ test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_08);
+ var p = test.Run ();
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+ }
+
+ static void GetFieldTemplateVirtualPath_OnLoad_08 (Page p)
+ {
+ MetaModel m = MetaModel.Default;
+ MetaTable t = m.GetTable ("AssociatedFooTable");
+ MetaColumn mc = t.GetColumn ("PrimaryKeyColumn2");
+
+ var ftf = new FieldTemplateFactory ();
+ ftf.Initialize (m);
+
+ // Ugh...
+ AssertExtensions.Throws<NullReferenceException> (() => {
+ ftf.GetFieldTemplateVirtualPath (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
+ }, "#A1");
+
+
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Children.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#A2");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Children.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#A3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate"), "#A4");
+ }
+
+ [Test]
+ public void GetFieldTemplateVirtualPath_09 ()
+ {
+ var test = new WebTest ("ListView_DynamicControl_09.aspx");
+ test.Invoker = PageInvoker.CreateOnLoad (GetFieldTemplateVirtualPath_OnLoad_09);
+ var p = test.Run ();
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+ }
+
+ static void GetFieldTemplateVirtualPath_OnLoad_09 (Page p)
+ {
+ MetaModel m = MetaModel.Default;
+ MetaTable t = m.GetTable ("BazWithDataTypeAttributeTable");
+ MetaColumn mc = t.GetColumn ("CustomColumn1");
+
+ var ftf = new FieldTemplateFactory ();
+ ftf.Initialize (m);
+
+ // Custom type
+ // It appears that DataTypeAttribute's custom type name is passed to BuildVirtualPath
+ AssertExtensions.Throws<ArgumentNullException> (() => {
+ string path = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
+ }, "#A1");
+
+ AssertExtensions.Throws<ArgumentNullException> (() => {
+ string path = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
+ }, "#A1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#A1-2");
+
+ // Custom with UIHint attribute
+ mc = t.GetColumn ("CustomColumn2");
+ Assert.IsNotNull (mc.UIHint, "#A2");
+ Assert.Greater (mc.UIHint.Length, 0, "#A2-1");
+
+ // Proves that UIHint on the column is not used, just the uiHint argument
+ AssertExtensions.Throws<ArgumentNullException> (() => {
+ string path = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
+ }, "#A2-2");
+
+ AssertExtensions.Throws<ArgumentNullException> (() => {
+ string path = ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
+ }, "#A2-3");
+
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#A2-4");
+
+ mc = t.GetColumn ("CustomColumn3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#A3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate"), "#A3-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#A3-2");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#A3-3");
+
+ // Custom with UIHint attribute
+ mc = t.GetColumn ("CustomColumn4");
+ Assert.IsNotNull (mc.UIHint, "#A4");
+ Assert.Greater (mc.UIHint.Length, 0, "#A4-1");
+
+ // Proves that UIHint on the column is not used, just the uiHint argument
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#A4-2");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate"), "#A4-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#A4-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#A4-5");
+
+ // DateTime
+ mc = t.GetColumn ("DateTimeColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#B1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#B1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#B1-2");
+
+ mc = t.GetColumn ("DateTimeColumn2");
+ Assert.IsNotNull (mc.UIHint, "#B2");
+ Assert.Greater (mc.UIHint.Length, 0, "#B2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#B2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#B2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#B2-5");
+
+ // Date -> maps to Text.ascx, regardless of underlying type and uiHint passed
+ mc = t.GetColumn ("DateColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C1-2");
+
+ mc = t.GetColumn ("DateColumn2");
+ Assert.IsNotNull (mc.UIHint, "#C2");
+ Assert.Greater (mc.UIHint.Length, 0, "#C2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C2-5");
+
+ mc = t.GetColumn ("DateColumn3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C3-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C3-2");
+
+ mc = t.GetColumn ("DateColumn4");
+ Assert.IsNotNull (mc.UIHint, "#C4");
+ Assert.Greater (mc.UIHint.Length, 0, "#C4-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C4-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C4-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C4-5");
+
+ // Time
+ mc = t.GetColumn ("TimeColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#D1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#D1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#D1-2");
+
+ mc = t.GetColumn ("TimeColumn2");
+ Assert.IsNotNull (mc.UIHint, "#D2");
+ Assert.Greater (mc.UIHint.Length, 0, "#D2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#D2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#D2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#D2-5");
+
+ // Duration
+ mc = t.GetColumn ("DurationColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#E1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#E1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#E1-2");
+
+ mc = t.GetColumn ("DurationColumn2");
+ Assert.IsNotNull (mc.UIHint, "#E2");
+ Assert.Greater (mc.UIHint.Length, 0, "#E2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#E2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#E2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#E2-5");
+
+ // PhoneNumber
+ mc = t.GetColumn ("PhoneNumberColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#F1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#F1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#F1-2");
+
+ mc = t.GetColumn ("PhoneNumberColumn2");
+ Assert.IsNotNull (mc.UIHint, "#F2");
+ Assert.Greater (mc.UIHint.Length, 0, "#F2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#F2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#F2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#F2-5");
+
+ // Currency
+ mc = t.GetColumn ("CurrencyColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#G1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#G1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#G1-2");
+
+ mc = t.GetColumn ("CurrencyColumn2");
+ Assert.IsNotNull (mc.UIHint, "#G2");
+ Assert.Greater (mc.UIHint.Length, 0, "#G2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#G2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#G2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#G2-5");
+
+ // Text
+ mc = t.GetColumn ("TextColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#H1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#H1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#H1-2");
+
+ mc = t.GetColumn ("TextColumn2");
+ Assert.IsNotNull (mc.UIHint, "#H2");
+ Assert.Greater (mc.UIHint.Length, 0, "#H2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#H2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#H2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#H2-5");
+
+ // Html
+ mc = t.GetColumn ("HtmlColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#I1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#I1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#I1-2");
+
+ mc = t.GetColumn ("HtmlColumn2");
+ Assert.IsNotNull (mc.UIHint, "#I2");
+ Assert.Greater (mc.UIHint.Length, 0, "#I2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#I2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#I2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#I2-5");
+
+ // MultilineText
+ mc = t.GetColumn ("MultilineTextColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#J1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#J1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#J1-2");
+
+ mc = t.GetColumn ("MultilineTextColumn2");
+ Assert.IsNotNull (mc.UIHint, "#J2");
+ Assert.Greater (mc.UIHint.Length, 0, "#J2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#J2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#J2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#J2-5");
+
+ // EmailAddress
+ mc = t.GetColumn ("EmailAddressColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#K1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#K1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#K1-2");
+
+ mc = t.GetColumn ("EmailAddressColumn2");
+ Assert.IsNotNull (mc.UIHint, "#K2");
+ Assert.Greater (mc.UIHint.Length, 0, "#K2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#K2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#K2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#K2-5");
+
+ // Password
+ mc = t.GetColumn ("PasswordColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#L1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#L1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#L1-2");
+
+ mc = t.GetColumn ("PasswordColumn2");
+ Assert.IsNotNull (mc.UIHint, "#L2");
+ Assert.Greater (mc.UIHint.Length, 0, "#L2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#L2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#L2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#L2-5");
+
+ // Url
+ mc = t.GetColumn ("UrlColumn1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#M1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#M1-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#M1-2");
+
+ mc = t.GetColumn ("UrlColumn2");
+ Assert.IsNotNull (mc.UIHint, "#M2");
+ Assert.Greater (mc.UIHint.Length, 0, "#M2-1");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#M2-3");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#M2-4");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#M2-5");
}
[Test]
Assert.AreEqual (m, ftf.Model, "#A3-1");
}
+ [Test]
+ public void PreprocessMode ()
+ {
+ MetaModel m = Utils.CommonInitialize ();
+ MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
+ MetaColumn mc = t.GetColumn ("Column1");
+
+ var ftf = new FieldTemplateFactory ();
+ ftf.Initialize (m);
+
+ AssertExtensions.Throws<NullReferenceException> (() => {
+ ftf.PreprocessMode (null, DataBoundControlMode.ReadOnly);
+ }, "#A1");
+
+ var mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#A2");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
+ Assert.AreEqual (DataBoundControlMode.Insert, mode, "#A2-1");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
+ Assert.AreEqual (DataBoundControlMode.Edit, mode, "#A2-2");
+
+ mc = t.GetColumn ("PrimaryKeyColumn1");
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#B1");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
+ Assert.AreEqual (DataBoundControlMode.Insert, mode, "#B1-1");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#B1-2");
+
+ t = m.Tables[TestDataContext.TableAssociatedFoo];
+ mc = t.GetColumn ("ForeignKeyColumn1");
+
+ Assert.AreEqual (true, mc.IsForeignKeyComponent, "#C1");
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#C1-1");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
+ Assert.AreEqual (DataBoundControlMode.Insert, mode, "#C1-2");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
+ Assert.AreEqual (DataBoundControlMode.Edit, mode, "#C1-3");
+
+ t = m.Tables[TestDataContext.TableBaz];
+ mc = t.GetColumn ("GeneratedColumn1");
+
+ Assert.AreEqual (true, mc.IsGenerated, "#D1");
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-1");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-2");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-3");
+
+ t = m.Tables[TestDataContext.TableAssociatedFoo];
+ mc = t.GetColumn ("PrimaryKeyColumn1");
+
+ Assert.AreEqual (true, mc.IsForeignKeyComponent, "#D1");
+ Assert.AreEqual (true, mc.IsPrimaryKey, "#D1-1");
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.ReadOnly);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-2");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Insert);
+ Assert.AreEqual (DataBoundControlMode.Insert, mode, "#D1-3");
+
+ mode = ftf.PreprocessMode (mc, DataBoundControlMode.Edit);
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, mode, "#D1-4");
+ }
+
[Test]
public void TemplateFolderVirtualPath ()
{
var ftf = new FieldTemplateFactory ();
string origFolderPath = ftf.TemplateFolderVirtualPath;
- // It seems accessing TemplateFolderVirtualPath before calling Initialize sets the
- // property value to "FieldTemplates/", and the dynamic folder path is ignored later on, so
- // we need to start from scratch here.
ftf = new FieldTemplateFactory ();
Assert.AreEqual ("FieldTemplates/", ftf.TemplateFolderVirtualPath, "#A1");
ftf.Initialize (m);
m.DynamicDataFolderVirtualPath = "~/MyPath";
Assert.AreEqual ("MyFolder/", ftf.TemplateFolderVirtualPath, "#F1");
+
+ ftf = new FieldTemplateFactory ();
+ ftf.Initialize (m);
+ ftf.TemplateFolderVirtualPath = String.Empty;
+
+ AssertExtensions.Throws<ArgumentNullException> (() => {
+ string path = ftf.TemplateFolderVirtualPath;
+ }, "#G1");
}
}
}
--- /dev/null
+//
+// FieldTemplateUserControlTest.cs
+//
+// Authors:
+// Marek Habersack <mhabersack@novell.com>
+//
+// Copyright (C) 2009 Novell Inc. http://novell.com
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.ComponentModel.DataAnnotations;
+using System.Data.SqlClient;
+using System.Data.Linq;
+using System.Data.Linq.Mapping;
+using System.Globalization;
+using System.Linq;
+using System.Net;
+using System.Reflection;
+using System.Security.Permissions;
+using System.Security.Principal;
+using System.Web;
+using System.Web.UI;
+using System.Web.DynamicData;
+using System.Web.DynamicData.ModelProviders;
+using System.Web.Routing;
+using System.Web.UI.HtmlControls;
+using System.Web.UI.WebControls;
+using System.IO;
+
+using NUnit.Framework;
+using NUnit.Mocks;
+using MonoTests.stand_alone.WebHarness;
+using MonoTests.SystemWeb.Framework;
+using MonoTests.Common;
+using MonoTests.DataSource;
+using MonoTests.DataObjects;
+using MonoTests.ModelProviders;
+
+using MetaModel = System.Web.DynamicData.MetaModel;
+using MetaTable = System.Web.DynamicData.MetaTable;
+
+namespace MonoTests.System.Web.DynamicData
+{
+ [TestFixture]
+ public class FieldTemplateUserControlTest
+ {
+ DynamicDataContainerModelProvider<TestDataContext> dynamicModelProvider;
+
+ [TestFixtureSetUp]
+ public void SetUp ()
+ {
+ Type type = GetType ();
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx", "ListView_DynamicControl_01.aspx");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx.cs", "ListView_DynamicControl_01.aspx.cs");
+
+ dynamicModelProvider = new DynamicDataContainerModelProvider<TestDataContext> ();
+ Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
+ }
+
+ [TestFixtureTearDown]
+ public void TearDown ()
+ {
+ WebTest.Unload ();
+ }
+
+ [Test]
+ public void Defaults ()
+ {
+ var field = new PokerFieldTemplateUserControl ();
+
+ // And for another time - not a single null check in the code...
+ //
+ // All the asserts commented out below throw a NREX
+ //
+
+ //Assert.IsNull (field.ChildrenColumn, "#A1");
+ //Assert.IsNull (field.GetChildrenPath (), "#A2");
+ //Assert.IsNull (field.Column, "#A3");
+ Assert.IsNull (field.DataControl, "#A4");
+ //Assert.IsNull (field.FieldValue, "#A5");
+ //Assert.IsNull (field.FieldValueEditString, "#A6");
+ //Assert.IsNull (field.FieldValueString, "#A7");
+ //Assert.IsNull (field.ForeignKeyColumn, "#A8");
+ //Assert.IsNull (field.GetForeignKeyPath (), "#A9");
+ Assert.IsNull (field.Host, "#A10");
+ //Assert.IsNull (field.MetadataAttributes, "#A11");
+ //Assert.IsNull (field.Mode, "#A12");
+ //Assert.IsNull (field.Row, "#A13");
+ //Assert.IsNull (field.Table, "#A14");
+ }
+
+ [Test]
+ public void Defaults_WithHost ()
+ {
+ var test = new WebTest ("ListView_DynamicControl_01.aspx");
+ test.Invoker = PageInvoker.CreateOnLoad (Defaults_WithHost_OnLoad);
+ var p = test.Run ();
+ Assert.IsNotNull (test.Response, "#X1");
+ Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+ Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+ }
+
+ static void Defaults_WithHost_OnLoad (Page p)
+ {
+ // Not many "defaults" here
+
+ var lc = p.FindControl ("ListView1") as ListView;
+ Assert.IsNotNull (lc, "#A1");
+
+ var dc = lc.FindChild<DynamicControl> ("FirstName");
+ Assert.IsNotNull (dc, "#B1-1");
+ Assert.AreEqual ("FirstName", dc.ID, "#B1-2");
+
+ var field = new PokerFieldTemplateUserControl ();
+
+ // Without it Row NREXes... However, with Page set, we still get an exception
+ // this time from Page.GetDataItem () as we're not bound to data. So, there is
+ // no way to test the "defaults" as if we used a field control retrieved from
+ // DataControl it would already be initialized
+ field.Page = p;
+ ((IFieldTemplate) field).SetHost (dc);
+
+ AssertExtensions.Throws<Exception> (() => {
+ var f = field.ChildrenColumn;
+ }, "#C1");
+
+ // The FirstName column is not a children one
+ AssertExtensions.Throws<Exception> (() => {
+ field.GetChildrenPath ();
+ }, "#C2");
+ Assert.IsNotNull (field.Column, "#C3");
+ Assert.AreEqual (dc.Column, field.Column, "#C3-1");
+ Assert.IsNull (field.DataControl, "#C4");
+
+ // The tests below fail with exception:
+ //
+ // MonoTests.System.Web.DynamicData.FieldTemplateUserControlTest.Defaults_WithHost:
+ // System.InvalidOperationException : System.InvalidOperationException: Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.
+ // at System.Web.UI.Page.GetDataItem()
+ // at System.Web.DynamicData.FieldTemplateUserControl.get_Row()
+ // at System.Web.DynamicData.FieldTemplateUserControl.GetColumnValue(MetaColumn column)
+ // at System.Web.DynamicData.FieldTemplateUserControl.get_FieldValue()
+ // at System.Web.DynamicData.FieldTemplateUserControl.get_FieldValueEditString()
+ // at MonoTests.System.Web.DynamicData.FieldTemplateUserControlTest.Defaults_WithHost_OnLoad(Page p)
+ // at MonoTests.SystemWeb.Framework.PageInvoker.Invoke(PageDelegate callback)
+ // at MonoTests.SystemWeb.Framework.PageInvoker.OnLoad(Object sender, EventArgs a)
+ // at System.EventHandler.Invoke(Object sender, EventArgs e)
+ // at System.Web.UI.Control.OnLoad(EventArgs e)
+ // at System.Web.UI.Control.LoadRecursive()
+ // at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+ // ----> System.InvalidOperationException : Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.
+
+ //Assert.IsNull (field.FieldValue, "#C5");
+ //Assert.IsNull (field.FieldValueEditString, "#C6");
+ //Assert.IsNull (field.FieldValueString, "#C7");
+
+ // The FirstName column is not a foreign key one
+ AssertExtensions.Throws<Exception> (() => {
+ var f = field.ForeignKeyColumn;
+ }, "#C8");
+ AssertExtensions.Throws<Exception> (() => {
+ var f = field.GetForeignKeyPath ();
+ }, "#C9");
+ Assert.IsNotNull (field.Host, "#C10");
+ Assert.AreEqual (dc, field.Host, "#C10-1");
+ Assert.IsNotNull (field.MetadataAttributes, "#C11");
+ Assert.AreEqual (DataBoundControlMode.ReadOnly, field.Mode, "#C12");
+
+ // Failure with the same exception as above
+ //Assert.IsNull (field.Row, "#C13");
+
+ Assert.IsNotNull (field.Table, "#C14");
+ Assert.AreEqual (dc.Table, field.Table, "#C14-1");
+ }
+ }
+}
<script RunAt="server">
- void RegisterRoutes (RouteCollection routes)
- {
- var provider = new DynamicDataContainerModelProvider <EmployeesDataContext> ();
- Utils.RegisterContext (provider, new ContextConfiguration () { ScaffoldAllTables = true }, true);
- routes.Add (new DynamicDataRoute ("{table}/{action}.aspx") {
- Constraints = new RouteValueDictionary (new { action = "List|Details|Edit|Insert" }),
- Model = MetaModel.Default
- });
- }
-
- void Application_Start (object sender, EventArgs e)
- {
- RegisterRoutes (RouteTable.Routes);
- }
+ void RegisterRoutes (RouteCollection routes) {
+ var provider = new DynamicDataContainerModelProvider<EmployeesDataContext> ();
+ provider.ResolveAssociations ();
+ Utils.RegisterContext (provider, new ContextConfiguration () { ScaffoldAllTables = true }, true);
+
+ var provider2 = new DynamicDataContainerModelProvider<TestDataContext3> ();
+ provider2.ResolveAssociations ();
+ Utils.RegisterContext (provider2, new ContextConfiguration () { ScaffoldAllTables = true }, true);
+ routes.Add (new DynamicDataRoute ("{table}/{action}.aspx") {
+ Constraints = new RouteValueDictionary (new { action = "List|Details|Edit|Insert" }),
+ Model = MetaModel.Default
+ });
+ }
+
+ void Application_Start (object sender, EventArgs e) {
+ RegisterRoutes (RouteTable.Routes);
+ }
</script>
--- /dev/null
+<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ListView_DynamicControl_09.aspx.cs" Inherits="ListView_DynamicControl_09" %>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html >
+<head id="Head1" runat="server">
+ <title>DynamicControl Sample</title>
+</head>
+<body>
+ <form id="form1" runat="server">
+ <div>
+ <asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true" />
+ <asp:ListView ID="ListView1" runat="server" DataSourceID="DynamicDataSource1">
+ <LayoutTemplate>
+ <div runat="server" id="itemPlaceholder" />
+ </LayoutTemplate>
+ <ItemTemplate>
+ <div>
+ <test:PokerDynamicControl runat="server" DataField="PrimaryKeyColumn1" id="PrimaryKeyColumn1"/>
+ <test:PokerDynamicControl runat="server" DataField="PrimaryKeyColumn2" id="PrimaryKeyColumn2"/>
+ <test:PokerDynamicControl runat="server" DataField="Column1" ID="Column1" CssClass="activeCssClass" />
+ </div>
+ </ItemTemplate>
+ </asp:ListView>
+
+ <test:DynamicDataSource runat="server" id="DynamicDataSource1" />
+ </div>
+ </form>
+</body>
+</html>
--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+using MonoTests.DataObjects;
+using MonoTests.Common;
+using MonoTests.SystemWeb.Framework;
+using MonoTests.DataSource;
+
+public partial class ListView_DynamicControl_09 : TestsBasePage <TestDataContext3>
+{
+ protected override void PopulateDataSource (DynamicDataSource ds)
+ {
+ var container = ds.DataContainerInstance as TestDataContainer<TestDataContext3>;
+ if (container == null)
+ return;
+
+ List<AssociatedFoo> foo = container.ContainedTypeInstance.AssociatedFoo;
+ foo.Add (new AssociatedFoo {
+ PrimaryKeyColumn1 = "Marek",
+ PrimaryKeyColumn2 = 2,
+ Column1 = 1
+ });
+ }
+
+ protected void Page_Init (object sender, EventArgs e)
+ {
+ InitializeDataSource (DynamicDataSource1, "AssociatedFooTable");
+ DynamicDataManager1.RegisterControl (ListView1);
+ }
+
+ protected void Page_Load (object sender, EventArgs e)
+ {
+
+ }
+}
+2009-09-15 Marek Habersack <mhabersack@novell.com>
+
+ * ListView.cs: CreateChildControls calls EnsureDataBound only if
+ we're not in post-back and if data binding is required.
+
2009-09-08 Marek Habersack <mhabersack@novell.com>
* ListView.cs: if total row count has been retrieved from the
{
object itemCount = ViewState ["_!ItemCount"];
if (itemCount != null) {
- if (RequiresDataBinding)
- EnsureDataBound ();
-
int c = (int)itemCount;
if (c >= 0) {
// Fake data - we only need to make sure
object[] data = new object [c];
CreateChildControls (data, false);
}
- }
+ } else if (RequiresDataBinding)
+ EnsureDataBound ();
base.CreateChildControls ();
}