From ffb388ab628d561e3616e27e0ef4920e60ae04eb Mon Sep 17 00:00:00 2001 From: Pranav K Date: Thu, 19 Feb 2015 20:20:04 -0800 Subject: [PATCH] Changes for tag helper precompilation with tests --- .../TagHelpers/TagHelperDescriptorFactory.cs | 4 +- .../TagHelpers/TagHelperDescriptorResolver.cs | 20 ++++++---- src/Microsoft.AspNet.Razor/RazorEngineHost.cs | 2 +- .../TagHelperDescriptorFactoryTest.cs | 39 ++++++++++++------- .../TagHelperDescriptorResolverTest.cs | 39 +++++++++++++------ 5 files changed, 69 insertions(+), 35 deletions(-) diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorFactory.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorFactory.cs index 560c723a4a..0beb8d9955 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorFactory.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorFactory.cs @@ -31,14 +31,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// /// Creates a from the given . /// + /// The assembly name that contains . /// The type to create a from. /// A that describes the given . - public static IEnumerable CreateDescriptors(Type type) + public static IEnumerable 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, diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs index 8ddacf76cc..b053673d4a 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs @@ -26,18 +26,23 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers private readonly TagHelperTypeResolver _typeResolver; - // internal for testing - internal TagHelperDescriptorResolver(TagHelperTypeResolver typeResolver) - { - _typeResolver = typeResolver; - } - /// /// Instantiates a new instance of the class. /// public TagHelperDescriptorResolver() : this(new TagHelperTypeResolver()) { + + } + + /// + /// Instantiates a new instance of class with the + /// specified . + /// + /// The . + public TagHelperDescriptorResolver(TagHelperTypeResolver typeResolver) + { + _typeResolver = typeResolver; } /// @@ -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; } diff --git a/src/Microsoft.AspNet.Razor/RazorEngineHost.cs b/src/Microsoft.AspNet.Razor/RazorEngineHost.cs index ba5b501398..f73336cecc 100644 --- a/src/Microsoft.AspNet.Razor/RazorEngineHost.cs +++ b/src/Microsoft.AspNet.Razor/RazorEngineHost.cs @@ -115,7 +115,7 @@ namespace Microsoft.AspNet.Razor /// /// The used to resolve s. /// - public virtual ITagHelperDescriptorResolver TagHelperDescriptorResolver { get; protected set; } + public virtual ITagHelperDescriptorResolver TagHelperDescriptorResolver { get; set; } /// /// Boolean indicating if instrumentation code should be injected into the output page diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs index fa229c4bc4..4be74b02fa 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorFactoryTest.cs @@ -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); diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs index 92c5c33e0d..343ff89ddb 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs @@ -689,24 +689,38 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers Assert.Empty(descriptors); } + public static TheoryData DescriptorResolver_IgnoresSpacesData + { + get + { + var typeName = typeof(Valid_PlainTagHelper).FullName; + return new TheoryData + { + $"{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]