From a23933d11d87f1102a53289c0be71f0f0050129c Mon Sep 17 00:00:00 2001 From: Steven Giesel Date: Sat, 1 Apr 2023 19:42:13 +0200 Subject: [PATCH 1/4] refactor: Use TestContext as base class --- .../tests/mstest/HelloWorldRazorTest.razor | 8 +- docs/samples/tests/mstest/HelloWorldTest.cs | 7 +- .../tests/nunit/HelloWorldRazorTest.razor | 2 +- docs/samples/tests/nunit/HelloWorldTest.cs | 7 +- .../tests/razor/CascadingParams1Test.razor | 10 +- .../tests/razor/CascadingParams2Test.razor | 10 +- .../tests/razor/CascadingParams3Test.razor | 18 +- .../tests/razor/ChildContentParams1Test.razor | 10 +- .../tests/razor/ChildContentParams2Test.razor | 10 +- .../tests/razor/ChildContentParams3Test.razor | 14 +- .../tests/razor/ChildContentParams4Test.razor | 16 +- docs/samples/tests/razor/ClickMeTest.razor | 5 +- .../tests/razor/EventCallbackParamsTest.razor | 10 +- .../tests/razor/NestedComponentTest.razor | 10 +- .../razor/NonBlazorTypesParamsTest.razor | 10 +- .../razor/RenderFragmentParams1Test.razor | 10 +- .../razor/RenderFragmentParams2Test.razor | 10 +- .../razor/RenderFragmentParams3Test.razor | 18 +- .../razor/RenderFragmentParams4Test.razor | 20 +- .../tests/razor/TemplateParams1Test.razor | 14 +- .../tests/razor/TemplateParams2Test.razor | 13 +- .../tests/razor/UnmatchedParamsTest.razor | 6 +- .../tests/xunit/AllKindsOfParamsTest.cs | 500 ++++++++---------- docs/samples/tests/xunit/AsyncDataTest.cs | 76 ++- .../tests/xunit/CascadingParams1Test.cs | 17 +- .../tests/xunit/CascadingParams2Test.cs | 15 +- .../tests/xunit/CascadingParams3Test.cs | 21 +- .../tests/xunit/ChildContentParams1Test.cs | 15 +- .../tests/xunit/ChildContentParams2Test.cs | 15 +- .../tests/xunit/ChildContentParams3Test.cs | 23 +- .../tests/xunit/ChildContentParams4Test.cs | 25 +- docs/samples/tests/xunit/ClickMeTest.cs | 28 +- .../xunit/ComponentFactoryExampleTest.cs | 7 +- docs/samples/tests/xunit/CounterTest.cs | 23 +- .../samples/tests/xunit/CounterTestWithCtx.cs | 24 +- .../xunit/CounterWithFancyParagraphTest.cs | 16 +- .../tests/xunit/DisposeComponentsTest.cs | 23 +- .../tests/xunit/EventCallbackParamsTest.cs | 21 +- .../xunit/FallBackServiceProviderUsage.cs | 16 +- .../tests/xunit/FallbackServiceProvider.cs | 13 +- .../tests/xunit/HelloWorldExplicitContext.cs | 17 + .../HelloWorldExplicitContextRazorTest.razor | 15 + .../HelloWorldImplicitContextRazorTest.razor | 1 + .../xunit/HelloWorldImplicitContextTest.cs | 15 +- .../tests/xunit/HelloWorldRazorTest.razor | 7 +- docs/samples/tests/xunit/HelloWorldTest.cs | 18 +- .../tests/xunit/InjectAuthServiceTest.cs | 51 +- .../tests/xunit/MockHttpClientBunitHelpers.cs | 85 ++- .../tests/xunit/NestedComponentTest.cs | 19 +- .../tests/xunit/NonBlazorTypesParamsTest.cs | 19 +- docs/samples/tests/xunit/ReRenderTest.cs | 58 +- .../tests/xunit/RenderFragmentParams1Test.cs | 15 +- .../tests/xunit/RenderFragmentParams2Test.cs | 15 +- .../tests/xunit/RenderFragmentParams3Test.cs | 23 +- .../tests/xunit/RenderFragmentParams4Test.cs | 25 +- docs/samples/tests/xunit/RenderTreeTest.cs | 47 +- docs/samples/tests/xunit/SemanticHtmlTest.cs | 24 +- .../tests/xunit/TemplateParams1Test.cs | 17 +- .../tests/xunit/TemplateParams2Test.cs | 21 +- docs/samples/tests/xunit/TwoWayBindingTest.cs | 5 +- .../tests/xunit/UnmatchedParamsTest.cs | 15 +- docs/samples/tests/xunit/UserInfoTest.cs | 75 ++- docs/samples/tests/xunit/UserRightsTest.cs | 163 +++--- .../tests/xunit/VerifyMarkupExamples.cs | 165 +++--- .../tests/xunit/WeatherForecastsTest.cs | 23 +- docs/serve-docs.sh | 2 + .../docs/getting-started/writing-tests.md | 54 +- .../docs/interaction/awaiting-async-state.md | 4 +- .../docs/interaction/dispose-components.md | 6 +- .../interaction/trigger-event-handlers.md | 7 +- docs/site/docs/interaction/trigger-renders.md | 6 +- .../inject-services-into-components.md | 4 +- .../passing-parameters-to-components.md | 21 +- .../docs/providing-input/root-render-tree.md | 4 +- .../substituting-components.md | 51 +- .../docs/test-doubles/emulating-ijsruntime.md | 18 +- .../test-doubles/fake-navigation-manager.md | 23 +- .../fake-webassemblyhostenvironment.md | 10 +- docs/site/docs/test-doubles/faking-auth.md | 20 +- .../faking-persistentcomponentstate.md | 22 +- docs/site/docs/test-doubles/input-file.md | 4 +- .../docs/test-doubles/mocking-httpclient.md | 3 +- .../site/docs/verification/async-assertion.md | 4 +- .../verification/semantic-html-comparison.md | 2 +- .../verification/verify-component-state.md | 7 +- docs/site/docs/verification/verify-markup.md | 16 +- docs/site/index.md | 2 +- .../Extensions/Internal/ElementFactory.cs | 3 +- 88 files changed, 1076 insertions(+), 1271 deletions(-) create mode 100644 docs/samples/tests/xunit/HelloWorldExplicitContext.cs create mode 100644 docs/samples/tests/xunit/HelloWorldExplicitContextRazorTest.razor create mode 100755 docs/serve-docs.sh diff --git a/docs/samples/tests/mstest/HelloWorldRazorTest.razor b/docs/samples/tests/mstest/HelloWorldRazorTest.razor index ab525d4be..bfd3c421e 100644 --- a/docs/samples/tests/mstest/HelloWorldRazorTest.razor +++ b/docs/samples/tests/mstest/HelloWorldRazorTest.razor @@ -1,14 +1,12 @@ @attribute [TestClass] -@code +@inherits TestContext +@code { [TestMethod] public void HelloWorldComponentRendersCorrectly() { - // Arrange - using var ctx = new Bunit.TestContext(); - // Act - var cut = ctx.Render(@); + var cut = Render(@); // Assert cut.MarkupMatches(@

Hello world from Blazor

); diff --git a/docs/samples/tests/mstest/HelloWorldTest.cs b/docs/samples/tests/mstest/HelloWorldTest.cs index aa7b17960..da9c7615e 100644 --- a/docs/samples/tests/mstest/HelloWorldTest.cs +++ b/docs/samples/tests/mstest/HelloWorldTest.cs @@ -4,16 +4,13 @@ namespace Bunit.Docs.Samples { [TestClass] - public class HelloWorldTest + public class HelloWorldTest : TestContext { [TestMethod] public void HelloWorldComponentRendersCorrectly() { - // Arrange - using var ctx = new Bunit.TestContext(); - // Act - var cut = ctx.RenderComponent(); + var cut = RenderComponent(); // Assert cut.MarkupMatches("

Hello world from Blazor

"); diff --git a/docs/samples/tests/nunit/HelloWorldRazorTest.razor b/docs/samples/tests/nunit/HelloWorldRazorTest.razor index c2f88c86b..d3e2e5591 100644 --- a/docs/samples/tests/nunit/HelloWorldRazorTest.razor +++ b/docs/samples/tests/nunit/HelloWorldRazorTest.razor @@ -7,7 +7,7 @@ using var ctx = new Bunit.TestContext(); // Act - var cut = ctx.Render(@); + var cut = Render(@); // Assert cut.MarkupMatches(@

Hello world from Blazor

); diff --git a/docs/samples/tests/nunit/HelloWorldTest.cs b/docs/samples/tests/nunit/HelloWorldTest.cs index 36386e769..8fd535fff 100644 --- a/docs/samples/tests/nunit/HelloWorldTest.cs +++ b/docs/samples/tests/nunit/HelloWorldTest.cs @@ -3,16 +3,13 @@ namespace Bunit.Docs.Samples { - public class HelloWorldTest + public class HelloWorldTest : TestContext { [Test] public void HelloWorldComponentRendersCorrectly() { - // Arrange - using var ctx = new Bunit.TestContext(); - // Act - var cut = ctx.RenderComponent(); + var cut = RenderComponent(); // Assert cut.MarkupMatches("

Hello world from Blazor

"); diff --git a/docs/samples/tests/razor/CascadingParams1Test.razor b/docs/samples/tests/razor/CascadingParams1Test.razor index 17a329bf6..db67f0142 100644 --- a/docs/samples/tests/razor/CascadingParams1Test.razor +++ b/docs/samples/tests/razor/CascadingParams1Test.razor @@ -1,14 +1,14 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - var isDarkTheme = true; - var cut = ctx.Render(@ - - ); + var cut = Render(@ + + ); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/CascadingParams2Test.razor b/docs/samples/tests/razor/CascadingParams2Test.razor index 667e8e06b..3dc8d73d0 100644 --- a/docs/samples/tests/razor/CascadingParams2Test.razor +++ b/docs/samples/tests/razor/CascadingParams2Test.razor @@ -1,12 +1,12 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - - ); + var cut = Render(@ + + ); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/CascadingParams3Test.razor b/docs/samples/tests/razor/CascadingParams3Test.razor index bbb079612..fa0f03812 100644 --- a/docs/samples/tests/razor/CascadingParams3Test.razor +++ b/docs/samples/tests/razor/CascadingParams3Test.razor @@ -1,18 +1,18 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - var isDarkTheme = true; - var cut = ctx.Render(@ - - - - - - ); + var cut = Render(@ + + + + + + ); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/ChildContentParams1Test.razor b/docs/samples/tests/razor/ChildContentParams1Test.razor index cf72072f3..18ee564e4 100644 --- a/docs/samples/tests/razor/ChildContentParams1Test.razor +++ b/docs/samples/tests/razor/ChildContentParams1Test.razor @@ -1,12 +1,12 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ -

Hello World

-
); + var cut = Render(@ +

Hello World

+
); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/ChildContentParams2Test.razor b/docs/samples/tests/razor/ChildContentParams2Test.razor index 0c77b3851..7ff765e5c 100644 --- a/docs/samples/tests/razor/ChildContentParams2Test.razor +++ b/docs/samples/tests/razor/ChildContentParams2Test.razor @@ -1,12 +1,12 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - - ); + var cut = Render(@ + + ); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/ChildContentParams3Test.razor b/docs/samples/tests/razor/ChildContentParams3Test.razor index dcd8a74ba..9e1041bc8 100644 --- a/docs/samples/tests/razor/ChildContentParams3Test.razor +++ b/docs/samples/tests/razor/ChildContentParams3Test.razor @@ -1,14 +1,14 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - -

Hello World

-
-
); + var cut = Render(@ + +

Hello World

+
+
); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/ChildContentParams4Test.razor b/docs/samples/tests/razor/ChildContentParams4Test.razor index fe832634a..fb9751d92 100644 --- a/docs/samples/tests/razor/ChildContentParams4Test.razor +++ b/docs/samples/tests/razor/ChildContentParams4Test.razor @@ -1,15 +1,15 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ -

Below you will find a most interesting alert!

- -

Hello World

-
-
); + var cut = Render(@ +

Below you will find a most interesting alert!

+ +

Hello World

+
+
); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/ClickMeTest.razor b/docs/samples/tests/razor/ClickMeTest.razor index f8ecd352f..940aa5595 100644 --- a/docs/samples/tests/razor/ClickMeTest.razor +++ b/docs/samples/tests/razor/ClickMeTest.razor @@ -1,11 +1,12 @@ +@inherits TestContext + @code { [Fact] public void Test() { // Arrange - using var ctx = new TestContext(); - var cut = ctx.Render(@); + var cut = Render(@); var buttonElement = cut.Find("button"); // Act diff --git a/docs/samples/tests/razor/EventCallbackParamsTest.razor b/docs/samples/tests/razor/EventCallbackParamsTest.razor index e9bbd4d0e..02482b6ef 100644 --- a/docs/samples/tests/razor/EventCallbackParamsTest.razor +++ b/docs/samples/tests/razor/EventCallbackParamsTest.razor @@ -1,15 +1,15 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - Action onClickHandler = _ => { }; Action onSomethingHandler = () => { }; - var cut = ctx.Render(@); + var cut = Render(@); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/NestedComponentTest.razor b/docs/samples/tests/razor/NestedComponentTest.razor index 531cccc36..470a1b06c 100644 --- a/docs/samples/tests/razor/NestedComponentTest.razor +++ b/docs/samples/tests/razor/NestedComponentTest.razor @@ -1,12 +1,12 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - - ); + var cut = Render(@ + + ); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/NonBlazorTypesParamsTest.razor b/docs/samples/tests/razor/NonBlazorTypesParamsTest.razor index dc6798edc..af4f64dd6 100644 --- a/docs/samples/tests/razor/NonBlazorTypesParamsTest.razor +++ b/docs/samples/tests/razor/NonBlazorTypesParamsTest.razor @@ -1,14 +1,14 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - var lines = new List { "Hello", "World" }; - var cut = ctx.Render(@); + var cut = Render(@); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/RenderFragmentParams1Test.razor b/docs/samples/tests/razor/RenderFragmentParams1Test.razor index 94379ae6d..0ffb568ca 100644 --- a/docs/samples/tests/razor/RenderFragmentParams1Test.razor +++ b/docs/samples/tests/razor/RenderFragmentParams1Test.razor @@ -1,12 +1,12 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ -

Hello World

-
); + var cut = Render(@ +

Hello World

+
); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/RenderFragmentParams2Test.razor b/docs/samples/tests/razor/RenderFragmentParams2Test.razor index 38c9b5bad..ceb160a91 100644 --- a/docs/samples/tests/razor/RenderFragmentParams2Test.razor +++ b/docs/samples/tests/razor/RenderFragmentParams2Test.razor @@ -1,12 +1,12 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - - ); + var cut = Render(@ + + ); } } diff --git a/docs/samples/tests/razor/RenderFragmentParams3Test.razor b/docs/samples/tests/razor/RenderFragmentParams3Test.razor index ac1c91d7c..36adadd33 100644 --- a/docs/samples/tests/razor/RenderFragmentParams3Test.razor +++ b/docs/samples/tests/razor/RenderFragmentParams3Test.razor @@ -1,16 +1,16 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - - -

