diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcRazorHostTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcRazorHostTest.cs
index cac8962cb9..210b1ed6bf 100644
--- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcRazorHostTest.cs
+++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcRazorHostTest.cs
@@ -3,8 +3,11 @@
using System.Collections.Generic;
using System.IO;
+using Microsoft.AspNet.FileSystems;
using Microsoft.AspNet.Razor;
+using Microsoft.AspNet.Razor.Generator;
using Microsoft.AspNet.Razor.Generator.Compiler;
+using Microsoft.AspNet.Razor.Generator.Compiler.CSharp;
using Microsoft.AspNet.Razor.Text;
using Xunit;
@@ -66,7 +69,7 @@ namespace Microsoft.AspNet.Mvc.Razor
public void MvcRazorHost_ParsesAndGeneratesCodeForBasicScenarios(string scenarioName)
{
// Arrange
- var host = new MvcRazorHost(new TestFileSystem());
+ var host = new TestMvcRazorHost(new TestFileSystem());
// Act and Assert
RunRuntimeTest(host, scenarioName);
@@ -205,5 +208,68 @@ namespace Microsoft.AspNet.Mvc.Razor
documentLocation: new MappingLocation(documentLocation, contentLength),
generatedLocation: new MappingLocation(generatedLocation, contentLength));
}
+
+ ///
+ /// Used when testing Tag Helpers, it disables the unique ID generation feature.
+ ///
+ private class TestMvcRazorHost : MvcRazorHost
+ {
+ public TestMvcRazorHost(IFileSystem fileSystem)
+ : base(fileSystem)
+ { }
+
+ public override CodeBuilder DecorateCodeBuilder(CodeBuilder incomingBuilder, CodeBuilderContext context)
+ {
+ base.DecorateCodeBuilder(incomingBuilder, context);
+
+ return new TestCSharpCodeBuilder(context,
+ DefaultModel,
+ ActivateAttribute,
+ new GeneratedTagHelperAttributeContext
+ {
+ ModelExpressionTypeName = ModelExpressionType,
+ CreateModelExpressionMethodName = CreateModelExpressionMethod
+ });
+ }
+
+ protected class TestCSharpCodeBuilder : MvcCSharpCodeBuilder
+ {
+ private readonly GeneratedTagHelperAttributeContext _tagHelperAttributeContext;
+
+ public TestCSharpCodeBuilder(CodeBuilderContext context,
+ string defaultModel,
+ string activateAttribute,
+ GeneratedTagHelperAttributeContext tagHelperAttributeContext)
+ : base(context, defaultModel, activateAttribute, tagHelperAttributeContext)
+ {
+ _tagHelperAttributeContext = tagHelperAttributeContext;
+ }
+
+ protected override CSharpCodeVisitor CreateCSharpCodeVisitor(CSharpCodeWriter writer, CodeBuilderContext context)
+ {
+ var visitor = base.CreateCSharpCodeVisitor(writer, context);
+ visitor.TagHelperRenderer = new NoUniqueIdsTagHelperCodeRenderer(visitor, writer, context)
+ {
+ AttributeValueCodeRenderer =
+ new MvcTagHelperAttributeValueCodeRenderer(_tagHelperAttributeContext)
+ };
+ 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.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/ModelExpressionTagHelper.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/ModelExpressionTagHelper.cs
index 581614783e..1bcafcc482 100644
--- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/ModelExpressionTagHelper.cs
+++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/ModelExpressionTagHelper.cs
@@ -43,7 +43,7 @@ namespace Asp
BeginContext(120, 2, true);
WriteLiteral("\r\n");
EndContext();
- __tagHelperExecutionContext = __tagHelperScopeManager.Begin("inputTest");
+ __tagHelperExecutionContext = __tagHelperScopeManager.Begin("inputTest", "test");
__Microsoft_AspNet_Mvc_Razor_InputTestTagHelper = CreateTagHelper();
__tagHelperExecutionContext.Add(__Microsoft_AspNet_Mvc_Razor_InputTestTagHelper);
__Microsoft_AspNet_Mvc_Razor_InputTestTagHelper.For = CreateModelExpression(__model => __model.Now);
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs
index 92ed100dcb..56427a00b7 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs
@@ -31,7 +31,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "asp-fragment", "hello=world" },
{ "asp-host", "contoso.com" },
{ "asp-protocol", "http" }
- });
+ },
+ uniqueId: "test");
var output = new TagHelperOutput(
expectedTagName,
attributes: new Dictionary
@@ -84,7 +85,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
// Arrange
var context = new TagHelperContext(
- allAttributes: new Dictionary());
+ allAttributes: new Dictionary(), uniqueId: "test");
var output = new TagHelperOutput(
"a",
attributes: new Dictionary(),
@@ -118,7 +119,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
// Arrange
var context = new TagHelperContext(
- allAttributes: new Dictionary());
+ allAttributes: new Dictionary(), uniqueId: "test");
var output = new TagHelperOutput(
"a",
attributes: new Dictionary(),
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
index 82858c9991..9b604ff1f8 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
@@ -32,7 +32,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "asp-controller", "home" },
{ "method", "post" },
{ "asp-anti-forgery", true }
- });
+ },
+ uniqueId: "test");
var output = new TagHelperOutput(
expectedTagName,
attributes: new Dictionary
@@ -91,7 +92,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
// Arrange
var viewContext = CreateViewContext();
var context = new TagHelperContext(
- allAttributes: new Dictionary());
+ allAttributes: new Dictionary(), uniqueId: "test");
var output = new TagHelperOutput(
"form",
attributes: new Dictionary(),
@@ -132,7 +133,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
// Arrange
var testViewContext = CreateViewContext();
var context = new TagHelperContext(
- allAttributes: new Dictionary());
+ allAttributes: new Dictionary(), uniqueId: "test");
var expectedAttribute = new KeyValuePair("asp-ROUTEE-NotRoute", "something");
var output = new TagHelperOutput(
"form",
@@ -193,7 +194,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
// Arrange
var viewContext = CreateViewContext();
var context = new TagHelperContext(
- allAttributes: new Dictionary());
+ allAttributes: new Dictionary(), uniqueId: "test");
var output = new TagHelperOutput(
"form",
attributes: new Dictionary(),
@@ -243,7 +244,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
allAttributes: new Dictionary()
{
{ "METhod", "POST" }
- });
+ },
+ uniqueId: "test");
// Act
await formTagHelper.ProcessAsync(context, output);
@@ -284,7 +286,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "aCTiON", "my-action" },
},
content: string.Empty);
- var context = new TagHelperContext(allAttributes: new Dictionary());
+ var context = new TagHelperContext(allAttributes: new Dictionary(), uniqueId: "test");
// Act
await formTagHelper.ProcessAsync(context, output);
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
index 4124a5a7cd..ac62d6a1e7 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
@@ -92,7 +92,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedContent = "original content";
var expectedTagName = "not-input";
- var context = new TagHelperContext(new Dictionary());
+ var context = new TagHelperContext(new Dictionary(), uniqueId: "test");
var originalAttributes = new Dictionary
{
{ "class", "form-control" },
@@ -137,7 +137,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var originalTagName = "not-input";
var expectedContent = originalContent + "";
- var context = new TagHelperContext(allAttributes: new Dictionary());
+ var context = new TagHelperContext(allAttributes: new Dictionary(), uniqueId: "test");
var originalAttributes = new Dictionary
{
{ "class", "form-control" },
@@ -217,7 +217,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedContent = "something";
var expectedTagName = "not-input";
- var context = new TagHelperContext(allAttributes: contextAttributes);
+ var context = new TagHelperContext(allAttributes: contextAttributes, uniqueId: "test");
var originalAttributes = new Dictionary
{
{ "class", "form-control" },
@@ -294,7 +294,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedContent = "something";
var expectedTagName = "not-input";
- var context = new TagHelperContext(allAttributes: contextAttributes);
+ var context = new TagHelperContext(allAttributes: contextAttributes, uniqueId: "test");
var originalAttributes = new Dictionary
{
{ "class", "form-control" },
@@ -368,7 +368,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedContent = "something";
var expectedTagName = "not-input";
- var context = new TagHelperContext(allAttributes: contextAttributes);
+ var context = new TagHelperContext(allAttributes: contextAttributes, uniqueId: "test");
var originalAttributes = new Dictionary
{
{ "class", "form-control" },
@@ -457,7 +457,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedContent = "something";
var expectedTagName = "not-input";
- var context = new TagHelperContext(allAttributes: contextAttributes);
+ var context = new TagHelperContext(allAttributes: contextAttributes, uniqueId: "test");
var originalAttributes = new Dictionary
{
{ "class", "form-control" },
@@ -515,7 +515,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedContent = "original content";
var expectedTagName = "input";
- var tagHelperContext = new TagHelperContext(new Dictionary());
+ var tagHelperContext = new TagHelperContext(new Dictionary(), uniqueId: "test");
var output = new TagHelperOutput(expectedTagName, expectedAttributes, expectedContent)
{
SelfClosing = false,
@@ -563,7 +563,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedMessage = "Unable to format without a 'asp-for' expression for . 'asp-format' must " +
"be null if 'asp-for' is null.";
- var tagHelperContext = new TagHelperContext(contextAttributes);
+ var tagHelperContext = new TagHelperContext(contextAttributes, uniqueId: "test");
var output = new TagHelperOutput(expectedTagName, originalAttributes, content);
var tagHelper = new InputTagHelper
{
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs
index 892b793511..ebce192391 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs
@@ -113,7 +113,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
For = modelExpression,
};
- var tagHelperContext = new TagHelperContext(allAttributes: new Dictionary());
+ var tagHelperContext = new TagHelperContext(allAttributes: new Dictionary(), uniqueId: "test");
var htmlAttributes = new Dictionary
{
{ "class", "form-control" },
@@ -153,7 +153,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var modelExpression = new ModelExpression(nameof(Model.Text), metadata);
var tagHelper = new LabelTagHelper();
- var tagHelperContext = new TagHelperContext(allAttributes: new Dictionary());
+ var tagHelperContext = new TagHelperContext(allAttributes: new Dictionary(), uniqueId: "test");
var output = new TagHelperOutput(expectedTagName, expectedAttributes, expectedContent);
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs
index 72d83f837f..24ceea9704 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs
@@ -136,7 +136,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "selected", selected },
{ "value", value },
};
- var tagHelperContext = new TagHelperContext(contextAttributes);
+ var tagHelperContext = new TagHelperContext(contextAttributes, uniqueId: "test");
var output = new TagHelperOutput(expectedTagName, originalAttributes, originalContent)
{
SelfClosing = false,
@@ -188,7 +188,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "selected", selected },
{ "value", value },
};
- var tagHelperContext = new TagHelperContext(contextAttributes);
+ var tagHelperContext = new TagHelperContext(contextAttributes, uniqueId: "test");
var output = new TagHelperOutput(originalTagName, originalAttributes, originalContent)
{
SelfClosing = false,
@@ -235,7 +235,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "selected", selected },
{ "value", value },
};
- var tagHelperContext = new TagHelperContext(contextAttributes);
+ var tagHelperContext = new TagHelperContext(contextAttributes, uniqueId: "test");
var output = new TagHelperOutput(originalTagName, originalAttributes, originalContent)
{
SelfClosing = false,
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs
index b19e01f6b0..9793d7c088 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs
@@ -182,7 +182,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var metadata = metadataProvider.GetMetadataForProperty(modelAccessor, containerType, propertyName: "Text");
var modelExpression = new ModelExpression(nameAndId.Name, metadata);
- var tagHelperContext = new TagHelperContext(new Dictionary());
+ var tagHelperContext = new TagHelperContext(new Dictionary(), uniqueId: "test");
var output = new TagHelperOutput(expectedTagName, originalAttributes, expectedContent)
{
SelfClosing = true,
@@ -252,7 +252,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var metadata = metadataProvider.GetMetadataForProperty(modelAccessor, containerType, propertyName: "Text");
var modelExpression = new ModelExpression(nameAndId.Name, metadata);
- var tagHelperContext = new TagHelperContext(new Dictionary());
+ var tagHelperContext = new TagHelperContext(new Dictionary(), uniqueId: "test");
var output = new TagHelperOutput(expectedTagName, originalAttributes, originalContent)
{
SelfClosing = true,
@@ -312,7 +312,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var propertyName = "Property1";
var expectedTagName = "select";
- var tagHelperContext = new TagHelperContext(contextAttributes);
+ var tagHelperContext = new TagHelperContext(contextAttributes, uniqueId: "test");
var output = new TagHelperOutput(expectedTagName, originalAttributes, content);
// TODO: https://github.com/aspnet/Mvc/issues/1253
@@ -376,7 +376,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var propertyName = "Property1";
var tagName = "select";
- var tagHelperContext = new TagHelperContext(contextAttributes);
+ var tagHelperContext = new TagHelperContext(contextAttributes, uniqueId: "test");
var output = new TagHelperOutput(tagName, originalAttributes, content);
var metadataProvider = new EmptyModelMetadataProvider();
@@ -440,7 +440,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedContent = "original content";
var expectedTagName = "select";
- var tagHelperContext = new TagHelperContext(contextAttributes);
+ var tagHelperContext = new TagHelperContext(contextAttributes, uniqueId: "test");
var output = new TagHelperOutput(expectedTagName, originalAttributes, expectedContent)
{
SelfClosing = true,
@@ -471,7 +471,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedTagName = "select";
var expectedMessage = "Cannot determine body for