LocalizationManagerTests.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using BitFaster.Caching;
  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("deu", 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. [Fact]
  49. public async Task TryGetISO6392TFromB_Success()
  50. {
  51. var localizationManager = Setup(new ServerConfiguration
  52. {
  53. UICulture = "de-DE"
  54. });
  55. await localizationManager.LoadAll();
  56. string? isoT;
  57. // Translation ger -> deu
  58. Assert.True(localizationManager.TryGetISO6392TFromB("ger", out isoT));
  59. Assert.Equal("deu", isoT);
  60. // chi -> zho
  61. Assert.True(localizationManager.TryGetISO6392TFromB("chi", out isoT));
  62. Assert.Equal("zho", isoT);
  63. // eng is already ISO 639-2/T
  64. Assert.False(localizationManager.TryGetISO6392TFromB("eng", out isoT));
  65. Assert.Null(isoT);
  66. }
  67. [Theory]
  68. [InlineData("de")]
  69. [InlineData("deu")]
  70. [InlineData("ger")]
  71. [InlineData("german")]
  72. public async Task FindLanguageInfo_Valid_Success(string identifier)
  73. {
  74. var localizationManager = Setup(new ServerConfiguration
  75. {
  76. UICulture = "de-DE"
  77. });
  78. await localizationManager.LoadAll();
  79. var germany = localizationManager.FindLanguageInfo(identifier);
  80. Assert.NotNull(germany);
  81. Assert.Equal("deu", germany!.ThreeLetterISOLanguageName);
  82. Assert.Equal("German", germany.DisplayName);
  83. Assert.Equal("German", germany.Name);
  84. Assert.Contains("deu", germany.ThreeLetterISOLanguageNames);
  85. Assert.Contains("ger", germany.ThreeLetterISOLanguageNames);
  86. }
  87. [Fact]
  88. public async Task GetParentalRatings_Default_Success()
  89. {
  90. var localizationManager = Setup(new ServerConfiguration
  91. {
  92. UICulture = "de-DE"
  93. });
  94. await localizationManager.LoadAll();
  95. var ratings = localizationManager.GetParentalRatings().ToList();
  96. Assert.Equal(56, ratings.Count);
  97. var tvma = ratings.FirstOrDefault(x => x.Name.Equals("TV-MA", StringComparison.Ordinal));
  98. Assert.NotNull(tvma);
  99. Assert.Equal(17, tvma!.RatingScore!.Score);
  100. }
  101. [Fact]
  102. public async Task GetParentalRatings_ConfiguredCountryCode_Success()
  103. {
  104. var localizationManager = Setup(new ServerConfiguration()
  105. {
  106. MetadataCountryCode = "DE"
  107. });
  108. await localizationManager.LoadAll();
  109. var ratings = localizationManager.GetParentalRatings().ToList();
  110. Assert.Equal(24, ratings.Count);
  111. var fsk = ratings.FirstOrDefault(x => x.Name.Equals("FSK-12", StringComparison.Ordinal));
  112. Assert.NotNull(fsk);
  113. Assert.Equal(12, fsk!.RatingScore!.Score);
  114. }
  115. [Theory]
  116. [InlineData("CA-R", "CA", 18, 1)]
  117. [InlineData("FSK-16", "DE", 16, null)]
  118. [InlineData("FSK-18", "DE", 18, null)]
  119. [InlineData("FSK-18", "US", 18, null)]
  120. [InlineData("TV-MA", "US", 17, 1)]
  121. [InlineData("XXX", "asdf", 1000, null)]
  122. [InlineData("Germany: FSK-18", "DE", 18, null)]
  123. [InlineData("Rated : R", "US", 17, 0)]
  124. [InlineData("Rated: R", "US", 17, 0)]
  125. [InlineData("Rated R", "US", 17, 0)]
  126. [InlineData(" PG-13 ", "US", 13, 0)]
  127. public async Task GetRatingLevel_GivenValidString_Success(string value, string countryCode, int? expectedScore, int? expectedSubScore)
  128. {
  129. var localizationManager = Setup(new ServerConfiguration()
  130. {
  131. MetadataCountryCode = countryCode
  132. });
  133. await localizationManager.LoadAll();
  134. var score = localizationManager.GetRatingScore(value);
  135. Assert.NotNull(score);
  136. Assert.Equal(expectedScore, score.Score);
  137. Assert.Equal(expectedSubScore, score.SubScore);
  138. }
  139. [Theory]
  140. [InlineData("0", 0, null)]
  141. [InlineData("1", 1, null)]
  142. [InlineData("6", 6, null)]
  143. [InlineData("12", 12, null)]
  144. [InlineData("42", 42, null)]
  145. [InlineData("9999", 9999, null)]
  146. public async Task GetRatingLevel_GivenValidAge_Success(string value, int? expectedScore, int? expectedSubScore)
  147. {
  148. var localizationManager = Setup(new ServerConfiguration { MetadataCountryCode = "nl" });
  149. await localizationManager.LoadAll();
  150. var score = localizationManager.GetRatingScore(value);
  151. Assert.NotNull(score);
  152. Assert.Equal(expectedScore, score.Score);
  153. Assert.Equal(expectedSubScore, score.SubScore);
  154. }
  155. [Fact]
  156. public async Task GetRatingLevel_GivenUnratedString_Success()
  157. {
  158. var localizationManager = Setup(new ServerConfiguration()
  159. {
  160. UICulture = "de-DE"
  161. });
  162. await localizationManager.LoadAll();
  163. Assert.Null(localizationManager.GetRatingScore("NR"));
  164. Assert.Null(localizationManager.GetRatingScore("unrated"));
  165. Assert.Null(localizationManager.GetRatingScore("Not Rated"));
  166. Assert.Null(localizationManager.GetRatingScore("n/a"));
  167. }
  168. [Theory]
  169. [InlineData("-NO RATING SHOWN-")]
  170. [InlineData(":NO RATING SHOWN:")]
  171. public async Task GetRatingLevel_Split_Success(string value)
  172. {
  173. var localizationManager = Setup(new ServerConfiguration()
  174. {
  175. UICulture = "en-US"
  176. });
  177. await localizationManager.LoadAll();
  178. Assert.Null(localizationManager.GetRatingScore(value));
  179. }
  180. [Theory]
  181. [InlineData("Default", "Default")]
  182. [InlineData("HeaderLiveTV", "Live TV")]
  183. public void GetLocalizedString_Valid_Success(string key, string expected)
  184. {
  185. var localizationManager = Setup(new ServerConfiguration()
  186. {
  187. UICulture = "en-US"
  188. });
  189. var translated = localizationManager.GetLocalizedString(key);
  190. Assert.NotNull(translated);
  191. Assert.Equal(expected, translated);
  192. }
  193. [Fact]
  194. public void GetLocalizedString_Invalid_Success()
  195. {
  196. var localizationManager = Setup(new ServerConfiguration()
  197. {
  198. UICulture = "en-US"
  199. });
  200. var key = "SuperInvalidTranslationKeyThatWillNeverBeAdded";
  201. var translated = localizationManager.GetLocalizedString(key);
  202. Assert.NotNull(translated);
  203. Assert.Equal(key, translated);
  204. }
  205. private LocalizationManager Setup(ServerConfiguration config)
  206. {
  207. var mockConfiguration = new Mock<IServerConfigurationManager>();
  208. mockConfiguration.SetupGet(x => x.Configuration).Returns(config);
  209. return new LocalizationManager(mockConfiguration.Object, new NullLogger<LocalizationManager>());
  210. }
  211. }
  212. }