@@ -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 {
@@ -394,4 +428,15 @@ public class TestModel
394428 public List < string > Tags { get ; set ; } = new ( ) ;
395429 public NestedModel NestedModel { get ; set ; } = new ( ) ;
396430 }
431+
432+ private class FakeCustomRenderer : ICustomFieldRenderer < string >
433+ {
434+ public bool WasCalled { get ; private set ; }
435+ public Type ValueType => typeof ( string ) ;
436+ public RenderFragment Render ( IFieldRenderContext context )
437+ {
438+ WasCalled = true ;
439+ return builder => builder . AddContent ( 0 , "Custom" ) ;
440+ }
441+ }
397442}
0 commit comments