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,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
0 commit comments