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

View File

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

View File

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

View File

@ -13,142 +13,44 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// </summary> /// </summary>
public class TagHelperDescriptor 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> /// <summary>
/// Text used as a required prefix when matching HTML start and end tags in the Razor source to available /// Text used as a required prefix when matching HTML start and end tags in the Razor source to available
/// tag helpers. /// tag helpers.
/// </summary> /// </summary>
public string Prefix { get; } public string Prefix { get; [param: NotNull] set; } = string.Empty;
/// <summary> /// <summary>
/// The tag name that the tag helper should target. /// The tag name that the tag helper should target.
/// </summary> /// </summary>
public string TagName { get; } public string TagName { get; [param: NotNull] set; }
/// <summary> /// <summary>
/// The full tag name that is required for the tag helper to target an HTML element. /// The full tag name that is required for the tag helper to target an HTML element.
/// </summary> /// </summary>
/// <remarks>This is equivalent to <see cref="Prefix"/> and <see cref="TagName"/> concatenated.</remarks> /// <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> /// <summary>
/// The full name of the tag helper class. /// The full name of the tag helper class.
/// </summary> /// </summary>
public string TypeName { get; } public string TypeName { get; [param: NotNull] set; }
/// <summary> /// <summary>
/// The name of the assembly containing the tag helper class. /// The name of the assembly containing the tag helper class.
/// </summary> /// </summary>
public string AssemblyName { get; } public string AssemblyName { get; [param: NotNull] set; }
/// <summary> /// <summary>
/// The list of attributes the tag helper expects. /// The list of attributes the tag helper expects.
/// </summary> /// </summary>
public IReadOnlyList<TagHelperAttributeDescriptor> Attributes { get; } public IEnumerable<TagHelperAttributeDescriptor> Attributes { get; [param: NotNull] set; }
= Enumerable.Empty<TagHelperAttributeDescriptor>();
/// <summary> /// <summary>
/// The list of required attribute names the tag helper expects to target an element. /// The list of required attribute names the tag helper expects to target an element.
@ -156,13 +58,13 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// <remarks> /// <remarks>
/// <c>*</c> at the end of an attribute name acts as a prefix match. /// <c>*</c> at the end of an attribute name acts as a prefix match.
/// </remarks> /// </remarks>
public IReadOnlyList<string> RequiredAttributes { get; } public IEnumerable<string> RequiredAttributes { get; [param: NotNull] set; } = Enumerable.Empty<string>();
/// <summary> /// <summary>
/// Get the names of elements allowed as children. Tag helpers must target all such elements. /// Get the names of elements allowed as children. Tag helpers must target all such elements.
/// </summary> /// </summary>
/// <remarks><c>null</c> indicates all children are allowed.</remarks> /// <remarks><c>null</c> indicates all children are allowed.</remarks>
public IReadOnlyList<string> AllowedChildren { get; } public IEnumerable<string> AllowedChildren { get; set; }
/// <summary> /// <summary>
/// The expected tag structure. /// The expected tag structure.
@ -188,12 +90,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
/// </code> /// </code>
/// </para> /// </para>
/// </remarks> /// </remarks>
public TagStructure TagStructure { get; } public TagStructure TagStructure { get; set; }
/// <summary> /// <summary>
/// The <see cref="TagHelperDesignTimeDescriptor"/> that contains design time information about this /// The <see cref="TagHelperDesignTimeDescriptor"/> that contains design time information about this
/// tag helper. /// tag helper.
/// </summary> /// </summary>
public TagHelperDesignTimeDescriptor DesignTimeDescriptor { get; } public TagHelperDesignTimeDescriptor DesignTimeDescriptor { get; set; }
} }
} }

View File

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

View File

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

View File

