LocalizationManagerTests.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. using System;
  2. using System.Linq;
  3. using System.Runtime.InteropServices;
  4. using System.Threading.Tasks;
  5. using Emby.Server.Implementations.Localization;
  6. using MediaBrowser.Controller.Configuration;
  7. using MediaBrowser.Model.Configuration;
  8. using Microsoft.Extensions.Logging.Abstractions;
  9. using Moq;
  10. using Xunit;
  11. namespace Jellyfin.Server.Implementations.Tests.Localization
  12. {
  13. public class LocalizationManagerTests
  14. {
  15. [Fact]
  16. public void GetCountries_All_Success()
  17. {
  18. var localizationManager = Setup(new ServerConfiguration
  19. {
  20. UICulture = "de-DE"
  21. });
  22. var countries = localizationManager.GetCountries().ToList();
  23. Assert.Equal(139, countries.Count);
  24. var germany = countries.FirstOrDefault(x => x.Name.Equals("DE", StringComparison.Ordinal));
  25. Assert.NotNull(germany);
  26. Assert.Equal("Germany", germany!.DisplayName);
  27. Assert.Equal("DEU", germany.ThreeLetterISORegionName);
  28. Assert.Equal("DE", germany.TwoLetterISORegionName);
  29. }
  30. [Fact]
  31. public async Task GetCultures_All_Success()
  32. {
  33. var localizationManager = Setup(new ServerConfiguration
  34. {
  35. UICulture = "de-DE"
  36. });
  37. await localizationManager.LoadAll();
  38. var cultures = localizationManager.GetCultures().ToList();
  39. Assert.Equal(191, cultures.Count);
  40. var germany = cultures.FirstOrDefault(x => x.TwoLetterISOLanguageName.Equals("de", StringComparison.Ordinal));
  41. Assert.NotNull(germany);
  42. Assert.Equal("ger", germany!.ThreeLetterISOLanguageName);
  43. Assert.Equal("German", germany.DisplayName);
  44. Assert.Equal("German", germany.Name);
  45. Assert.Contains("deu", germany.ThreeLetterISOLanguageNames);
  46. Assert.Contains("ger", germany.ThreeLetterISOLanguageNames);
  47. }
  48. [Theory]
  49. [InlineData("de")]
  50. [InlineData("ger")]
  51. [InlineData("german")]
  52. public async Task FindLanguageInfo_Valid_Success(string identifier)
  53. {
  54. var localizationManager = Setup(new ServerConfiguration
  55. {
  56. UICulture = "de-DE"
  57. });
  58. await localizationManager.LoadAll();
  59. var germany = localizationManager.FindLanguageInfo(identifier);
  60. Assert.NotNull(germany);
  61. Assert.Equal("ger", germany!.ThreeLetterISOLanguageName);
  62. Assert.Equal("German", germany.DisplayName);
  63. Assert.Equal("German", germany.Name);
  64. Assert.Contains("deu", germany.ThreeLetterISOLanguageNames);
  65. Assert.Contains("ger", germany.ThreeLetterISOLanguageNames);
  66. }
  67. [Fact]
  68. public async Task GetParentalRatings_Default_Success()
  69. {
  70. var localizationManager = Setup(new ServerConfiguration
  71. {
  72. UICulture = "de-DE"
  73. });
  74. await localizationManager.LoadAll();
  75. var ratings = localizationManager.GetParentalRatings().ToList();
  76. Assert.Equal(54, ratings.Count);
  77. var tvma = ratings.FirstOrDefault(x => x.Name.Equals("TV-MA", StringComparison.Ordinal));
  78. Assert.NotNull(tvma);
  79. Assert.Equal(17, tvma!.Value);
  80. }
  81. [Fact]
  82. public async Task GetParentalRatings_ConfiguredCountryCode_Success()
  83. {
  84. var localizationManager = Setup(new ServerConfiguration()
  85. {
  86. MetadataCountryCode = "DE"
  87. });
  88. await localizationManager.LoadAll();
  89. var ratings = localizationManager.GetParentalRatings().ToList();
  90. Assert.Equal(24, ratings.Count);
  91. var fsk = ratings.FirstOrDefault(x => x.Name.Equals("FSK-12", StringComparison.Ordinal));
  92. Assert.NotNull(fsk);
  93. Assert.Equal(12, fsk!.Value);
  94. }
  95. [Theory]
  96. [InlineData("CA-R", "CA", 18)]
  97. [InlineData("FSK-16", "DE", 16)]
  98. [InlineData("FSK-18", "DE", 18)]
  99. [InlineData("FSK-18", "US", 18)]
  100. [InlineData("TV-MA", "US", 17)]
  101. [InlineData("XXX", "asdf", 1000)]
  102. [InlineData("Germany: FSK-18", "DE", 18)]
  103. public async Task GetRatingLevel_GivenValidString_Success(string value, string countryCode, int expectedLevel)
  104. {
  105. var localizationManager = Setup(new ServerConfiguration()
  106. {
  107. MetadataCountryCode = countryCode
  108. });
  109. await localizationManager.LoadAll();
  110. var level = localizationManager.GetRatingLevel(value);
  111. Assert.NotNull(level);
  112. Assert.Equal(expectedLevel, level!);
  113. }
  114. [Theory]
  115. [InlineData("0", 0)]
  116. [InlineData("1", 1)]
  117. [InlineData("6", 6)]
  118. [InlineData("12", 12)]
  119. [InlineData("42", 42)]
  120. [InlineData("9999", 9999)]
  121. public async Task GetRatingLevel_GivenValidAge_Success(string value, int expectedLevel)
  122. {
  123. var localizationManager = Setup(new ServerConfiguration { MetadataCountryCode = "nl" });
  124. await localizationManager.LoadAll();
  125. var level = localizationManager.GetRatingLevel(value);
  126. Assert.NotNull(level);
  127. Assert.Equal(expectedLevel, level);
  128. }
  129. [Fact]
  130. public async Task GetRatingLevel_GivenUnratedString_Success()
  131. {
  132. var localizationManager = Setup(new ServerConfiguration()
  133. {
  134. UICulture = "de-DE"
  135. });
  136. await localizationManager.LoadAll();
  137. Assert.Null(localizationManager.GetRatingLevel("NR"));
  138. Assert.Null(localizationManager.GetRatingLevel("unrated"));
  139. Assert.Null(localizationManager.GetRatingLevel("Not Rated"));
  140. Assert.Null(localizationManager.GetRatingLevel("n/a"));
  141. }
  142. [Theory]
  143. [InlineData("-NO RATING SHOWN-")]
  144. [InlineData(":NO RATING SHOWN:")]
  145. public async Task GetRatingLevel_Split_Success(string value)
  146. {
  147. var localizationManager = Setup(new ServerConfiguration()
  148. {
  149. UICulture = "en-US"
  150. });
  151. await localizationManager.LoadAll();
  152. Assert.Null(localizationManager.GetRatingLevel(value));
  153. }
  154. [Theory]
  155. [InlineData("Default", "Default")]
  156. [InlineData("HeaderLiveTV", "Live TV")]
  157. public void GetLocalizedString_Valid_Success(string key, string expected)
  158. {
  159. var localizationManager = Setup(new ServerConfiguration()
  160. {
  161. UICulture = "en-US"
  162. });
  163. var translated = localizationManager.GetLocalizedString(key);
  164. Assert.NotNull(translated);
  165. Assert.Equal(expected, translated);
  166. }
  167. [Fact]
  168. public void GetLocalizedString_Invalid_Success()
  169. {
  170. var localizationManager = Setup(new ServerConfiguration()
  171. {
  172. UICulture = "en-US"
  173. });
  174. var key = "SuperInvalidTranslationKeyThatWillNeverBeAdded";
  175. var translated = localizationManager.GetLocalizedString(key);
  176. Assert.NotNull(translated);
  177. Assert.Equal(key, translated);
  178. }
  179. private LocalizationManager Setup(ServerConfiguration config)
  180. {
  181. var mockConfiguration = new Mock<IServerConfigurationManager>();
  182. mockConfiguration.SetupGet(x => x.Configuration).Returns(config);
  183. return new LocalizationManager(mockConfiguration.Object, new NullLogger<LocalizationManager>());
  184. }
  185. }
  186. }