Hello World

-
-
-
); + var cut = Render(@ + + +

Hello World

+
+
+
); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/RenderFragmentParams4Test.razor b/docs/samples/tests/razor/RenderFragmentParams4Test.razor index 3975f75da..0fa477306 100644 --- a/docs/samples/tests/razor/RenderFragmentParams4Test.razor +++ b/docs/samples/tests/razor/RenderFragmentParams4Test.razor @@ -1,17 +1,17 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - -

Below you will find a most interesting alert!

- -

Hello World

-
-
-
); + var cut = Render(@ + +

Below you will find a most interesting alert!

+ +

Hello World

+
+
+
); } } \ No newline at end of file diff --git a/docs/samples/tests/razor/TemplateParams1Test.razor b/docs/samples/tests/razor/TemplateParams1Test.razor index a475e6aba..612a27abb 100644 --- a/docs/samples/tests/razor/TemplateParams1Test.razor +++ b/docs/samples/tests/razor/TemplateParams1Test.razor @@ -1,16 +1,16 @@ +@inherits TestContext + @code { #if NET6_0 [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - - ); + var cut = Render(@ + + ); } #endif } \ No newline at end of file diff --git a/docs/samples/tests/razor/TemplateParams2Test.razor b/docs/samples/tests/razor/TemplateParams2Test.razor index 76505470f..5452aa81b 100644 --- a/docs/samples/tests/razor/TemplateParams2Test.razor +++ b/docs/samples/tests/razor/TemplateParams2Test.razor @@ -1,16 +1,15 @@ +@inherits TestContext @code { #if NET6_0 [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@ - - ); + var cut = Render(@ + + ); } #endif } \ No newline at end of file diff --git a/docs/samples/tests/razor/UnmatchedParamsTest.razor b/docs/samples/tests/razor/UnmatchedParamsTest.razor index a7ee122d5..f52af243f 100644 --- a/docs/samples/tests/razor/UnmatchedParamsTest.razor +++ b/docs/samples/tests/razor/UnmatchedParamsTest.razor @@ -1,10 +1,10 @@ +@inherits TestContext + @code { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.Render(@); + var cut = Render(@); } } \ No newline at end of file diff --git a/docs/samples/tests/xunit/AllKindsOfParamsTest.cs b/docs/samples/tests/xunit/AllKindsOfParamsTest.cs index 2ce634bfa..7fa75f062 100644 --- a/docs/samples/tests/xunit/AllKindsOfParamsTest.cs +++ b/docs/samples/tests/xunit/AllKindsOfParamsTest.cs @@ -6,348 +6,318 @@ using Bunit.Rendering; using static Bunit.ComponentParameterFactory; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class AllKindsOfParamsTest : TestContext { - public class AllKindsOfParamsTest - { [Fact] public void NonBlazorParamTypes() { - using var ctx = new TestContext(); - - // Using C# tuple with hardcoded name - var cut1 = ctx.RenderComponent( - ("Numbers", 42), - ("Lines", new List { "Hello", "World" }) - ); - - // Using C# tuple with refactor safe name - var cut2 = ctx.RenderComponent( - (nameof(NonBlazorTypesParams.Numbers), 42), - (nameof(NonBlazorTypesParams.Lines), new List { "Hello", "World" }) - ); - - // Using factory method - var cut3 = ctx.RenderComponent( - Parameter("Numbers", 42), - Parameter("Lines", new List { "Hello", "World" }) - ); - - // Using parameter builder - var cut4 = ctx.RenderComponent(parameters => parameters - .Add(p => p.Numbers, 42) - .Add(p => p.Lines, new List { "Hello", "World" }) - ); + // Using C# tuple with hardcoded name + var cut1 = RenderComponent( + ("Numbers", 42), + ("Lines", new List { "Hello", "World" }) + ); + + // Using C# tuple with refactor safe name + var cut2 = RenderComponent( + (nameof(NonBlazorTypesParams.Numbers), 42), + (nameof(NonBlazorTypesParams.Lines), new List { "Hello", "World" }) + ); + + // Using factory method + var cut3 = RenderComponent( + Parameter("Numbers", 42), + Parameter("Lines", new List { "Hello", "World" }) + ); + + // Using parameter builder + var cut4 = RenderComponent(parameters => parameters + .Add(p => p.Numbers, 42) + .Add(p => p.Lines, new List { "Hello", "World" }) + ); } [Fact] public void EventCallbackTypes() { - using var ctx = new TestContext(); - - // Using factory method with hardcoded name - var cut1 = ctx.RenderComponent( - EventCallback("OnClick", (MouseEventArgs args) => { /* handle callback */ }), - EventCallback("OnSomething", () => { /* handle callback */ }) - ); - - // Using factory method refactor safe name - var cut2 = ctx.RenderComponent( - EventCallback(nameof(EventCallbackParams.OnClick), (MouseEventArgs args) => { /* handle callback */ }), - EventCallback(nameof(EventCallbackParams.OnSomething), () => { /* handle callback */ }) - ); - - // Using parameter builder - var cut3 = ctx.RenderComponent(parameters => parameters - .Add(p => p.OnClick, args => { /* handle callback */ }) - .Add(p => p.OnSomething, () => { /* handle callback */ }) - ); + + // Using factory method with hardcoded name + var cut1 = RenderComponent( + EventCallback("OnClick", (MouseEventArgs args) => { /* handle callback */ }), + EventCallback("OnSomething", () => { /* handle callback */ }) + ); + + // Using factory method refactor safe name + var cut2 = RenderComponent( + EventCallback(nameof(EventCallbackParams.OnClick), (MouseEventArgs args) => { /* handle callback */ }), + EventCallback(nameof(EventCallbackParams.OnSomething), () => { /* handle callback */ }) + ); + + // Using parameter builder + var cut3 = RenderComponent(parameters => parameters + .Add(p => p.OnClick, args => { /* handle callback */ }) + .Add(p => p.OnSomething, () => { /* handle callback */ }) + ); } [Fact] public void HtmlAsChildContent() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - ChildContent("

Hello World

") - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .AddChildContent("

Hello World

") - ); + // Using factory method + var cut1 = RenderComponent( + ChildContent("

Hello World

") + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .AddChildContent("

Hello World

") + ); } [Fact] public void ComponentAsChildContent() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - ChildContent() - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .AddChildContent() - ); + // Using factory method + var cut1 = RenderComponent( + ChildContent() + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .AddChildContent() + ); } [Fact] public void ComponentWithParamsAsChildContent() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - ChildContent( - ("Heading", "Alert heading"), - ("Type", AlertType.Warning), - ChildContent("

Hello World

") - ) - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .AddChildContent(alertParameters => alertParameters - .Add(p => p.Heading, "Alert heading") - .Add(p => p.Type, AlertType.Warning) - .AddChildContent("

Hello World

") - ) - ); + // Using factory method + var cut1 = RenderComponent( + ChildContent( + ("Heading", "Alert heading"), + ("Type", AlertType.Warning), + ChildContent("

Hello World

") + ) + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .AddChildContent(alertParameters => alertParameters + .Add(p => p.Heading, "Alert heading") + .Add(p => p.Type, AlertType.Warning) + .AddChildContent("

Hello World

") + ) + ); } [Fact] public void ComponentAndMarkupAsChildContent() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - ChildContent("

Below you will find a most interesting alert!

"), - ChildContent( - ("Heading", "Alert heading"), - ("Type", AlertType.Warning), - ChildContent("

Hello World

") - ) - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .AddChildContent("

Below you will find a most interesting alert!

") - .AddChildContent(childParams => childParams - .Add(p => p.Heading, "Alert heading") - .Add(p => p.Type, AlertType.Warning) - .AddChildContent("

Hello World

") - ) - ); + // Using factory method + var cut1 = RenderComponent( + ChildContent("

Below you will find a most interesting alert!

"), + ChildContent( + ("Heading", "Alert heading"), + ("Type", AlertType.Warning), + ChildContent("

Hello World

") + ) + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .AddChildContent("

Below you will find a most interesting alert!

") + .AddChildContent(childParams => childParams + .Add(p => p.Heading, "Alert heading") + .Add(p => p.Type, AlertType.Warning) + .AddChildContent("

Hello World

") + ) + ); } [Fact] public void HtmlAsRenderFragment() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - RenderFragment("Content", "

Hello World

") - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .Add(p => p.Content, "

Hello World

") - ); + // Using factory method + var cut1 = RenderComponent( + RenderFragment("Content", "

Hello World

") + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .Add(p => p.Content, "

Hello World

") + ); } [Fact] public void ComponentAsRenderFragment() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - RenderFragment("Content") - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .Add(p => p.Content) - ); + // Using factory method + var cut1 = RenderComponent( + RenderFragment("Content") + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .Add(p => p.Content) + ); } [Fact] public void ComponentWithParamsAsRenderFragment() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - RenderFragment("Content", - ("Heading", "Alert heading"), - ("Type", AlertType.Warning), - ChildContent("

Hello World

") - ) - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .Add(p => p.Content, alertParameters => alertParameters - .Add(p => p.Heading, "Alert heading") - .Add(p => p.Type, AlertType.Warning) - .AddChildContent("

Hello World

") - ) - ); + // Using factory method + var cut1 = RenderComponent( + RenderFragment("Content", + ("Heading", "Alert heading"), + ("Type", AlertType.Warning), + ChildContent("

Hello World

") + ) + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .Add(p => p.Content, alertParameters => alertParameters + .Add(p => p.Heading, "Alert heading") + .Add(p => p.Type, AlertType.Warning) + .AddChildContent("

Hello World

") + ) + ); } [Fact] public void ComponentAndMarkupAsRenderFragment() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - RenderFragment("Content", "

Below you will find a most interesting alert!

"), - RenderFragment("Content", - ("Heading", "Alert heading"), - ("Type", AlertType.Warning), - ChildContent("

Hello World

") - ) - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .Add(p => p.Content, "

Below you will find a most interesting alert!

") - .Add(p => p.Content, childParams => childParams - .Add(p => p.Heading, "Alert heading") - .Add(p => p.Type, AlertType.Warning) - .AddChildContent("

Hello World

") - ) - ); + // Using factory method + var cut1 = RenderComponent( + RenderFragment("Content", "

Below you will find a most interesting alert!

"), + RenderFragment("Content", + ("Heading", "Alert heading"), + ("Type", AlertType.Warning), + ChildContent("

Hello World

") + ) + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .Add(p => p.Content, "

Below you will find a most interesting alert!

") + .Add(p => p.Content, childParams => childParams + .Add(p => p.Heading, "Alert heading") + .Add(p => p.Type, AlertType.Warning) + .AddChildContent("

Hello World

") + ) + ); } [Fact] public void HtmlTemplateParams() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent>( - ("Items", new string[] { "Foo", "Bar", "Baz" }), - Template("Template", item => $"{item}") - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent>(parameters => parameters - .Add(p => p.Items, new[] { "Foo", "Bar", "Baz" }) - .Add(p => p.Template, item => $"{item}") - ); + // Using factory method + var cut1 = RenderComponent>( + ("Items", new string[] { "Foo", "Bar", "Baz" }), + Template("Template", item => $"{item}") + ); + + // Using parameter builder + var cut2 = RenderComponent>(parameters => parameters + .Add(p => p.Items, new[] { "Foo", "Bar", "Baz" }) + .Add(p => p.Template, item => $"{item}") + ); } [Fact] public void HtmlAndComponentTemplateParams() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent>( - ("Items", new string[] { "Foo", "Bar", "Baz" }), - Template("Template", value => new ComponentParameter[] { - ("Value", value) - }) - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent>(parameters => parameters - .Add(p => p.Items, new[] { "Foo", "Bar", "Baz" }) - .Add(p => p.Template, value => itemParams => itemParams - .Add(p => p.Value, value) - ) - ); + // Using factory method + var cut1 = RenderComponent>( + ("Items", new string[] { "Foo", "Bar", "Baz" }), + Template("Template", value => new ComponentParameter[] { + ("Value", value) + }) + ); + + // Using parameter builder + var cut2 = RenderComponent>(parameters => parameters + .Add(p => p.Items, new[] { "Foo", "Bar", "Baz" }) + .Add(p => p.Template, value => itemParams => itemParams + .Add(p => p.Value, value) + ) + ); } [Fact] public void UnmatchedParamsTest() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - ("some-unknown-param", "a value") - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .AddUnmatched("some-unknown-param", "a value") - ); + // Using factory method + var cut1 = RenderComponent( + ("some-unknown-param", "a value") + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .AddUnmatched("some-unknown-param", "a value") + ); } [Fact] public void UnnamedCascadingParamsTest() { - using var ctx = new TestContext(); - var isDarkTheme = true; - - // Using factory method - var cut1 = ctx.RenderComponent( - CascadingValue(isDarkTheme) - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .AddCascadingValue(isDarkTheme) - ); - - // Using parameter builder and selecting unnamed cascading parameter - var cut3 = ctx.RenderComponent(parameters => parameters - .Add(p => p.IsDarkTheme, isDarkTheme) - ); + var isDarkTheme = true; + + // Using factory method + var cut1 = RenderComponent( + CascadingValue(isDarkTheme) + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .AddCascadingValue(isDarkTheme) + ); + + // Using parameter builder and selecting unnamed cascading parameter + var cut3 = RenderComponent(parameters => parameters + .Add(p => p.IsDarkTheme, isDarkTheme) + ); } [Fact] public void NamedCascadingParamsTest() { - using var ctx = new TestContext(); - - // Using factory method - var cut1 = ctx.RenderComponent( - CascadingValue("LoggedInUser", "Egil Hansen") - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .Add(p => p.UserName, "Egil Hansen") - ); + // Using factory method + var cut1 = RenderComponent( + CascadingValue("LoggedInUser", "Egil Hansen") + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .Add(p => p.UserName, "Egil Hansen") + ); } [Fact] public void UnnamedAndNamedCascadingParamsTest() { - using var ctx = new TestContext(); - var isDarkTheme = true; - - // Using factory method - var cut1 = ctx.RenderComponent( - CascadingValue(isDarkTheme), - CascadingValue("LoggedInUser", "Egil Hansen"), - CascadingValue("LoggedInEmail", "egil@example.com") - ); - - // Using parameter builder - var cut2 = ctx.RenderComponent(parameters => parameters - .AddCascadingValue(isDarkTheme) - .Add(p => p.UserName, "Egil Hansen") - .Add(p => p.Email, "egil@example.com") - ); - - // Using parameter builder and selecting unnamed cascading parameter - var cut3 = ctx.RenderComponent(parameters => parameters - .Add(p => p.IsDarkTheme, isDarkTheme) - .Add(p => p.UserName, "Egil Hansen") - .Add(p => p.Email, "egil@example.com") - ); + var isDarkTheme = true; + + // Using factory method + var cut1 = RenderComponent( + CascadingValue(isDarkTheme), + CascadingValue("LoggedInUser", "Egil Hansen"), + CascadingValue("LoggedInEmail", "egil@example.com") + ); + + // Using parameter builder + var cut2 = RenderComponent(parameters => parameters + .AddCascadingValue(isDarkTheme) + .Add(p => p.UserName, "Egil Hansen") + .Add(p => p.Email, "egil@example.com") + ); + + // Using parameter builder and selecting unnamed cascading parameter + var cut3 = RenderComponent(parameters => parameters + .Add(p => p.IsDarkTheme, isDarkTheme) + .Add(p => p.UserName, "Egil Hansen") + .Add(p => p.Email, "egil@example.com") + ); } - } -} +} \ No newline at end of file diff --git a/docs/samples/tests/xunit/AsyncDataTest.cs b/docs/samples/tests/xunit/AsyncDataTest.cs index 42e87765e..f1d52eeec 100644 --- a/docs/samples/tests/xunit/AsyncDataTest.cs +++ b/docs/samples/tests/xunit/AsyncDataTest.cs @@ -4,66 +4,62 @@ using System; using System.Threading.Tasks; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class AsyncDataTest : TestContext { - public class AsyncDataTest - { [Fact] public void LoadDataAsync() { - // Arrange - using var ctx = new TestContext(); - var textService = new TaskCompletionSource(); - var cut = ctx.RenderComponent(parameters => parameters - .Add(p => p.TextService, textService.Task) - ); + // Arrange + var textService = new TaskCompletionSource(); + var cut = RenderComponent(parameters => parameters + .Add(p => p.TextService, textService.Task) + ); - // Act - set the awaited result from the text service - textService.SetResult("Hello World"); + // Act - set the awaited result from the text service + textService.SetResult("Hello World"); - // Wait for state before continuing test - cut.WaitForState(() => cut.Find("p").TextContent == "Hello World"); + // Wait for state before continuing test + cut.WaitForState(() => cut.Find("p").TextContent == "Hello World"); - // Assert - verify result has been set - cut.MarkupMatches("

Hello World

"); + // Assert - verify result has been set + cut.MarkupMatches("

Hello World

"); } [Fact] public void LoadDataAsyncWithTimeout() { - // Arrange - using var ctx = new TestContext(); - var textService = new TaskCompletionSource(); - var cut = ctx.RenderComponent(parameters => parameters - .Add(p => p.TextService, textService.Task) - ); + // Arrange + var textService = new TaskCompletionSource(); + var cut = RenderComponent(parameters => parameters + .Add(p => p.TextService, textService.Task) + ); - // Act - set the awaited result from the text service - textService.SetResult("Long time"); + // Act - set the awaited result from the text service + textService.SetResult("Long time"); - // Wait for state before continuing test - cut.WaitForState(() => cut.Find("p").TextContent == "Long time", TimeSpan.FromSeconds(2)); + // Wait for state before continuing test + cut.WaitForState(() => cut.Find("p").TextContent == "Long time", TimeSpan.FromSeconds(2)); - // Assert - verify result has been set - cut.MarkupMatches("

Long time

"); + // Assert - verify result has been set + cut.MarkupMatches("

Long time

"); } [Fact] public void LoadDataAsyncAssertion() { - // Arrange - using var ctx = new TestContext(); - var textService = new TaskCompletionSource(); - var cut = ctx.RenderComponent(parameters => parameters - .Add(p => p.TextService, textService.Task) - ); + // Arrange + var textService = new TaskCompletionSource(); + var cut = RenderComponent(parameters => parameters + .Add(p => p.TextService, textService.Task) + ); - // Act - set the awaited result from the text service - textService.SetResult("Hello World"); + // Act - set the awaited result from the text service + textService.SetResult("Hello World"); - // Wait for assertion to pass - cut.WaitForAssertion(() => cut.MarkupMatches("

Hello World

")); - cut.WaitForAssertion(() => cut.MarkupMatches("

Hello World

"), TimeSpan.FromSeconds(2)); + // Wait for assertion to pass + cut.WaitForAssertion(() => cut.MarkupMatches("

Hello World

")); + cut.WaitForAssertion(() => cut.MarkupMatches("

Hello World

"), TimeSpan.FromSeconds(2)); } - } -} +} \ No newline at end of file diff --git a/docs/samples/tests/xunit/CascadingParams1Test.cs b/docs/samples/tests/xunit/CascadingParams1Test.cs index 77858c7d1..1b7f17d46 100644 --- a/docs/samples/tests/xunit/CascadingParams1Test.cs +++ b/docs/samples/tests/xunit/CascadingParams1Test.cs @@ -6,20 +6,17 @@ using Microsoft.AspNetCore.Components.Web; using Bunit.Rendering; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class CascadingParams1Test : TestContext { - public class CascadingParams1Test - { [Fact] public void Test() { - using var ctx = new TestContext(); - - var isDarkTheme = true; + var isDarkTheme = true; - var cut = ctx.RenderComponent(parameters => parameters - .Add(p => p.IsDarkTheme, isDarkTheme) - ); + var cut = RenderComponent(parameters => parameters + .Add(p => p.IsDarkTheme, isDarkTheme) + ); } - } } \ No newline at end of file diff --git a/docs/samples/tests/xunit/CascadingParams2Test.cs b/docs/samples/tests/xunit/CascadingParams2Test.cs index 17ae32032..2fc5d2f6e 100644 --- a/docs/samples/tests/xunit/CascadingParams2Test.cs +++ b/docs/samples/tests/xunit/CascadingParams2Test.cs @@ -6,18 +6,15 @@ using Microsoft.AspNetCore.Components.Web; using Bunit.Rendering; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class CascadingParams2Test : TestContext { - public class CascadingParams2Test - { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.RenderComponent(parameters => parameters - .Add(p => p.UserName, "Name of User") - ); + var cut = RenderComponent(parameters => parameters + .Add(p => p.UserName, "Name of User") + ); } - } } \ No newline at end of file diff --git a/docs/samples/tests/xunit/CascadingParams3Test.cs b/docs/samples/tests/xunit/CascadingParams3Test.cs index 574dc2bab..34e55bd25 100644 --- a/docs/samples/tests/xunit/CascadingParams3Test.cs +++ b/docs/samples/tests/xunit/CascadingParams3Test.cs @@ -6,22 +6,19 @@ using Microsoft.AspNetCore.Components.Web; using Bunit.Rendering; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class CascadingParams3Test : TestContext { - public class CascadingParams3Test - { [Fact] public void Test() { - using var ctx = new TestContext(); - - var isDarkTheme = true; + var isDarkTheme = true; - var cut = ctx.RenderComponent(parameters => parameters - .Add(p => p.IsDarkTheme, isDarkTheme) - .Add(p => p.UserName, "Name of User") - .Add(p => p.Email, "user@example.com") - ); + var cut = RenderComponent(parameters => parameters + .Add(p => p.IsDarkTheme, isDarkTheme) + .Add(p => p.UserName, "Name of User") + .Add(p => p.Email, "user@example.com") + ); } - } } \ No newline at end of file diff --git a/docs/samples/tests/xunit/ChildContentParams1Test.cs b/docs/samples/tests/xunit/ChildContentParams1Test.cs index 5a9f2838c..550a98531 100644 --- a/docs/samples/tests/xunit/ChildContentParams1Test.cs +++ b/docs/samples/tests/xunit/ChildContentParams1Test.cs @@ -6,18 +6,15 @@ using Microsoft.AspNetCore.Components.Web; using Bunit.Rendering; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class ChildContentParams1Test : TestContext { - public class ChildContentParams1Test - { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.RenderComponent(parameters => parameters - .AddChildContent("

Hello World

") - ); + var cut = RenderComponent(parameters => parameters + .AddChildContent("

Hello World

") + ); } - } } \ No newline at end of file diff --git a/docs/samples/tests/xunit/ChildContentParams2Test.cs b/docs/samples/tests/xunit/ChildContentParams2Test.cs index f2efe836d..6cc1151b9 100644 --- a/docs/samples/tests/xunit/ChildContentParams2Test.cs +++ b/docs/samples/tests/xunit/ChildContentParams2Test.cs @@ -6,18 +6,15 @@ using Microsoft.AspNetCore.Components.Web; using Bunit.Rendering; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class ChildContentParams2Test : TestContext { - public class ChildContentParams2Test - { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.RenderComponent(parameters => parameters - .AddChildContent() - ); + var cut = RenderComponent(parameters => parameters + .AddChildContent() + ); } - } } \ No newline at end of file diff --git a/docs/samples/tests/xunit/ChildContentParams3Test.cs b/docs/samples/tests/xunit/ChildContentParams3Test.cs index ccc3ad4c0..9b06d9731 100644 --- a/docs/samples/tests/xunit/ChildContentParams3Test.cs +++ b/docs/samples/tests/xunit/ChildContentParams3Test.cs @@ -6,22 +6,19 @@ using Microsoft.AspNetCore.Components.Web; using Bunit.Rendering; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class ChildContentParams3Test : TestContext { - public class ChildContentParams3Test - { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.RenderComponent(parameters => parameters - .AddChildContent(alertParameters => alertParameters - .Add(p => p.Heading, "Alert heading") - .Add(p => p.Type, AlertType.Warning) - .AddChildContent("

Hello World

") - ) - ); + var cut = RenderComponent(parameters => parameters + .AddChildContent(alertParameters => alertParameters + .Add(p => p.Heading, "Alert heading") + .Add(p => p.Type, AlertType.Warning) + .AddChildContent("

Hello World

") + ) + ); } - } } \ No newline at end of file diff --git a/docs/samples/tests/xunit/ChildContentParams4Test.cs b/docs/samples/tests/xunit/ChildContentParams4Test.cs index 863f2dc69..ac0c63dd7 100644 --- a/docs/samples/tests/xunit/ChildContentParams4Test.cs +++ b/docs/samples/tests/xunit/ChildContentParams4Test.cs @@ -6,23 +6,20 @@ using Microsoft.AspNetCore.Components.Web; using Bunit.Rendering; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class ChildContentParams4Test : TestContext { - public class ChildContentParams4Test - { [Fact] public void Test() { - using var ctx = new TestContext(); - - var cut = ctx.RenderComponent(parameters => parameters - .AddChildContent("

Below you will find a most interesting alert!

") - .AddChildContent(childParams => childParams - .Add(p => p.Heading, "Alert heading") - .Add(p => p.Type, AlertType.Warning) - .AddChildContent("

Hello World

") - ) - ); + var cut = RenderComponent(parameters => parameters + .AddChildContent("

Below you will find a most interesting alert!

") + .AddChildContent(childParams => childParams + .Add(p => p.Heading, "Alert heading") + .Add(p => p.Type, AlertType.Warning) + .AddChildContent("

Hello World

") + ) + ); } - } } \ No newline at end of file diff --git a/docs/samples/tests/xunit/ClickMeTest.cs b/docs/samples/tests/xunit/ClickMeTest.cs index 57731fae8..8a0f80e9e 100644 --- a/docs/samples/tests/xunit/ClickMeTest.cs +++ b/docs/samples/tests/xunit/ClickMeTest.cs @@ -2,25 +2,23 @@ using Xunit; using Bunit; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class ClickMeTest : TestContext { - public class ClickMeTest - { [Fact] public void Test() { - // Arrange - using var ctx = new TestContext(); - var cut = ctx.RenderComponent(); - var buttonElement = cut.Find("button"); + // Arrange + var cut = RenderComponent(); + var buttonElement = cut.Find("button"); - // Act - buttonElement.Click(); - buttonElement.Click(detail: 3, ctrlKey: true); - buttonElement.Click(new MouseEventArgs()); + // Act + buttonElement.Click(); + buttonElement.Click(detail: 3, ctrlKey: true); + buttonElement.Click(new MouseEventArgs()); - // Assert - // ... + // Assert + // ... } - } -} +} \ No newline at end of file diff --git a/docs/samples/tests/xunit/ComponentFactoryExampleTest.cs b/docs/samples/tests/xunit/ComponentFactoryExampleTest.cs index c52fe4169..47719d16c 100644 --- a/docs/samples/tests/xunit/ComponentFactoryExampleTest.cs +++ b/docs/samples/tests/xunit/ComponentFactoryExampleTest.cs @@ -6,17 +6,16 @@ namespace Bunit.Docs.Samples { - public class ComponentFactoryExampleTest + public class ComponentFactoryExampleTest : TestContext { [Fact] public void ReplacesFooWithBarDuringTest() { // Arrange - using var ctx = new TestContext(); - ctx.ComponentFactories.Add(new FooBarComponentFactory()); + ComponentFactories.Add(new FooBarComponentFactory()); // Act - var cut = ctx.RenderComponent(parameters => parameters + var cut = RenderComponent(parameters => parameters .AddChildContent()); // Assert that there are no in render tree, diff --git a/docs/samples/tests/xunit/CounterTest.cs b/docs/samples/tests/xunit/CounterTest.cs index 075f209fa..f7c1d7ef0 100644 --- a/docs/samples/tests/xunit/CounterTest.cs +++ b/docs/samples/tests/xunit/CounterTest.cs @@ -1,22 +1,21 @@ using Xunit; using Bunit; -namespace Bunit.Docs.Samples +namespace Bunit.Docs.Samples; + +public class CounterTest : TestContext { - public class CounterTest : TestContext - { [Fact] public void CounterShouldIncrementWhenClicked() { - // Arrange: render the Counter.razor component - var cut = RenderComponent(); + // Arrange: render the Counter.razor component + var cut = RenderComponent(); - // Act: find and click the