Change '?' in add and remove TagHelper to mean 1 character.

- Modified tests to account for new behavior of the '?' character in @addtaghelper and @removetaghelper.

#297
This commit is contained in:
N. Taylor Mullen 2015-02-16 14:55:15 -08:00
parent 1dd54e4331
commit f53b6bb0e3
7 changed files with 84 additions and 10 deletions

View File

@ -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);

View File

@ -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<string, IEnumerable<Type>>
{
{ 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<string, IEnumerable<Type>>
{
{ 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<string, IEnumerable<Type>>
{
{ 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<string, IEnumerable<Type>>
{
{ assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } },
{ assemblyB, new [] { stringType } },
},
new []
{
new TagHelperDirectiveDescriptor("?i?crosoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
new TagHelperDirectiveDescriptor("??ystem.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper),
}
},
};
}
}

View File

@ -12,7 +12,7 @@ namespace TestOutput
string __tagHelperDirectiveSyntaxHelper = null;
__tagHelperDirectiveSyntaxHelper =
#line 1 "AddTagHelperDirective.cshtml"
"something, nice"
"**??**??*, nice"
#line default
#line hidden

View File

@ -13,7 +13,7 @@ namespace TestOutput
string __tagHelperDirectiveSyntaxHelper = null;
__tagHelperDirectiveSyntaxHelper =
#line 1 "ComplexTagHelpers.cshtml"
"something, nice"
"T?g??lpe*, nice"
#line default
#line hidden

View File

@ -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;

View File

@ -1 +1 @@
@addTagHelper "something, nice"
@addTagHelper "**??**??*, nice"

View File

@ -1,4 +1,4 @@
@addTagHelper "something, nice"
@addTagHelper "T?g??lpe*, nice"
@if (true)
{