Skip to content

Commit

Permalink
always use the 'en-US' culture for .ToUpper() when creating the new…
Browse files Browse the repository at this point in the history
… property name

includes tests with turkish, arabic, spanish, and greek identifiers
  • Loading branch information
brettfo committed Oct 29, 2015
1 parent 7c8c36a commit ead7af7
Show file tree
Hide file tree
Showing 3 changed files with 166 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1003,5 +1003,165 @@ enum E
[|x|] = 1;
}");
}

[WorkItem(5524, "https://github.com/dotnet/roslyn/issues/5524")]
[WpfFact, Trait(Traits.Feature, Traits.Features.EncapsulateField)]
public void AlwaysUseEnglishUSCultureWhenFixingVariableNames_TurkishDottedI()
{
using (new CultureContext("tr-TR"))
{
Test(@"
class C
{
int [|iyi|];
}
", @"
class C
{
int iyi;
public int Iyi
{
get
{
return iyi;
}
set
{
iyi = value;
}
}
}
");
}
}

[WorkItem(5524, "https://github.com/dotnet/roslyn/issues/5524")]
[WpfFact, Trait(Traits.Feature, Traits.Features.EncapsulateField)]
public void AlwaysUseEnglishUSCultureWhenFixingVariableNames_TurkishUndottedI()
{
using (new CultureContext("tr-TR"))
{
Test(@"
class C
{
int [|ırak|];
}
", @"
class C
{
int ırak;
public int Irak
{
get
{
return ırak;
}
set
{
ırak = value;
}
}
}
");
}
}

[WorkItem(5524, "https://github.com/dotnet/roslyn/issues/5524")]
[WpfFact, Trait(Traits.Feature, Traits.Features.EncapsulateField)]
public void AlwaysUseEnglishUSCultureWhenFixingVariableNames_Arabic()
{
using (new CultureContext("ar-EG"))
{
Test(@"
class C
{
int [|بيت|];
}
", @"
class C
{
int بيت;
public int بيت1
{
get
{
return بيت;
}
set
{
بيت = value;
}
}
}
");
}
}

[WorkItem(5524, "https://github.com/dotnet/roslyn/issues/5524")]
[WpfFact, Trait(Traits.Feature, Traits.Features.EncapsulateField)]
public void AlwaysUseEnglishUSCultureWhenFixingVariableNames_Spanish()
{
using (new CultureContext("es-ES"))
{
Test(@"
class C
{
int [|árbol|];
}
", @"
class C
{
int árbol;
public int Árbol
{
get
{
return árbol;
}
set
{
árbol = value;
}
}
}
");
}
}

[WorkItem(5524, "https://github.com/dotnet/roslyn/issues/5524")]
[WpfFact, Trait(Traits.Feature, Traits.Features.EncapsulateField)]
public void AlwaysUseEnglishUSCultureWhenFixingVariableNames_Greek()
{
using (new CultureContext("el-GR"))
{
Test(@"
class C
{
int [|σκύλος|];
}
", @"
class C
{
int σκύλος;
public int Σκύλος
{
get
{
return σκύλος;
}
set
{
σκύλος = value;
}
}
}
");
}
}
}
}
2 changes: 1 addition & 1 deletion src/Features/Core/Portable/Completion/CompletionRules.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ internal class CompletionRules
private readonly AbstractCompletionService _completionService;
private readonly Dictionary<string, PatternMatcher> _patternMatcherMap = new Dictionary<string, PatternMatcher>();
private readonly Dictionary<string, PatternMatcher> _fallbackPatternMatcherMap = new Dictionary<string, PatternMatcher>();
private static readonly CultureInfo EnUSCultureInfo = new CultureInfo("en-US");
internal static readonly CultureInfo EnUSCultureInfo = new CultureInfo("en-US");

public CompletionRules(AbstractCompletionService completionService)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeGeneration;
using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.Editing;
using Microsoft.CodeAnalysis.Formatting;
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.Rename;
using Microsoft.CodeAnalysis.Rename.ConflictEngine;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Simplification;
using Microsoft.CodeAnalysis.Text;
Expand Down Expand Up @@ -358,8 +358,10 @@ protected string GeneratePropertyName(string fieldName)
baseName = fieldName;
}

// Make uppercase the first letter
return char.ToUpper(baseName[0]).ToString() + baseName.Substring(1);
// Make the first character upper case using the "en-US" culture. See discussion at
// https://github.com/dotnet/roslyn/issues/5524.
var firstCharacter = CompletionRules.EnUSCultureInfo.TextInfo.ToUpper(baseName[0]);
return firstCharacter.ToString() + baseName.Substring(1);
}

protected abstract Task<SyntaxNode> RewriteFieldNameAndAccessibility(string originalFieldName, bool makePrivate, Document document, SyntaxAnnotation declarationAnnotation, CancellationToken cancellationToken);
Expand Down

0 comments on commit ead7af7

Please sign in to comment.