diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs index dfead0abe5..8ddacf76cc 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs @@ -129,7 +129,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers // We surround the escaped with ^ and $ in order ot ensure a regex match matches the entire // string. We also replace any '*' or '?' characters with regex to match appropriate content. - var pattern = "^" + escaped.Replace(@"\?", ".?").Replace(@"\*", ".*?") + "$"; + // '*' matches 0 or more characters lazily and '?' matches 1 character. + var pattern = "^" + escaped.Replace(@"\?", ".").Replace(@"\*", ".*?") + "$"; var regex = new Regex(pattern, RegexOptions.Singleline); return regex.IsMatch(descriptor.TypeName); diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs index 2ab5d05d8e..92c5c33e0d 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs @@ -297,7 +297,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers new [] { new TagHelperDirectiveDescriptor( - "?*?" + Valid_PlainTagHelperType.FullName + "?*?, " + assemblyA, + "*" + Valid_PlainTagHelperType.FullName + "*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), }, new [] { Valid_PlainTagHelperDescriptor } @@ -368,7 +368,20 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers new [] { new TagHelperDirectiveDescriptor("?*?, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - new TagHelperDirectiveDescriptor("*?rin?g?, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + new TagHelperDirectiveDescriptor("*?r?n?, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + }, + new [] { Valid_PlainTagHelperDescriptor } + }, + { + new Dictionary> + { + { assemblyA, new [] { Valid_PlainTagHelperType } }, + { assemblyB, new [] { stringType } } + }, + new [] + { + new TagHelperDirectiveDescriptor("?*TagHelper, " + assemblyA, TagHelperDirectiveType.AddTagHelper), + new TagHelperDirectiveDescriptor("?" + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.AddTagHelper) }, new [] { Valid_PlainTagHelperDescriptor } }, @@ -400,6 +413,54 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers }, new [] { stringTagHelperDescriptor } }, + { + new Dictionary> + { + { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, + { assemblyB, new [] { stringType } } + }, + new [] + { + new TagHelperDirectiveDescriptor( + "*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), + new TagHelperDirectiveDescriptor( + "*, " + assemblyB, TagHelperDirectiveType.AddTagHelper), + new TagHelperDirectiveDescriptor( + "?Microsoft*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), + new TagHelperDirectiveDescriptor( + "?" + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + }, + new [] + { + Valid_InheritedTagHelperDescriptor, + Valid_PlainTagHelperDescriptor, + stringTagHelperDescriptor + } + }, + { + new Dictionary> + { + { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, + { assemblyB, new [] { stringType } } + }, + new [] + { + new TagHelperDirectiveDescriptor( + "*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), + new TagHelperDirectiveDescriptor( + "*, " + assemblyB, TagHelperDirectiveType.AddTagHelper), + new TagHelperDirectiveDescriptor( + "Microsoft*TagHelper?, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), + new TagHelperDirectiveDescriptor( + stringType.FullName + "?, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + }, + new [] + { + Valid_InheritedTagHelperDescriptor, + Valid_PlainTagHelperDescriptor, + stringTagHelperDescriptor + } + }, }; } } @@ -566,9 +627,21 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers new TagHelperDirectiveDescriptor("?icrosoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), new TagHelperDirectiveDescriptor("?ystem.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper), new TagHelperDirectiveDescriptor("*?????r, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), - new TagHelperDirectiveDescriptor("Sy????em.*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + new TagHelperDirectiveDescriptor("Sy??em.*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) } - } + }, + { + new Dictionary> + { + { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, + { assemblyB, new [] { stringType } }, + }, + new [] + { + new TagHelperDirectiveDescriptor("?i?crosoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), + new TagHelperDirectiveDescriptor("??ystem.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper), + } + }, }; } } diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/AddTagHelperDirective.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/AddTagHelperDirective.cs index eff598a35c..ead528b077 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/AddTagHelperDirective.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/AddTagHelperDirective.cs @@ -12,7 +12,7 @@ namespace TestOutput string __tagHelperDirectiveSyntaxHelper = null; __tagHelperDirectiveSyntaxHelper = #line 1 "AddTagHelperDirective.cshtml" - "something, nice" + "**??**??*, nice" #line default #line hidden diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ComplexTagHelpers.DesignTime.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ComplexTagHelpers.DesignTime.cs index 7028fae676..433d42d132 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ComplexTagHelpers.DesignTime.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ComplexTagHelpers.DesignTime.cs @@ -13,7 +13,7 @@ namespace TestOutput string __tagHelperDirectiveSyntaxHelper = null; __tagHelperDirectiveSyntaxHelper = #line 1 "ComplexTagHelpers.cshtml" - "something, nice" + "T?g??lpe*, nice" #line default #line hidden diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ComplexTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ComplexTagHelpers.cs index efec58f7e3..666e9cd9e6 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ComplexTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ComplexTagHelpers.cs @@ -1,4 +1,4 @@ -#pragma checksum "ComplexTagHelpers.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "34039b21327142e9261c7acb3bcd0a4365e0cfa2" +#pragma checksum "ComplexTagHelpers.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "184461ac3cd2d1747e4480d78478e69dbf800e65" namespace TestOutput { using Microsoft.AspNet.Razor.Runtime.TagHelpers; diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Source/AddTagHelperDirective.cshtml b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Source/AddTagHelperDirective.cshtml index 6bf1c74f0f..ec52e3df02 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Source/AddTagHelperDirective.cshtml +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Source/AddTagHelperDirective.cshtml @@ -1 +1 @@ -@addTagHelper "something, nice" \ No newline at end of file +@addTagHelper "**??**??*, nice" \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Source/ComplexTagHelpers.cshtml b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Source/ComplexTagHelpers.cshtml index 09b41777b1..5e8c08bfeb 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Source/ComplexTagHelpers.cshtml +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Source/ComplexTagHelpers.cshtml @@ -1,4 +1,4 @@ -@addTagHelper "something, nice" +@addTagHelper "T?g??lpe*, nice" @if (true) {