Changes for tag helper precompilation with tests

This commit is contained in:
Pranav K 2015-02-19 20:20:04 -08:00
parent 2ad1f937ce
commit ffb388ab62
5 changed files with 69 additions and 35 deletions

View File

@ -31,14 +31,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
/// <summary> /// <summary>
/// Creates a <see cref="TagHelperDescriptor"/> from the given <paramref name="type"/>. /// Creates a <see cref="TagHelperDescriptor"/> from the given <paramref name="type"/>.
/// </summary> /// </summary>
/// <param name="assemblyName">The assembly name that contains <paramref name="type"/>.</param>
/// <param name="type">The type to create a <see cref="TagHelperDescriptor"/> from.</param> /// <param name="type">The type to create a <see cref="TagHelperDescriptor"/> from.</param>
/// <returns>A <see cref="TagHelperDescriptor"/> that describes the given <paramref name="type"/>.</returns> /// <returns>A <see cref="TagHelperDescriptor"/> that describes the given <paramref name="type"/>.</returns>
public static IEnumerable<TagHelperDescriptor> CreateDescriptors(Type type) public static IEnumerable<TagHelperDescriptor> CreateDescriptors(string assemblyName, Type type)
{ {
var tagNames = GetTagNames(type); var tagNames = GetTagNames(type);
var typeName = type.FullName; var typeName = type.FullName;
var attributeDescriptors = GetAttributeDescriptors(type); var attributeDescriptors = GetAttributeDescriptors(type);
var assemblyName = type.GetTypeInfo().Assembly.GetName().Name;
return tagNames.Select(tagName => return tagNames.Select(tagName =>
new TagHelperDescriptor(tagName, new TagHelperDescriptor(tagName,

View File

@ -26,18 +26,23 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
private readonly TagHelperTypeResolver _typeResolver; private readonly TagHelperTypeResolver _typeResolver;
// internal for testing
internal TagHelperDescriptorResolver(TagHelperTypeResolver typeResolver)
{
_typeResolver = typeResolver;
}
/// <summary> /// <summary>
/// Instantiates a new instance of the <see cref="TagHelperDescriptorResolver"/> class. /// Instantiates a new instance of the <see cref="TagHelperDescriptorResolver"/> class.
/// </summary> /// </summary>
public TagHelperDescriptorResolver() public TagHelperDescriptorResolver()
: this(new TagHelperTypeResolver()) : this(new TagHelperTypeResolver())
{ {
}
/// <summary>
/// Instantiates a new instance of <see cref="TagHelperDescriptorResolver"/> class with the
/// specified <paramref name="typeResolver"/>.
/// </summary>
/// <param name="typeResolver">The <see cref="TagHelperTypeResolver"/>.</param>
public TagHelperDescriptorResolver(TagHelperTypeResolver typeResolver)
{
_typeResolver = typeResolver;
} }
/// <inheritdoc /> /// <inheritdoc />
@ -112,7 +117,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var tagHelperTypes = _typeResolver.Resolve(assemblyName, documentLocation, errorSink); var tagHelperTypes = _typeResolver.Resolve(assemblyName, documentLocation, errorSink);
// Convert types to TagHelperDescriptors // Convert types to TagHelperDescriptors
var descriptors = tagHelperTypes.SelectMany(TagHelperDescriptorFactory.CreateDescriptors); var descriptors = tagHelperTypes.SelectMany(
type => TagHelperDescriptorFactory.CreateDescriptors(assemblyName, type));
return descriptors; return descriptors;
} }

View File

@ -115,7 +115,7 @@ namespace Microsoft.AspNet.Razor
/// <summary> /// <summary>
/// The <see cref="ITagHelperDescriptorResolver"/> used to resolve <see cref="TagHelperDescriptor"/>s. /// The <see cref="ITagHelperDescriptorResolver"/> used to resolve <see cref="TagHelperDescriptor"/>s.
/// </summary> /// </summary>
public virtual ITagHelperDescriptorResolver TagHelperDescriptorResolver { get; protected set; } public virtual ITagHelperDescriptorResolver TagHelperDescriptorResolver { get; set; }
/// <summary> /// <summary>
/// Boolean indicating if instrumentation code should be injected into the output page /// Boolean indicating if instrumentation code should be injected into the output page

View File

@ -40,7 +40,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
string expectedAttributeName) string expectedAttributeName)
{ {
// Arrange & Act // Arrange & Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(tagHelperType); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName, tagHelperType);
// Assert // Assert
var descriptor = Assert.Single(descriptors); var descriptor = Assert.Single(descriptors);
@ -69,7 +69,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}; };
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(OverriddenAttributeTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(OverriddenAttributeTagHelper));
// Assert // Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default); Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -96,7 +97,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}; };
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(InheritedOverriddenAttributeTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(InheritedOverriddenAttributeTagHelper));
// Assert // Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default); Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -122,7 +124,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}; };
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(InheritedNotOverriddenAttributeTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(InheritedNotOverriddenAttributeTagHelper));
// Assert // Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default); Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -137,7 +140,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
new TagHelperDescriptor("object", "System.Object", objectAssemblyName); new TagHelperDescriptor("object", "System.Object", objectAssemblyName);
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(object)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(objectAssemblyName, typeof(object));
// Assert // Assert
var descriptor = Assert.Single(descriptors); var descriptor = Assert.Single(descriptors);
@ -159,7 +162,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}); });
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(InheritedSingleAttributeTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(InheritedSingleAttributeTagHelper));
// Assert // Assert
var descriptor = Assert.Single(descriptors); var descriptor = Assert.Single(descriptors);
@ -180,7 +184,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}); });
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(SingleAttributeTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(SingleAttributeTagHelper));
// Assert // Assert
var descriptor = Assert.Single(descriptors); var descriptor = Assert.Single(descriptors);
@ -202,7 +207,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}); });
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(MissingAccessorTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(MissingAccessorTagHelper));
// Assert // Assert
var descriptor = Assert.Single(descriptors); var descriptor = Assert.Single(descriptors);
@ -225,7 +231,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}); });
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(PrivateAccessorTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(PrivateAccessorTagHelper));
// Assert // Assert
var descriptor = Assert.Single(descriptors); var descriptor = Assert.Single(descriptors);
@ -255,7 +262,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}; };
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(MultiTagTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName, typeof(MultiTagTagHelper));
// Assert // Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default); Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -275,7 +282,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}); });
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(InheritedMultiTagTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(InheritedMultiTagTagHelper));
// Assert // Assert
var descriptor = Assert.Single(descriptors); var descriptor = Assert.Single(descriptors);
@ -298,7 +306,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}; };
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(DuplicateTagNameTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(DuplicateTagNameTagHelper));
// Assert // Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default); Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -315,7 +324,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}; };
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(OverrideNameTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(OverrideNameTagHelper));
// Assert // Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default); Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -341,7 +351,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}; };
// Act // Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(MultipleAttributeTagHelper)); var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(MultipleAttributeTagHelper));
// Assert // Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default); Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);

