Skip to content

Commit 86560b9

Browse files
committed
Improve tests, use constant string in feature attribute.
1 parent 08cff58 commit 86560b9

File tree

4 files changed

+50
-15
lines changed

4 files changed

+50
-15
lines changed

src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ protected override void AddPendingTask(ComponentState? componentState, Task task
183183
base.AddPendingTask(componentState, task);
184184
}
185185

186-
private void SignalRendererToFinishRendering()
186+
internal void SignalRendererToFinishRendering()
187187
{
188188
// sets a deferred stop on the renderer, which will have an effect after the current batch is completed
189189
_rendererIsStopped = true;

src/Components/Endpoints/test/EndpointHtmlRendererTest.cs

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using Microsoft.AspNetCore.Components.Infrastructure;
1212
using Microsoft.AspNetCore.Components.Reflection;
1313
using Microsoft.AspNetCore.Components.Rendering;
14+
using Microsoft.AspNetCore.Components.RenderTree;
1415
using Microsoft.AspNetCore.Components.Test.Helpers;
1516
using Microsoft.AspNetCore.Components.Web;
1617
using Microsoft.AspNetCore.DataProtection;
@@ -47,18 +48,21 @@ public EndpointHtmlRendererTest()
4748
}
4849

4950
[Fact]
50-
public async Task DoesNotRenderChildAfterRendererStopped()
51+
public async Task DoesNotRenderAfterRendererStopped()
5152
{
52-
renderer.SignalRendererToFinishRendering();
53-
5453
var httpContext = GetHttpContext();
5554
var writer = new StringWriter();
5655

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();
56+
var component = new StoppingRendererComponent();
57+
var id = renderer.AssignRootComponentId(component);
58+
await renderer.Dispatcher.InvokeAsync(() => renderer.RenderRootComponentAsync(id, ParameterView.Empty));
59+
int initialRenderCount = renderer.RenderCount;
60+
61+
renderer.SignalRendererToFinishRendering();
6062

61-
Assert.DoesNotContain("Hello from SimpleComponent", content);
63+
component.TaskCompletionSource.SetResult(false);
64+
await renderer.Dispatcher.InvokeAsync(() => renderer.RenderRootComponentAsync(id, ParameterView.Empty));
65+
Assert.Equal(initialRenderCount, renderer.RenderCount);
6266
}
6367

6468
[Fact]
@@ -1772,18 +1776,19 @@ private TestEndpointHtmlRenderer GetEndpointHtmlRenderer(IServiceProvider servic
17721776
private class TestEndpointHtmlRenderer : EndpointHtmlRenderer
17731777
{
17741778
private bool _rendererIsStopped = false;
1779+
private int _lastComponentId;
1780+
private int _renderCount;
1781+
private RenderBatch _lastBatch;
1782+
17751783
public TestEndpointHtmlRenderer(IServiceProvider serviceProvider, ILoggerFactory loggerFactory) : base(serviceProvider, loggerFactory)
17761784
{
17771785
}
17781786

17791787
internal int TestAssignRootComponentId(IComponent component)
17801788
{
1781-
return base.AssignRootComponentId(component);
1782-
}
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;
1789+
var id = base.AssignRootComponentId(component);
1790+
_lastComponentId = id;
1791+
return id;
17871792
}
17881793

17891794
protected override void ProcessPendingRender()
@@ -1793,6 +1798,19 @@ protected override void ProcessPendingRender()
17931798
return;
17941799
}
17951800
base.ProcessPendingRender();
1801+
1802+
_renderCount++;
1803+
_lastBatch = GetCurrentRenderBatch();
1804+
}
1805+
1806+
public int RenderCount => _renderCount;
1807+
1808+
public RenderBatch GetCurrentRenderBatch() => _lastBatch;
1809+
1810+
public new void SignalRendererToFinishRendering()
1811+
{
1812+
_rendererIsStopped = true;
1813+
base.SignalRendererToFinishRendering();
17961814
}
17971815
}
17981816

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<h1>Hello from StoppingRendererComponent</h1>
2+
<p>State is @_state</p>
3+
4+
@code {
5+
private bool _state = true;
6+
7+
// expose a TCS so the test can control when OnInitializedAsync completes
8+
public TaskCompletionSource<bool> TaskCompletionSource = new TaskCompletionSource<bool>();
9+
10+
protected override async Task OnInitializedAsync()
11+
{
12+
// wait until the test signals
13+
var result = await TaskCompletionSource.Task;
14+
_state = result;
15+
StateHasChanged();
16+
}
17+
}

src/Components/Server/src/Circuits/RemoteNavigationManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ internal sealed partial class RemoteNavigationManager : NavigationManager, IHost
1919
private bool? _navigationLockStateBeforeJsRuntimeAttached;
2020
private const string _enableThrowNavigationException = "Microsoft.AspNetCore.Components.Endpoints.NavigationManager.EnableThrowNavigationException";
2121

22-
[FeatureSwitchDefinition("Microsoft.AspNetCore.Components.Endpoints.NavigationManager.EnableThrowNavigationException")]
22+
[FeatureSwitchDefinition(_enableThrowNavigationException)]
2323
private static bool _throwNavigationException =>
2424
AppContext.TryGetSwitch(_enableThrowNavigationException, out var switchValue) && switchValue;
2525
private Func<string, Task>? _onNavigateTo;

0 commit comments

Comments
 (0)