[Fixes #441] Removed constructors from TagHelperAttributeDescriptor and

TagHelperDescriptor
This commit is contained in:
Ajay Bhargav Baaskaran 2015-08-14 16:45:12 -07:00
parent 96f1090ff1
commit dad3e3ade3
15 changed files with 1361 additions and 1489 deletions

View File

@ -223,16 +223,17 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
TagStructure tagStructure,
TagHelperDesignTimeDescriptor designTimeDescriptor)
{
return new TagHelperDescriptor(
prefix: string.Empty,
tagName: tagName,
typeName: typeName,
assemblyName: assemblyName,
attributes: attributeDescriptors,
requiredAttributes: requiredAttributes,
allowedChildren: allowedChildren,
tagStructure: tagStructure,
designTimeDescriptor: designTimeDescriptor);
return new TagHelperDescriptor
{
TagName = tagName,
TypeName = typeName,
AssemblyName = assemblyName,
Attributes = attributeDescriptors,
RequiredAttributes = requiredAttributes,
AllowedChildren = allowedChildren,
TagStructure = tagStructure,
DesignTimeDescriptor = designTimeDescriptor
};
}
/// <summary>
@ -647,12 +648,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}
#endif
return new TagHelperAttributeDescriptor(
attributeName,
property.Name,
typeName,
isIndexer,
propertyDesignTimeDescriptor);
return new TagHelperAttributeDescriptor
{
Name = attributeName,
PropertyName = property.Name,
TypeName = typeName,
IsIndexer = isIndexer,
DesignTimeDescriptor = propertyDesignTimeDescriptor
};
}
private static bool IsAccessibleProperty(PropertyInfo property)

View File

@ -147,16 +147,18 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
if (!string.IsNullOrEmpty(tagHelperPrefix))
{
return descriptors.Select(descriptor =>
new TagHelperDescriptor(
tagHelperPrefix,
descriptor.TagName,
descriptor.TypeName,
descriptor.AssemblyName,
descriptor.Attributes,
descriptor.RequiredAttributes,
descriptor.AllowedChildren,
descriptor.TagStructure,
descriptor.DesignTimeDescriptor));
new TagHelperDescriptor
{
Prefix = tagHelperPrefix,
TagName = descriptor.TagName,
TypeName = descriptor.TypeName,
AssemblyName = descriptor.AssemblyName,
Attributes = descriptor.Attributes,
RequiredAttributes = descriptor.RequiredAttributes,
AllowedChildren = descriptor.AllowedChildren,
TagStructure = descriptor.TagStructure,
DesignTimeDescriptor = descriptor.DesignTimeDescriptor
});
}
return descriptors;

View File

@ -12,70 +12,21 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// </summary>
public class TagHelperAttributeDescriptor
{
// Internal for testing i.e. for easy TagHelperAttributeDescriptor creation when PropertyInfo is available.
internal TagHelperAttributeDescriptor([NotNull] string name, [NotNull] PropertyInfo propertyInfo)
: this(
name,
propertyInfo.Name,
propertyInfo.PropertyType.FullName,
isIndexer: false,
isStringProperty: propertyInfo.PropertyType == typeof(string),
designTimeDescriptor: null)
{
}
private string _typeName;
/// <summary>
/// Instantiates a new instance of the <see cref="TagHelperAttributeDescriptor"/> class.
/// </summary>
/// <param name="name">
/// The HTML attribute name or, if <paramref name="isIndexer"/> is <c>true</c>, the prefix for matching
/// attribute names.
/// </param>
/// <param name="propertyName">The name of the CLR property that corresponds to the HTML attribute.</param>
/// <param name="typeName">
/// The full name of the named (see <paramref name="propertyName"/>) property's <see cref="Type"/> or,
/// if <paramref name="isIndexer"/> is <c>true</c>, the full name of the indexer's value <see cref="Type"/>.
/// </param>
/// <param name="isIndexer">
/// If <c>true</c> this <see cref="TagHelperAttributeDescriptor"/> is used for dictionary indexer assignments.
/// Otherwise this <see cref="TagHelperAttributeDescriptor"/> is used for property assignment.
/// </param>
/// <param name="designTimeDescriptor">The <see cref="TagHelperAttributeDesignTimeDescriptor"/> that contains
/// design time information about this attribute.</param>
/// <remarks>
/// HTML attribute names are matched case-insensitively, regardless of <paramref name="isIndexer"/>.
/// </remarks>
public TagHelperAttributeDescriptor(
[NotNull] string name,
[NotNull] string propertyName,
[NotNull] string typeName,
bool isIndexer,
TagHelperAttributeDesignTimeDescriptor designTimeDescriptor)
: this(
name,
propertyName,
typeName,
isIndexer,
isStringProperty: string.Equals(typeName, typeof(string).FullName, StringComparison.Ordinal),
designTimeDescriptor: designTimeDescriptor)
public TagHelperAttributeDescriptor()
{
}
// Internal for testing i.e. for confirming above constructor sets IsStringProperty as expected.
internal TagHelperAttributeDescriptor(
[NotNull] string name,
[NotNull] string propertyName,
[NotNull] string typeName,
bool isIndexer,
bool isStringProperty,
TagHelperAttributeDesignTimeDescriptor designTimeDescriptor)
// Internal for testing i.e. for easy TagHelperAttributeDescriptor creation when PropertyInfo is available.
internal TagHelperAttributeDescriptor(string name, PropertyInfo propertyInfo)
{
Name = name;
PropertyName = propertyName;
TypeName = typeName;
IsIndexer = isIndexer;
IsStringProperty = isStringProperty;
DesignTimeDescriptor = designTimeDescriptor;
PropertyName = propertyInfo.Name;
TypeName = propertyInfo.PropertyType.FullName;
}
/// <summary>
@ -88,7 +39,10 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// <see cref="TagHelperAttributeDescriptor"/> is used for property assignment and is only associated with an
/// HTML attribute that has the exact <see cref="Name"/>.
/// </value>
public bool IsIndexer { get; }
/// <remarks>
/// HTML attribute names are matched case-insensitively, regardless of <see cref="IsIndexer"/>.
/// </remarks>
public bool IsIndexer { get; set; }
/// <summary>
/// Gets an indication whether this property is of type <see cref="string"/> or, if <see cref="IsIndexer"/> is
@ -99,30 +53,41 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// to allow empty values for HTML attributes matching this <see cref="TagHelperAttributeDescriptor"/>. If
/// <c>false</c> empty values for such matching attributes lead to errors.
/// </value>
public bool IsStringProperty { get; }
public bool IsStringProperty { get; private set; }
/// <summary>
/// The HTML attribute name or, if <see cref="IsIndexer"/> is <c>true</c>, the prefix for matching attribute
/// names.
/// </summary>
public string Name { get; }
public string Name { get; [param: NotNull] set; }
/// <summary>
/// The name of the CLR property that corresponds to the HTML attribute.
/// </summary>
public string PropertyName { get; }
public string PropertyName { get; [param: NotNull] set; }
/// <summary>
/// The full name of the named (see <see name="PropertyName"/>) property's <see cref="Type"/> or, if
/// <see cref="IsIndexer"/> is <c>true</c>, the full name of the indexer's value <see cref="Type"/>.
/// </summary>
public string TypeName { get; }
public string TypeName
{
get
{
return _typeName;
}
[param: NotNull] set
{
_typeName = value;
IsStringProperty = string.Equals(_typeName, typeof(string).FullName, StringComparison.Ordinal);
}
}
/// <summary>
/// The <see cref="TagHelperAttributeDesignTimeDescriptor"/> that contains design time information about
/// this attribute.
/// </summary>
public TagHelperAttributeDesignTimeDescriptor DesignTimeDescriptor { get; }
public TagHelperAttributeDesignTimeDescriptor DesignTimeDescriptor { get; set; }
/// <summary>
/// Determines whether HTML attribute <paramref name="name"/> matches this

View File

@ -13,142 +13,44 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// </summary>
public class TagHelperDescriptor
{
/// <summary>
/// Internal for testing.
/// </summary>
internal TagHelperDescriptor(
[NotNull] string tagName,
[NotNull] string typeName,
[NotNull] string assemblyName)
: this(
tagName,
typeName,
assemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>())
{
}
/// <summary>
/// Internal for testing.
/// </summary>
internal TagHelperDescriptor(
[NotNull] string tagName,
[NotNull] string typeName,
[NotNull] string assemblyName,
[NotNull] IEnumerable<TagHelperAttributeDescriptor> attributes)
: this(
tagName,
typeName,
assemblyName,
attributes,
requiredAttributes: Enumerable.Empty<string>())
{
}
/// <summary>
/// Internal for testing.
/// </summary>
internal TagHelperDescriptor(
[NotNull] string tagName,
[NotNull] string typeName,
[NotNull] string assemblyName,
[NotNull] IEnumerable<TagHelperAttributeDescriptor> attributes,
[NotNull] IEnumerable<string> requiredAttributes)
: this(
prefix: string.Empty,
tagName: tagName,
typeName: typeName,
assemblyName: assemblyName,
attributes: attributes,
requiredAttributes: requiredAttributes,
allowedChildren: null,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null)
{
}
/// <summary>
/// Instantiates a new instance of the <see cref="TagHelperDescriptor"/> class with the given
/// <paramref name="attributes"/>.
/// </summary>
/// <param name="prefix">
/// Text used as a required prefix when matching HTML start and end tags in the Razor source to available
/// tag helpers.
/// </param>
/// <param name="tagName">The tag name that the tag helper targets. '*' indicates a catch-all
/// <see cref="TagHelperDescriptor"/> which applies to every HTML tag.</param>
/// <param name="typeName">The full name of the tag helper class.</param>
/// <param name="assemblyName">The name of the assembly containing the tag helper class.</param>
/// <param name="attributes">
/// The <see cref="TagHelperAttributeDescriptor"/>s to request from the HTML tag.
/// </param>
/// <param name="requiredAttributes">
/// The attribute names required for the tag helper to target the HTML tag.
/// </param>
/// <param name="allowedChildren">
/// The names of elements allowed as children. Tag helpers must target all such elements.
/// </param>
/// <param name="tagStructure">The expected tag structure.</param>
/// <param name="designTimeDescriptor">The <see cref="TagHelperDesignTimeDescriptor"/> that contains design
/// time information about the tag helper.</param>
public TagHelperDescriptor(
string prefix,
[NotNull] string tagName,
[NotNull] string typeName,
[NotNull] string assemblyName,
[NotNull] IEnumerable<TagHelperAttributeDescriptor> attributes,
[NotNull] IEnumerable<string> requiredAttributes,
IEnumerable<string> allowedChildren,
TagStructure tagStructure,
TagHelperDesignTimeDescriptor designTimeDescriptor)
{
Prefix = prefix ?? string.Empty;
TagName = tagName;
FullTagName = Prefix + TagName;
TypeName = typeName;
AssemblyName = assemblyName;
Attributes = new List<TagHelperAttributeDescriptor>(attributes);
RequiredAttributes = new List<string>(requiredAttributes);
TagStructure = tagStructure;
DesignTimeDescriptor = designTimeDescriptor;
if (allowedChildren != null)
{
AllowedChildren = new List<string>(allowedChildren);
}
}
/// <summary>
/// Text used as a required prefix when matching HTML start and end tags in the Razor source to available
/// tag helpers.
/// </summary>
public string Prefix { get; }
public string Prefix { get; [param: NotNull] set; } = string.Empty;
/// <summary>
/// The tag name that the tag helper should target.
/// </summary>
public string TagName { get; }
public string TagName { get; [param: NotNull] set; }
/// <summary>
/// The full tag name that is required for the tag helper to target an HTML element.
/// </summary>
/// <remarks>This is equivalent to <see cref="Prefix"/> and <see cref="TagName"/> concatenated.</remarks>
public string FullTagName { get; }
public string FullTagName
{
get
{
return Prefix + TagName;
}
}
/// <summary>
/// The full name of the tag helper class.
/// </summary>
public string TypeName { get; }
public string TypeName { get; [param: NotNull] set; }
/// <summary>
/// The name of the assembly containing the tag helper class.
/// </summary>
public string AssemblyName { get; }
public string AssemblyName { get; [param: NotNull] set; }
/// <summary>
/// The list of attributes the tag helper expects.
/// </summary>
public IReadOnlyList<TagHelperAttributeDescriptor> Attributes { get; }
public IEnumerable<TagHelperAttributeDescriptor> Attributes { get; [param: NotNull] set; }
= Enumerable.Empty<TagHelperAttributeDescriptor>();
/// <summary>
/// The list of required attribute names the tag helper expects to target an element.
@ -156,13 +58,13 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// <remarks>
/// <c>*</c> at the end of an attribute name acts as a prefix match.
/// </remarks>
public IReadOnlyList<string> RequiredAttributes { get; }
public IEnumerable<string> RequiredAttributes { get; [param: NotNull] set; } = Enumerable.Empty<string>();
/// <summary>
/// Get the names of elements allowed as children. Tag helpers must target all such elements.
/// </summary>
/// <remarks><c>null</c> indicates all children are allowed.</remarks>
public IReadOnlyList<string> AllowedChildren { get; }
public IEnumerable<string> AllowedChildren { get; set; }
/// <summary>
/// The expected tag structure.
@ -188,12 +90,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// </code>
/// </para>
/// </remarks>
public TagStructure TagStructure { get; }
public TagStructure TagStructure { get; set; }
/// <summary>
/// The <see cref="TagHelperDesignTimeDescriptor"/> that contains design time information about this
/// tag helper.
/// </summary>
public TagHelperDesignTimeDescriptor DesignTimeDescriptor { get; }
public TagHelperDesignTimeDescriptor DesignTimeDescriptor { get; set; }
}
}

