Removed extra IVT from `Microsoft.AspNet.Razor`.

- Added tests to validate `IsStringProperty` on `TagHelperAttributeDescriptor`s.

#464
This commit is contained in:
N. Taylor Mullen 2015-07-28 10:42:42 -07:00
parent e722f90481
commit 3b5692a5a5
6 changed files with 344 additions and 262 deletions

View File

@ -30,6 +30,7 @@ namespace Microsoft.AspNet.Razor.Test.Internal
string.Equals(descriptorX.Name, descriptorY.Name, StringComparison.Ordinal) &&
string.Equals(descriptorX.PropertyName, descriptorY.PropertyName, StringComparison.Ordinal) &&
string.Equals(descriptorX.TypeName, descriptorY.TypeName, StringComparison.Ordinal) &&
descriptorX.IsStringProperty == descriptorY.IsStringProperty &&
TagHelperAttributeDesignTimeDescriptorComparer.Default.Equals(
descriptorX.DesignTimeDescriptor,
descriptorY.DesignTimeDescriptor);
@ -37,13 +38,12 @@ namespace Microsoft.AspNet.Razor.Test.Internal
public int GetHashCode(TagHelperAttributeDescriptor descriptor)
{
// Ignore IsStringProperty because it is directly inferred from TypeName and thus won't vary the hash
// bucket.
return HashCodeCombiner.Start()
.Add(descriptor.IsIndexer)
.Add(descriptor.Name, StringComparer.Ordinal)
.Add(descriptor.PropertyName, StringComparer.Ordinal)
.Add(descriptor.TypeName, StringComparer.Ordinal)
.Add(descriptor.IsStringProperty)
.Add(TagHelperAttributeDesignTimeDescriptorComparer.Default.GetHashCode(
descriptor.DesignTimeDescriptor))
.CombinedHash;

View File

@ -5,5 +5,4 @@ using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Microsoft.AspNet.Razor.Test")]
[assembly: InternalsVisibleTo("Microsoft.AspNet.Razor.Runtime.Test")]
[assembly: AssemblyMetadata("Serviceable", "True")]

View File

@ -114,19 +114,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
true,
new[]
{
new TagHelperDescriptor(
tagName: "inherited-editor-browsable",
typeName: typeof(InheritedEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(InheritedEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
CreateTagHelperDescriptor(
tagName: "inherited-editor-browsable",
typeName: typeof(InheritedEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(InheritedEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
}
},
{ typeof(EditorBrowsableTagHelper), true, new TagHelperDescriptor[0] },
@ -135,19 +135,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
false,
new[]
{
new TagHelperDescriptor(
tagName: "editor-browsable",
typeName: typeof(EditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(EditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
CreateTagHelperDescriptor(
tagName: "editor-browsable",
typeName: typeof(EditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(EditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
}
},
{
@ -155,11 +155,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
true,
new[]
{
new TagHelperDescriptor(
tagName: "hidden-property-editor-browsable",
typeName: typeof(HiddenPropertyEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new TagHelperAttributeDescriptor[0])
CreateTagHelperDescriptor(
tagName: "hidden-property-editor-browsable",
typeName: typeof(HiddenPropertyEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new TagHelperAttributeDescriptor[0])
}
},
{
@ -167,19 +167,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
false,
new[]
{
new TagHelperDescriptor(
tagName: "hidden-property-editor-browsable",
typeName: typeof(HiddenPropertyEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(HiddenPropertyEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
CreateTagHelperDescriptor(
tagName: "hidden-property-editor-browsable",
typeName: typeof(HiddenPropertyEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(HiddenPropertyEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
}
},
{
@ -187,7 +187,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
true,
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
tagName: "overridden-editor-browsable",
typeName: typeof(OverriddenEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
@ -207,7 +207,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
true,
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
tagName: "multi-property-editor-browsable",
typeName: typeof(MultiPropertyEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
@ -227,7 +227,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
false,
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
tagName: "multi-property-editor-browsable",
typeName: typeof(MultiPropertyEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
@ -253,7 +253,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
true,
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
tagName: "overridden-property-editor-browsable",
typeName: typeof(OverriddenPropertyEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
@ -265,7 +265,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
false,
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
tagName: "overridden-property-editor-browsable",
typeName: typeof(OverriddenPropertyEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
@ -292,19 +292,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
true,
new[]
{
new TagHelperDescriptor(
tagName: "default-editor-browsable",
typeName: typeof(DefaultEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(DefaultEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
CreateTagHelperDescriptor(
tagName: "default-editor-browsable",
typeName: typeof(DefaultEditorBrowsableTagHelper).FullName,
assemblyName: AssemblyName,
attributes: new[]
{
new TagHelperAttributeDescriptor(
name: "property",
propertyName: nameof(DefaultEditorBrowsableTagHelper.Property),
typeName: typeof(int).FullName,
isIndexer: false,
designTimeDescriptor: null)
})
}
},
{ typeof(MultiEditorBrowsableTagHelper), true, new TagHelperDescriptor[0] }
@ -347,7 +347,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(AttributeTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
TagHelperDescriptorProvider.ElementCatchAllTarget,
typeof(AttributeTargetingTagHelper).FullName,
AssemblyName,
@ -359,7 +359,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultiAttributeTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
TagHelperDescriptorProvider.ElementCatchAllTarget,
typeof(MultiAttributeTargetingTagHelper).FullName,
AssemblyName,
@ -371,13 +371,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultiAttributeAttributeTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
TagHelperDescriptorProvider.ElementCatchAllTarget,
typeof(MultiAttributeAttributeTargetingTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "custom" }),
new TagHelperDescriptor(
CreateTagHelperDescriptor(
TagHelperDescriptorProvider.ElementCatchAllTarget,
typeof(MultiAttributeAttributeTargetingTagHelper).FullName,
AssemblyName,
@ -389,7 +389,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(InheritedAttributeTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
TagHelperDescriptorProvider.ElementCatchAllTarget,
typeof(InheritedAttributeTargetingTagHelper).FullName,
AssemblyName,
@ -401,7 +401,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(RequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"input",
typeof(RequiredAttributeTagHelper).FullName,
AssemblyName,
@ -413,7 +413,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(InheritedRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"div",
typeof(InheritedRequiredAttributeTagHelper).FullName,
AssemblyName,
@ -425,13 +425,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultiAttributeRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"div",
typeof(MultiAttributeRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class" }),
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"input",
typeof(MultiAttributeRequiredAttributeTagHelper).FullName,
AssemblyName,
@ -443,13 +443,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultiAttributeSameTagRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"input",
typeof(MultiAttributeSameTagRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "style" }),
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"input",
typeof(MultiAttributeSameTagRequiredAttributeTagHelper).FullName,
AssemblyName,
@ -461,7 +461,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultiRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"input",
typeof(MultiRequiredAttributeTagHelper).FullName,
AssemblyName,
@ -473,13 +473,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultiTagMultiRequiredAttributeTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"div",
typeof(MultiTagMultiRequiredAttributeTagHelper).FullName,
AssemblyName,
attributes,
requiredAttributes: new[] { "class", "style" }),
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"input",
typeof(MultiTagMultiRequiredAttributeTagHelper).FullName,
AssemblyName,
@ -491,7 +491,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(AttributeWildcardTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
TagHelperDescriptorProvider.ElementCatchAllTarget,
typeof(AttributeWildcardTargetingTagHelper).FullName,
AssemblyName,
@ -503,7 +503,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(MultiAttributeWildcardTargetingTagHelper),
new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
TagHelperDescriptorProvider.ElementCatchAllTarget,
typeof(MultiAttributeWildcardTargetingTagHelper).FullName,
AssemblyName,
@ -599,14 +599,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(OverriddenAttributeTagHelper.ValidAttribute2));
var expectedDescriptors = new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"overridden-attribute",
typeof(OverriddenAttributeTagHelper).FullName,
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor("SomethingElse", validProperty1),
new TagHelperAttributeDescriptor("Something-Else", validProperty2)
CreateTagHelperAttributeDescriptor("SomethingElse", validProperty1),
CreateTagHelperAttributeDescriptor("Something-Else", validProperty2)
})
};
@ -633,14 +633,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(InheritedOverriddenAttributeTagHelper.ValidAttribute2));
var expectedDescriptors = new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"inherited-overridden-attribute",
typeof(InheritedOverriddenAttributeTagHelper).FullName,
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor("valid-attribute1", validProperty1),
new TagHelperAttributeDescriptor("Something-Else", validProperty2)
CreateTagHelperAttributeDescriptor("valid-attribute1", validProperty1),
CreateTagHelperAttributeDescriptor("Something-Else", validProperty2)
})
};
@ -667,14 +667,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(InheritedNotOverriddenAttributeTagHelper.ValidAttribute2));
var expectedDescriptors = new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"inherited-not-overridden-attribute",
typeof(InheritedNotOverriddenAttributeTagHelper).FullName,
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor("SomethingElse", validProperty1),
new TagHelperAttributeDescriptor("Something-Else", validProperty2)
CreateTagHelperAttributeDescriptor("SomethingElse", validProperty1),
CreateTagHelperAttributeDescriptor("Something-Else", validProperty2)
})
};
@ -697,7 +697,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var errorSink = new ErrorSink();
var objectAssemblyName = typeof(object).GetTypeInfo().Assembly.GetName().Name;
var expectedDescriptor =
new TagHelperDescriptor("object", "System.Object", objectAssemblyName);
CreateTagHelperDescriptor("object", "System.Object", objectAssemblyName);
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(
@ -717,9 +717,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{
// Arrange
var errorSink = new ErrorSink();
// Also confirm isStringProperty is calculated correctly.
var expectedDescriptor = new TagHelperDescriptor(
var expectedDescriptor = CreateTagHelperDescriptor(
"inherited-single-attribute",
typeof(InheritedSingleAttributeTagHelper).FullName,
AssemblyName,
@ -730,7 +728,6 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(InheritedSingleAttributeTagHelper.IntAttribute),
typeof(int).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null)
});
@ -753,13 +750,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Arrange
var errorSink = new ErrorSink();
var intProperty = typeof(SingleAttributeTagHelper).GetProperty(nameof(SingleAttributeTagHelper.IntAttribute));
var expectedDescriptor = new TagHelperDescriptor(
var expectedDescriptor = CreateTagHelperDescriptor(
"single-attribute",
typeof(SingleAttributeTagHelper).FullName,
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor("int-attribute", intProperty)
CreateTagHelperAttributeDescriptor("int-attribute", intProperty)
});
// Act
@ -782,13 +779,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var errorSink = new ErrorSink();
var validProperty = typeof(MissingAccessorTagHelper).GetProperty(
nameof(MissingAccessorTagHelper.ValidAttribute));
var expectedDescriptor = new TagHelperDescriptor(
var expectedDescriptor = CreateTagHelperDescriptor(
"missing-accessor",
typeof(MissingAccessorTagHelper).FullName,
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor("valid-attribute", validProperty)
CreateTagHelperAttributeDescriptor("valid-attribute", validProperty)
});
// Act
@ -811,13 +808,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var errorSink = new ErrorSink();
var validProperty = typeof(NonPublicAccessorTagHelper).GetProperty(
nameof(NonPublicAccessorTagHelper.ValidAttribute));
var expectedDescriptor = new TagHelperDescriptor(
var expectedDescriptor = CreateTagHelperDescriptor(
"non-public-accessor",
typeof(NonPublicAccessorTagHelper).FullName,
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor("valid-attribute", validProperty)
CreateTagHelperAttributeDescriptor("valid-attribute", validProperty)
});
// Act
@ -838,9 +835,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{
// Arrange
var errorSink = new ErrorSink();
// Also confirm isStringProperty is calculated correctly.
var expectedDescriptor = new TagHelperDescriptor(
var expectedDescriptor = CreateTagHelperDescriptor(
"not-bound-attribute",
typeof(NotBoundAttributeTagHelper).FullName,
AssemblyName,
@ -851,7 +846,6 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(NotBoundAttributeTagHelper.BoundProperty),
typeof(object).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null)
});
@ -891,11 +885,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{
// Arrange
var errorSink = new ErrorSink();
// Also confirm isStringProperty is calculated correctly.
var expectedDescriptors = new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"div",
typeof(MultiTagTagHelper).FullName,
AssemblyName,
@ -906,10 +898,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(MultiTagTagHelper.ValidAttribute),
typeof(string).FullName,
isIndexer: false,
isStringProperty: true,
designTimeDescriptor: null)
}),
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"p",
typeof(MultiTagTagHelper).FullName,
AssemblyName,
@ -920,7 +911,6 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
nameof(MultiTagTagHelper.ValidAttribute),
typeof(string).FullName,
isIndexer: false,
isStringProperty: true,
designTimeDescriptor: null)
})
};
@ -948,13 +938,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Arrange
var errorSink = new ErrorSink();
var validProp = typeof(InheritedMultiTagTagHelper).GetProperty(nameof(InheritedMultiTagTagHelper.ValidAttribute));
var expectedDescriptor = new TagHelperDescriptor(
var expectedDescriptor = CreateTagHelperDescriptor(
"inherited-multi-tag",
typeof(InheritedMultiTagTagHelper).FullName,
AssemblyName,
new[]
{
new TagHelperAttributeDescriptor("valid-attribute", validProp)
CreateTagHelperAttributeDescriptor("valid-attribute", validProp)
});
// Act
@ -977,11 +967,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var errorSink = new ErrorSink();
var expectedDescriptors = new[]
{
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"div",
typeof(DuplicateTagNameTagHelper).FullName,
AssemblyName),
new TagHelperDescriptor(
CreateTagHelperDescriptor(
"p",
typeof(DuplicateTagNameTagHelper).FullName,
AssemblyName)
@ -1011,9 +1001,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var errorSink = new ErrorSink();
var expectedDescriptors = new[]
{
new TagHelperDescriptor("data-condition",
typeof(OverrideNameTagHelper).FullName,
AssemblyName),
CreateTagHelperDescriptor(
"data-condition",
typeof(OverrideNameTagHelper).FullName,
AssemblyName),
};
// Act
@ -1141,7 +1132,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(InvalidBoundAttributeWithValid),
new[]
{
new TagHelperAttributeDescriptor(
CreateTagHelperAttributeDescriptor(
"int-attribute",
typeof(InvalidBoundAttributeWithValid)
.GetProperty(nameof(InvalidBoundAttributeWithValid.IntAttribute)))
@ -1159,7 +1150,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
typeof(OverriddenInvalidBoundAttributeWithValid),
new[]
{
new TagHelperAttributeDescriptor(
CreateTagHelperAttributeDescriptor(
"valid-something",
typeof(OverriddenInvalidBoundAttributeWithValid)
.GetProperty(nameof(OverriddenInvalidBoundAttributeWithValid.DataSomething)))
@ -1253,14 +1244,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
propertyName: nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(IDictionary<string, string>).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "dictionary-property-",
propertyName: nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(string).FullName,
isIndexer: true,
isStringProperty: true,
designTimeDescriptor: null),
},
new string[0]
@ -1274,14 +1263,12 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
propertyName: nameof(SingleValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(IDictionary<string, string>).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name-",
propertyName: nameof(SingleValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(string).FullName,
isIndexer: true,
isStringProperty: true,
designTimeDescriptor: null),
},
new string[0]
@ -1295,91 +1282,78 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(Dictionary<string, object>).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name2",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty),
typeName: typeof(DictionarySubclass).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name3",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty),
typeName: typeof(DictionaryWithoutParameterlessConstructor).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name4",
propertyName: nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty),
typeName: typeof(GenericDictionarySubclass<object>).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name5",
propertyName: nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty),
typeName: typeof(SortedDictionary<string, int>).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-name6",
propertyName: nameof(MultipleValidHtmlAttributePrefix.StringProperty),
typeName: typeof(string).FullName,
isIndexer: false,
isStringProperty: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix1-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty),
typeName: typeof(object).FullName,
isIndexer: true,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix2-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty),
typeName: typeof(string).FullName,
isIndexer: true,
isStringProperty: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix3-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty),
typeName: typeof(string).FullName,
isIndexer: true,
isStringProperty: true,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix4-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty),
typeName: typeof(object).FullName,
isIndexer: true,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix5-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty),
typeName: typeof(int).FullName,
isIndexer: true,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "get-only-dictionary-property-",
propertyName: nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryProperty),
typeName: typeof(int).FullName,
isIndexer: true,
isStringProperty: false,
designTimeDescriptor: null),
new TagHelperAttributeDescriptor(
name: "valid-prefix6",
propertyName: nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributePrefix),
typeName: typeof(string).FullName,
isIndexer: true,
isStringProperty: true,
designTimeDescriptor: null),
},
new string[0]
@ -1403,7 +1377,6 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
propertyName: nameof(MultipleInvalidHtmlAttributePrefix.LongProperty),
typeName: typeof(long).FullName,
isIndexer: false,
isStringProperty: false,
designTimeDescriptor: null),
},
new[]
@ -1883,6 +1856,35 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
return data;
}
private static TagHelperDescriptor CreateTagHelperDescriptor(
string tagName,
string typeName,
string assemblyName,
IEnumerable<TagHelperAttributeDescriptor> attributes = null,
IEnumerable<string> requiredAttributes = null)
{
return new TagHelperDescriptor(
prefix: string.Empty,
tagName: tagName,
typeName: typeName,
assemblyName: assemblyName,
attributes: attributes ?? Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: requiredAttributes ?? Enumerable.Empty<string>(),
designTimeDescriptor: null);
}
private static TagHelperAttributeDescriptor CreateTagHelperAttributeDescriptor(
string name,
PropertyInfo propertyInfo)
{
return new TagHelperAttributeDescriptor(
name,
propertyInfo.Name,
propertyInfo.PropertyType.FullName,
isIndexer: false,
designTimeDescriptor: null);
}
[EditorBrowsable(EditorBrowsableState.Always)]
private class DefaultEditorBrowsableTagHelper : TagHelper
{

View File

@ -25,9 +25,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{
get
{
return new TagHelperDescriptor("valid_plain",
Valid_PlainTagHelperType.FullName,
AssemblyName);
return new TagHelperDescriptor(
prefix: string.Empty,
tagName: "valid_plain",
typeName: Valid_PlainTagHelperType.FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
designTimeDescriptor: null);
}
}
@ -35,9 +40,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{
get
{
return new TagHelperDescriptor("valid_inherited",
Valid_InheritedTagHelperType.FullName,
AssemblyName);
return new TagHelperDescriptor(
prefix: string.Empty,
tagName: "valid_inherited",
typeName: Valid_InheritedTagHelperType.FullName,
assemblyName: AssemblyName,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
designTimeDescriptor: null);
}
}
@ -365,8 +375,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor("", TagHelperDirectiveType.TagHelperPrefix),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("", TagHelperDirectiveType.TagHelperPrefix),
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -376,8 +386,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix),
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -387,10 +397,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix)
CreateTagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix)
},
new [] { CreatePrefixedValidPlainDescriptor("th:") }
},
@ -398,8 +408,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix)
},
new []
{
@ -411,11 +421,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor("th-", TagHelperDirectiveType.TagHelperPrefix),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("th-", TagHelperDirectiveType.TagHelperPrefix),
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*Inherited*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper)
},
@ -429,11 +439,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor("", TagHelperDirectiveType.TagHelperPrefix),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("", TagHelperDirectiveType.TagHelperPrefix),
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*Inherited*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper)
},
@ -443,13 +453,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*Inherited*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix)
CreateTagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix)
},
new []
{
@ -461,11 +471,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor("th", TagHelperDirectiveType.TagHelperPrefix),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("th", TagHelperDirectiveType.TagHelperPrefix),
CreateTagHelperDirectiveDescriptor(
"*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*, " + assemblyB,
TagHelperDirectiveType.AddTagHelper),
},
@ -480,11 +490,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
defaultAssemblyLookups,
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("th:-", TagHelperDirectiveType.TagHelperPrefix),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("th:-", TagHelperDirectiveType.TagHelperPrefix),
CreateTagHelperDirectiveDescriptor(
"*, " + assemblyB,
TagHelperDirectiveType.AddTagHelper),
},
@ -534,7 +544,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Arrange
var tagHelperDescriptorResolver = new AssemblyCheckingTagHelperDescriptorResolver();
var context = new TagHelperDescriptorResolutionContext(
new[] { new TagHelperDirectiveDescriptor(lookupText, TagHelperDirectiveType.AddTagHelper) },
new[] { CreateTagHelperDirectiveDescriptor(lookupText, TagHelperDirectiveType.AddTagHelper) },
new ErrorSink());
// Act
@ -556,9 +566,14 @@ 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("string",
"System.String",
assemblyB);
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "string",
typeName: "System.String",
assemblyName: assemblyB,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
designTimeDescriptor: null);
return new TheoryData<Dictionary<string, IEnumerable<Type>>, // descriptorAssemblyLookups
IEnumerable<TagHelperDirectiveDescriptor>, // directiveDescriptors
@ -571,7 +586,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
},
new [] { Valid_PlainTagHelperDescriptor }
},
@ -583,8 +598,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper)
},
new [] { Valid_PlainTagHelperDescriptor, stringTagHelperDescriptor }
},
@ -596,8 +611,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
},
new [] { Valid_PlainTagHelperDescriptor }
},
@ -609,9 +624,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
},
new [] { stringTagHelperDescriptor }
},
@ -622,10 +637,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
Valid_PlainTagHelperType.FullName + ", " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
},
new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor }
},
@ -636,8 +651,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor(
Valid_PlainTagHelperType.FullName + ", " + assemblyA,
TagHelperDirectiveType.RemoveTagHelper)
},
@ -650,11 +665,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor(
Valid_PlainTagHelperType.FullName + ", " + assemblyA,
TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
},
new [] { Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor }
},
@ -665,8 +680,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
},
new [] { Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor }
},
@ -677,7 +692,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
Valid_PlainTagHelperType.Namespace + ".Valid_Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -690,7 +705,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
Valid_PlainTagHelperType.Namespace + ".Valid?Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -703,7 +718,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -716,7 +731,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*Plain?*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -729,7 +744,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
Valid_PlainTagHelperType.Namespace + "*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -742,7 +757,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*_*lain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -755,7 +770,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*?*l?in*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -768,7 +783,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*" + Valid_PlainTagHelperType.FullName + "*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -781,7 +796,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*" + Valid_PlainTagHelperType.FullName + "*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
@ -794,8 +809,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor(
"*_*la*, " + assemblyA,
TagHelperDirectiveType.RemoveTagHelper)
},
@ -808,11 +823,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
},
new [] { Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor }
},
@ -823,11 +838,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor(
"?*Plain*?, " + assemblyA,
TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper)
},
new [] { Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor }
},
@ -839,8 +854,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*ring, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*ring, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
},
new [] { Valid_PlainTagHelperDescriptor }
},
@ -852,8 +867,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("?*?, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*?r?n?, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("?*?, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*?r?n?, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
},
new [] { Valid_PlainTagHelperDescriptor }
},
@ -865,8 +880,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("?*TagHelper, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("?" + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.AddTagHelper)
CreateTagHelperDirectiveDescriptor("?*TagHelper, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("?" + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.AddTagHelper)
},
new [] { Valid_PlainTagHelperDescriptor }
},
@ -878,9 +893,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("Microsoft.*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("Microsoft.*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
},
new [] { stringTagHelperDescriptor }
},
@ -892,9 +907,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*????*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*?, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("Microsoft?*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*????*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*?, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("Microsoft?*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
},
new [] { stringTagHelperDescriptor }
},
@ -906,13 +921,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"?Microsoft*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"?" + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
},
new []
@ -930,13 +945,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
"Microsoft*TagHelper?, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor(
CreateTagHelperDirectiveDescriptor(
stringType.FullName + "?, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
},
new []
@ -986,9 +1001,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var assemblyB = stringType.GetTypeInfo().Assembly.GetName().Name;
var stringTagHelperDescriptor =
new TagHelperDescriptor("string",
"System.String",
assemblyB);
new TagHelperDescriptor(
prefix: string.Empty,
tagName: "string",
typeName: "System.String",
assemblyName: assemblyB,
attributes: Enumerable.Empty<TagHelperAttributeDescriptor>(),
requiredAttributes: Enumerable.Empty<string>(),
designTimeDescriptor: null);
return new TheoryData<Dictionary<string, IEnumerable<Type>>, // descriptorAssemblyLookups
IEnumerable<TagHelperDirectiveDescriptor>> // directiveDescriptors
@ -1000,8 +1020,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
}
},
{
@ -1011,9 +1031,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(Valid_PlainTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor(Valid_InheritedTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor(Valid_PlainTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor(Valid_InheritedTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
}
},
{
@ -1024,10 +1044,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
}
},
{
@ -1038,19 +1058,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor(Valid_PlainTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor(Valid_InheritedTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor(stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor(Valid_PlainTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor(Valid_InheritedTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor(stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
}
},
{
new Dictionary<string, IEnumerable<Type>>(),
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor(Valid_PlainTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor(Valid_PlainTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
}
},
{
@ -1060,8 +1080,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*TagHelper, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*TagHelper, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
}
},
{
@ -1071,8 +1091,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*TagHelpe?, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*TagHelpe?, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
}
},
{
@ -1082,9 +1102,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("*_*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*Plain*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor("*_*Inhe*ed*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("*_*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*Plain*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor("*_*Inhe*ed*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper)
}
},
{
@ -1095,10 +1115,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("Microsoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("System.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*Helper, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor("System.*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("Microsoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("System.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*Helper, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor("System.*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
}
},
{
@ -1109,10 +1129,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("?icrosoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("?ystem.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("*?????r, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
new TagHelperDirectiveDescriptor("Sy??em.*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
CreateTagHelperDirectiveDescriptor("?icrosoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("?ystem.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("*?????r, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper),
CreateTagHelperDirectiveDescriptor("Sy??em.*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper)
}
},
{
@ -1123,8 +1143,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
},
new []
{
new TagHelperDirectiveDescriptor("?i?crosoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("??ystem.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("?i?crosoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor("??ystem.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
}
},
};
@ -1402,6 +1422,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
assemblyName: stringType.GetTypeInfo().Assembly.GetName().Name);
}
private static TagHelperDirectiveDescriptor CreateTagHelperDirectiveDescriptor(
string directiveText,
TagHelperDirectiveType directiveType)
{
return new TagHelperDirectiveDescriptor(directiveText, SourceLocation.Zero, directiveType);
}
private class TestTagHelperDescriptorResolver : TagHelperDescriptorResolver
{
public TestTagHelperDescriptorResolver(TagHelperTypeResolver typeResolver)
@ -1415,7 +1442,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
new TagHelperDescriptorResolutionContext(
lookupTexts.Select(
lookupText =>
new TagHelperDirectiveDescriptor(lookupText, TagHelperDirectiveType.AddTagHelper)),
CreateTagHelperDirectiveDescriptor(lookupText, TagHelperDirectiveType.AddTagHelper)),
new ErrorSink()));
}
}

View File

@ -7,6 +7,10 @@
"type": "build"
},
"Microsoft.AspNet.Testing": "1.0.0-*",
"Microsoft.Framework.HashCodeCombiner.Sources": {
"type": "build",
"version": "1.0.0-*"
},
"Microsoft.Framework.WebEncoders.Testing": "1.0.0-*",
"xunit.runner.aspnet": "2.0.0-aspnet-*"
},

View File

@ -0,0 +1,50 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using Microsoft.AspNet.Razor.TagHelpers;
using Xunit;
namespace Microsoft.AspNet.Razor.Test.TagHelpers
{
public class TagHelperAttributeDescriptorTest
{
public static TheoryData IsStringPropertyData
{
get
{
// attributeType, isIndexer, expectedIsStringProperty
return new TheoryData<Type, bool, bool>
{
{ typeof(int), false, false },
{ typeof(string), false, true },
{ typeof(string), true, true },
{ typeof(object), false, false },
{ typeof(IEnumerable<string>), false, false },
{ typeof(IDictionary<string, string>), false, false },
{ typeof(IDictionary<string, string>), true, false },
};
}
}
[Theory]
[MemberData(nameof(IsStringPropertyData))]
public void TagHelperAttributeDescriptor_IsStringPropertySetCorrectly(
Type attributeType,
bool isIndexer,
bool expectedIsStringProperty)
{
// Arrange
var attributeDescriptor = new TagHelperAttributeDescriptor(
"someAttribute",
"someProperty",
attributeType.FullName,
isIndexer,
designTimeDescriptor: null);
// Assert
Assert.Equal(expectedIsStringProperty, attributeDescriptor.IsStringProperty);
}
}
}