diff --git a/src/Http/Routing/src/Matching/EndpointComparer.cs b/src/Http/Routing/src/Matching/EndpointComparer.cs index 4609b8c4f340..7df5de8ea42e 100644 --- a/src/Http/Routing/src/Matching/EndpointComparer.cs +++ b/src/Http/Routing/src/Matching/EndpointComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; @@ -61,7 +61,7 @@ private int ComparePattern(Endpoint x, Endpoint y) { if (routeEndpointY != null) { - return routeEndpointX.RoutePattern.RawText.CompareTo(routeEndpointY.RoutePattern.RawText); + return string.Compare(routeEndpointX.RoutePattern.RawText, routeEndpointY.RoutePattern.RawText, StringComparison.OrdinalIgnoreCase); } return 1; diff --git a/src/Http/Routing/test/UnitTests/Matching/RouteEndpointComparerTest.cs b/src/Http/Routing/test/UnitTests/Matching/EndpointComparerTest.cs similarity index 90% rename from src/Http/Routing/test/UnitTests/Matching/RouteEndpointComparerTest.cs rename to src/Http/Routing/test/UnitTests/Matching/EndpointComparerTest.cs index b6f44d818637..8fc0a56a6672 100644 --- a/src/Http/Routing/test/UnitTests/Matching/RouteEndpointComparerTest.cs +++ b/src/Http/Routing/test/UnitTests/Matching/EndpointComparerTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; @@ -87,7 +87,7 @@ public void Compare_PrefersTemplate_IfOtherCriteriaIsSame() var result = comparer.Compare(endpoint1, endpoint2); // Assert - Assert.Equal(1, result); + Assert.True(result > 0); } [Fact] @@ -218,6 +218,29 @@ public void Sort_MoreSpecific_FirstInList() e => Assert.Same(endpoint7, e)); } + [Fact] + public void Compare_PatternOrder_OrdinalIgnoreCaseSort() + { + // Arrange + var endpoint1 = CreateEndpoint("/I", order: 0); + var endpoint2 = CreateEndpoint("/i", order: 0); + var endpoint3 = CreateEndpoint("/\u0131", order: 0); // Turkish lowercase i + + var list = new List() { endpoint1, endpoint2, endpoint3 }; + + var comparer = CreateComparer(); + + // Act + list.Sort(comparer); + + // Assert + Assert.Collection( + list, + e => Assert.Same(endpoint1, e), + e => Assert.Same(endpoint2, e), + e => Assert.Same(endpoint3, e)); + } + private static RouteEndpoint CreateEndpoint(string template, int order, params object[] metadata) { return new RouteEndpoint(