View File

@ -28,58 +28,46 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(RestrictChildrenTagHelper),
new[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "restrict-children",
typeName: typeof(RestrictChildrenTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "p" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null)
new TagHelperDescriptor
{
TagName = "restrict-children",
TypeName = typeof(RestrictChildrenTagHelper).FullName,
AssemblyName = AssemblyName,
AllowedChildren = new[] { "p" },
}
}
},
{
typeof(DoubleRestrictChildrenTagHelper),
new[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "double-restrict-children",
typeName: typeof(DoubleRestrictChildrenTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "p", "strong" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null)
new TagHelperDescriptor
{
TagName = "double-restrict-children",
TypeName = typeof(DoubleRestrictChildrenTagHelper).FullName,
AssemblyName = AssemblyName,
AllowedChildren = new[] { "p", "strong" },
}
}
},
{
typeof(MultiTargetRestrictChildrenTagHelper),
new[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "div",
typeName: typeof(MultiTargetRestrictChildrenTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "p", "strong" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: typeof(MultiTargetRestrictChildrenTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "p", "strong" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor
{
TagName = "div",
TypeName = typeof(MultiTargetRestrictChildrenTagHelper).FullName,
AssemblyName = AssemblyName,
AllowedChildren = new[] { "p", "strong" },
},
new TagHelperDescriptor
{
TagName = "p",
TypeName = typeof(MultiTargetRestrictChildrenTagHelper).FullName,
AssemblyName = AssemblyName,
AllowedChildren = new[] { "p", "strong" },
}
}
},
};
@ -123,68 +111,52 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(TagStructureTagHelper),
new[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: typeof(TagStructureTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null)
new TagHelperDescriptor
{
TagName = "input",
TypeName = typeof(TagStructureTagHelper).FullName,
AssemblyName = AssemblyName,
TagStructure = TagStructure.WithoutEndTag
}
}
},
{
typeof(MultiSpecifiedTagStructureTagHelper),
new[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: typeof(MultiSpecifiedTagStructureTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: typeof(MultiSpecifiedTagStructureTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.NormalOrSelfClosing,
designTimeDescriptor: null),
new TagHelperDescriptor
{
TagName = "input",
TypeName = typeof(MultiSpecifiedTagStructureTagHelper).FullName,
AssemblyName = AssemblyName,
TagStructure = TagStructure.WithoutEndTag
},
new TagHelperDescriptor
{
TagName = "p",
TypeName = typeof(MultiSpecifiedTagStructureTagHelper).FullName,
AssemblyName = AssemblyName,
TagStructure = TagStructure.NormalOrSelfClosing
}
}
},
{
typeof(MultiWithUnspecifiedTagStructureTagHelper),
new[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor
{
TagName = "input",
TypeName = typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName,
AssemblyName = AssemblyName,
TagStructure = TagStructure.WithoutEndTag
},
new TagHelperDescriptor
{
TagName = "p",
TypeName = typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName,
AssemblyName = AssemblyName
}
}
},
};
@ -230,51 +202,42 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(OutputElementHintTagHelper),
new[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "output-element-hint",
typeName: typeof(OutputElementHintTagHelper).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: new TagHelperDesignTimeDescriptor
new TagHelperDescriptor
{
TagName = "output-element-hint",
TypeName = typeof(OutputElementHintTagHelper).FullName,
AssemblyName = AssemblyName,
DesignTimeDescriptor = new TagHelperDesignTimeDescriptor
{
OutputElementHint = "strong"
})
}
}
}
},
{
typeof(MulitpleDescriptorTagHelperWithOutputElementHint),
new[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "a",
typeName: typeof(MulitpleDescriptorTagHelperWithOutputElementHint).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: new TagHelperDesignTimeDescriptor
new TagHelperDescriptor
{
TagName = "a",
TypeName = typeof(MulitpleDescriptorTagHelperWithOutputElementHint).FullName,
AssemblyName = AssemblyName,
DesignTimeDescriptor = new TagHelperDesignTimeDescriptor
{
OutputElementHint = "div"
}),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: typeof(MulitpleDescriptorTagHelperWithOutputElementHint).FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: new TagHelperDesignTimeDescriptor
}
},
new TagHelperDescriptor
{
TagName = "p",
TypeName = typeof(MulitpleDescriptorTagHelperWithOutputElementHint).FullName,
AssemblyName = AssemblyName,
DesignTimeDescriptor = new TagHelperDesignTimeDescriptor
{
OutputElementHint = "div"
})
}
}
}
}
};
@ -326,12 +289,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(InheritedEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "property",
PropertyName = nameof(InheritedEditorBrowsableTagHelper.Property),
TypeName = typeof(int).FullName
}
})
}
},
@ -347,12 +310,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(EditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "property",
PropertyName = nameof(EditorBrowsableTagHelper.Property),
TypeName = typeof(int).FullName
}
})
}
},
@ -379,12 +342,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(HiddenPropertyEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "property",
PropertyName = nameof(HiddenPropertyEditorBrowsableTagHelper.Property),
TypeName = typeof(int).FullName
}
})
}
},
@ -399,12 +362,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(OverriddenEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "property",
PropertyName = nameof(OverriddenEditorBrowsableTagHelper.Property),
TypeName = typeof(int).FullName
}
})
}
},
@ -419,12 +382,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property2",
propertyName: nameof(MultiPropertyEditorBrowsableTagHelper.Property2),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "property2",
PropertyName = nameof(MultiPropertyEditorBrowsableTagHelper.Property2),
TypeName = typeof(int).FullName
}
})
}
},
@ -439,18 +402,18 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(MultiPropertyEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "property2",
propertyName: nameof(MultiPropertyEditorBrowsableTagHelper.Property2),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "property",
PropertyName = nameof(MultiPropertyEditorBrowsableTagHelper.Property),
TypeName = typeof(int).FullName
},
new TagHelperAttributeDescriptor
{
Name = "property2",
PropertyName = nameof(MultiPropertyEditorBrowsableTagHelper.Property2),
TypeName = typeof(int).FullName
}
})
}
},
@ -477,19 +440,18 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property2",
propertyName: nameof(OverriddenPropertyEditorBrowsableTagHelper.Property2),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(OverriddenPropertyEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "property2",
PropertyName = nameof(OverriddenPropertyEditorBrowsableTagHelper.Property2),
TypeName = typeof(int).FullName
},
new TagHelperAttributeDescriptor
{
Name = "property",
PropertyName = nameof(OverriddenPropertyEditorBrowsableTagHelper.Property),
TypeName = typeof(int).FullName
}
})
}
},
@ -504,12 +466,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(DefaultEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "property",
PropertyName = nameof(DefaultEditorBrowsableTagHelper.Property),
TypeName = typeof(int).FullName
}
})
}
},
@ -929,12 +891,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor(
"int-attribute",
nameof(InheritedSingleAttributeTagHelper.IntAttribute),
typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "int-attribute",
PropertyName = nameof(InheritedSingleAttributeTagHelper.IntAttribute),
TypeName = typeof(int).FullName
}
});
// Act
@ -1047,12 +1009,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor(
"bound-property",
nameof(NotBoundAttributeTagHelper.BoundProperty),
typeof(object).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "bound-property",
PropertyName = nameof(NotBoundAttributeTagHelper.BoundProperty),
TypeName = typeof(object).FullName
}
});
// Act
@ -1099,12 +1061,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor(
"valid-attribute",
nameof(MultiTagTagHelper.ValidAttribute),
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "valid-attribute",
PropertyName = nameof(MultiTagTagHelper.ValidAttribute),
TypeName = typeof(string).FullName
}
}),
CreateTagHelperDescriptor(
"p",
@ -1112,12 +1074,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor(
"valid-attribute",
nameof(MultiTagTagHelper.ValidAttribute),
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "valid-attribute",
PropertyName = nameof(MultiTagTagHelper.ValidAttribute),
TypeName = typeof(string).FullName
}
})
};
@ -1445,18 +1407,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(DefaultValidHtmlAttributePrefix),
new[]
{
new TagHelperAttributeDescriptor(
name: "dictionary-property",
propertyName: nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(IDictionary<string, string>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "dictionary-property-",
propertyName: nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "dictionary-property",
PropertyName = nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty),
TypeName = typeof(IDictionary<string, string>).FullName
},
new TagHelperAttributeDescriptor
{
Name = "dictionary-property-",
PropertyName = nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty),
TypeName = typeof(string).FullName,
IsIndexer = true
}
},
new string[0]
},
@ -1464,18 +1427,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(SingleValidHtmlAttributePrefix),
new[]
{
new TagHelperAttributeDescriptor(
name: "valid-name",
propertyName: nameof(SingleValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(IDictionary<string, string>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name-",
propertyName: nameof(SingleValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "valid-name",
PropertyName = nameof(SingleValidHtmlAttributePrefix.DictionaryProperty),
TypeName = typeof(IDictionary<string, string>).FullName
},
new TagHelperAttributeDescriptor
{
Name = "valid-name-",
PropertyName = nameof(SingleValidHtmlAttributePrefix.DictionaryProperty),
TypeName = typeof(string).FullName,
IsIndexer = true
}
},
new string[0]
},
@ -1483,84 +1447,91 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultipleValidHtmlAttributePrefix),
new[]
{
new TagHelperAttributeDescriptor(
name: "valid-name1",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(Dictionary<string, object>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name2",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty),
typeName: typeof(DictionarySubclass).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name3",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty),
typeName: typeof(DictionaryWithoutParameterlessConstructor).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name4",
propertyName: nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty),
typeName: typeof(GenericDictionarySubclass<object>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name5",
propertyName: nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty),
typeName: typeof(SortedDictionary<string, int>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name6",
propertyName: nameof(MultipleValidHtmlAttributePrefix.StringProperty),
typeName: typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix1-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(object).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix2-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty),
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix3-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty),
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix4-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty),
typeName: typeof(object).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix5-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty),
typeName: typeof(int).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "get-only-dictionary-property-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryProperty),
typeName: typeof(int).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix6",
propertyName: nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributePrefix),
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "valid-name1",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty),
TypeName = typeof(Dictionary<string, object>).FullName
},
new TagHelperAttributeDescriptor
{
Name = "valid-name2",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty),
TypeName = typeof(DictionarySubclass).FullName
},
new TagHelperAttributeDescriptor
{
Name = "valid-name3",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty),
TypeName = typeof(DictionaryWithoutParameterlessConstructor).FullName
},
new TagHelperAttributeDescriptor
{
Name = "valid-name4",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty),
TypeName = typeof(GenericDictionarySubclass<object>).FullName
},
new TagHelperAttributeDescriptor
{
Name = "valid-name5",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty),
TypeName = typeof(SortedDictionary<string, int>).FullName
},
new TagHelperAttributeDescriptor
{
Name = "valid-name6",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.StringProperty),
TypeName = typeof(string).FullName
},
new TagHelperAttributeDescriptor
{
Name = "valid-prefix1-",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty),
TypeName = typeof(object).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "valid-prefix2-",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty),
TypeName = typeof(string).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "valid-prefix3-",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty),
TypeName = typeof(string).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "valid-prefix4-",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty),
TypeName = typeof(object).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "valid-prefix5-",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty),
TypeName = typeof(int).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "get-only-dictionary-property-",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryProperty),
TypeName = typeof(int).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "valid-prefix6",
PropertyName = nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributePrefix),
TypeName = typeof(string).FullName,
IsIndexer = true
}
},
new string[0]
},
@ -1578,12 +1549,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultipleInvalidHtmlAttributePrefix),
new[]
{
new TagHelperAttributeDescriptor(
name: "valid-name1",
propertyName: nameof(MultipleInvalidHtmlAttributePrefix.LongProperty),
typeName: typeof(long).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "valid-name1",
PropertyName = nameof(MultipleInvalidHtmlAttributePrefix.LongProperty),
TypeName = typeof(long).FullName
}
},
new[]
{
@ -1669,12 +1640,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
public void ValidateTagHelperAttributeDescriptor_WithValidName_ReturnsTrue(string name)
{
// Arrange
var descriptor = new TagHelperAttributeDescriptor(
name,
propertyName: "ValidProperty",
typeName: "PropertyType",
isIndexer: false,
designTimeDescriptor: null);
var descriptor = new TagHelperAttributeDescriptor
{
Name = name,
PropertyName = "ValidProperty",
TypeName = "PropertyType"
};
var errorSink = new ErrorSink();
// Act
@ -1710,12 +1681,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
public void ValidateTagHelperAttributeDescriptor_WithValidPrefix_ReturnsTrue(string prefix)
{
// Arrange
var descriptor = new TagHelperAttributeDescriptor(
name: prefix,
propertyName: "ValidProperty",
typeName: "PropertyType",
isIndexer: true,
designTimeDescriptor: null);
var descriptor = new TagHelperAttributeDescriptor
{
Name = prefix,
PropertyName = "ValidProperty",
TypeName = "PropertyType",
IsIndexer = true
};
var errorSink = new ErrorSink();
// Act
@ -1756,12 +1728,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
string[] expectedErrorMessages)
{
// Arrange
var descriptor = new TagHelperAttributeDescriptor(
name,
propertyName: "InvalidProperty",
typeName: "PropertyType",
isIndexer: false,
designTimeDescriptor: null);
var descriptor = new TagHelperAttributeDescriptor
{
Name = name,
PropertyName = "InvalidProperty",
TypeName = "PropertyType"
};
var errorSink = new ErrorSink();
// Act
@ -1810,12 +1782,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
string[] expectedErrorMessages)
{
// Arrange
var descriptor = new TagHelperAttributeDescriptor(
name: prefix,
propertyName: "InvalidProperty",
typeName: "ValuesType",
isIndexer: true,
designTimeDescriptor: null);
var descriptor = new TagHelperAttributeDescriptor
{
Name = prefix,
PropertyName = "InvalidProperty",
TypeName = "ValuesType",
IsIndexer = true
};
var errorSink = new ErrorSink();
// Act
@ -2105,28 +2078,26 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
IEnumerable<TagHelperAttributeDescriptor> attributes = null,
IEnumerable<string> requiredAttributes = null)
{
return new TagHelperDescriptor(
prefix: string.Empty,
tagName: tagName,
typeName: typeName,
assemblyName: assemblyName,
attributes: attributes ?? Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: requiredAttributes ?? Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null);
return new TagHelperDescriptor
{
TagName = tagName,
TypeName = typeName,
AssemblyName = assemblyName,
Attributes = attributes ?? Enumerable.Empty<TagHelperAttributeDescriptor>(),
RequiredAttributes = requiredAttributes ?? Enumerable.Empty<string>()
};
}
private static TagHelperAttributeDescriptor CreateTagHelperAttributeDescriptor(
string name,
PropertyInfo propertyInfo)
{
return new TagHelperAttributeDescriptor(
name,
propertyInfo.Name,
propertyInfo.PropertyType.FullName,
isIndexer: false,
designTimeDescriptor: null);
return new TagHelperAttributeDescriptor
{
Name = name,
PropertyName = propertyInfo.Name,
TypeName = propertyInfo.PropertyType.FullName
};
}
[RestrictChildren("p")]

View File

@ -25,16 +25,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{
get
{
return new TagHelperDescriptor(
prefix: string.Empty,
tagName: "valid_plain",
typeName: Valid_PlainTagHelperType.FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null);
return new TagHelperDescriptor
{
TagName = "valid_plain",
TypeName = Valid_PlainTagHelperType.FullName,
AssemblyName = AssemblyName
};
}
}
@ -42,16 +38,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{
get
{
return new TagHelperDescriptor(
prefix: string.Empty,
tagName: "valid_inherited",
typeName: Valid_InheritedTagHelperType.FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null);
return new TagHelperDescriptor
{
TagName = "valid_inherited",
TypeName = Valid_InheritedTagHelperType.FullName,
AssemblyName = AssemblyName
};
}
}
@ -604,16 +596,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// We're treating 'string' as a TagHelper so we can test TagHelpers in multiple assemblies without
// building a separate assembly with a single TagHelper.
var stringTagHelperDescriptor =
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "string",
typeName: "System.String",
assemblyName: assemblyB,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null);
new TagHelperDescriptor
{
TagName = "string",
TypeName = "System.String",
AssemblyName = assemblyB
};
return new TheoryData<Dictionary<string, IEnumerable<Type>>, // descriptorAssemblyLookups
IEnumerable<TagHelperDirectiveDescriptor>, // directiveDescriptors
@ -1041,16 +1029,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var assemblyB = stringType.GetTypeInfo().Assembly.GetName().Name;
var stringTagHelperDescriptor =
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "string",
typeName: "System.String",
assemblyName: assemblyB,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null);
new TagHelperDescriptor
{
TagName = "string",
TypeName = "System.String",
AssemblyName = assemblyB
};
return new TheoryData<Dictionary<string, IEnumerable<Type>>, // descriptorAssemblyLookups
IEnumerable<TagHelperDirectiveDescriptor>> // directiveDescriptors
@ -1441,16 +1425,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
string typeName,
string assemblyName)
{
return new TagHelperDescriptor(
prefix,
tagName,
typeName,
assemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null);
return new TagHelperDescriptor
{
Prefix = prefix,
TagName = tagName,
TypeName = typeName,
AssemblyName = assemblyName
};
}
private static TagHelperDescriptor CreatePrefixedValidPlainDescriptor(string prefix)

