diff --git a/CHANGELOG.md b/CHANGELOG.md index 6812a535d..a1b8072a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ The following section list all changes in 1.0.0 preview 01. ### Added List of new features. +- Added support for triggering `@ontoggle` event handlers through a dedicated `Toggle()` method. By [@egil](https://github.com/egil) in [#248](https://github.com/egil/bUnit/pull/248). + ### Changed List of changes in existing functionality. diff --git a/src/bunit.web/EventDispatchExtensions/DetailsElementEventDispatcherExtensions.cs b/src/bunit.web/EventDispatchExtensions/DetailsElementEventDispatcherExtensions.cs new file mode 100644 index 000000000..5cef04dfa --- /dev/null +++ b/src/bunit.web/EventDispatchExtensions/DetailsElementEventDispatcherExtensions.cs @@ -0,0 +1,31 @@ +#if NET5_0 +using System; +using System.Threading.Tasks; +using AngleSharp.Dom; + +namespace Bunit +{ + /// + /// General event dispatch helper extension methods. + /// + public static class DetailsElementEventDispatcherExtensions + { + /// + /// Raises the @ontoggle event on + /// to the event handler. + /// + /// The element to raise the event on. + public static void Toggle(this IElement element) + => _ = ToggleAsync(element, EventArgs.Empty); + + /// + /// Raises the @ontoggle event on , passing the provided + /// to the event handler. + /// + /// The element to raise the event on. + /// The event arguments to pass to the event handler. + /// A task that completes when the event handler is done. + private static Task ToggleAsync(this IElement element, EventArgs eventArgs) => element.TriggerEventAsync("ontoggle", eventArgs); + } +} +#endif diff --git a/tests/bunit.testassets/SampleComponents/ToggleableDetails.razor b/tests/bunit.testassets/SampleComponents/ToggleableDetails.razor new file mode 100644 index 000000000..5dcb306e3 --- /dev/null +++ b/tests/bunit.testassets/SampleComponents/ToggleableDetails.razor @@ -0,0 +1,19 @@ +
+ @if (detailsExpanded) + { +

Read the details carefully!

+ } +
+ Summary +

Detailed content

+
+
+ +@code { + bool detailsExpanded; + + void OnToggle() + { + detailsExpanded = !detailsExpanded; + } +} diff --git a/tests/bunit.web.tests/EventDispatchExtensions/DetailsElementEventDispatcherExtensionsTest.cs b/tests/bunit.web.tests/EventDispatchExtensions/DetailsElementEventDispatcherExtensionsTest.cs new file mode 100644 index 000000000..01f26ecd4 --- /dev/null +++ b/tests/bunit.web.tests/EventDispatchExtensions/DetailsElementEventDispatcherExtensionsTest.cs @@ -0,0 +1,28 @@ +#if NET5_0 +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Bunit; +using Bunit.TestAssets.SampleComponents; +using Shouldly; +using Xunit; + +namespace Bunit.EventDispatchExtensions +{ + public class DetailsElementEventDispatcherExtensionsTest : TestContext + { + [Fact(DisplayName = "Toggle raises ontoggle events")] + public void Test200() + { + var cut = RenderComponent(); + cut.FindAll("div > p").Count.ShouldBe(0); + + cut.Find("details").Toggle(); + + cut.FindAll("div > p").Count.ShouldBe(1); + } + } +} +#endif