Skip to content

Commit 0413ecf

Browse files
committed
Maybe a solution to #118 - Attemting to add more waiting to the DispatchEventAsync method
1 parent f4ac386 commit 0413ecf

4 files changed

Lines changed: 14 additions & 5 deletions

File tree

src/bunit.core/Rendering/TestRenderer.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,17 @@ public Task<int> RenderFragment(RenderFragment renderFragment)
8484
}
8585

8686
/// <inheritdoc/>
87-
public new Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo fieldInfo, EventArgs eventArgs)
87+
public new async Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo fieldInfo, EventArgs eventArgs)
8888
{
8989
if (fieldInfo is null)
9090
throw new ArgumentNullException(nameof(fieldInfo));
9191
_logger.LogDebug(new EventId(1, nameof(DispatchEventAsync)), $"Starting trigger of '{fieldInfo.FieldValue}'");
9292

93-
var task = Dispatcher.InvokeAsync(() =>
93+
await Dispatcher.InvokeAsync(async () =>
9494
{
9595
try
9696
{
97-
return base.DispatchEventAsync(eventHandlerId, fieldInfo, eventArgs);
97+
await base.DispatchEventAsync(eventHandlerId, fieldInfo, eventArgs);
9898
}
9999
catch (Exception e)
100100
{
@@ -106,7 +106,6 @@ public Task<int> RenderFragment(RenderFragment renderFragment)
106106
AssertNoUnhandledExceptions();
107107

108108
_logger.LogDebug(new EventId(1, nameof(DispatchEventAsync)), $"Finished trigger of '{fieldInfo.FieldValue}'");
109-
return task;
110109
}
111110

112111
/// <inheritdoc/>

src/bunit.web.tests/Rendering/RenderWaitingHelperExtensionsTest.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,11 +152,12 @@ public void Test013()
152152
expected.InnerException.ShouldBeOfType<InvalidOperationException>()
153153
.Message.ShouldBe(expectedInnerMessage);
154154
}
155-
155+
156156
[Fact(DisplayName = "WaitForState can wait for multiple renders and changes to occur")]
157157
public void Test100()
158158
{
159159
_testOutput.WriteLine($"INIT TEST100: {Thread.GetCurrentProcessorId()} - {Thread.CurrentThread.ManagedThreadId}");
160+
160161
// Initial state is stopped
161162
var cut = RenderComponent<TwoRendersTwoChanges>();
162163
var stateElement = cut.Find("#state");
@@ -170,8 +171,10 @@ public void Test100()
170171
// This click causes two renders, thus something is needed to await here.
171172
cut.Find("#tock").Click();
172173
_testOutput.WriteLine($"BEFORE WAIT FOR STATE TEST100: {Thread.GetCurrentProcessorId()} - {Thread.CurrentThread.ManagedThreadId}");
174+
173175
cut.WaitForState(() => cut.Find("#state").TextContent == "Stopped");
174176
_testOutput.WriteLine($"AFTER WAIT FOR STATE TEST100: {Thread.GetCurrentProcessorId()} - {Thread.CurrentThread.ManagedThreadId}");
177+
175178
cut.Find("#state").TextContent.ShouldBe("Stopped");
176179
_testOutput.WriteLine($"END TEST100: {Thread.GetCurrentProcessorId()} - {Thread.CurrentThread.ManagedThreadId}");
177180
}

src/bunit.web/Rendering/Internal/Htmlizer.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010

1111
namespace Bunit
1212
{
13+
/// <summary>
14+
/// This file is based on
15+
/// https://source.dot.net/#Microsoft.AspNetCore.Mvc.ViewFeatures/RazorComponents/HtmlRenderer.cs
16+
/// </summary>
1317
[SuppressMessage("Usage", "BL0006:Do not use RenderTree types", Justification = "<Pending>")]
1418
internal class Htmlizer
1519
{

src/bunit.web/Rendering/RenderedFragment.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ public string Markup
4545
get
4646
{
4747
if (_latestRenderMarkup is null)
48+
{
49+
// TODO: Htmlizer can throw... should we handle that here?
4850
_latestRenderMarkup = Htmlizer.GetHtml(Renderer, ComponentId);
51+
}
4952
return _latestRenderMarkup;
5053
}
5154
}

0 commit comments

Comments
 (0)