View File

@ -26,40 +26,44 @@ namespace Microsoft.AspNet.Razor.Test.Generator
{
return new[]
{
new TagHelperDescriptor(
tagName: "*",
typeName: "CatchAllTagHelper",
assemblyName: "SomeAssembly",
attributes: new[]
new TagHelperDescriptor
{
TagName = "*",
TypeName = "CatchAllTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
"catchall-bound-string",
"BoundRequiredString",
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "catchall-bound-string",
PropertyName = "BoundRequiredString",
TypeName = typeof(string).FullName
}
},
requiredAttributes: new[] { "catchall-unbound-required" }),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new[]
RequiredAttributes = new[] { "catchall-unbound-required" },
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
"input-bound-required-string",
"BoundRequiredString",
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
"input-bound-string",
"BoundString",
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "input-bound-required-string",
PropertyName = "BoundRequiredString",
TypeName = typeof(string).FullName
},
new TagHelperAttributeDescriptor
{
Name = "input-bound-string",
PropertyName = "BoundString",
TypeName = typeof(string).FullName
}
},
requiredAttributes: new[] { "input-bound-required-string", "input-unbound-required" }),
RequiredAttributes = new[] { "input-bound-required-string", "input-unbound-required" },
}
};
}
}
@ -70,19 +74,21 @@ namespace Microsoft.AspNet.Razor.Test.Generator
{
return new[]
{
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new[]
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
"bound",
"Bound",
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null)
}),
new TagHelperAttributeDescriptor
{
Name = "bound",
PropertyName = "Bound",
TypeName = typeof(string).FullName
}
}
}
};
}
}
@ -95,46 +101,54 @@ namespace Microsoft.AspNet.Razor.Test.Generator
var inputCheckedPropertyInfo = typeof(TestType).GetProperty("Checked");
return new[]
{
new TagHelperDescriptor(
tagName: "*",
typeName: "CatchAllTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
new TagHelperDescriptor
{
TagName = "*",
TypeName = "CatchAllTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
},
requiredAttributes: new[] { "type" }),
new TagHelperDescriptor(
tagName: "*",
typeName: "CatchAllTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
RequiredAttributes = new[] { "type" },
},
new TagHelperDescriptor
{
TagName = "*",
TypeName = "CatchAllTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
},
requiredAttributes: new[] { "checked" }),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
RequiredAttributes = new[] { "checked" },
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
},
requiredAttributes: new[] { "type" }),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
RequiredAttributes = new[] { "type" },
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
},
requiredAttributes: new[] { "checked" })
RequiredAttributes = new[] { "checked" },
}
};
}
}
@ -147,37 +161,43 @@ namespace Microsoft.AspNet.Razor.Test.Generator
var inputCheckedPropertyInfo = typeof(TestType).GetProperty("Checked");
return new[]
{
new TagHelperDescriptor(
tagName: "p",
typeName: "PTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "class" }),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "class" },
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo)
},
requiredAttributes: new[] { "type" }),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper2",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
RequiredAttributes = new[] { "type" },
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
},
requiredAttributes: new[] { "type", "checked" }),
new TagHelperDescriptor(
tagName: "*",
typeName: "CatchAllTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "catchAll" })
RequiredAttributes = new[] { "type", "checked" },
},
new TagHelperDescriptor
{
TagName = "*",
TypeName = "CatchAllTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "catchAll" },
}
};
}
}
@ -188,80 +208,88 @@ namespace Microsoft.AspNet.Razor.Test.Generator
{
return new[]
{
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper1",
assemblyName: "SomeAssembly",
attributes: new[]
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper1",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
name: "int-prefix-grabber",
propertyName: "IntProperty",
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "int-dictionary",
propertyName: "IntDictionaryProperty",
typeName: typeof(IDictionary<string, int>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "string-dictionary",
propertyName: "StringDictionaryProperty",
typeName: "Namespace.DictionaryWithoutParameterlessConstructor<string, string>",
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "string-prefix-grabber",
propertyName: "StringProperty",
typeName: typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "int-prefix-",
propertyName: "IntDictionaryProperty",
typeName: typeof(int).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "string-prefix-",
propertyName: "StringDictionaryProperty",
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
}),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper2",
assemblyName: "SomeAssembly",
attributes: new[]
new TagHelperAttributeDescriptor
{
Name = "int-prefix-grabber",
PropertyName = "IntProperty",
TypeName = typeof(int).FullName
},
new TagHelperAttributeDescriptor
{
Name = "int-dictionary",
PropertyName = "IntDictionaryProperty",
TypeName = typeof(IDictionary<string, int>).FullName
},
new TagHelperAttributeDescriptor
{
Name = "string-dictionary",
PropertyName = "StringDictionaryProperty",
TypeName = "Namespace.DictionaryWithoutParameterlessConstructor<string, string>"
},
new TagHelperAttributeDescriptor
{
Name = "string-prefix-grabber",
PropertyName = "StringProperty",
TypeName = typeof(string).FullName
},
new TagHelperAttributeDescriptor
{
Name = "int-prefix-",
PropertyName = "IntDictionaryProperty",
TypeName = typeof(int).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "string-prefix-",
PropertyName = "StringDictionaryProperty",
TypeName = typeof(string).FullName,
IsIndexer = true
}
}
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
name: "int-dictionary",
propertyName: "IntDictionaryProperty",
typeName: typeof(IDictionary<string, int>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "string-dictionary",
propertyName: "StringDictionaryProperty",
typeName: "Namespace.DictionaryWithoutParameterlessConstructor<string, string>",
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "int-prefix-",
propertyName: "IntDictionaryProperty",
typeName: typeof(int).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "string-prefix-",
propertyName: "StringDictionaryProperty",
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
}),
new TagHelperAttributeDescriptor
{
Name = "int-dictionary",
PropertyName = "IntDictionaryProperty",
TypeName = typeof(int).FullName
},
new TagHelperAttributeDescriptor
{
Name = "string-dictionary",
PropertyName = "StringDictionaryProperty",
TypeName = "Namespace.DictionaryWithoutParameterlessConstructor<string, string>"
},
new TagHelperAttributeDescriptor
{
Name = "int-prefix-",
PropertyName = "IntDictionaryProperty",
TypeName = typeof(int).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "string-prefix-",
PropertyName = "StringDictionaryProperty",
TypeName = typeof(string).FullName,
IsIndexer = true
}
}
}
};
}
}
@ -1507,7 +1535,12 @@ namespace Microsoft.AspNet.Razor.Test.Generator
designTimeMode: true,
tagHelperDescriptors: new[]
{
new TagHelperDescriptor("p", "pTagHelper", "SomeAssembly")
new TagHelperDescriptor
{
TagName = "p",
TypeName = "pTagHelper",
AssemblyName = "SomeAssembly"
}
});
}
@ -1518,14 +1551,22 @@ namespace Microsoft.AspNet.Razor.Test.Generator
var propertyInfo = typeof(TestType).GetProperty("BoundProperty");
var tagHelperDescriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor("MyTagHelper",
"MyTagHelper",
"SomeAssembly",
new []
{
new TagHelperAttributeDescriptor("BoundProperty", propertyInfo)
}),
new TagHelperDescriptor("NestedTagHelper", "NestedTagHelper", "SomeAssembly")
new TagHelperDescriptor
{
TagName = "MyTagHelper",
TypeName = "MyTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new []
{
new TagHelperAttributeDescriptor("BoundProperty", propertyInfo)
}
},
new TagHelperDescriptor
{
TagName = "NestedTagHelper",
TypeName = "NestedTagHelper",
AssemblyName = "SomeAssembly"
}
};
// Act & Assert
@ -1540,46 +1581,42 @@ namespace Microsoft.AspNet.Razor.Test.Generator
return new[]
{
new TagHelperDescriptor(
prefix,
tagName: "p",
typeName: "PTagHelper",
assemblyName: "SomeAssembly",
attributes: new []
new TagHelperDescriptor
{
Prefix = prefix,
TagName = "p",
TypeName = "PTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("age", pAgePropertyInfo)
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.NormalOrSelfClosing,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix,
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
TagStructure = TagStructure.NormalOrSelfClosing
},
new TagHelperDescriptor
{
Prefix = prefix,
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo)
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix,
tagName: "input",
typeName: "InputTagHelper2",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
TagStructure = TagStructure.WithoutEndTag
},
new TagHelperDescriptor
{
Prefix = prefix,
TagName = "input",
TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", checkedPropertyInfo)
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null)
}
};
}

