diff --git a/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs b/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs index 3580a6774..5ab2aceb4 100644 --- a/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs +++ b/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs @@ -1,4 +1,5 @@ -using System; +using System.Collections.Generic; +using System.Linq; using MonoDroid.Generation; using NUnit.Framework; @@ -79,5 +80,17 @@ public void GetTypeReferenceName_Nullable () Assert.AreEqual ("uint", opt.GetTypeReferenceName (primitive_uint)); } + + [Test, TestCaseSource (nameof (ReservedKeywords))] + [SetCulture ("cs-CZ")] + public void GetSafeIdentifierCultureInvariant (string keyword) + { + var opt = new CodeGenerationOptions (); + + Assert.AreEqual ($"{keyword}_", opt.GetSafeIdentifier (keyword)); + } + + private static IEnumerable ReservedKeywords + => TypeNameUtilities.reserved_keywords.Select (keyword => new TestCaseData (keyword)); } } diff --git a/tests/generator-Tests/Unit-Tests/TypeNameUtilitiesTests.cs b/tests/generator-Tests/Unit-Tests/TypeNameUtilitiesTests.cs index edc034bdc..2eaddf859 100644 --- a/tests/generator-Tests/Unit-Tests/TypeNameUtilitiesTests.cs +++ b/tests/generator-Tests/Unit-Tests/TypeNameUtilitiesTests.cs @@ -1,4 +1,5 @@ -using System; +using System.Collections.Generic; +using System.Linq; using MonoDroid.Generation; using NUnit.Framework; @@ -19,5 +20,17 @@ public void MangleName () Assert.AreEqual ("byte_var", TypeNameUtilities.MangleName ("byte_var")); Assert.AreEqual ("foo", TypeNameUtilities.MangleName ("foo")); } + + [Test, TestCaseSource (nameof (ReservedKeywords))] + [SetCulture ("cs-CZ")] + public void MangleNameCutlureInvariant (string keyword) + { + Assert.AreEqual ($"@{keyword}", TypeNameUtilities.MangleName (keyword)); + } + + private static IEnumerable ReservedKeywords + => TypeNameUtilities.reserved_keywords + .Where (keyword => keyword != "event") // "event" is a special case which is mapped to "e" instead of "@event" + .Select (keyword => new TestCaseData (keyword)); } } diff --git a/tools/generator/CodeGenerationOptions.cs b/tools/generator/CodeGenerationOptions.cs index 564941bb1..eb722f12d 100644 --- a/tools/generator/CodeGenerationOptions.cs +++ b/tools/generator/CodeGenerationOptions.cs @@ -267,7 +267,7 @@ public string GetSafeIdentifier (string name) // (ReturnValue.ToNative() takes an argument which could be either an expression or mere symbol.) if (name [name.Length-1] != ')' && !name.Contains ('.') && !name.StartsWith ("@", StringComparison.Ordinal)) { if (!IdentifierValidator.IsValidIdentifier (name) || - Array.BinarySearch (TypeNameUtilities.reserved_keywords, name) >= 0) { + Array.BinarySearch (TypeNameUtilities.reserved_keywords, name, StringComparer.Ordinal) >= 0) { name = name + "_"; } } diff --git a/tools/generator/Utilities/TypeNameUtilities.cs b/tools/generator/Utilities/TypeNameUtilities.cs index 4af711dc2..9e9656d2f 100644 --- a/tools/generator/Utilities/TypeNameUtilities.cs +++ b/tools/generator/Utilities/TypeNameUtilities.cs @@ -80,8 +80,8 @@ public static string MangleName (string name) { if (name == "event") return "e"; - - if (Array.BinarySearch (reserved_keywords, name) >= 0) + + if (Array.BinarySearch (reserved_keywords, name, StringComparer.Ordinal) >= 0) return "@" + name; return name;