Reacting to new Hosting API

This commit is contained in:
John Luo 2015-12-17 20:38:55 -08:00
parent 017b9b8773
commit 5c98dd5d98
7 changed files with 395 additions and 327 deletions

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Localization; using Microsoft.AspNet.Localization;
@ -162,5 +163,15 @@ $@"<!doctype html>
await context.Response.WriteAsync($" <option value=\"en-NOTREAL\">English (Not a real locale)</option>"); await context.Response.WriteAsync($" <option value=\"en-NOTREAL\">English (Not a real locale)</option>");
await context.Response.WriteAsync($" <option value=\"pp-NOTREAL\">Made-up (Not a real anything)</option>"); await context.Response.WriteAsync($" <option value=\"pp-NOTREAL\">Made-up (Not a real anything)</option>");
} }
public static void Main(string[] args)
{
var application = new WebApplicationBuilder()
.UseConfiguration(WebApplicationConfiguration.GetDefault(args))
.UseStartup<Startup>()
.Build();
application.Run();
}
} }
} }

View File

@ -0,0 +1,3 @@
{
"server": "Microsoft.AspNet.Server.Kestrel"
}

View File

@ -1,5 +1,4 @@
{ {
"webroot": "wwwroot",
"version": "1.0.0-*", "version": "1.0.0-*",
"dependencies": { "dependencies": {
@ -8,8 +7,12 @@
"Microsoft.AspNet.Server.Kestrel": "1.0.0-*" "Microsoft.AspNet.Server.Kestrel": "1.0.0-*"
}, },
"compilationOptions": {
"emitEntryPoint": true
},
"commands": { "commands": {
"web": "Microsoft.AspNet.Server.Kestrel" "web": "LocalizationSample"
}, },
"frameworks": { "frameworks": {

View File

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Localization; using Microsoft.AspNet.Localization;
using Microsoft.AspNet.TestHost; using Microsoft.AspNet.TestHost;
@ -17,26 +18,29 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetFallbackLanguage_ReturnsFirstNonNullCultureFromSupportedCultureList() public async void GetFallbackLanguage_ReturnsFirstNonNullCultureFromSupportedCultureList()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), DefaultRequestCulture = new RequestCulture("en-US"),
new CultureInfo("en-US") SupportedCultures = new List<CultureInfo>
} {
}; new CultureInfo("ar-SA"),
app.UseRequestLocalization(options); new CultureInfo("en-US")
app.Run(context => }
{ };
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); app.UseRequestLocalization(options);
var requestCulture = requestCultureFeature.RequestCulture; app.Run(context =>
Assert.Equal("ar-SA", requestCulture.Culture.Name); {
return Task.FromResult(0); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar-SA", requestCulture.Culture.Name);
return Task.FromResult(0);
});
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("jp,ar-SA,en-US"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("jp,ar-SA,en-US");
@ -49,26 +53,29 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetFallbackLanguage_ReturnsFromSupportedCulture_AcceptLanguageListContainsSupportedCultures() public async void GetFallbackLanguage_ReturnsFromSupportedCulture_AcceptLanguageListContainsSupportedCultures()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions
{ {
DefaultRequestCulture = new RequestCulture("fr-FR"), var options = new RequestLocalizationOptions
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), DefaultRequestCulture = new RequestCulture("fr-FR"),
new CultureInfo("en-US") SupportedCultures = new List<CultureInfo>
} {
}; new CultureInfo("ar-SA"),
app.UseRequestLocalization(options); new CultureInfo("en-US")
app.Run(context => }
{ };
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); app.UseRequestLocalization(options);
var requestCulture = requestCultureFeature.RequestCulture; app.Run(context =>
Assert.Equal("ar-SA", requestCulture.Culture.Name); {
return Task.FromResult(0); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar-SA", requestCulture.Culture.Name);
return Task.FromResult(0);
});
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-SA,en-US"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-SA,en-US");
@ -80,26 +87,29 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetFallbackLanguage_ReturnsDefault_AcceptLanguageListDoesnotContainSupportedCultures() public async void GetFallbackLanguage_ReturnsDefault_AcceptLanguageListDoesnotContainSupportedCultures()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions
{ {
DefaultRequestCulture = new RequestCulture("fr-FR"), var options = new RequestLocalizationOptions
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), DefaultRequestCulture = new RequestCulture("fr-FR"),
new CultureInfo("af-ZA") SupportedCultures = new List<CultureInfo>
} {
}; new CultureInfo("ar-SA"),
app.UseRequestLocalization(options); new CultureInfo("af-ZA")
app.Run(context => }
{ };
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); app.UseRequestLocalization(options);
var requestCulture = requestCultureFeature.RequestCulture; app.Run(context =>
Assert.Equal("fr-FR", requestCulture.Culture.Name); {
return Task.FromResult(0); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("fr-FR", requestCulture.Culture.Name);
return Task.FromResult(0);
});
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-MA,en-US"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-MA,en-US");
@ -112,30 +122,33 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void OmitDefaultRequestCultureShouldNotThrowNullReferenceException_And_ShouldGetTheRightCulture() public async void OmitDefaultRequestCultureShouldNotThrowNullReferenceException_And_ShouldGetTheRightCulture()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-YE")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-YE")
}
};
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-YE") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("ar-YE", requestCulture.Culture.Name);
app.UseRequestLocalization(options); Assert.Equal("ar-YE", requestCulture.UICulture.Name);
app.Run(context => return Task.FromResult(0);
{ });
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar-YE", requestCulture.Culture.Name);
Assert.Equal("ar-YE", requestCulture.UICulture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-YE,en-US"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-YE,en-US");