View File

@ -22,7 +22,12 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div",
new[]
{
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var codeRenderer = CreateCodeRenderer();
@ -41,8 +46,18 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div",
new[]
{
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName"),
new TagHelperDescriptor("div", "Div2TagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
},
new TagHelperDescriptor
{
TagName = "div",
TypeName = "Div2TagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var codeRenderer = CreateCodeRenderer();
@ -61,13 +76,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div",
new[]
{
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var chunk2 = CreateTagHelperChunk(
"div",
new[]
{
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var codeRenderer = CreateCodeRenderer();
@ -87,13 +112,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div",
new[]
{
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var childChunk = CreateTagHelperChunk(
"div",
new[]
{
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
});
parentChunk.Children.Add(childChunk);
var codeRenderer = CreateCodeRenderer();
@ -113,13 +148,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div",
new[]
{
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var spanChunk = CreateTagHelperChunk(
"span",
new[]
{
new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "span",
TypeName = "SpanTagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var codeRenderer = CreateCodeRenderer();
@ -139,21 +184,46 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div",
new[]
{
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName"),
new TagHelperDescriptor("div", "Div2TagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
},
new TagHelperDescriptor
{
TagName = "div",
TypeName = "Div2TagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var chunk2 = CreateTagHelperChunk(
"span",
new[]
{
new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "span",
TypeName = "SpanTagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var chunk3 = CreateTagHelperChunk(
"span",
new[]
{
new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName"),
new TagHelperDescriptor("span", "Span2TagHelper", "FakeAssemblyName")
new TagHelperDescriptor
{
TagName = "span",
TypeName = "SpanTagHelper",
AssemblyName = "FakeAssemblyName"
},
new TagHelperDescriptor
{
TagName = "span",
TypeName = "Span2TagHelper",
AssemblyName = "FakeAssemblyName"
}
});
var codeRenderer = CreateCodeRenderer();

View File

@ -23,29 +23,34 @@ namespace Microsoft.AspNet.Razor.Test.Generator
var checkedPropertyInfo = typeof(TestType).GetProperty("Checked");
var tagHelperDescriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor("p", "PTagHelper", "SomeAssembly"),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper",
AssemblyName = "SomeAssembly"
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo)
},
requiredAttributes: new string[0],
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper2",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[]
TagStructure = TagStructure.WithoutEndTag
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", checkedPropertyInfo)
})
}
}
};
// Act & Assert

View File

@ -36,12 +36,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
bool expectedIsStringProperty)
{
// Arrange
var attributeDescriptor = new TagHelperAttributeDescriptor(
"someAttribute",
"someProperty",
attributeType.FullName,
isIndexer,
designTimeDescriptor: null);
var attributeDescriptor = new TagHelperAttributeDescriptor
{
Name = "someAttribute",
PropertyName = "someProperty",
TypeName = attributeType.FullName,
IsIndexer = isIndexer
};
// Assert
Assert.Equal(expectedIsStringProperty, attributeDescriptor.IsStringProperty);

View File

@ -80,16 +80,13 @@ namespace Microsoft.AspNet.Razor.TagHelpers
// Arrange
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null)
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
TagStructure = TagStructure.WithoutEndTag,
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -183,26 +180,20 @@ namespace Microsoft.AspNet.Razor.TagHelpers
var blockFactory = new BlockFactory(factory);
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: "InputTagHelper1",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: structure1,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: "InputTagHelper2",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: structure2,
designTimeDescriptor: null)
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper1",
AssemblyName = "SomeAssembly",
TagStructure = structure1
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
TagStructure = structure2
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -1024,28 +1015,33 @@ namespace Microsoft.AspNet.Razor.TagHelpers
// Arrange
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor("person", "PersonTagHelper", "personAssembly",
attributes: new[]
new TagHelperDescriptor
{
TagName = "person",
TypeName = "PersonTagHelper",
AssemblyName = "personAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
name: "age",
propertyName: "Age",
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "birthday",
propertyName: "BirthDay",
typeName: typeof(DateTime).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "name",
propertyName: "Name",
typeName: typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null),
})
new TagHelperAttributeDescriptor
{
Name = "age",
PropertyName = "Age",
TypeName = typeof(int).FullName
},
new TagHelperAttributeDescriptor
{
Name = "birthday",
PropertyName = "BirthDay",
TypeName = typeof(DateTime).FullName
},
new TagHelperAttributeDescriptor
{
Name = "name",
PropertyName = "Name",
TypeName = typeof(string).FullName
}
}
}
};
var providerContext = new TagHelperDescriptorProvider(descriptors);
@ -2067,25 +2063,27 @@ namespace Microsoft.AspNet.Razor.TagHelpers
// Arrange
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
tagName: "myth",
typeName: "mythTagHelper",
assemblyName: "SomeAssembly",
attributes: new[]
new TagHelperDescriptor
{
TagName = "myth",
TypeName = "mythTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
name: "bound",
propertyName: "Bound",
typeName: typeof(bool).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "name",
propertyName: "Name",
typeName: typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
new TagHelperAttributeDescriptor
{
Name = "bound",
PropertyName = "Bound",
TypeName = typeof(bool).FullName
},
new TagHelperAttributeDescriptor
{
Name = "name",
PropertyName = "Name",
TypeName = typeof(string).FullName
}
}
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -3657,100 +3655,110 @@ namespace Microsoft.AspNet.Razor.TagHelpers
// Arrange
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper1",
assemblyName: "SomeAssembly",
attributes: new[]
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper1",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
"bound-required-string",
"BoundRequiredString",
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "bound-required-string",
PropertyName = "BoundRequiredString",
TypeName = typeof(string).FullName
}
},
requiredAttributes: new[] { "unbound-required" }),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper1",
assemblyName: "SomeAssembly",
attributes: new[]
RequiredAttributes = new[] { "unbound-required" }
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper1",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
"bound-required-string",
"BoundRequiredString",
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "bound-required-string",
PropertyName = "BoundRequiredString",
TypeName = typeof(string).FullName
}
},
requiredAttributes: new[] { "bound-required-string" }),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper2",
assemblyName: "SomeAssembly",
attributes: new[]
RequiredAttributes = new[] { "bound-required-string" }
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
"bound-required-int",
"BoundRequiredInt",
typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "bound-required-int",
PropertyName = "BoundRequiredInt",
TypeName = typeof(int).FullName
}
},
requiredAttributes: new[] { "bound-required-int" }),
new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper3",
assemblyName: "SomeAssembly",
attributes: new[]
RequiredAttributes = new[] { "bound-required-int" }
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper3",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
"int-dictionary",
"DictionaryOfIntProperty",
typeof(IDictionary<string, int>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
"string-dictionary",
"DictionaryOfStringProperty",
typeof(IDictionary<string, string>).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
"int-prefix-",
"DictionaryOfIntProperty",
typeof(int).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
"string-prefix-",
"DictionaryOfStringProperty",
typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
},
requiredAttributes: Enumerable.Empty<string>()),
new TagHelperDescriptor(
tagName: "p",
typeName: "PTagHelper",
assemblyName: "SomeAssembly",
attributes: new[]
new TagHelperAttributeDescriptor
{
Name = "int-dictionary",
PropertyName ="DictionaryOfIntProperty",
TypeName = typeof(IDictionary<string, int>).FullName
},
new TagHelperAttributeDescriptor
{
Name = "string-dictionary",
PropertyName = "DictionaryOfStringProperty",
TypeName = typeof(IDictionary<string, string>).FullName
},
new TagHelperAttributeDescriptor
{
Name = "int-prefix-",
PropertyName = "DictionaryOfIntProperty",
TypeName = typeof(int).FullName,
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "string-prefix-",
PropertyName = "DictionaryOfStringProperty",
TypeName = typeof(string).FullName,
IsIndexer = true
}
}
},
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
"bound-string",
"BoundRequiredString",
typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
"bound-int",
"BoundRequiredString",
typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
},
requiredAttributes: Enumerable.Empty<string>()),
new TagHelperAttributeDescriptor
{
Name = "bound-string",
PropertyName = "BoundRequiredString",
TypeName = typeof(string).FullName
},
new TagHelperAttributeDescriptor
{
Name = "bound-int",
PropertyName = "BoundRequiredString",
TypeName = typeof(int).FullName
}
}
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);

