Skip to content

Commit

Permalink
Make methods on IRenderedComponentBase`1 awaitable
Browse files Browse the repository at this point in the history
  • Loading branch information
JeroenBos committed Aug 5, 2020
1 parent 7b1da56 commit d596806
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 22 deletions.
2 changes: 1 addition & 1 deletion src/bunit.core.tests/ComponentParameterFactoryTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public void Test002()
instance.ItemTemplate.ShouldBeNull();

// act - set components params and render
cut.SetParametersAndRender(
cut.SetParametersAndRenderAsync(
("some-unmatched-attribute", "unmatched value"),
(nameof(AllTypesOfParams<string>.RegularParam), "some value"),
EventCallback(nameof(AllTypesOfParams<string>.NonGenericCallback), () => throw new Exception("NonGenericCallback")),
Expand Down
8 changes: 4 additions & 4 deletions src/bunit.core/IRenderedComponentBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,24 +34,24 @@ public interface IRenderedComponentBase<TComponent> : IRenderedFragmentBase wher
/// <summary>
/// Render the component under test again.
/// </summary>
void Render();
Task Render();

/// <summary>
/// Render the component under test again with the provided <paramref name="parameters"/>.
/// </summary>
/// <param name="parameters">Parameters to pass to the component upon rendered</param>
void SetParametersAndRender(ParameterView parameters);
Task SetParametersAndRenderAsync(ParameterView parameters);

/// <summary>
/// Render the component under test again with the provided <paramref name="parameters"/>.
/// </summary>
/// <param name="parameters">Parameters to pass to the component upon rendered</param>
void SetParametersAndRender(params ComponentParameter[] parameters);
Task SetParametersAndRenderAsync(params ComponentParameter[] parameters);

/// <summary>
/// Render the component under test again with the provided parameters from the <paramref name="parameterBuilder"/>.
/// </summary>
/// <param name="parameterBuilder">An action that receives a <see cref="ComponentParameterBuilder{TComponent}"/>.</param>
void SetParametersAndRender(Action<ComponentParameterBuilder<TComponent>> parameterBuilder);
Task SetParametersAndRenderAsync(Action<ComponentParameterBuilder<TComponent>> parameterBuilder);
}
}
2 changes: 1 addition & 1 deletion src/bunit.web.tests/Rendering/Internal/HtmlizerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public void Test003()
var cut = RenderComponent<Htmlizer01Component>();
cut.Find("button").HasAttribute("blazor:elementreference").ShouldBeTrue();

cut.SetParametersAndRender(parameters => parameters.Add(p => p.OnClick, (MouseEventArgs e) => { }));
cut.SetParametersAndRenderAsync(parameters => parameters.Add(p => p.OnClick, (MouseEventArgs e) => { }));

cut.Find("button").HasAttribute("blazor:elementreference").ShouldBeTrue();
}
Expand Down
8 changes: 4 additions & 4 deletions src/bunit.web.tests/Rendering/RenderedComponentTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public void Test004()
{
var cut = RenderComponent<Wrapper>(parameters => parameters.AddChildContent("<div>"));

cut.SetParametersAndRender(parameters => parameters.AddChildContent("<p>"));
cut.SetParametersAndRenderAsync(parameters => parameters.AddChildContent("<p>"));

cut.Find("p").ShouldNotBeNull();
}
Expand All @@ -36,7 +36,7 @@ public void Test0041()
{
var cut = RenderComponent<Wrapper>(parameters => parameters.AddChildContent("<div>"));

cut.SetParametersAndRender(parameters => parameters.AddChildContent("<p>"));
cut.SetParametersAndRenderAsync(parameters => parameters.AddChildContent("<p>"));

cut.Find("p").ShouldNotBeNull();
}
Expand All @@ -50,8 +50,8 @@ public void Test003()
var cut = RenderComponent<AllTypesOfParams<string>>();

// assert
Should.Throw<InvalidOperationException>(() => cut.SetParametersAndRender(ps => ps.Add(p => p.UnnamedCascadingValue, 42)));
Should.Throw<InvalidOperationException>(() => cut.SetParametersAndRender(ps => ps.Add(p => p.NamedCascadingValue, 1337)));
Should.Throw<InvalidOperationException>(() => cut.SetParametersAndRenderAsync(ps => ps.Add(p => p.UnnamedCascadingValue, 42)));
Should.Throw<InvalidOperationException>(() => cut.SetParametersAndRenderAsync(ps => ps.Add(p => p.NamedCascadingValue, 1337)));
}
}
}
2 changes: 1 addition & 1 deletion src/bunit.web.tests/Rendering/RenderedFragmentTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public void Test009()

cut.Instance.Counter.ShouldBe(1);

cut.SetParametersAndRender((nameof(ToggleClickHandler.HandleClicks), false));
cut.SetParametersAndRenderAsync((nameof(ToggleClickHandler.HandleClicks), false));

cut.Find("#btn").Click();

Expand Down
19 changes: 8 additions & 11 deletions src/bunit.web/Rendering/RenderedComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,30 @@ public RenderedComponent(IServiceProvider services, int componentId, TComponent
public Task InvokeAsync(Func<Task> callback) => Renderer.Dispatcher.InvokeAsync(callback);

/// <inheritdoc/>
public void Render() => SetParametersAndRender(ParameterView.Empty);
public Task Render() => SetParametersAndRenderAsync(ParameterView.Empty);

/// <inheritdoc/>
public void SetParametersAndRender(ParameterView parameters)
public Task SetParametersAndRenderAsync(ParameterView parameters)
{
InvokeAsync(() =>
{
Instance.SetParametersAsync(parameters);
});
return InvokeAsync(() => Instance.SetParametersAsync(parameters));
}

/// <inheritdoc/>
public void SetParametersAndRender(params ComponentParameter[] parameters)
public Task SetParametersAndRenderAsync(params ComponentParameter[] parameters)
{
SetParametersAndRender(ToParameterView(parameters));
return SetParametersAndRenderAsync(ToParameterView(parameters));
}

/// <inheritdoc/>
public void SetParametersAndRender(Action<ComponentParameterBuilder<TComponent>> parameterBuilder)
public Task SetParametersAndRenderAsync(Action<ComponentParameterBuilder<TComponent>> parameterBuilder)
{
if (parameterBuilder is null)
throw new ArgumentNullException(nameof(parameterBuilder));

var builder = new ComponentParameterBuilder<TComponent>();
parameterBuilder(builder);

SetParametersAndRender(ToParameterView(builder.Build()));
return SetParametersAndRenderAsync(ToParameterView(builder.Build()));
}

private static ParameterView ToParameterView(IReadOnlyList<ComponentParameter> parameters)
Expand All @@ -62,7 +59,7 @@ private static ParameterView ToParameterView(IReadOnlyList<ComponentParameter> p
foreach (var param in parameters)
{
if (param.IsCascadingValue)
throw new InvalidOperationException($"You cannot provide a new cascading value through the {nameof(SetParametersAndRender)} method.");
throw new InvalidOperationException($"You cannot provide a new cascading value through the {nameof(SetParametersAndRenderAsync)} method.");
paramDict.Add(param.Name!, param.Value);
}
parameterView = ParameterView.FromDictionary(paramDict);
Expand Down

0 comments on commit d596806

Please sign in to comment.