From 7890a1b34c830cf8c92ade18e162a3620880ed7d Mon Sep 17 00:00:00 2001 From: DamianEdwards Date: Mon, 24 Nov 2014 22:18:05 -0800 Subject: [PATCH] Added TagHelperContext.UniqueId: - The ID is created at view compilation time and is unique per TagHelperExecutionContext and thus per HTML element in the source for which Tag Helpers will run - #241 --- .../TagHelpers/TagHelperContext.cs | 9 +- .../TagHelpers/TagHelperExecutionContext.cs | 17 +- .../TagHelpers/TagHelperRunner.cs | 2 +- .../TagHelpers/TagHelperScopeManager.cs | 5 +- .../CSharp/CSharpTagHelperCodeRenderer.cs | 16 ++ .../TagHelpers/TagHelperScopeManagerTest.cs | 14 +- .../CSharpTagHelperRenderingUnitTest.cs | 187 ++++++++++++++++++ ...TagHelperAttributeValueCodeRendererTest.cs | 2 +- .../Generator/TagHelperTestBase.cs | 39 ++++ ...TagHelpers.CustomAttributeCodeGenerator.cs | 8 +- .../CS/Output/BasicTagHelpers.cs | 8 +- .../CS/Output/ComplexTagHelpers.cs | 14 +- .../CS/Output/ContentBehaviorTagHelpers.cs | 10 +- .../CS/Output/SingleTagHelper.cs | 2 +- .../CS/Output/TagHelpersInHelper.cs | 8 +- .../CS/Output/TagHelpersInSection.cs | 4 +- 16 files changed, 305 insertions(+), 40 deletions(-) create mode 100644 test/Microsoft.AspNet.Razor.Test/Generator/CSharpTagHelperRenderingUnitTest.cs diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperContext.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperContext.cs index fc91494b38..8fabb89a4b 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperContext.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperContext.cs @@ -14,14 +14,21 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// Instantiates a new . /// /// Every attribute associated with the current HTML element. - public TagHelperContext([NotNull] IDictionary allAttributes) + /// The unique identifier for the source element this applies to. + public TagHelperContext([NotNull] IDictionary allAttributes, [NotNull] string uniqueId) { AllAttributes = allAttributes; + UniqueId = uniqueId; } /// /// Every attribute associated with the current HTML element. /// public IDictionary AllAttributes { get; private set; } + + /// + /// An identifier unique to the HTML element this context is for. + /// + public string UniqueId { get; private set; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperExecutionContext.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperExecutionContext.cs index 046ff548bb..36ff1a1fde 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperExecutionContext.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperExecutionContext.cs @@ -17,12 +17,22 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// Instantiates a new . /// /// The HTML tag name in the Razor source. - public TagHelperExecutionContext([NotNull] string tagName) + public TagHelperExecutionContext([NotNull] string tagName, [NotNull] string uniqueId) { AllAttributes = new Dictionary(StringComparer.OrdinalIgnoreCase); HTMLAttributes = new Dictionary(StringComparer.OrdinalIgnoreCase); _tagHelpers = new List(); TagName = tagName; + UniqueId = uniqueId; + } + + /// + /// Internal for testing purposes only. + /// + internal TagHelperExecutionContext([NotNull] string tagName) + : this(tagName, string.Empty) + { + } /// @@ -35,6 +45,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// public IDictionary AllAttributes { get; private set; } + /// + /// An identifier unique to the HTML element this context is for. + /// + public string UniqueId { get; private set; } + /// /// s that should be run. /// diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs index 5d8fad474e..cf5531a83a 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperRunner.cs @@ -37,7 +37,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers private async Task RunAsyncCore(TagHelperExecutionContext executionContext, string outputContent) { - var tagHelperContext = new TagHelperContext(executionContext.AllAttributes); + var tagHelperContext = new TagHelperContext(executionContext.AllAttributes, executionContext.UniqueId); var tagHelperOutput = new TagHelperOutput(executionContext.TagName, executionContext.HTMLAttributes, outputContent); diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperScopeManager.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperScopeManager.cs index 7ce38b69ba..5501ec6c97 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperScopeManager.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperScopeManager.cs @@ -25,10 +25,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers /// Starts a scope. /// /// The HTML tag name that the scope is associated with. + /// An identifier unique to the HTML element this scope is for. /// A to use. - public TagHelperExecutionContext Begin(string tagName) + public TagHelperExecutionContext Begin(string tagName, string uniqueId) { - var executionContext = new TagHelperExecutionContext(tagName); + var executionContext = new TagHelperExecutionContext(tagName, uniqueId); _executionScopes.Push(executionContext); diff --git a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs index a47a0a436a..356a91c176 100644 --- a/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs +++ b/src/Microsoft.AspNet.Razor/Generator/Compiler/CodeBuilder/CSharp/CSharpTagHelperCodeRenderer.cs @@ -135,10 +135,26 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp _writer.WriteStartAssignment(ExecutionContextVariableName) .WriteStartInstanceMethodInvocation(ScopeManagerVariableName, _tagHelperContext.ScopeManagerBeginMethodName); + + // Assign a unique ID for this instance of the source HTML tag. This must be unique + // per call site, e.g. if the tag is on the view twice, there should be two IDs. _writer.WriteStringLiteral(tagName) + .WriteParameterSeparator() + .WriteStringLiteral(GenerateUniqueId()) .WriteEndMethodInvocation(); } + /// + /// Generates a unique ID for an HTML element. + /// + /// + /// A globally unique ID. + /// + protected virtual string GenerateUniqueId() + { + return Guid.NewGuid().ToString("N"); + } + private void RenderTagHelpersCreation(TagHelperChunk chunk) { var tagHelperDescriptors = chunk.Descriptors; diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperScopeManagerTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperScopeManagerTest.cs index 7697f52b72..64a6f38861 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperScopeManagerTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperScopeManagerTest.cs @@ -16,7 +16,7 @@ namespace Microsoft.AspNet.Razor.Runtime.Test.TagHelpers var scopeManager = new TagHelperScopeManager(); // Act - var executionContext = scopeManager.Begin("p"); + var executionContext = scopeManager.Begin("p", string.Empty); // Assert Assert.Equal("p", executionContext.TagName); @@ -29,8 +29,8 @@ namespace Microsoft.AspNet.Razor.Runtime.Test.TagHelpers var scopeManager = new TagHelperScopeManager(); // Act - var executionContext = scopeManager.Begin("p"); - executionContext = scopeManager.Begin("div"); + var executionContext = scopeManager.Begin("p", string.Empty); + executionContext = scopeManager.Begin("div", string.Empty); // Assert Assert.Equal("div", executionContext.TagName); @@ -43,8 +43,8 @@ namespace Microsoft.AspNet.Razor.Runtime.Test.TagHelpers var scopeManager = new TagHelperScopeManager(); // Act - var executionContext = scopeManager.Begin("p"); - executionContext = scopeManager.Begin("div"); + var executionContext = scopeManager.Begin("p", string.Empty); + executionContext = scopeManager.Begin("div", string.Empty); executionContext = scopeManager.End(); // Assert @@ -58,8 +58,8 @@ namespace Microsoft.AspNet.Razor.Runtime.Test.TagHelpers var scopeManager = new TagHelperScopeManager(); // Act - var executionContext = scopeManager.Begin("p"); - executionContext = scopeManager.Begin("div"); + var executionContext = scopeManager.Begin("p", string.Empty); + executionContext = scopeManager.Begin("div", string.Empty); executionContext = scopeManager.End(); executionContext = scopeManager.End(); diff --git a/test/Microsoft.AspNet.Razor.Test/Generator/CSharpTagHelperRenderingUnitTest.cs b/test/Microsoft.AspNet.Razor.Test/Generator/CSharpTagHelperRenderingUnitTest.cs new file mode 100644 index 0000000000..41e915fca8 --- /dev/null +++ b/test/Microsoft.AspNet.Razor.Test/Generator/CSharpTagHelperRenderingUnitTest.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections.Generic; +using Microsoft.AspNet.Razor.Generator; +using Microsoft.AspNet.Razor.Generator.Compiler; +using Microsoft.AspNet.Razor.Generator.Compiler.CSharp; +using Microsoft.AspNet.Razor.TagHelpers; +using Xunit; + +namespace Microsoft.AspNet.Razor.Test.Generator +{ + public class CSharpTagHelperRenderingUnitTest + { + [Fact] + public void CreatesAUniqueIdForSingleTagHelperChunk() + { + // Arrange + var chunk = CreateTagHelperChunk("div", new[] { + new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var codeRenderer = CreateCodeRenderer(); + + // Act + codeRenderer.RenderTagHelper(chunk); + + // Assert + Assert.Equal(1, codeRenderer.GenerateUniqueIdCount); + } + + [Fact] + public void UsesTheSameUniqueIdForTagHelperChunkWithMultipleTagHelpers() + { + // Arrange + var chunk = CreateTagHelperChunk("div", new[] { + new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName", ContentBehavior.None), + new TagHelperDescriptor("div", "Div2TagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var codeRenderer = CreateCodeRenderer(); + + // Act + codeRenderer.RenderTagHelper(chunk); + + // Assert + Assert.Equal(1, codeRenderer.GenerateUniqueIdCount); + } + + [Fact] + public void UsesDifferentUniqueIdForMultipleTagHelperChunksForSameTagHelper() + { + // Arrange + var chunk1 = CreateTagHelperChunk("div", new[] { + new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var chunk2 = CreateTagHelperChunk("div", new[] { + new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var codeRenderer = CreateCodeRenderer(); + + // Act + codeRenderer.RenderTagHelper(chunk1); + codeRenderer.RenderTagHelper(chunk2); + + // Assert + Assert.Equal(2, codeRenderer.GenerateUniqueIdCount); + } + + [Fact] + public void UsesDifferentUniqueIdForNestedTagHelperChunksForSameTagHelper() + { + // Arrange + var parentChunk = CreateTagHelperChunk("div", new[] { + new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var childChunk = CreateTagHelperChunk("div", new[] { + new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + parentChunk.Children.Add(childChunk); + var codeRenderer = CreateCodeRenderer(); + + // Act + codeRenderer.RenderTagHelper(parentChunk); + + // Assert + Assert.Equal(2, codeRenderer.GenerateUniqueIdCount); + } + + [Fact] + public void UsesDifferentUniqueIdForMultipleTagHelperChunksForDifferentTagHelpers() + { + // Arrange + var divChunk = CreateTagHelperChunk("div", new[] { + new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var spanChunk = CreateTagHelperChunk("span", new[] { + new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var codeRenderer = CreateCodeRenderer(); + + // Act + codeRenderer.RenderTagHelper(divChunk); + codeRenderer.RenderTagHelper(spanChunk); + + // Assert + Assert.Equal(2, codeRenderer.GenerateUniqueIdCount); + } + + [Fact] + public void UsesCorrectUniqueIdForMultipleTagHelperChunksSomeWithSameSameTagHelpersSomeWithDifferentTagHelpers() + { + // Arrange + var chunk1 = CreateTagHelperChunk("div", new[] { + new TagHelperDescriptor("div", "DivTagHelper", "FakeAssemblyName", ContentBehavior.None), + new TagHelperDescriptor("div", "Div2TagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var chunk2 = CreateTagHelperChunk("span", new[] { + new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var chunk3 = CreateTagHelperChunk("span", new[] { + new TagHelperDescriptor("span", "SpanTagHelper", "FakeAssemblyName", ContentBehavior.None), + new TagHelperDescriptor("span", "Span2TagHelper", "FakeAssemblyName", ContentBehavior.None) + }); + var codeRenderer = CreateCodeRenderer(); + + // Act + codeRenderer.RenderTagHelper(chunk1); + codeRenderer.RenderTagHelper(chunk2); + codeRenderer.RenderTagHelper(chunk3); + + // Assert + Assert.Equal(3, codeRenderer.GenerateUniqueIdCount); + } + + private static TagHelperChunk CreateTagHelperChunk(string tagName, IEnumerable tagHelperDescriptors) + { + return new TagHelperChunk + { + TagName = tagName, + Descriptors = tagHelperDescriptors, + Children = new List(), + Attributes = new Dictionary() + }; + } + + private static TrackingUniqueIdsTagHelperCodeRenderer CreateCodeRenderer() + { + var writer = new CSharpCodeWriter(); + var codeBuilderContext = CreateContext(); + var visitor = new CSharpCodeVisitor(writer, codeBuilderContext); + var codeRenderer = new TrackingUniqueIdsTagHelperCodeRenderer( + visitor, + writer, + codeBuilderContext); + visitor.TagHelperRenderer = codeRenderer; + return codeRenderer; + } + + private static CodeBuilderContext CreateContext() + { + return new CodeBuilderContext( + new CodeGeneratorContext( + new RazorEngineHost(new CSharpRazorCodeLanguage()), + "MyClass", + "MyNamespace", + string.Empty, + shouldGenerateLinePragmas: true)); + } + + private class TrackingUniqueIdsTagHelperCodeRenderer : CSharpTagHelperCodeRenderer + { + public TrackingUniqueIdsTagHelperCodeRenderer( + IChunkVisitor bodyVisitor, + CSharpCodeWriter writer, + CodeBuilderContext context) + : base(bodyVisitor, writer, context) + { + + } + + protected override string GenerateUniqueId() + { + GenerateUniqueIdCount++; + return "test"; + } + + public int GenerateUniqueIdCount { get; private set; } + } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Test/Generator/TagHelperAttributeValueCodeRendererTest.cs b/test/Microsoft.AspNet.Razor.Test/Generator/TagHelperAttributeValueCodeRendererTest.cs index 38471fd741..d94f405033 100644 --- a/test/Microsoft.AspNet.Razor.Test/Generator/TagHelperAttributeValueCodeRendererTest.cs +++ b/test/Microsoft.AspNet.Razor.Test/Generator/TagHelperAttributeValueCodeRendererTest.cs @@ -65,7 +65,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator } } - private class AttributeCodeGeneratorReplacingCodeBuilder : CSharpCodeBuilder + private class AttributeCodeGeneratorReplacingCodeBuilder : TestCSharpCodeBuilder { public AttributeCodeGeneratorReplacingCodeBuilder(CodeBuilderContext context) : base(context) diff --git a/test/Microsoft.AspNet.Razor.Test/Generator/TagHelperTestBase.cs b/test/Microsoft.AspNet.Razor.Test/Generator/TagHelperTestBase.cs index 31ac2e2dcd..f6bbfefb16 100644 --- a/test/Microsoft.AspNet.Razor.Test/Generator/TagHelperTestBase.cs +++ b/test/Microsoft.AspNet.Razor.Test/Generator/TagHelperTestBase.cs @@ -5,7 +5,9 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Microsoft.AspNet.Razor.Generator; using Microsoft.AspNet.Razor.Generator.Compiler; +using Microsoft.AspNet.Razor.Generator.Compiler.CSharp; using Microsoft.AspNet.Razor.Parser; using Microsoft.AspNet.Razor.TagHelpers; using Xunit; @@ -78,6 +80,11 @@ namespace Microsoft.AspNet.Razor.Test.Generator _tagHelperDescriptors = tagHelperDescriptors; } + protected internal override CodeBuilder CreateCodeBuilder(CodeBuilderContext context) + { + return Host.DecorateCodeBuilder(new TestCSharpCodeBuilder(context), context); + } + protected internal override RazorParser CreateParser(string fileName) { var parser = base.CreateParser(fileName); @@ -87,5 +94,37 @@ namespace Microsoft.AspNet.Razor.Test.Generator new CustomTagHelperDescriptorResolver(_tagHelperDescriptors)); } } + + protected class TestCSharpCodeBuilder : CSharpCodeBuilder + { + public TestCSharpCodeBuilder(CodeBuilderContext context) + : base(context) + { + + } + + protected override CSharpCodeVisitor CreateCSharpCodeVisitor(CSharpCodeWriter writer, CodeBuilderContext context) + { + var visitor = base.CreateCSharpCodeVisitor(writer, context); + visitor.TagHelperRenderer = new NoUniqueIdsTagHelperCodeRenderer(visitor, writer, context); + return visitor; + } + + private class NoUniqueIdsTagHelperCodeRenderer : CSharpTagHelperCodeRenderer + { + public NoUniqueIdsTagHelperCodeRenderer(IChunkVisitor bodyVisitor, + CSharpCodeWriter writer, + CodeBuilderContext context) + : base(bodyVisitor, writer, context) + { + + } + + protected override string GenerateUniqueId() + { + return "test"; + } + } + } } } \ No newline at end of file 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 0db29ec3af..634adf8743 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 @@ -25,7 +25,7 @@ namespace TestOutput Instrumentation.BeginContext(27, 49, true); WriteLiteral("\r\n
\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", "test"); __PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PTagHelper); __tagHelperExecutionContext.AddHtmlAttribute("class", "Hello World"); @@ -34,7 +34,7 @@ namespace TestOutput Instrumentation.BeginContext(99, 10, true); WriteLiteral("\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", "test"); __PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; @@ -44,7 +44,7 @@ namespace TestOutput Instrumentation.BeginContext(116, 10, true); WriteLiteral("\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", "test"); __InputTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__InputTagHelper); __InputTagHelper.Type = **From custom attribute code renderer**: "text"; @@ -59,7 +59,7 @@ namespace TestOutput Instrumentation.BeginContext(147, 10, true); WriteLiteral("\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", "test"); __InputTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__InputTagHelper); __InputTagHelper.Type = **From custom attribute code renderer**: "checkbox"; 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 174c0d754a..89500bba9b 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 @@ -26,7 +26,7 @@ namespace TestOutput Instrumentation.BeginContext(27, 49, true); WriteLiteral("\r\n
\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", "test"); __PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PTagHelper); __tagHelperExecutionContext.AddHtmlAttribute("class", "Hello World"); @@ -35,7 +35,7 @@ namespace TestOutput Instrumentation.BeginContext(99, 10, true); WriteLiteral("\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", "test"); __PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; @@ -45,7 +45,7 @@ namespace TestOutput Instrumentation.BeginContext(116, 10, true); WriteLiteral("\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", "test"); __InputTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__InputTagHelper); __InputTagHelper.Type = "text"; @@ -60,7 +60,7 @@ namespace TestOutput Instrumentation.BeginContext(147, 10, true); WriteLiteral("\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", "test"); __InputTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__InputTagHelper); __InputTagHelper.Type = "checkbox"; 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 09148a9f90..c4117e622c 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 @@ -38,7 +38,7 @@ namespace TestOutput Instrumentation.BeginContext(78, 55, true); WriteLiteral("
\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", "test"); __PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PTagHelper); StartWritingScope(); @@ -71,7 +71,7 @@ Write(DateTime.Now); Instrumentation.BeginContext(245, 16, true); WriteLiteral(" "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", "test"); __PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; @@ -79,7 +79,7 @@ Write(DateTime.Now); Instrumentation.BeginContext(264, 10, true); WriteLiteral("New Time: "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", "test"); __InputTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__InputTagHelper); __InputTagHelper.Type = "text"; @@ -109,7 +109,7 @@ Write(DateTime.Now); Instrumentation.BeginContext(394, 16, true); WriteLiteral(" "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", "test"); __PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; @@ -117,7 +117,7 @@ Write(DateTime.Now); Instrumentation.BeginContext(413, 14, true); WriteLiteral("Current Time: "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", "test"); __InputTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__InputTagHelper); StartWritingScope(); @@ -143,7 +143,7 @@ Write(checkbox); Instrumentation.BeginContext(468, 18, true); WriteLiteral("\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", "test"); __InputTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__InputTagHelper); StartWritingScope(); @@ -165,7 +165,7 @@ Write(true ? "checkbox" : "anything"); Instrumentation.BeginContext(536, 18, true); WriteLiteral("\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("input", "test"); __InputTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__InputTagHelper); StartWritingScope(); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ContentBehaviorTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ContentBehaviorTagHelpers.cs index c9e8f1adc3..3f1aca0d30 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ContentBehaviorTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/ContentBehaviorTagHelpers.cs @@ -28,31 +28,31 @@ namespace TestOutput Instrumentation.BeginContext(27, 2, true); WriteLiteral("\r\n"); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("modify"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("modify", "test"); __ModifyTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__ModifyTagHelper); StartWritingScope(); WriteLiteral("\r\n "); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("none"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("none", "test"); __NoneTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__NoneTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; WriteLiteral(__tagHelperExecutionContext.Output.GenerateStartTag()); WriteLiteral("\r\n "); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("append"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("append", "test"); __AppendTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__AppendTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; WriteLiteral(__tagHelperExecutionContext.Output.GenerateStartTag()); WriteLiteral("\r\n "); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("prepend"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("prepend", "test"); __PrependTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PrependTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; WriteLiteral(__tagHelperExecutionContext.Output.GenerateStartTag()); WriteLiteral(__tagHelperExecutionContext.Output.GenerateContent()); WriteLiteral("\r\n "); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("replace"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("replace", "test"); __ReplaceTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__ReplaceTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/SingleTagHelper.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/SingleTagHelper.cs index 5d5aa2a289..6ef6fc9c24 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/SingleTagHelper.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/SingleTagHelper.cs @@ -24,7 +24,7 @@ namespace TestOutput Instrumentation.BeginContext(27, 2, true); WriteLiteral("\r\n"); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", "test"); __PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__PTagHelper); __PTagHelper.Age = 1337; diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/TagHelpersInHelper.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/TagHelpersInHelper.cs index c24bfdee97..e42fa6429c 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/TagHelpersInHelper.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/TagHelpersInHelper.cs @@ -24,7 +24,7 @@ MyHelper(string val) Instrumentation.BeginContext(62, 19, true); WriteLiteralTo(__razor_helper_writer, "
\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("mytaghelper"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("mytaghelper", "test"); __MyTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__MyTagHelper); StartWritingScope(); @@ -51,7 +51,7 @@ Write(DateTime.Now); Instrumentation.BeginContext(184, 52, true); WriteLiteralTo(__razor_helper_writer, "\r\n In None ContentBehavior.\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper", "test"); __NestedTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__NestedTagHelper); StartWritingScope(); @@ -106,7 +106,7 @@ Write(DateTime.Now); Instrumentation.BeginContext(27, 2, true); WriteLiteral("\r\n"); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("mytaghelper"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("mytaghelper", "test"); __MyTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__MyTagHelper); __tagHelperExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelperExecutionContext).Result; @@ -114,7 +114,7 @@ Write(DateTime.Now); Instrumentation.BeginContext(367, 9, false); #line 12 "TagHelpersInHelper.cshtml" Write(MyHelper(item => new Template((__razor_template_writer) => { - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper", "test"); __NestedTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__NestedTagHelper); StartWritingScope(); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/TagHelpersInSection.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/TagHelpersInSection.cs index 0f53e8a4d5..63a915e605 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/TagHelpersInSection.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/TagHelpersInSection.cs @@ -38,7 +38,7 @@ namespace TestOutput Instrumentation.BeginContext(87, 21, true); WriteLiteralTo(__razor_template_writer, "\r\n
\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("mytaghelper"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("mytaghelper", "test"); __MyTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__MyTagHelper); StartWritingScope(); @@ -65,7 +65,7 @@ Write(DateTime.Now); Instrumentation.BeginContext(211, 52, true); WriteLiteralTo(__razor_template_writer, "\r\n In None ContentBehavior.\r\n "); Instrumentation.EndContext(); - __tagHelperExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper"); + __tagHelperExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper", "test"); __NestedTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__NestedTagHelper); StartWritingScope();