View File

@ -14,42 +14,48 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{
get
{
var divDescriptor = new TagHelperDescriptor(
tagName: "div",
typeName: "DivTagHelper",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: new[] { "style" });
var inputDescriptor = new TagHelperDescriptor(
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: new[] { "class", "style" });
var inputWildcardPrefixDescriptor = new TagHelperDescriptor(
tagName: "input",
typeName: "InputWildCardAttribute",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: new[] { "nodashprefix*" });
var catchAllDescriptor = new TagHelperDescriptor(
tagName: TagHelperDescriptorProvider.ElementCatchAllTarget,
typeName: "CatchAllTagHelper",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: new[] { "class" });
var catchAllDescriptor2 = new TagHelperDescriptor(
tagName: TagHelperDescriptorProvider.ElementCatchAllTarget,
typeName: "CatchAllTagHelper",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: new[] { "custom", "class" });
var catchAllWildcardPrefixDescriptor = new TagHelperDescriptor(
tagName: TagHelperDescriptorProvider.ElementCatchAllTarget,
typeName: "CatchAllWildCardAttribute",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: new[] { "prefix-*" });
var divDescriptor = new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "style" }
};
var inputDescriptor = new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "class", "style" }
};
var inputWildcardPrefixDescriptor = new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputWildCardAttribute",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "nodashprefix*" }
};
var catchAllDescriptor = new TagHelperDescriptor
{
TagName = TagHelperDescriptorProvider.ElementCatchAllTarget,
TypeName = "CatchAllTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "class" }
};
var catchAllDescriptor2 = new TagHelperDescriptor
{
TagName = TagHelperDescriptorProvider.ElementCatchAllTarget,
TypeName = "CatchAllTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "custom", "class" }
};
var catchAllWildcardPrefixDescriptor = new TagHelperDescriptor
{
TagName = TagHelperDescriptorProvider.ElementCatchAllTarget,
TypeName = "CatchAllWildCardAttribute",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "prefix-*" }
};
var defaultAvailableDescriptors =
new[] { divDescriptor, inputDescriptor, catchAllDescriptor, catchAllDescriptor2 };
var defaultWildcardDescriptors =
@ -256,8 +262,18 @@ namespace Microsoft.AspNet.Razor.TagHelpers
public void GetDescriptors_ReturnsNothingForUnregisteredTags()
{
// Arrange
var divDescriptor = new TagHelperDescriptor("div", "foo1", "SomeAssembly");
var spanDescriptor = new TagHelperDescriptor("span", "foo2", "SomeAssembly");
var divDescriptor = new TagHelperDescriptor
{
TagName = "div",
TypeName = "foo1",
AssemblyName = "SomeAssembly",
};
var spanDescriptor = new TagHelperDescriptor
{
TagName = "span",
TypeName = "foo2",
AssemblyName = "SomeAssembly",
};
var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor };
var provider = new TagHelperDescriptorProvider(descriptors);
@ -272,12 +288,24 @@ namespace Microsoft.AspNet.Razor.TagHelpers
public void GetDescriptors_ReturnsCatchAllsWithEveryTagName()
{
// Arrange
var divDescriptor = new TagHelperDescriptor("div", "foo1", "SomeAssembly");
var spanDescriptor = new TagHelperDescriptor("span", "foo2", "SomeAssembly");
var catchAllDescriptor = new TagHelperDescriptor(
TagHelperDescriptorProvider.ElementCatchAllTarget,
"foo3",
"SomeAssembly");
var divDescriptor = new TagHelperDescriptor
{
TagName = "div",
TypeName = "foo1",
AssemblyName = "SomeAssembly",
};
var spanDescriptor = new TagHelperDescriptor
{
TagName = "span",
TypeName = "foo2",
AssemblyName = "SomeAssembly",
};
var catchAllDescriptor = new TagHelperDescriptor
{
TagName = TagHelperDescriptorProvider.ElementCatchAllTarget,
TypeName = "foo3",
AssemblyName = "SomeAssembly",
};
var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor, catchAllDescriptor };
var provider = new TagHelperDescriptorProvider(descriptors);
@ -301,7 +329,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
public void GetDescriptors_DuplicateDescriptorsAreNotPartOfTagHelperDescriptorPool()
{
// Arrange
var divDescriptor = new TagHelperDescriptor("div", "foo1", "SomeAssembly");
var divDescriptor = new TagHelperDescriptor
{
TagName = "div",
TypeName = "foo1",
AssemblyName = "SomeAssembly",
};
var descriptors = new TagHelperDescriptor[] { divDescriptor, divDescriptor };
var provider = new TagHelperDescriptorProvider(descriptors);
@ -315,16 +348,13 @@ namespace Microsoft.AspNet.Razor.TagHelpers
private static TagHelperDescriptor CreatePrefixedDescriptor(string prefix, string tagName, string typeName)
{
return new TagHelperDescriptor(
prefix,
tagName,
typeName,
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null);
return new TagHelperDescriptor
{
Prefix = prefix,
TagName = tagName,
TypeName = typeName,
AssemblyName = "SomeAssembly"
};
}
}
}

