Skip to content

Commit ab919af

Browse files
Update existing tests
1 parent 1805ff5 commit ab919af

File tree

6 files changed

+136
-1042
lines changed

6 files changed

+136
-1042
lines changed

src/Mvc/Mvc.TagHelpers/test/ComponentTagHelperTest.cs

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using System.Text.Encodings.Web;
5+
using Microsoft.AspNetCore.Components;
6+
using Microsoft.AspNetCore.Components.Infrastructure;
57
using Microsoft.AspNetCore.Components.Rendering;
6-
using Microsoft.AspNetCore.Html;
8+
using Microsoft.AspNetCore.Components.Routing;
9+
using Microsoft.AspNetCore.Components.Web;
10+
using Microsoft.AspNetCore.DataProtection;
711
using Microsoft.AspNetCore.Http;
812
using Microsoft.AspNetCore.Mvc.Rendering;
913
using Microsoft.AspNetCore.Mvc.ViewFeatures;
1014
using Microsoft.AspNetCore.Razor.TagHelpers;
1115
using Microsoft.Extensions.DependencyInjection;
12-
using Microsoft.Extensions.Logging;
13-
using Microsoft.Extensions.Logging.Abstractions;
1416
using Moq;
1517

1618
namespace Microsoft.AspNetCore.Mvc.TagHelpers;
@@ -21,10 +23,12 @@ public class ComponentTagHelperTest
2123
public async Task ProcessAsync_RendersComponent()
2224
{
2325
// Arrange
26+
var viewContext = GetViewContext();
2427
var tagHelper = new ComponentTagHelper
2528
{
26-
ViewContext = GetViewContext(),
29+
ViewContext = viewContext,
2730
RenderMode = RenderMode.Static,
31+
ComponentType = typeof(TestComponent),
2832
};
2933
var context = GetTagHelperContext();
3034
var output = GetTagHelperOutput();
@@ -33,8 +37,9 @@ public async Task ProcessAsync_RendersComponent()
3337
await tagHelper.ProcessAsync(context, output);
3438

3539
// Assert
36-
var content = HtmlContentUtilities.HtmlContentToString(output.Content);
37-
Assert.Equal("Hello world", content);
40+
var htmlRenderer = viewContext.HttpContext.RequestServices.GetRequiredService<HtmlRenderer>();
41+
var content = await htmlRenderer.Dispatcher.InvokeAsync(() => HtmlContentUtilities.HtmlContentToString(output.Content));
42+
Assert.Equal("Hello from the component", content);
3843
Assert.Null(output.TagName);
3944
}
4045

@@ -73,23 +78,31 @@ private static TagHelperOutput GetTagHelperOutput()
7378

7479
private ViewContext GetViewContext()
7580
{
76-
var htmlContent = new HtmlContentBuilder().AppendHtml("Hello world");
77-
var renderer = Mock.Of<IComponentRenderer>(c =>
78-
c.RenderComponentAsync(It.IsAny<ViewContext>(), It.IsAny<Type>(), It.IsAny<RenderMode>(), It.IsAny<object>()) == new ValueTask<IHtmlContent>(htmlContent));
81+
var navManager = new Mock<NavigationManager>();
82+
navManager.As<IHostEnvironmentNavigationManager>();
7983

8084
var httpContext = new DefaultHttpContext
8185
{
8286
RequestServices = new ServiceCollection()
83-
.AddSingleton<IComponentRenderer>(renderer)
87+
.AddScoped<ComponentPrerenderer>()
88+
.AddScoped<ServerComponentSerializer>()
89+
.AddScoped(_ => Mock.Of<IDataProtectionProvider>(
90+
x => x.CreateProtector(It.IsAny<string>()) == Mock.Of<IDataProtector>()))
8491
.AddSingleton<HtmlRenderer>()
85-
.AddSingleton<ILoggerFactory>(NullLoggerFactory.Instance)
86-
.AddSingleton<HtmlEncoder>(HtmlEncoder.Default)
92+
.AddLogging()
93+
.AddScoped<ComponentStatePersistenceManager>()
94+
.AddScoped(_ => navManager.Object)
8795
.BuildServiceProvider(),
8896
};
8997

90-
return new ViewContext
98+
return new ViewContext { HttpContext = httpContext };
99+
}
100+
101+
private class TestComponent : ComponentBase
102+
{
103+
protected override void BuildRenderTree(RenderTreeBuilder builder)
91104
{
92-
HttpContext = httpContext,
93-
};
105+
builder.AddContent(0, "Hello from the component");
106+
}
94107
}
95108
}

