@@ -200,6 +200,7 @@ public void Throws_WhenIsFixedAndNameChanges()
200
200
{
201
201
builder . OpenComponent < CascadingModelBinder > ( 0 ) ;
202
202
builder . AddAttribute ( 1 , nameof ( CascadingModelBinder . Name ) , contextName ) ;
203
+ builder . AddAttribute ( 2 , nameof ( CascadingModelBinder . IsFixed ) , true ) ;
203
204
builder . AddAttribute ( 3 , nameof ( CascadingModelBinder . ChildContent ) , contents ) ;
204
205
builder . CloseComponent ( ) ;
205
206
} ) ;
@@ -213,6 +214,85 @@ public void Throws_WhenIsFixedAndNameChanges()
213
214
Assert . Equal ( "'CascadingModelBinder' 'Name' can't change after initialized." , exception . Message ) ;
214
215
}
215
216
217
+ [ Theory ]
218
+ [ InlineData ( true ) ]
219
+ [ InlineData ( false ) ]
220
+ public void Throws_WhenIsFixed_Changes ( bool isFixed )
221
+ {
222
+ ModelBindingContext capturedContext = null ;
223
+ RenderFragment < ModelBindingContext > contents = ( ctx ) => b => { capturedContext = ctx ; } ;
224
+ var testComponent = new TestComponent ( builder =>
225
+ {
226
+ builder . OpenComponent < CascadingModelBinder > ( 0 ) ;
227
+ builder . AddAttribute ( 1 , nameof ( CascadingModelBinder . IsFixed ) , isFixed ) ;
228
+ builder . AddAttribute ( 2 , nameof ( CascadingModelBinder . ChildContent ) , contents ) ;
229
+ builder . CloseComponent ( ) ;
230
+ } ) ;
231
+ var id = _renderer . AssignRootComponentId ( testComponent ) ;
232
+ _renderer . RenderRootComponent ( id ) ;
233
+
234
+ // Act
235
+ isFixed = ! isFixed ;
236
+ var exception = Assert . Throws < InvalidOperationException > ( testComponent . TriggerRender ) ;
237
+
238
+ Assert . Equal ( "The value of IsFixed cannot be changed dynamically." , exception . Message ) ;
239
+ }
240
+
241
+ [ Fact ]
242
+ public void CanChange_Name_WhenNotFixed ( )
243
+ {
244
+ ModelBindingContext capturedContext = null ;
245
+ ModelBindingContext originalContext = null ;
246
+ RenderFragment < ModelBindingContext > contents = ( ctx ) => b => { capturedContext = ctx ; } ;
247
+ var contextName = "parent-context" ;
248
+
249
+ var testComponent = new TestComponent ( builder =>
250
+ {
251
+ builder . OpenComponent < CascadingModelBinder > ( 0 ) ;
252
+ builder . AddAttribute ( 1 , nameof ( CascadingModelBinder . Name ) , contextName ) ;
253
+ builder . AddAttribute ( 3 , nameof ( CascadingModelBinder . ChildContent ) , contents ) ;
254
+ builder . CloseComponent ( ) ;
255
+ } ) ;
256
+ var id = _renderer . AssignRootComponentId ( testComponent ) ;
257
+ _renderer . RenderRootComponent ( id ) ;
258
+
259
+ originalContext = capturedContext ;
260
+ contextName = "changed" ;
261
+
262
+ // Act
263
+ testComponent . TriggerRender ( ) ;
264
+
265
+ Assert . NotSame ( capturedContext , originalContext ) ;
266
+ Assert . Equal ( "changed" , capturedContext . Name ) ;
267
+ }
268
+
269
+ [ Fact ]
270
+ public void CanChange_BindingContextId_WhenNotFixed ( )
271
+ {
272
+ ModelBindingContext capturedContext = null ;
273
+ ModelBindingContext originalContext = null ;
274
+ RenderFragment < ModelBindingContext > contents = ( ctx ) => b => { capturedContext = ctx ; } ;
275
+
276
+ var testComponent = new TestComponent ( builder =>
277
+ {
278
+ builder . OpenComponent < CascadingModelBinder > ( 0 ) ;
279
+ builder . AddComponentParameter ( 1 , nameof ( CascadingModelBinder . Name ) , "context-name" ) ;
280
+ builder . AddComponentParameter ( 2 , nameof ( CascadingModelBinder . ChildContent ) , contents ) ;
281
+ builder . CloseComponent ( ) ;
282
+ } ) ;
283
+ var id = _renderer . AssignRootComponentId ( testComponent ) ;
284
+ _renderer . RenderRootComponent ( id ) ;
285
+
286
+ originalContext = capturedContext ;
287
+
288
+ // Act
289
+ _navigationManager . NavigateTo ( _navigationManager . ToAbsoluteUri ( "fetch-data/6" ) . ToString ( ) ) ;
290
+ testComponent . TriggerRender ( ) ;
291
+
292
+ Assert . NotSame ( capturedContext , originalContext ) ;
293
+ Assert . Equal ( "fetch-data/6?handler=context-name" , capturedContext . BindingContextId ) ;
294
+ }
295
+
216
296
private class RouteViewTestNavigationManager : NavigationManager
217
297
{
218
298
public RouteViewTestNavigationManager ( ) =>
0 commit comments