View File

@ -16,21 +16,21 @@ namespace Microsoft.AspNet.Razor.TagHelpers
public void TagHelperDescriptor_CanBeSerialized()
{
// Arrange
var descriptor = new TagHelperDescriptor(
prefix: "prefix:",
tagName: "tag name",
typeName: "type name",
assemblyName: "assembly name",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: new[] { "required attribute one", "required attribute two" },
allowedChildren: new[] { "allowed child one" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: new TagHelperDesignTimeDescriptor
var descriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
TagName = "tag name",
TypeName = "type name",
AssemblyName = "assembly name",
RequiredAttributes = new[] { "required attribute one", "required attribute two" },
AllowedChildren = new[] { "allowed child one" },
DesignTimeDescriptor = new TagHelperDesignTimeDescriptor
{
Summary = "usage summary",
Remarks = "usage remarks",
OutputElementHint = "some-tag"
});
}
};
var expectedSerializedDescriptor =
$"{{\"{ nameof(TagHelperDescriptor.Prefix) }\":\"prefix:\"," +
@ -59,30 +59,30 @@ namespace Microsoft.AspNet.Razor.TagHelpers
public void TagHelperDescriptor_WithAttributes_CanBeSerialized()
{
// Arrange
var descriptor = new TagHelperDescriptor(
prefix: "prefix:",
tagName: "tag name",
typeName: "type name",
assemblyName: "assembly name",
attributes: new[]
var descriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
TagName = "tag name",
TypeName = "type name",
AssemblyName = "assembly name",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
name: "attribute one",
propertyName: "property name",
typeName: "property type name",
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "attribute two",
propertyName: "property name",
typeName: typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "attribute one",
PropertyName = "property name",
TypeName = "property type name"
},
new TagHelperAttributeDescriptor
{
Name = "attribute two",
PropertyName = "property name",
TypeName = typeof(string).FullName
},
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.NormalOrSelfClosing,
designTimeDescriptor: null);
TagStructure = TagStructure.NormalOrSelfClosing
};
var expectedSerializedDescriptor =
$"{{\"{ nameof(TagHelperDescriptor.Prefix) }\":\"prefix:\"," +
$"\"{ nameof(TagHelperDescriptor.TagName) }\":\"tag name\"," +
@ -118,30 +118,32 @@ namespace Microsoft.AspNet.Razor.TagHelpers
public void TagHelperDescriptor_WithIndexerAttributes_CanBeSerialized()
{
// Arrange
var descriptor = new TagHelperDescriptor(
prefix: "prefix:",
tagName: "tag name",
typeName: "type name",
assemblyName: "assembly name",
attributes: new[]
var descriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
TagName = "tag name",
TypeName = "type name",
AssemblyName = "assembly name",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
name: "attribute one",
propertyName: "property name",
typeName: "property type name",
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "attribute two",
propertyName: "property name",
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "attribute one",
PropertyName = "property name",
TypeName = "property type name",
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "attribute two",
PropertyName = "property name",
TypeName = typeof(string).FullName,
IsIndexer = true
},
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "allowed child one", "allowed child two" },
tagStructure: default(TagStructure),
designTimeDescriptor: null);
AllowedChildren = new[] { "allowed child one", "allowed child two" }
};
var expectedSerializedDescriptor =
$"{{\"{ nameof(TagHelperDescriptor.Prefix) }\":\"prefix:\"," +
$"\"{ nameof(TagHelperDescriptor.TagName) }\":\"tag name\"," +
@ -192,21 +194,21 @@ namespace Microsoft.AspNet.Razor.TagHelpers
$"\"{ nameof(TagHelperDesignTimeDescriptor.Summary) }\":\"usage summary\"," +
$"\"{ nameof(TagHelperDesignTimeDescriptor.Remarks) }\":\"usage remarks\"," +
$"\"{ nameof(TagHelperDesignTimeDescriptor.OutputElementHint) }\":\"some-tag\"}}}}";
var expectedDescriptor = new TagHelperDescriptor(
prefix: "prefix:",
tagName: "tag name",
typeName: "type name",
assemblyName: "assembly name",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: new[] { "required attribute one", "required attribute two" },
allowedChildren: new[] { "allowed child one", "allowed child two" },
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: new TagHelperDesignTimeDescriptor
var expectedDescriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
TagName = "tag name",
TypeName = "type name",
AssemblyName = "assembly name",
RequiredAttributes = new[] { "required attribute one", "required attribute two" },
AllowedChildren = new[] { "allowed child one", "allowed child two" },
DesignTimeDescriptor = new TagHelperDesignTimeDescriptor
{
Summary = "usage summary",
Remarks = "usage remarks",
OutputElementHint = "some-tag"
});
}
};
// Act
var descriptor = JsonConvert.DeserializeObject<TagHelperDescriptor>(serializedDescriptor);
@ -253,30 +255,29 @@ namespace Microsoft.AspNet.Razor.TagHelpers
$"\"{ nameof(TagHelperDescriptor.AllowedChildren) }\":null," +
$"\"{nameof(TagHelperDescriptor.TagStructure)}\":0," +
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null}}";
var expectedDescriptor = new TagHelperDescriptor(
prefix: "prefix:",
tagName: "tag name",
typeName: "type name",
assemblyName: "assembly name",
attributes: new[]
var expectedDescriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
TagName = "tag name",
TypeName = "type name",
AssemblyName = "assembly name",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
name: "attribute one",
propertyName: "property name",
typeName: "property type name",
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "attribute two",
propertyName: "property name",
typeName: typeof(string).FullName,
isIndexer: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "attribute one",
PropertyName = "property name",
TypeName = "property type name"
},
new TagHelperAttributeDescriptor
{
Name = "attribute two",
PropertyName = "property name",
TypeName = typeof(string).FullName
},
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null);
AllowedChildren = new[] { "allowed child one", "allowed child two" }
};
// Act
var descriptor = JsonConvert.DeserializeObject<TagHelperDescriptor>(serializedDescriptor);
@ -288,32 +289,7 @@ namespace Microsoft.AspNet.Razor.TagHelpers
Assert.Equal(expectedDescriptor.FullTagName, descriptor.FullTagName, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.TypeName, descriptor.TypeName, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.AssemblyName, descriptor.AssemblyName, StringComparer.Ordinal);
Assert.Equal(2, descriptor.Attributes.Count);
Assert.Equal(expectedDescriptor.Attributes[0].IsIndexer, descriptor.Attributes[0].IsIndexer);
Assert.Equal(expectedDescriptor.Attributes[0].IsStringProperty, descriptor.Attributes[0].IsStringProperty);
Assert.Equal(expectedDescriptor.Attributes[0].Name, descriptor.Attributes[0].Name, StringComparer.Ordinal);
Assert.Equal(
expectedDescriptor.Attributes[0].PropertyName,
descriptor.Attributes[0].PropertyName,
StringComparer.Ordinal);
Assert.Equal(
expectedDescriptor.Attributes[0].TypeName,
descriptor.Attributes[0].TypeName,
StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.Attributes[1].IsIndexer, descriptor.Attributes[1].IsIndexer);
Assert.Equal(expectedDescriptor.Attributes[1].IsStringProperty, descriptor.Attributes[1].IsStringProperty);
Assert.Equal(expectedDescriptor.Attributes[1].Name, descriptor.Attributes[1].Name, StringComparer.Ordinal);
Assert.Equal(
expectedDescriptor.Attributes[1].PropertyName,
descriptor.Attributes[1].PropertyName,
StringComparer.Ordinal);
Assert.Equal(
expectedDescriptor.Attributes[1].TypeName,
descriptor.Attributes[1].TypeName,
StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.Attributes, descriptor.Attributes, TagHelperAttributeDescriptorComparer.Default);
Assert.Empty(descriptor.RequiredAttributes);
}
@ -344,30 +320,31 @@ namespace Microsoft.AspNet.Razor.TagHelpers
$"\"{ nameof(TagHelperDescriptor.AllowedChildren) }\":null," +
$"\"{nameof(TagHelperDescriptor.TagStructure)}\":1," +
$"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null}}";
var expectedDescriptor = new TagHelperDescriptor(
prefix: "prefix:",
tagName: "tag name",
typeName: "type name",
assemblyName: "assembly name",
attributes: new[]
var expectedDescriptor = new TagHelperDescriptor
{
Prefix = "prefix:",
TagName = "tag name",
TypeName = "type name",
AssemblyName = "assembly name",
Attributes = new[]
{
new TagHelperAttributeDescriptor(
name: "attribute one",
propertyName: "property name",
typeName: "property type name",
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "attribute two",
propertyName: "property name",
typeName: typeof(string).FullName,
isIndexer: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor
{
Name = "attribute one",
PropertyName = "property name",
TypeName = "property type name",
IsIndexer = true
},
new TagHelperAttributeDescriptor
{
Name = "attribute two",
PropertyName = "property name",
TypeName = typeof(string).FullName,
IsIndexer = true
}
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.NormalOrSelfClosing,
designTimeDescriptor: null);
TagStructure = TagStructure.NormalOrSelfClosing
};
// Act
var descriptor = JsonConvert.DeserializeObject<TagHelperDescriptor>(serializedDescriptor);
@ -379,32 +356,7 @@ namespace Microsoft.AspNet.Razor.TagHelpers
Assert.Equal(expectedDescriptor.FullTagName, descriptor.FullTagName, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.TypeName, descriptor.TypeName, StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.AssemblyName, descriptor.AssemblyName, StringComparer.Ordinal);
Assert.Equal(2, descriptor.Attributes.Count);
Assert.Equal(expectedDescriptor.Attributes[0].IsIndexer, descriptor.Attributes[0].IsIndexer);
Assert.Equal(expectedDescriptor.Attributes[0].IsStringProperty, descriptor.Attributes[0].IsStringProperty);
Assert.Equal(expectedDescriptor.Attributes[0].Name, descriptor.Attributes[0].Name, StringComparer.Ordinal);
Assert.Equal(
expectedDescriptor.Attributes[0].PropertyName,
descriptor.Attributes[0].PropertyName,
StringComparer.Ordinal);
Assert.Equal(
expectedDescriptor.Attributes[0].TypeName,
descriptor.Attributes[0].TypeName,
StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.Attributes[1].IsIndexer, descriptor.Attributes[1].IsIndexer);
Assert.Equal(expectedDescriptor.Attributes[1].IsStringProperty, descriptor.Attributes[1].IsStringProperty);
Assert.Equal(expectedDescriptor.Attributes[1].Name, descriptor.Attributes[1].Name, StringComparer.Ordinal);
Assert.Equal(
expectedDescriptor.Attributes[1].PropertyName,
descriptor.Attributes[1].PropertyName,
StringComparer.Ordinal);
Assert.Equal(
expectedDescriptor.Attributes[1].TypeName,
descriptor.Attributes[1].TypeName,
StringComparer.Ordinal);
Assert.Equal(expectedDescriptor.Attributes, descriptor.Attributes, TagHelperAttributeDescriptorComparer.Default);
Assert.Empty(descriptor.RequiredAttributes);
}
}

