From 0ae83a25e9b8b7bf842413efe848ed46cb847a75 Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Mon, 19 Oct 2015 12:54:51 -0700 Subject: [PATCH] React to aspnet/Razor#571. - Changed all `GetChildContentAsync` calls to come from `TagHelperOutput` instead of `TagHelperContext`. - Updated `ReaderAtEndOfFormTagHelper` to properly detect changes inside of a `Form`s body by calling the `Init` method. - Add test to `RenderAtEndOfFormTagHelperTest`. aspnet/Razor#571 --- .../CacheTagHelper.cs | 4 +- .../LabelTagHelper.cs | 2 +- .../OptionTagHelper.cs | 2 +- .../RenderAtEndOfFormTagHelper.cs | 18 ++- .../ValidationMessageTagHelper.cs | 2 +- .../RazorPageTest.cs | 15 ++- .../TagHelpers/UrlResolutionTagHelperTest.cs | 24 ++-- .../AnchorTagHelperTest.cs | 42 +++--- .../CacheTagHelperTest.cs | 82 +++++++----- .../EnvironmentTagHelperTest.cs | 38 +++--- .../FormTagHelperTest.cs | 81 ++++++------ .../ImageTagHelperTest.cs | 23 ++-- .../InputTagHelperTest.cs | 120 ++++++++++-------- .../Internal/AttributeMatcherTest.cs | 8 +- .../LabelTagHelperTest.cs | 14 +- .../LinkTagHelperTest.cs | 17 +-- .../OptionTagHelperTest.cs | 33 +++-- .../RenderAtEndOfFormTagHelperTest.cs | 76 +++++++++-- .../ScriptTagHelperTest.cs | 13 +- .../SelectTagHelperTest.cs | 38 ++++-- .../TagHelperOutputExtensionsTest.cs | 117 +++++++++-------- .../TextAreaTagHelperTest.cs | 16 ++- .../ValidationMessageTagHelperTest.cs | 60 ++++----- .../ValidationSummaryTagHelperTest.cs | 46 +++---- .../TagHelpers/HiddenTagHelper.cs | 2 +- .../TagHelpers/RepeatContentTagHelper.cs | 2 +- .../TagHelpers/AutoLinkerTagHelper.cs | 2 +- .../TagCloudViewComponentTagHelper.cs | 4 + 28 files changed, 524 insertions(+), 377 deletions(-) diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/CacheTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/CacheTagHelper.cs index be824387be..526b1cb1d1 100644 --- a/src/Microsoft.AspNet.Mvc.TagHelpers/CacheTagHelper.cs +++ b/src/Microsoft.AspNet.Mvc.TagHelpers/CacheTagHelper.cs @@ -158,7 +158,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers // created within this scope get copied to this scope. using (var link = MemoryCache.CreateLinkingScope()) { - result = await context.GetChildContentAsync(); + result = await output.GetChildContentAsync(); MemoryCache.Set(key, result, GetMemoryCacheEntryOptions(link)); } @@ -173,7 +173,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers } else { - result = await context.GetChildContentAsync(); + result = await output.GetChildContentAsync(); output.Content.SetContent(result); } } diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs index 5b51078b49..63939b5391 100644 --- a/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs +++ b/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs @@ -77,7 +77,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers // if (!output.IsContentModified) { - var childContent = await context.GetChildContentAsync(); + var childContent = await output.GetChildContentAsync(); if (childContent.IsWhiteSpace) { diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs index f930fecd65..97d8b627d6 100644 --- a/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs +++ b/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs @@ -111,7 +111,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers } else { - var childContent = await context.GetChildContentAsync(); + var childContent = await output.GetChildContentAsync(); selected = encodedValues.Contains(childContent.GetContent()); } diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs index 47a36cc42c..1716b83c87 100644 --- a/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs +++ b/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs @@ -24,6 +24,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers [ViewContext] public ViewContext ViewContext { get; set; } + /// + public override void Init(TagHelperContext context) + { + // Push the new FormContext. + ViewContext.FormContext = new FormContext + { + CanRenderAtEndOfForm = true + }; + } + /// public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { @@ -37,13 +47,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers throw new ArgumentNullException(nameof(output)); } - // Push the new FormContext. - ViewContext.FormContext = new FormContext - { - CanRenderAtEndOfForm = true - }; - - await context.GetChildContentAsync(); + await output.GetChildContentAsync(); var formContext = ViewContext.FormContext; if (formContext.HasEndOfFormContent) diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs index 641b5caf99..3204c83405 100644 --- a/src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs +++ b/src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs @@ -79,7 +79,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers // if (!output.IsContentModified) { - var childContent = await context.GetChildContentAsync(); + var childContent = await output.GetChildContentAsync(); if (childContent.IsWhiteSpace) { diff --git a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs index de683c1cd5..58eeffdc69 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs @@ -1663,7 +1663,10 @@ namespace Microsoft.AspNet.Mvc.Razor }, startTagHelperWritingScope: () => { }, endTagHelperWritingScope: () => defaultTagHelperContent); - tagHelperExecutionContext.Output = new TagHelperOutput("p", new TagHelperAttributeList()); + tagHelperExecutionContext.Output = new TagHelperOutput( + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); if (childContentRetrieved) { await tagHelperExecutionContext.GetChildContentAsync(useCachedResult: true); @@ -1695,7 +1698,10 @@ namespace Microsoft.AspNet.Mvc.Razor executeChildContentAsync: () => { return Task.FromResult(result: true); }, startTagHelperWritingScope: () => { }, endTagHelperWritingScope: () => new DefaultTagHelperContent()); - tagHelperExecutionContext.Output = new TagHelperOutput("p", new TagHelperAttributeList()); + tagHelperExecutionContext.Output = new TagHelperOutput( + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); tagHelperExecutionContext.Output.Content.AppendEncoded("Hello World!"); // Act @@ -1749,7 +1755,10 @@ namespace Microsoft.AspNet.Mvc.Razor string postContent, string postElement) { - var output = new TagHelperOutput(tagName, attributes) + var output = new TagHelperOutput( + tagName, + attributes, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())) { TagMode = tagMode }; diff --git a/test/Microsoft.AspNet.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs index 34b653a321..171438ba01 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs @@ -52,7 +52,8 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers attributes: new TagHelperAttributeList { { "href", url } - }); + }, + getChildContentAsync: _ => Task.FromResult(null)); var urlHelperMock = new Mock(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny())) @@ -63,8 +64,7 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); @@ -108,7 +108,8 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers attributes: new TagHelperAttributeList { { "href", url } - }); + }, + getChildContentAsync: _ => Task.FromResult(null)); var urlHelperMock = new Mock(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny())) @@ -119,8 +120,7 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); @@ -141,15 +141,15 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers attributes: new TagHelperAttributeList { { "href", true } - }); + }, + getChildContentAsync: _ => Task.FromResult(null)); var tagHelper = new UrlResolutionTagHelper(urlHelper: null, htmlEncoder: null); var context = new TagHelperContext( allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act tagHelper.Process(context, tagHelperOutput); @@ -178,7 +178,8 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers attributes: new TagHelperAttributeList { { "href", new HtmlString(relativeUrl) } - }); + }, + getChildContentAsync: _ => Task.FromResult(null)); var urlHelperMock = new Mock(); urlHelperMock .Setup(urlHelper => urlHelper.Content(It.IsAny())) @@ -189,8 +190,7 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act & Assert var exception = Assert.Throws( diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs index cca8d8b434..99dbb7ece7 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs @@ -37,18 +37,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { "asp-protocol", "http" } }, items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.SetContent("Something Else"); - return Task.FromResult(tagHelperContent); - }); + uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "id", "myanchor" }, + }, + getChildContentAsync: useCachedResult => + { + var tagHelperContent = new DefaultTagHelperContent(); + tagHelperContent.SetContent("Something Else"); + return Task.FromResult(tagHelperContent); }); output.Content.SetContent("Something"); @@ -94,16 +94,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + "a", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - var output = new TagHelperOutput( - "a", - attributes: new TagHelperAttributeList()); output.Content.SetContent(string.Empty); var generator = new Mock(MockBehavior.Strict); @@ -142,16 +142,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + "a", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - var output = new TagHelperOutput( - "a", - attributes: new TagHelperAttributeList()); output.Content.SetContent(string.Empty); var generator = new Mock(); @@ -205,7 +205,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers attributes: new TagHelperAttributeList { { "href", "http://www.contoso.com" } - }); + }, + getChildContentAsync: _ => Task.FromResult(null)); if (propertyName == "asp-route-") { anchorTagHelper.RouteValues.Add("name", "value"); @@ -224,8 +225,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act & Assert var ex = await Assert.ThrowsAsync( @@ -251,7 +251,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers typeof(AnchorTagHelper).GetProperty(propertyName).SetValue(anchorTagHelper, "Home"); var output = new TagHelperOutput( "a", - attributes: new TagHelperAttributeList()); + attributes: new TagHelperAttributeList(), + getChildContentAsync: _ => Task.FromResult(null)); var expectedErrorMessage = "Cannot determine an 'href' attribute for . An with a specified " + "'asp-route' must not have an 'asp-action' or 'asp-controller' attribute."; @@ -259,8 +260,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act & Assert var ex = await Assert.ThrowsAsync( diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/CacheTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/CacheTagHelperTest.cs index f2d846565d..632e0ce743 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/CacheTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/CacheTagHelperTest.cs @@ -259,8 +259,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers object cacheResult; cache.Setup(c => c.TryGetValue(It.IsAny(), out cacheResult)) .Returns(false); - var tagHelperContext = GetTagHelperContext(id, childContent); - var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList()); + var tagHelperContext = GetTagHelperContext(id); + var tagHelperOutput = GetTagHelperOutput( + attributes: new TagHelperAttributeList(), + childContent: childContent); var cacheTagHelper = new CacheTagHelper(cache.Object) { ViewContext = GetViewContext(), @@ -298,8 +300,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers object cacheResult; cache.Setup(c => c.TryGetValue(It.IsAny(), out cacheResult)) .Returns(false); - var tagHelperContext = GetTagHelperContext(id, childContent); - var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList()); + var tagHelperContext = GetTagHelperContext(id); + var tagHelperOutput = GetTagHelperOutput( + attributes: new TagHelperAttributeList(), + childContent: childContent); var cacheTagHelper = new CacheTagHelper(cache.Object) { ViewContext = GetViewContext(), @@ -328,8 +332,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var id = "unique-id"; var childContent = "original-child-content"; var cache = new MemoryCache(new MemoryCacheOptions()); - var tagHelperContext1 = GetTagHelperContext(id, childContent); - var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList()); + var tagHelperContext1 = GetTagHelperContext(id); + var tagHelperOutput1 = GetTagHelperOutput( + attributes: new TagHelperAttributeList(), + childContent: childContent); var cacheTagHelper1 = new CacheTagHelper(cache) { VaryByQuery = "key1,key2", @@ -348,8 +354,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers Assert.Equal(childContent, tagHelperOutput1.Content.GetContent()); // Arrange - 2 - var tagHelperContext2 = GetTagHelperContext(id, "different-content"); - var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList()); + var tagHelperContext2 = GetTagHelperContext(id); + var tagHelperOutput2 = GetTagHelperOutput( + attributes: new TagHelperAttributeList(), + childContent: "different-content"); var cacheTagHelper2 = new CacheTagHelper(cache) { VaryByQuery = "key1,key2", @@ -375,8 +383,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var id = "unique-id"; var childContent1 = "original-child-content"; var cache = new MemoryCache(new MemoryCacheOptions()); - var tagHelperContext1 = GetTagHelperContext(id, childContent1); - var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); + var tagHelperContext1 = GetTagHelperContext(id); + var tagHelperOutput1 = GetTagHelperOutput(childContent: childContent1); tagHelperOutput1.PreContent.Append(""); tagHelperOutput1.PostContent.SetContent(""); var cacheTagHelper1 = new CacheTagHelper(cache) @@ -397,8 +405,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers // Arrange - 2 var childContent2 = "different-content"; - var tagHelperContext2 = GetTagHelperContext(id, childContent2); - var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); + var tagHelperContext2 = GetTagHelperContext(id); + var tagHelperOutput2 = GetTagHelperOutput(childContent: childContent2); tagHelperOutput2.PreContent.SetContent(""); tagHelperOutput2.PostContent.SetContent(""); var cacheTagHelper2 = new CacheTagHelper(cache) @@ -565,8 +573,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers clock.SetupGet(p => p.UtcNow) .Returns(() => currentTime); var cache = new MemoryCache(new MemoryCacheOptions { Clock = clock.Object }); - var tagHelperContext1 = GetTagHelperContext(id, childContent1); - var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); + var tagHelperContext1 = GetTagHelperContext(id); + var tagHelperOutput1 = GetTagHelperOutput(childContent: childContent1); tagHelperOutput1.PreContent.SetContent(""); tagHelperOutput1.PostContent.SetContent(""); var cacheTagHelper1 = new CacheTagHelper(cache) @@ -586,8 +594,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers // Arrange - 2 var childContent2 = "different-content"; - var tagHelperContext2 = GetTagHelperContext(id, childContent2); - var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); + var tagHelperContext2 = GetTagHelperContext(id); + var tagHelperOutput2 = GetTagHelperOutput(childContent: childContent2); tagHelperOutput2.PreContent.SetContent(""); tagHelperOutput2.PostContent.SetContent(""); var cacheTagHelper2 = new CacheTagHelper(cache) @@ -618,8 +626,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers clock.SetupGet(p => p.UtcNow) .Returns(() => currentTime); var cache = new MemoryCache(new MemoryCacheOptions { Clock = clock.Object }); - var tagHelperContext1 = GetTagHelperContext(id, childContent1); - var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); + var tagHelperContext1 = GetTagHelperContext(id); + var tagHelperOutput1 = GetTagHelperOutput(childContent: childContent1); tagHelperOutput1.PreContent.SetContent(""); tagHelperOutput1.PostContent.SetContent(""); var cacheTagHelper1 = new CacheTagHelper(cache) @@ -640,8 +648,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers // Arrange - 2 currentTime = currentTime.AddMinutes(5).AddSeconds(2); var childContent2 = "different-content"; - var tagHelperContext2 = GetTagHelperContext(id, childContent2); - var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); + var tagHelperContext2 = GetTagHelperContext(id); + var tagHelperOutput2 = GetTagHelperOutput(childContent: childContent2); tagHelperOutput2.PreContent.SetContent(""); tagHelperOutput2.PostContent.SetContent(""); var cacheTagHelper2 = new CacheTagHelper(cache) @@ -671,8 +679,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers clock.SetupGet(p => p.UtcNow) .Returns(() => currentTime); var cache = new MemoryCache(new MemoryCacheOptions { Clock = clock.Object }); - var tagHelperContext1 = GetTagHelperContext(id, childContent1); - var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); + var tagHelperContext1 = GetTagHelperContext(id); + var tagHelperOutput1 = GetTagHelperOutput(childContent: childContent1); tagHelperOutput1.PreContent.SetContent(""); tagHelperOutput1.PostContent.SetContent(""); var cacheTagHelper1 = new CacheTagHelper(cache) @@ -693,8 +701,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers // Arrange - 2 currentTime = currentTime.AddSeconds(35); var childContent2 = "different-content"; - var tagHelperContext2 = GetTagHelperContext(id, childContent2); - var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); + var tagHelperContext2 = GetTagHelperContext(id); + var tagHelperOutput2 = GetTagHelperOutput(childContent: childContent2); tagHelperOutput2.PreContent.SetContent(""); tagHelperOutput2.PostContent.SetContent(""); var cacheTagHelper2 = new CacheTagHelper(cache) @@ -727,11 +735,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var tagHelperContext = new TagHelperContext( allAttributes: new TagHelperAttributeList(), items: new Dictionary(), - uniqueId: id, + uniqueId: id); + var tagHelperOutput = new TagHelperOutput( + "cache", + new TagHelperAttributeList { { "attr", "value" } }, getChildContentAsync: useCachedResult => { TagHelperContent tagHelperContent; - if(!cache.TryGetValue("key1", out tagHelperContent)) + if (!cache.TryGetValue("key1", out tagHelperContent)) { tagHelperContent = expectedContent; cache.Set("key1", tagHelperContent, cacheEntryOptions); @@ -739,7 +750,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers return Task.FromResult(tagHelperContent); }); - var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } }); tagHelperOutput.PreContent.SetContent(""); tagHelperOutput.PostContent.SetContent(""); var cacheTagHelper = new CacheTagHelper(cache) @@ -778,14 +788,24 @@ namespace Microsoft.AspNet.Mvc.TagHelpers new HtmlHelperOptions()); } - private static TagHelperContext GetTagHelperContext( - string id = "testid", - string childContent = "some child content") + private static TagHelperContext GetTagHelperContext(string id = "testid") { return new TagHelperContext( allAttributes: new TagHelperAttributeList(), items: new Dictionary(), - uniqueId: id, + uniqueId: id); + } + + private static TagHelperOutput GetTagHelperOutput( + string tagName = "cache", + TagHelperAttributeList attributes = null, + string childContent = "some child content") + { + attributes = attributes ?? new TagHelperAttributeList { { "attr", "value" } }; + + return new TagHelperOutput( + tagName, + attributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/EnvironmentTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/EnvironmentTagHelperTest.cs index 17cf307ec9..1f1aedbe47 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/EnvironmentTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/EnvironmentTagHelperTest.cs @@ -80,10 +80,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers.Test { // Arrange var content = "content"; - var context = MakeTagHelperContext( - attributes: new TagHelperAttributeList { { "names", namesAttribute } }, - content: content); - var output = MakeTagHelperOutput("environment"); + var context = MakeTagHelperContext(attributes: new TagHelperAttributeList { { "names", namesAttribute } }); + var output = MakeTagHelperOutput("environment", childContent: content); var hostingEnvironment = new Mock(); hostingEnvironment.SetupProperty(h => h.EnvironmentName); hostingEnvironment.Object.EnvironmentName = environmentName; @@ -108,9 +106,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers.Test // Arrange var content = "content"; var context = MakeTagHelperContext( - attributes: new TagHelperAttributeList { { "names", namesAttribute } }, - content: content); - var output = MakeTagHelperOutput("environment"); + attributes: new TagHelperAttributeList { { "names", namesAttribute } }); + var output = MakeTagHelperOutput("environment", childContent: content); var hostingEnvironment = new Mock(); hostingEnvironment.SetupProperty(h => h.EnvironmentName); hostingEnvironment.Object.EnvironmentName = environmentName; @@ -127,29 +124,32 @@ namespace Microsoft.AspNet.Mvc.TagHelpers.Test Assert.False(output.IsContentModified); } - private TagHelperContext MakeTagHelperContext( - TagHelperAttributeList attributes = null, - string content = null) + private TagHelperContext MakeTagHelperContext(TagHelperAttributeList attributes = null) { attributes = attributes ?? new TagHelperAttributeList(); return new TagHelperContext( attributes, items: new Dictionary(), - uniqueId: Guid.NewGuid().ToString("N"), - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.SetContent(content); - return Task.FromResult(tagHelperContent); - }); + uniqueId: Guid.NewGuid().ToString("N")); } - private TagHelperOutput MakeTagHelperOutput(string tagName, TagHelperAttributeList attributes = null) + private TagHelperOutput MakeTagHelperOutput( + string tagName, + TagHelperAttributeList attributes = null, + string childContent = null) { attributes = attributes ?? new TagHelperAttributeList(); - return new TagHelperOutput(tagName, attributes); + return new TagHelperOutput( + tagName, + attributes, + getChildContentAsync: useCachedResult => + { + var tagHelperContent = new DefaultTagHelperContent(); + tagHelperContent.SetContent(childContent); + return Task.FromResult(tagHelperContent); + }); } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs index 20ce080b42..cd2eb69a66 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs @@ -42,18 +42,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { "asp-antiforgery", true } }, items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.SetContent("Something Else"); - return Task.FromResult(tagHelperContent); - }); + uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "id", "myform" }, + }, + getChildContentAsync: useCachedResult => + { + var tagHelperContent = new DefaultTagHelperContent(); + tagHelperContent.SetContent("Something Else"); + return Task.FromResult(tagHelperContent); }); output.PostContent.SetContent("Something"); var urlHelper = new Mock(); @@ -111,16 +111,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + "form", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - var output = new TagHelperOutput( - "form", - attributes: new TagHelperAttributeList()); var generator = new Mock(MockBehavior.Strict); generator .Setup(mock => mock.GenerateForm( @@ -162,17 +162,17 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var expectedAttribute = new TagHelperAttribute("asp-ROUTEE-NotRoute", "something"); + var output = new TagHelperOutput( + "form", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - var expectedAttribute = new TagHelperAttribute("asp-ROUTEE-NotRoute", "something"); - var output = new TagHelperOutput( - "form", - attributes: new TagHelperAttributeList()); output.Attributes.Add(expectedAttribute); var generator = new Mock(MockBehavior.Strict); @@ -234,16 +234,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + "form", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - var output = new TagHelperOutput( - "form", - attributes: new TagHelperAttributeList()); var generator = new Mock(MockBehavior.Strict); generator .Setup(mock => mock.GenerateForm( @@ -285,16 +285,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + "form", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - var output = new TagHelperOutput( - "form", - attributes: new TagHelperAttributeList()); var generator = new Mock(MockBehavior.Strict); generator .Setup(mock => mock.GenerateRouteForm( @@ -350,22 +350,23 @@ namespace Microsoft.AspNet.Mvc.TagHelpers ViewContext = viewContext, }; - var output = new TagHelperOutput("form", - attributes: new TagHelperAttributeList - { - { "aCTiON", "my-action" }, - }); - var context = new TagHelperContext( - allAttributes: new ReadOnlyTagHelperAttributeList( - Enumerable.Empty()), - items: new Dictionary(), - uniqueId: "test", + var output = new TagHelperOutput( + tagName: "form", + attributes: new TagHelperAttributeList + { + { "aCTiON", "my-action" }, + }, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); + var context = new TagHelperContext( + allAttributes: new ReadOnlyTagHelperAttributeList( + Enumerable.Empty()), + items: new Dictionary(), + uniqueId: "test"); // Act @@ -394,7 +395,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers attributes: new TagHelperAttributeList { { "action", "my-action" }, - }); + }, + getChildContentAsync: _ => Task.FromResult(null)); if (propertyName == "asp-route-") { formTagHelper.RouteValues.Add("name", "value"); @@ -412,8 +414,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act & Assert var ex = await Assert.ThrowsAsync( @@ -435,7 +436,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers typeof(FormTagHelper).GetProperty(propertyName).SetValue(formTagHelper, "Home"); var output = new TagHelperOutput( "form", - attributes: new TagHelperAttributeList()); + attributes: new TagHelperAttributeList(), + getChildContentAsync: _ => Task.FromResult(null)); var expectedErrorMessage = "Cannot determine an 'action' attribute for
. A with a specified " + "'asp-route' must not have an 'asp-action' or 'asp-controller' attribute."; @@ -443,8 +445,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act & Assert var ex = await Assert.ThrowsAsync( diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ImageTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ImageTagHelperTest.cs index 7204c519ce..106a8b055d 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ImageTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ImageTagHelperTest.cs @@ -51,7 +51,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { "alt", new HtmlString("Testing") }, { "src", srcOutput }, }; - var output = new TagHelperOutput("img", outputAttributes); + var output = new TagHelperOutput( + "img", + outputAttributes, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var hostingEnvironment = MakeHostingEnvironment(); var viewContext = MakeViewContext(); var urlHelper = new Mock(); @@ -273,20 +276,22 @@ namespace Microsoft.AspNet.Mvc.TagHelpers return new TagHelperContext( attributes, items: new Dictionary(), - uniqueId: Guid.NewGuid().ToString("N"), - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.SetContent(default(string)); - return Task.FromResult(tagHelperContent); - }); + uniqueId: Guid.NewGuid().ToString("N")); } private static TagHelperOutput MakeImageTagHelperOutput(TagHelperAttributeList attributes) { attributes = attributes ?? new TagHelperAttributeList(); - return new TagHelperOutput("img", attributes); + return new TagHelperOutput( + "img", + attributes, + getChildContentAsync: useCachedResult => + { + var tagHelperContent = new DefaultTagHelperContent(); + tagHelperContent.SetContent(default(string)); + return Task.FromResult(tagHelperContent); + }); } private static IHostingEnvironment MakeHostingEnvironment() diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs index 182b529b6e..ad3c0cd357 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs @@ -91,9 +91,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => Task.FromResult(result: null)); - var output = new TagHelperOutput(originalTagName, outputAttributes) + uniqueId: "test"); + var output = new TagHelperOutput( + originalTagName, + outputAttributes, + getChildContentAsync: useCachedResult => Task.FromResult(result: null)) { TagMode = TagMode.SelfClosing, }; @@ -195,18 +197,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var originalAttributes = new TagHelperAttributeList + { + { "class", "form-control" }, + }; + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); - }); - var originalAttributes = new TagHelperAttributeList - { - { "class", "form-control" }, - }; - var output = new TagHelperOutput(expectedTagName, originalAttributes) + }) { TagMode = TagMode.StartTagOnly, }; @@ -257,18 +261,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var originalAttributes = new TagHelperAttributeList + { + { "class", "form-control" }, + }; + var output = new TagHelperOutput( + originalTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); - }); - var originalAttributes = new TagHelperAttributeList - { - { "class", "form-control" }, - }; - var output = new TagHelperOutput(originalTagName, originalAttributes) + }) { TagMode = TagMode.SelfClosing, }; @@ -354,18 +360,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var context = new TagHelperContext( allAttributes: contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var originalAttributes = new TagHelperAttributeList + { + { "class", "form-control" }, + }; + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); - }); - var originalAttributes = new TagHelperAttributeList - { - { "class", "form-control" }, - }; - var output = new TagHelperOutput(expectedTagName, originalAttributes) + }) { TagMode = TagMode.StartTagOnly, }; @@ -453,18 +461,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var context = new TagHelperContext( allAttributes: contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var originalAttributes = new TagHelperAttributeList + { + { "class", "form-control" }, + }; + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); - }); - var originalAttributes = new TagHelperAttributeList - { - { "class", "form-control" }, - }; - var output = new TagHelperOutput(expectedTagName, originalAttributes) + }) { TagMode = TagMode.StartTagOnly, }; @@ -549,18 +559,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var context = new TagHelperContext( allAttributes: contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var originalAttributes = new TagHelperAttributeList + { + { "class", "form-control" }, + }; + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); - }); - var originalAttributes = new TagHelperAttributeList - { - { "class", "form-control" }, - }; - var output = new TagHelperOutput(expectedTagName, originalAttributes) + }) { TagMode = TagMode.StartTagOnly, }; @@ -656,18 +668,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var context = new TagHelperContext( allAttributes: contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var originalAttributes = new TagHelperAttributeList + { + { "class", "form-control" }, + }; + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); - }); - var originalAttributes = new TagHelperAttributeList - { - { "class", "form-control" }, - }; - var output = new TagHelperOutput(expectedTagName, originalAttributes) + }) { TagMode = TagMode.StartTagOnly, }; @@ -774,10 +788,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => Task.FromResult(new DefaultTagHelperContent())); + uniqueId: "test"); - var output = new TagHelperOutput(expectedTagName, attributes: new TagHelperAttributeList()) + var output = new TagHelperOutput( + expectedTagName, + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())) { TagMode = TagMode.SelfClosing, }; @@ -855,10 +871,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => Task.FromResult(new DefaultTagHelperContent())); + uniqueId: "test"); - var output = new TagHelperOutput(expectedTagName, attributes: new TagHelperAttributeList()) + var output = new TagHelperOutput( + expectedTagName, + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())) { TagMode = TagMode.SelfClosing, }; diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/Internal/AttributeMatcherTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/Internal/AttributeMatcherTest.cs index 58e4a78b9b..74377eac9b 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/Internal/AttributeMatcherTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/Internal/AttributeMatcherTest.cs @@ -128,13 +128,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers.Internal return new TagHelperContext( attributes, items: new Dictionary(), - uniqueId: Guid.NewGuid().ToString("N"), - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.Append(content); - return Task.FromResult((TagHelperContent)tagHelperContent); - }); + uniqueId: Guid.NewGuid().ToString("N")); } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs index fbea9d49c6..2b401b92ba 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs @@ -194,18 +194,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var htmlAttributes = new TagHelperAttributeList + { + { "class", "form-control" }, + }; + var output = new TagHelperOutput( + expectedTagName, + htmlAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.AppendEncoded(tagHelperOutputContent.OriginalChildContent); return Task.FromResult(tagHelperContent); }); - var htmlAttributes = new TagHelperAttributeList - { - { "class", "form-control" }, - }; - var output = new TagHelperOutput(expectedTagName, htmlAttributes); output.PreContent.AppendEncoded(expectedPreContent); output.PostContent.AppendEncoded(expectedPostContent); diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LinkTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LinkTagHelperTest.cs index 1ed2ec74d2..2e13ff60a9 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LinkTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LinkTagHelperTest.cs @@ -831,29 +831,24 @@ namespace Microsoft.AspNet.Mvc.TagHelpers return viewContext; } - private static TagHelperContext MakeTagHelperContext( - TagHelperAttributeList attributes = null, - string content = null) + private static TagHelperContext MakeTagHelperContext(TagHelperAttributeList attributes = null) { attributes = attributes ?? new TagHelperAttributeList(); return new TagHelperContext( attributes, items: new Dictionary(), - uniqueId: Guid.NewGuid().ToString("N"), - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.SetContent(content); - return Task.FromResult(tagHelperContent); - }); + uniqueId: Guid.NewGuid().ToString("N")); } private static TagHelperOutput MakeTagHelperOutput(string tagName, TagHelperAttributeList attributes = null) { attributes = attributes ?? new TagHelperAttributeList(); - return new TagHelperOutput(tagName, attributes); + return new TagHelperOutput( + tagName, + attributes, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); } private static IHostingEnvironment MakeHostingEnvironment() diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs index f339fd2aca..f236441f0a 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs @@ -398,15 +398,17 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var tagHelperContext = new TagHelperContext( contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + + var output = new TagHelperOutput( + expectedTagHelperOutput.TagName, + originalAttributes, getChildContentAsync: useCachedResult => { // GetChildContentAsync should not be invoked since we are setting the content below. Assert.True(false); return Task.FromResult(null); - }); - - var output = new TagHelperOutput(expectedTagHelperOutput.TagName, originalAttributes) + }) { TagMode = TagMode.StartTagAndEndTag }; @@ -467,14 +469,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var tagHelperContext = new TagHelperContext( contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + originalTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent(originalContent); return Task.FromResult(tagHelperContent); - }); - var output = new TagHelperOutput(originalTagName, originalAttributes) + }) { TagMode = TagMode.StartTagAndEndTag, }; @@ -528,15 +532,17 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var tagHelperContext = new TagHelperContext( contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + + var output = new TagHelperOutput( + originalTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent(originalContent); return Task.FromResult(tagHelperContent); - }); - - var output = new TagHelperOutput(originalTagName, originalAttributes) + }) { TagMode = TagMode.StartTagAndEndTag, }; @@ -560,7 +566,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers private static TagHelperOutput GetTagHelperOutput( string tagName, TagHelperAttributeList attributes, string content) { - var tagHelperOutput = new TagHelperOutput(tagName, attributes); + var tagHelperOutput = new TagHelperOutput( + tagName, + attributes, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); tagHelperOutput.Content.SetContent(content); return tagHelperOutput; diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/RenderAtEndOfFormTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/RenderAtEndOfFormTagHelperTest.cs index ede5d10e90..995c809b86 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/RenderAtEndOfFormTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/RenderAtEndOfFormTagHelperTest.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNet.Mvc.Rendering; +using Microsoft.AspNet.Mvc.ViewFeatures; using Microsoft.AspNet.Razor.Runtime.TagHelpers; using Microsoft.AspNet.Razor.TagHelpers; using Xunit; @@ -42,19 +43,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers [Theory] [MemberData(nameof(RenderAtEndOfFormTagHelperData))] - public async Task Process_AddsHiddenInputTag_FromEndOfFormContent(List tagBuilderList, string expectedOutput) + public async Task Process_AddsHiddenInputTag_FromEndOfFormContent( + List tagBuilderList, + string expectedOutput) { // Arrange var viewContext = new ViewContext(); var tagHelperOutput = new TagHelperOutput( tagName: "form", - attributes: new TagHelperAttributeList()); - - var tagHelperContext = new TagHelperContext( - Enumerable.Empty(), - new Dictionary(), - "someId", - (useCachedResult) => + attributes: new TagHelperAttributeList(), + getChildContentAsync: (useCachedResult) => { Assert.True(viewContext.FormContext.CanRenderAtEndOfForm); foreach (var item in tagBuilderList) @@ -65,10 +63,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers return Task.FromResult(new DefaultTagHelperContent()); }); + var tagHelperContext = new TagHelperContext( + Enumerable.Empty(), + new Dictionary(), + "someId"); + var tagHelper = new RenderAtEndOfFormTagHelper { ViewContext = viewContext }; + tagHelper.Init(tagHelperContext); // Act await tagHelper.ProcessAsync(context: tagHelperContext, output: tagHelperOutput); @@ -77,6 +81,46 @@ namespace Microsoft.AspNet.Mvc.TagHelpers Assert.Equal(expectedOutput, tagHelperOutput.PostContent.GetContent()); } + [Theory] + [MemberData(nameof(RenderAtEndOfFormTagHelperData))] + public async Task Process_AddsHiddenInputTag_FromEndOfFormContent_WithCachedBody( + List tagBuilderList, + string expectedOutput) + { + // Arrange + var viewContext = new ViewContext(); + var runner = new TagHelperRunner(); + var tagHelperExecutionContext = new TagHelperExecutionContext( + "form", + TagMode.StartTagAndEndTag, + items: new Dictionary(), + uniqueId: string.Empty, + executeChildContentAsync: () => + { + foreach (var item in tagBuilderList) + { + viewContext.FormContext.EndOfFormContent.Add(item); + } + + return Task.FromResult(true); + }, + startTagHelperWritingScope: () => { }, + endTagHelperWritingScope: () => new DefaultTagHelperContent()); + + // This TagHelper will pre-execute the child content forcing the body to be cached. + tagHelperExecutionContext.Add(new ChildContentInvoker()); + tagHelperExecutionContext.Add(new RenderAtEndOfFormTagHelper + { + ViewContext = viewContext + }); + + // Act + var output = await runner.RunAsync(tagHelperExecutionContext); + + // Assert + Assert.Equal(expectedOutput, output.PostContent.GetContent()); + } + private static TagBuilder GetTagBuilder(string tag, string name, string type, string value, TagRenderMode mode) { var tagBuilder = new TagBuilder(tag); @@ -87,5 +131,21 @@ namespace Microsoft.AspNet.Mvc.TagHelpers return tagBuilder; } + + private class ChildContentInvoker : TagHelper + { + public override int Order + { + get + { + return int.MinValue; + } + } + + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + { + await output.GetChildContentAsync(); + } + } } } diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ScriptTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ScriptTagHelperTest.cs index 0de3ff66c8..0700635b67 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ScriptTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ScriptTagHelperTest.cs @@ -907,13 +907,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers return new TagHelperContext( attributes, items: new Dictionary(), - uniqueId: Guid.NewGuid().ToString("N"), - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.SetContent(content); - return Task.FromResult(tagHelperContent); - }); + uniqueId: Guid.NewGuid().ToString("N")); } private static ViewContext MakeViewContext(string requestPathBase = null) @@ -941,7 +935,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { attributes = attributes ?? new TagHelperAttributeList(); - return new TagHelperOutput(tagName, attributes); + return new TagHelperOutput( + tagName, + attributes, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); } private TagHelperLogger CreateLogger() diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs index a72761a0a6..1ec2351a85 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs @@ -204,14 +204,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); - }); - var output = new TagHelperOutput(expectedTagName, originalAttributes) + }) { TagMode = TagMode.SelfClosing, }; @@ -291,14 +293,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.AppendEncoded("Something"); return Task.FromResult(tagHelperContent); - }); - var output = new TagHelperOutput(expectedTagName, originalAttributes) + }) { TagMode = TagMode.SelfClosing, }; @@ -393,14 +397,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.AppendEncoded("Something"); return Task.FromResult(tagHelperContent); - }); - var output = new TagHelperOutput(expectedTagName, originalAttributes) + }) { TagMode = TagMode.SelfClosing, }; @@ -479,15 +485,17 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var tagHelperContext = new TagHelperContext( contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + + var output = new TagHelperOutput( + expectedTagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - - var output = new TagHelperOutput(expectedTagName, originalAttributes); var metadataProvider = new EmptyModelMetadataProvider(); string model = null; var modelExplorer = metadataProvider.GetModelExplorerForType(typeof(string), model); @@ -558,14 +566,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var tagHelperContext = new TagHelperContext( contextAttributes, items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + tagName, + originalAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - var output = new TagHelperOutput(tagName, originalAttributes); var metadataProvider = new EmptyModelMetadataProvider(); var modelExplorer = metadataProvider.GetModelExplorerForType(modelType, model); var modelExpression = new ModelExpression(propertyName, modelExplorer); diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TagHelperOutputExtensionsTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TagHelperOutputExtensionsTest.cs index 080e080db1..0d1ca65050 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TagHelperOutputExtensionsTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TagHelperOutputExtensionsTest.cs @@ -334,12 +334,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers IEnumerable expectedAttributes) { // Arrange - var output = new TagHelperOutput("p", attributes: new TagHelperAttributeList(outputAttributes)); + var output = new TagHelperOutput( + tagName: "p", + attributes: new TagHelperAttributeList(outputAttributes), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var context = new TagHelperContext( allAttributes, items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => Task.FromResult(result: null)); + uniqueId: "test"); // Act output.CopyHtmlAttribute(attributeNameToCopy, context); @@ -432,12 +434,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers IEnumerable expectedAttributes) { // Arrange - var output = new TagHelperOutput("p", attributes: new TagHelperAttributeList()); + var output = new TagHelperOutput( + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var context = new TagHelperContext( allAttributes, items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => Task.FromResult(result: null)); + uniqueId: "test"); // Act output.CopyHtmlAttribute(attributeNameToCopy, context); @@ -454,20 +458,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers // Arrange var tagHelperOutput = new TagHelperOutput( "p", - attributes: new TagHelperAttributeList()); - var tagHelperContext = new TagHelperContext( - allAttributes: new TagHelperAttributeList - { - { attributeName, attributeValue } - }, - items: new Dictionary(), - uniqueId: "test", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.Append("Something"); return Task.FromResult(tagHelperContent); }); + var tagHelperContext = new TagHelperContext( + allAttributes: new TagHelperAttributeList + { + { attributeName, attributeValue } + }, + items: new Dictionary(), + uniqueId: "test"); var expectedAttribute = new TagHelperAttribute(attributeName, attributeValue); // Act @@ -488,6 +492,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers attributes: new TagHelperAttributeList() { { attributeName, "world2" } + }, + getChildContentAsync: useCachedResult => + { + var tagHelperContent = new DefaultTagHelperContent(); + tagHelperContent.Append("Something Else"); + return Task.FromResult(tagHelperContent); }); var expectedAttribute = new TagHelperAttribute(attributeName, "world2"); var tagHelperContext = new TagHelperContext( @@ -496,13 +506,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { attributeName, "world" } }, items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.Append("Something Else"); - return Task.FromResult(tagHelperContent); - }); + uniqueId: "test"); // Act tagHelperOutput.CopyHtmlAttribute(attributeName, tagHelperContext); @@ -519,20 +523,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var invalidAttributeName = "hello2"; var tagHelperOutput = new TagHelperOutput( "p", - attributes: new TagHelperAttributeList()); - var tagHelperContext = new TagHelperContext( - allAttributes: new TagHelperAttributeList - { - { "hello", "world" } - }, - items: new Dictionary(), - uniqueId: "test", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.Append("Something"); return Task.FromResult(tagHelperContent); }); + var tagHelperContext = new TagHelperContext( + allAttributes: new TagHelperAttributeList + { + { "hello", "world" } + }, + items: new Dictionary(), + uniqueId: "test"); // Act & Assert ExceptionAssert.ThrowsArgument( @@ -546,12 +550,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", + tagName: "p", attributes: new TagHelperAttributeList() { { "route-Hello", "World" }, { "Route-I", "Am" } - }); + }, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var expectedAttribute = new TagHelperAttribute("type", "btn"); tagHelperOutput.Attributes.Add(expectedAttribute); @@ -572,12 +577,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", + tagName: "p", attributes: new TagHelperAttributeList() { { "route-Hello", "World" }, { "Route-I", "Am" } - }); + }, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var expectedAttribute = new TagHelperAttribute("type", "btn"); tagHelperOutput.Attributes.Add(expectedAttribute); var attributes = tagHelperOutput.Attributes @@ -596,12 +602,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", + tagName: "p", attributes: new TagHelperAttributeList() { { "route-Hello", "World" }, { "Route-I", "Am" } - }); + }, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var expectedAttribute = new TagHelperAttribute("type", "btn"); tagHelperOutput.Attributes.Add(expectedAttribute); @@ -756,7 +763,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers TagHelperAttributeList expectedAttributes) { // Arrange - var tagHelperOutput = new TagHelperOutput("p", outputAttributes); + var tagHelperOutput = new TagHelperOutput( + "p", + outputAttributes, + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var tagBuilder = new TagBuilder("p"); foreach (var attr in tagBuilderAttributes) @@ -779,8 +789,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", - attributes: new TagHelperAttributeList()); + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var expectedAttribute = new TagHelperAttribute("type", "btn"); tagHelperOutput.Attributes.Add(expectedAttribute); @@ -800,8 +811,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", - attributes: new TagHelperAttributeList()); + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); tagHelperOutput.Attributes.Add("class", "Hello"); var tagBuilder = new TagBuilder("p"); @@ -826,8 +838,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", - attributes: new TagHelperAttributeList()); + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); tagHelperOutput.Attributes.Add(originalName, "Hello"); var tagBuilder = new TagBuilder("p"); @@ -846,8 +859,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", - attributes: new TagHelperAttributeList()); + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var tagBuilder = new TagBuilder("p"); var expectedAttribute = new TagHelperAttribute("visible", "val < 3"); @@ -866,8 +880,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", - attributes: new TagHelperAttributeList()); + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var tagBuilder = new TagBuilder("p"); var expectedAttribute1 = new TagHelperAttribute("class", "btn"); @@ -891,8 +906,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", - attributes: new TagHelperAttributeList()); + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var expectedAttribute = new TagHelperAttribute("class", "btn"); tagHelperOutput.Attributes.Add(expectedAttribute); @@ -911,8 +927,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { // Arrange var tagHelperOutput = new TagHelperOutput( - "p", - attributes: new TagHelperAttributeList()); + tagName: "p", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); var expectedOutputAttribute = new TagHelperAttribute("class", "btn"); tagHelperOutput.Attributes.Add(expectedOutputAttribute); diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TextAreaTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TextAreaTagHelperTest.cs index 06b6a0dde1..2201651ca8 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TextAreaTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TextAreaTagHelperTest.cs @@ -128,18 +128,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var htmlAttributes = new TagHelperAttributeList + { + { "class", "form-control" }, + }; + var output = new TagHelperOutput( + expectedTagName, + htmlAttributes, getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); - }); - var htmlAttributes = new TagHelperAttributeList - { - { "class", "form-control" }, - }; - var output = new TagHelperOutput(expectedTagName, htmlAttributes) + }) { TagMode = TagMode.SelfClosing, }; diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationMessageTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationMessageTagHelperTest.cs index a3aba86c7c..042f563d32 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationMessageTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationMessageTagHelperTest.cs @@ -47,18 +47,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers { "for", modelExpression }, }, items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.SetContent("Something"); - return Task.FromResult(tagHelperContent); - }); + uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "id", "myvalidationmessage" } + }, + getChildContentAsync: useCachedResult => + { + var tagHelperContent = new DefaultTagHelperContent(); + tagHelperContent.SetContent("Something"); + return Task.FromResult(tagHelperContent); }); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); @@ -111,16 +111,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", + uniqueId: "test"); + var output = new TagHelperOutput( + "span", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult(tagHelperContent); }); - var output = new TagHelperOutput( - "span", - attributes: new TagHelperAttributeList()); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent(expectedPostContent); @@ -167,20 +167,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers }; var output = new TagHelperOutput( "span", - attributes: new TagHelperAttributeList()); - output.Content.AppendEncoded(outputContent); - - var context = new TagHelperContext( - allAttributes: new ReadOnlyTagHelperAttributeList( - Enumerable.Empty()), - items: new Dictionary(), - uniqueId: "test", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.AppendEncoded(childContent); return Task.FromResult(tagHelperContent); }); + output.Content.AppendEncoded(outputContent); + + var context = new TagHelperContext( + allAttributes: new ReadOnlyTagHelperAttributeList( + Enumerable.Empty()), + items: new Dictionary(), + uniqueId: "test"); var viewContext = CreateViewContext(); validationMessageTagHelper.ViewContext = viewContext; @@ -226,13 +226,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers }; var output = new TagHelperOutput( "span", - attributes: new TagHelperAttributeList()); - - var context = new TagHelperContext( - allAttributes: new ReadOnlyTagHelperAttributeList( - Enumerable.Empty()), - items: new Dictionary(), - uniqueId: "test", + attributes: new TagHelperAttributeList(), getChildContentAsync: useCachedResult => { var tagHelperContent = new DefaultTagHelperContent(); @@ -240,6 +234,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers return Task.FromResult(tagHelperContent); }); + var context = new TagHelperContext( + allAttributes: new ReadOnlyTagHelperAttributeList( + Enumerable.Empty()), + items: new Dictionary(), + uniqueId: "test"); + var viewContext = CreateViewContext(); validationMessageTagHelper.ViewContext = viewContext; @@ -266,8 +266,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var expectedContent = "original content"; var expectedPostContent = "original post-content"; var output = new TagHelperOutput( - "span", - attributes: new TagHelperAttributeList()); + tagName: "span", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent(expectedPostContent); @@ -276,8 +277,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); var viewContext = CreateViewContext(); validationMessageTagHelper.ViewContext = viewContext; diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationSummaryTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationSummaryTagHelperTest.cs index cc01179b2c..24be95a2d8 100644 --- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationSummaryTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationSummaryTagHelperTest.cs @@ -43,18 +43,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: useCachedResult => - { - var tagHelperContent = new DefaultTagHelperContent(); - tagHelperContent.SetContent("Something"); - return Task.FromResult(tagHelperContent); - }); + uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "class", "form-control" } + }, + getChildContentAsync: useCachedResult => + { + var tagHelperContent = new DefaultTagHelperContent(); + tagHelperContent.SetContent("Something"); + return Task.FromResult(tagHelperContent); }); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); @@ -110,8 +110,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var expectedContent = "original content"; var expectedPostContent = "original post-content"; var output = new TagHelperOutput( - "div", - attributes: new TagHelperAttributeList()); + tagName: "div", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent(expectedPostContent); @@ -122,8 +123,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act & Assert await validationSummaryTagHelper.ProcessAsync(context, output); @@ -164,8 +164,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var output = new TagHelperOutput( - "div", - attributes: new TagHelperAttributeList()); + tagName: "div", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Content of validation summary"); @@ -177,8 +178,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); @@ -212,8 +212,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var expectedContent = "original content"; var expectedPostContent = "original post-content"; var output = new TagHelperOutput( - "div", - attributes: new TagHelperAttributeList()); + tagName: "div", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent(expectedPostContent); @@ -225,8 +226,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); @@ -267,8 +267,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var output = new TagHelperOutput( - "div", - attributes: new TagHelperAttributeList()); + tagName: "div", + attributes: new TagHelperAttributeList(), + getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Content of validation message"); @@ -280,8 +281,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers allAttributes: new ReadOnlyTagHelperAttributeList( Enumerable.Empty()), items: new Dictionary(), - uniqueId: "test", - getChildContentAsync: _ => Task.FromResult(null)); + uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); diff --git a/test/WebSites/ActivatorWebSite/TagHelpers/HiddenTagHelper.cs b/test/WebSites/ActivatorWebSite/TagHelpers/HiddenTagHelper.cs index 0aea372bb7..a0e48bf734 100644 --- a/test/WebSites/ActivatorWebSite/TagHelpers/HiddenTagHelper.cs +++ b/test/WebSites/ActivatorWebSite/TagHelpers/HiddenTagHelper.cs @@ -33,7 +33,7 @@ namespace ActivatorWebSite.TagHelpers { (HtmlHelper as ICanHasViewContext)?.Contextualize(ViewContext); - var content = await context.GetChildContentAsync(); + var content = await output.GetChildContentAsync(); output.Content.SetContent(HtmlHelper.Hidden(Name, content.GetContent(HtmlEncoder))); } } diff --git a/test/WebSites/ActivatorWebSite/TagHelpers/RepeatContentTagHelper.cs b/test/WebSites/ActivatorWebSite/TagHelpers/RepeatContentTagHelper.cs index d1d4ff0564..7f6764c536 100644 --- a/test/WebSites/ActivatorWebSite/TagHelpers/RepeatContentTagHelper.cs +++ b/test/WebSites/ActivatorWebSite/TagHelpers/RepeatContentTagHelper.cs @@ -31,7 +31,7 @@ namespace ActivatorWebSite.TagHelpers { (HtmlHelper as ICanHasViewContext)?.Contextualize(ViewContext); - var content = await context.GetChildContentAsync(); + var content = await output.GetChildContentAsync(); var repeatContent = HtmlHelper.Encode(Expression.Model.ToString()); if (string.IsNullOrEmpty(repeatContent)) diff --git a/test/WebSites/TagHelpersWebSite/TagHelpers/AutoLinkerTagHelper.cs b/test/WebSites/TagHelpersWebSite/TagHelpers/AutoLinkerTagHelper.cs index 2f1743f759..fba324cfb9 100644 --- a/test/WebSites/TagHelpersWebSite/TagHelpers/AutoLinkerTagHelper.cs +++ b/test/WebSites/TagHelpersWebSite/TagHelpers/AutoLinkerTagHelper.cs @@ -12,7 +12,7 @@ namespace TagHelpersWebSite.TagHelpers { public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - var childContent = await context.GetChildContentAsync(); + var childContent = await output.GetChildContentAsync(); // Find Urls in the content and replace them with their anchor tag equivalent. output.Content.AppendEncoded(Regex.Replace( diff --git a/test/WebSites/TagHelpersWebSite/TagHelpers/TagCloudViewComponentTagHelper.cs b/test/WebSites/TagHelpersWebSite/TagHelpers/TagCloudViewComponentTagHelper.cs index 83d93b4e39..c41aca36a5 100644 --- a/test/WebSites/TagHelpersWebSite/TagHelpers/TagCloudViewComponentTagHelper.cs +++ b/test/WebSites/TagHelpersWebSite/TagHelpers/TagCloudViewComponentTagHelper.cs @@ -33,6 +33,10 @@ namespace MvcSample.Web.Components public int Order { get; } = 0; + public void Init(TagHelperContext context) + { + } + public async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var result = await InvokeAsync(Count);