11
11
using Microsoft . AspNetCore . Components . Infrastructure ;
12
12
using Microsoft . AspNetCore . Components . Reflection ;
13
13
using Microsoft . AspNetCore . Components . Rendering ;
14
+ using Microsoft . AspNetCore . Components . RenderTree ;
14
15
using Microsoft . AspNetCore . Components . Test . Helpers ;
15
16
using Microsoft . AspNetCore . Components . Web ;
16
17
using Microsoft . AspNetCore . DataProtection ;
@@ -47,18 +48,23 @@ public EndpointHtmlRendererTest()
47
48
}
48
49
49
50
[ Fact ]
50
- public async Task DoesNotRenderChildAfterRendererStopped ( )
51
+ public async Task DoesNotRenderAfterRendererStopped ( )
51
52
{
52
- renderer . SignalRendererToFinishRendering ( ) ;
53
-
54
53
var httpContext = GetHttpContext ( ) ;
55
54
var writer = new StringWriter ( ) ;
56
55
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 ) ) ;
60
60
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 ) ;
62
68
}
63
69
64
70
[ Fact ]
@@ -1772,18 +1778,10 @@ private TestEndpointHtmlRenderer GetEndpointHtmlRenderer(IServiceProvider servic
1772
1778
private class TestEndpointHtmlRenderer : EndpointHtmlRenderer
1773
1779
{
1774
1780
private bool _rendererIsStopped = false ;
1775
- public TestEndpointHtmlRenderer ( IServiceProvider serviceProvider , ILoggerFactory loggerFactory ) : base ( serviceProvider , loggerFactory )
1776
- {
1777
- }
1781
+ private int _renderCount ;
1778
1782
1779
- internal int TestAssignRootComponentId ( IComponent component )
1783
+ public TestEndpointHtmlRenderer ( IServiceProvider serviceProvider , ILoggerFactory loggerFactory ) : base ( serviceProvider , loggerFactory )
1780
1784
{
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 ;
1787
1785
}
1788
1786
1789
1787
protected override void ProcessPendingRender ( )
@@ -1793,6 +1791,16 @@ protected override void ProcessPendingRender()
1793
1791
return ;
1794
1792
}
1795
1793
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 ( ) ;
1796
1804
}
1797
1805
}
1798
1806
0 commit comments