View File

@ -56,16 +56,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
factory.Markup(Environment.NewLine)));
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: "PTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "br" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper",
AssemblyName = "SomeAssembly",
AllowedChildren = new[] { "br" },
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -105,16 +102,14 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
blockFactory.MarkupTagBlock("</strong>")));
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "strong",
typeName: "StrongTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "required" },
allowedChildren: new[] { "br" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor
{
TagName = "strong",
TypeName = "StrongTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "required" },
AllowedChildren = new[] { "br" }
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -135,46 +130,32 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
new MarkupTagHelperBlock("br", TagMode.StartTagOnly)));
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: "PTagHelper1",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "strong", "br" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: "PTagHelper2",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "strong",
typeName: "StrongTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "br",
typeName: "BRTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null),
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper1",
AssemblyName = "SomeAssembly",
AllowedChildren = new[] { "strong", "br" }
},
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper2",
AssemblyName = "SomeAssembly"
},
new TagHelperDescriptor
{
TagName = "strong",
TypeName = "StrongTagHelper",
AssemblyName = "SomeAssembly"
},
new TagHelperDescriptor
{
TagName = "br",
TypeName = "BRTagHelper",
AssemblyName = "SomeAssembly",
TagStructure = TagStructure.WithoutEndTag
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -195,46 +176,33 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
new MarkupTagHelperBlock("br", TagMode.StartTagOnly)));
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: "PTagHelper1",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "strong" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: "PTagHelper2",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: new[] { "br" },
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "strong",
typeName: "StrongTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "br",
typeName: "BRTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null),
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper1",
AssemblyName = "SomeAssembly",
AllowedChildren = new[] { "strong" }
},
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper2",
AssemblyName = "SomeAssembly",
AllowedChildren = new[] { "br" }
},
new TagHelperDescriptor
{
TagName = "strong",
TypeName = "StrongTagHelper",
AssemblyName = "SomeAssembly"
},
new TagHelperDescriptor
{
TagName = "br",
TypeName = "BRTagHelper",
AssemblyName = "SomeAssembly",
TagStructure = TagStructure.WithoutEndTag
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -426,36 +394,27 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
// Arrange
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "p",
typeName: "PTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: allowedChildren,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "strong",
typeName: "StrongTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: allowedChildren,
tagStructure: TagStructure.Unspecified,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "br",
typeName: "BRTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null),
new TagHelperDescriptor
{
TagName = "p",
TypeName = "PTagHelper",
AssemblyName = "SomeAssembly",
AllowedChildren = allowedChildren
},
new TagHelperDescriptor
{
TagName = "strong",
TypeName = "StrongTagHelper",
AssemblyName = "SomeAssembly",
AllowedChildren = allowedChildren
},
new TagHelperDescriptor
{
TagName = "br",
TypeName = "BRTagHelper",
AssemblyName = "SomeAssembly",
TagStructure = TagStructure.WithoutEndTag
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -471,16 +430,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
var expectedOutput = new MarkupBlock(new MarkupTagHelperBlock("input", TagMode.StartTagOnly));
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null)
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
TagStructure = TagStructure.WithoutEndTag
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -507,16 +463,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
var expectedOutput = new MarkupBlock(blockFactory.MarkupTagBlock("</input>"));
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: "InputTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null)
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
TagStructure = TagStructure.WithoutEndTag
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -544,26 +497,20 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
var expectedOutput = new MarkupBlock(new MarkupTagHelperBlock("input", TagMode.StartTagOnly));
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: "InputTagHelper1",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.WithoutEndTag,
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "input",
typeName: "InputTagHelper2",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: TagStructure.NormalOrSelfClosing,
designTimeDescriptor: null)
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper1",
AssemblyName = "SomeAssembly",
TagStructure = TagStructure.WithoutEndTag
},
new TagHelperDescriptor
{
TagName = "input",
TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
TagStructure = TagStructure.NormalOrSelfClosing
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -975,24 +922,27 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
// Arrange
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
tagName: "p",
typeName: "pTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "class" }),
new TagHelperDescriptor(
tagName: "div",
typeName: "divTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "class", "style" }),
new TagHelperDescriptor(
tagName: "*",
typeName: "catchAllTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "catchAll" })
new TagHelperDescriptor
{
TagName = "p",
TypeName = "pTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "class" }
},
new TagHelperDescriptor
{
TagName = "div",
TypeName = "divTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "class", "style" }
},
new TagHelperDescriptor
{
TagName = "*",
TypeName = "catchAllTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "catchAll" }
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -1235,18 +1185,20 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
// Arrange
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
tagName: "p",
typeName: "pTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "class" }),
new TagHelperDescriptor(
tagName: "*",
typeName: "catchAllTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "catchAll" })
new TagHelperDescriptor
{
TagName = "p",
TypeName = "pTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "class" }
},
new TagHelperDescriptor
{
TagName = "*",
TypeName = "catchAllTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "catchAll" }
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -1443,12 +1395,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
// Arrange
var descriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
tagName: "p",
typeName: "pTagHelper",
assemblyName: "SomeAssembly",
attributes: new TagHelperAttributeDescriptor[0],
requiredAttributes: new[] { "class" })
new TagHelperDescriptor
{
TagName = "p",
TypeName = "pTagHelper",
AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "class" }
}
};
var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
@ -1464,78 +1417,65 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
var blockFactory = new BlockFactory(factory);
var availableDescriptorsColon = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: "th:",
tagName: "myth",
typeName: "mythTagHelper",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: "th:",
tagName: "myth2",
typeName: "mythTagHelper2",
assemblyName: "SomeAssembly",
attributes: new []
new TagHelperDescriptor
{
Prefix = "th:",
TagName = "myth",
TypeName = "mythTagHelper",
AssemblyName = "SomeAssembly"
},
new TagHelperDescriptor
{
Prefix = "th:",
TagName = "myth2",
TypeName = "mythTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new []
{
new TagHelperAttributeDescriptor(
name: "bound",
propertyName: "Bound",
typeName: typeof(bool).FullName,
isIndexer: false,
designTimeDescriptor: null),
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "bound",
PropertyName = "Bound",
TypeName = typeof(bool).FullName
}
}
}
};
var availableDescriptorsText = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: "PREFIX",
tagName: "myth",
typeName: "mythTagHelper",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null),
new TagHelperDescriptor(
prefix: "PREFIX",
tagName: "myth2",
typeName: "mythTagHelper2",
assemblyName: "SomeAssembly",
attributes: new []
new TagHelperDescriptor
{
Prefix = "PREFIX",
TagName = "myth",
TypeName = "mythTagHelper",
AssemblyName = "SomeAssembly"
},
new TagHelperDescriptor
{
Prefix = "PREFIX",
TagName = "myth2",
TypeName = "mythTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new []
{
new TagHelperAttributeDescriptor(
name: "bound",
propertyName: "Bound",
typeName: typeof(bool).FullName,
isIndexer: false,
designTimeDescriptor: null),
},
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null)
new TagHelperAttributeDescriptor
{
Name = "bound",
PropertyName = "Bound",
TypeName = typeof(bool).FullName
},
}
}
};
var availableDescriptorsCatchAll = new TagHelperDescriptor[]
{
new TagHelperDescriptor(
prefix: "myth",
tagName: "*",
typeName: "mythTagHelper",
assemblyName: "SomeAssembly",
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
allowedChildren: null,
tagStructure: default(TagStructure),
designTimeDescriptor: null),
new TagHelperDescriptor
{
Prefix = "myth",
TagName = "*",
TypeName = "mythTagHelper",
AssemblyName = "SomeAssembly"
}
};
// documentContent, expectedOutput, availableDescriptors

View File

@ -44,7 +44,12 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
foreach (var tagName in tagNames)
{
descriptors.Add(
new TagHelperDescriptor(tagName, tagName + "taghelper", "SomeAssembly"));
new TagHelperDescriptor
{
TagName = tagName,
TypeName = tagName + "taghelper",
AssemblyName = "SomeAssembly"
});
}
return new TagHelperDescriptorProvider(descriptors);