View File

@ -689,24 +689,38 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
Assert.Empty(descriptors); Assert.Empty(descriptors);
} }
public static TheoryData<string> DescriptorResolver_IgnoresSpacesData
{
get
{
var typeName = typeof(Valid_PlainTagHelper).FullName;
return new TheoryData<string>
{
$"{typeName},{AssemblyName}",
$" {typeName},{AssemblyName}",
$"{typeName} ,{AssemblyName}",
$" {typeName} ,{AssemblyName}",
$"{typeName}, {AssemblyName}",
$"{typeName},{AssemblyName} ",
$"{typeName}, {AssemblyName} ",
$" {typeName}, {AssemblyName} ",
$" {typeName} , {AssemblyName} "
};
}
}
[Theory] [Theory]
[InlineData("Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper,MyAssembly")] [MemberData(nameof(DescriptorResolver_IgnoresSpacesData))]
[InlineData(" Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper,MyAssembly")]
[InlineData("Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper ,MyAssembly")]
[InlineData(" Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper ,MyAssembly")]
[InlineData("Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper, MyAssembly")]
[InlineData("Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper,MyAssembly ")]
[InlineData("Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper, MyAssembly ")]
[InlineData(" Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper, MyAssembly ")]
[InlineData(" Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper , MyAssembly ")]
public void DescriptorResolver_IgnoresSpaces(string lookupText) public void DescriptorResolver_IgnoresSpaces(string lookupText)
{ {
// Arrange // Arrange
var invoked = false;
var tagHelperTypeResolver = new TestTagHelperTypeResolver(TestableTagHelpers) var tagHelperTypeResolver = new TestTagHelperTypeResolver(TestableTagHelpers)
{ {
OnGetExportedTypes = (assemblyName) => OnGetExportedTypes = (assemblyName) =>
{ {
Assert.Equal("MyAssembly", assemblyName.Name); Assert.Equal(AssemblyName, assemblyName.Name);
invoked = true;
} }
}; };
var tagHelperDescriptorResolver = new TestTagHelperDescriptorResolver(tagHelperTypeResolver); var tagHelperDescriptorResolver = new TestTagHelperDescriptorResolver(tagHelperTypeResolver);
@ -715,7 +729,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var descriptors = tagHelperDescriptorResolver.Resolve(lookupText); var descriptors = tagHelperDescriptorResolver.Resolve(lookupText);
// Assert // Assert
Assert.Empty(descriptors); Assert.True(invoked);
var descriptor = Assert.Single(descriptors);
Assert.Equal(AssemblyName, descriptor.AssemblyName);
Assert.Equal(typeof(Valid_PlainTagHelper).FullName, descriptor.TypeName);
} }
[Fact] [Fact]