src/Mvc/Mvc.TagHelpers/test/PersistComponentStateTagHelperTest.cs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using System.Text.Encodings.Web;
5+
using Microsoft.AspNetCore.Components;
56
using Microsoft.AspNetCore.Components.Infrastructure;
67
using Microsoft.AspNetCore.Components.Rendering;
8+
using Microsoft.AspNetCore.Components.Routing;
9+
using Microsoft.AspNetCore.Components.Web;
710
using Microsoft.AspNetCore.DataProtection;
811
using Microsoft.AspNetCore.Html;
912
using Microsoft.AspNetCore.Http;
@@ -77,7 +80,7 @@ public async Task ExecuteAsync_RendersWebAssemblyStateImplicitlyWhenAWebAssembly
7780
ViewContext = GetViewContext()
7881
};
7982

80-
ComponentRenderer.UpdateSaveStateRenderMode(tagHelper.ViewContext, RenderMode.WebAssemblyPrerendered);
83+
ComponentPrerenderer.UpdateSaveStateRenderMode(tagHelper.ViewContext, RenderMode.WebAssemblyPrerendered);
8184

8285
var context = GetTagHelperContext();
8386
var output = GetTagHelperOutput();
@@ -125,7 +128,7 @@ public async Task ExecuteAsync_RendersServerStateImplicitlyWhenAServerComponentW
125128
ViewContext = GetViewContext()
126129
};
127130

128-
ComponentRenderer.UpdateSaveStateRenderMode(tagHelper.ViewContext, RenderMode.ServerPrerendered);
131+
ComponentPrerenderer.UpdateSaveStateRenderMode(tagHelper.ViewContext, RenderMode.ServerPrerendered);
129132

130133
var context = GetTagHelperContext();
131134
var output = GetTagHelperOutput();
@@ -150,8 +153,8 @@ public async Task ExecuteAsync_ThrowsIfItCantInferThePersistMode()
150153
ViewContext = GetViewContext()
151154
};
152155

153-
ComponentRenderer.UpdateSaveStateRenderMode(tagHelper.ViewContext, RenderMode.ServerPrerendered);
154-
ComponentRenderer.UpdateSaveStateRenderMode(tagHelper.ViewContext, RenderMode.WebAssemblyPrerendered);
156+
ComponentPrerenderer.UpdateSaveStateRenderMode(tagHelper.ViewContext, RenderMode.ServerPrerendered);
157+
ComponentPrerenderer.UpdateSaveStateRenderMode(tagHelper.ViewContext, RenderMode.WebAssemblyPrerendered);
155158

156159
var context = GetTagHelperContext();
157160
var output = GetTagHelperOutput();
@@ -179,26 +182,17 @@ private static TagHelperOutput GetTagHelperOutput()
179182

180183
private ViewContext GetViewContext()
181184
{
182-
var htmlContent = new HtmlContentBuilder().AppendHtml("Hello world");
183-
var renderer = Mock.Of<IComponentRenderer>(c =>
184-
c.RenderComponentAsync(It.IsAny<ViewContext>(), It.IsAny<Type>(), It.IsAny<RenderMode>(), It.IsAny<object>()) == new ValueTask<IHtmlContent>(htmlContent));
185-
186185
var httpContext = new DefaultHttpContext
187186
{
188187
RequestServices = new ServiceCollection()
189-
.AddSingleton(renderer)
190-
.AddSingleton(new ComponentStatePersistenceManager(NullLogger<ComponentStatePersistenceManager>.Instance))
191-
.AddSingleton<HtmlRenderer>()
192-
.AddSingleton(_ephemeralProvider)
193-
.AddSingleton<ILoggerFactory>(NullLoggerFactory.Instance)
194-
.AddSingleton(HtmlEncoder.Default)
195-
.AddScoped<IViewBufferScope, TestViewBufferScope>()
188+
.AddScoped(_ => Mock.Of<IDataProtectionProvider>(
189+
x => x.CreateProtector(It.IsAny<string>()) == _protector))
190+
.AddLogging()
191+
.AddScoped<ComponentStatePersistenceManager>()
192+
.AddScoped<HtmlRenderer>()
196193
.BuildServiceProvider(),
197194
};
198195

199-
return new ViewContext
200-
{
201-
HttpContext = httpContext,
202-
};
196+
return new ViewContext { HttpContext = httpContext };
203197
}
204198
}

src/Mvc/Mvc.ViewFeatures/src/RazorComponents/ComponentPrerenderer.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ public ComponentPrerenderer(
3636
_htmlRenderer = htmlRenderer;
3737
}
3838

39+
public Dispatcher Dispatcher => _htmlRenderer.Dispatcher;
40+
3941
public async ValueTask<IHtmlContent> PrerenderComponentAsync(
4042
ViewContext viewContext,
4143
Type componentType,
@@ -257,7 +259,7 @@ public void WriteTo(TextWriter writer, HtmlEncoder encoder)
257259
}
258260
else if (_webAssemblyMarker.HasValue)
259261
{
260-
WebAssemblyComponentSerializer.AppendPreamble(writer, _webAssemblyMarker.Value);
262+
WebAssemblyComponentSerializer.AppendEpilogue(writer, _webAssemblyMarker.Value);
261263
}
262264
}
263265
}

0 commit comments

Comments
 (0)