View File

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Localization; using Microsoft.AspNet.Localization;
using Microsoft.AspNet.TestHost; using Microsoft.AspNet.TestHost;
@ -18,32 +19,35 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetCultureInfoFromPersistentCookie() public async void GetCultureInfoFromPersistentCookie()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-SA")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
}
};
var provider = new CookieRequestCultureProvider();
provider.CookieName = "Preferences";
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-SA") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("ar-SA", requestCulture.Culture.Name);
var provider = new CookieRequestCultureProvider(); return Task.FromResult(0);
provider.CookieName = "Preferences"; });
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar-SA", requestCulture.Culture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var culture = new CultureInfo("ar-SA"); var culture = new CultureInfo("ar-SA");
@ -58,32 +62,35 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetDefaultCultureInfoIfCultureKeysAreMissingOrInvalid() public async void GetDefaultCultureInfoIfCultureKeysAreMissingOrInvalid()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-SA")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
}
};
var provider = new CookieRequestCultureProvider();
provider.CookieName = "Preferences";
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-SA") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("en-US", requestCulture.Culture.Name);
var provider = new CookieRequestCultureProvider(); return Task.FromResult(0);
provider.CookieName = "Preferences"; });
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("en-US", requestCulture.Culture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue("Preferences", "uic=ar-SA").ToString()); client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue("Preferences", "uic=ar-SA").ToString());
@ -94,32 +101,35 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetDefaultCultureInfoIfCookieDoesNotExist() public async void GetDefaultCultureInfoIfCookieDoesNotExist()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-SA")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
}
};
var provider = new CookieRequestCultureProvider();
provider.CookieName = "Preferences";
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-SA") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("en-US", requestCulture.Culture.Name);
var provider = new CookieRequestCultureProvider(); return Task.FromResult(0);
provider.CookieName = "Preferences"; });
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("en-US", requestCulture.Culture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync(string.Empty); var response = await client.GetAsync(string.Empty);

View File

@ -6,11 +6,11 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Localization; using Microsoft.AspNet.Localization;
using Microsoft.AspNet.TestHost; using Microsoft.AspNet.TestHost;
using Microsoft.Extensions.Globalization;
using Xunit; using Xunit;
namespace Microsoft.Extensions.Localization.Tests namespace Microsoft.Extensions.Localization.Tests
@ -20,35 +20,38 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void CustomRequestCultureProviderThatGetsCultureInfoFromUrl() public async void CustomRequestCultureProviderThatGetsCultureInfoFromUrl()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar")
}
};
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
{ {
new CultureInfo("ar") var culture = GetCultureInfoFromUrl(context, options.SupportedCultures);
} var requestCulture = new ProviderCultureResult(culture);
}; return Task.FromResult(requestCulture);
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context => }));
{ app.UseRequestLocalization(options);
var culture = GetCultureInfoFromUrl(context, options.SupportedCultures); app.Run(context =>
var requestCulture = new ProviderCultureResult(culture); {
return Task.FromResult(requestCulture); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
})); var requestCulture = requestCultureFeature.RequestCulture;
app.UseRequestLocalization(options); Assert.Equal("ar", requestCulture.Culture.Name);
app.Run(context => return Task.FromResult(0);
{ });
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar", requestCulture.Culture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/ar/page"); var response = await client.GetAsync("/ar/page");