@ -26,40 +26,44 @@ namespace Microsoft.AspNet.Razor.Test.Generator
{ {
return new[] return new[]
{ {
new TagHelperDescriptor( new TagHelperDescriptor
tagName: "*", {
typeName: "CatchAllTagHelper", TagName = "*",
assemblyName: "SomeAssembly", TypeName = "CatchAllTagHelper",
attributes: new[] AssemblyName = "SomeAssembly",
Attributes = new[]
{ {
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
"catchall-bound-string", {
"BoundRequiredString", Name = "catchall-bound-string",
typeof(string).FullName, PropertyName = "BoundRequiredString",
isIndexer: false, TypeName = typeof(string).FullName
designTimeDescriptor: null), }
}, },
requiredAttributes: new[] { "catchall-unbound-required" }), RequiredAttributes = new[] { "catchall-unbound-required" },
new TagHelperDescriptor( },
tagName: "input", new TagHelperDescriptor
typeName: "InputTagHelper", {
assemblyName: "SomeAssembly", TagName = "input",
attributes: new[] TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new[]
{ {
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
"input-bound-required-string", {
"BoundRequiredString", Name = "input-bound-required-string",
typeof(string).FullName, PropertyName = "BoundRequiredString",
isIndexer: false, TypeName = typeof(string).FullName
designTimeDescriptor: null), },
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
"input-bound-string", {
"BoundString", Name = "input-bound-string",
typeof(string).FullName, PropertyName = "BoundString",
isIndexer: false, TypeName = typeof(string).FullName
designTimeDescriptor: null) }
}, },
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[] return new[]
{ {
new TagHelperDescriptor( new TagHelperDescriptor
tagName: "input", {
typeName: "InputTagHelper", TagName = "input",
assemblyName: "SomeAssembly", TypeName = "InputTagHelper",
attributes: new[] AssemblyName = "SomeAssembly",
Attributes = new[]
{ {
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
"bound", {
"Bound", Name = "bound",
typeof(string).FullName, PropertyName = "Bound",
isIndexer: false, TypeName = typeof(string).FullName
designTimeDescriptor: null) }
}), }
}
}; };
} }
} }
@ -95,46 +101,54 @@ namespace Microsoft.AspNet.Razor.Test.Generator
var inputCheckedPropertyInfo = typeof(TestType).GetProperty("Checked"); var inputCheckedPropertyInfo = typeof(TestType).GetProperty("Checked");
return new[] return new[]
{ {
new TagHelperDescriptor( new TagHelperDescriptor
tagName: "*", {
typeName: "CatchAllTagHelper", TagName = "*",
assemblyName: "SomeAssembly", TypeName = "CatchAllTagHelper",
attributes: new TagHelperAttributeDescriptor[] AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
}, },
requiredAttributes: new[] { "type" }), RequiredAttributes = new[] { "type" },
new TagHelperDescriptor( },
tagName: "*", new TagHelperDescriptor
typeName: "CatchAllTagHelper", {
assemblyName: "SomeAssembly", TagName = "*",
attributes: new TagHelperAttributeDescriptor[] TypeName = "CatchAllTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
}, },
requiredAttributes: new[] { "checked" }), RequiredAttributes = new[] { "checked" },
new TagHelperDescriptor( },
tagName: "input", new TagHelperDescriptor
typeName: "InputTagHelper", {
assemblyName: "SomeAssembly", TagName = "input",
attributes: new TagHelperAttributeDescriptor[] TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
}, },
requiredAttributes: new[] { "type" }), RequiredAttributes = new[] { "type" },
new TagHelperDescriptor( },
tagName: "input", new TagHelperDescriptor
typeName: "InputTagHelper", {
assemblyName: "SomeAssembly", TagName = "input",
attributes: new TagHelperAttributeDescriptor[] TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) 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"); var inputCheckedPropertyInfo = typeof(TestType).GetProperty("Checked");
return new[] return new[]
{ {
new TagHelperDescriptor( new TagHelperDescriptor
tagName: "p", {
typeName: "PTagHelper", TagName = "p",
assemblyName: "SomeAssembly", TypeName = "PTagHelper",
attributes: new TagHelperAttributeDescriptor[0], AssemblyName = "SomeAssembly",
requiredAttributes: new[] { "class" }), RequiredAttributes = new[] { "class" },
new TagHelperDescriptor( },
tagName: "input", new TagHelperDescriptor
typeName: "InputTagHelper", {
assemblyName: "SomeAssembly", TagName = "input",
attributes: new TagHelperAttributeDescriptor[] TypeName = "InputTagHelper",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo) new TagHelperAttributeDescriptor("type", inputTypePropertyInfo)
}, },
requiredAttributes: new[] { "type" }), RequiredAttributes = new[] { "type" },
new TagHelperDescriptor( },
tagName: "input", new TagHelperDescriptor
typeName: "InputTagHelper2", {
assemblyName: "SomeAssembly", TagName = "input",
attributes: new TagHelperAttributeDescriptor[] TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo)
}, },
requiredAttributes: new[] { "type", "checked" }), RequiredAttributes = new[] { "type", "checked" },
new TagHelperDescriptor( },
tagName: "*", new TagHelperDescriptor
typeName: "CatchAllTagHelper", {
assemblyName: "SomeAssembly", TagName = "*",
attributes: new TagHelperAttributeDescriptor[0], TypeName = "CatchAllTagHelper",
requiredAttributes: new[] { "catchAll" }) AssemblyName = "SomeAssembly",
RequiredAttributes = new[] { "catchAll" },
}
}; };
} }
} }
@ -188,80 +208,88 @@ namespace Microsoft.AspNet.Razor.Test.Generator
{ {
return new[] return new[]
{ {
new TagHelperDescriptor( new TagHelperDescriptor
tagName: "input", {
typeName: "InputTagHelper1", TagName = "input",
assemblyName: "SomeAssembly", TypeName = "InputTagHelper1",
attributes: new[] AssemblyName = "SomeAssembly",
Attributes = new[]
{ {
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
name: "int-prefix-grabber", {
propertyName: "IntProperty", Name = "int-prefix-grabber",
typeName: typeof(int).FullName, PropertyName = "IntProperty",
isIndexer: false, TypeName = typeof(int).FullName
designTimeDescriptor: null), },
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
name: "int-dictionary", {
propertyName: "IntDictionaryProperty", Name = "int-dictionary",
typeName: typeof(IDictionary<string, int>).FullName, PropertyName = "IntDictionaryProperty",
isIndexer: false, TypeName = typeof(IDictionary<string, int>).FullName
designTimeDescriptor: null), },
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
name: "string-dictionary", {
propertyName: "StringDictionaryProperty", Name = "string-dictionary",
typeName: "Namespace.DictionaryWithoutParameterlessConstructor<string, string>", PropertyName = "StringDictionaryProperty",
isIndexer: false, TypeName = "Namespace.DictionaryWithoutParameterlessConstructor<string, string>"
designTimeDescriptor: null), },
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
name: "string-prefix-grabber", {
propertyName: "StringProperty", Name = "string-prefix-grabber",
typeName: typeof(string).FullName, PropertyName = "StringProperty",
isIndexer: false, TypeName = typeof(string).FullName
designTimeDescriptor: null), },
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
name: "int-prefix-", {
propertyName: "IntDictionaryProperty", Name = "int-prefix-",
typeName: typeof(int).FullName, PropertyName = "IntDictionaryProperty",
isIndexer: true, TypeName = typeof(int).FullName,
designTimeDescriptor: null), IsIndexer = true
new TagHelperAttributeDescriptor( },
name: "string-prefix-", new TagHelperAttributeDescriptor
propertyName: "StringDictionaryProperty", {
typeName: typeof(string).FullName, Name = "string-prefix-",
isIndexer: true, PropertyName = "StringDictionaryProperty",
designTimeDescriptor: null), TypeName = typeof(string).FullName,
}), IsIndexer = true
new TagHelperDescriptor( }
tagName: "input", }
typeName: "InputTagHelper2", },
assemblyName: "SomeAssembly", new TagHelperDescriptor
attributes: new[] {
TagName = "input",
TypeName = "InputTagHelper2",
AssemblyName = "SomeAssembly",
Attributes = new[]
{ {
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
name: "int-dictionary", {
propertyName: "IntDictionaryProperty", Name = "int-dictionary",
typeName: typeof(IDictionary<string, int>).FullName, PropertyName = "IntDictionaryProperty",
isIndexer: false, TypeName = typeof(int).FullName
designTimeDescriptor: null), },
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
name: "string-dictionary", {
propertyName: "StringDictionaryProperty", Name = "string-dictionary",
typeName: "Namespace.DictionaryWithoutParameterlessConstructor<string, string>", PropertyName = "StringDictionaryProperty",
isIndexer: false, TypeName = "Namespace.DictionaryWithoutParameterlessConstructor<string, string>"
designTimeDescriptor: null), },
new TagHelperAttributeDescriptor( new TagHelperAttributeDescriptor
name: "int-prefix-", {
propertyName: "IntDictionaryProperty", Name = "int-prefix-",
typeName: typeof(int).FullName, PropertyName = "IntDictionaryProperty",
isIndexer: true, TypeName = typeof(int).FullName,
designTimeDescriptor: null), IsIndexer = true
new TagHelperAttributeDescriptor( },
name: "string-prefix-", new TagHelperAttributeDescriptor
propertyName: "StringDictionaryProperty", {
typeName: typeof(string).FullName, Name = "string-prefix-",
isIndexer: true, PropertyName = "StringDictionaryProperty",
designTimeDescriptor: null), TypeName = typeof(string).FullName,
}), IsIndexer = true
}
}
}
}; };
} }
} }
@ -1507,7 +1535,12 @@ namespace Microsoft.AspNet.Razor.Test.Generator
designTimeMode: true, designTimeMode: true,
tagHelperDescriptors: new[] 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 propertyInfo = typeof(TestType).GetProperty("BoundProperty");
var tagHelperDescriptors = new TagHelperDescriptor[] var tagHelperDescriptors = new TagHelperDescriptor[]
{ {
new TagHelperDescriptor("MyTagHelper", new TagHelperDescriptor
"MyTagHelper", {
"SomeAssembly", TagName = "MyTagHelper",
new [] TypeName = "MyTagHelper",
{ AssemblyName = "SomeAssembly",
new TagHelperAttributeDescriptor("BoundProperty", propertyInfo) Attributes = new []
}), {
new TagHelperDescriptor("NestedTagHelper", "NestedTagHelper", "SomeAssembly") new TagHelperAttributeDescriptor("BoundProperty", propertyInfo)
}
},
new TagHelperDescriptor
{
TagName = "NestedTagHelper",
TypeName = "NestedTagHelper",
AssemblyName = "SomeAssembly"
}
}; };
// Act & Assert // Act & Assert
@ -1540,46 +1581,42 @@ namespace Microsoft.AspNet.Razor.Test.Generator
return new[] return new[]
{ {
new TagHelperDescriptor( new TagHelperDescriptor
prefix, {
tagName: "p", Prefix = prefix,
typeName: "PTagHelper", TagName = "p",
assemblyName: "SomeAssembly", TypeName = "PTagHelper",
attributes: new [] AssemblyName = "SomeAssembly",
Attributes = new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("age", pAgePropertyInfo) new TagHelperAttributeDescriptor("age", pAgePropertyInfo)
}, },
requiredAttributes: Enumerable.Empty<string>(), TagStructure = TagStructure.NormalOrSelfClosing
allowedChildren: null, },
tagStructure: TagStructure.NormalOrSelfClosing, new TagHelperDescriptor
designTimeDescriptor: null), {
new TagHelperDescriptor( Prefix = prefix,
prefix, TagName = "input",
tagName: "input", TypeName = "InputTagHelper",
typeName: "InputTagHelper", AssemblyName = "SomeAssembly",
assemblyName: "SomeAssembly", Attributes = new TagHelperAttributeDescriptor[]
attributes: new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo) new TagHelperAttributeDescriptor("type", inputTypePropertyInfo)
}, },
requiredAttributes: Enumerable.Empty<string>(), TagStructure = TagStructure.WithoutEndTag
allowedChildren: null, },
tagStructure: TagStructure.WithoutEndTag, new TagHelperDescriptor
designTimeDescriptor: null), {
new TagHelperDescriptor( Prefix = prefix,
prefix, TagName = "input",
tagName: "input", TypeName = "InputTagHelper2",
typeName: "InputTagHelper2", AssemblyName = "SomeAssembly",
assemblyName: "SomeAssembly", Attributes = new TagHelperAttributeDescriptor[]
attributes: new TagHelperAttributeDescriptor[]
{ {
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("type", inputTypePropertyInfo),
new TagHelperAttributeDescriptor("checked", checkedPropertyInfo) 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", "div",
new[] new[]
{ {
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var codeRenderer = CreateCodeRenderer(); var codeRenderer = CreateCodeRenderer();
@ -41,8 +46,18 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div", "div",
new[] new[]
{ {
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName"), new TagHelperDescriptor
new TagHelperDescriptor("div", "Div2TagHelper", "FakeAssemblyName") {
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
},
new TagHelperDescriptor
{
TagName = "div",
TypeName = "Div2TagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var codeRenderer = CreateCodeRenderer(); var codeRenderer = CreateCodeRenderer();
@ -61,13 +76,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div", "div",
new[] new[]
{ {
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var chunk2 = CreateTagHelperChunk( var chunk2 = CreateTagHelperChunk(
"div", "div",
new[] new[]
{ {
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var codeRenderer = CreateCodeRenderer(); var codeRenderer = CreateCodeRenderer();
@ -87,13 +112,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div", "div",
new[] new[]
{ {
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var childChunk = CreateTagHelperChunk( var childChunk = CreateTagHelperChunk(
"div", "div",
new[] new[]
{ {
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
parentChunk.Children.Add(childChunk); parentChunk.Children.Add(childChunk);
var codeRenderer = CreateCodeRenderer(); var codeRenderer = CreateCodeRenderer();
@ -113,13 +148,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div", "div",
new[] new[]
{ {
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") new TagHelperDescriptor
{
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var spanChunk = CreateTagHelperChunk( var spanChunk = CreateTagHelperChunk(
"span", "span",
new[] new[]
{ {
new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName") new TagHelperDescriptor
{
TagName = "span",
TypeName = "SpanTagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var codeRenderer = CreateCodeRenderer(); var codeRenderer = CreateCodeRenderer();
@ -139,21 +184,46 @@ namespace Microsoft.AspNet.Razor.Test.Generator
"div", "div",
new[] new[]
{ {
new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName"), new TagHelperDescriptor
new TagHelperDescriptor("div", "Div2TagHelper", "FakeAssemblyName") {
TagName = "div",
TypeName = "DivTagHelper",
AssemblyName = "FakeAssemblyName"
},
new TagHelperDescriptor
{
TagName = "div",
TypeName = "Div2TagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var chunk2 = CreateTagHelperChunk( var chunk2 = CreateTagHelperChunk(
"span", "span",
new[] new[]
{ {
new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName") new TagHelperDescriptor
{
TagName = "span",
TypeName = "SpanTagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var chunk3 = CreateTagHelperChunk( var chunk3 = CreateTagHelperChunk(
"span", "span",
new[] new[]
{ {
new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName"), new TagHelperDescriptor
new TagHelperDescriptor("span", "Span2TagHelper", "FakeAssemblyName") {
TagName = "span",
TypeName = "SpanTagHelper",
AssemblyName = "FakeAssemblyName"
},
new TagHelperDescriptor
{
TagName = "span",
TypeName = "Span2TagHelper",
AssemblyName = "FakeAssemblyName"
}
}); });
var codeRenderer = CreateCodeRenderer(); var codeRenderer = CreateCodeRenderer();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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