Skip to content

[release/8.0] [Blazor] Improvements to SSR component activation #50848

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 43 commits into from
Oct 2, 2023
Merged
Changes from 22 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
b565785
Dispose+re-init SSR'd components if params change
MackinnonBuck Sep 20, 2023
4fe97de
Enforce component disposal + account for `@key`
MackinnonBuck Sep 22, 2023
a04974b
Improved `@key` handling, shared more code
MackinnonBuck Sep 22, 2023
5f9bc49
Max root component count limit
MackinnonBuck Sep 24, 2023
c4349b2
No .NET->JS web root component sync anymore
MackinnonBuck Sep 24, 2023
80cb7f4
Avoid flicker when replacing component instance
MackinnonBuck Sep 25, 2023
7f775ce
Update InteractivityTest.cs
MackinnonBuck Sep 25, 2023
a8f7bfc
Fix build issues
MackinnonBuck Sep 25, 2023
27435b4
Small improvement
MackinnonBuck Sep 25, 2023
8d0108c
Compare serialized parameter values
MackinnonBuck Sep 25, 2023
6276e2d
Cleanup
MackinnonBuck Sep 25, 2023
acb5321
More cleanup
MackinnonBuck Sep 25, 2023
7de7461
Create BoundaryMarkerKeyTest.cs
MackinnonBuck Sep 25, 2023
ab97bea
WebRootComponentParameters tests
MackinnonBuck Sep 26, 2023
2dbcc38
More interactivity tests
MackinnonBuck Sep 26, 2023
44713bd
WebRootComponentManager tests
MackinnonBuck Sep 26, 2023
8d135d2
PR feedback
MackinnonBuck Sep 27, 2023
89d0506
Some cleanup
MackinnonBuck Sep 27, 2023
f59b538
Update blazor.web.js
MackinnonBuck Sep 27, 2023
366feba
More tests
MackinnonBuck Sep 27, 2023
6f2efed
Update WebAssemblyRenderer.cs
MackinnonBuck Sep 27, 2023
aed4552
Dispose+re-init SSR'd components if params change
MackinnonBuck Sep 20, 2023
20bc964
Enforce component disposal + account for `@key`
MackinnonBuck Sep 22, 2023
1b99064
Improved `@key` handling, shared more code
MackinnonBuck Sep 22, 2023
5cd6913
Max root component count limit
MackinnonBuck Sep 24, 2023
208190f
No .NET->JS web root component sync anymore
MackinnonBuck Sep 24, 2023
3b90980
Avoid flicker when replacing component instance
MackinnonBuck Sep 25, 2023
8e13336
Update InteractivityTest.cs
MackinnonBuck Sep 25, 2023
cd690f2
Fix build issues
MackinnonBuck Sep 25, 2023
1814a87
Small improvement
MackinnonBuck Sep 25, 2023
a147371
Compare serialized parameter values
MackinnonBuck Sep 25, 2023
4d605a9
Cleanup
MackinnonBuck Sep 25, 2023
419d753
More cleanup
MackinnonBuck Sep 25, 2023
556537e
Create BoundaryMarkerKeyTest.cs
MackinnonBuck Sep 25, 2023
ecb9eac
WebRootComponentParameters tests
MackinnonBuck Sep 26, 2023
2adac55
More interactivity tests
MackinnonBuck Sep 26, 2023
5e5402e
WebRootComponentManager tests
MackinnonBuck Sep 26, 2023
4b1c210
PR feedback
MackinnonBuck Sep 27, 2023
1faa9ec
Some cleanup
MackinnonBuck Sep 27, 2023
8586a31
More tests
MackinnonBuck Sep 27, 2023
a0f8a3b
Update WebAssemblyRenderer.cs
MackinnonBuck Sep 27, 2023
ca1388f
Update blazor.*.js
MackinnonBuck Sep 28, 2023
dddde99
PR feedback
MackinnonBuck Sep 29, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/Components/Endpoints/test/WebRootComponentParametersTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,39 @@ public void WebRootComponentParameters_DefinitelyEquals_ReturnsTrue_ForEmptySetO
Assert.True(result);
}

[Fact]
public void WebRootComponentParameters_DefinitelyEquals_Throws_WhenComparingNonJsonElementParameterToJsonElement()
{
// Arrange
var parameters1 = CreateParametersWithNonJsonElements(new() { ["First"] = 123 });
var parameters2 = CreateParameters(new() { ["First"] = 456 });

// Act/assert
Assert.Throws<InvalidCastException>(() => parameters1.DefinitelyEquals(parameters2));
}

[Fact]
public void WebRootComponentParameters_DefinitelyEquals_Throws_WhenComparingJsonElementParameterToNonJsonElement()
{
// Arrange
var parameters1 = CreateParameters(new() { ["First"] = 123 });
var parameters2 = CreateParametersWithNonJsonElements(new() { ["First"] = 456 });

// Act/assert
Assert.Throws<InvalidCastException>(() => parameters1.DefinitelyEquals(parameters2));
}

[Fact]
public void WebRootComponentParameters_DefinitelyEquals_Throws_WhenComparingNonJsonElementParameters()
{
// Arrange
var parameters1 = CreateParametersWithNonJsonElements(new() { ["First"] = 123 });
var parameters2 = CreateParametersWithNonJsonElements(new() { ["First"] = 456 });

// Act/assert
Assert.Throws<InvalidCastException>(() => parameters1.DefinitelyEquals(parameters2));
}

private static WebRootComponentParameters CreateParameters(Dictionary<string, object> parameters)
{
var parameterView = ParameterView.FromDictionary(parameters);
Expand All @@ -111,4 +144,11 @@ private static WebRootComponentParameters CreateParameters(Dictionary<string, ob
}
return new(parameterView, parameterDefinitions.AsReadOnly(), parameterValues.AsReadOnly());
}

private static WebRootComponentParameters CreateParametersWithNonJsonElements(Dictionary<string, object> parameters)
{
var parameterView = ParameterView.FromDictionary(parameters);
var (parameterDefinitions, parameterValues) = ComponentParameter.FromParameterView(parameterView);
return new(parameterView, parameterDefinitions.AsReadOnly(), parameterValues.AsReadOnly());
}
}