1111using Microsoft . AspNetCore . Components . Infrastructure ;
1212using Microsoft . AspNetCore . Components . Reflection ;
1313using Microsoft . AspNetCore . Components . Rendering ;
14+ using Microsoft . AspNetCore . Components . RenderTree ;
1415using Microsoft . AspNetCore . Components . Test . Helpers ;
1516using Microsoft . AspNetCore . Components . Web ;
1617using Microsoft . AspNetCore . DataProtection ;
@@ -47,18 +48,23 @@ 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+ var initialRenderOperation = renderer . Dispatcher . InvokeAsync (
59+ ( ) => renderer . RenderRootComponentAsync ( id , ParameterView . Empty ) ) ;
6060
61- Assert . DoesNotContain ( "Hello from SimpleComponent" , content ) ;
61+ renderer . SignalRendererToFinishRendering ( ) ;
62+ component . TaskCompletionSource . SetResult ( false ) ;
63+ await initialRenderOperation ;
64+ int initialRenderCount = renderer . RenderCount ;
65+
66+ await renderer . Dispatcher . InvokeAsync ( ( ) => renderer . RenderRootComponentAsync ( id , ParameterView . Empty ) ) ;
67+ Assert . Equal ( initialRenderCount , renderer . RenderCount ) ;
6268 }
6369
6470 [ Fact ]
@@ -1772,18 +1778,10 @@ private TestEndpointHtmlRenderer GetEndpointHtmlRenderer(IServiceProvider servic
17721778 private class TestEndpointHtmlRenderer : EndpointHtmlRenderer
17731779 {
17741780 private bool _rendererIsStopped = false ;
1775- public TestEndpointHtmlRenderer ( IServiceProvider serviceProvider , ILoggerFactory loggerFactory ) : base ( serviceProvider , loggerFactory )
1776- {
1777- }
1781+ private int _renderCount ;
17781782
1779- internal int TestAssignRootComponentId ( IComponent component )
1783+ public TestEndpointHtmlRenderer ( IServiceProvider serviceProvider , ILoggerFactory loggerFactory ) : base ( serviceProvider , loggerFactory )
17801784 {
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 ;
17871785 }
17881786
17891787 protected override void ProcessPendingRender ( )
@@ -1793,6 +1791,16 @@ protected override void ProcessPendingRender()
17931791 return ;
17941792 }
17951793 base . ProcessPendingRender ( ) ;
1794+
1795+ _renderCount ++ ;
1796+ }
1797+
1798+ public int RenderCount => _renderCount ;
1799+
1800+ public new void SignalRendererToFinishRendering ( )
1801+ {
1802+ _rendererIsStopped = true ;
1803+ base . SignalRendererToFinishRendering ( ) ;
17961804 }
17971805 }
17981806
0 commit comments