ExternalPathParserTests.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System.Text.RegularExpressions;
  2. using Emby.Naming.Common;
  3. using Emby.Naming.ExternalFiles;
  4. using MediaBrowser.Model.Dlna;
  5. using MediaBrowser.Model.Globalization;
  6. using Moq;
  7. using Xunit;
  8. namespace Jellyfin.Naming.Tests.ExternalFiles;
  9. public class ExternalPathParserTests
  10. {
  11. private readonly ExternalPathParser _audioPathParser;
  12. private readonly ExternalPathParser _subtitlePathParser;
  13. public ExternalPathParserTests()
  14. {
  15. var englishCultureDto = new CultureDto("English", "English", "en", new[] { "eng" });
  16. var frenchCultureDto = new CultureDto("French", "French", "fr", new[] { "fre", "fra" });
  17. var localizationManager = new Mock<ILocalizationManager>(MockBehavior.Loose);
  18. localizationManager.Setup(lm => lm.FindLanguageInfo(It.IsRegex(@"en.*", RegexOptions.IgnoreCase)))
  19. .Returns(englishCultureDto);
  20. localizationManager.Setup(lm => lm.FindLanguageInfo(It.IsRegex(@"fr.*", RegexOptions.IgnoreCase)))
  21. .Returns(frenchCultureDto);
  22. _audioPathParser = new ExternalPathParser(new NamingOptions(), localizationManager.Object, DlnaProfileType.Audio);
  23. _subtitlePathParser = new ExternalPathParser(new NamingOptions(), localizationManager.Object, DlnaProfileType.Subtitle);
  24. }
  25. [Theory]
  26. [InlineData("")]
  27. [InlineData("MyVideo.ass")]
  28. [InlineData("MyVideo.mks")]
  29. [InlineData("MyVideo.sami")]
  30. [InlineData("MyVideo.srt")]
  31. [InlineData("MyVideo.m4v")]
  32. public void ParseFile_AudioExtensionsNotMatched_ReturnsNull(string path)
  33. {
  34. Assert.Null(_audioPathParser.ParseFile(path, string.Empty));
  35. }
  36. [Theory]
  37. [InlineData("MyVideo.aa")]
  38. [InlineData("MyVideo.aac")]
  39. [InlineData("MyVideo.flac")]
  40. [InlineData("MyVideo.m4a")]
  41. [InlineData("MyVideo.mka")]
  42. [InlineData("MyVideo.mp3")]
  43. public void ParseFile_AudioExtensionsMatched_ReturnsPath(string path)
  44. {
  45. var actual = _audioPathParser.ParseFile(path, string.Empty);
  46. Assert.NotNull(actual);
  47. Assert.Equal(path, actual!.Path);
  48. }
  49. [Theory]
  50. [InlineData("")]
  51. [InlineData("MyVideo.aa")]
  52. [InlineData("MyVideo.aac")]
  53. [InlineData("MyVideo.flac")]
  54. [InlineData("MyVideo.mka")]
  55. [InlineData("MyVideo.m4v")]
  56. public void ParseFile_SubtitleExtensionsNotMatched_ReturnsNull(string path)
  57. {
  58. Assert.Null(_subtitlePathParser.ParseFile(path, string.Empty));
  59. }
  60. [Theory]
  61. [InlineData("MyVideo.ass")]
  62. [InlineData("MyVideo.mks")]
  63. [InlineData("MyVideo.sami")]
  64. [InlineData("MyVideo.srt")]
  65. [InlineData("MyVideo.vtt")]
  66. public void ParseFile_SubtitleExtensionsMatched_ReturnsPath(string path)
  67. {
  68. var actual = _subtitlePathParser.ParseFile(path, string.Empty);
  69. Assert.NotNull(actual);
  70. Assert.Equal(path, actual!.Path);
  71. }
  72. [Theory]
  73. [InlineData("", null, null)]
  74. [InlineData(".default", null, null, true, false)]
  75. [InlineData(".forced", null, null, false, true)]
  76. [InlineData(".foreign", null, null, false, true)]
  77. [InlineData(".default.forced", null, null, true, true)]
  78. [InlineData(".forced.default", null, null, true, true)]
  79. [InlineData(".DEFAULT.FORCED", null, null, true, true)]
  80. [InlineData(".en", null, "eng")]
  81. [InlineData(".EN", null, "eng")]
  82. [InlineData(".fr.en", "fr", "eng")]
  83. [InlineData(".en.fr", "en", "fre")]
  84. [InlineData(".title.en.fr", "title.en", "fre")]
  85. [InlineData(".Title Goes Here", "Title Goes Here", null)]
  86. [InlineData(".Title.with.Separator", "Title.with.Separator", null)]
  87. [InlineData(".title.en.default.forced", "title", "eng", true, true)]
  88. [InlineData(".forced.default.en.title", "title", "eng", true, true)]
  89. public void ParseFile_ExtraTokens_ParseToValues(string tokens, string? title, string? language, bool isDefault = false, bool isForced = false)
  90. {
  91. var path = "My.Video" + tokens + ".srt";
  92. var actual = _subtitlePathParser.ParseFile(path, tokens);
  93. Assert.NotNull(actual);
  94. Assert.Equal(title, actual!.Title);
  95. Assert.Equal(language, actual.Language);
  96. Assert.Equal(isDefault, actual.IsDefault);
  97. Assert.Equal(isForced, actual.IsForced);
  98. }
  99. }