+2009-09-18 Marek Habersack <mhabersack@novell.com>
+
+ * Makefile (TEST_RESOURCE_FILES): added
+ Test/WebPages/ListView_DynamicControl_10.aspx,
+ Test/WebPages/ListView_DynamicControl_10.aspx.cs
+
2009-09-15 Marek Habersack <mhabersack@novell.com>
* Makefile (TEST_RESOURCE_FILES): added
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/ListView_DynamicControl_10.aspx,MonoTests.WebPages.ListView_DynamicControl_10.aspx \
+ Test/WebPages/ListView_DynamicControl_10.aspx.cs,MonoTests.WebPages.ListView_DynamicControl_10.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-18 Marek Habersack <mhabersack@novell.com>
+
+ * MetaTable.cs: implemented Init - calls Init on all the columns
+ present in this instance.
+
+ * MetaModel.cs: constructor initializes FieldTemplateFactory after
+ it is instantiated.
+ RegisterContextCore first registers the context type, then creates
+ tables and finally calls Init on all the tables.
+
+ * MetaColumn.cs: added internal Init method - called by MetaModel
+ after context is registered and all tables are created and
+ registered.
+
+ * MetaChildrenColumn.cs: implemented ChildTable,
+ ColumnInOtherTable, GetChildrenListPath, GetChildrenPath and added
+ an internal Init method override. MonoTODO attributes stay until I
+ write tests for the class.
+
+ * FieldTemplateUserControl.cs: implemented ChildrenColumn,
+ ChildrenPath, Column, ForeignKeyColumn, ForeignKeyPath,
+ MetadataAttributes, Mode, Row, Table, SetHost
+
+ * FieldTemplateFactory.cs: GetFieldTemplateVirtualPath fixes
+
+ * DynamicControl.cs: implemented ApplyFormatInEditMode,
+ ConvertEmptyStringToNull, DataField, DataFormatString, HtmlEncode,
+ FormattingOptions, NullDisplayText, UIHint, OnInit, Render.
+
2009-09-15 Marek Habersack <mhabersack@novell.com>
* MetaColumn.cs: DataTypeAttribtue created automatically for
public class DynamicControl : Control, IAttributeAccessor, IFieldTemplateHost, IFieldFormattingOptions
{
Dictionary <string, string> attributes;
+ bool? applyFormatInEditMode;
+ bool? convertEmptyStringToNull;
+ bool? htmlEncode;
+ string dataField = String.Empty;
+ string dataFormatString;
+ string nullDisplayText;
+ string uiHint;
public DynamicControl () : this (DataBoundControlMode.ReadOnly)
{
public DynamicControl (DataBoundControlMode mode)
{
Mode = mode;
- UIHint = String.Empty;
+ CssClass = String.Empty;
+ ValidationGroup = String.Empty;
}
[Category ("Behavior")]
[DefaultValue (false)]
- public bool ApplyFormatInEditMode { get; set; }
+ public bool ApplyFormatInEditMode {
+ get {
+ if (applyFormatInEditMode == null) {
+ MetaColumn column = Column;
+ applyFormatInEditMode = column != null ? column.ApplyFormatInEditMode : false;
+ }
+
+ return (bool)applyFormatInEditMode;
+ }
+
+ set { applyFormatInEditMode = value; }
+ }
[Browsable (false)]
public MetaColumn Column { get; set; }
[Category ("Behavior")]
[DefaultValue (false)]
- public bool ConvertEmptyStringToNull { get; set; }
+ public bool ConvertEmptyStringToNull {
+ get {
+ if (convertEmptyStringToNull == null) {
+ MetaColumn column = Column;
+ convertEmptyStringToNull = column != null ? column.ConvertEmptyStringToNull : false;
+ }
+
+ return (bool)convertEmptyStringToNull;
+ }
+
+ set { convertEmptyStringToNull = value; }
+ }
[MonoTODO]
[Category ("Appearance")]
[Category ("Data")]
[DefaultValue ("")]
- public string DataField { get; set; }
+ public string DataField {
+ get { return dataField; }
+
+ set { dataField = value == null ? String.Empty : value; }
+ }
- [MonoTODO]
[Category ("Data")]
[DefaultValue ("")]
- public string DataFormatString { get; set; }
+ public string DataFormatString {
+ get {
+ if (dataFormatString == null) {
+ MetaColumn column = Column;
+ if (column != null) {
+ dataFormatString = column.DataFormatString;
+ if (dataFormatString == null)
+ dataFormatString = String.Empty;
+ } else
+ dataFormatString = String.Empty;
+ }
+
+ return dataFormatString;
+ }
+
+ set { dataFormatString = value == null ? String.Empty : value; }
+ }
[MonoTODO]
[Browsable (false)]
public Control FieldTemplate { get; private set; }
- [MonoTODO]
[Category ("Behavior")]
[DefaultValue (true)]
- public bool HtmlEncode { get; set; }
+ public bool HtmlEncode {
+ get {
+ if (htmlEncode == null) {
+ MetaColumn column = Column;
+ htmlEncode = column != null ? column.HtmlEncode : true;
+ }
+
+ return (bool)htmlEncode;
+ }
+
+ set { htmlEncode = value; }
+ }
- [MonoTODO]
IFieldFormattingOptions IFieldTemplateHost.FormattingOptions {
- get { throw new NotImplementedException (); }
+ get { return this; }
}
[MonoTODO]
public DataBoundControlMode Mode { get; set; }
- [MonoTODO]
[Category ("Behavior")]
[DefaultValue ("")]
- public string NullDisplayText { get; set; }
+ public string NullDisplayText {
+ get {
+ if (nullDisplayText == null) {
+ MetaColumn column = Column;
+ if (column != null) {
+ nullDisplayText = column.NullDisplayText;
+ if (nullDisplayText == null)
+ nullDisplayText = String.Empty;
+ } else
+ nullDisplayText = String.Empty;
+ }
+
+ return nullDisplayText;
+ }
+
+ set { nullDisplayText = value == null ? String.Empty : value; }
+ }
[Browsable (false)]
public virtual MetaTable Table {
[Category ("Behavior")]
[DefaultValue ("")]
- public virtual string UIHint { get; set; }
+ public virtual string UIHint {
+ get {
+ if (uiHint == null) {
+ MetaColumn column = Column;
+ uiHint = column != null ? column.UIHint : String.Empty;
+ if (uiHint == null)
+ uiHint = String.Empty;
+ }
+
+ return uiHint;
+ }
+
+ set { uiHint = value != null ? value : String.Empty; }
+
+ }
- [MonoTODO]
[Themeable (false)]
[Category ("Behavior")]
[DefaultValue ("")]
public virtual string ValidationGroup { get; set; }
+
+ void CreateFieldTemplate ()
+ {
+ MetaColumn column = Column;
+
+ // Safe as ResolveColumn won't return with a null Column
+ MetaModel model = column.Model;
+ IFieldTemplateFactory ftf = model != null ? model.FieldTemplateFactory : null;
+ IFieldTemplate ft;
+
+ if (ftf != null) {
+ ft = ftf.CreateFieldTemplate (column, Mode, UIHint);
+ if (ft == null)
+ return;
+ } else
+ return;
+
+ ft.SetHost (this);
+
+ Control ctl = ft as Control;
+ if (ctl == null)
+ return;
+
+ FieldTemplate = ctl;
+ Controls.Add (ctl);
+ }
public string GetAttribute (string key)
{
if (attributes == null)
- return null;
+ return String.Empty;
string ret;
if (attributes.TryGetValue (key, out ret))
return ret;
-
- return null;
+ else
+ // "Compatibility"...
+ throw new KeyNotFoundException ("NoSuchAttribute");
}
- [MonoTODO]
protected override void OnInit (EventArgs e)
{
// It seems _all_ the properties are initialized _only_ here. Further user's
// actions to set the Column property don't affect the other properties
// which derive their values from the associated MetaColumn.
base.OnInit (e);
- if (Column == null)
+ if (Column == null) {
ResolveColumn ();
+ Controls.Clear ();
+ CreateFieldTemplate ();
+ }
}
protected override void Render (HtmlTextWriter writer)
{
+ string cssClass = CssClass;
+ bool haveCssClass = !String.IsNullOrEmpty (cssClass);
+
+ if (haveCssClass) {
+ writer.AddAttribute (HtmlTextWriterAttribute.Class, cssClass);
+ writer.RenderBeginTag (HtmlTextWriterTag.Span);
+ writer.Write ("\n\n");
+ }
+
base.Render (writer);
- // Why override?
+
+ if (haveCssClass) {
+ writer.RenderEndTag ();
+ }
}
void ResolveColumn ()
var t = routeData.GetRequiredString ("Table");
if (Model == null)
throw new InvalidOperationException ("MetaModel must be set to the DynamicDataRoute before retrieving MetaTable");
- MetaTable mt;
+
return Model.GetTable (t);
}
{
// NO checks are made on parameters in .NET, but well "handle" the NREX
// throws in the other methods
- return BuildManager.CreateInstanceFromVirtualPath (GetFieldTemplateVirtualPath (column, mode, uiHint), typeof (IFieldTemplate)) as IFieldTemplate;
+ string virtualPath = GetFieldTemplateVirtualPath (column, mode, uiHint);
+ if (String.IsNullOrEmpty (virtualPath))
+ return null;
+
+ return BuildManager.CreateInstanceFromVirtualPath (virtualPath, typeof (IFieldTemplate)) as IFieldTemplate;
}
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);
- string templatePath;
// The algorithm is as follows:
//
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;
+ string templatePath = null;
+ int step = uiHintPresent ? 0 : 1;
Type columnType = column.ColumnType;
- if (uiHintPresent)
- step = 0;
- else if (attr == null && templatePath == null) {
+ if (!uiHintPresent && attr == null) {
if (column is MetaChildrenColumn)
- templatePath = GetExistingTemplateVirtualPath ("Children", column, mode);
+ templatePath = GetExistingTemplateVirtualPath ("Children", column, newMode);
else if (column is MetaForeignKeyColumn)
- templatePath = GetExistingTemplateVirtualPath ("ForeignKey", column, mode);
+ templatePath = GetExistingTemplateVirtualPath ("ForeignKey", column, newMode);
}
-
+
while (step < 6 && templatePath == null) {
switch (step) {
case 0:
- templatePath = GetExistingTemplateVirtualPath (uiHint, column, mode);
+ templatePath = GetExistingTemplateVirtualPath (uiHint, column, newMode);
break;
case 1:
if (attr != null)
- templatePath = GetTemplateForDataType (attr.DataType, attr.GetDataTypeName (), uiHint, column, mode);
+ templatePath = GetTemplateForDataType (attr.DataType, attr.GetDataTypeName (), uiHint, column, newMode);
break;
case 2:
- templatePath = GetExistingTemplateVirtualPath (columnType.FullName, column, mode);
+ templatePath = GetExistingTemplateVirtualPath (columnType.FullName, column, newMode);
break;
case 3:
- templatePath = GetExistingTemplateVirtualPath (columnType.Name, column, mode);
+ templatePath = GetExistingTemplateVirtualPath (columnType.Name, column, newMode);
break;
case 4:
- templatePath = ColumnTypeToSpecialName (columnType, column, mode);
+ templatePath = ColumnTypeToSpecialName (columnType, column, newMode);
break;
case 5:
- columnType = GetFallbackType (columnType, column, mode);
+ columnType = GetFallbackType (columnType, column, newMode);
if (columnType == null)
step = 5;
else
{
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;
+ return GetExistingTemplateVirtualPath (customDataType, column, mode);
case DataType.DateTime:
return GetExistingTemplateVirtualPath ("DateTime", column, mode);
//
// 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
//
//
[AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class FieldTemplateUserControl : UserControl, IBindableControl, IFieldTemplate
{
- [MonoTODO]
- public MetaChildrenColumn ChildrenColumn { get; private set; }
- [MonoTODO]
- protected string ChildrenPath { get; private set; }
- [MonoTODO]
- public MetaColumn Column { get; private set; }
+ public MetaChildrenColumn ChildrenColumn {
+ get {
+ MetaColumn column = Column;
+ var ret = column as MetaChildrenColumn;
+ if (ret == null) {
+ string name = column == null ? null : column.Name;
+ throw new Exception ("'" + name + "' is not a children column and cannot be used here.");
+ }
+
+ return ret;
+ }
+ }
+
+ [MonoTODO]
+ protected string ChildrenPath {
+ get { return ChildrenColumn.GetChildrenListPath (Row); }
+
+ }
+
+ public MetaColumn Column {
+ get {
+ IFieldTemplateHost host = Host;
+ if (host != null)
+ return host.Column;
+
+ return null;
+ }
+ }
+
[MonoTODO]
public virtual Control DataControl { get; private set; }
[MonoTODO]
public virtual string FieldValueEditString { get; private set; }
[MonoTODO]
public virtual string FieldValueString { get; private set; }
+
[MonoTODO]
- public MetaForeignKeyColumn ForeignKeyColumn { get; private set; }
+ public MetaForeignKeyColumn ForeignKeyColumn {
+ get {
+ MetaColumn column = Column;
+ var ret = column as MetaForeignKeyColumn;
+ if (ret == null) {
+ string name = column == null ? null : column.Name;
+ throw new Exception ("'" + name + "' is not a foreign key column and cannot be used here.");
+ }
+
+ return ret;
+ }
+ }
+
[MonoTODO]
- protected string ForeignKeyPath { get; private set; }
+ protected string ForeignKeyPath {
+ get { return ForeignKeyColumn.GetForeignKeyDetailsPath (Row); }
+ }
+
[MonoTODO]
public IFieldFormattingOptions FormattingOptions { get; private set; }
- [MonoTODO]
+
public IFieldTemplateHost Host { get; private set; }
+
[MonoTODO]
- public System.ComponentModel.AttributeCollection MetadataAttributes { get; private set; }
+ public System.ComponentModel.AttributeCollection MetadataAttributes {
+ get {
+ MetaColumn column = Column;
+ if (column == null)
+ return null;
+
+ return column.Attributes;
+ }
+ }
+
[MonoTODO]
- public DataBoundControlMode Mode { get; private set; }
+ public DataBoundControlMode Mode {
+ get {
+ IFieldTemplateHost host = Host;
+ return host == null ? DataBoundControlMode.ReadOnly : host.Mode;
+ }
+ }
+
[MonoTODO]
- public virtual object Row { get; private set; }
+ public virtual object Row {
+ get {
+ Page page = Page;
+ return page == null ? null : page.GetDataItem ();
+ }
+ }
+
[MonoTODO]
- public MetaTable Table { get; private set; }
+ public MetaTable Table {
+ get {
+ MetaColumn column = Column;
+ return column == null ? null : column.Table;
+ }
+ }
[MonoTODO]
protected string BuildChildrenPath (string path)
ExtractValues (dictionary);
}
- [MonoTODO]
void IFieldTemplate.SetHost (IFieldTemplateHost host)
{
- throw new NotImplementedException ();
+ Host = host;
}
[MonoTODO]
//
// 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
//
//
internal MetaChildrenColumn (MetaTable table, ColumnProvider provider)
: base (table, provider)
{
+ if (table == null)
+ throw new ArgumentNullException ("table");
}
[MonoTODO]
[MonoTODO]
public string GetChildrenListPath (object row)
{
- throw new NotImplementedException ();
+ return ChildTable.GetActionPath (PageAction.List, row);
}
[MonoTODO]
public string GetChildrenPath (string action, object row)
{
- throw new NotImplementedException ();
+ return ChildTable.GetActionPath (action, row);
}
[MonoTODO]
public string GetChildrenPath (string action, object row, string path)
{
- throw new NotImplementedException ();
+ return ChildTable.GetActionPath (action, row, path);
+ }
+
+ internal override void Init ()
+ {
+ AssociationProvider association = Provider.Association;
+ ColumnProvider otherColumn = association.ToColumn;
+ string otherColumnName = otherColumn == null ? null : otherColumn.Name;
+ MetaTable childTable = Model.GetTable (association.ToTable.Name, Table.DataContextType);
+ ChildTable = childTable;
+ if (childTable != null && !String.IsNullOrEmpty (otherColumnName))
+ ColumnInOtherTable = childTable.GetColumn (otherColumnName);
}
}
}
bool uiHintReflected;
string dataFormatString;
- PropertyDescriptor property;
object defaultValue;
string description;
string displayName;
return displayFormatAttr;
}
+
+ internal virtual void Init ()
+ {
+ }
AttributeCollection LoadAttributes ()
{
static Exception registration_exception;
static Dictionary<Type, MetaModel> registered_models;
- DataModelProvider provider;
string dynamicDataFolderVirtualPath;
public static MetaModel Default {
if (default_model == null)
default_model = this;
- FieldTemplateFactory = new FieldTemplateFactory ();
+ FieldTemplateFactory ftf = new FieldTemplateFactory ();
+ ftf.Initialize (this);
+ FieldTemplateFactory = ftf;
+
Tables = new ReadOnlyCollection<MetaTable> (new MetaTable [0]);
VisibleTables = new List<MetaTable> ();
}
void RegisterContextCore (DataModelProvider dataModelProvider, ContextConfiguration configuration)
{
+ RegisterModel (dataModelProvider.ContextType, this, configuration);
+
var l = new List<MetaTable> (Tables);
foreach (var t in dataModelProvider.Tables)
l.Add (new MetaTable (this, t, configuration));
Tables = new ReadOnlyCollection<MetaTable> (l);
+
+ foreach (MetaTable t in l)
+ t.Init ();
+
VisibleTables = l;
- RegisterModel (dataModelProvider.ContextType, this, configuration);
}
static void RegisterModel (Type contextType, MetaModel model, ContextConfiguration configuration)
ScaffoldTableAttribute attr = null;
MetaModel.GetDataFieldAttribute <ScaffoldTableAttribute> (Attributes, ref attr);
Scaffold = attr != null ? attr.Scaffold : scaffoldAllTables;
+ DataContextType = provider.DataModel.ContextType;
var columns = new List <MetaColumn> ();
var primaryKeyColumns = new List <MetaColumn> ();
else
ForeignKeyColumnsNames = String.Join (",", foreignKeyColumnNames.ToArray ());
- DataContextType = provider.DataModel.ContextType;
HasPrimaryKey = primaryKeyColumns.Count > 0;
// See http://forums.asp.net/t/1388561.aspx
return Provider.GetQuery (context == null ? CreateContext () : context);
}
+ internal void Init ()
+ {
+ ReadOnlyCollection <MetaColumn> columns = Columns;
+ if (columns == null)
+ return;
+
+ foreach (MetaColumn mc in columns)
+ mc.Init ();
+ }
+
public override string ToString ()
{
return Name;
+2009-09-18 Marek Habersack <mhabersack@novell.com>
+
+ * TestsBasePage.cs: added an event ItemDataBinding, invoked
+ whenever an item is data bound.
+
2009-07-14 Marek Habersack <mhabersack@novell.com>
* AssertExtensions.cs: include full exception trace in the Fail
namespace MonoTests.Common
{
- public class TestsBasePage <DataContextType> : global::System.Web.UI.Page where DataContextType: new()
+ public class TestsBasePage<DataContextType> : global::System.Web.UI.Page where DataContextType : new ()
{
Type containerType;
bool? outsideTestSuite;
- public bool OutsideTestSuite {
- get {
+ public event EventHandler ItemDataBinding;
+
+ public bool OutsideTestSuite
+ {
+ get
+ {
if (outsideTestSuite == null) {
object o = WebConfigurationManager.AppSettings["OutsideTestSuite"];
string s = o as string;
outsideTestSuite = false;
}
- return (bool) outsideTestSuite;
+ return (bool)outsideTestSuite;
}
- set {
+ set
+ {
outsideTestSuite = value;
}
}
- public virtual Type ContextType {
+ public virtual Type ContextType
+ {
get { return typeof (DataContextType); }
}
- public virtual Type ContainerType {
- get {
+ public virtual Type ContainerType
+ {
+ get
+ {
if (containerType == null) {
Type genType = typeof (TestDataContainer<>).GetGenericTypeDefinition ();
containerType = genType.MakeGenericType (new Type[] { ContextType });
}
}
- public virtual string ContainerTypeName {
+ public virtual string ContainerTypeName
+ {
get { return ContainerType.AssemblyQualifiedName; }
}
- protected virtual IDynamicDataContainer <DataContextType> CreateContainerInstance ()
+ protected virtual IDynamicDataContainer<DataContextType> CreateContainerInstance ()
{
- return Activator.CreateInstance (ContainerType) as IDynamicDataContainer <DataContextType>;
+ return Activator.CreateInstance (ContainerType) as IDynamicDataContainer<DataContextType>;
}
protected virtual void InitializeDataSource (DynamicDataSource ds, string tableName)
t.Invoke (this);
}
}
+
+ public void Item_DataBinding (object sender, EventArgs args)
+ {
+ EventHandler eh = ItemDataBinding;
+ if (eh != null)
+ eh (sender, args);
+ }
}
}
+2009-09-18 Marek Habersack <mhabersack@novell.com>
+
+ * DynamicControlTest.cs: FieldTemplate_1 - fixed fake edit
+ postback for Mono.
+
2009-09-15 Marek Habersack <mhabersack@novell.com>
* FieldTemplateFactoryTest.cs: implemented tests for
delegates.PreRenderComplete = FieldTemplate_OnPreRenderComplete_1;
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.AreEqual ("CustomFieldTemplate", dc.UIHint, "#D1-2");
dc.UIHint = "MyCustomUIHintTemplate_Text";
Assert.AreEqual ("MyCustomUIHintTemplate_Text", dc.UIHint, "#D1-3");
+
+ dc.UIHint = null;
+ Assert.AreEqual (String.Empty, dc.UIHint, "#E1");
}
[Test]
ftf.CreateFieldTemplate (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
}, "#A1");
+#if TARGET_DOTNET
+ // Not going to emulate those on Mono. There are limits...
+
// ...and again
AssertExtensions.Throws<NullReferenceException> (() => {
ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, null);
AssertExtensions.Throws<NullReferenceException> (() => {
ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
}, "#A4");
+#endif
}
[Test]
ftf.GetFieldTemplateVirtualPath (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
}, "#A1");
+#if TARGET_DOTNET
// ...and again
AssertExtensions.Throws<NullReferenceException> (() => {
ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
AssertExtensions.Throws<NullReferenceException> (() => {
ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
}, "#A4");
+#endif
}
[Test]
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#B1-3");
mc = t.GetColumn ("DateTimeColumn2");
Assert.IsNotNull (mc.UIHint, "#B2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#B2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C1-3");
mc = t.GetColumn ("DateColumn2");
Assert.IsNotNull (mc.UIHint, "#C2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C2-6");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C3-3");
mc = t.GetColumn ("DateColumn4");
Assert.IsNotNull (mc.UIHint, "#C4");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C4-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#D1-3");
mc = t.GetColumn ("TimeColumn2");
Assert.IsNotNull (mc.UIHint, "#D2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#D2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#E1-3");
mc = t.GetColumn ("DurationColumn2");
Assert.IsNotNull (mc.UIHint, "#E2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#E2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#F1-3");
mc = t.GetColumn ("PhoneNumberColumn2");
Assert.IsNotNull (mc.UIHint, "#F2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#F2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#G1-3");
mc = t.GetColumn ("CurrencyColumn2");
Assert.IsNotNull (mc.UIHint, "#G2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#G2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#H1-3");
mc = t.GetColumn ("TextColumn2");
Assert.IsNotNull (mc.UIHint, "#H2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#H2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#I1-3");
mc = t.GetColumn ("HtmlColumn2");
Assert.IsNotNull (mc.UIHint, "#I2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#I2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#J1-3");
mc = t.GetColumn ("MultilineTextColumn2");
Assert.IsNotNull (mc.UIHint, "#J2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#J2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#K1-3");
mc = t.GetColumn ("EmailAddressColumn2");
Assert.IsNotNull (mc.UIHint, "#K2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#K2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#L1-3");
mc = t.GetColumn ("PasswordColumn2");
Assert.IsNotNull (mc.UIHint, "#L2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#L2-6");
// 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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#M1-3");
mc = t.GetColumn ("UrlColumn2");
Assert.IsNotNull (mc.UIHint, "#M2");
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");
+ Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#M2-6");
}
[Test]
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_10.aspx", "ListView_DynamicControl_10.aspx");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx.cs", "ListView_DynamicControl_10.aspx.cs");
dynamicModelProvider = new DynamicDataContainerModelProvider<TestDataContext> ();
Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
Assert.IsNotNull (field.Host, "#C10");
Assert.AreEqual (dc, field.Host, "#C10-1");
Assert.IsNotNull (field.MetadataAttributes, "#C11");
+ Assert.AreEqual (dc.Column.Attributes, field.MetadataAttributes, "#C11-1");
Assert.AreEqual (DataBoundControlMode.ReadOnly, field.Mode, "#C12");
+ Assert.AreEqual (field.Host.Mode, field.Mode, "#C12-1");
// 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");
}
+
+ [Test]
+ public void ChildrenPath ()
+ {
+ var test = new WebTest ("ListView_DynamicControl_10.aspx");
+ test.Invoker = PageInvoker.CreateOnInit (ChildrenPath_OnInit);
+ 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 ChildrenPath_OnInit (Page p)
+ {
+ var lc = p.FindControl ("ListView1") as ListView;
+ Assert.IsNotNull (lc, "#A1");
+
+ var page = p as TestsBasePage<TestDataContext3>;
+ Assert.IsNotNull (p, "#A1-1");
+
+ page.ItemDataBinding += new EventHandler(ChildrenPath_ListControl_OnDataBound);
+ }
+
+ static void ChildrenPath_ListControl_OnDataBound (object sender, EventArgs e)
+ {
+ var dc = sender as DynamicControl;
+ Assert.IsNotNull (dc, "#B1");
+ Assert.AreEqual ("PrimaryKeyColumn2", dc.ID, "#B1-1");
+ Assert.AreEqual (typeof (MetaChildrenColumn), dc.Column.GetType (), "#B1-2");
+
+ var field = dc.FieldTemplate as PokerFieldTemplateUserControl;
+ Assert.IsNotNull (field, "#C1");
+ Assert.AreEqual ("/NunitWeb/AssociatedBarTable/List.aspx", field.GetChildrenPath (), "#C1-1");
+ }
}
}
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.DynamicData;
using System.Web.DynamicData.ModelProviders;
using System.Web.Routing;
+using System.Web.UI.WebControls;
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;
[TestFixtureSetUp]
public void SetUp ()
{
+ Type type = GetType ();
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx", "ListView_DynamicControl_10.aspx");
+ WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx.cs", "ListView_DynamicControl_10.aspx.cs");
+
dynamicModelProvider = new DynamicDataContainerModelProvider <TestDataContext> ();
Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
}
t = m.Tables[TestDataContext.TableBaz];
mc = t.DisplayColumn;
Assert.IsNotNull (mc, "#D1");
- Assert.AreEqual ("PrimaryKeyColumn2", mc.Name, "#D2");
+ Assert.AreEqual ("CustomUIHintColumn", mc.Name, "#D2");
t = m.Tables[TestDataContext.TableBazNoStrings];
mc = t.DisplayColumn;
MetaTable t = m.Tables[TestDataContext.TableAssociatedFoo];
Assert.IsNotNull (t.ForeignKeyColumnsNames, "#A1");
Assert.IsFalse (t.ForeignKeyColumnsNames.Length == 0, "#A2");
- Assert.AreEqual ("ForeignKeyColumn1,PrimaryKeyColumn1", t.ForeignKeyColumnsNames, "#A3");
+ Assert.AreEqual ("ForeignKeyColumn1,ForeignKeyColumn2,PrimaryKeyColumn1", t.ForeignKeyColumnsNames, "#A3");
}
[Test]
Assert.AreEqual (0, ret.Count, "#C2");
}
+ [Test]
+ public void GetPrimaryKeyValues_01 ()
+ {
+ var test = new WebTest ("ListView_DynamicControl_10.aspx");
+ test.Invoker = PageInvoker.CreateOnInit (GetPrimaryKeyValues_01_OnInit);
+ 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 GetPrimaryKeyValues_01_OnInit (Page p)
+ {
+ var lc = p.FindControl ("ListView1") as ListView;
+ Assert.IsNotNull (lc, "#A1");
+
+ var page = p as TestsBasePage<TestDataContext3>;
+ Assert.IsNotNull (p, "#A1-1");
+
+ page.ItemDataBinding += new EventHandler (GetPrimaryKeyValues_01_ListControl_OnItemDataBinding);
+ }
+
+ static void GetPrimaryKeyValues_01_ListControl_OnItemDataBinding (object sender, EventArgs e)
+ {
+ var dc = sender as DynamicControl;
+ Assert.IsNotNull (dc, "#B1");
+ Assert.AreEqual ("PrimaryKeyColumn2", dc.ID, "#B1-1");
+ Assert.AreEqual (typeof (MetaChildrenColumn), dc.Column.GetType (), "#B1-2");
+
+ var field = dc.FieldTemplate as PokerFieldTemplateUserControl;
+ Assert.IsNotNull (field, "#C1");
+
+ var keyValues = dc.Table.GetPrimaryKeyValues (field.Row);
+ Assert.IsNotNull (keyValues, "#D1");
+ Assert.AreEqual (2, keyValues.Count, "#D1-1");
+ Assert.AreEqual (typeof (string), keyValues[0].GetType (), "#D1-2");
+ Assert.AreEqual ("Marek", (string)keyValues[0], "#D1-3");
+ Assert.AreEqual (typeof (int), keyValues[1].GetType (), "D1-4");
+ Assert.AreEqual (2, (int)keyValues[1], "#D1-5");
+ }
+
[Test]
public void GetQuery ()
{
using System.Xml.Linq;
using System.Web.DynamicData;
-public partial class ChildrenField : System.Web.DynamicData.FieldTemplateUserControl {
+using MonoTests.Common;
+
+public partial class ChildrenField : PokerFieldTemplateUserControl {
private bool _allowNavigation = true;
private string _navigateUrl;
--- /dev/null
+<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ListView_DynamicControl_10.aspx.cs" Inherits="ListView_DynamicControl_10" %>
+
+<!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" OnDataBinding="Item_DataBinding"/>
+ <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_10 : 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);
+ }
+}