Skip to content

Commit a88cbfc

Browse files
authored
Merge pull request #340 from aspnet/pakrym/Merge-testing
Move Testing code
2 parents 8c2059c + 43a6d7b commit a88cbfc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+2540
-1
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ project.lock.json
2020
*.docstates
2121
_ReSharper.*
2222
*.exe
23+
*net45.csproj
24+
*net451.csproj
25+
*k10.csproj
2326
*.psess
2427
*.vsp
2528
*.pidb
@@ -33,5 +36,6 @@ _ReSharper.*
3336
node_modules/
3437
**/[Cc]ompiler/[Rr]esources/**/*.js
3538
.vscode/
39+
.testPublish/
3640
global.json
3741
BenchmarkDotNet.Artifacts/

Common.sln

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Object
5858
EndProject
5959
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Primitives.Performance", "benchmarks\Microsoft.Extensions.Primitives.Performance\Microsoft.Extensions.Primitives.Performance.csproj", "{E180A42D-2CB3-4810-8605-1AC30250EFED}"
6060
EndProject
61+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Testing", "src\Microsoft.AspNetCore.Testing\Microsoft.AspNetCore.Testing.csproj", "{FBFB870A-39D1-4DA3-B002-C21E5EA247D9}"
62+
EndProject
63+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.Tests", "test\Sample.Tests\Sample.Tests.csproj", "{225CFC67-B1CB-46E6-A4EE-E42B532F4986}"
64+
EndProject
6165
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzer.Testing", "src\Microsoft.AspNetCore.Analyzer.Testing\Microsoft.AspNetCore.Analyzer.Testing.csproj", "{50EC2676-229C-4305-AEA8-EE14AD3C3CFC}"
6266
EndProject
67+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Testing.Tests", "test\Microsoft.AspNetCore.Testing.Tests\Microsoft.AspNetCore.Testing.Tests.csproj", "{B439E0C8-F892-4AC5-BBF7-63BCDAACA7A9}"
68+
EndProject
6369
Global
6470
GlobalSection(SolutionConfigurationPlatforms) = preSolution
6571
Debug|Any CPU = Debug|Any CPU
@@ -102,10 +108,22 @@ Global
102108
{E180A42D-2CB3-4810-8605-1AC30250EFED}.Debug|Any CPU.Build.0 = Debug|Any CPU
103109
{E180A42D-2CB3-4810-8605-1AC30250EFED}.Release|Any CPU.ActiveCfg = Release|Any CPU
104110
{E180A42D-2CB3-4810-8605-1AC30250EFED}.Release|Any CPU.Build.0 = Release|Any CPU
111+
{FBFB870A-39D1-4DA3-B002-C21E5EA247D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
112+
{FBFB870A-39D1-4DA3-B002-C21E5EA247D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
113+
{FBFB870A-39D1-4DA3-B002-C21E5EA247D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
114+
{FBFB870A-39D1-4DA3-B002-C21E5EA247D9}.Release|Any CPU.Build.0 = Release|Any CPU
115+
{225CFC67-B1CB-46E6-A4EE-E42B532F4986}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
116+
{225CFC67-B1CB-46E6-A4EE-E42B532F4986}.Debug|Any CPU.Build.0 = Debug|Any CPU
117+
{225CFC67-B1CB-46E6-A4EE-E42B532F4986}.Release|Any CPU.ActiveCfg = Release|Any CPU
118+
{225CFC67-B1CB-46E6-A4EE-E42B532F4986}.Release|Any CPU.Build.0 = Release|Any CPU
105119
{50EC2676-229C-4305-AEA8-EE14AD3C3CFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
106120
{50EC2676-229C-4305-AEA8-EE14AD3C3CFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
107121
{50EC2676-229C-4305-AEA8-EE14AD3C3CFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
108122
{50EC2676-229C-4305-AEA8-EE14AD3C3CFC}.Release|Any CPU.Build.0 = Release|Any CPU
123+
{B439E0C8-F892-4AC5-BBF7-63BCDAACA7A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
124+
{B439E0C8-F892-4AC5-BBF7-63BCDAACA7A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
125+
{B439E0C8-F892-4AC5-BBF7-63BCDAACA7A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
126+
{B439E0C8-F892-4AC5-BBF7-63BCDAACA7A9}.Release|Any CPU.Build.0 = Release|Any CPU
109127
EndGlobalSection
110128
GlobalSection(SolutionProperties) = preSolution
111129
HideSolutionNode = FALSE
@@ -120,7 +138,10 @@ Global
120138
{E1586801-D345-43C7-BC4B-9D4A83101B6C} = {8668B1D5-9C54-49CA-8446-18040B4C7D15}
121139
{7486AB7B-C22F-4CA0-91EA-D31D9443DBFB} = {A9A93AF9-2113-4321-AD20-51F60FF8B2BD}
122140
{E180A42D-2CB3-4810-8605-1AC30250EFED} = {A9A93AF9-2113-4321-AD20-51F60FF8B2BD}
141+
{FBFB870A-39D1-4DA3-B002-C21E5EA247D9} = {FEAA3936-5906-4383-B750-F07FE1B156C5}
142+
{225CFC67-B1CB-46E6-A4EE-E42B532F4986} = {6878D8F1-6DCE-4677-AA1A-4D14BA6D2D60}
123143
{50EC2676-229C-4305-AEA8-EE14AD3C3CFC} = {FEAA3936-5906-4383-B750-F07FE1B156C5}
144+
{B439E0C8-F892-4AC5-BBF7-63BCDAACA7A9} = {6878D8F1-6DCE-4677-AA1A-4D14BA6D2D60}
124145
EndGlobalSection
125146
GlobalSection(ExtensibilityGlobals) = postSolution
126147
SolutionGuid = {371030CF-B541-4BA9-9F54-3C7563415CF1}

build/dependencies.props

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
<MicrosoftNETCoreApp21PackageVersion>2.2.0-preview1-26424-04</MicrosoftNETCoreApp21PackageVersion>
1313
<MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
1414
<MoqPackageVersion>4.7.49</MoqPackageVersion>
15-
<NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
15+
<NETStandardLibrary20PackageVersion>2.0.1</NETStandardLibrary20PackageVersion>
1616
<NewtonsoftJsonPackageVersion>11.0.2</NewtonsoftJsonPackageVersion>
1717
<SystemIOPipelinesPackageVersion>4.5.0-preview3-26423-04</SystemIOPipelinesPackageVersion>
18+
<SystemNetHttpPackageVersion>4.3.2</SystemNetHttpPackageVersion>
1819
<SystemMemoryPackageVersion>4.5.0-preview3-26423-04</SystemMemoryPackageVersion>
1920
<SystemReflectionMetadataPackageVersion>1.6.0-preview3-26423-04</SystemReflectionMetadataPackageVersion>
2021
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.5.0-preview3-26423-04</SystemRuntimeCompilerServicesUnsafePackageVersion>
22+
<SystemRuntimeInteropServicesRuntimeInformationPackageVersion>4.3.0</SystemRuntimeInteropServicesRuntimeInformationPackageVersion>
2123
<SystemSecurityCryptographyCngPackageVersion>4.5.0-preview3-26423-04</SystemSecurityCryptographyCngPackageVersion>
24+
<SystemValueTuplePackageVersion>4.5.0-preview3-26413-02</SystemValueTuplePackageVersion>
2225
<SystemThreadingTasksExtensionsPackageVersion>4.5.0-preview3-26423-04</SystemThreadingTasksExtensionsPackageVersion>
2326
<XunitAnalyzersPackageVersion>0.8.0</XunitAnalyzersPackageVersion>
2427
<XunitAssertPackageVersion>2.3.1</XunitAssertPackageVersion>
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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;
7+
using Xunit;
8+
9+
namespace Microsoft.AspNetCore.Testing
10+
{
11+
public class CultureReplacer : IDisposable
12+
{
13+
private const string _defaultCultureName = "en-GB";
14+
private const string _defaultUICultureName = "en-US";
15+
private static readonly CultureInfo _defaultCulture = new CultureInfo(_defaultCultureName);
16+
private readonly CultureInfo _originalCulture;
17+
private readonly CultureInfo _originalUICulture;
18+
private readonly long _threadId;
19+
20+
// Culture => Formatting of dates/times/money/etc, defaults to en-GB because en-US is the same as InvariantCulture
21+
// We want to be able to find issues where the InvariantCulture is used, but a specific culture should be.
22+
//
23+
// UICulture => Language
24+
public CultureReplacer(string culture = _defaultCultureName, string uiCulture = _defaultUICultureName)
25+
: this(new CultureInfo(culture), new CultureInfo(uiCulture))
26+
{
27+
}
28+
29+
public CultureReplacer(CultureInfo culture, CultureInfo uiCulture)
30+
{
31+
_originalCulture = CultureInfo.CurrentCulture;
32+
_originalUICulture = CultureInfo.CurrentUICulture;
33+
_threadId = Thread.CurrentThread.ManagedThreadId;
34+
CultureInfo.CurrentCulture = culture;
35+
CultureInfo.CurrentUICulture = uiCulture;
36+
}
37+
38+
/// <summary>
39+
/// The name of the culture that is used as the default value for CultureInfo.DefaultThreadCurrentCulture when CultureReplacer is used.
40+
/// </summary>
41+
public static string DefaultCultureName
42+
{
43+
get { return _defaultCultureName; }
44+
}
45+
46+
/// <summary>
47+
/// The name of the culture that is used as the default value for [Thread.CurrentThread(NET45)/CultureInfo(K10)].CurrentUICulture when CultureReplacer is used.
48+
/// </summary>
49+
public static string DefaultUICultureName
50+
{
51+
get { return _defaultUICultureName; }
52+
}
53+
54+
/// <summary>
55+
/// The culture that is used as the default value for [Thread.CurrentThread(NET45)/CultureInfo(K10)].CurrentCulture when CultureReplacer is used.
56+
/// </summary>
57+
public static CultureInfo DefaultCulture
58+
{
59+
get { return _defaultCulture; }
60+
}
61+
62+
public void Dispose()
63+
{
64+
Dispose(true);
65+
GC.SuppressFinalize(this);
66+
}
67+
68+
private void Dispose(bool disposing)
69+
{
70+
if (disposing)
71+
{
72+
Assert.True(Thread.CurrentThread.ManagedThreadId == _threadId,
73+
"The current thread is not the same as the thread invoking the constructor. This should never happen.");
74+
CultureInfo.CurrentCulture = _originalCulture;
75+
CultureInfo.CurrentUICulture = _originalUICulture;
76+
}
77+
}
78+
}
79+
}

0 commit comments

Comments
 (0)