From 781133adf19746458ddbe3d6dffcaf0503fbd90a Mon Sep 17 00:00:00 2001 From: Jcparkyn <51850908+Jcparkyn@users.noreply.github.com> Date: Fri, 1 Dec 2023 15:35:26 +1100 Subject: [PATCH] Add overloads to InvokeAsync with a return value Closes #1296 --- CHANGELOG.md | 4 +++ .../RenderedFragmentInvokeAsyncExtensions.cs | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c32792c6..2d6e291c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ All notable changes to **bUnit** will be documented in this file. The project ad - When the `TestContext` was disposed, the Blazor Renderer itself didn't dispose components under test. By [@linkdotnet](https://github.com/linkdotnet). +### Added + +- New overloads for `IRenderedFragmentBase.InvokeAsync` that allow retrieving the work item's return value. By [@jcparkyn](https://github.com/jcparkyn). + ## [1.25.3] - 2023-11-14 - Upgrade all .NET 8 preview dependencies to .NET 8 stable. diff --git a/src/bunit.core/Extensions/RenderedFragmentInvokeAsyncExtensions.cs b/src/bunit.core/Extensions/RenderedFragmentInvokeAsyncExtensions.cs index f1cf67190..7abaee89b 100644 --- a/src/bunit.core/Extensions/RenderedFragmentInvokeAsyncExtensions.cs +++ b/src/bunit.core/Extensions/RenderedFragmentInvokeAsyncExtensions.cs @@ -36,4 +36,34 @@ public static Task InvokeAsync(this IRenderedFragmentBase renderedFragment, Func return renderedFragment.Services.GetRequiredService() .Dispatcher.InvokeAsync(workItem); } + + /// + /// Invokes the given in the context of the associated . + /// + /// The rendered component whose dispatcher to invoke with. + /// The work item to execute on the renderer's thread. + /// A that will be completed when the action has finished executing, with the return value from . + public static Task InvokeAsync(this IRenderedFragmentBase renderedFragment, Func workItem) + { + if (renderedFragment is null) + throw new ArgumentNullException(nameof(renderedFragment)); + + return renderedFragment.Services.GetRequiredService() + .Dispatcher.InvokeAsync(workItem); + } + + /// + /// Invokes the given in the context of the associated . + /// + /// The rendered component whose dispatcher to invoke with. + /// The work item to execute on the renderer's thread. + /// A that will be completed when the action has finished executing, with the return value from . + public static Task InvokeAsync(this IRenderedFragmentBase renderedFragment, Func> workItem) + { + if (renderedFragment is null) + throw new ArgumentNullException(nameof(renderedFragment)); + + return renderedFragment.Services.GetRequiredService() + .Dispatcher.InvokeAsync(workItem); + } }