From c1c2332341080aef164a79f851caa2e0c7e75321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Can=20Karag=C3=B6z?= Date: Fri, 26 Dec 2025 16:38:57 +0300 Subject: [PATCH 1/2] Test Docs --- .../Components/RenderTests.cs | 150 +++++++++--------- .../Docs/DocsPagesRenderTests.cs | 36 +++++ 2 files changed, 111 insertions(+), 75 deletions(-) create mode 100644 CodeBeam.MudBlazor.Extensions.UnitTests/Docs/DocsPagesRenderTests.cs diff --git a/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs b/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs index 0f606ccd..c65e4767 100644 --- a/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs +++ b/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs @@ -1,86 +1,86 @@ -using AwesomeAssertions; -using MudExtensions.Docs.Pages; +//using AwesomeAssertions; +//using MudExtensions.Docs.Pages; -namespace MudExtensions.UnitTests.Components -{ - [TestFixture] - public class RenderTests : BunitTest - { - [Test] - public void ApiPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +//namespace MudExtensions.UnitTests.Components +//{ +// [TestFixture] +// public class RenderTests : BunitTest +// { +// [Test] +// public void ApiPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void AnimatePageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void AnimatePageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void ComboBoxPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void ComboBoxPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void WheelDatePickerPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void WheelDatePickerPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void SpeedDialPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void SpeedDialPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void SplitterPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void SplitterPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void StepperPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void StepperPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void ListExtendedPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void ListExtendedPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void SelectExtendedPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void SelectExtendedPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void TextFieldExtendedPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } +// [Test] +// public void TextFieldExtendedPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } - [Test] - public void TransferListPageRenderTest() - { - var comp = Context.Render(); - comp.Markup.Should().NotBeNullOrEmpty(); - } - } -} +// [Test] +// public void TransferListPageRenderTest() +// { +// var comp = Context.Render(); +// comp.Markup.Should().NotBeNullOrEmpty(); +// } +// } +//} diff --git a/CodeBeam.MudBlazor.Extensions.UnitTests/Docs/DocsPagesRenderTests.cs b/CodeBeam.MudBlazor.Extensions.UnitTests/Docs/DocsPagesRenderTests.cs new file mode 100644 index 00000000..6687e6fb --- /dev/null +++ b/CodeBeam.MudBlazor.Extensions.UnitTests/Docs/DocsPagesRenderTests.cs @@ -0,0 +1,36 @@ +using AwesomeAssertions; +using Bunit; +using Microsoft.AspNetCore.Components; +using MudExtensions.Docs.Pages; +using NUnit.Framework; +using System.Reflection; + +namespace MudExtensions.UnitTests.Components; + +[TestFixture] +public class DocsPagesRenderTests : BunitTest +{ + public static IEnumerable DocsPages() + { + return typeof(ApiPage).Assembly + .GetTypes() + .Where(t => + t.IsClass && + !t.IsAbstract && + typeof(IComponent).IsAssignableFrom(t) && + t.Namespace?.StartsWith("MudExtensions.Docs.Pages") == true && + t.GetCustomAttribute() != null); + } + + [TestCaseSource(nameof(DocsPages))] + public void All_Docs_Pages_Should_Render(Type pageType) + { + var cut = Context.Render(builder => + { + builder.OpenComponent(0, pageType); + builder.CloseComponent(); + }); + + cut.Markup.Should().NotBeNullOrWhiteSpace(); + } +} From 7d7f2fa180aeb8ea84da0f11514f1e24ec1e4a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Can=20Karag=C3=B6z?= Date: Fri, 26 Dec 2025 21:24:40 +0300 Subject: [PATCH 2/2] Component Render Test --- .../Components/RenderTests.cs | 143 +++++++----------- .../StepperExtended/MudStepExtended.razor.cs | 2 + .../Utilities/ExcludeFromSmokeTest.cs | 16 ++ 3 files changed, 75 insertions(+), 86 deletions(-) create mode 100644 CodeBeam.MudBlazor.Extensions/Utilities/ExcludeFromSmokeTest.cs diff --git a/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs b/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs index c65e4767..cca05c05 100644 --- a/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs +++ b/CodeBeam.MudBlazor.Extensions.UnitTests/Components/RenderTests.cs @@ -1,86 +1,57 @@ -//using AwesomeAssertions; -//using MudExtensions.Docs.Pages; - -//namespace MudExtensions.UnitTests.Components -//{ -// [TestFixture] -// public class RenderTests : BunitTest -// { -// [Test] -// public void ApiPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void AnimatePageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void ComboBoxPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void WheelDatePickerPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void SpeedDialPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void SplitterPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void StepperPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void ListExtendedPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void SelectExtendedPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void TextFieldExtendedPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } - -// [Test] -// public void TransferListPageRenderTest() -// { -// var comp = Context.Render(); -// comp.Markup.Should().NotBeNullOrEmpty(); -// } -// } -//} +using AwesomeAssertions; +using Bunit; +using Microsoft.AspNetCore.Components; +using MudBlazor.Services; +using MudExtensions.Utilities; +using System.Reflection; + +namespace MudExtensions.UnitTests.Components; + +[TestFixture] +public class ComponentsRenderTests : BunitTest +{ + public static IEnumerable ComponentTypes() + { + var assembly = typeof(MudExtensions.MudColorProvider).Assembly; + + return assembly + .GetTypes() + .Where(t => + t.IsClass && + !t.IsAbstract && + !t.IsGenericTypeDefinition && + typeof(IComponent).IsAssignableFrom(t) && + t.IsPublic && + t.GetCustomAttribute() == null); + } + + [SetUp] + public void Setup() + { + Context.Services.AddMudServices(); + Context.JSInterop.Mode = JSRuntimeMode.Loose; + } + + [TestCaseSource(nameof(ComponentTypes))] + public void Component_Should_Render(Type componentType) + { + try + { + var cut = Context.Render(builder => + { + builder.OpenComponent(0, componentType); + builder.CloseComponent(); + }); + + cut.Should().NotBeNull(); + } + catch (Exception ex) + { + Assert.Fail( + $"Component render FAILED: {componentType.FullName}\n" + + $"Exception: {ex.GetType().Name}\n" + + $"Message: {ex.Message}" + ); + } + } +} diff --git a/CodeBeam.MudBlazor.Extensions/Components/StepperExtended/MudStepExtended.razor.cs b/CodeBeam.MudBlazor.Extensions/Components/StepperExtended/MudStepExtended.razor.cs index 29b69bc1..a3275792 100644 --- a/CodeBeam.MudBlazor.Extensions/Components/StepperExtended/MudStepExtended.razor.cs +++ b/CodeBeam.MudBlazor.Extensions/Components/StepperExtended/MudStepExtended.razor.cs @@ -1,12 +1,14 @@ using Microsoft.AspNetCore.Components; using MudBlazor; using MudBlazor.Utilities; +using MudExtensions.Utilities; namespace MudExtensions { /// /// /// + [ExcludeFromSmokeTest] public partial class MudStepExtended : MudComponentBase, IDisposable { /// diff --git a/CodeBeam.MudBlazor.Extensions/Utilities/ExcludeFromSmokeTest.cs b/CodeBeam.MudBlazor.Extensions/Utilities/ExcludeFromSmokeTest.cs new file mode 100644 index 00000000..e488d3ec --- /dev/null +++ b/CodeBeam.MudBlazor.Extensions/Utilities/ExcludeFromSmokeTest.cs @@ -0,0 +1,16 @@ + +namespace MudExtensions.Utilities +{ + /// + /// Indicates that a class should be excluded from automated test discovery and execution. + /// + /// Apply this attribute to classes that should not be considered by test frameworks or test + /// runners. This can be useful for utility, base, or helper classes that are not intended to be executed as + /// tests. + /// + [AttributeUsage(AttributeTargets.Class)] + public sealed class ExcludeFromSmokeTest : Attribute + { + + } +}