Skip to content

Commit 8e05074

Browse files
committed
Test failure: Changed VB script TestDisplayResultsWithCurrentUICulture1 to use three different cultures. Test shows unexpected results.
1 parent bba566c commit 8e05074

2 files changed

Lines changed: 44 additions & 20 deletions

File tree

src/Scripting/VisualBasicTest/CommandLineRunnerTests.vb

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -121,35 +121,48 @@ End Class", "1").EmitToArray())
121121

122122
<Fact()>
123123
<WorkItem(7133, "https://github.com/dotnet/roslyn/issues/7133")>
124+
<UseCulture("fr-FR")>
124125
Public Sub TestDisplayResultsWithCurrentUICulture1()
125-
' Save the current thread culture as it is changed in the test.
126-
' If the culture is not restored after the test all following tests
127-
' would run in the en-GB culture.
128-
Dim currentCulture = CultureInfo.DefaultThreadCurrentCulture
129-
Dim currentUICulture = CultureInfo.DefaultThreadCurrentUICulture
130-
Try
131-
Dim runner = CreateRunner(args:={}, input:="Imports System.Globalization
132-
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(""en-GB"")
126+
Dim logoAndHelpPrompt = String.Format(VBScriptingResources.LogoLine1, s_compilerVersion) + vbNewLine + VBScriptingResources.LogoLine2 + "
127+
128+
" + ScriptingResources.HelpPrompt
129+
' The runner starts with DefaultThreadCurrentUICulture set to fr-FR (via UseCulture attribute),
130+
' switches to en-US and after that to de-DE. A DateTime should be printed with the following formats:
131+
' fr-FR: #01/01/0001 00:00:00#
132+
' en-US: #1/1/0001 12:00:00 AM#
133+
' de-DE: #01.01.0001 00:00:00#
134+
Dim runner = CreateRunner(args:={}, input:="Imports System.Globalization
135+
Dim d = New System.DateTime()
136+
? d
137+
? System.Math.PI
138+
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(""en-US"")
139+
? d
133140
? System.Math.PI
134141
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(""de-DE"")
142+
? d
135143
? System.Math.PI")
136144

137-
runner.RunInteractive()
145+
runner.RunInteractive()
138146

139-
AssertEx.AssertEqualToleratingWhitespaceDifferences(
140-
s_logoAndHelpPrompt + "
147+
AssertEx.AssertEqualToleratingWhitespaceDifferences(
148+
logoAndHelpPrompt + "
141149
> Imports System.Globalization
142-
> System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(""en-GB"")
150+
> Dim d = New System.DateTime()
151+
> ? d
152+
#01/01/0001 00:00:00#
153+
> ? System.Math.PI
154+
3,1415926535897931
155+
> System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(""en-US"")
156+
> ? d
157+
#1/1/0001 12:00:00 AM#
143158
> ? System.Math.PI
144159
3.1415926535897931
145160
> System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(""de-DE"")
161+
> ? d
162+
#01.01.0001 00:00:00#
146163
> ? System.Math.PI
147164
3,1415926535897931
148165
>", runner.Console.Out.ToString())
149-
Finally
150-
CultureInfo.DefaultThreadCurrentCulture = currentCulture
151-
CultureInfo.DefaultThreadCurrentUICulture = currentUICulture
152-
End Try
153166
End Sub
154167

155168
<Fact()>

src/Test/Utilities/Portable/Assert/UseCultureAttribute.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@ public class UseCultureAttribute : BeforeAfterTestAttribute
2424
{
2525
private readonly Lazy<CultureInfo> _culture;
2626
private readonly Lazy<CultureInfo> _uiCulture;
27+
private readonly Lazy<CultureInfo> _defaultThreadCulture;
28+
private readonly Lazy<CultureInfo> _defaultThreadUICulture;
2729
private CultureInfo _originalCulture;
2830
private CultureInfo _originalUICulture;
31+
private CultureInfo _originalDefaultThreadCulture;
32+
private CultureInfo _originalDefaultThreadUICulture;
2933

3034
/// <summary>
3135
/// Replaces the culture and UI culture of the current thread with
@@ -51,6 +55,8 @@ public UseCultureAttribute(string culture)
5155
/// <param name="uiCulture">The name of the UI culture.</param>
5256
public UseCultureAttribute(string culture, string uiCulture)
5357
{
58+
_defaultThreadCulture = new Lazy<CultureInfo>(() => CultureInfo.DefaultThreadCurrentCulture);
59+
_defaultThreadUICulture = new Lazy<CultureInfo>(() => CultureInfo.DefaultThreadCurrentUICulture);
5460
#if NET46 || NET461
5561
_culture = new Lazy<CultureInfo>(() => new CultureInfo(culture, useUserOverride: false));
5662
_uiCulture = new Lazy<CultureInfo>(() => new CultureInfo(uiCulture, useUserOverride: false));
@@ -73,6 +79,9 @@ public UseCultureAttribute(string culture, string uiCulture)
7379
/// </summary>
7480
public CultureInfo UICulture => _uiCulture.Value;
7581

82+
public CultureInfo DefaultThreadCulture => _defaultThreadCulture.Value;
83+
public CultureInfo DefaultThreadUICulture => _defaultThreadUICulture.Value;
84+
7685
/// <summary>
7786
/// Stores the current <see cref="CultureInfo.CurrentCulture" /> and <see cref="CultureInfo.CurrentUICulture" />
7887
/// and replaces them with the new cultures defined in the constructor.
@@ -82,6 +91,10 @@ public override void Before(MethodInfo methodUnderTest)
8291
{
8392
_originalCulture = CultureInfo.CurrentCulture;
8493
_originalUICulture = CultureInfo.CurrentUICulture;
94+
_originalDefaultThreadCulture = CultureInfo.DefaultThreadCurrentCulture;
95+
_originalDefaultThreadUICulture = CultureInfo.DefaultThreadCurrentUICulture;
96+
CultureInfo.DefaultThreadCurrentCulture = Culture;
97+
CultureInfo.DefaultThreadCurrentUICulture = Culture;
8598

8699
#if NET46 || NET461 || NETCOREAPP2_0
87100
CultureInfo.CurrentCulture = Culture;
@@ -91,8 +104,6 @@ public override void Before(MethodInfo methodUnderTest)
91104
CultureInfo.CurrentCulture.ClearCachedData();
92105
CultureInfo.CurrentUICulture.ClearCachedData();
93106
#endif
94-
#else
95-
throw new NotSupportedException("Cannot set the current culture on this framework target.");
96107
#endif
97108
}
98109

@@ -103,6 +114,8 @@ public override void Before(MethodInfo methodUnderTest)
103114
/// <param name="methodUnderTest">The method under test</param>
104115
public override void After(MethodInfo methodUnderTest)
105116
{
117+
CultureInfo.DefaultThreadCurrentCulture = _originalDefaultThreadCulture;
118+
CultureInfo.DefaultThreadCurrentUICulture = _originalDefaultThreadUICulture;
106119
#if NET46 || NET461 || NETCOREAPP2_0
107120
CultureInfo.CurrentCulture = _originalCulture;
108121
CultureInfo.CurrentUICulture = _originalUICulture;
@@ -111,8 +124,6 @@ public override void After(MethodInfo methodUnderTest)
111124
CultureInfo.CurrentCulture.ClearCachedData();
112125
CultureInfo.CurrentUICulture.ClearCachedData();
113126
#endif
114-
#else
115-
throw new NotSupportedException("Cannot set the current culture on this framework target.");
116127
#endif
117128
}
118129
}

0 commit comments

Comments
 (0)