ResourceManagerTests.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #nullable enable
  2. using System.Collections;
  3. using System.Globalization;
  4. using System.Resources;
  5. using System.Runtime.CompilerServices;
  6. namespace Terminal.Gui.ResourcesTests;
  7. public class ResourceManagerTests : UnitTests.Parallelizable.ParallelizableBase
  8. {
  9. private const string EXISTENT_CULTURE = "pt-PT";
  10. private const string NO_EXISTENT_CULTURE = "de-DE";
  11. private const string NO_EXISTENT_KEY = "blabla";
  12. private const string NO_TRANSLATED_KEY = "fdDeleteTitle";
  13. private const string NO_TRANSLATED_VALUE = "Delete {0}";
  14. private const string TRANSLATED_KEY = "ctxSelectAll";
  15. private const string TRANSLATED_VALUE = "_Selecionar Tudo";
  16. [ModuleInitializer]
  17. internal static void SaveOriginalCultureInfo ()
  18. {
  19. _savedCulture = CultureInfo.CurrentCulture;
  20. _savedUICulture = CultureInfo.CurrentUICulture;
  21. }
  22. private static CultureInfo? _savedCulture;
  23. private static CultureInfo? _savedUICulture;
  24. private static string? _stringsNoTranslatedKey;
  25. // ReSharper disable once NotAccessedField.Local
  26. private static string? _stringsTranslatedKey;
  27. [Fact]
  28. public void GetObject_Does_Not_Overflows_If_Key_Does_Not_Exist () { Assert.Null (GlobalResources.GetObject (NO_EXISTENT_KEY, CultureInfo.CurrentCulture)); }
  29. [Fact]
  30. public void GetObject_FallBack_To_Default_For_No_Existent_Culture_File ()
  31. {
  32. CultureInfo.CurrentCulture = new (NO_EXISTENT_CULTURE);
  33. CultureInfo.CurrentUICulture = new (NO_EXISTENT_CULTURE);
  34. Assert.Equal (NO_TRANSLATED_VALUE, GlobalResources.GetObject (NO_TRANSLATED_KEY, CultureInfo.CurrentCulture));
  35. ResetCultureInfo ();
  36. }
  37. [Fact]
  38. public void GetObject_FallBack_To_Default_For_Not_Translated_Existent_Culture_File ()
  39. {
  40. CultureInfo.CurrentCulture = new (NO_EXISTENT_CULTURE);
  41. CultureInfo.CurrentUICulture = new (NO_EXISTENT_CULTURE);
  42. Assert.Equal (NO_TRANSLATED_VALUE, GlobalResources.GetObject (NO_TRANSLATED_KEY, CultureInfo.CurrentCulture));
  43. ResetCultureInfo ();
  44. }
  45. [Fact]
  46. public void GetResourceSet_With_Filter_Does_Not_Overflows_If_Key_Does_Not_Exist ()
  47. {
  48. ResourceSet value = GlobalResources.GetResourceSet (CultureInfo.CurrentCulture, true, true, d => (string)d.Key == NO_EXISTENT_KEY)!;
  49. Assert.NotNull (value);
  50. Assert.Empty (value.Cast<DictionaryEntry> ());
  51. }
  52. [Fact]
  53. public void GetResourceSet_Without_Filter_Does_Not_Overflows_If_Key_Does_Not_Exist ()
  54. {
  55. ResourceSet value = GlobalResources.GetResourceSet (CultureInfo.CurrentCulture, true, true)!;
  56. Assert.NotNull (value);
  57. Assert.NotEmpty (value.Cast<DictionaryEntry> ());
  58. }
  59. [Fact]
  60. public void GetString_Does_Not_Overflows_If_Key_Does_Not_Exist ()
  61. {
  62. Assert.Null (GlobalResources.GetString (NO_EXISTENT_KEY, CultureInfo.CurrentCulture));
  63. }
  64. [Fact]
  65. public void GetString_FallBack_To_Default_For_No_Existent_Culture_File ()
  66. {
  67. CultureInfo.CurrentCulture = new (NO_EXISTENT_CULTURE);
  68. CultureInfo.CurrentUICulture = new (NO_EXISTENT_CULTURE);
  69. Assert.Equal (NO_TRANSLATED_VALUE, GlobalResources.GetString (NO_TRANSLATED_KEY, CultureInfo.CurrentCulture));
  70. ResetCultureInfo ();
  71. }
  72. [Fact]
  73. public void GetString_FallBack_To_Default_For_Not_Translated_Existent_Culture_File ()
  74. {
  75. CultureInfo.CurrentCulture = new (EXISTENT_CULTURE);
  76. CultureInfo.CurrentUICulture = new (EXISTENT_CULTURE);
  77. // This is really already translated
  78. Assert.Equal (TRANSLATED_VALUE, GlobalResources.GetString (TRANSLATED_KEY, CultureInfo.CurrentCulture));
  79. // These aren't already translated
  80. // Calling Strings.fdDeleteBody return always the invariant culture
  81. Assert.Equal (NO_TRANSLATED_VALUE, GlobalResources.GetString (NO_TRANSLATED_KEY, CultureInfo.CurrentCulture));
  82. ResetCultureInfo ();
  83. }
  84. [Fact]
  85. public void Strings_Always_FallBack_To_Default_For_No_Existent_Culture_File ()
  86. {
  87. CultureInfo.CurrentCulture = new (NO_EXISTENT_CULTURE);
  88. CultureInfo.CurrentUICulture = new (NO_EXISTENT_CULTURE);
  89. Assert.Equal (NO_TRANSLATED_VALUE, _stringsNoTranslatedKey);
  90. ResetCultureInfo ();
  91. }
  92. [Fact]
  93. public void Strings_Always_FallBack_To_Default_For_Not_Translated_Existent_Culture_File ()
  94. {
  95. ResetCultureInfo ();
  96. CultureInfo.CurrentCulture = new (EXISTENT_CULTURE);
  97. CultureInfo.CurrentUICulture = new (EXISTENT_CULTURE);
  98. // This is really already translated
  99. Assert.Equal (TRANSLATED_VALUE, Strings.ctxSelectAll);
  100. // This isn't already translated
  101. Assert.Equal (NO_TRANSLATED_VALUE, _stringsNoTranslatedKey);
  102. ResetCultureInfo ();
  103. }
  104. private void ResetCultureInfo ()
  105. {
  106. CultureInfo.CurrentCulture = _savedCulture!;
  107. CultureInfo.CurrentUICulture = _savedUICulture!;
  108. _stringsNoTranslatedKey = Strings.fdDeleteTitle;
  109. _stringsTranslatedKey = Strings.ctxSelectAll;
  110. }
  111. }