From 3d854ad43f5f74a88b286495b4d598f8567dd0c8 Mon Sep 17 00:00:00 2001 From: Jendrik Weise Date: Sun, 27 Aug 2023 21:08:00 +0200 Subject: [PATCH] Fix tests --- .../ParserTests/LanguageParserFixture.cs | 7 +++++++ src/NzbDrone.Core/Parser/LanguageParser.cs | 10 ++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs index f3dc3a4d8..84b738490 100644 --- a/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs @@ -436,6 +436,9 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("Name (2020) - S01E20 - [AAC 2.0].testtitle.default.forced.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.testtitle.forced.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.testtitle.forced.ass", "Name (2020)/Season 1/Name (2020).mkv")] + [TestCase("Name (2020) - S01E20 - [AAC 2.0].testtitle.default.eng.forced.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] + [TestCase("Name (2020) - S01E20 - [AAC 2.0].eng.default.testtitle.forced.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] + [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.eng.testtitle.forced.ass", "Name (2020)/Season 1/Name (2020).mkv")] public void should_parse_title_and_tags(string postTitle, string episodeFilePath) { var episode = new Episode @@ -448,11 +451,15 @@ namespace NzbDrone.Core.Test.ParserTests var (languageTags, title) = LanguageParser.ParseLanguageTagsAndTitle(postTitle, episode); languageTags.Should().BeEquivalentTo(new[] { "default", "forced" }); title.Should().BeEquivalentTo("testtitle"); + + var result = LanguageParser.ParseLanguages(postTitle); + result.Should().Contain(Language.English); } [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.forced.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] [TestCase("Name (2020) - S01E20 - [AAC 2.0].ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] + [TestCase("Name (2020) - S01E20 - [AAC 2.0].testtitle.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] public void should_not_parse_false_title(string postTitle, string episodeFilePath) { var episode = new Episode diff --git a/src/NzbDrone.Core/Parser/LanguageParser.cs b/src/NzbDrone.Core/Parser/LanguageParser.cs index 7f4874a6c..ac88dfac3 100644 --- a/src/NzbDrone.Core/Parser/LanguageParser.cs +++ b/src/NzbDrone.Core/Parser/LanguageParser.cs @@ -29,9 +29,9 @@ namespace NzbDrone.Core.Parser private static readonly Regex GermanDualLanguageRegex = new (@"(?[a-z]{2,3})|(?full|forced|foreign|default|cc|psdh|sdh)))*$", RegexOptions.Compiled | RegexOptions.IgnoreCase); + private static readonly Regex SubtitleLanguageRegex = new Regex(".+?([-_. ](?full|forced|foreign|default|cc|psdh|sdh))*[-_. ](?[a-z]{2,3})([-_. ](?full|forced|foreign|default|cc|psdh|sdh))*$", RegexOptions.Compiled | RegexOptions.IgnoreCase); - private static readonly Regex SubtitleLanguageTitleRegex = new Regex(".+?(\\.((?[a-z]{2,3})|(?full|forced|foreign|default|cc|psdh|sdh)))*\\.(?[^.]*)(\\.((?<iso_code>[a-z]{2,3})|(?<tags2>full|forced|foreign|default|cc|psdh|sdh)))*$", RegexOptions.Compiled | RegexOptions.IgnoreCase); + private static readonly Regex SubtitleLanguageTitleRegex = new Regex(".+?(\\.((?<tags1>full|forced|foreign|default|cc|psdh|sdh)|(?<iso_code>[a-z]{2,3})))*\\.(?<title>[^.]*)(\\.((?<tags2>full|forced|foreign|default|cc|psdh|sdh)|(?<iso_code>[a-z]{2,3})))*$", RegexOptions.Compiled | RegexOptions.IgnoreCase); public static List<Language> ParseLanguages(string title) { @@ -256,6 +256,12 @@ namespace NzbDrone.Core.Parser { var simpleFilename = Path.GetFileNameWithoutExtension(fileName); var matchTitle = SubtitleLanguageTitleRegex.Match(simpleFilename); + + if (matchTitle.Groups["iso_code"].Captures.Count != 1) + { + throw new ArgumentException("Subtitle file title probably parsed incorrectly, not using."); + } + var languageTags = matchTitle.Groups["tags1"].Captures .Union(matchTitle.Groups["tags2"].Captures) .Cast<Capture>()