Moved CreateTagHelperIRNode from renderer to writer

This commit is contained in:
Ajay Bhargav Baaskaran 2017-04-04 16:33:28 -07:00
parent 1a05359d12
commit 6fea6454f0
7 changed files with 85 additions and 31 deletions

View File

@ -206,6 +206,11 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
Context.TagHelperWriter.WriteInitializeTagHelperStructure(Context, node);
}
public override void VisitCreateTagHelper(CreateTagHelperIRNode node)
{
Context.TagHelperWriter.WriteCreateTagHelper(Context, node);
}
public override void VisitDefault(RazorIRNode node)
{
// This is a temporary bridge to the renderer, which allows us to move functionality piecemeal

View File

@ -204,18 +204,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
Context.Writer.WriteLine("))();");
}
public override void VisitCreateTagHelper(CreateTagHelperIRNode node)
{
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
Context.Writer
.WriteStartAssignment(tagHelperVariableName)
.WriteStartMethodInvocation(
"CreateTagHelper" /* ORIGINAL: CreateTagHelperMethodName */,
"global::" + node.TagHelperTypeName)
.WriteEndMethodInvocation();
}
public override void VisitSetTagHelperProperty(SetTagHelperPropertyIRNode node)
{
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);

View File

@ -8,6 +8,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
{
public class DesignTimeTagHelperWriter : TagHelperWriter
{
public string CreateTagHelperMethodName { get; set; } = "CreateTagHelper";
public override void WriteDeclareTagHelperFields(CSharpRenderingContext context, DeclareTagHelperFieldsIRNode node)
{
foreach (var tagHelperTypeName in node.UsedTagHelperTypeNames)
@ -29,7 +31,14 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
public override void WriteCreateTagHelper(CSharpRenderingContext context, CreateTagHelperIRNode node)
{
throw new NotImplementedException();
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
context.Writer
.WriteStartAssignment(tagHelperVariableName)
.WriteStartMethodInvocation(
CreateTagHelperMethodName,
"global::" + node.TagHelperTypeName)
.WriteEndMethodInvocation();
}
public override void WriteExecuteTagHelpers(CSharpRenderingContext context, ExecuteTagHelpersIRNode node)

View File

@ -255,23 +255,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
linePragmaScope?.Dispose();
}
public override void VisitCreateTagHelper(CreateTagHelperIRNode node)
{
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
Context.Writer
.WriteStartAssignment(tagHelperVariableName)
.WriteStartMethodInvocation(
"CreateTagHelper" /* ORIGINAL: CreateTagHelperMethodName */,
"global::" + node.TagHelperTypeName)
.WriteEndMethodInvocation();
Context.Writer.WriteInstanceMethodInvocation(
"__tagHelperExecutionContext" /* ORIGINAL: ExecutionContextVariableName */,
"Add" /* ORIGINAL: ExecutionContextAddMethodName */,
tagHelperVariableName);
}
public override void VisitAddPreallocatedTagHelperHtmlAttribute(AddPreallocatedTagHelperHtmlAttributeIRNode node)
{
Context.Writer

View File

@ -14,6 +14,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
public string ExecutionContextVariableName { get; set; } = "__tagHelperExecutionContext";
public string ExecutionContextAddMethodName { get; set; } = "Add";
public string RunnerTypeName { get; set; } = "global::Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner";
public string RunnerVariableName { get; set; } = "__tagHelperRunner";
@ -30,6 +32,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
public string TagModeTypeName { get; set; } = "global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode";
public string CreateTagHelperMethodName { get; set; } = "CreateTagHelper";
public override void WriteDeclareTagHelperFields(CSharpRenderingContext context, DeclareTagHelperFieldsIRNode node)
{
context.Writer.WriteLineHiddenDirective();
@ -116,7 +120,19 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
public override void WriteCreateTagHelper(CSharpRenderingContext context, CreateTagHelperIRNode node)
{
throw new NotImplementedException();
var tagHelperVariableName = GetTagHelperVariableName(node.TagHelperTypeName);
context.Writer
.WriteStartAssignment(tagHelperVariableName)
.WriteStartMethodInvocation(
CreateTagHelperMethodName,
"global::" + node.TagHelperTypeName)
.WriteEndMethodInvocation();
context.Writer.WriteInstanceMethodInvocation(
ExecutionContextVariableName,
ExecutionContextAddMethodName,
tagHelperVariableName);
}
public override void WriteExecuteTagHelpers(CSharpRenderingContext context, ExecuteTagHelpersIRNode node)

View File

@ -29,6 +29,32 @@ namespace Microsoft.AspNetCore.Razor.Evolution.CodeGeneration
Assert.Equal(
@"private global::PTagHelper __PTagHelper = null;
private global::MyTagHelper __MyTagHelper = null;
",
csharp,
ignoreLineEndingDifferences: true);
}
[Fact]
public void WriteCreateTagHelper_RendersCorrectly_UsesSpecifiedTagHelperType()
{
// Arrange
var writer = new DesignTimeTagHelperWriter();
var context = new CSharpRenderingContext()
{
Writer = new Legacy.CSharpCodeWriter(),
};
var node = new CreateTagHelperIRNode()
{
TagHelperTypeName = "TestNamespace.MyTagHelper"
};
// Act
writer.WriteCreateTagHelper(context, node);
// Assert
var csharp = context.Writer.Builder.ToString();
Assert.Equal(
@"__TestNamespace_MyTagHelper = CreateTagHelper<global::TestNamespace.MyTagHelper>();
",
csharp,
ignoreLineEndingDifferences: true);

View File

@ -119,6 +119,33 @@ private global::MyTagHelper __MyTagHelper = null;
@"__tagHelperExecutionContext = __tagHelperScopeManager.Begin(""p"", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.SelfClosing, ""test"", async() => {
}
);
",
csharp,
ignoreLineEndingDifferences: true);
}
[Fact]
public void WriteCreateTagHelper_RendersCorrectly_UsesSpecifiedTagHelperType()
{
// Arrange
var writer = new RuntimeTagHelperWriter();
var context = new CSharpRenderingContext()
{
Writer = new Legacy.CSharpCodeWriter(),
};
var node = new CreateTagHelperIRNode()
{
TagHelperTypeName = "TestNamespace.MyTagHelper"
};
// Act
writer.WriteCreateTagHelper(context, node);
// Assert
var csharp = context.Writer.Builder.ToString();
Assert.Equal(
@"__TestNamespace_MyTagHelper = CreateTagHelper<global::TestNamespace.MyTagHelper>();
__tagHelperExecutionContext.Add(__TestNamespace_MyTagHelper);
",
csharp,
ignoreLineEndingDifferences: true);