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>
|
/// <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,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue