@@ -161,6 +161,40 @@ public void RenderField_Should_Try_Multiple_Renderers_Until_Compatible_Found()
161161 . MustHaveHappenedOnceExactly ( ) ;
162162 }
163163
164+ [ Fact ]
165+ public void RenderField_Should_Use_Custom_Renderer_And_Bypass_Standard_Renderers ( )
166+ {
167+ // Arrange
168+ var model = new TestModel { Name = "Test" } ;
169+ var field = new FieldConfiguration < TestModel , string ? > ( x => x . Name ) ;
170+
171+ var customRenderer = new FakeCustomRenderer ( ) ;
172+ var services = new ServiceCollection ( ) ;
173+ services . AddSingleton ( customRenderer . GetType ( ) , customRenderer ) ;
174+ var serviceProvider = services . BuildServiceProvider ( ) ;
175+
176+ field . CustomRendererType = customRenderer . GetType ( ) ;
177+
178+ var standardRenderer = A . Fake < IFieldRenderer > ( ) ;
179+ A . CallTo ( ( ) => standardRenderer . CanRender ( A < Type > . _ , A < IFieldConfiguration < object , object > > . _ ) ) . Returns ( true ) ;
180+
181+ var service = new FieldRendererService ( new [ ] { standardRenderer } , serviceProvider ) ;
182+ var onValueChanged = EventCallback . Factory . Create < object ? > ( this , _ => { } ) ;
183+ var onDependencyChanged = EventCallback . Factory . Create ( this , ( ) => { } ) ;
184+
185+ // Act
186+ var result = service . RenderField ( model ,
187+ new FieldConfigurationWrapper < TestModel , string ? > ( field ) ,
188+ onValueChanged ,
189+ onDependencyChanged ) ;
190+
191+ // Assert
192+ result . ShouldNotBeNull ( ) ;
193+ customRenderer . WasCalled . ShouldBeTrue ( ) ;
194+ A . CallTo ( ( ) => standardRenderer . CanRender ( A < Type > . _ , A < IFieldConfiguration < object , object > > . _ ) ) . MustNotHaveHappened ( ) ;
195+ A . CallTo ( ( ) => standardRenderer . Render ( A < IFieldRenderContext < TestModel > > . _ ) ) . MustNotHaveHappened ( ) ;
196+ }
197+
164198 [ Fact ]
165199 public void RenderField_Should_Handle_Null_Current_Value ( )
166200 {
@@ -247,4 +281,15 @@ public class TestModel
247281 public string ? Name { get ; set ; }
248282 public int Value { get ; set ; }
249283 }
284+
285+ private class FakeCustomRenderer : ICustomFieldRenderer < string >
286+ {
287+ public bool WasCalled { get ; private set ; }
288+ public Type ValueType => typeof ( string ) ;
289+ public RenderFragment Render ( IFieldRenderContext context )
290+ {
291+ WasCalled = true ;
292+ return builder => builder . AddContent ( 0 , "Custom" ) ;
293+ }
294+ }
250295}
0 commit comments