Correct an issue with codegen for taghelperprefix

The issue here is that when a taghelper prefix is in use it will be
including in the HTML output, when it should be chopped off.

See the diff in the codegen for examples.
This commit is contained in:
Ryan Nowak 2017-01-27 10:22:49 -08:00
parent d187edbd76
commit 2b2cf6efec
4 changed files with 53 additions and 4 deletions

View File

@ -390,9 +390,15 @@ namespace Microsoft.AspNetCore.Razor.Evolution
Source = BuildSourceSpanFromNode(block)
});
var tagName = tagHelperBlock.TagName;
if (tagHelperBlock.Descriptors.First().Prefix != null)
{
tagName = tagName.Substring(tagHelperBlock.Descriptors.First().Prefix.Length);
}
_builder.Push(new InitializeTagHelperStructureIRNode()
{
TagName = tagHelperBlock.TagName,
TagName = tagName,
TagMode = tagHelperBlock.TagMode
});
}

View File

@ -12,6 +12,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution
internal IReadOnlyList<LineMapping> LineMappings { get; set; }
internal IReadOnlyList<RazorError> Diagnostics { get; set; }
public IReadOnlyList<RazorError> Diagnostics { get; set; }
}
}

View File

@ -194,6 +194,49 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Intermediate
});
}
[Fact]
public void Lower_TagHelpers_WithPrefix()
{
// Arrange
var codeDocument = TestRazorCodeDocument.Create(@"@addTagHelper *, TestAssembly
@tagHelperPrefix cool:
<cool:span val=""@Hello World""></cool:span>");
var tagHelpers = new[]
{
new TagHelperDescriptor
{
TagName = "span",
TypeName = "SpanTagHelper",
AssemblyName = "TestAssembly",
}
};
// Act
var irDocument = Lower(codeDocument, tagHelpers: tagHelpers);
// Assert
Children(irDocument,
n => Checksum(n),
n => Using("System", n),
n => Using(typeof(Task).Namespace, n),
n => TagHelperFieldDeclaration(n, "SpanTagHelper"),
n =>
{
var tagHelperNode = Assert.IsType<TagHelperIRNode>(n);
Children(
tagHelperNode,
c => TagHelperStructure("span", TagMode.StartTagAndEndTag, c), // Note: this is span not cool:span
c => Assert.IsType<CreateTagHelperIRNode>(c),
c => TagHelperHtmlAttribute(
"val",
HtmlAttributeValueStyle.DoubleQuotes,
c,
v => CSharpAttributeValue(string.Empty, "Hello", v),
v => LiteralAttributeValue(" ", "World", v)),
c => Assert.IsType<ExecuteTagHelpersIRNode>(c));
});
}
[Fact]
public void Lower_TagHelper_InSection()
{

View File

@ -33,9 +33,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution.IntegrationTests.TestFiles
public async System.Threading.Tasks.Task ExecuteAsync()
{
WriteLiteral("\r\n<THSdiv class=\"randomNonTagHelperAttribute\">\r\n ");
__tagHelperExecutionContext = __tagHelperScopeManager.Begin("THSp", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.StartTagAndEndTag, "test", async() => {
__tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.StartTagAndEndTag, "test", async() => {
WriteLiteral("\r\n <p></p>\r\n <input type=\"text\">\r\n ");
__tagHelperExecutionContext = __tagHelperScopeManager.Begin("THSinput", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.StartTagOnly, "test", async() => {
__tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.StartTagOnly, "test", async() => {
}
);
__TestNamespace_InputTagHelper = CreateTagHelper<global::TestNamespace.InputTagHelper>();