Changes for tag helper precompilation with tests
This commit is contained in:
parent
2ad1f937ce
commit
ffb388ab62
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Reference in New Issue