11using System ;
22using Bunit . Extensions ;
3- using Bunit . Rendering ;
4- using Bunit . TestDoubles ;
53using Microsoft . AspNetCore . Components ;
64using Microsoft . Extensions . DependencyInjection ;
75using Microsoft . JSInterop ;
@@ -13,16 +11,6 @@ namespace Bunit
1311 /// </summary>
1412 public class TestContext : TestContextBase
1513 {
16- /// <summary>
17- /// Gets the <see cref="RootRenderTree"/> that all components rendered with the
18- /// <c>RenderComponent<TComponent>()</c> methods, are rendered inside.
19- /// </summary>
20- /// <remarks>
21- /// Use this to add default layout- or root-components which a component under test
22- /// should be rendered under.
23- /// </remarks>
24- public RootRenderTree RenderTree { get ; } = new RootRenderTree ( ) ;
25-
2614 /// <summary>
2715 /// Gets bUnits JSInterop, that allows setting up handlers for <see cref="IJSRuntime.InvokeAsync{TValue}(string, object[])"/> invocations
2816 /// that components under tests will issue during testing. It also makes it possible to verify that the invocations has happened as expected.
@@ -34,8 +22,8 @@ public class TestContext : TestContextBase
3422 /// </summary>
3523 public TestContext ( )
3624 {
37- Services . AddDefaultTestContextServices ( ) ;
3825 Services . AddSingleton < IJSRuntime > ( JSInterop . JSRuntime ) ;
26+ Services . AddDefaultTestContextServices ( ) ;
3927 }
4028
4129 /// <summary>
@@ -46,7 +34,8 @@ public TestContext()
4634 /// <returns>The rendered <typeparamref name="TComponent"/></returns>
4735 public virtual IRenderedComponent < TComponent > RenderComponent < TComponent > ( params ComponentParameter [ ] parameters ) where TComponent : IComponent
4836 {
49- return RenderComponent < TComponent > ( new ComponentParameterCollection { parameters } . ToRenderFragment < TComponent > ( ) ) ;
37+ var renderFragment = new ComponentParameterCollection { parameters } . ToRenderFragment < TComponent > ( ) ;
38+ return ( IRenderedComponent < TComponent > ) RenderComponent < TComponent > ( renderFragment ) ;
5039 }
5140
5241 /// <summary>
@@ -57,28 +46,8 @@ public virtual IRenderedComponent<TComponent> RenderComponent<TComponent>(params
5746 /// <returns>The rendered <typeparamref name="TComponent"/></returns>
5847 public virtual IRenderedComponent < TComponent > RenderComponent < TComponent > ( Action < ComponentParameterCollectionBuilder < TComponent > > parameterBuilder ) where TComponent : IComponent
5948 {
60- return RenderComponent < TComponent > (
61- new ComponentParameterCollectionBuilder < TComponent > ( parameterBuilder )
62- . Build ( )
63- . ToRenderFragment < TComponent > ( )
64- ) ;
65- }
66-
67- private IRenderedComponent < TComponent > RenderComponent < TComponent > ( RenderFragment renderFragment ) where TComponent : IComponent
68- {
69- // Wrap TComponent in any layout components added to the test context.
70- // If one of the layout components is the same type as TComponent,
71- // make sure to return the rendered component, not the layout component.
72- var resultBase = Renderer . RenderFragment ( RenderTree . Wrap ( renderFragment ) ) ;
73-
74- // This ensures that the correct component is returned, in case an added layout component
75- // is of type TComponent.
76- var renderTreeTComponentCount = RenderTree . GetCountOf < TComponent > ( ) ;
77- var result = renderTreeTComponentCount > 0
78- ? Renderer . FindComponents < TComponent > ( resultBase ) [ renderTreeTComponentCount ]
79- : Renderer . FindComponent < TComponent > ( resultBase ) ;
80-
81- return ( IRenderedComponent < TComponent > ) result ;
49+ var renderFragment = new ComponentParameterCollectionBuilder < TComponent > ( parameterBuilder ) . Build ( ) . ToRenderFragment < TComponent > ( ) ;
50+ return ( IRenderedComponent < TComponent > ) RenderComponent < TComponent > ( renderFragment ) ;
8251 }
8352 }
8453}
0 commit comments