Skip to content

Commit 129d180

Browse files
committed
Add unit tests.
1 parent 3438822 commit 129d180

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/Components/Components/test/NavigationManagerTest.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using System.Buffers;
45
using System.Diagnostics;
6+
using System.Net.Http;
7+
using System.Text;
58
using Microsoft.AspNetCore.Components.Routing;
69
using Microsoft.AspNetCore.InternalTesting;
710

@@ -868,6 +871,22 @@ async ValueTask HandleLocationChanging(LocationChangingContext context)
868871
}
869872
}
870873

874+
[Fact]
875+
public void OnNotFoundSubscriptionIsTriggeredWhenNotFoundCalled()
876+
{
877+
// Arrange
878+
var baseUri = "scheme://host/";
879+
var testNavManager = new TestNavigationManager(baseUri);
880+
bool notFoundTriggered = false;
881+
testNavManager.OnNotFound += (sender, args) => notFoundTriggered = true;
882+
883+
// Simulate a component triggered NotFound
884+
testNavManager.NotFound();
885+
886+
// Assert
887+
Assert.True(notFoundTriggered, "The OnNotFound event was not triggered as expected.");
888+
}
889+
871890
private class TestNavigationManager : NavigationManager
872891
{
873892
public TestNavigationManager()

src/Components/Endpoints/test/EndpointHtmlRendererTest.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,21 @@ public EndpointHtmlRendererTest()
4646
renderer = GetEndpointHtmlRenderer();
4747
}
4848

49+
[Fact]
50+
public async Task DoesNotRenderChildAfterRendererStopped()
51+
{
52+
renderer.SignalRendererToFinishRendering();
53+
54+
var httpContext = GetHttpContext();
55+
var writer = new StringWriter();
56+
57+
var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), null, ParameterView.Empty);
58+
await renderer.Dispatcher.InvokeAsync(() => result.WriteTo(writer, HtmlEncoder.Default));
59+
var content = writer.ToString();
60+
61+
Assert.DoesNotContain("Hello from SimpleComponent", content);
62+
}
63+
4964
[Fact]
5065
public async Task CanRender_ParameterlessComponent_ClientMode()
5166
{
@@ -1756,6 +1771,7 @@ private TestEndpointHtmlRenderer GetEndpointHtmlRenderer(IServiceProvider servic
17561771

17571772
private class TestEndpointHtmlRenderer : EndpointHtmlRenderer
17581773
{
1774+
private bool _rendererIsStopped = false;
17591775
public TestEndpointHtmlRenderer(IServiceProvider serviceProvider, ILoggerFactory loggerFactory) : base(serviceProvider, loggerFactory)
17601776
{
17611777
}
@@ -1764,6 +1780,20 @@ internal int TestAssignRootComponentId(IComponent component)
17641780
{
17651781
return base.AssignRootComponentId(component);
17661782
}
1783+
public void SignalRendererToFinishRendering()
1784+
{
1785+
// sets a deferred stop on the renderer, which will have an effect after the current batch is completed
1786+
_rendererIsStopped = true;
1787+
}
1788+
1789+
protected override void ProcessPendingRender()
1790+
{
1791+
if (_rendererIsStopped)
1792+
{
1793+
return;
1794+
}
1795+
base.ProcessPendingRender();
1796+
}
17671797
}
17681798

17691799
private HttpContext GetHttpContext(HttpContext context = null)

0 commit comments

Comments
 (0)