View File

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Localization; using Microsoft.AspNet.Localization;
using Microsoft.AspNet.TestHost; using Microsoft.AspNet.TestHost;
@ -17,31 +18,34 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetCultureInfoFromQueryString() public async void GetCultureInfoFromQueryString()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
{ new CultureInfo("ar-SA")
new CultureInfo("ar-YE") },
} SupportedUICultures = new List<CultureInfo>
}; {
new CultureInfo("ar-YE")
}
};
app.UseRequestLocalization(options); app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture; var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar-SA", requestCulture.Culture.Name); Assert.Equal("ar-SA", requestCulture.Culture.Name);
Assert.Equal("ar-YE", requestCulture.UICulture.Name); Assert.Equal("ar-YE", requestCulture.UICulture.Name);
return Task.FromResult(0); return Task.FromResult(0);
});
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?culture=ar-SA&ui-culture=ar-YE"); var response = await client.GetAsync("/page?culture=ar-SA&ui-culture=ar-YE");
@ -51,22 +55,25 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetDefaultCultureInfoIfCultureKeysAreMissing() public async void GetDefaultCultureInfoIfCultureKeysAreMissing()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions
}; {
app.UseRequestLocalization(options); DefaultRequestCulture = new RequestCulture("en-US"),
app.Run(context => };
{ app.UseRequestLocalization(options);
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); app.Run(context =>
var requestCulture = requestCultureFeature.RequestCulture; {
Assert.Equal("en-US", requestCulture.Culture.Name); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
Assert.Equal("en-US", requestCulture.UICulture.Name); var requestCulture = requestCultureFeature.RequestCulture;
return Task.FromResult(0); Assert.Equal("en-US", requestCulture.Culture.Name);
Assert.Equal("en-US", requestCulture.UICulture.Name);
return Task.FromResult(0);
});
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page"); var response = await client.GetAsync("/page");
@ -76,29 +83,32 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetDefaultCultureInfoIfCultureIsInSupportedCultureList() public async void GetDefaultCultureInfoIfCultureIsInSupportedCultureList()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-SA")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
}
};
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-SA") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("en-US", requestCulture.Culture.Name);
app.UseRequestLocalization(options); return Task.FromResult(0);
app.Run(context => });
{
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("en-US", requestCulture.Culture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?culture=ar-XY&ui-culture=ar-SA"); var response = await client.GetAsync("/page?culture=ar-XY&ui-culture=ar-SA");
@ -108,29 +118,32 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetDefaultCultureInfoIfUICultureIsNotInSupportedList() public async void GetDefaultCultureInfoIfUICultureIsNotInSupportedList()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-SA")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
}
};
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-SA") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("en-US", requestCulture.UICulture.Name);
app.UseRequestLocalization(options); return Task.FromResult(0);
app.Run(context => });
{
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("en-US", requestCulture.UICulture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?culture=ar-SA&ui-culture=ar-XY"); var response = await client.GetAsync("/page?culture=ar-SA&ui-culture=ar-XY");
@ -140,30 +153,33 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetSameCultureInfoIfCultureKeyIsMissing() public async void GetSameCultureInfoIfCultureKeyIsMissing()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-SA")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
}
};
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-SA") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("ar-SA", requestCulture.Culture.Name);
app.UseRequestLocalization(options); Assert.Equal("ar-SA", requestCulture.UICulture.Name);
app.Run(context => return Task.FromResult(0);
{ });
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar-SA", requestCulture.Culture.Name);
Assert.Equal("ar-SA", requestCulture.UICulture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?ui-culture=ar-SA"); var response = await client.GetAsync("/page?ui-culture=ar-SA");
@ -173,30 +189,33 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetSameCultureInfoIfUICultureKeyIsMissing() public async void GetSameCultureInfoIfUICultureKeyIsMissing()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-SA")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
}
};
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-SA") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("ar-SA", requestCulture.Culture.Name);
app.UseRequestLocalization(options); Assert.Equal("ar-SA", requestCulture.UICulture.Name);
app.Run(context => return Task.FromResult(0);
{ });
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar-SA", requestCulture.Culture.Name);
Assert.Equal("ar-SA", requestCulture.UICulture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?culture=ar-SA"); var response = await client.GetAsync("/page?culture=ar-SA");
@ -206,71 +225,77 @@ namespace Microsoft.Extensions.Localization.Tests
[Fact] [Fact]
public async void GetCultureInfoFromQueryStringWithCustomKeys() public async void GetCultureInfoFromQueryStringWithCustomKeys()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("ar-SA")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-YE")
}
};
var provider = new QueryStringRequestCultureProvider();
provider.QueryStringKey = "c";
provider.UIQueryStringKey = "uic";
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("ar-YE") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("ar-SA", requestCulture.Culture.Name);
var provider = new QueryStringRequestCultureProvider(); Assert.Equal("ar-YE", requestCulture.UICulture.Name);
provider.QueryStringKey = "c"; return Task.FromResult(0);
provider.UIQueryStringKey = "uic"; });
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("ar-SA", requestCulture.Culture.Name);
Assert.Equal("ar-YE", requestCulture.UICulture.Name);
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?c=ar-SA&uic=ar-YE"); var response = await client.GetAsync("/page?c=ar-SA&uic=ar-YE");
} }
} }
[Fact] [Fact]
public async void GetTheRightCultureInfoRegardlessOfCultureNameCasing() public async void GetTheRightCultureInfoRegardlessOfCultureNameCasing()
{ {
using (var server = TestServer.Create(app => var builder = new WebApplicationBuilder()
{ .Configure(app =>
var options = new RequestLocalizationOptions()
{ {
DefaultRequestCulture = new RequestCulture("en-US"), var options = new RequestLocalizationOptions()
SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("FR") DefaultRequestCulture = new RequestCulture("en-US"),
}, SupportedCultures = new List<CultureInfo>
SupportedUICultures = new List<CultureInfo> {
new CultureInfo("FR")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("FR")
}
};
var provider = new QueryStringRequestCultureProvider();
provider.QueryStringKey = "c";
provider.UIQueryStringKey = "uic";
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{ {
new CultureInfo("FR") var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
} var requestCulture = requestCultureFeature.RequestCulture;
}; Assert.Equal("fr", requestCulture.Culture.ToString());
var provider = new QueryStringRequestCultureProvider(); Assert.Equal("fr", requestCulture.UICulture.ToString());
provider.QueryStringKey = "c"; return Task.FromResult(0);
provider.UIQueryStringKey = "uic"; });
options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context =>
{
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
var requestCulture = requestCultureFeature.RequestCulture;
Assert.Equal("fr", requestCulture.Culture.ToString());
Assert.Equal("fr", requestCulture.UICulture.ToString());
return Task.FromResult(0);
}); });
}))
using (var server = new TestServer(builder))
{ {
var client = server.CreateClient(); var client = server.CreateClient();
var response = await client.GetAsync("/page?c=FR&uic=FR"); var response = await client.GetAsync("/page?c=FR&uic=FR");