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>
/// Creates a <see cref="TagHelperDescriptor"/> from the given <paramref name="type"/>.
/// </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>
/// <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 typeName = type.FullName;
var attributeDescriptors = GetAttributeDescriptors(type);
var assemblyName = type.GetTypeInfo().Assembly.GetName().Name;
return tagNames.Select(tagName =>
new TagHelperDescriptor(tagName,

View File

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

View File

@ -115,7 +115,7 @@ namespace Microsoft.AspNet.Razor
/// <summary>
/// The <see cref="ITagHelperDescriptorResolver"/> used to resolve <see cref="TagHelperDescriptor"/>s.
/// </summary>
public virtual ITagHelperDescriptorResolver TagHelperDescriptorResolver { get; protected set; }
public virtual ITagHelperDescriptorResolver TagHelperDescriptorResolver { get; set; }
/// <summary>
/// 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)
{
// Arrange & Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(tagHelperType);
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName, tagHelperType);
// Assert
var descriptor = Assert.Single(descriptors);
@ -69,7 +69,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
};
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(OverriddenAttributeTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(OverriddenAttributeTagHelper));
// Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -96,7 +97,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
};
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(InheritedOverriddenAttributeTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(InheritedOverriddenAttributeTagHelper));
// Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -122,7 +124,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
};
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(InheritedNotOverriddenAttributeTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(InheritedNotOverriddenAttributeTagHelper));
// Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -137,7 +140,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
new TagHelperDescriptor("object", "System.Object", objectAssemblyName);
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(object));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(objectAssemblyName, typeof(object));
// Assert
var descriptor = Assert.Single(descriptors);
@ -159,7 +162,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
});
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(InheritedSingleAttributeTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(InheritedSingleAttributeTagHelper));
// Assert
var descriptor = Assert.Single(descriptors);
@ -180,7 +184,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
});
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(SingleAttributeTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(SingleAttributeTagHelper));
// Assert
var descriptor = Assert.Single(descriptors);
@ -202,7 +207,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
});
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(MissingAccessorTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(MissingAccessorTagHelper));
// Assert
var descriptor = Assert.Single(descriptors);
@ -225,7 +231,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
});
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(PrivateAccessorTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(PrivateAccessorTagHelper));
// Assert
var descriptor = Assert.Single(descriptors);
@ -255,7 +262,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
};
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(MultiTagTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName, typeof(MultiTagTagHelper));
// Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -275,7 +282,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
});
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(InheritedMultiTagTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(InheritedMultiTagTagHelper));
// Assert
var descriptor = Assert.Single(descriptors);
@ -298,7 +306,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
};
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(DuplicateTagNameTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(DuplicateTagNameTagHelper));
// Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -315,7 +324,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
};
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(OverrideNameTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(OverrideNameTagHelper));
// Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);
@ -341,7 +351,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
};
// Act
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(typeof(MultipleAttributeTagHelper));
var descriptors = TagHelperDescriptorFactory.CreateDescriptors(AssemblyName,
typeof(MultipleAttributeTagHelper));
// Assert
Assert.Equal(expectedDescriptors, descriptors, CompleteTagHelperDescriptorComparer.Default);

View File

@ -689,24 +689,38 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
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]
[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 ")]
[InlineData(" Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_PlainTagHelper , MyAssembly ")]
[MemberData(nameof(DescriptorResolver_IgnoresSpacesData))]
public void DescriptorResolver_IgnoresSpaces(string lookupText)
{
// Arrange
var invoked = false;
var tagHelperTypeResolver = new TestTagHelperTypeResolver(TestableTagHelpers)
{
OnGetExportedTypes = (assemblyName) =>
{
Assert.Equal("MyAssembly", assemblyName.Name);
Assert.Equal(AssemblyName, assemblyName.Name);
invoked = true;
}
};
var tagHelperDescriptorResolver = new TestTagHelperDescriptorResolver(tagHelperTypeResolver);
@ -715,7 +729,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
var descriptors = tagHelperDescriptorResolver.Resolve(lookupText);
// 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]