diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperOutput.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperOutput.cs index b428c37ab8..862c41414e 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperOutput.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperOutput.cs @@ -4,9 +4,9 @@ using System; using System.Collections.Generic; using System.Globalization; -using System.Net; using System.Text; using Microsoft.Framework.Internal; +using Microsoft.Framework.WebEncoders; namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { @@ -19,6 +19,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers private bool _contentSet; private bool _isTagNameNullOrWhitespace; private string _tagName; + private readonly IHtmlEncoder _htmlEncoder; // Internal for testing internal TagHelperOutput(string tagName) @@ -32,13 +33,19 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// /// The HTML element's tag name. /// The HTML attributes. - public TagHelperOutput(string tagName, [NotNull] IDictionary attributes) + /// The used + /// to encode HTML attribute values. + public TagHelperOutput( + string tagName, + [NotNull] IDictionary attributes, + [NotNull] IHtmlEncoder htmlEncoder) { TagName = tagName; Attributes = new Dictionary(attributes, StringComparer.OrdinalIgnoreCase); PreContent = string.Empty; _content = string.Empty; PostContent = string.Empty; + _htmlEncoder = htmlEncoder; } /// @@ -131,7 +138,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers foreach (var attribute in Attributes) { - var value = WebUtility.HtmlEncode(attribute.Value); + var value = _htmlEncoder.HtmlEncode(attribute.Value); sb.Append(' ') .Append(attribute.Key) .Append("=\"") diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs index 70c52939d3..d8659e99e0 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.Framework.Internal; +using Microsoft.Framework.WebEncoders; namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { @@ -12,6 +13,17 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// public class TagHelperRunner { + private readonly IHtmlEncoder _htmlEncoder; + + /// + /// Instantiates a new instance of . + /// + /// The used to encode HTML. + public TagHelperRunner([NotNull] IHtmlEncoder htmlEncoder) + { + _htmlEncoder = htmlEncoder; + } + /// /// Calls the method on s. /// @@ -26,7 +38,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers executionContext.Items, executionContext.UniqueId, executionContext.GetChildContentAsync); - var tagHelperOutput = new TagHelperOutput(executionContext.TagName, executionContext.HTMLAttributes) + var tagHelperOutput = new TagHelperOutput( + executionContext.TagName, + executionContext.HTMLAttributes, + _htmlEncoder) { SelfClosing = executionContext.SelfClosing, }; diff --git a/src/Microsoft.AspNet.Razor.Runtime/project.json b/src/Microsoft.AspNet.Razor.Runtime/project.json index cdd44fec8e..3bf888b652 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/project.json +++ b/src/Microsoft.AspNet.Razor.Runtime/project.json @@ -4,7 +4,8 @@ "dependencies": { "Microsoft.AspNet.Razor": "4.0.0-*", "Microsoft.Framework.CopyOnWriteDictionary.Internal": { "type": "build", "version": "1.0.0-*" }, - "Microsoft.Framework.NotNullAttribute.Internal": { "type": "build", "version": "1.0.0-*" } + "Microsoft.Framework.NotNullAttribute.Internal": { "type": "build", "version": "1.0.0-*" }, + "Microsoft.Framework.WebEncoders": "1.0.0-*" }, "frameworks": { "net45": { }, diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs index 7d6dd4e613..7d45dff65b 100644 --- a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs +++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpCodeBuilder.cs @@ -66,6 +66,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp { using (writer.BuildMethodDeclaration("public override async", "Task", Host.GeneratedClassContext.ExecuteMethodName)) { + new CSharpTagHelperRunnerInitializationVisitor(writer, Context).Accept(Tree.Chunks); csharpCodeVisitor.Accept(Tree.Chunks); } } diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTagHelperFieldDeclarationVisitor.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTagHelperFieldDeclarationVisitor.cs index ba9532f264..a37d33f8d2 100644 --- a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTagHelperFieldDeclarationVisitor.cs +++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTagHelperFieldDeclarationVisitor.cs @@ -46,13 +46,19 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp CSharpTagHelperCodeRenderer.ExecutionContextVariableName, value: null); - WritePrivateField(_tagHelperContext.RunnerTypeName, - CSharpTagHelperCodeRenderer.RunnerVariableName, - "new " + _tagHelperContext.RunnerTypeName + "()"); + Writer + .Write("private ") + .WriteVariableDeclaration( + _tagHelperContext.RunnerTypeName, + CSharpTagHelperCodeRenderer.RunnerVariableName, + value: null); - WritePrivateField(_tagHelperContext.ScopeManagerTypeName, - CSharpTagHelperCodeRenderer.ScopeManagerVariableName, - "new " + _tagHelperContext.ScopeManagerTypeName + "()"); + Writer.Write("private ") + .Write(_tagHelperContext.ScopeManagerTypeName) + .Write(" ") + .WriteStartAssignment(CSharpTagHelperCodeRenderer.ScopeManagerVariableName) + .WriteStartNewObject(_tagHelperContext.ScopeManagerTypeName) + .WriteEndMethodInvocation(); } } diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTagHelperRunnerInitializationVisitor.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTagHelperRunnerInitializationVisitor.cs new file mode 100644 index 0000000000..e5752edead --- /dev/null +++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/Visitors/CSharpTagHelperRunnerInitializationVisitor.cs @@ -0,0 +1,46 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp +{ + /// + /// The that generates the code to initialize the TagHelperRunner. + /// + public class CSharpTagHelperRunnerInitializationVisitor : CodeVisitor + { + private readonly GeneratedTagHelperContext _tagHelperContext; + private bool _foundTagHelpers; + + /// + /// Creates a new instance of . + /// + /// The used to generate code. + /// The . + public CSharpTagHelperRunnerInitializationVisitor([NotNull] CSharpCodeWriter writer, + [NotNull] CodeBuilderContext context) + : base(writer, context) + { + _tagHelperContext = Context.Host.GeneratedClassContext.GeneratedTagHelperContext; + } + + /// + /// Writes the TagHelperRunner initialization code to the Writer. + /// + /// The . + protected override void Visit(TagHelperChunk chunk) + { + if (!_foundTagHelpers && !Context.Host.DesignTimeMode) + { + _foundTagHelpers = true; + + Writer + .WriteStartAssignment(CSharpTagHelperCodeRenderer.RunnerVariableName) + .Write(CSharpTagHelperCodeRenderer.RunnerVariableName) + .Write(" ?? ") + .WriteStartNewObject(_tagHelperContext.RunnerTypeName) + .Write(_tagHelperContext.HtmlEncoderPropertyName) + .WriteEndMethodInvocation(); + } + } + } +} \ No newline at end of file diff --git a/src/Microsoft.AspNet.Razor/Generator/GeneratedTagHelperContext.cs b/src/Microsoft.AspNet.Razor/Generator/GeneratedTagHelperContext.cs index bafd71751f..ae27408db2 100644 --- a/src/Microsoft.AspNet.Razor/Generator/GeneratedTagHelperContext.cs +++ b/src/Microsoft.AspNet.Razor/Generator/GeneratedTagHelperContext.cs @@ -35,6 +35,7 @@ namespace Microsoft.AspNet.Razor.Generator RunnerTypeName = "TagHelperRunner"; ScopeManagerTypeName = "TagHelperScopeManager"; ExecutionContextTypeName = "TagHelperExecutionContext"; + HtmlEncoderPropertyName = "HtmlEncoder"; } /// @@ -150,5 +151,10 @@ namespace Microsoft.AspNet.Razor.Generator /// Contains information about in-scope tag helpers, HTML attributes, and the tag helpers' output. /// public string ExecutionContextTypeName { get; set; } + + /// + /// The name of the property used to encode HTML. + /// + public string HtmlEncoderPropertyName { get; set; } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/NullHtmlEncoder.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/NullHtmlEncoder.cs new file mode 100644 index 0000000000..fd9acf7272 --- /dev/null +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/NullHtmlEncoder.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.IO; +using Microsoft.Framework.WebEncoders; + +namespace Microsoft.AspNet.Razor.Runtime.TagHelpers.Test +{ + public class NullHtmlEncoder : IHtmlEncoder + { + public string HtmlEncode(string value) + { + return value; + } + + public void HtmlEncode(string value, int startIndex, int charCount, TextWriter output) + { + output.Write(value.Substring(startIndex, charCount)); + } + + public void HtmlEncode(char[] value, int startIndex, int charCount, TextWriter output) + { + output.Write(value, startIndex, charCount); + } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/PseudoHtmlEncoder.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/PseudoHtmlEncoder.cs new file mode 100644 index 0000000000..b5221f79fd --- /dev/null +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/PseudoHtmlEncoder.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.IO; +using Microsoft.Framework.WebEncoders; + +namespace Microsoft.AspNet.Razor.Runtime.TagHelpers.Test +{ + public class PseudoHtmlEncoder : IHtmlEncoder + { + public string HtmlEncode(string value) + { + return "HtmlEncode[[" + value + "]]"; + } + + public void HtmlEncode(string value, int startIndex, int charCount, TextWriter output) + { + output.Write("HtmlEncode[["); + output.Write(value.Substring(startIndex, charCount)); + output.Write("]]"); + } + + public void HtmlEncode(char[] value, int startIndex, int charCount, TextWriter output) + { + output.Write("HtmlEncode[["); + output.Write(value, startIndex, charCount); + output.Write("]]"); + } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperOutputTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperOutputTest.cs index 11e1837377..2ebf34e63a 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperOutputTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperOutputTest.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; +using Microsoft.AspNet.Razor.Runtime.TagHelpers.Test; using Xunit; namespace Microsoft.AspNet.Razor.Runtime.TagHelpers @@ -79,7 +80,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { { "class", "btn" }, { "something", " spaced " } - }); + }, + htmlEncoder: new NullHtmlEncoder()); // Act var output = tagHelperOutput.GenerateStartTag(); @@ -110,7 +112,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { { "class", "btn" }, { "something", " spaced " } - }); + }, + htmlEncoder: new NullHtmlEncoder()); tagHelperOutput.SelfClosing = true; @@ -136,6 +139,26 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers Assert.Equal("

", output); } + [Fact] + public void GenerateStartTag_UsesProvidedHtmlEncoder() + { + // Arrange + var tagHelperOutput = new TagHelperOutput("p", + attributes: new Dictionary + { + { "hello", "world" }, + }, + htmlEncoder: new PseudoHtmlEncoder()); + + tagHelperOutput.SelfClosing = true; + + // Act + var output = tagHelperOutput.GenerateStartTag(); + + // Assert + Assert.Equal("

", output); + } + [Fact] public void GenerateStartTag_ReturnsNothingIfWhitespaceTagName() { @@ -145,7 +168,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { { "class", "btn" }, { "something", " spaced " } - }) + }, + htmlEncoder: new NullHtmlEncoder()) { SelfClosing = true }; @@ -402,7 +426,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { { "class", "btn" }, { "something", " spaced " } - }) + }, + htmlEncoder: new NullHtmlEncoder()) { PreContent = "Pre Content", Content = "Content", @@ -431,7 +456,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers attributes: new Dictionary { { originalName, "btn" }, - }); + }, + htmlEncoder: new NullHtmlEncoder()); // Act tagHelperOutput.Attributes[updateName] = "super button"; diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperRunnerTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperRunnerTest.cs index 499452d490..6bb8296178 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperRunnerTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperRunnerTest.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; +using Microsoft.AspNet.Razor.Runtime.TagHelpers.Test; using Xunit; namespace Microsoft.AspNet.Razor.Runtime.TagHelpers @@ -61,7 +62,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers int[] expectedTagHelperOrders) { // Arrange - var runner = new TagHelperRunner(); + var runner = new TagHelperRunner(new NullHtmlEncoder()); var executionContext = new TagHelperExecutionContext("p", selfClosing: false); var processOrder = new List(); @@ -87,7 +88,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public async Task RunAsync_SetTagHelperOutputSelfClosing(bool selfClosing) { // Arrange - var runner = new TagHelperRunner(); + var runner = new TagHelperRunner(new NullHtmlEncoder()); var executionContext = new TagHelperExecutionContext("p", selfClosing); var tagHelper = new TagHelperContextTouchingTagHelper(); @@ -105,7 +106,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public async Task RunAsync_ProcessesAllTagHelpers() { // Arrange - var runner = new TagHelperRunner(); + var runner = new TagHelperRunner(new NullHtmlEncoder()); var executionContext = new TagHelperExecutionContext("p", selfClosing: false); var executableTagHelper1 = new ExecutableTagHelper(); var executableTagHelper2 = new ExecutableTagHelper(); @@ -124,7 +125,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public async Task RunAsync_AllowsModificationOfTagHelperOutput() { // Arrange - var runner = new TagHelperRunner(); + var runner = new TagHelperRunner(new NullHtmlEncoder()); var executionContext = new TagHelperExecutionContext("p", selfClosing: false); var executableTagHelper = new ExecutableTagHelper(); @@ -144,7 +145,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public async Task RunAsync_AllowsDataRetrievalFromTagHelperContext() { // Arrange - var runner = new TagHelperRunner(); + var runner = new TagHelperRunner(new NullHtmlEncoder()); var executionContext = new TagHelperExecutionContext("p", selfClosing: false); var tagHelper = new TagHelperContextTouchingTagHelper(); @@ -161,7 +162,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public async Task RunAsync_ConfiguresTagHelperContextWithExecutionContextsItems() { // Arrange - var runner = new TagHelperRunner(); + var runner = new TagHelperRunner(new NullHtmlEncoder()); var executionContext = new TagHelperExecutionContext("p", selfClosing: false); var tagHelper = new ContextInspectingTagHelper(); executionContext.Add(tagHelper); @@ -174,6 +175,22 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers Assert.Same(tagHelper.ContextProcessedWith.Items, executionContext.Items); } + [Fact] + public async Task RunAsync_CreatesTagHelperOutput_WithProvidedEncoder() + { + // Arrange + var runner = new TagHelperRunner(new PseudoHtmlEncoder()); + var executionContext = new TagHelperExecutionContext("p", selfClosing: true); + executionContext.AddHtmlAttribute("Hello", "World"); + + // Act + var tagHelperOutput = await runner.RunAsync(executionContext); + var output = tagHelperOutput.GenerateStartTag(); + + // Assert + Assert.Equal("

", output); + } + private class ExecutableTagHelper : TagHelper { public bool Processed { get; set; } diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs index df0d2e79aa..aaad6b01ce 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs @@ -11,7 +11,7 @@ namespace TestOutput private System.IO.TextWriter __tagHelperStringValueBuffer = null; #pragma warning restore 0414 private TagHelperExecutionContext __tagHelperExecutionContext = null; - private TagHelperRunner __tagHelperRunner = new TagHelperRunner(); + private TagHelperRunner __tagHelperRunner = null; private TagHelperScopeManager __tagHelperScopeManager = new TagHelperScopeManager(); private PTagHelper __PTagHelper = null; private InputTagHelper __InputTagHelper = null; @@ -24,6 +24,7 @@ namespace TestOutput #pragma warning disable 1998 public override async Task ExecuteAsync() { + __tagHelperRunner = __tagHelperRunner ?? new TagHelperRunner(HtmlEncoder); Instrumentation.BeginContext(33, 49, true); WriteLiteral("\r\n

\r\n "); Instrumentation.EndContext(); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.Prefixed.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.Prefixed.cs index f9bf2d196f..a673b2f9c4 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.Prefixed.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.Prefixed.cs @@ -12,7 +12,7 @@ namespace TestOutput private System.IO.TextWriter __tagHelperStringValueBuffer = null; #pragma warning restore 0414 private TagHelperExecutionContext __tagHelperExecutionContext = null; - private TagHelperRunner __tagHelperRunner = new TagHelperRunner(); + private TagHelperRunner __tagHelperRunner = null; private TagHelperScopeManager __tagHelperScopeManager = new TagHelperScopeManager(); private PTagHelper __PTagHelper = null; private InputTagHelper __InputTagHelper = null; @@ -25,6 +25,7 @@ namespace TestOutput #pragma warning disable 1998 public override async Task ExecuteAsync() { + __tagHelperRunner = __tagHelperRunner ?? new TagHelperRunner(HtmlEncoder); Instrumentation.BeginContext(57, 52, true); WriteLiteral("\r\n\r\n "); Instrumentation.EndContext(); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.cs index 62d38d533f..24bc3d0028 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.cs @@ -12,7 +12,7 @@ namespace TestOutput private System.IO.TextWriter __tagHelperStringValueBuffer = null; #pragma warning restore 0414 private TagHelperExecutionContext __tagHelperExecutionContext = null; - private TagHelperRunner __tagHelperRunner = new TagHelperRunner(); + private TagHelperRunner __tagHelperRunner = null; private TagHelperScopeManager __tagHelperScopeManager = new TagHelperScopeManager(); private PTagHelper __PTagHelper = null; private InputTagHelper __InputTagHelper = null; @@ -25,6 +25,7 @@ namespace TestOutput #pragma warning disable 1998 public override async Task ExecuteAsync() { + __tagHelperRunner = __tagHelperRunner ?? new TagHelperRunner(HtmlEncoder); Instrumentation.BeginContext(33, 49, true); WriteLiteral("\r\n
\r\n "); Instrumentation.EndContext(); 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 75e99f91d8..ac364bd4b1 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 @@ -12,7 +12,7 @@ namespace TestOutput private System.IO.TextWriter __tagHelperStringValueBuffer = null; #pragma warning restore 0414 private TagHelperExecutionContext __tagHelperExecutionContext = null; - private TagHelperRunner __tagHelperRunner = new TagHelperRunner(); + private TagHelperRunner __tagHelperRunner = null; private TagHelperScopeManager __tagHelperScopeManager = new TagHelperScopeManager(); private PTagHelper __PTagHelper = null; private InputTagHelper __InputTagHelper = null; @@ -25,6 +25,7 @@ namespace TestOutput #pragma warning disable 1998 public override async Task ExecuteAsync() { + __tagHelperRunner = __tagHelperRunner ?? new TagHelperRunner(HtmlEncoder); Instrumentation.BeginContext(33, 2, true); WriteLiteral("\r\n"); Instrumentation.EndContext(); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/EmptyAttributeTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/EmptyAttributeTagHelpers.cs index fdacceb36e..5e3b10d5cc 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/EmptyAttributeTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/EmptyAttributeTagHelpers.cs @@ -12,7 +12,7 @@ namespace TestOutput private System.IO.TextWriter __tagHelperStringValueBuffer = null; #pragma warning restore 0414 private TagHelperExecutionContext __tagHelperExecutionContext = null; - private TagHelperRunner __tagHelperRunner = new TagHelperRunner(); + private TagHelperRunner __tagHelperRunner = null; private TagHelperScopeManager __tagHelperScopeManager = new TagHelperScopeManager(); private InputTagHelper __InputTagHelper = null; private InputTagHelper2 __InputTagHelper2 = null; @@ -25,6 +25,7 @@ namespace TestOutput #pragma warning disable 1998 public override async Task ExecuteAsync() { + __tagHelperRunner = __tagHelperRunner ?? new TagHelperRunner(HtmlEncoder); Instrumentation.BeginContext(27, 13, true); WriteLiteral("\r\n
\r\n "); Instrumentation.EndContext(); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/EscapedTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/EscapedTagHelpers.cs index 346fb9e4b5..a03de263eb 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/EscapedTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/EscapedTagHelpers.cs @@ -12,7 +12,7 @@ namespace TestOutput private System.IO.TextWriter __tagHelperStringValueBuffer = null; #pragma warning restore 0414 private TagHelperExecutionContext __tagHelperExecutionContext = null; - private TagHelperRunner __tagHelperRunner = new TagHelperRunner(); + private TagHelperRunner __tagHelperRunner = null; private TagHelperScopeManager __tagHelperScopeManager = new TagHelperScopeManager(); private InputTagHelper __InputTagHelper = null; private InputTagHelper2 __InputTagHelper2 = null; @@ -24,6 +24,7 @@ namespace TestOutput #pragma warning disable 1998 public override async Task ExecuteAsync() { + __tagHelperRunner = __tagHelperRunner ?? new TagHelperRunner(HtmlEncoder); Instrumentation.BeginContext(27, 72, true); WriteLiteral("\r\n
\r\n