diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorFactory.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorFactory.cs index 9d35198670..66f9e59cd4 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorFactory.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorFactory.cs @@ -223,16 +223,17 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers TagStructure tagStructure, TagHelperDesignTimeDescriptor designTimeDescriptor) { - return new TagHelperDescriptor( - prefix: string.Empty, - tagName: tagName, - typeName: typeName, - assemblyName: assemblyName, - attributes: attributeDescriptors, - requiredAttributes: requiredAttributes, - allowedChildren: allowedChildren, - tagStructure: tagStructure, - designTimeDescriptor: designTimeDescriptor); + return new TagHelperDescriptor + { + TagName = tagName, + TypeName = typeName, + AssemblyName = assemblyName, + Attributes = attributeDescriptors, + RequiredAttributes = requiredAttributes, + AllowedChildren = allowedChildren, + TagStructure = tagStructure, + DesignTimeDescriptor = designTimeDescriptor + }; } /// @@ -647,12 +648,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers } #endif - return new TagHelperAttributeDescriptor( - attributeName, - property.Name, - typeName, - isIndexer, - propertyDesignTimeDescriptor); + return new TagHelperAttributeDescriptor + { + Name = attributeName, + PropertyName = property.Name, + TypeName = typeName, + IsIndexer = isIndexer, + DesignTimeDescriptor = propertyDesignTimeDescriptor + }; } private static bool IsAccessibleProperty(PropertyInfo property) diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs index 7b414470eb..f2ab1242e6 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs @@ -147,16 +147,18 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers if (!string.IsNullOrEmpty(tagHelperPrefix)) { return descriptors.Select(descriptor => - new TagHelperDescriptor( - tagHelperPrefix, - descriptor.TagName, - descriptor.TypeName, - descriptor.AssemblyName, - descriptor.Attributes, - descriptor.RequiredAttributes, - descriptor.AllowedChildren, - descriptor.TagStructure, - descriptor.DesignTimeDescriptor)); + new TagHelperDescriptor + { + Prefix = tagHelperPrefix, + TagName = descriptor.TagName, + TypeName = descriptor.TypeName, + AssemblyName = descriptor.AssemblyName, + Attributes = descriptor.Attributes, + RequiredAttributes = descriptor.RequiredAttributes, + AllowedChildren = descriptor.AllowedChildren, + TagStructure = descriptor.TagStructure, + DesignTimeDescriptor = descriptor.DesignTimeDescriptor + }); } return descriptors; diff --git a/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperAttributeDescriptor.cs b/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperAttributeDescriptor.cs index 593fc220b3..b0342a8c81 100644 --- a/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperAttributeDescriptor.cs +++ b/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperAttributeDescriptor.cs @@ -12,70 +12,21 @@ namespace Microsoft.AspNet.Razor.TagHelpers /// public class TagHelperAttributeDescriptor { - // Internal for testing i.e. for easy TagHelperAttributeDescriptor creation when PropertyInfo is available. - internal TagHelperAttributeDescriptor([NotNull] string name, [NotNull] PropertyInfo propertyInfo) - : this( - name, - propertyInfo.Name, - propertyInfo.PropertyType.FullName, - isIndexer: false, - isStringProperty: propertyInfo.PropertyType == typeof(string), - designTimeDescriptor: null) - { - } + private string _typeName; /// /// Instantiates a new instance of the class. /// - /// - /// The HTML attribute name or, if is true, the prefix for matching - /// attribute names. - /// - /// The name of the CLR property that corresponds to the HTML attribute. - /// - /// The full name of the named (see ) property's or, - /// if is true, the full name of the indexer's value . - /// - /// - /// If true this is used for dictionary indexer assignments. - /// Otherwise this is used for property assignment. - /// - /// The that contains - /// design time information about this attribute. - /// - /// HTML attribute names are matched case-insensitively, regardless of . - /// - public TagHelperAttributeDescriptor( - [NotNull] string name, - [NotNull] string propertyName, - [NotNull] string typeName, - bool isIndexer, - TagHelperAttributeDesignTimeDescriptor designTimeDescriptor) - : this( - name, - propertyName, - typeName, - isIndexer, - isStringProperty: string.Equals(typeName, typeof(string).FullName, StringComparison.Ordinal), - designTimeDescriptor: designTimeDescriptor) + public TagHelperAttributeDescriptor() { } - // Internal for testing i.e. for confirming above constructor sets IsStringProperty as expected. - internal TagHelperAttributeDescriptor( - [NotNull] string name, - [NotNull] string propertyName, - [NotNull] string typeName, - bool isIndexer, - bool isStringProperty, - TagHelperAttributeDesignTimeDescriptor designTimeDescriptor) + // Internal for testing i.e. for easy TagHelperAttributeDescriptor creation when PropertyInfo is available. + internal TagHelperAttributeDescriptor(string name, PropertyInfo propertyInfo) { Name = name; - PropertyName = propertyName; - TypeName = typeName; - IsIndexer = isIndexer; - IsStringProperty = isStringProperty; - DesignTimeDescriptor = designTimeDescriptor; + PropertyName = propertyInfo.Name; + TypeName = propertyInfo.PropertyType.FullName; } /// @@ -88,7 +39,10 @@ namespace Microsoft.AspNet.Razor.TagHelpers /// is used for property assignment and is only associated with an /// HTML attribute that has the exact . /// - public bool IsIndexer { get; } + /// + /// HTML attribute names are matched case-insensitively, regardless of . + /// + public bool IsIndexer { get; set; } /// /// Gets an indication whether this property is of type or, if is @@ -99,30 +53,41 @@ namespace Microsoft.AspNet.Razor.TagHelpers /// to allow empty values for HTML attributes matching this . If /// false empty values for such matching attributes lead to errors. /// - public bool IsStringProperty { get; } + public bool IsStringProperty { get; private set; } /// /// The HTML attribute name or, if is true, the prefix for matching attribute /// names. /// - public string Name { get; } + public string Name { get; [param: NotNull] set; } /// /// The name of the CLR property that corresponds to the HTML attribute. /// - public string PropertyName { get; } + public string PropertyName { get; [param: NotNull] set; } /// /// The full name of the named (see ) property's or, if /// is true, the full name of the indexer's value . /// - public string TypeName { get; } + public string TypeName + { + get + { + return _typeName; + } + [param: NotNull] set + { + _typeName = value; + IsStringProperty = string.Equals(_typeName, typeof(string).FullName, StringComparison.Ordinal); + } + } /// /// The that contains design time information about /// this attribute. /// - public TagHelperAttributeDesignTimeDescriptor DesignTimeDescriptor { get; } + public TagHelperAttributeDesignTimeDescriptor DesignTimeDescriptor { get; set; } /// /// Determines whether HTML attribute matches this diff --git a/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperDescriptor.cs b/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperDescriptor.cs index 6c1d94d3dc..92f1b59396 100644 --- a/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperDescriptor.cs +++ b/src/Microsoft.AspNet.Razor/TagHelpers/TagHelperDescriptor.cs @@ -13,142 +13,44 @@ namespace Microsoft.AspNet.Razor.TagHelpers /// public class TagHelperDescriptor { - /// - /// Internal for testing. - /// - internal TagHelperDescriptor( - [NotNull] string tagName, - [NotNull] string typeName, - [NotNull] string assemblyName) - : this( - tagName, - typeName, - assemblyName, - attributes: Enumerable.Empty()) - { - } - - /// - /// Internal for testing. - /// - internal TagHelperDescriptor( - [NotNull] string tagName, - [NotNull] string typeName, - [NotNull] string assemblyName, - [NotNull] IEnumerable attributes) - : this( - tagName, - typeName, - assemblyName, - attributes, - requiredAttributes: Enumerable.Empty()) - { - } - - /// - /// Internal for testing. - /// - internal TagHelperDescriptor( - [NotNull] string tagName, - [NotNull] string typeName, - [NotNull] string assemblyName, - [NotNull] IEnumerable attributes, - [NotNull] IEnumerable requiredAttributes) - : this( - prefix: string.Empty, - tagName: tagName, - typeName: typeName, - assemblyName: assemblyName, - attributes: attributes, - requiredAttributes: requiredAttributes, - allowedChildren: null, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null) - { - } - - /// - /// Instantiates a new instance of the class with the given - /// . - /// - /// - /// Text used as a required prefix when matching HTML start and end tags in the Razor source to available - /// tag helpers. - /// - /// The tag name that the tag helper targets. '*' indicates a catch-all - /// which applies to every HTML tag. - /// The full name of the tag helper class. - /// The name of the assembly containing the tag helper class. - /// - /// The s to request from the HTML tag. - /// - /// - /// The attribute names required for the tag helper to target the HTML tag. - /// - /// - /// The names of elements allowed as children. Tag helpers must target all such elements. - /// - /// The expected tag structure. - /// The that contains design - /// time information about the tag helper. - public TagHelperDescriptor( - string prefix, - [NotNull] string tagName, - [NotNull] string typeName, - [NotNull] string assemblyName, - [NotNull] IEnumerable attributes, - [NotNull] IEnumerable requiredAttributes, - IEnumerable allowedChildren, - TagStructure tagStructure, - TagHelperDesignTimeDescriptor designTimeDescriptor) - { - Prefix = prefix ?? string.Empty; - TagName = tagName; - FullTagName = Prefix + TagName; - TypeName = typeName; - AssemblyName = assemblyName; - Attributes = new List(attributes); - RequiredAttributes = new List(requiredAttributes); - TagStructure = tagStructure; - DesignTimeDescriptor = designTimeDescriptor; - - if (allowedChildren != null) - { - AllowedChildren = new List(allowedChildren); - } - } - /// /// Text used as a required prefix when matching HTML start and end tags in the Razor source to available /// tag helpers. /// - public string Prefix { get; } + public string Prefix { get; [param: NotNull] set; } = string.Empty; /// /// The tag name that the tag helper should target. /// - public string TagName { get; } + public string TagName { get; [param: NotNull] set; } /// /// The full tag name that is required for the tag helper to target an HTML element. /// /// This is equivalent to and concatenated. - public string FullTagName { get; } + public string FullTagName + { + get + { + return Prefix + TagName; + } + } /// /// The full name of the tag helper class. /// - public string TypeName { get; } + public string TypeName { get; [param: NotNull] set; } /// /// The name of the assembly containing the tag helper class. /// - public string AssemblyName { get; } + public string AssemblyName { get; [param: NotNull] set; } /// /// The list of attributes the tag helper expects. /// - public IReadOnlyList Attributes { get; } + public IEnumerable Attributes { get; [param: NotNull] set; } + = Enumerable.Empty(); /// /// The list of required attribute names the tag helper expects to target an element. @@ -156,13 +58,13 @@ namespace Microsoft.AspNet.Razor.TagHelpers /// /// * at the end of an attribute name acts as a prefix match. /// - public IReadOnlyList RequiredAttributes { get; } + public IEnumerable RequiredAttributes { get; [param: NotNull] set; } = Enumerable.Empty(); /// /// Get the names of elements allowed as children. Tag helpers must target all such elements. /// /// null indicates all children are allowed. - public IReadOnlyList AllowedChildren { get; } + public IEnumerable AllowedChildren { get; set; } /// /// The expected tag structure. @@ -188,12 +90,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers /// /// /// - public TagStructure TagStructure { get; } + public TagStructure TagStructure { get; set; } /// /// The that contains design time information about this /// tag helper. /// - public TagHelperDesignTimeDescriptor DesignTimeDescriptor { get; } + public TagHelperDesignTimeDescriptor DesignTimeDescriptor { get; set; } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs index 044650919b..4ea9c53bfb 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs @@ -28,58 +28,46 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers typeof(RestrictChildrenTagHelper), new[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "restrict-children", - typeName: typeof(RestrictChildrenTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "p" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null) + new TagHelperDescriptor + { + TagName = "restrict-children", + TypeName = typeof(RestrictChildrenTagHelper).FullName, + AssemblyName = AssemblyName, + AllowedChildren = new[] { "p" }, + } } }, { typeof(DoubleRestrictChildrenTagHelper), new[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "double-restrict-children", - typeName: typeof(DoubleRestrictChildrenTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "p", "strong" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null) + new TagHelperDescriptor + { + TagName = "double-restrict-children", + TypeName = typeof(DoubleRestrictChildrenTagHelper).FullName, + AssemblyName = AssemblyName, + AllowedChildren = new[] { "p", "strong" }, + } } }, { typeof(MultiTargetRestrictChildrenTagHelper), new[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "div", - typeName: typeof(MultiTargetRestrictChildrenTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "p", "strong" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: typeof(MultiTargetRestrictChildrenTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "p", "strong" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), + new TagHelperDescriptor + { + TagName = "div", + TypeName = typeof(MultiTargetRestrictChildrenTagHelper).FullName, + AssemblyName = AssemblyName, + AllowedChildren = new[] { "p", "strong" }, + }, + new TagHelperDescriptor + { + TagName = "p", + TypeName = typeof(MultiTargetRestrictChildrenTagHelper).FullName, + AssemblyName = AssemblyName, + AllowedChildren = new[] { "p", "strong" }, + } } }, }; @@ -123,68 +111,52 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers typeof(TagStructureTagHelper), new[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: typeof(TagStructureTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null) + new TagHelperDescriptor + { + TagName = "input", + TypeName = typeof(TagStructureTagHelper).FullName, + AssemblyName = AssemblyName, + TagStructure = TagStructure.WithoutEndTag + } } }, { typeof(MultiSpecifiedTagStructureTagHelper), new[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: typeof(MultiSpecifiedTagStructureTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: typeof(MultiSpecifiedTagStructureTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.NormalOrSelfClosing, - designTimeDescriptor: null), + new TagHelperDescriptor + { + TagName = "input", + TypeName = typeof(MultiSpecifiedTagStructureTagHelper).FullName, + AssemblyName = AssemblyName, + TagStructure = TagStructure.WithoutEndTag + }, + new TagHelperDescriptor + { + TagName = "p", + TypeName = typeof(MultiSpecifiedTagStructureTagHelper).FullName, + AssemblyName = AssemblyName, + TagStructure = TagStructure.NormalOrSelfClosing + } } }, { typeof(MultiWithUnspecifiedTagStructureTagHelper), new[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), + new TagHelperDescriptor + { + TagName = "input", + TypeName = typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName, + AssemblyName = AssemblyName, + TagStructure = TagStructure.WithoutEndTag + }, + new TagHelperDescriptor + { + TagName = "p", + TypeName = typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName, + AssemblyName = AssemblyName + } } }, }; @@ -230,51 +202,42 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers typeof(OutputElementHintTagHelper), new[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "output-element-hint", - typeName: typeof(OutputElementHintTagHelper).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: new TagHelperDesignTimeDescriptor + new TagHelperDescriptor + { + TagName = "output-element-hint", + TypeName = typeof(OutputElementHintTagHelper).FullName, + AssemblyName = AssemblyName, + DesignTimeDescriptor = new TagHelperDesignTimeDescriptor { OutputElementHint = "strong" - }) + } + } } }, { typeof(MulitpleDescriptorTagHelperWithOutputElementHint), new[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "a", - typeName: typeof(MulitpleDescriptorTagHelperWithOutputElementHint).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: new TagHelperDesignTimeDescriptor + new TagHelperDescriptor + { + TagName = "a", + TypeName = typeof(MulitpleDescriptorTagHelperWithOutputElementHint).FullName, + AssemblyName = AssemblyName, + DesignTimeDescriptor = new TagHelperDesignTimeDescriptor { OutputElementHint = "div" - }), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: typeof(MulitpleDescriptorTagHelperWithOutputElementHint).FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: new TagHelperDesignTimeDescriptor + } + }, + new TagHelperDescriptor + { + TagName = "p", + TypeName = typeof(MulitpleDescriptorTagHelperWithOutputElementHint).FullName, + AssemblyName = AssemblyName, + DesignTimeDescriptor = new TagHelperDesignTimeDescriptor { OutputElementHint = "div" - }) + } + } } } }; @@ -326,12 +289,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers assemblyName: AssemblyName, attributes: new[] { - new TagHelperAttributeDescriptor( - name: "property", - propertyName: nameof(InheritedEditorBrowsableTagHelper.Property), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "property", + PropertyName = nameof(InheritedEditorBrowsableTagHelper.Property), + TypeName = typeof(int).FullName + } }) } }, @@ -347,12 +310,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers assemblyName: AssemblyName, attributes: new[] { - new TagHelperAttributeDescriptor( - name: "property", - propertyName: nameof(EditorBrowsableTagHelper.Property), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "property", + PropertyName = nameof(EditorBrowsableTagHelper.Property), + TypeName = typeof(int).FullName + } }) } }, @@ -379,12 +342,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers assemblyName: AssemblyName, attributes: new[] { - new TagHelperAttributeDescriptor( - name: "property", - propertyName: nameof(HiddenPropertyEditorBrowsableTagHelper.Property), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "property", + PropertyName = nameof(HiddenPropertyEditorBrowsableTagHelper.Property), + TypeName = typeof(int).FullName + } }) } }, @@ -399,12 +362,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers assemblyName: AssemblyName, attributes: new[] { - new TagHelperAttributeDescriptor( - name: "property", - propertyName: nameof(OverriddenEditorBrowsableTagHelper.Property), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "property", + PropertyName = nameof(OverriddenEditorBrowsableTagHelper.Property), + TypeName = typeof(int).FullName + } }) } }, @@ -419,12 +382,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers assemblyName: AssemblyName, attributes: new[] { - new TagHelperAttributeDescriptor( - name: "property2", - propertyName: nameof(MultiPropertyEditorBrowsableTagHelper.Property2), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "property2", + PropertyName = nameof(MultiPropertyEditorBrowsableTagHelper.Property2), + TypeName = typeof(int).FullName + } }) } }, @@ -439,18 +402,18 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers assemblyName: AssemblyName, attributes: new[] { - new TagHelperAttributeDescriptor( - name: "property", - propertyName: nameof(MultiPropertyEditorBrowsableTagHelper.Property), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "property2", - propertyName: nameof(MultiPropertyEditorBrowsableTagHelper.Property2), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "property", + PropertyName = nameof(MultiPropertyEditorBrowsableTagHelper.Property), + TypeName = typeof(int).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "property2", + PropertyName = nameof(MultiPropertyEditorBrowsableTagHelper.Property2), + TypeName = typeof(int).FullName + } }) } }, @@ -477,19 +440,18 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers assemblyName: AssemblyName, attributes: new[] { - new TagHelperAttributeDescriptor( - name: "property2", - propertyName: nameof(OverriddenPropertyEditorBrowsableTagHelper.Property2), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "property", - propertyName: nameof(OverriddenPropertyEditorBrowsableTagHelper.Property), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null), - + new TagHelperAttributeDescriptor + { + Name = "property2", + PropertyName = nameof(OverriddenPropertyEditorBrowsableTagHelper.Property2), + TypeName = typeof(int).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "property", + PropertyName = nameof(OverriddenPropertyEditorBrowsableTagHelper.Property), + TypeName = typeof(int).FullName + } }) } }, @@ -504,12 +466,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers assemblyName: AssemblyName, attributes: new[] { - new TagHelperAttributeDescriptor( - name: "property", - propertyName: nameof(DefaultEditorBrowsableTagHelper.Property), - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "property", + PropertyName = nameof(DefaultEditorBrowsableTagHelper.Property), + TypeName = typeof(int).FullName + } }) } }, @@ -929,12 +891,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers AssemblyName, new[] { - new TagHelperAttributeDescriptor( - "int-attribute", - nameof(InheritedSingleAttributeTagHelper.IntAttribute), - typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "int-attribute", + PropertyName = nameof(InheritedSingleAttributeTagHelper.IntAttribute), + TypeName = typeof(int).FullName + } }); // Act @@ -1047,12 +1009,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers AssemblyName, new[] { - new TagHelperAttributeDescriptor( - "bound-property", - nameof(NotBoundAttributeTagHelper.BoundProperty), - typeof(object).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "bound-property", + PropertyName = nameof(NotBoundAttributeTagHelper.BoundProperty), + TypeName = typeof(object).FullName + } }); // Act @@ -1099,12 +1061,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers AssemblyName, new[] { - new TagHelperAttributeDescriptor( - "valid-attribute", - nameof(MultiTagTagHelper.ValidAttribute), - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "valid-attribute", + PropertyName = nameof(MultiTagTagHelper.ValidAttribute), + TypeName = typeof(string).FullName + } }), CreateTagHelperDescriptor( "p", @@ -1112,12 +1074,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers AssemblyName, new[] { - new TagHelperAttributeDescriptor( - "valid-attribute", - nameof(MultiTagTagHelper.ValidAttribute), - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "valid-attribute", + PropertyName = nameof(MultiTagTagHelper.ValidAttribute), + TypeName = typeof(string).FullName + } }) }; @@ -1445,18 +1407,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers typeof(DefaultValidHtmlAttributePrefix), new[] { - new TagHelperAttributeDescriptor( - name: "dictionary-property", - propertyName: nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty), - typeName: typeof(IDictionary).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "dictionary-property-", - propertyName: nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty), - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "dictionary-property", + PropertyName = nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty), + TypeName = typeof(IDictionary).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "dictionary-property-", + PropertyName = nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty), + TypeName = typeof(string).FullName, + IsIndexer = true + } }, new string[0] }, @@ -1464,18 +1427,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers typeof(SingleValidHtmlAttributePrefix), new[] { - new TagHelperAttributeDescriptor( - name: "valid-name", - propertyName: nameof(SingleValidHtmlAttributePrefix.DictionaryProperty), - typeName: typeof(IDictionary).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-name-", - propertyName: nameof(SingleValidHtmlAttributePrefix.DictionaryProperty), - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "valid-name", + PropertyName = nameof(SingleValidHtmlAttributePrefix.DictionaryProperty), + TypeName = typeof(IDictionary).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "valid-name-", + PropertyName = nameof(SingleValidHtmlAttributePrefix.DictionaryProperty), + TypeName = typeof(string).FullName, + IsIndexer = true + } }, new string[0] }, @@ -1483,84 +1447,91 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers typeof(MultipleValidHtmlAttributePrefix), new[] { - new TagHelperAttributeDescriptor( - name: "valid-name1", - propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty), - typeName: typeof(Dictionary).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-name2", - propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty), - typeName: typeof(DictionarySubclass).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-name3", - propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty), - typeName: typeof(DictionaryWithoutParameterlessConstructor).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-name4", - propertyName: nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty), - typeName: typeof(GenericDictionarySubclass).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-name5", - propertyName: nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty), - typeName: typeof(SortedDictionary).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-name6", - propertyName: nameof(MultipleValidHtmlAttributePrefix.StringProperty), - typeName: typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-prefix1-", - propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty), - typeName: typeof(object).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-prefix2-", - propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty), - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-prefix3-", - propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty), - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-prefix4-", - propertyName: nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty), - typeName: typeof(object).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-prefix5-", - propertyName: nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty), - typeName: typeof(int).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "get-only-dictionary-property-", - propertyName: nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryProperty), - typeName: typeof(int).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "valid-prefix6", - propertyName: nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributePrefix), - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "valid-name1", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty), + TypeName = typeof(Dictionary).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "valid-name2", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty), + TypeName = typeof(DictionarySubclass).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "valid-name3", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty), + TypeName = typeof(DictionaryWithoutParameterlessConstructor).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "valid-name4", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty), + TypeName = typeof(GenericDictionarySubclass).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "valid-name5", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty), + TypeName = typeof(SortedDictionary).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "valid-name6", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.StringProperty), + TypeName = typeof(string).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "valid-prefix1-", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty), + TypeName = typeof(object).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "valid-prefix2-", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty), + TypeName = typeof(string).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "valid-prefix3-", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty), + TypeName = typeof(string).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "valid-prefix4-", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty), + TypeName = typeof(object).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "valid-prefix5-", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty), + TypeName = typeof(int).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "get-only-dictionary-property-", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryProperty), + TypeName = typeof(int).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "valid-prefix6", + PropertyName = nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributePrefix), + TypeName = typeof(string).FullName, + IsIndexer = true + } }, new string[0] }, @@ -1578,12 +1549,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers typeof(MultipleInvalidHtmlAttributePrefix), new[] { - new TagHelperAttributeDescriptor( - name: "valid-name1", - propertyName: nameof(MultipleInvalidHtmlAttributePrefix.LongProperty), - typeName: typeof(long).FullName, - isIndexer: false, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "valid-name1", + PropertyName = nameof(MultipleInvalidHtmlAttributePrefix.LongProperty), + TypeName = typeof(long).FullName + } }, new[] { @@ -1669,12 +1640,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public void ValidateTagHelperAttributeDescriptor_WithValidName_ReturnsTrue(string name) { // Arrange - var descriptor = new TagHelperAttributeDescriptor( - name, - propertyName: "ValidProperty", - typeName: "PropertyType", - isIndexer: false, - designTimeDescriptor: null); + var descriptor = new TagHelperAttributeDescriptor + { + Name = name, + PropertyName = "ValidProperty", + TypeName = "PropertyType" + }; var errorSink = new ErrorSink(); // Act @@ -1710,12 +1681,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public void ValidateTagHelperAttributeDescriptor_WithValidPrefix_ReturnsTrue(string prefix) { // Arrange - var descriptor = new TagHelperAttributeDescriptor( - name: prefix, - propertyName: "ValidProperty", - typeName: "PropertyType", - isIndexer: true, - designTimeDescriptor: null); + var descriptor = new TagHelperAttributeDescriptor + { + Name = prefix, + PropertyName = "ValidProperty", + TypeName = "PropertyType", + IsIndexer = true + }; var errorSink = new ErrorSink(); // Act @@ -1756,12 +1728,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers string[] expectedErrorMessages) { // Arrange - var descriptor = new TagHelperAttributeDescriptor( - name, - propertyName: "InvalidProperty", - typeName: "PropertyType", - isIndexer: false, - designTimeDescriptor: null); + var descriptor = new TagHelperAttributeDescriptor + { + Name = name, + PropertyName = "InvalidProperty", + TypeName = "PropertyType" + }; var errorSink = new ErrorSink(); // Act @@ -1810,12 +1782,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers string[] expectedErrorMessages) { // Arrange - var descriptor = new TagHelperAttributeDescriptor( - name: prefix, - propertyName: "InvalidProperty", - typeName: "ValuesType", - isIndexer: true, - designTimeDescriptor: null); + var descriptor = new TagHelperAttributeDescriptor + { + Name = prefix, + PropertyName = "InvalidProperty", + TypeName = "ValuesType", + IsIndexer = true + }; var errorSink = new ErrorSink(); // Act @@ -2105,28 +2078,26 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers IEnumerable attributes = null, IEnumerable requiredAttributes = null) { - return new TagHelperDescriptor( - prefix: string.Empty, - tagName: tagName, - typeName: typeName, - assemblyName: assemblyName, - attributes: attributes ?? Enumerable.Empty(), - requiredAttributes: requiredAttributes ?? Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null); + return new TagHelperDescriptor + { + TagName = tagName, + TypeName = typeName, + AssemblyName = assemblyName, + Attributes = attributes ?? Enumerable.Empty(), + RequiredAttributes = requiredAttributes ?? Enumerable.Empty() + }; } private static TagHelperAttributeDescriptor CreateTagHelperAttributeDescriptor( string name, PropertyInfo propertyInfo) { - return new TagHelperAttributeDescriptor( - name, - propertyInfo.Name, - propertyInfo.PropertyType.FullName, - isIndexer: false, - designTimeDescriptor: null); + return new TagHelperAttributeDescriptor + { + Name = name, + PropertyName = propertyInfo.Name, + TypeName = propertyInfo.PropertyType.FullName + }; } [RestrictChildren("p")] diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs index d7c1f7962f..dd4ac0f4e5 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs @@ -25,16 +25,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { get { - return new TagHelperDescriptor( - prefix: string.Empty, - tagName: "valid_plain", - typeName: Valid_PlainTagHelperType.FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null); + return new TagHelperDescriptor + { + TagName = "valid_plain", + TypeName = Valid_PlainTagHelperType.FullName, + AssemblyName = AssemblyName + }; } } @@ -42,16 +38,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { get { - return new TagHelperDescriptor( - prefix: string.Empty, - tagName: "valid_inherited", - typeName: Valid_InheritedTagHelperType.FullName, - assemblyName: AssemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null); + return new TagHelperDescriptor + { + TagName = "valid_inherited", + TypeName = Valid_InheritedTagHelperType.FullName, + AssemblyName = AssemblyName + }; } } @@ -604,16 +596,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers // We're treating 'string' as a TagHelper so we can test TagHelpers in multiple assemblies without // building a separate assembly with a single TagHelper. var stringTagHelperDescriptor = - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "string", - typeName: "System.String", - assemblyName: assemblyB, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null); + new TagHelperDescriptor + { + TagName = "string", + TypeName = "System.String", + AssemblyName = assemblyB + }; return new TheoryData>, // descriptorAssemblyLookups IEnumerable, // directiveDescriptors @@ -1041,16 +1029,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers var assemblyB = stringType.GetTypeInfo().Assembly.GetName().Name; var stringTagHelperDescriptor = - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "string", - typeName: "System.String", - assemblyName: assemblyB, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null); + new TagHelperDescriptor + { + TagName = "string", + TypeName = "System.String", + AssemblyName = assemblyB + }; return new TheoryData>, // descriptorAssemblyLookups IEnumerable> // directiveDescriptors @@ -1441,16 +1425,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers string typeName, string assemblyName) { - return new TagHelperDescriptor( - prefix, - tagName, - typeName, - assemblyName, - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null); + return new TagHelperDescriptor + { + Prefix = prefix, + TagName = tagName, + TypeName = typeName, + AssemblyName = assemblyName + }; } private static TagHelperDescriptor CreatePrefixedValidPlainDescriptor(string prefix) diff --git a/test/Microsoft.AspNet.Razor.Test/CodeGenerators/CSharpTagHelperRenderingTest.cs b/test/Microsoft.AspNet.Razor.Test/CodeGenerators/CSharpTagHelperRenderingTest.cs index 7bad3b0993..4f8cc30042 100644 --- a/test/Microsoft.AspNet.Razor.Test/CodeGenerators/CSharpTagHelperRenderingTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/CodeGenerators/CSharpTagHelperRenderingTest.cs @@ -26,40 +26,44 @@ namespace Microsoft.AspNet.Razor.Test.Generator { return new[] { - new TagHelperDescriptor( - tagName: "*", - typeName: "CatchAllTagHelper", - assemblyName: "SomeAssembly", - attributes: new[] + new TagHelperDescriptor + { + TagName = "*", + TypeName = "CatchAllTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - "catchall-bound-string", - "BoundRequiredString", - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "catchall-bound-string", + PropertyName = "BoundRequiredString", + TypeName = typeof(string).FullName + } }, - requiredAttributes: new[] { "catchall-unbound-required" }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new[] + RequiredAttributes = new[] { "catchall-unbound-required" }, + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - "input-bound-required-string", - "BoundRequiredString", - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - "input-bound-string", - "BoundString", - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "input-bound-required-string", + PropertyName = "BoundRequiredString", + TypeName = typeof(string).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "input-bound-string", + PropertyName = "BoundString", + TypeName = typeof(string).FullName + } }, - requiredAttributes: new[] { "input-bound-required-string", "input-unbound-required" }), + RequiredAttributes = new[] { "input-bound-required-string", "input-unbound-required" }, + } }; } } @@ -70,19 +74,21 @@ namespace Microsoft.AspNet.Razor.Test.Generator { return new[] { - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new[] + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - "bound", - "Bound", - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null) - }), + new TagHelperAttributeDescriptor + { + Name = "bound", + PropertyName = "Bound", + TypeName = typeof(string).FullName + } + } + } }; } } @@ -95,46 +101,54 @@ namespace Microsoft.AspNet.Razor.Test.Generator var inputCheckedPropertyInfo = typeof(TestType).GetProperty("Checked"); return new[] { - new TagHelperDescriptor( - tagName: "*", - typeName: "CatchAllTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + new TagHelperDescriptor + { + TagName = "*", + TypeName = "CatchAllTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) }, - requiredAttributes: new[] { "type" }), - new TagHelperDescriptor( - tagName: "*", - typeName: "CatchAllTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + RequiredAttributes = new[] { "type" }, + }, + new TagHelperDescriptor + { + TagName = "*", + TypeName = "CatchAllTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) }, - requiredAttributes: new[] { "checked" }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + RequiredAttributes = new[] { "checked" }, + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) }, - requiredAttributes: new[] { "type" }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + RequiredAttributes = new[] { "type" }, + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) }, - requiredAttributes: new[] { "checked" }) + RequiredAttributes = new[] { "checked" }, + } }; } } @@ -147,37 +161,43 @@ namespace Microsoft.AspNet.Razor.Test.Generator var inputCheckedPropertyInfo = typeof(TestType).GetProperty("Checked"); return new[] { - new TagHelperDescriptor( - tagName: "p", - typeName: "PTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "class" }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "class" }, + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo) }, - requiredAttributes: new[] { "type" }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper2", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + RequiredAttributes = new[] { "type" }, + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper2", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("checked", inputCheckedPropertyInfo) }, - requiredAttributes: new[] { "type", "checked" }), - new TagHelperDescriptor( - tagName: "*", - typeName: "CatchAllTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "catchAll" }) + RequiredAttributes = new[] { "type", "checked" }, + }, + new TagHelperDescriptor + { + TagName = "*", + TypeName = "CatchAllTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "catchAll" }, + } }; } } @@ -188,80 +208,88 @@ namespace Microsoft.AspNet.Razor.Test.Generator { return new[] { - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper1", - assemblyName: "SomeAssembly", - attributes: new[] + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper1", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - name: "int-prefix-grabber", - propertyName: "IntProperty", - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "int-dictionary", - propertyName: "IntDictionaryProperty", - typeName: typeof(IDictionary).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "string-dictionary", - propertyName: "StringDictionaryProperty", - typeName: "Namespace.DictionaryWithoutParameterlessConstructor", - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "string-prefix-grabber", - propertyName: "StringProperty", - typeName: typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "int-prefix-", - propertyName: "IntDictionaryProperty", - typeName: typeof(int).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "string-prefix-", - propertyName: "StringDictionaryProperty", - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), - }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper2", - assemblyName: "SomeAssembly", - attributes: new[] + new TagHelperAttributeDescriptor + { + Name = "int-prefix-grabber", + PropertyName = "IntProperty", + TypeName = typeof(int).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "int-dictionary", + PropertyName = "IntDictionaryProperty", + TypeName = typeof(IDictionary).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "string-dictionary", + PropertyName = "StringDictionaryProperty", + TypeName = "Namespace.DictionaryWithoutParameterlessConstructor" + }, + new TagHelperAttributeDescriptor + { + Name = "string-prefix-grabber", + PropertyName = "StringProperty", + TypeName = typeof(string).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "int-prefix-", + PropertyName = "IntDictionaryProperty", + TypeName = typeof(int).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "string-prefix-", + PropertyName = "StringDictionaryProperty", + TypeName = typeof(string).FullName, + IsIndexer = true + } + } + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper2", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - name: "int-dictionary", - propertyName: "IntDictionaryProperty", - typeName: typeof(IDictionary).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "string-dictionary", - propertyName: "StringDictionaryProperty", - typeName: "Namespace.DictionaryWithoutParameterlessConstructor", - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "int-prefix-", - propertyName: "IntDictionaryProperty", - typeName: typeof(int).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "string-prefix-", - propertyName: "StringDictionaryProperty", - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), - }), + new TagHelperAttributeDescriptor + { + Name = "int-dictionary", + PropertyName = "IntDictionaryProperty", + TypeName = typeof(int).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "string-dictionary", + PropertyName = "StringDictionaryProperty", + TypeName = "Namespace.DictionaryWithoutParameterlessConstructor" + }, + new TagHelperAttributeDescriptor + { + Name = "int-prefix-", + PropertyName = "IntDictionaryProperty", + TypeName = typeof(int).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "string-prefix-", + PropertyName = "StringDictionaryProperty", + TypeName = typeof(string).FullName, + IsIndexer = true + } + } + } }; } } @@ -1507,7 +1535,12 @@ namespace Microsoft.AspNet.Razor.Test.Generator designTimeMode: true, tagHelperDescriptors: new[] { - new TagHelperDescriptor("p", "pTagHelper", "SomeAssembly") + new TagHelperDescriptor + { + TagName = "p", + TypeName = "pTagHelper", + AssemblyName = "SomeAssembly" + } }); } @@ -1518,14 +1551,22 @@ namespace Microsoft.AspNet.Razor.Test.Generator var propertyInfo = typeof(TestType).GetProperty("BoundProperty"); var tagHelperDescriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor("MyTagHelper", - "MyTagHelper", - "SomeAssembly", - new [] - { - new TagHelperAttributeDescriptor("BoundProperty", propertyInfo) - }), - new TagHelperDescriptor("NestedTagHelper", "NestedTagHelper", "SomeAssembly") + new TagHelperDescriptor + { + TagName = "MyTagHelper", + TypeName = "MyTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new [] + { + new TagHelperAttributeDescriptor("BoundProperty", propertyInfo) + } + }, + new TagHelperDescriptor + { + TagName = "NestedTagHelper", + TypeName = "NestedTagHelper", + AssemblyName = "SomeAssembly" + } }; // Act & Assert @@ -1540,46 +1581,42 @@ namespace Microsoft.AspNet.Razor.Test.Generator return new[] { - new TagHelperDescriptor( - prefix, - tagName: "p", - typeName: "PTagHelper", - assemblyName: "SomeAssembly", - attributes: new [] + new TagHelperDescriptor + { + Prefix = prefix, + TagName = "p", + TypeName = "PTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("age", pAgePropertyInfo) }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.NormalOrSelfClosing, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix, - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + TagStructure = TagStructure.NormalOrSelfClosing + }, + new TagHelperDescriptor + { + Prefix = prefix, + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo) }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix, - tagName: "input", - typeName: "InputTagHelper2", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + TagStructure = TagStructure.WithoutEndTag + }, + new TagHelperDescriptor + { + Prefix = prefix, + TagName = "input", + TypeName = "InputTagHelper2", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("checked", checkedPropertyInfo) }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null) + } }; } diff --git a/test/Microsoft.AspNet.Razor.Test/CodeGenerators/CSharpTagHelperRenderingUnitTest.cs b/test/Microsoft.AspNet.Razor.Test/CodeGenerators/CSharpTagHelperRenderingUnitTest.cs index 238ece84d5..f058742868 100644 --- a/test/Microsoft.AspNet.Razor.Test/CodeGenerators/CSharpTagHelperRenderingUnitTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/CodeGenerators/CSharpTagHelperRenderingUnitTest.cs @@ -22,7 +22,12 @@ namespace Microsoft.AspNet.Razor.Test.Generator "div", new[] { - new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "FakeAssemblyName" + } }); var codeRenderer = CreateCodeRenderer(); @@ -41,8 +46,18 @@ namespace Microsoft.AspNet.Razor.Test.Generator "div", new[] { - new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName"), - new TagHelperDescriptor("div", "Div2TagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "FakeAssemblyName" + }, + new TagHelperDescriptor + { + TagName = "div", + TypeName = "Div2TagHelper", + AssemblyName = "FakeAssemblyName" + } }); var codeRenderer = CreateCodeRenderer(); @@ -61,13 +76,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator "div", new[] { - new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "FakeAssemblyName" + } }); var chunk2 = CreateTagHelperChunk( "div", new[] { - new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "FakeAssemblyName" + } }); var codeRenderer = CreateCodeRenderer(); @@ -87,13 +112,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator "div", new[] { - new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "FakeAssemblyName" + } }); var childChunk = CreateTagHelperChunk( "div", new[] { - new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "FakeAssemblyName" + } }); parentChunk.Children.Add(childChunk); var codeRenderer = CreateCodeRenderer(); @@ -113,13 +148,23 @@ namespace Microsoft.AspNet.Razor.Test.Generator "div", new[] { - new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "FakeAssemblyName" + } }); var spanChunk = CreateTagHelperChunk( "span", new[] { - new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "span", + TypeName = "SpanTagHelper", + AssemblyName = "FakeAssemblyName" + } }); var codeRenderer = CreateCodeRenderer(); @@ -139,21 +184,46 @@ namespace Microsoft.AspNet.Razor.Test.Generator "div", new[] { - new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName"), - new TagHelperDescriptor("div", "Div2TagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "FakeAssemblyName" + }, + new TagHelperDescriptor + { + TagName = "div", + TypeName = "Div2TagHelper", + AssemblyName = "FakeAssemblyName" + } }); var chunk2 = CreateTagHelperChunk( "span", new[] { - new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "span", + TypeName = "SpanTagHelper", + AssemblyName = "FakeAssemblyName" + } }); var chunk3 = CreateTagHelperChunk( "span", new[] { - new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName"), - new TagHelperDescriptor("span", "Span2TagHelper", "FakeAssemblyName") + new TagHelperDescriptor + { + TagName = "span", + TypeName = "SpanTagHelper", + AssemblyName = "FakeAssemblyName" + }, + new TagHelperDescriptor + { + TagName = "span", + TypeName = "Span2TagHelper", + AssemblyName = "FakeAssemblyName" + } }); var codeRenderer = CreateCodeRenderer(); diff --git a/test/Microsoft.AspNet.Razor.Test/CodeGenerators/TagHelperAttributeValueCodeRendererTest.cs b/test/Microsoft.AspNet.Razor.Test/CodeGenerators/TagHelperAttributeValueCodeRendererTest.cs index 21bb234948..78e57b7785 100644 --- a/test/Microsoft.AspNet.Razor.Test/CodeGenerators/TagHelperAttributeValueCodeRendererTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/CodeGenerators/TagHelperAttributeValueCodeRendererTest.cs @@ -23,29 +23,34 @@ namespace Microsoft.AspNet.Razor.Test.Generator var checkedPropertyInfo = typeof(TestType).GetProperty("Checked"); var tagHelperDescriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor("p", "PTagHelper", "SomeAssembly"), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper", + AssemblyName = "SomeAssembly" + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo) }, - requiredAttributes: new string[0], - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper2", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[] + TagStructure = TagStructure.WithoutEndTag + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper2", + AssemblyName = "SomeAssembly", + Attributes = new TagHelperAttributeDescriptor[] { new TagHelperAttributeDescriptor("type", inputTypePropertyInfo), new TagHelperAttributeDescriptor("checked", checkedPropertyInfo) - }) + } + } }; // Act & Assert diff --git a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperAttributeDescriptorTest.cs b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperAttributeDescriptorTest.cs index a979d40025..5957dcfc15 100644 --- a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperAttributeDescriptorTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperAttributeDescriptorTest.cs @@ -36,12 +36,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers bool expectedIsStringProperty) { // Arrange - var attributeDescriptor = new TagHelperAttributeDescriptor( - "someAttribute", - "someProperty", - attributeType.FullName, - isIndexer, - designTimeDescriptor: null); + var attributeDescriptor = new TagHelperAttributeDescriptor + { + Name = "someAttribute", + PropertyName = "someProperty", + TypeName = attributeType.FullName, + IsIndexer = isIndexer + }; // Assert Assert.Equal(expectedIsStringProperty, attributeDescriptor.IsStringProperty); diff --git a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperBlockRewriterTest.cs b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperBlockRewriterTest.cs index 55187f361b..0c1728a177 100644 --- a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperBlockRewriterTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperBlockRewriterTest.cs @@ -80,16 +80,13 @@ namespace Microsoft.AspNet.Razor.TagHelpers // Arrange var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null) + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + TagStructure = TagStructure.WithoutEndTag, + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -183,26 +180,20 @@ namespace Microsoft.AspNet.Razor.TagHelpers var blockFactory = new BlockFactory(factory); var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: "InputTagHelper1", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: structure1, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: "InputTagHelper2", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: structure2, - designTimeDescriptor: null) + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper1", + AssemblyName = "SomeAssembly", + TagStructure = structure1 + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper2", + AssemblyName = "SomeAssembly", + TagStructure = structure2 + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -1024,28 +1015,33 @@ namespace Microsoft.AspNet.Razor.TagHelpers // Arrange var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor("person", "PersonTagHelper", "personAssembly", - attributes: new[] + new TagHelperDescriptor + { + TagName = "person", + TypeName = "PersonTagHelper", + AssemblyName = "personAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - name: "age", - propertyName: "Age", - typeName: typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "birthday", - propertyName: "BirthDay", - typeName: typeof(DateTime).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "name", - propertyName: "Name", - typeName: typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null), - }) + new TagHelperAttributeDescriptor + { + Name = "age", + PropertyName = "Age", + TypeName = typeof(int).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "birthday", + PropertyName = "BirthDay", + TypeName = typeof(DateTime).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "name", + PropertyName = "Name", + TypeName = typeof(string).FullName + } + } + } }; var providerContext = new TagHelperDescriptorProvider(descriptors); @@ -2067,25 +2063,27 @@ namespace Microsoft.AspNet.Razor.TagHelpers // Arrange var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - tagName: "myth", - typeName: "mythTagHelper", - assemblyName: "SomeAssembly", - attributes: new[] + new TagHelperDescriptor + { + TagName = "myth", + TypeName = "mythTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - name: "bound", - propertyName: "Bound", - typeName: typeof(bool).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "name", - propertyName: "Name", - typeName: typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null) - }) + new TagHelperAttributeDescriptor + { + Name = "bound", + PropertyName = "Bound", + TypeName = typeof(bool).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "name", + PropertyName = "Name", + TypeName = typeof(string).FullName + } + } + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -3657,100 +3655,110 @@ namespace Microsoft.AspNet.Razor.TagHelpers // Arrange var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper1", - assemblyName: "SomeAssembly", - attributes: new[] + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper1", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - "bound-required-string", - "BoundRequiredString", - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "bound-required-string", + PropertyName = "BoundRequiredString", + TypeName = typeof(string).FullName + } }, - requiredAttributes: new[] { "unbound-required" }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper1", - assemblyName: "SomeAssembly", - attributes: new[] + RequiredAttributes = new[] { "unbound-required" } + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper1", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - "bound-required-string", - "BoundRequiredString", - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "bound-required-string", + PropertyName = "BoundRequiredString", + TypeName = typeof(string).FullName + } }, - requiredAttributes: new[] { "bound-required-string" }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper2", - assemblyName: "SomeAssembly", - attributes: new[] + RequiredAttributes = new[] { "bound-required-string" } + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper2", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - "bound-required-int", - "BoundRequiredInt", - typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "bound-required-int", + PropertyName = "BoundRequiredInt", + TypeName = typeof(int).FullName + } }, - requiredAttributes: new[] { "bound-required-int" }), - new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper3", - assemblyName: "SomeAssembly", - attributes: new[] + RequiredAttributes = new[] { "bound-required-int" } + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper3", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - "int-dictionary", - "DictionaryOfIntProperty", - typeof(IDictionary).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - "string-dictionary", - "DictionaryOfStringProperty", - typeof(IDictionary).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - "int-prefix-", - "DictionaryOfIntProperty", - typeof(int).FullName, - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - "string-prefix-", - "DictionaryOfStringProperty", - typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), - }, - requiredAttributes: Enumerable.Empty()), - new TagHelperDescriptor( - tagName: "p", - typeName: "PTagHelper", - assemblyName: "SomeAssembly", - attributes: new[] + new TagHelperAttributeDescriptor + { + Name = "int-dictionary", + PropertyName ="DictionaryOfIntProperty", + TypeName = typeof(IDictionary).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "string-dictionary", + PropertyName = "DictionaryOfStringProperty", + TypeName = typeof(IDictionary).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "int-prefix-", + PropertyName = "DictionaryOfIntProperty", + TypeName = typeof(int).FullName, + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "string-prefix-", + PropertyName = "DictionaryOfStringProperty", + TypeName = typeof(string).FullName, + IsIndexer = true + } + } + }, + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper", + AssemblyName = "SomeAssembly", + Attributes = new[] { - new TagHelperAttributeDescriptor( - "bound-string", - "BoundRequiredString", - typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - "bound-int", - "BoundRequiredString", - typeof(int).FullName, - isIndexer: false, - designTimeDescriptor: null) - }, - requiredAttributes: Enumerable.Empty()), + new TagHelperAttributeDescriptor + { + Name = "bound-string", + PropertyName = "BoundRequiredString", + TypeName = typeof(string).FullName + }, + new TagHelperAttributeDescriptor + { + Name = "bound-int", + PropertyName = "BoundRequiredString", + TypeName = typeof(int).FullName + } + } + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); diff --git a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorProviderTest.cs b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorProviderTest.cs index b91ad18783..0c0565fcb5 100644 --- a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorProviderTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorProviderTest.cs @@ -14,42 +14,48 @@ namespace Microsoft.AspNet.Razor.TagHelpers { get { - var divDescriptor = new TagHelperDescriptor( - tagName: "div", - typeName: "DivTagHelper", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: new[] { "style" }); - var inputDescriptor = new TagHelperDescriptor( - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: new[] { "class", "style" }); - var inputWildcardPrefixDescriptor = new TagHelperDescriptor( - tagName: "input", - typeName: "InputWildCardAttribute", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: new[] { "nodashprefix*" }); - var catchAllDescriptor = new TagHelperDescriptor( - tagName: TagHelperDescriptorProvider.ElementCatchAllTarget, - typeName: "CatchAllTagHelper", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: new[] { "class" }); - var catchAllDescriptor2 = new TagHelperDescriptor( - tagName: TagHelperDescriptorProvider.ElementCatchAllTarget, - typeName: "CatchAllTagHelper", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: new[] { "custom", "class" }); - var catchAllWildcardPrefixDescriptor = new TagHelperDescriptor( - tagName: TagHelperDescriptorProvider.ElementCatchAllTarget, - typeName: "CatchAllWildCardAttribute", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: new[] { "prefix-*" }); + var divDescriptor = new TagHelperDescriptor + { + TagName = "div", + TypeName = "DivTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "style" } + }; + var inputDescriptor = new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "class", "style" } + }; + var inputWildcardPrefixDescriptor = new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputWildCardAttribute", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "nodashprefix*" } + }; + var catchAllDescriptor = new TagHelperDescriptor + { + TagName = TagHelperDescriptorProvider.ElementCatchAllTarget, + TypeName = "CatchAllTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "class" } + }; + var catchAllDescriptor2 = new TagHelperDescriptor + { + TagName = TagHelperDescriptorProvider.ElementCatchAllTarget, + TypeName = "CatchAllTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "custom", "class" } + }; + var catchAllWildcardPrefixDescriptor = new TagHelperDescriptor + { + TagName = TagHelperDescriptorProvider.ElementCatchAllTarget, + TypeName = "CatchAllWildCardAttribute", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "prefix-*" } + }; var defaultAvailableDescriptors = new[] { divDescriptor, inputDescriptor, catchAllDescriptor, catchAllDescriptor2 }; var defaultWildcardDescriptors = @@ -256,8 +262,18 @@ namespace Microsoft.AspNet.Razor.TagHelpers public void GetDescriptors_ReturnsNothingForUnregisteredTags() { // Arrange - var divDescriptor = new TagHelperDescriptor("div", "foo1", "SomeAssembly"); - var spanDescriptor = new TagHelperDescriptor("span", "foo2", "SomeAssembly"); + var divDescriptor = new TagHelperDescriptor + { + TagName = "div", + TypeName = "foo1", + AssemblyName = "SomeAssembly", + }; + var spanDescriptor = new TagHelperDescriptor + { + TagName = "span", + TypeName = "foo2", + AssemblyName = "SomeAssembly", + }; var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); @@ -272,12 +288,24 @@ namespace Microsoft.AspNet.Razor.TagHelpers public void GetDescriptors_ReturnsCatchAllsWithEveryTagName() { // Arrange - var divDescriptor = new TagHelperDescriptor("div", "foo1", "SomeAssembly"); - var spanDescriptor = new TagHelperDescriptor("span", "foo2", "SomeAssembly"); - var catchAllDescriptor = new TagHelperDescriptor( - TagHelperDescriptorProvider.ElementCatchAllTarget, - "foo3", - "SomeAssembly"); + var divDescriptor = new TagHelperDescriptor + { + TagName = "div", + TypeName = "foo1", + AssemblyName = "SomeAssembly", + }; + var spanDescriptor = new TagHelperDescriptor + { + TagName = "span", + TypeName = "foo2", + AssemblyName = "SomeAssembly", + }; + var catchAllDescriptor = new TagHelperDescriptor + { + TagName = TagHelperDescriptorProvider.ElementCatchAllTarget, + TypeName = "foo3", + AssemblyName = "SomeAssembly", + }; var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor, catchAllDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); @@ -301,7 +329,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers public void GetDescriptors_DuplicateDescriptorsAreNotPartOfTagHelperDescriptorPool() { // Arrange - var divDescriptor = new TagHelperDescriptor("div", "foo1", "SomeAssembly"); + var divDescriptor = new TagHelperDescriptor + { + TagName = "div", + TypeName = "foo1", + AssemblyName = "SomeAssembly", + }; var descriptors = new TagHelperDescriptor[] { divDescriptor, divDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); @@ -315,16 +348,13 @@ namespace Microsoft.AspNet.Razor.TagHelpers private static TagHelperDescriptor CreatePrefixedDescriptor(string prefix, string tagName, string typeName) { - return new TagHelperDescriptor( - prefix, - tagName, - typeName, - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null); + return new TagHelperDescriptor + { + Prefix = prefix, + TagName = tagName, + TypeName = typeName, + AssemblyName = "SomeAssembly" + }; } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorTest.cs b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorTest.cs index a677fb3c6e..00498e8010 100644 --- a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperDescriptorTest.cs @@ -16,21 +16,21 @@ namespace Microsoft.AspNet.Razor.TagHelpers public void TagHelperDescriptor_CanBeSerialized() { // Arrange - var descriptor = new TagHelperDescriptor( - prefix: "prefix:", - tagName: "tag name", - typeName: "type name", - assemblyName: "assembly name", - attributes: Enumerable.Empty(), - requiredAttributes: new[] { "required attribute one", "required attribute two" }, - allowedChildren: new[] { "allowed child one" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: new TagHelperDesignTimeDescriptor + var descriptor = new TagHelperDescriptor + { + Prefix = "prefix:", + TagName = "tag name", + TypeName = "type name", + AssemblyName = "assembly name", + RequiredAttributes = new[] { "required attribute one", "required attribute two" }, + AllowedChildren = new[] { "allowed child one" }, + DesignTimeDescriptor = new TagHelperDesignTimeDescriptor { Summary = "usage summary", Remarks = "usage remarks", OutputElementHint = "some-tag" - }); + } + }; var expectedSerializedDescriptor = $"{{\"{ nameof(TagHelperDescriptor.Prefix) }\":\"prefix:\"," + @@ -59,30 +59,30 @@ namespace Microsoft.AspNet.Razor.TagHelpers public void TagHelperDescriptor_WithAttributes_CanBeSerialized() { // Arrange - var descriptor = new TagHelperDescriptor( - prefix: "prefix:", - tagName: "tag name", - typeName: "type name", - assemblyName: "assembly name", - attributes: new[] + var descriptor = new TagHelperDescriptor + { + Prefix = "prefix:", + TagName = "tag name", + TypeName = "type name", + AssemblyName = "assembly name", + Attributes = new[] { - new TagHelperAttributeDescriptor( - name: "attribute one", - propertyName: "property name", - typeName: "property type name", - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "attribute two", - propertyName: "property name", - typeName: typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "attribute one", + PropertyName = "property name", + TypeName = "property type name" + }, + new TagHelperAttributeDescriptor + { + Name = "attribute two", + PropertyName = "property name", + TypeName = typeof(string).FullName + }, }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.NormalOrSelfClosing, - designTimeDescriptor: null); + TagStructure = TagStructure.NormalOrSelfClosing + }; + var expectedSerializedDescriptor = $"{{\"{ nameof(TagHelperDescriptor.Prefix) }\":\"prefix:\"," + $"\"{ nameof(TagHelperDescriptor.TagName) }\":\"tag name\"," + @@ -118,30 +118,32 @@ namespace Microsoft.AspNet.Razor.TagHelpers public void TagHelperDescriptor_WithIndexerAttributes_CanBeSerialized() { // Arrange - var descriptor = new TagHelperDescriptor( - prefix: "prefix:", - tagName: "tag name", - typeName: "type name", - assemblyName: "assembly name", - attributes: new[] + var descriptor = new TagHelperDescriptor + { + Prefix = "prefix:", + TagName = "tag name", + TypeName = "type name", + AssemblyName = "assembly name", + Attributes = new[] { - new TagHelperAttributeDescriptor( - name: "attribute one", - propertyName: "property name", - typeName: "property type name", - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "attribute two", - propertyName: "property name", - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "attribute one", + PropertyName = "property name", + TypeName = "property type name", + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "attribute two", + PropertyName = "property name", + TypeName = typeof(string).FullName, + IsIndexer = true + }, }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "allowed child one", "allowed child two" }, - tagStructure: default(TagStructure), - designTimeDescriptor: null); + AllowedChildren = new[] { "allowed child one", "allowed child two" } + }; + var expectedSerializedDescriptor = $"{{\"{ nameof(TagHelperDescriptor.Prefix) }\":\"prefix:\"," + $"\"{ nameof(TagHelperDescriptor.TagName) }\":\"tag name\"," + @@ -192,21 +194,21 @@ namespace Microsoft.AspNet.Razor.TagHelpers $"\"{ nameof(TagHelperDesignTimeDescriptor.Summary) }\":\"usage summary\"," + $"\"{ nameof(TagHelperDesignTimeDescriptor.Remarks) }\":\"usage remarks\"," + $"\"{ nameof(TagHelperDesignTimeDescriptor.OutputElementHint) }\":\"some-tag\"}}}}"; - var expectedDescriptor = new TagHelperDescriptor( - prefix: "prefix:", - tagName: "tag name", - typeName: "type name", - assemblyName: "assembly name", - attributes: Enumerable.Empty(), - requiredAttributes: new[] { "required attribute one", "required attribute two" }, - allowedChildren: new[] { "allowed child one", "allowed child two" }, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: new TagHelperDesignTimeDescriptor + var expectedDescriptor = new TagHelperDescriptor + { + Prefix = "prefix:", + TagName = "tag name", + TypeName = "type name", + AssemblyName = "assembly name", + RequiredAttributes = new[] { "required attribute one", "required attribute two" }, + AllowedChildren = new[] { "allowed child one", "allowed child two" }, + DesignTimeDescriptor = new TagHelperDesignTimeDescriptor { Summary = "usage summary", Remarks = "usage remarks", OutputElementHint = "some-tag" - }); + } + }; // Act var descriptor = JsonConvert.DeserializeObject(serializedDescriptor); @@ -253,30 +255,29 @@ namespace Microsoft.AspNet.Razor.TagHelpers $"\"{ nameof(TagHelperDescriptor.AllowedChildren) }\":null," + $"\"{nameof(TagHelperDescriptor.TagStructure)}\":0," + $"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null}}"; - var expectedDescriptor = new TagHelperDescriptor( - prefix: "prefix:", - tagName: "tag name", - typeName: "type name", - assemblyName: "assembly name", - attributes: new[] + var expectedDescriptor = new TagHelperDescriptor + { + Prefix = "prefix:", + TagName = "tag name", + TypeName = "type name", + AssemblyName = "assembly name", + Attributes = new[] { - new TagHelperAttributeDescriptor( - name: "attribute one", - propertyName: "property name", - typeName: "property type name", - isIndexer: false, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "attribute two", - propertyName: "property name", - typeName: typeof(string).FullName, - isIndexer: false, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "attribute one", + PropertyName = "property name", + TypeName = "property type name" + }, + new TagHelperAttributeDescriptor + { + Name = "attribute two", + PropertyName = "property name", + TypeName = typeof(string).FullName + }, }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null); + AllowedChildren = new[] { "allowed child one", "allowed child two" } + }; // Act var descriptor = JsonConvert.DeserializeObject(serializedDescriptor); @@ -288,32 +289,7 @@ namespace Microsoft.AspNet.Razor.TagHelpers Assert.Equal(expectedDescriptor.FullTagName, descriptor.FullTagName, StringComparer.Ordinal); Assert.Equal(expectedDescriptor.TypeName, descriptor.TypeName, StringComparer.Ordinal); Assert.Equal(expectedDescriptor.AssemblyName, descriptor.AssemblyName, StringComparer.Ordinal); - - Assert.Equal(2, descriptor.Attributes.Count); - Assert.Equal(expectedDescriptor.Attributes[0].IsIndexer, descriptor.Attributes[0].IsIndexer); - Assert.Equal(expectedDescriptor.Attributes[0].IsStringProperty, descriptor.Attributes[0].IsStringProperty); - Assert.Equal(expectedDescriptor.Attributes[0].Name, descriptor.Attributes[0].Name, StringComparer.Ordinal); - Assert.Equal( - expectedDescriptor.Attributes[0].PropertyName, - descriptor.Attributes[0].PropertyName, - StringComparer.Ordinal); - Assert.Equal( - expectedDescriptor.Attributes[0].TypeName, - descriptor.Attributes[0].TypeName, - StringComparer.Ordinal); - - Assert.Equal(expectedDescriptor.Attributes[1].IsIndexer, descriptor.Attributes[1].IsIndexer); - Assert.Equal(expectedDescriptor.Attributes[1].IsStringProperty, descriptor.Attributes[1].IsStringProperty); - Assert.Equal(expectedDescriptor.Attributes[1].Name, descriptor.Attributes[1].Name, StringComparer.Ordinal); - Assert.Equal( - expectedDescriptor.Attributes[1].PropertyName, - descriptor.Attributes[1].PropertyName, - StringComparer.Ordinal); - Assert.Equal( - expectedDescriptor.Attributes[1].TypeName, - descriptor.Attributes[1].TypeName, - StringComparer.Ordinal); - + Assert.Equal(expectedDescriptor.Attributes, descriptor.Attributes, TagHelperAttributeDescriptorComparer.Default); Assert.Empty(descriptor.RequiredAttributes); } @@ -344,30 +320,31 @@ namespace Microsoft.AspNet.Razor.TagHelpers $"\"{ nameof(TagHelperDescriptor.AllowedChildren) }\":null," + $"\"{nameof(TagHelperDescriptor.TagStructure)}\":1," + $"\"{ nameof(TagHelperDescriptor.DesignTimeDescriptor) }\":null}}"; - var expectedDescriptor = new TagHelperDescriptor( - prefix: "prefix:", - tagName: "tag name", - typeName: "type name", - assemblyName: "assembly name", - attributes: new[] + var expectedDescriptor = new TagHelperDescriptor + { + Prefix = "prefix:", + TagName = "tag name", + TypeName = "type name", + AssemblyName = "assembly name", + Attributes = new[] { - new TagHelperAttributeDescriptor( - name: "attribute one", - propertyName: "property name", - typeName: "property type name", - isIndexer: true, - designTimeDescriptor: null), - new TagHelperAttributeDescriptor( - name: "attribute two", - propertyName: "property name", - typeName: typeof(string).FullName, - isIndexer: true, - designTimeDescriptor: null), + new TagHelperAttributeDescriptor + { + Name = "attribute one", + PropertyName = "property name", + TypeName = "property type name", + IsIndexer = true + }, + new TagHelperAttributeDescriptor + { + Name = "attribute two", + PropertyName = "property name", + TypeName = typeof(string).FullName, + IsIndexer = true + } }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.NormalOrSelfClosing, - designTimeDescriptor: null); + TagStructure = TagStructure.NormalOrSelfClosing + }; // Act var descriptor = JsonConvert.DeserializeObject(serializedDescriptor); @@ -379,32 +356,7 @@ namespace Microsoft.AspNet.Razor.TagHelpers Assert.Equal(expectedDescriptor.FullTagName, descriptor.FullTagName, StringComparer.Ordinal); Assert.Equal(expectedDescriptor.TypeName, descriptor.TypeName, StringComparer.Ordinal); Assert.Equal(expectedDescriptor.AssemblyName, descriptor.AssemblyName, StringComparer.Ordinal); - - Assert.Equal(2, descriptor.Attributes.Count); - Assert.Equal(expectedDescriptor.Attributes[0].IsIndexer, descriptor.Attributes[0].IsIndexer); - Assert.Equal(expectedDescriptor.Attributes[0].IsStringProperty, descriptor.Attributes[0].IsStringProperty); - Assert.Equal(expectedDescriptor.Attributes[0].Name, descriptor.Attributes[0].Name, StringComparer.Ordinal); - Assert.Equal( - expectedDescriptor.Attributes[0].PropertyName, - descriptor.Attributes[0].PropertyName, - StringComparer.Ordinal); - Assert.Equal( - expectedDescriptor.Attributes[0].TypeName, - descriptor.Attributes[0].TypeName, - StringComparer.Ordinal); - - Assert.Equal(expectedDescriptor.Attributes[1].IsIndexer, descriptor.Attributes[1].IsIndexer); - Assert.Equal(expectedDescriptor.Attributes[1].IsStringProperty, descriptor.Attributes[1].IsStringProperty); - Assert.Equal(expectedDescriptor.Attributes[1].Name, descriptor.Attributes[1].Name, StringComparer.Ordinal); - Assert.Equal( - expectedDescriptor.Attributes[1].PropertyName, - descriptor.Attributes[1].PropertyName, - StringComparer.Ordinal); - Assert.Equal( - expectedDescriptor.Attributes[1].TypeName, - descriptor.Attributes[1].TypeName, - StringComparer.Ordinal); - + Assert.Equal(expectedDescriptor.Attributes, descriptor.Attributes, TagHelperAttributeDescriptorComparer.Default); Assert.Empty(descriptor.RequiredAttributes); } } diff --git a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperParseTreeRewriterTest.cs b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperParseTreeRewriterTest.cs index 705d2c26b0..62b899c3b3 100644 --- a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperParseTreeRewriterTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperParseTreeRewriterTest.cs @@ -56,16 +56,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers factory.Markup(Environment.NewLine))); var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: "PTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "br" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper", + AssemblyName = "SomeAssembly", + AllowedChildren = new[] { "br" }, + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -105,16 +102,14 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers blockFactory.MarkupTagBlock(""))); var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "strong", - typeName: "StrongTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "required" }, - allowedChildren: new[] { "br" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), + new TagHelperDescriptor + { + TagName = "strong", + TypeName = "StrongTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "required" }, + AllowedChildren = new[] { "br" } + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -135,46 +130,32 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers new MarkupTagHelperBlock("br", TagMode.StartTagOnly))); var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: "PTagHelper1", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "strong", "br" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: "PTagHelper2", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "strong", - typeName: "StrongTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - 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(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null), + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper1", + AssemblyName = "SomeAssembly", + AllowedChildren = new[] { "strong", "br" } + }, + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper2", + AssemblyName = "SomeAssembly" + }, + new TagHelperDescriptor + { + TagName = "strong", + TypeName = "StrongTagHelper", + AssemblyName = "SomeAssembly" + }, + new TagHelperDescriptor + { + TagName = "br", + TypeName = "BRTagHelper", + AssemblyName = "SomeAssembly", + TagStructure = TagStructure.WithoutEndTag + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -195,46 +176,33 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers new MarkupTagHelperBlock("br", TagMode.StartTagOnly))); var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: "PTagHelper1", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "strong" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: "PTagHelper2", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: new[] { "br" }, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "strong", - typeName: "StrongTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - 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(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null), + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper1", + AssemblyName = "SomeAssembly", + AllowedChildren = new[] { "strong" } + }, + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper2", + AssemblyName = "SomeAssembly", + AllowedChildren = new[] { "br" } + }, + new TagHelperDescriptor + { + TagName = "strong", + TypeName = "StrongTagHelper", + AssemblyName = "SomeAssembly" + }, + new TagHelperDescriptor + { + TagName = "br", + TypeName = "BRTagHelper", + AssemblyName = "SomeAssembly", + TagStructure = TagStructure.WithoutEndTag + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -426,36 +394,27 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers // Arrange var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "p", - typeName: "PTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: allowedChildren, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "strong", - typeName: "StrongTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: allowedChildren, - tagStructure: TagStructure.Unspecified, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "br", - typeName: "BRTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null), + new TagHelperDescriptor + { + TagName = "p", + TypeName = "PTagHelper", + AssemblyName = "SomeAssembly", + AllowedChildren = allowedChildren + }, + new TagHelperDescriptor + { + TagName = "strong", + TypeName = "StrongTagHelper", + AssemblyName = "SomeAssembly", + AllowedChildren = allowedChildren + }, + new TagHelperDescriptor + { + TagName = "br", + TypeName = "BRTagHelper", + AssemblyName = "SomeAssembly", + TagStructure = TagStructure.WithoutEndTag + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -471,16 +430,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers var expectedOutput = new MarkupBlock(new MarkupTagHelperBlock("input", TagMode.StartTagOnly)); var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null) + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + TagStructure = TagStructure.WithoutEndTag + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -507,16 +463,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers var expectedOutput = new MarkupBlock(blockFactory.MarkupTagBlock("")); var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: "InputTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null) + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper", + AssemblyName = "SomeAssembly", + TagStructure = TagStructure.WithoutEndTag + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -544,26 +497,20 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers var expectedOutput = new MarkupBlock(new MarkupTagHelperBlock("input", TagMode.StartTagOnly)); var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: "InputTagHelper1", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.WithoutEndTag, - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: string.Empty, - tagName: "input", - typeName: "InputTagHelper2", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: TagStructure.NormalOrSelfClosing, - designTimeDescriptor: null) + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper1", + AssemblyName = "SomeAssembly", + TagStructure = TagStructure.WithoutEndTag + }, + new TagHelperDescriptor + { + TagName = "input", + TypeName = "InputTagHelper2", + AssemblyName = "SomeAssembly", + TagStructure = TagStructure.NormalOrSelfClosing + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -975,24 +922,27 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers // Arrange var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - tagName: "p", - typeName: "pTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "class" }), - new TagHelperDescriptor( - tagName: "div", - typeName: "divTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "class", "style" }), - new TagHelperDescriptor( - tagName: "*", - typeName: "catchAllTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "catchAll" }) + new TagHelperDescriptor + { + TagName = "p", + TypeName = "pTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "class" } + }, + new TagHelperDescriptor + { + TagName = "div", + TypeName = "divTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "class", "style" } + }, + new TagHelperDescriptor + { + TagName = "*", + TypeName = "catchAllTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "catchAll" } + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -1235,18 +1185,20 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers // Arrange var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - tagName: "p", - typeName: "pTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "class" }), - new TagHelperDescriptor( - tagName: "*", - typeName: "catchAllTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "catchAll" }) + new TagHelperDescriptor + { + TagName = "p", + TypeName = "pTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "class" } + }, + new TagHelperDescriptor + { + TagName = "*", + TypeName = "catchAllTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "catchAll" } + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -1443,12 +1395,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers // Arrange var descriptors = new TagHelperDescriptor[] { - new TagHelperDescriptor( - tagName: "p", - typeName: "pTagHelper", - assemblyName: "SomeAssembly", - attributes: new TagHelperAttributeDescriptor[0], - requiredAttributes: new[] { "class" }) + new TagHelperDescriptor + { + TagName = "p", + TypeName = "pTagHelper", + AssemblyName = "SomeAssembly", + RequiredAttributes = new[] { "class" } + } }; var descriptorProvider = new TagHelperDescriptorProvider(descriptors); @@ -1464,78 +1417,65 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers var blockFactory = new BlockFactory(factory); var availableDescriptorsColon = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: "th:", - tagName: "myth", - typeName: "mythTagHelper", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: "th:", - tagName: "myth2", - typeName: "mythTagHelper2", - assemblyName: "SomeAssembly", - attributes: new [] + new TagHelperDescriptor + { + Prefix = "th:", + TagName = "myth", + TypeName = "mythTagHelper", + AssemblyName = "SomeAssembly" + }, + new TagHelperDescriptor + { + Prefix = "th:", + TagName = "myth2", + TypeName = "mythTagHelper2", + AssemblyName = "SomeAssembly", + Attributes = new [] { - new TagHelperAttributeDescriptor( - name: "bound", - propertyName: "Bound", - typeName: typeof(bool).FullName, - isIndexer: false, - designTimeDescriptor: null), - }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "bound", + PropertyName = "Bound", + TypeName = typeof(bool).FullName + } + } + } }; var availableDescriptorsText = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: "PREFIX", - tagName: "myth", - typeName: "mythTagHelper", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null), - new TagHelperDescriptor( - prefix: "PREFIX", - tagName: "myth2", - typeName: "mythTagHelper2", - assemblyName: "SomeAssembly", - attributes: new [] + new TagHelperDescriptor + { + Prefix = "PREFIX", + TagName = "myth", + TypeName = "mythTagHelper", + AssemblyName = "SomeAssembly" + }, + new TagHelperDescriptor + { + Prefix = "PREFIX", + TagName = "myth2", + TypeName = "mythTagHelper2", + AssemblyName = "SomeAssembly", + Attributes = new [] { - new TagHelperAttributeDescriptor( - name: "bound", - propertyName: "Bound", - typeName: typeof(bool).FullName, - isIndexer: false, - designTimeDescriptor: null), - }, - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null) + new TagHelperAttributeDescriptor + { + Name = "bound", + PropertyName = "Bound", + TypeName = typeof(bool).FullName + }, + } + } }; var availableDescriptorsCatchAll = new TagHelperDescriptor[] { - new TagHelperDescriptor( - prefix: "myth", - tagName: "*", - typeName: "mythTagHelper", - assemblyName: "SomeAssembly", - attributes: Enumerable.Empty(), - requiredAttributes: Enumerable.Empty(), - allowedChildren: null, - tagStructure: default(TagStructure), - designTimeDescriptor: null), + new TagHelperDescriptor + { + Prefix = "myth", + TagName = "*", + TypeName = "mythTagHelper", + AssemblyName = "SomeAssembly" + } }; // documentContent, expectedOutput, availableDescriptors diff --git a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperRewritingTestBase.cs b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperRewritingTestBase.cs index f0a4db8fc8..d796459d90 100644 --- a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperRewritingTestBase.cs +++ b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperRewritingTestBase.cs @@ -44,7 +44,12 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers foreach (var tagName in tagNames) { descriptors.Add( - new TagHelperDescriptor(tagName, tagName + "taghelper", "SomeAssembly")); + new TagHelperDescriptor + { + TagName = tagName, + TypeName = tagName + "taghelper", + AssemblyName = "SomeAssembly" + }); } return new TagHelperDescriptorProvider(descriptors);