@@ -23,9 +23,8 @@ public class HotReloadServiceTests
2323 public void UpdatesEndpointsWhenHotReloadChangeTokenTriggered ( )
2424 {
2525 // Arrange
26- var builder = CreateBuilder ( typeof ( ServerComponent ) ) ;
2726 var services = CreateServices ( typeof ( MockEndpointProvider ) ) ;
28- var endpointDataSource = CreateDataSource < App > ( builder , services ) ;
27+ var endpointDataSource = CreateDataSource < App > ( services , ConfigureServerComponentBuilder ) ;
2928 var invoked = false ;
3029
3130 // Act
@@ -41,9 +40,8 @@ public void UpdatesEndpointsWhenHotReloadChangeTokenTriggered()
4140 public void AddNewEndpointWhenDataSourceChanges ( )
4241 {
4342 // Arrange
44- var builder = CreateBuilder ( typeof ( ServerComponent ) ) ;
4543 var services = CreateServices ( typeof ( MockEndpointProvider ) ) ;
46- var endpointDataSource = CreateDataSource < App > ( builder , services ) ;
44+ var endpointDataSource = CreateDataSource < App > ( services , ConfigureServerComponentBuilder ) ;
4745
4846 // Assert - 1
4947 var endpoint = Assert . IsType < RouteEndpoint > (
@@ -52,15 +50,17 @@ public void AddNewEndpointWhenDataSourceChanges()
5250 Assert . Equal ( "/server" , endpoint . RoutePattern . RawText ) ;
5351
5452 // Act - 2
55- endpointDataSource . Builder . Pages . AddFromLibraryInfo ( "TestAssembly2" , new [ ]
56- {
57- new PageComponentBuilder
53+ endpointDataSource . ComponentApplicationBuilderActions . Add (
54+ b => b . Pages . AddFromLibraryInfo ( "TestAssembly2" , new [ ]
5855 {
59- AssemblyName = "TestAssembly2" ,
60- PageType = typeof ( StaticComponent ) ,
61- RouteTemplates = new List < string > { "/app/test" }
62- }
63- } ) ;
56+ new PageComponentBuilder
57+ {
58+ AssemblyName = "TestAssembly2" ,
59+ PageType = typeof ( StaticComponent ) ,
60+ RouteTemplates = new List < string > { "/app/test" }
61+ }
62+ } ) ) ;
63+
6464 HotReloadService . UpdateApplication ( null ) ;
6565
6666 // Assert - 2
@@ -76,9 +76,8 @@ public void AddNewEndpointWhenDataSourceChanges()
7676 public void RemovesEndpointWhenDataSourceChanges ( )
7777 {
7878 // Arrange
79- var builder = CreateBuilder ( typeof ( ServerComponent ) ) ;
8079 var services = CreateServices ( typeof ( MockEndpointProvider ) ) ;
81- var endpointDataSource = CreateDataSource < App > ( builder , services ) ;
80+ var endpointDataSource = CreateDataSource < App > ( services , ConfigureServerComponentBuilder ) ;
8281
8382 // Assert - 1
8483 var endpoint = Assert . IsType < RouteEndpoint > ( Assert . Single ( endpointDataSource . Endpoints ,
@@ -87,7 +86,7 @@ public void RemovesEndpointWhenDataSourceChanges()
8786 Assert . Equal ( "/server" , endpoint . RoutePattern . RawText ) ;
8887
8988 // Act - 2
90- endpointDataSource . Builder . RemoveLibrary ( "TestAssembly" ) ;
89+ endpointDataSource . ComponentApplicationBuilderActions . Add ( b => b . RemoveLibrary ( "TestAssembly" ) ) ;
9190 endpointDataSource . Options . ConfiguredRenderModes . Clear ( ) ;
9291 HotReloadService . UpdateApplication ( null ) ;
9392
@@ -100,9 +99,8 @@ public void RemovesEndpointWhenDataSourceChanges()
10099 public void ModifiesEndpointWhenDataSourceChanges ( )
101100 {
102101 // Arrange
103- var builder = CreateBuilder ( typeof ( ServerComponent ) ) ;
104102 var services = CreateServices ( typeof ( MockEndpointProvider ) ) ;
105- var endpointDataSource = CreateDataSource < App > ( builder , services ) ;
103+ var endpointDataSource = CreateDataSource < App > ( services , ConfigureServerComponentBuilder ) ;
106104
107105 // Assert - 1
108106 var endpoint = Assert . IsType < RouteEndpoint > ( Assert . Single ( endpointDataSource . Endpoints , e => e . Metadata . GetMetadata < RootComponentMetadata > ( ) != null ) ) ;
@@ -124,9 +122,8 @@ public void ModifiesEndpointWhenDataSourceChanges()
124122 public void NotifiesCompositeEndpointDataSource ( )
125123 {
126124 // Arrange
127- var builder = CreateBuilder ( typeof ( ServerComponent ) ) ;
128125 var services = CreateServices ( typeof ( MockEndpointProvider ) ) ;
129- var endpointDataSource = CreateDataSource < App > ( builder , services ) ;
126+ var endpointDataSource = CreateDataSource < App > ( services , ConfigureServerComponentBuilder ) ;
130127 var compositeEndpointDataSource = new CompositeEndpointDataSource (
131128 new [ ] { endpointDataSource } ) ;
132129
@@ -137,7 +134,7 @@ public void NotifiesCompositeEndpointDataSource()
137134 Assert . Equal ( "/server" , compositeEndpoint . RoutePattern . RawText ) ;
138135
139136 // Act - 2
140- endpointDataSource . Builder . Pages . RemoveFromAssembly ( "TestAssembly" ) ;
137+ endpointDataSource . ComponentApplicationBuilderActions . Add ( b => b . Pages . RemoveFromAssembly ( "TestAssembly" ) ) ;
141138 endpointDataSource . Options . ConfiguredRenderModes . Clear ( ) ;
142139 HotReloadService . UpdateApplication ( null ) ;
143140
@@ -148,37 +145,14 @@ public void NotifiesCompositeEndpointDataSource()
148145 Assert . Empty ( compositePageEndpoints ) ;
149146 }
150147
151- private sealed class WrappedChangeTokenDisposable : IDisposable
152- {
153- public bool IsDisposed { get ; private set ; }
154- private readonly IDisposable _innerDisposable ;
155-
156- public WrappedChangeTokenDisposable ( IDisposable innerDisposable )
157- {
158- _innerDisposable = innerDisposable ;
159- }
160-
161- public void Dispose ( )
162- {
163- IsDisposed = true ;
164- _innerDisposable . Dispose ( ) ;
165- }
166- }
167-
168148 [ Fact ]
169149 public void ConfirmChangeTokenDisposedHotReload ( )
170150 {
171151 // Arrange
172- var builder = CreateBuilder ( typeof ( ServerComponent ) ) ;
173152 var services = CreateServices ( typeof ( MockEndpointProvider ) ) ;
174- var endpointDataSource = CreateDataSource < App > ( builder , services ) ;
175-
176- WrappedChangeTokenDisposable wrappedChangeTokenDisposable = null ;
177-
178- endpointDataSource . SetDisposableChangeTokenAction = ( IDisposable disposableChangeToken ) => {
179- wrappedChangeTokenDisposable = new WrappedChangeTokenDisposable ( disposableChangeToken ) ;
180- return wrappedChangeTokenDisposable ;
181- } ;
153+ var endpointDataSource = CreateDataSource < App > ( services , ConfigureServerComponentBuilder , null ) ;
154+ var changeTokenSource = endpointDataSource . ChangeTokenSource ;
155+ var changeToken = endpointDataSource . GetChangeToken ( ) ;
182156
183157 var endpoint = Assert . IsType < RouteEndpoint > ( Assert . Single ( endpointDataSource . Endpoints , e => e . Metadata . GetMetadata < RootComponentMetadata > ( ) != null ) ) ;
184158 Assert . Equal ( "/server" , endpoint . RoutePattern . RawText ) ;
@@ -187,18 +161,21 @@ public void ConfirmChangeTokenDisposedHotReload()
187161 // Make a modification and then perform a hot reload.
188162 endpointDataSource . Conventions . Add ( builder =>
189163 builder . Metadata . Add ( new TestMetadata ( ) ) ) ;
164+
190165 HotReloadService . UpdateApplication ( null ) ;
191166 HotReloadService . ClearCache ( null ) ;
192167
193168 // Confirm the change token is disposed after ClearCache
194- Assert . True ( wrappedChangeTokenDisposable . IsDisposed ) ;
169+ Assert . True ( changeToken . HasChanged ) ;
170+ Assert . Throws < ObjectDisposedException > ( ( ) => changeTokenSource . Token ) ;
195171 }
196172
197173 private class TestMetadata { }
198174
199- private ComponentApplicationBuilder CreateBuilder ( params Type [ ] types )
175+ private class TestAssembly : Assembly ;
176+
177+ private static void ConfigureBuilder ( ComponentApplicationBuilder builder , params Type [ ] types )
200178 {
201- var builder = new ComponentApplicationBuilder ( ) ;
202179 builder . AddLibrary ( new AssemblyComponentLibraryDescriptor (
203180 "TestAssembly" ,
204181 Array . Empty < PageComponentBuilder > ( ) ,
@@ -208,8 +185,11 @@ private ComponentApplicationBuilder CreateBuilder(params Type[] types)
208185 ComponentType = t ,
209186 RenderMode = t . GetCustomAttribute < RenderModeAttribute > ( )
210187 } ) . ToArray ( ) ) ) ;
188+ }
211189
212- return builder ;
190+ private static void ConfigureServerComponentBuilder ( ComponentApplicationBuilder builder )
191+ {
192+ ConfigureBuilder ( builder , typeof ( ServerComponent ) ) ;
213193 }
214194
215195 private IServiceProvider CreateServices ( params Type [ ] types )
@@ -227,16 +207,21 @@ private IServiceProvider CreateServices(params Type[] types)
227207 }
228208
229209 private static RazorComponentEndpointDataSource < TComponent > CreateDataSource < TComponent > (
230- ComponentApplicationBuilder builder ,
231210 IServiceProvider services ,
232- IComponentRenderMode [ ] renderModes = null )
211+ Action < ComponentApplicationBuilder > configureBuilder = null ,
212+ IComponentRenderMode [ ] renderModes = null ,
213+ HotReloadService hotReloadService = null )
233214 {
234215 var result = new RazorComponentEndpointDataSource < TComponent > (
235- builder ,
236216 new [ ] { new MockEndpointProvider ( ) } ,
237217 new TestEndpointRouteBuilder ( services ) ,
238218 new RazorComponentEndpointFactory ( ) ,
239- new HotReloadService ( ) { MetadataUpdateSupported = true } ) ;
219+ hotReloadService ?? new HotReloadService ( ) { MetadataUpdateSupported = true } ) ;
220+
221+ if ( configureBuilder is not null )
222+ {
223+ result . ComponentApplicationBuilderActions . Add ( configureBuilder ) ;
224+ }
240225
241226 if ( renderModes != null )
242227 {
0 commit comments