From 7b53bdd43e2e605a8eb686f22ceb558f46a1c4f5 Mon Sep 17 00:00:00 2001 From: Kirthi Krishnamraju Date: Mon, 14 Sep 2015 10:42:05 -0700 Subject: [PATCH] Fix for #38: Fallback to wrong language preference when the top preference is unavailable --- ...eptLanguageHeaderRequestCultureProvider.cs | 2 +- ...anguageHeaderRequestCultureProviderTest.cs | 64 ++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureProvider.cs b/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureProvider.cs index 46fbed8cc2..1771f5ada2 100644 --- a/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureProvider.cs +++ b/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureProvider.cs @@ -57,7 +57,7 @@ namespace Microsoft.AspNet.Localization requestCulture = ValidateRequestCulture(requestCulture); - if (requestCulture != null) + if (requestCulture.Culture == culture) { return Task.FromResult(requestCulture); } diff --git a/test/Microsoft.AspNet.Localization.Tests/AccessLanguageHeaderRequestCultureProviderTest.cs b/test/Microsoft.AspNet.Localization.Tests/AccessLanguageHeaderRequestCultureProviderTest.cs index b9ccd53707..a93d8f54be 100644 --- a/test/Microsoft.AspNet.Localization.Tests/AccessLanguageHeaderRequestCultureProviderTest.cs +++ b/test/Microsoft.AspNet.Localization.Tests/AccessLanguageHeaderRequestCultureProviderTest.cs @@ -16,7 +16,7 @@ namespace Microsoft.Framework.Localization.Tests public class AccessLanguageHeaderRequestCultureProviderTest { [Fact] - public async void GetFallbackLanguage() + public async void GetFallbackLanguage_ReturnsFirstNonNullCultureFromSupportedCultureList() { using (var server = TestServer.Create(app => { @@ -44,5 +44,67 @@ namespace Microsoft.Framework.Localization.Tests var response = await client.GetAsync(string.Empty); } } + + [Fact] + public async void GetFallbackLanguage_ReturnsFromSupportedCulture_AcceptLanguageListContainsSupportedCultures() + { + using (var server = TestServer.Create(app => + { + var options = new RequestLocalizationOptions + { + DefaultRequestCulture = new RequestCulture(new CultureInfo("fr-FR")), + SupportedCultures = new List + { + new CultureInfo("ar-SA"), + new CultureInfo("en-US") + } + }; + app.UseRequestLocalization(options); + app.Run(context => + { + var requestCultureFeature = context.Features.Get(); + var requestCulture = requestCultureFeature.RequestCulture; + Assert.Equal("ar-SA", requestCulture.Culture.Name); + return Task.FromResult(0); + }); + })) + { + var client = server.CreateClient(); + client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-SA,en-US"); + var count = client.DefaultRequestHeaders.AcceptLanguage.Count; + var response = await client.GetAsync(string.Empty); + } + } + + [Fact] + public async void GetFallbackLanguage_ReturnsDefault_AcceptLanguageListDoesnotContainSupportedCultures() + { + using (var server = TestServer.Create(app => + { + var options = new RequestLocalizationOptions + { + DefaultRequestCulture = new RequestCulture(new CultureInfo("fr-FR")), + SupportedCultures = new List + { + new CultureInfo("ar-SA"), + new CultureInfo("af-ZA") + } + }; + app.UseRequestLocalization(options); + app.Run(context => + { + var requestCultureFeature = context.Features.Get(); + var requestCulture = requestCultureFeature.RequestCulture; + Assert.Equal("fr-FR", requestCulture.Culture.Name); + return Task.FromResult(0); + }); + })) + { + var client = server.CreateClient(); + client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-MA,en-US"); + var count = client.DefaultRequestHeaders.AcceptLanguage.Count; + var response = await client.GetAsync(string.Empty); + } + } } } \ No newline at end of file