From fd8841e3d6595013f51215fd4072a1984ff0ca5d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:05:07 +0000 Subject: [PATCH 01/10] Initial plan From a632ae10eae44a93f0287457a16d5e6e399b296a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:18:06 +0000 Subject: [PATCH 02/10] Rename Blazor pause/resume methods and PersistentState attribute Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../PersistentServicesRegistry.cs | 4 +- ...tribute.cs => PersistentStateAttribute.cs} | 2 +- ...ateProviderServiceCollectionExtensions.cs} | 8 +- ...der.cs => PersistentStateValueProvider.cs} | 4 +- .../Components/src/PublicAPI.Unshipped.txt | 8 +- ...mponentStateServiceCollectionExtensions.cs | 4 +- .../PersistentServicesRegistryTest.cs | 12 +-- ...s => PersistentStateValueProviderTests.cs} | 74 +++++++++---------- .../Circuits/CircuitPersistenceManagerTest.cs | 4 +- .../src/DefaultAntiforgeryStateProvider.cs | 2 +- .../Shared/src/ResourceCollectionProvider.cs | 2 +- .../Web.JS/src/Boot.Server.Common.ts | 4 +- src/Components/Web.JS/src/GlobalExports.ts | 4 +- .../Circuits/DefaultReconnectDisplay.ts | 4 +- .../Circuits/DefaultReconnectionHandler.ts | 2 +- .../Components/ReconnectModal.razor.js | 4 +- .../Services/InteractiveAutoService.cs | 2 +- .../Services/InteractiveServerService.cs | 2 +- .../Services/InteractiveWebAssemblyService.cs | 2 +- .../Components/Layout/ReconnectModal.razor.js | 4 +- 20 files changed, 76 insertions(+), 76 deletions(-) rename src/Components/Components/src/{SupplyParameterFromPersistentComponentStateAttribute.cs => PersistentStateAttribute.cs} (79%) rename src/Components/Components/src/{SupplyParameterFromPersistentComponentStateProviderServiceCollectionExtensions.cs => PersistentStateProviderServiceCollectionExtensions.cs} (68%) rename src/Components/Components/src/{SupplyParameterFromPersistentComponentStateValueProvider.cs => PersistentStateValueProvider.cs} (98%) rename src/Components/Components/test/{SupplyParameterFromPersistentComponentStateValueProviderTests.cs => PersistentStateValueProviderTests.cs} (88%) diff --git a/src/Components/Components/src/PersistentState/PersistentServicesRegistry.cs b/src/Components/Components/src/PersistentState/PersistentServicesRegistry.cs index 64936326e3e5..04310877e9dc 100644 --- a/src/Components/Components/src/PersistentState/PersistentServicesRegistry.cs +++ b/src/Components/Components/src/PersistentState/PersistentServicesRegistry.cs @@ -166,10 +166,10 @@ public PropertiesAccessor([DynamicallyAccessedMembers(LinkerFlags.Component)] Ty var keys = new List<(string, Type)>(); foreach (var propertyInfo in GetCandidateBindableProperties(targetType)) { - SupplyParameterFromPersistentComponentStateAttribute? parameterAttribute = null; + PersistentStateAttribute? parameterAttribute = null; foreach (var attribute in propertyInfo.GetCustomAttributes()) { - if (attribute is SupplyParameterFromPersistentComponentStateAttribute persistentStateAttribute) + if (attribute is PersistentStateAttribute persistentStateAttribute) { parameterAttribute = persistentStateAttribute; break; diff --git a/src/Components/Components/src/SupplyParameterFromPersistentComponentStateAttribute.cs b/src/Components/Components/src/PersistentStateAttribute.cs similarity index 79% rename from src/Components/Components/src/SupplyParameterFromPersistentComponentStateAttribute.cs rename to src/Components/Components/src/PersistentStateAttribute.cs index 61a283fc46fd..79fd4f9ac838 100644 --- a/src/Components/Components/src/SupplyParameterFromPersistentComponentStateAttribute.cs +++ b/src/Components/Components/src/PersistentStateAttribute.cs @@ -8,6 +8,6 @@ namespace Microsoft.AspNetCore.Components; /// previous render. /// [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] -public sealed class SupplyParameterFromPersistentComponentStateAttribute : CascadingParameterAttributeBase +public sealed class PersistentStateAttribute : CascadingParameterAttributeBase { } diff --git a/src/Components/Components/src/SupplyParameterFromPersistentComponentStateProviderServiceCollectionExtensions.cs b/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs similarity index 68% rename from src/Components/Components/src/SupplyParameterFromPersistentComponentStateProviderServiceCollectionExtensions.cs rename to src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs index 6a34a6938683..683d11190a5c 100644 --- a/src/Components/Components/src/SupplyParameterFromPersistentComponentStateProviderServiceCollectionExtensions.cs +++ b/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs @@ -7,18 +7,18 @@ namespace Microsoft.Extensions.DependencyInjection; /// -/// Enables component parameters to be supplied from with . +/// Enables component parameters to be supplied from with . /// -public static class SupplyParameterFromPersistentComponentStateProviderServiceCollectionExtensions +public static class PersistentStateProviderServiceCollectionExtensions { /// - /// Enables component parameters to be supplied from with .. + /// Enables component parameters to be supplied from with .. /// /// The . /// The . public static IServiceCollection AddSupplyValueFromPersistentComponentStateProvider(this IServiceCollection services) { - services.TryAddEnumerable(ServiceDescriptor.Scoped()); + services.TryAddEnumerable(ServiceDescriptor.Scoped()); return services; } } diff --git a/src/Components/Components/src/SupplyParameterFromPersistentComponentStateValueProvider.cs b/src/Components/Components/src/PersistentStateValueProvider.cs similarity index 98% rename from src/Components/Components/src/SupplyParameterFromPersistentComponentStateValueProvider.cs rename to src/Components/Components/src/PersistentStateValueProvider.cs index d157dfbd3bb4..3a35e77bcce3 100644 --- a/src/Components/Components/src/SupplyParameterFromPersistentComponentStateValueProvider.cs +++ b/src/Components/Components/src/PersistentStateValueProvider.cs @@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Components; -internal sealed class SupplyParameterFromPersistentComponentStateValueProvider(PersistentComponentState state) : ICascadingValueSupplier +internal sealed class PersistentStateValueProvider(PersistentComponentState state) : ICascadingValueSupplier { private static readonly ConcurrentDictionary<(string, string, string), byte[]> _keyCache = new(); private static readonly ConcurrentDictionary<(Type, string), PropertyGetter> _propertyGetterCache = new(); @@ -27,7 +27,7 @@ internal sealed class SupplyParameterFromPersistentComponentStateValueProvider(P internal Dictionary Subscriptions => _subscriptions; public bool CanSupplyValue(in CascadingParameterInfo parameterInfo) - => parameterInfo.Attribute is SupplyParameterFromPersistentComponentStateAttribute; + => parameterInfo.Attribute is PersistentStateAttribute; [UnconditionalSuppressMessage( "ReflectionAnalysis", diff --git a/src/Components/Components/src/PublicAPI.Unshipped.txt b/src/Components/Components/src/PublicAPI.Unshipped.txt index 33bf7c236923..65dbc0131f27 100644 --- a/src/Components/Components/src/PublicAPI.Unshipped.txt +++ b/src/Components/Components/src/PublicAPI.Unshipped.txt @@ -13,11 +13,11 @@ Microsoft.AspNetCore.Components.Routing.NotFoundEventArgs.Path.get -> string! Microsoft.AspNetCore.Components.Infrastructure.ComponentStatePersistenceManager.ComponentStatePersistenceManager(Microsoft.Extensions.Logging.ILogger! logger, System.IServiceProvider! serviceProvider) -> void Microsoft.AspNetCore.Components.Infrastructure.ComponentStatePersistenceManager.SetPlatformRenderMode(Microsoft.AspNetCore.Components.IComponentRenderMode! renderMode) -> void Microsoft.AspNetCore.Components.Infrastructure.RegisterPersistentComponentStateServiceCollectionExtensions -Microsoft.AspNetCore.Components.SupplyParameterFromPersistentComponentStateAttribute -Microsoft.AspNetCore.Components.SupplyParameterFromPersistentComponentStateAttribute.SupplyParameterFromPersistentComponentStateAttribute() -> void -Microsoft.Extensions.DependencyInjection.SupplyParameterFromPersistentComponentStateProviderServiceCollectionExtensions +Microsoft.AspNetCore.Components.PersistentStateAttribute +Microsoft.AspNetCore.Components.PersistentStateAttribute.PersistentStateAttribute() -> void +Microsoft.Extensions.DependencyInjection.PersistentStateProviderServiceCollectionExtensions static Microsoft.AspNetCore.Components.Infrastructure.RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(Microsoft.Extensions.DependencyInjection.IServiceCollection! services, Microsoft.AspNetCore.Components.IComponentRenderMode! componentRenderMode) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.AspNetCore.Components.Infrastructure.ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.AspNetCore.Components.Infrastructure.ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! -static Microsoft.Extensions.DependencyInjection.SupplyParameterFromPersistentComponentStateProviderServiceCollectionExtensions.AddSupplyValueFromPersistentComponentStateProvider(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! +static Microsoft.Extensions.DependencyInjection.PersistentStateProviderServiceCollectionExtensions.AddSupplyValueFromPersistentComponentStateProvider(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! virtual Microsoft.AspNetCore.Components.Rendering.ComponentState.GetComponentKey() -> object? diff --git a/src/Components/Components/src/RegisterPersistentComponentStateServiceCollectionExtensions.cs b/src/Components/Components/src/RegisterPersistentComponentStateServiceCollectionExtensions.cs index d1182e4030ef..9e6d84edc4a0 100644 --- a/src/Components/Components/src/RegisterPersistentComponentStateServiceCollectionExtensions.cs +++ b/src/Components/Components/src/RegisterPersistentComponentStateServiceCollectionExtensions.cs @@ -17,7 +17,7 @@ public static class RegisterPersistentComponentStateServiceCollectionExtensions /// Saves state when the application is persisting state and restores it at the appropriate time automatically. /// /// - /// Only public properties annotated with are persisted and restored. + /// Only public properties annotated with are persisted and restored. /// /// The service type to register for persistence. /// The . @@ -34,7 +34,7 @@ public static class RegisterPersistentComponentStateServiceCollectionExtensions // We look for the assembly in the current list of loaded assemblies. // We look for the type inside the assembly. // We resolve the service from the DI container. - // We loop through the properties in the type and try to restore the properties that have SupplyParameterFromPersistentComponentState on them. + // We loop through the properties in the type and try to restore the properties that have PersistentState on them. services.TryAddEnumerable(ServiceDescriptor.Singleton(new PersistentServiceRegistration(componentRenderMode))); services.TryAddSingleton(); diff --git a/src/Components/Components/test/PersistentState/PersistentServicesRegistryTest.cs b/src/Components/Components/test/PersistentState/PersistentServicesRegistryTest.cs index c368d81ca15a..aa224adde065 100644 --- a/src/Components/Components/test/PersistentState/PersistentServicesRegistryTest.cs +++ b/src/Components/Components/test/PersistentState/PersistentServicesRegistryTest.cs @@ -391,13 +391,13 @@ public async Task PersistStateAsync_PersistsServiceWithComplexState() private class AnotherTestService { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } } private class CustomerService { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public Customer Customer { get; set; } } @@ -419,7 +419,7 @@ private class TestRenderMode : IComponentRenderMode private class TestService { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } } @@ -471,19 +471,19 @@ private class BaseService private class DerivedOne : BaseService { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } } private class DerivedTwo : BaseService { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } } private class BaseServiceWithProperty { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } } diff --git a/src/Components/Components/test/SupplyParameterFromPersistentComponentStateValueProviderTests.cs b/src/Components/Components/test/PersistentStateValueProviderTests.cs similarity index 88% rename from src/Components/Components/test/SupplyParameterFromPersistentComponentStateValueProviderTests.cs rename to src/Components/Components/test/PersistentStateValueProviderTests.cs index d7356855ce3a..9ffd37eb8124 100644 --- a/src/Components/Components/test/SupplyParameterFromPersistentComponentStateValueProviderTests.cs +++ b/src/Components/Components/test/PersistentStateValueProviderTests.cs @@ -15,7 +15,7 @@ using Microsoft.Extensions.Logging.Testing; namespace Microsoft.AspNetCore.Components; -public class SupplyParameterFromPersistentComponentStateValueProviderTests +public class PersistentStateValueProviderTests { [Fact] public void CanRestoreState_ForComponentWithProperties() @@ -25,7 +25,7 @@ public void CanRestoreState_ForComponentWithProperties() new Dictionary(), []); - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(state); + var provider = new PersistentStateValueProvider(state); var renderer = new TestRenderer(); var component = new TestComponent(); // Update the method call to match the correct signature @@ -53,7 +53,7 @@ public void Subscribe_RegistersPersistenceCallback() var state = new PersistentComponentState( new Dictionary(), []); - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(state); + var provider = new PersistentStateValueProvider(state); var renderer = new TestRenderer(); var component = new TestComponent(); var componentStates = CreateComponentState(renderer, [(component, null)], null); @@ -75,7 +75,7 @@ public void Unsubscribe_RemovesCallbackFromRegisteredCallbacks() var state = new PersistentComponentState( new Dictionary(), []); - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(state); + var provider = new PersistentStateValueProvider(state); var renderer = new TestRenderer(); var component = new TestComponent(); var componentStates = CreateComponentState(renderer, [(component, null)], null); @@ -108,7 +108,7 @@ public async Task PersistAsync_PersistsStateForSubscribedComponentProperties() var componentState = componentStates.First(); // Create the provider and subscribe the component - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); provider.Subscribe(componentState, cascadingParameterInfo); @@ -124,8 +124,8 @@ public async Task PersistAsync_PersistsStateForSubscribedComponentProperties() var newState = new PersistentComponentState(new Dictionary(), []); newState.InitializeExistingState(store.State); - // The key used for storing the property value is computed by the SupplyParameterFromPersistentComponentStateValueProvider - var key = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); + // The key used for storing the property value is computed by the PersistentStateValueProvider + var key = PersistentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson(key, out var retrievedValue)); Assert.Equal("testValue", retrievedValue); } @@ -147,7 +147,7 @@ public async Task PersistAsync_UsesParentComponentType_WhenAvailable() var componentState = componentStates.First(); // Create the provider and subscribe the component - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); provider.Subscribe(componentState, cascadingParameterInfo); @@ -162,8 +162,8 @@ public async Task PersistAsync_UsesParentComponentType_WhenAvailable() var newState = new PersistentComponentState(new Dictionary(), []); newState.InitializeExistingState(store.State); - // The key used for storing the property value is computed by the SupplyParameterFromPersistentComponentStateValueProvider - var key = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); + // The key used for storing the property value is computed by the PersistentStateValueProvider + var key = PersistentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson(key, out var retrievedValue)); Assert.Equal("testValue", retrievedValue); } @@ -187,7 +187,7 @@ public async Task PersistAsync_CanPersistMultipleComponentsOfSameType_WhenParent var componentState2 = componentStates.Last(); // Create the provider and subscribe the component - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); provider.Subscribe(componentState1, cascadingParameterInfo); provider.Subscribe(componentState2, cascadingParameterInfo); @@ -203,12 +203,12 @@ public async Task PersistAsync_CanPersistMultipleComponentsOfSameType_WhenParent var newState = new PersistentComponentState(new Dictionary(), []); newState.InitializeExistingState(store.State); - // The key used for storing the property value is computed by the SupplyParameterFromPersistentComponentStateValueProvider - var key1 = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState1, cascadingParameterInfo.PropertyName); + // The key used for storing the property value is computed by the PersistentStateValueProvider + var key1 = PersistentStateValueProvider.ComputeKey(componentState1, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson(key1, out var retrievedValue)); Assert.Equal("testValue1", retrievedValue); - var key2 = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState2, cascadingParameterInfo.PropertyName); + var key2 = PersistentStateValueProvider.ComputeKey(componentState2, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson(key2, out retrievedValue)); Assert.Equal("testValue2", retrievedValue); } @@ -260,7 +260,7 @@ public async Task PersistAsync_CanPersistMultipleComponentsOfSameType_SupportsDi var componentState2 = componentStates.Last(); // Create the provider and subscribe the component - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); provider.Subscribe(componentState1, cascadingParameterInfo); provider.Subscribe(componentState2, cascadingParameterInfo); @@ -276,12 +276,12 @@ public async Task PersistAsync_CanPersistMultipleComponentsOfSameType_SupportsDi var newState = new PersistentComponentState(new Dictionary(), []); newState.InitializeExistingState(store.State); - // The key used for storing the property value is computed by the SupplyParameterFromPersistentComponentStateValueProvider - var key1 = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState1, cascadingParameterInfo.PropertyName); + // The key used for storing the property value is computed by the PersistentStateValueProvider + var key1 = PersistentStateValueProvider.ComputeKey(componentState1, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson(key1, out var retrievedValue)); Assert.Equal("testValue1", retrievedValue); - var key2 = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState2, cascadingParameterInfo.PropertyName); + var key2 = PersistentStateValueProvider.ComputeKey(componentState2, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson(key2, out retrievedValue)); Assert.Equal("testValue2", retrievedValue); } @@ -305,7 +305,7 @@ public async Task PersistenceFails_IfMultipleComponentsOfSameType_TryToPersistDa var componentState2 = componentStates.Last(); // Create the provider and subscribe the components - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); provider.Subscribe(componentState1, cascadingParameterInfo); provider.Subscribe(componentState2, cascadingParameterInfo); @@ -346,7 +346,7 @@ public async Task PersistentceFails_IfMultipleComponentsOfSameType_TryToPersistD var componentState2 = componentStates.Last(); // Create the provider and subscribe the components - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); provider.Subscribe(componentState1, cascadingParameterInfo); provider.Subscribe(componentState2, cascadingParameterInfo); @@ -379,7 +379,7 @@ public async Task PersistenceFails_MultipleComponentsUseTheSameKey() var componentState2 = componentStates.Last(); // Create the provider and subscribe the components - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); provider.Subscribe(componentState1, cascadingParameterInfo); provider.Subscribe(componentState2, cascadingParameterInfo); @@ -419,7 +419,7 @@ public async Task PersistenceFails_MultipleComponentsUseInvalidKeyTypes(object c var componentState2 = componentStates.Last(); // Create the provider and subscribe the components - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); provider.Subscribe(componentState1, cascadingParameterInfo); provider.Subscribe(componentState2, cascadingParameterInfo); @@ -448,7 +448,7 @@ public async Task PersistAsync_CanPersistValueTypes_IntProperty() var componentState = componentStates.First(); // Create the provider and subscribe the component - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(ValueTypeTestComponent.IntValue), typeof(int)); provider.Subscribe(componentState, cascadingParameterInfo); @@ -462,7 +462,7 @@ public async Task PersistAsync_CanPersistValueTypes_IntProperty() var newState = new PersistentComponentState(new Dictionary(), []); newState.InitializeExistingState(store.State); - var key = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); + var key = PersistentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson(key, out var retrievedValue)); Assert.Equal(42, retrievedValue); } @@ -483,7 +483,7 @@ public async Task PersistAsync_CanPersistValueTypes_NullableIntProperty() var componentState = componentStates.First(); // Create the provider and subscribe the component - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(ValueTypeTestComponent.NullableIntValue), typeof(int?)); provider.Subscribe(componentState, cascadingParameterInfo); @@ -497,7 +497,7 @@ public async Task PersistAsync_CanPersistValueTypes_NullableIntProperty() var newState = new PersistentComponentState(new Dictionary(), []); newState.InitializeExistingState(store.State); - var key = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); + var key = PersistentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson(key, out var retrievedValue)); Assert.Equal(123, retrievedValue); } @@ -518,7 +518,7 @@ public async Task PersistAsync_CanPersistValueTypes_TupleProperty() var componentState = componentStates.First(); // Create the provider and subscribe the component - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(ValueTypeTestComponent.TupleValue), typeof((string, int))); provider.Subscribe(componentState, cascadingParameterInfo); @@ -532,7 +532,7 @@ public async Task PersistAsync_CanPersistValueTypes_TupleProperty() var newState = new PersistentComponentState(new Dictionary(), []); newState.InitializeExistingState(store.State); - var key = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); + var key = PersistentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson<(string, int)>(key, out var retrievedValue)); Assert.Equal(("test", 456), retrievedValue); } @@ -553,7 +553,7 @@ public async Task PersistAsync_CanPersistValueTypes_NullableTupleProperty() var componentState = componentStates.First(); // Create the provider and subscribe the component - var provider = new SupplyParameterFromPersistentComponentStateValueProvider(persistenceManager.State); + var provider = new PersistentStateValueProvider(persistenceManager.State); var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(ValueTypeTestComponent.NullableTupleValue), typeof((string, int)?)); provider.Subscribe(componentState, cascadingParameterInfo); @@ -567,7 +567,7 @@ public async Task PersistAsync_CanPersistValueTypes_NullableTupleProperty() var newState = new PersistentComponentState(new Dictionary(), []); newState.InitializeExistingState(store.State); - var key = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); + var key = PersistentStateValueProvider.ComputeKey(componentState, cascadingParameterInfo.PropertyName); Assert.True(newState.TryTakeFromJson<(string, int)?>(key, out var retrievedValue)); Assert.Equal(("test2", 789), retrievedValue); } @@ -577,7 +577,7 @@ private static void InitializeState(PersistentComponentState state, List<(Compon var dictionary = new Dictionary(); foreach (var item in items) { - var key = SupplyParameterFromPersistentComponentStateValueProvider.ComputeKey(item.componentState, item.propertyName); + var key = PersistentStateValueProvider.ComputeKey(item.componentState, item.propertyName); dictionary[key] = JsonSerializer.SerializeToUtf8Bytes(item.value, JsonSerializerOptions.Web); } state.InitializeExistingState(dictionary); @@ -586,7 +586,7 @@ private static void InitializeState(PersistentComponentState state, List<(Compon private static CascadingParameterInfo CreateCascadingParameterInfo(string propertyName, Type propertyType) { return new CascadingParameterInfo( - new SupplyParameterFromPersistentComponentStateAttribute(), + new PersistentStateAttribute(), propertyName, propertyType); } @@ -644,7 +644,7 @@ private class TestRenderer() : Renderer(new ServiceCollection().BuildServiceProv private class TestComponent : IComponent { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); @@ -653,16 +653,16 @@ private class TestComponent : IComponent private class ValueTypeTestComponent : IComponent { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public int IntValue { get; set; } - [SupplyParameterFromPersistentComponentState] + [PersistentState] public int? NullableIntValue { get; set; } - [SupplyParameterFromPersistentComponentState] + [PersistentState] public (string, int) TupleValue { get; set; } - [SupplyParameterFromPersistentComponentState] + [PersistentState] public (string, int)? NullableTupleValue { get; set; } public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); diff --git a/src/Components/Server/test/Circuits/CircuitPersistenceManagerTest.cs b/src/Components/Server/test/Circuits/CircuitPersistenceManagerTest.cs index 2547d9d8cd82..8f75e9d52154 100644 --- a/src/Components/Server/test/Circuits/CircuitPersistenceManagerTest.cs +++ b/src/Components/Server/test/Circuits/CircuitPersistenceManagerTest.cs @@ -586,7 +586,7 @@ public void Attach(RenderHandle renderHandle) _renderHandle = renderHandle; } - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string Persisted { get; set; } [Parameter] @@ -617,7 +617,7 @@ public void Attach(RenderHandle renderHandle) _renderHandle = renderHandle; } - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string Persisted { get; set; } [Parameter] diff --git a/src/Components/Shared/src/DefaultAntiforgeryStateProvider.cs b/src/Components/Shared/src/DefaultAntiforgeryStateProvider.cs index 75dec5721d38..b1cd18e8ce0e 100644 --- a/src/Components/Shared/src/DefaultAntiforgeryStateProvider.cs +++ b/src/Components/Shared/src/DefaultAntiforgeryStateProvider.cs @@ -7,7 +7,7 @@ internal class DefaultAntiforgeryStateProvider : AntiforgeryStateProvider { protected AntiforgeryRequestToken? _currentToken; - [SupplyParameterFromPersistentComponentState] + [PersistentState] public AntiforgeryRequestToken? CurrentToken { get => _currentToken ??= GetAntiforgeryToken(); diff --git a/src/Components/Shared/src/ResourceCollectionProvider.cs b/src/Components/Shared/src/ResourceCollectionProvider.cs index 030d4b0e684c..2084abdb3e53 100644 --- a/src/Components/Shared/src/ResourceCollectionProvider.cs +++ b/src/Components/Shared/src/ResourceCollectionProvider.cs @@ -13,7 +13,7 @@ internal class ResourceCollectionProvider { private string? _url; - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string? ResourceCollectionUrl { get => _url; diff --git a/src/Components/Web.JS/src/Boot.Server.Common.ts b/src/Components/Web.JS/src/Boot.Server.Common.ts index 18c9903c4af9..447ab449444e 100644 --- a/src/Components/Web.JS/src/Boot.Server.Common.ts +++ b/src/Components/Web.JS/src/Boot.Server.Common.ts @@ -67,7 +67,7 @@ async function startServerCore(components: RootComponentManager { + Blazor.pauseCircuit = async () => { if (circuit.didRenderingFail()) { // We can't pause after a failure, so exit early. return false; @@ -81,7 +81,7 @@ async function startServerCore(components: RootComponentManager { + Blazor.resumeCircuit = async () => { if (circuit.didRenderingFail()) { // We can't resume after a failure, so exit early. return false; diff --git a/src/Components/Web.JS/src/GlobalExports.ts b/src/Components/Web.JS/src/GlobalExports.ts index 3129ecc424e4..ad868dcb58c4 100644 --- a/src/Components/Web.JS/src/GlobalExports.ts +++ b/src/Components/Web.JS/src/GlobalExports.ts @@ -38,8 +38,8 @@ export interface IBlazor { removeEventListener?: typeof JSEventRegistry.prototype.removeEventListener; disconnect?: () => void; reconnect?: (existingConnection?: HubConnection) => Promise; - pause?: () => Promise; - resume?: () => Promise; + pauseCircuit?: () => Promise; + resumeCircuit?: () => Promise; defaultReconnectionHandler?: DefaultReconnectionHandler; start?: ((userOptions?: Partial) => Promise) | ((options?: Partial) => Promise) | ((options?: Partial) => Promise); platform?: Platform; diff --git a/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts b/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts index 644507d6ef5a..a14aa03363c7 100644 --- a/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts +++ b/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts @@ -158,7 +158,7 @@ export class DefaultReconnectDisplay implements ReconnectDisplay { if (!successful) { // Try to resume the circuit if the reconnect failed this.update({ type: 'pause', remote: this.remote }); - const resumeSuccessful = await Blazor.resume!(); + const resumeSuccessful = await Blazor.resumeCircuit!(); if (!resumeSuccessful) { this.rejected(); } @@ -176,7 +176,7 @@ export class DefaultReconnectDisplay implements ReconnectDisplay { // - true to mean success // - false to mean we reached the server, but it rejected the connection (e.g., unknown circuit ID) // - exception to mean we didn't reach the server (this can be sync or async) - const successful = await Blazor.resume!(); + const successful = await Blazor.resumeCircuit!(); if (!successful) { this.failed(); } diff --git a/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectionHandler.ts b/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectionHandler.ts index 953d6253a133..31528e850a41 100644 --- a/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectionHandler.ts +++ b/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectionHandler.ts @@ -23,7 +23,7 @@ export class DefaultReconnectionHandler implements ReconnectionHandler { this._logger = logger; this._reconnectionDisplay = overrideDisplay; this._reconnectCallback = reconnectCallback || Blazor.reconnect!; - this._resumeCallback = resumeCallback || Blazor.resume!; + this._resumeCallback = resumeCallback || Blazor.resumeCircuit!; } onConnectionDown(options: ReconnectionOptions, _error?: Error, isClientPause?: boolean, remotePause?: boolean): void { diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/ReconnectModal.razor.js b/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/ReconnectModal.razor.js index f58438240ac8..e52a190bacbb 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/ReconnectModal.razor.js +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/ReconnectModal.razor.js @@ -32,7 +32,7 @@ async function retry() { if (!successful) { // We have been able to reach the server, but the circuit is no longer available. // We'll reload the page so the user can continue using the app as quickly as possible. - const resumeSuccessful = await Blazor.resume(); + const resumeSuccessful = await Blazor.resumeCircuit(); if (!resumeSuccessful) { location.reload(); } else { @@ -47,7 +47,7 @@ async function retry() { async function resume() { try { - const successful = await Blazor.resume(); + const successful = await Blazor.resumeCircuit(); if (!successful) { location.reload(); } diff --git a/src/Components/test/testassets/TestContentPackage/Services/InteractiveAutoService.cs b/src/Components/test/testassets/TestContentPackage/Services/InteractiveAutoService.cs index 467aa416504f..00be5ba2275c 100644 --- a/src/Components/test/testassets/TestContentPackage/Services/InteractiveAutoService.cs +++ b/src/Components/test/testassets/TestContentPackage/Services/InteractiveAutoService.cs @@ -10,6 +10,6 @@ namespace TestContentPackage.Services; public class InteractiveAutoService { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } } diff --git a/src/Components/test/testassets/TestContentPackage/Services/InteractiveServerService.cs b/src/Components/test/testassets/TestContentPackage/Services/InteractiveServerService.cs index 906eb84d5f0c..c3405d258090 100644 --- a/src/Components/test/testassets/TestContentPackage/Services/InteractiveServerService.cs +++ b/src/Components/test/testassets/TestContentPackage/Services/InteractiveServerService.cs @@ -9,6 +9,6 @@ namespace TestContentPackage.Services; public class InteractiveServerService { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } } diff --git a/src/Components/test/testassets/TestContentPackage/Services/InteractiveWebAssemblyService.cs b/src/Components/test/testassets/TestContentPackage/Services/InteractiveWebAssemblyService.cs index f73d03e2db11..2909b4bdd959 100644 --- a/src/Components/test/testassets/TestContentPackage/Services/InteractiveWebAssemblyService.cs +++ b/src/Components/test/testassets/TestContentPackage/Services/InteractiveWebAssemblyService.cs @@ -10,6 +10,6 @@ namespace TestContentPackage.Services; public class InteractiveWebAssemblyService { - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string State { get; set; } } diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Layout/ReconnectModal.razor.js b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Layout/ReconnectModal.razor.js index f58438240ac8..e52a190bacbb 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Layout/ReconnectModal.razor.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Layout/ReconnectModal.razor.js @@ -32,7 +32,7 @@ async function retry() { if (!successful) { // We have been able to reach the server, but the circuit is no longer available. // We'll reload the page so the user can continue using the app as quickly as possible. - const resumeSuccessful = await Blazor.resume(); + const resumeSuccessful = await Blazor.resumeCircuit(); if (!resumeSuccessful) { location.reload(); } else { @@ -47,7 +47,7 @@ async function retry() { async function resume() { try { - const successful = await Blazor.resume(); + const successful = await Blazor.resumeCircuit(); if (!successful) { location.reload(); } From 5af73e590606c0b7a10404e717f3b4da11b43eba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:19:31 +0000 Subject: [PATCH 03/10] Final verification - all API changes implemented successfully Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx | 6692 +++++++++++++++++ 1 file changed, 6692 insertions(+) create mode 100644 src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx diff --git a/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx b/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx new file mode 100644 index 000000000000..50a893ddd7f7 --- /dev/null +++ b/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx @@ -0,0 +1,6692 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://github.com/dotnet/aspnetcore/issues/30312 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Matching on a per segment basis in ASP.NET is not supported for catch-alls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {=} is allowed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + It's ok to have literals after optional parameters. They just aren't optional. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is allowed in ASP.NET Core routing. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {.} is allowed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + It's ok to have literals after optional parameters. They just aren't optional. + + + + + + + + + + + + + + + + + + + + + + + https://github.com/dotnet/aspnetcore/issues/30312 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.0.2+dd36e86129 (64-bit .NET 10.0.0-preview.7.25351.105) +[xUnit.net 00:00:00.12] Discovering: Microsoft.AspNetCore.Components.Tests +[xUnit.net 00:00:00.29] Discovered: Microsoft.AspNetCore.Components.Tests +[xUnit.net 00:00:00.42] Starting: Microsoft.AspNetCore.Components.Tests +[xUnit.net 00:00:00.94] {.} is allowed +Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{.}", expectedMessage: "The route parameter name '.' is invalid. Route par"···)' was skipped in the test run. +[xUnit.net 00:00:00.95] {=} is allowed +Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{=}", expectedMessage: "The route parameter name '=' is invalid. Route par"···)' was skipped in the test run. +[xUnit.net 00:00:00.95] It's ok to have literals after optional parameters. They just aren't optional. +Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_NonOptionalParamAfterOptionalParam' was skipped in the test run. +[xUnit.net 00:00:00.97] It's ok to have literals after optional parameters. They just aren't optional. +Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_LiteralAfterOptionalParam' was skipped in the test run. +[xUnit.net 00:00:01.08] https://github.com/dotnet/aspnetcore/issues/30312 +Test 'Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithInvariantCulture' was skipped in the test run. +[xUnit.net 00:00:01.21] https://github.com/dotnet/aspnetcore/issues/30312 +Test 'Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithCurrentCulture' was skipped in the test run. +[xUnit.net 00:00:01.28] This is allowed in ASP.NET Core routing. +Test 'Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.ThrowsForOptionalParametersFollowedByNonOptionalParameters' was skipped in the test run. +[xUnit.net 00:00:01.30] Matching on a per segment basis in ASP.NET is not supported for catch-alls +Test 'Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.CanMatchCatchAllParametersWithConstraints' was skipped in the test run. +[xUnit.net 00:00:02.58] Finished: Microsoft.AspNetCore.Components.Tests + + + + + [xUnit.net 00:00:00.94] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{.}", expectedMessage: "The route parameter name '.' is invalid. Route par"···) [SKIP] + + + [xUnit.net 00:00:00.95] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{=}", expectedMessage: "The route parameter name '=' is invalid. Route par"···) [SKIP] + + + [xUnit.net 00:00:00.95] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_NonOptionalParamAfterOptionalParam [SKIP] + + + [xUnit.net 00:00:00.97] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_LiteralAfterOptionalParam [SKIP] + + + [xUnit.net 00:00:01.08] Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithInvariantCulture [SKIP] + + + [xUnit.net 00:00:01.21] Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithCurrentCulture [SKIP] + + + [xUnit.net 00:00:01.28] Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.ThrowsForOptionalParametersFollowedByNonOptionalParameters [SKIP] + + + [xUnit.net 00:00:01.30] Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.CanMatchCatchAllParametersWithConstraints [SKIP] + + + + \ No newline at end of file From d6e3691f796f1e04256131353ecc398e93f9a2b1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:29:56 +0000 Subject: [PATCH 04/10] Fix XML documentation typo - remove double period Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../src/PersistentStateProviderServiceCollectionExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs b/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs index 683d11190a5c..c6d7efe12237 100644 --- a/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs +++ b/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs @@ -12,7 +12,7 @@ namespace Microsoft.Extensions.DependencyInjection; public static class PersistentStateProviderServiceCollectionExtensions { /// - /// Enables component parameters to be supplied from with .. + /// Enables component parameters to be supplied from with . /// /// The . /// The . From 3755f0d31e0ad022e2a3f20b9323e5e928309398 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:38:07 +0000 Subject: [PATCH 05/10] Move PersistentStateProviderServiceCollectionExtensions to Infrastructure namespace and remove test file Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- ...tateProviderServiceCollectionExtensions.cs | 3 +- .../Components/src/PublicAPI.Unshipped.txt | 4 +- .../_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx | 6692 ----------------- 3 files changed, 4 insertions(+), 6695 deletions(-) delete mode 100644 src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx diff --git a/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs b/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs index c6d7efe12237..b308f63005af 100644 --- a/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs +++ b/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs @@ -2,9 +2,10 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; -namespace Microsoft.Extensions.DependencyInjection; +namespace Microsoft.AspNetCore.Components.Infrastructure; /// /// Enables component parameters to be supplied from with . diff --git a/src/Components/Components/src/PublicAPI.Unshipped.txt b/src/Components/Components/src/PublicAPI.Unshipped.txt index 65dbc0131f27..f11613946794 100644 --- a/src/Components/Components/src/PublicAPI.Unshipped.txt +++ b/src/Components/Components/src/PublicAPI.Unshipped.txt @@ -15,9 +15,9 @@ Microsoft.AspNetCore.Components.Infrastructure.ComponentStatePersistenceManager. Microsoft.AspNetCore.Components.Infrastructure.RegisterPersistentComponentStateServiceCollectionExtensions Microsoft.AspNetCore.Components.PersistentStateAttribute Microsoft.AspNetCore.Components.PersistentStateAttribute.PersistentStateAttribute() -> void -Microsoft.Extensions.DependencyInjection.PersistentStateProviderServiceCollectionExtensions +Microsoft.AspNetCore.Components.Infrastructure.PersistentStateProviderServiceCollectionExtensions static Microsoft.AspNetCore.Components.Infrastructure.RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(Microsoft.Extensions.DependencyInjection.IServiceCollection! services, Microsoft.AspNetCore.Components.IComponentRenderMode! componentRenderMode) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.AspNetCore.Components.Infrastructure.ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.AspNetCore.Components.Infrastructure.ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! -static Microsoft.Extensions.DependencyInjection.PersistentStateProviderServiceCollectionExtensions.AddSupplyValueFromPersistentComponentStateProvider(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! +static Microsoft.AspNetCore.Components.Infrastructure.PersistentStateProviderServiceCollectionExtensions.AddSupplyValueFromPersistentComponentStateProvider(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! virtual Microsoft.AspNetCore.Components.Rendering.ComponentState.GetComponentKey() -> object? diff --git a/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx b/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx deleted file mode 100644 index 50a893ddd7f7..000000000000 --- a/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_21_18_24.trx +++ /dev/null @@ -1,6692 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https://github.com/dotnet/aspnetcore/issues/30312 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Matching on a per segment basis in ASP.NET is not supported for catch-alls - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {=} is allowed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - It's ok to have literals after optional parameters. They just aren't optional. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This is allowed in ASP.NET Core routing. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {.} is allowed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - It's ok to have literals after optional parameters. They just aren't optional. - - - - - - - - - - - - - - - - - - - - - - - https://github.com/dotnet/aspnetcore/issues/30312 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.0.2+dd36e86129 (64-bit .NET 10.0.0-preview.7.25351.105) -[xUnit.net 00:00:00.12] Discovering: Microsoft.AspNetCore.Components.Tests -[xUnit.net 00:00:00.29] Discovered: Microsoft.AspNetCore.Components.Tests -[xUnit.net 00:00:00.42] Starting: Microsoft.AspNetCore.Components.Tests -[xUnit.net 00:00:00.94] {.} is allowed -Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{.}", expectedMessage: "The route parameter name '.' is invalid. Route par"···)' was skipped in the test run. -[xUnit.net 00:00:00.95] {=} is allowed -Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{=}", expectedMessage: "The route parameter name '=' is invalid. Route par"···)' was skipped in the test run. -[xUnit.net 00:00:00.95] It's ok to have literals after optional parameters. They just aren't optional. -Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_NonOptionalParamAfterOptionalParam' was skipped in the test run. -[xUnit.net 00:00:00.97] It's ok to have literals after optional parameters. They just aren't optional. -Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_LiteralAfterOptionalParam' was skipped in the test run. -[xUnit.net 00:00:01.08] https://github.com/dotnet/aspnetcore/issues/30312 -Test 'Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithInvariantCulture' was skipped in the test run. -[xUnit.net 00:00:01.21] https://github.com/dotnet/aspnetcore/issues/30312 -Test 'Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithCurrentCulture' was skipped in the test run. -[xUnit.net 00:00:01.28] This is allowed in ASP.NET Core routing. -Test 'Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.ThrowsForOptionalParametersFollowedByNonOptionalParameters' was skipped in the test run. -[xUnit.net 00:00:01.30] Matching on a per segment basis in ASP.NET is not supported for catch-alls -Test 'Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.CanMatchCatchAllParametersWithConstraints' was skipped in the test run. -[xUnit.net 00:00:02.58] Finished: Microsoft.AspNetCore.Components.Tests - - - - - [xUnit.net 00:00:00.94] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{.}", expectedMessage: "The route parameter name '.' is invalid. Route par"···) [SKIP] - - - [xUnit.net 00:00:00.95] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{=}", expectedMessage: "The route parameter name '=' is invalid. Route par"···) [SKIP] - - - [xUnit.net 00:00:00.95] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_NonOptionalParamAfterOptionalParam [SKIP] - - - [xUnit.net 00:00:00.97] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_LiteralAfterOptionalParam [SKIP] - - - [xUnit.net 00:00:01.08] Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithInvariantCulture [SKIP] - - - [xUnit.net 00:00:01.21] Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithCurrentCulture [SKIP] - - - [xUnit.net 00:00:01.28] Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.ThrowsForOptionalParametersFollowedByNonOptionalParameters [SKIP] - - - [xUnit.net 00:00:01.30] Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.CanMatchCatchAllParametersWithConstraints [SKIP] - - - - \ No newline at end of file From 17d591d485c37c18a68709886faa608a6f48101c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:47:25 +0000 Subject: [PATCH 06/10] Move PersistentStateValueProvider to Infrastructure namespace Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- src/Components/Components/src/PersistentStateValueProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Components/src/PersistentStateValueProvider.cs b/src/Components/Components/src/PersistentStateValueProvider.cs index 3a35e77bcce3..0ebaa2a34577 100644 --- a/src/Components/Components/src/PersistentStateValueProvider.cs +++ b/src/Components/Components/src/PersistentStateValueProvider.cs @@ -13,7 +13,7 @@ using Microsoft.AspNetCore.Components.Rendering; using Microsoft.AspNetCore.Internal; -namespace Microsoft.AspNetCore.Components; +namespace Microsoft.AspNetCore.Components.Infrastructure; internal sealed class PersistentStateValueProvider(PersistentComponentState state) : ICascadingValueSupplier { From 208c4e6d55a0925fe0ef1b4530a171f7e66b6b27 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:04:33 +0000 Subject: [PATCH 07/10] Remove unnecessary using directive from PersistentStateProviderServiceCollectionExtensions Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- ...tateProviderServiceCollectionExtensions.cs | 1 - .../_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx | 6692 +++++++++++++++++ 2 files changed, 6692 insertions(+), 1 deletion(-) create mode 100644 src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx diff --git a/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs b/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs index b308f63005af..f806a7597a30 100644 --- a/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs +++ b/src/Components/Components/src/PersistentStateProviderServiceCollectionExtensions.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; diff --git a/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx b/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx new file mode 100644 index 000000000000..9607d108902a --- /dev/null +++ b/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx @@ -0,0 +1,6692 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://github.com/dotnet/aspnetcore/issues/30312 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is allowed in ASP.NET Core routing. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {=} is allowed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {.} is allowed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://github.com/dotnet/aspnetcore/issues/30312 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + It's ok to have literals after optional parameters. They just aren't optional. + + + + + + + + + + + + + + + + + + + + + + + + + + It's ok to have literals after optional parameters. They just aren't optional. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Matching on a per segment basis in ASP.NET is not supported for catch-alls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.0.2+dd36e86129 (64-bit .NET 10.0.0-preview.7.25351.105) +[xUnit.net 00:00:00.13] Discovering: Microsoft.AspNetCore.Components.Tests +[xUnit.net 00:00:00.32] Discovered: Microsoft.AspNetCore.Components.Tests +[xUnit.net 00:00:00.46] Starting: Microsoft.AspNetCore.Components.Tests +[xUnit.net 00:00:01.05] https://github.com/dotnet/aspnetcore/issues/30312 +Test 'Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithInvariantCulture' was skipped in the test run. +[xUnit.net 00:00:01.15] This is allowed in ASP.NET Core routing. +Test 'Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.ThrowsForOptionalParametersFollowedByNonOptionalParameters' was skipped in the test run. +[xUnit.net 00:00:01.18] {.} is allowed +Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{.}", expectedMessage: "The route parameter name '.' is invalid. Route par"···)' was skipped in the test run. +[xUnit.net 00:00:01.18] {=} is allowed +Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{=}", expectedMessage: "The route parameter name '=' is invalid. Route par"···)' was skipped in the test run. +[xUnit.net 00:00:01.19] It's ok to have literals after optional parameters. They just aren't optional. +Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_NonOptionalParamAfterOptionalParam' was skipped in the test run. +[xUnit.net 00:00:01.19] Matching on a per segment basis in ASP.NET is not supported for catch-alls +Test 'Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.CanMatchCatchAllParametersWithConstraints' was skipped in the test run. +[xUnit.net 00:00:01.20] It's ok to have literals after optional parameters. They just aren't optional. +Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_LiteralAfterOptionalParam' was skipped in the test run. +[xUnit.net 00:00:01.27] https://github.com/dotnet/aspnetcore/issues/30312 +Test 'Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithCurrentCulture' was skipped in the test run. +[xUnit.net 00:00:02.70] Finished: Microsoft.AspNetCore.Components.Tests + + + + + [xUnit.net 00:00:01.05] Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithInvariantCulture [SKIP] + + + [xUnit.net 00:00:01.15] Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.ThrowsForOptionalParametersFollowedByNonOptionalParameters [SKIP] + + + [xUnit.net 00:00:01.18] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{.}", expectedMessage: "The route parameter name '.' is invalid. Route par"···) [SKIP] + + + [xUnit.net 00:00:01.18] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{=}", expectedMessage: "The route parameter name '=' is invalid. Route par"···) [SKIP] + + + [xUnit.net 00:00:01.19] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_NonOptionalParamAfterOptionalParam [SKIP] + + + [xUnit.net 00:00:01.19] Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.CanMatchCatchAllParametersWithConstraints [SKIP] + + + [xUnit.net 00:00:01.20] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_LiteralAfterOptionalParam [SKIP] + + + [xUnit.net 00:00:01.27] Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithCurrentCulture [SKIP] + + + + \ No newline at end of file From 1661ff9ede7e6b106356f7b463debe9cdc3bafd9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:29:44 +0000 Subject: [PATCH 08/10] Fix remaining attribute references in test assets Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../TestContentPackage/DeclarativePersistStateComponent.razor | 2 +- .../test/testassets/TestContentPackage/PersistentCounter.razor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Components/test/testassets/TestContentPackage/DeclarativePersistStateComponent.razor b/src/Components/test/testassets/TestContentPackage/DeclarativePersistStateComponent.razor index bbdbcc43dccd..07cec64a2706 100644 --- a/src/Components/test/testassets/TestContentPackage/DeclarativePersistStateComponent.razor +++ b/src/Components/test/testassets/TestContentPackage/DeclarativePersistStateComponent.razor @@ -8,7 +8,7 @@ [Parameter, EditorRequired] public string KeyName { get; set; } = ""; - [SupplyParameterFromPersistentComponentState] + [PersistentState] public string Value { get; set; } private string _renderMode = "SSR"; diff --git a/src/Components/test/testassets/TestContentPackage/PersistentCounter.razor b/src/Components/test/testassets/TestContentPackage/PersistentCounter.razor index fef4f1ecaa3f..49f840e487f4 100644 --- a/src/Components/test/testassets/TestContentPackage/PersistentCounter.razor +++ b/src/Components/test/testassets/TestContentPackage/PersistentCounter.razor @@ -14,7 +14,7 @@ @code { - [SupplyParameterFromPersistentComponentState] public CounterState State { get; set; } + [PersistentState] public CounterState State { get; set; } public class CounterState { From 89f85a340e05012421cfcdac64e91c21bfbed991 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Jul 2025 05:35:06 +0000 Subject: [PATCH 09/10] Fix E2E test - update Blazor.pause() to Blazor.pauseCircuit() Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../test/E2ETest/ServerExecutionTests/ServerResumeTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/test/E2ETest/ServerExecutionTests/ServerResumeTests.cs b/src/Components/test/E2ETest/ServerExecutionTests/ServerResumeTests.cs index f79d5064c8b4..a095b6bafc67 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/ServerResumeTests.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/ServerResumeTests.cs @@ -146,7 +146,7 @@ private void TriggerReconnectAndInteract(IJavaScriptExecutor javascript) private void TriggerClientPauseAndInteract(IJavaScriptExecutor javascript) { var previousText = Browser.Exists(By.Id("persistent-counter-render")).Text; - javascript.ExecuteScript("Blazor.pause()"); + javascript.ExecuteScript("Blazor.pauseCircuit()"); Browser.Equal("block", () => Browser.Exists(By.Id("components-reconnect-modal")).GetCssValue("display")); // Retry button should be hidden From 5352623b9fca02d1aa8752efe2f2ed0012462e3a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Jul 2025 06:17:04 +0000 Subject: [PATCH 10/10] Remove test results file and update .gitignore Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .gitignore | 2 + .../_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx | 6692 ----------------- 2 files changed, 2 insertions(+), 6692 deletions(-) delete mode 100644 src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx diff --git a/.gitignore b/.gitignore index 29f59c3a3e70..623c933f2892 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ BenchmarkDotNet.Artifacts/ src/SignalR/clients/**/dist/ modules/ .ionide/ +TestResults/ # File extensions *.aps @@ -33,6 +34,7 @@ modules/ *.suo *.svclog *.tlog +*.trx *.user *.userprefs *.vspx diff --git a/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx b/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx deleted file mode 100644 index 9607d108902a..000000000000 --- a/src/Components/Components/test/TestResults/_pkrvmbietmlfzoi_2025-07-02_22_04_17.trx +++ /dev/null @@ -1,6692 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https://github.com/dotnet/aspnetcore/issues/30312 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This is allowed in ASP.NET Core routing. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {=} is allowed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {.} is allowed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https://github.com/dotnet/aspnetcore/issues/30312 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - It's ok to have literals after optional parameters. They just aren't optional. - - - - - - - - - - - - - - - - - - - - - - - - - - It's ok to have literals after optional parameters. They just aren't optional. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Matching on a per segment basis in ASP.NET is not supported for catch-alls - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.0.2+dd36e86129 (64-bit .NET 10.0.0-preview.7.25351.105) -[xUnit.net 00:00:00.13] Discovering: Microsoft.AspNetCore.Components.Tests -[xUnit.net 00:00:00.32] Discovered: Microsoft.AspNetCore.Components.Tests -[xUnit.net 00:00:00.46] Starting: Microsoft.AspNetCore.Components.Tests -[xUnit.net 00:00:01.05] https://github.com/dotnet/aspnetcore/issues/30312 -Test 'Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithInvariantCulture' was skipped in the test run. -[xUnit.net 00:00:01.15] This is allowed in ASP.NET Core routing. -Test 'Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.ThrowsForOptionalParametersFollowedByNonOptionalParameters' was skipped in the test run. -[xUnit.net 00:00:01.18] {.} is allowed -Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{.}", expectedMessage: "The route parameter name '.' is invalid. Route par"···)' was skipped in the test run. -[xUnit.net 00:00:01.18] {=} is allowed -Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{=}", expectedMessage: "The route parameter name '=' is invalid. Route par"···)' was skipped in the test run. -[xUnit.net 00:00:01.19] It's ok to have literals after optional parameters. They just aren't optional. -Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_NonOptionalParamAfterOptionalParam' was skipped in the test run. -[xUnit.net 00:00:01.19] Matching on a per segment basis in ASP.NET is not supported for catch-alls -Test 'Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.CanMatchCatchAllParametersWithConstraints' was skipped in the test run. -[xUnit.net 00:00:01.20] It's ok to have literals after optional parameters. They just aren't optional. -Test 'Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_LiteralAfterOptionalParam' was skipped in the test run. -[xUnit.net 00:00:01.27] https://github.com/dotnet/aspnetcore/issues/30312 -Test 'Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithCurrentCulture' was skipped in the test run. -[xUnit.net 00:00:02.70] Finished: Microsoft.AspNetCore.Components.Tests - - - - - [xUnit.net 00:00:01.05] Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithInvariantCulture [SKIP] - - - [xUnit.net 00:00:01.15] Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.ThrowsForOptionalParametersFollowedByNonOptionalParameters [SKIP] - - - [xUnit.net 00:00:01.18] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{.}", expectedMessage: "The route parameter name '.' is invalid. Route par"···) [SKIP] - - - [xUnit.net 00:00:01.18] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.ParseRouteParameter_ThrowsIf_ParameterContainsSpecialCharacters(template: "{=}", expectedMessage: "The route parameter name '=' is invalid. Route par"···) [SKIP] - - - [xUnit.net 00:00:01.19] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_NonOptionalParamAfterOptionalParam [SKIP] - - - [xUnit.net 00:00:01.19] Microsoft.AspNetCore.Components.Routing.RouteTableFactoryTests.CanMatchCatchAllParametersWithConstraints [SKIP] - - - [xUnit.net 00:00:01.20] Microsoft.AspNetCore.Components.Routing.RoutePatternParserTests.InvalidTemplate_LiteralAfterOptionalParam [SKIP] - - - [xUnit.net 00:00:01.27] Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensionsTest.CreateBinder_NumericType_WithCurrentCulture [SKIP] - - - - \ No newline at end of file