Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/bunit/Rendering/BunitRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -447,15 +447,23 @@ protected override void ProcessPendingRender()
/// <inheritdoc/>
protected override Task UpdateDisplayAsync(in RenderBatch renderBatch)
{
var disposedComponentIds = new HashSet<int>();
for (var i = 0; i < renderBatch.DisposedComponentIDs.Count; i++)
{
var id = renderBatch.DisposedComponentIDs.Array[i];
disposedComponentIds.Add(id);
returnedRenderedComponentIds.Remove(id);
}

for (var i = 0; i < renderBatch.UpdatedComponents.Count; i++)
{
var diff = renderBatch.UpdatedComponents.Array[i];

if (disposedComponentIds.Contains(diff.ComponentId))
{
continue;
}

var componentState = GetComponentState(diff.ComponentId);
var renderedComponent = (IRenderedComponent)componentState;

Expand Down
26 changes: 26 additions & 0 deletions tests/bunit.testassets/SampleComponents/FormWithValidation.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<EditForm Model="model" OnValidSubmit="SetInvoked">
<DataAnnotationsValidator />

<InputText id="title" @bind-Value="model.Title" />
<button>Submit</button>
</EditForm>

@code {

[Parameter]
public bool Invoked { get; set; }

private Model model = new();

private void SetInvoked()
{
Invoked = true;
model = new Model();
}

public sealed class Model
{
public string? Title { get; set; }
}

}
11 changes: 11 additions & 0 deletions tests/bunit.tests/Rendering/RenderedComponentTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,17 @@ public void Test024()

text.ShouldNotBeNull();
}

[Fact(DisplayName = "Form submission with DataAnnotationsValidator and model recreation works correctly")]
public void Test025()
{
var cut = Render<FormWithValidation>();
cut.Find("#title").Change("title");

cut.Find("form").Submit();

cut.Instance.Invoked.ShouldBeTrue();
}

private class BaseComponent : ComponentBase
{
Expand Down
Loading