From 2a81bfe48fc68cc038a8c29ffc8dc1dc9b96edf6 Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Tue, 3 May 2022 16:18:19 +0200 Subject: [PATCH 1/3] Add tests for name mangling for the cs-CZ culture --- .../Unit-Tests/CodeGenerationOptionsTests.cs | 15 ++++++++++++++- .../Unit-Tests/TypeNameUtilitiesTests.cs | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs b/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs index 3580a6774..5fd7f9a15 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 { SupportNullableReferenceTypes = true }; + + 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)); } } From a2e7350e54b259222de6d2f320c6e62bb65a355b Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Tue, 3 May 2022 16:19:41 +0200 Subject: [PATCH 2/3] Fix BinarySearch usages --- tools/generator/CodeGenerationOptions.cs | 2 +- tools/generator/Utilities/TypeNameUtilities.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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; From 0a669d25ebed83c2866e72070c614b3cb8c8d609 Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Tue, 3 May 2022 16:45:45 +0200 Subject: [PATCH 3/3] Remove unnecessary property initialization --- tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs b/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs index 5fd7f9a15..5ab2aceb4 100644 --- a/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs +++ b/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs @@ -85,7 +85,7 @@ public void GetTypeReferenceName_Nullable () [SetCulture ("cs-CZ")] public void GetSafeIdentifierCultureInvariant (string keyword) { - var opt = new CodeGenerationOptions { SupportNullableReferenceTypes = true }; + var opt = new CodeGenerationOptions (); Assert.AreEqual ($"{keyword}_", opt.GetSafeIdentifier (keyword)); }