Skip to content

Commit 3111b1d

Browse files
linkdotnetegil
authored andcommitted
feat: Add RendererInfo support for .net9
1 parent 9197071 commit 3111b1d

File tree

6 files changed

+106
-0
lines changed

6 files changed

+106
-0
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ All notable changes to **bUnit** will be documented in this file. The project ad
66

77
## [Unreleased]
88

9+
### Added
10+
- Added support for `RendererInfo` (`.net9.0`).
11+
912
## [1.36.0] - 2024-11-12
1013

1114
### Added

src/bunit.core/Rendering/ITestRenderer.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,11 @@ IReadOnlyList<IRenderedComponentBase<TComponent>> FindComponents<TComponent>(IRe
7878
/// Disposes all components rendered by the <see cref="ITestRenderer" />.
7979
/// </summary>
8080
void DisposeComponents();
81+
82+
#if NET9_0_OR_GREATER
83+
/// <summary>
84+
/// Sets the <see cref="RendererInfo"/> for the renderer.
85+
/// </summary>
86+
void SetRendererInfo(RendererInfo? rendererInfo);
87+
#endif
8188
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#if NET9_0_OR_GREATER
2+
namespace Bunit.Rendering;
3+
4+
/// <summary>
5+
/// Represents an exception that is thrown when a component under test is trying to access the 'RendererInfo' property, which has not been specified.
6+
/// </summary>
7+
public sealed class MissingRendererInfoException : Exception
8+
{
9+
/// <summary>
10+
/// Initializes a new instance of the <see cref="MissingRendererInfoException"/> class.
11+
/// </summary>
12+
public MissingRendererInfoException()
13+
: base("""
14+
A component under test is trying to access the 'RendererInfo' property, which has not been specified. Set it via TestContext.Renderer.SetRendererInfo.
15+
16+
For example:
17+
18+
public class SomeTestClass : TestContext
19+
{
20+
[Fact]
21+
public void SomeTestCase()
22+
{
23+
Renderer.SetRendererInfo(new RendererInfo("Server", true));
24+
...
25+
}
26+
}
27+
28+
The four built in render names are 'Static', 'Server', 'WebAssembly', and 'WebView'.
29+
""")
30+
{
31+
}
32+
}
33+
#endif

src/bunit.core/Rendering/TestRenderer.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,21 @@ private bool IsBatchInProgress
6464
/// </summary>
6565
internal int RenderCount { get; private set; }
6666

67+
#if NET9_0_OR_GREATER
68+
private RendererInfo? rendererInfo;
69+
70+
/// <inheritdoc/>
71+
[SuppressMessage("Design", "CA1065:Do not raise exceptions in unexpected locations", Justification = "The exception is raised to guide users.")]
72+
protected override RendererInfo RendererInfo => rendererInfo ?? throw new MissingRendererInfoException();
73+
74+
/// <inheritdoc/>
75+
public void SetRendererInfo(RendererInfo? rendererInfo)
76+
{
77+
this.rendererInfo = rendererInfo;
78+
}
79+
80+
#endif
81+
6782
#if NETSTANDARD
6883
/// <summary>
6984
/// Initializes a new instance of the <see cref="TestRenderer"/> class.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#if NET9_0_OR_GREATER
2+
using Bunit.TestAssets.RenderModes;
3+
4+
namespace Bunit.Rendering;
5+
6+
public class RendererInfoTests : TestContext
7+
{
8+
[Fact(DisplayName = "TestRenderer provides RendererInfo")]
9+
public void Test001()
10+
{
11+
Renderer.SetRendererInfo(new RendererInfo("Server", true));
12+
var cut = RenderComponent<RendererInfoComponent>();
13+
14+
cut.MarkupMatches("""
15+
<p>Is interactive: True</p>
16+
<p>Rendermode: Server</p>
17+
""");
18+
}
19+
20+
[Fact(DisplayName = "Renderer throws exception if RendererInfo is not specified")]
21+
public void Test002()
22+
{
23+
Action act = () => RenderComponent<RendererInfoComponent>();
24+
25+
act.ShouldThrow<MissingRendererInfoException>();
26+
}
27+
}
28+
#endif
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#if NET9_0_OR_GREATER
2+
3+
namespace Bunit.TestAssets.RenderModes;
4+
5+
public class RendererInfoComponent : ComponentBase
6+
{
7+
protected override void BuildRenderTree(RenderTreeBuilder builder)
8+
{
9+
builder.OpenElement(0, "p");
10+
builder.AddContent(1, "Is interactive: ");
11+
builder.AddContent(2, RendererInfo.IsInteractive);
12+
builder.CloseElement();
13+
14+
builder.OpenElement(3, "p");
15+
builder.AddContent(4, "Rendermode: ");
16+
builder.AddContent(5, RendererInfo.Name);
17+
builder.CloseElement();
18+
}
19+
}
20+
#endif

0 commit comments

Comments
 (0)