Skip to content

Commit efcbb2a

Browse files
hishamcokirthik
authored andcommitted
Add 'Microsoft.AspNet.Localization' Unit Tests
1 parent 3d2c013 commit efcbb2a

7 files changed

+420
-1
lines changed

Localization.sln

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 14
4-
VisualStudioVersion = 14.0.22823.1
4+
VisualStudioVersion = 14.0.23107.0
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FB313677-BAB3-4E49-8CDB-4FA4A9564767}"
77
EndProject
@@ -28,6 +28,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{B723DB83-A
2828
EndProject
2929
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Framework.Localization.Tests", "test\Microsoft.Framework.Localization.Tests\Microsoft.Framework.Localization.Tests.xproj", "{287AD58D-DF34-4F16-8616-FD78FA1CADF9}"
3030
EndProject
31+
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.AspNet.Localization.Tests", "test\Microsoft.AspNet.Localization.Tests\Microsoft.AspNet.Localization.Tests.xproj", "{19A2A931-5C60-47A0-816A-0DC9C4CE5736}"
32+
EndProject
3133
Global
3234
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3335
Debug|Any CPU = Debug|Any CPU
@@ -62,6 +64,10 @@ Global
6264
{287AD58D-DF34-4F16-8616-FD78FA1CADF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
6365
{287AD58D-DF34-4F16-8616-FD78FA1CADF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
6466
{287AD58D-DF34-4F16-8616-FD78FA1CADF9}.Release|Any CPU.Build.0 = Release|Any CPU
67+
{19A2A931-5C60-47A0-816A-0DC9C4CE5736}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
68+
{19A2A931-5C60-47A0-816A-0DC9C4CE5736}.Debug|Any CPU.Build.0 = Debug|Any CPU
69+
{19A2A931-5C60-47A0-816A-0DC9C4CE5736}.Release|Any CPU.ActiveCfg = Release|Any CPU
70+
{19A2A931-5C60-47A0-816A-0DC9C4CE5736}.Release|Any CPU.Build.0 = Release|Any CPU
6571
EndGlobalSection
6672
GlobalSection(SolutionProperties) = preSolution
6773
HideSolutionNode = FALSE
@@ -74,5 +80,6 @@ Global
7480
{BD22AE1C-6631-4DA6-874D-0DC0F803CEAB} = {FB313677-BAB3-4E49-8CDB-4FA4A9564767}
7581
{F3988D3A-A4C8-4FD7-BAFE-13E0D0A1659A} = {FB313677-BAB3-4E49-8CDB-4FA4A9564767}
7682
{287AD58D-DF34-4F16-8616-FD78FA1CADF9} = {B723DB83-A670-4BCB-95FB-195361331AD2}
83+
{19A2A931-5C60-47A0-816A-0DC9C4CE5736} = {B723DB83-A670-4BCB-95FB-195361331AD2}
7784
EndGlobalSection
7885
EndGlobal
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System.Collections.Generic;
5+
using System.Globalization;
6+
using System.Threading.Tasks;
7+
using Microsoft.AspNet.Builder;
8+
using Microsoft.AspNet.Http.Features;
9+
using Microsoft.AspNet.Localization;
10+
using Microsoft.AspNet.TestHost;
11+
using Microsoft.Framework.DependencyInjection;
12+
using Xunit;
13+
14+
namespace Microsoft.Framework.Localization.Tests
15+
{
16+
public class AccessLanguageHeaderRequestCultureProviderTest
17+
{
18+
[Fact]
19+
public async void GetFallbackLanguage()
20+
{
21+
using (var server = TestServer.Create(app =>
22+
{
23+
var options = new RequestLocalizationOptions
24+
{
25+
SupportedCultures = new List<CultureInfo>
26+
{
27+
new CultureInfo("ar-SA"),
28+
new CultureInfo("en-US")
29+
}
30+
};
31+
app.UseRequestLocalization(options);
32+
app.Run(context =>
33+
{
34+
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
35+
var requestCulture = requestCultureFeature.RequestCulture;
36+
Assert.Equal("ar-SA", requestCulture.Culture.Name);
37+
return Task.FromResult(0);
38+
});
39+
}))
40+
{
41+
var client = server.CreateClient();
42+
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("jp,ar-SA,en-US");
43+
var count = client.DefaultRequestHeaders.AcceptLanguage.Count;
44+
var response = await client.GetAsync(string.Empty);
45+
}
46+
}
47+
}
48+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System.Globalization;
5+
using System.Threading.Tasks;
6+
using Microsoft.AspNet.Builder;
7+
using Microsoft.AspNet.Http.Features;
8+
using Microsoft.AspNet.Localization;
9+
using Microsoft.AspNet.TestHost;
10+
using Microsoft.Framework.DependencyInjection;
11+
using Microsoft.Net.Http.Headers;
12+
using Xunit;
13+
14+
namespace Microsoft.Framework.Localization.Tests
15+
{
16+
public class CookieRequestCultureProviderTest
17+
{
18+
[Fact]
19+
public async void GetCultureInfoFromPersistentCookie()
20+
{
21+
using (var server = TestServer.Create(app =>
22+
{
23+
var options = new RequestLocalizationOptions();
24+
var provider = new CookieRequestCultureProvider();
25+
provider.CookieName = "Preferences";
26+
options.RequestCultureProviders.Insert(0, provider);
27+
app.UseRequestLocalization(options);
28+
app.Run(context =>
29+
{
30+
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
31+
var requestCulture = requestCultureFeature.RequestCulture;
32+
Assert.Equal("ar-SA", requestCulture.Culture.Name);
33+
return Task.FromResult(0);
34+
});
35+
}))
36+
{
37+
var client = server.CreateClient();
38+
var culture = new CultureInfo("ar-SA");
39+
var requestCulture = new RequestCulture(culture);
40+
var value = CookieRequestCultureProvider.MakeCookieValue(requestCulture);
41+
client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue("Preferences", value).ToString());
42+
var response = await client.GetAsync(string.Empty);
43+
Assert.Equal("c=ar-SA|uic=ar-SA",value);
44+
}
45+
}
46+
47+
[Fact]
48+
public async void GetDefaultCultureInfoIfCultureKeysAreMissingOrInvalid()
49+
{
50+
using (var server = TestServer.Create(app =>
51+
{
52+
var options = new RequestLocalizationOptions();
53+
var provider = new CookieRequestCultureProvider();
54+
provider.CookieName = "Preferences";
55+
options.RequestCultureProviders.Insert(0, provider);
56+
app.UseRequestLocalization(options);
57+
app.Run(context =>
58+
{
59+
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
60+
var requestCulture = requestCultureFeature.RequestCulture;
61+
Assert.Equal(options.DefaultRequestCulture.Culture.Name, requestCulture.Culture.Name);
62+
return Task.FromResult(0);
63+
});
64+
}))
65+
{
66+
var client = server.CreateClient();
67+
client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue("Preferences", "uic=ar-SA").ToString());
68+
var response = await client.GetAsync(string.Empty);
69+
}
70+
}
71+
72+
[Fact]
73+
public async void GetDefaultCultureInfoIfCookieDoesNotExist()
74+
{
75+
using (var server = TestServer.Create(app =>
76+
{
77+
var options = new RequestLocalizationOptions();
78+
var provider = new CookieRequestCultureProvider();
79+
provider.CookieName = "Preferences";
80+
options.RequestCultureProviders.Insert(0, provider);
81+
app.UseRequestLocalization(options);
82+
app.Run(context =>
83+
{
84+
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
85+
var requestCulture = requestCultureFeature.RequestCulture;
86+
Assert.Equal(options.DefaultRequestCulture.Culture.Name, requestCulture.Culture.Name);
87+
return Task.FromResult(0);
88+
});
89+
}))
90+
{
91+
var client = server.CreateClient();
92+
var response = await client.GetAsync(string.Empty);
93+
}
94+
}
95+
}
96+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Globalization;
6+
using System.Threading.Tasks;
7+
using Microsoft.AspNet.Builder;
8+
using Microsoft.AspNet.Http;
9+
using Microsoft.AspNet.Http.Features;
10+
using Microsoft.AspNet.Localization;
11+
using Microsoft.AspNet.TestHost;
12+
using Microsoft.Framework.DependencyInjection;
13+
using Microsoft.Framework.Globalization;
14+
using Xunit;
15+
16+
namespace Microsoft.Framework.Localization.Tests
17+
{
18+
public class CustomRequestCultureProviderTest
19+
{
20+
[Fact]
21+
public async void CustomRequestCultureProviderThatGetsCultureInfoFromUrl()
22+
{
23+
using (var server = TestServer.Create(app =>
24+
{
25+
var options = new RequestLocalizationOptions();
26+
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
27+
{
28+
var culture = GetCultureInfoFromUrl(context);
29+
var requestCulture = new RequestCulture(culture);
30+
return Task.FromResult(requestCulture);
31+
}));
32+
app.UseRequestLocalization(options);
33+
app.Run(context =>
34+
{
35+
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
36+
var requestCulture = requestCultureFeature.RequestCulture;
37+
Assert.Equal("ar", requestCulture.Culture.Name);
38+
return Task.FromResult(0);
39+
});
40+
}))
41+
{
42+
var client = server.CreateClient();
43+
var response = await client.GetAsync("/ar/page");
44+
}
45+
}
46+
47+
private CultureInfo GetCultureInfoFromUrl(HttpContext context)
48+
{
49+
var currentCulture = "en";
50+
var segments = context.Request.Path.Value.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
51+
if (segments.Length > 1 && segments[0].Length == 2)
52+
{
53+
if (CultureInfoCache.KnownCultureNames.Contains(segments[0]))
54+
currentCulture = segments[0];
55+
else
56+
throw new InvalidOperationException($"The '{segments[0]}' is invalid culture name.");
57+
}
58+
return CultureInfoCache.GetCultureInfo(currentCulture);
59+
}
60+
}
61+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
5+
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
6+
</PropertyGroup>
7+
8+
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
9+
<PropertyGroup Label="Globals">
10+
<ProjectGuid>19a2a931-5c60-47a0-816a-0dc9c4ce5736</ProjectGuid>
11+
<RootNamespace>Microsoft.AspNet.Localization.Tests</RootNamespace>
12+
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
13+
<OutputPath Condition="'$(OutputPath)'=='' ">..\..\artifacts\bin\$(MSBuildProjectName)\</OutputPath>
14+
</PropertyGroup>
15+
16+
<PropertyGroup>
17+
<SchemaVersion>2.0</SchemaVersion>
18+
</PropertyGroup>
19+
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
20+
</Project>

0 commit comments

Comments
 (0)