Skip to content
This repository has been archived by the owner on Dec 19, 2018. It is now read-only.

Commit

Permalink
Moved CreateTagHelperIRNode from renderer to writer
Browse files Browse the repository at this point in the history
  • Loading branch information
ajaybhargavb committed Apr 4, 2017
1 parent 1a05359 commit 6fea645
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,11 @@ public override void VisitInitializeTagHelperStructure(InitializeTagHelperStruct
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,18 +204,6 @@ public override void VisitDirectiveToken(DirectiveTokenIRNode node)
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -29,7 +31,14 @@ public override void WriteAddTagHelperHtmlAttribute(CSharpRenderingContext conte

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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,23 +255,6 @@ public override void VisitCSharpStatement(CSharpStatementIRNode node)
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public class RuntimeTagHelperWriter : TagHelperWriter

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";
Expand All @@ -30,6 +32,8 @@ public class RuntimeTagHelperWriter : TagHelperWriter

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();
Expand Down Expand Up @@ -116,7 +120,19 @@ public override void WriteAddTagHelperHtmlAttribute(CSharpRenderingContext conte

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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,32 @@ public void WriteDeclareTagHelperFields_DeclaresUsedTagHelperTypes()
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,33 @@ public void WriteInitializeTagHelperStructure_RendersCorrectly_UsesTagNameAndMod
@"__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);
Expand Down

0 comments on commit 6fea645

Please sign in to comment.