diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index eba63dbda6..05afac0141 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -13,21 +13,21 @@
https://github.com/aspnet/Blazor
348e050ecd9bd8924581afb677089ae5e2d5e508
-
+
https://github.com/aspnet/AspNetCore-Tooling
- 9dc38f98bd6eb330aa1463c38bb2f6c6eccdb309
+ 1e85487b5011a3541c78be97baa4407abf87ea1a
-
+
https://github.com/aspnet/AspNetCore-Tooling
- 9dc38f98bd6eb330aa1463c38bb2f6c6eccdb309
+ 1e85487b5011a3541c78be97baa4407abf87ea1a
-
+
https://github.com/aspnet/AspNetCore-Tooling
- 9dc38f98bd6eb330aa1463c38bb2f6c6eccdb309
+ 1e85487b5011a3541c78be97baa4407abf87ea1a
-
+
https://github.com/aspnet/AspNetCore-Tooling
- 9dc38f98bd6eb330aa1463c38bb2f6c6eccdb309
+ 1e85487b5011a3541c78be97baa4407abf87ea1a
https://github.com/aspnet/EntityFrameworkCore
diff --git a/eng/Versions.props b/eng/Versions.props
index bff22c3e00..762d6c4f60 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -163,10 +163,10 @@
3.1.0-preview1.19472.2
3.1.0-preview1.19472.2
- 3.1.0-preview1.19472.1
- 3.1.0-preview1.19472.1
- 3.1.0-preview1.19472.1
- 3.1.0-preview1.19472.1
+ 3.1.0-preview1.19501.1
+ 3.1.0-preview1.19501.1
+ 3.1.0-preview1.19501.1
+ 3.1.0-preview1.19501.1
+
diff --git a/src/Components/Server/test/Circuits/ServerComponentDeserializerTest.cs b/src/Components/Server/test/Circuits/ServerComponentDeserializerTest.cs
index 1b3a8601da..907fa96192 100644
--- a/src/Components/Server/test/Circuits/ServerComponentDeserializerTest.cs
+++ b/src/Components/Server/test/Circuits/ServerComponentDeserializerTest.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
@@ -40,6 +41,45 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
Assert.Equal(0, deserializedDescriptor.Sequence);
}
+ [Fact]
+ public void CanParseSingleMarkerWithParameters()
+ {
+ // Arrange
+ var markers = SerializeMarkers(CreateMarkers(
+ (typeof(TestComponent), new Dictionary { ["Parameter"] = "Value" })));
+ var serverComponentDeserializer = CreateServerComponentDeserializer();
+
+ // Act & assert
+ Assert.True(serverComponentDeserializer.TryDeserializeComponentDescriptorCollection(markers, out var descriptors));
+ var deserializedDescriptor = Assert.Single(descriptors);
+ Assert.Equal(typeof(TestComponent).FullName, deserializedDescriptor.ComponentType.FullName);
+ Assert.Equal(0, deserializedDescriptor.Sequence);
+ var parameters = deserializedDescriptor.Parameters.ToDictionary();
+ Assert.Single(parameters);
+ Assert.Contains("Parameter", parameters.Keys);
+ Assert.Equal("Value", parameters["Parameter"]);
+ }
+
+ [Fact]
+ public void CanParseSingleMarkerWithNullParameters()
+ {
+ // Arrange
+ var markers = SerializeMarkers(CreateMarkers(
+ (typeof(TestComponent), new Dictionary { ["Parameter"] = null })));
+ var serverComponentDeserializer = CreateServerComponentDeserializer();
+
+ // Act & assert
+ Assert.True(serverComponentDeserializer.TryDeserializeComponentDescriptorCollection(markers, out var descriptors));
+ var deserializedDescriptor = Assert.Single(descriptors);
+ Assert.Equal(typeof(TestComponent).FullName, deserializedDescriptor.ComponentType.FullName);
+ Assert.Equal(0, deserializedDescriptor.Sequence);
+
+ var parameters = deserializedDescriptor.Parameters.ToDictionary();
+ Assert.Single(parameters);
+ Assert.Contains("Parameter", parameters.Keys);
+ Assert.Null(parameters["Parameter"]);
+ }
+
[Fact]
public void CanParseMultipleMarkers()
{
@@ -60,6 +100,65 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
Assert.Equal(1, secondDescriptor.Sequence);
}
+ [Fact]
+ public void CanParseMultipleMarkersWithParameters()
+ {
+ // Arrange
+ var markers = SerializeMarkers(CreateMarkers(
+ (typeof(TestComponent), new Dictionary { ["First"] = "Value" }),
+ (typeof(TestComponent), new Dictionary { ["Second"] = null })));
+ var serverComponentDeserializer = CreateServerComponentDeserializer();
+
+ // Act & assert
+ Assert.True(serverComponentDeserializer.TryDeserializeComponentDescriptorCollection(markers, out var descriptors));
+ Assert.Equal(2, descriptors.Count);
+
+ var firstDescriptor = descriptors[0];
+ Assert.Equal(typeof(TestComponent).FullName, firstDescriptor.ComponentType.FullName);
+ Assert.Equal(0, firstDescriptor.Sequence);
+ var firstParameters = firstDescriptor.Parameters.ToDictionary();
+ Assert.Single(firstParameters);
+ Assert.Contains("First", firstParameters.Keys);
+ Assert.Equal("Value", firstParameters["First"]);
+
+
+ var secondDescriptor = descriptors[1];
+ Assert.Equal(typeof(TestComponent).FullName, secondDescriptor.ComponentType.FullName);
+ Assert.Equal(1, secondDescriptor.Sequence);
+ var secondParameters = secondDescriptor.Parameters.ToDictionary();
+ Assert.Single(secondParameters);
+ Assert.Contains("Second", secondParameters.Keys);
+ Assert.Null(secondParameters["Second"]);
+ }
+
+ [Fact]
+ public void CanParseMultipleMarkersWithAndWithoutParameters()
+ {
+ // Arrange
+ var markers = SerializeMarkers(CreateMarkers(
+ (typeof(TestComponent), new Dictionary { ["First"] = "Value" }),
+ (typeof(TestComponent), null)));
+ var serverComponentDeserializer = CreateServerComponentDeserializer();
+
+ // Act & assert
+ Assert.True(serverComponentDeserializer.TryDeserializeComponentDescriptorCollection(markers, out var descriptors));
+ Assert.Equal(2, descriptors.Count);
+
+ var firstDescriptor = descriptors[0];
+ Assert.Equal(typeof(TestComponent).FullName, firstDescriptor.ComponentType.FullName);
+ Assert.Equal(0, firstDescriptor.Sequence);
+ var firstParameters = firstDescriptor.Parameters.ToDictionary();
+ Assert.Single(firstParameters);
+ Assert.Contains("First", firstParameters.Keys);
+ Assert.Equal("Value", firstParameters["First"]);
+
+
+ var secondDescriptor = descriptors[1];
+ Assert.Equal(typeof(TestComponent).FullName, secondDescriptor.ComponentType.FullName);
+ Assert.Equal(1, secondDescriptor.Sequence);
+ Assert.Empty(secondDescriptor.Parameters.ToDictionary());
+ }
+
[Fact]
public void DoesNotParseOutOfOrderMarkers()
{
@@ -213,7 +312,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
private string SerializeComponent(string assembly, string type) =>
JsonSerializer.Serialize(
- new ServerComponent(0, assembly, type, Guid.NewGuid()),
+ new ServerComponent(0, assembly, type, Array.Empty(), Array.Empty