diff --git a/NzbDrone.Core.Test/ParserTest.cs b/NzbDrone.Core.Test/ParserTest.cs index a46fd83cd..68cc0a0b9 100644 --- a/NzbDrone.Core.Test/ParserTest.cs +++ b/NzbDrone.Core.Test/ParserTest.cs @@ -2,6 +2,7 @@ using System; using FluentAssertions; using NUnit.Framework; +using NzbDrone.Core.Model; using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; @@ -94,6 +95,8 @@ namespace NzbDrone.Core.Test [TestCase("S07E23 - [WEBDL].mkv ", QualityTypes.WEBDL)] [TestCase("S07E23.mkv ", QualityTypes.HDTV)] [TestCase("S07E23 .avi ", QualityTypes.SDTV)] + [TestCase("WEEDS.S03E01-06.DUAL.XviD.Bluray.AC3.-HELLYWOOD.avi", QualityTypes.DVD)] + [TestCase("WEEDS.S03E01-06.DUAL.Bluray.AC3.-HELLYWOOD.avi", QualityTypes.Bluray720p)] public void quality_parse(string postTitle, object quality) { var result = Parser.ParseQuality(postTitle); @@ -267,5 +270,73 @@ namespace NzbDrone.Core.Test } } + + [TestCase("Chuck - 4x05 - Title", "Chuck")] + [TestCase("Law & Order - 4x05 - Title", "laworder")] + public void parse_series_name(string postTitle, string title) + { + var result = Parser.ParseSeriesName(postTitle); + Assert.AreEqual(Parser.NormalizeTitle(title), result); + } + + [TestCase("Chuck - 4x05 - Title [Proper]", true)] + [TestCase("Law & Order - 4x05 - Title", false)] + [TestCase("30.Rock.S04E05.asdjasdj.proper.", true)] + public void parse_proper(string postTitle, bool proper) + { + var result = Parser.ParseProper(postTitle); + Assert.AreEqual(proper, result); + } + + [TestCase("Castle.2009.S01E14.English.HDTV.XviD-LOL", LanguageType.English)] + [TestCase("Castle.2009.S01E14.French.HDTV.XviD-LOL", LanguageType.French)] + [TestCase("Castle.2009.S01E14.Spanish.HDTV.XviD-LOL", LanguageType.Spanish)] + [TestCase("Castle.2009.S01E14.German.HDTV.XviD-LOL", LanguageType.German)] + [TestCase("Castle.2009.S01E14.Germany.HDTV.XviD-LOL", LanguageType.English)] + [TestCase("Castle.2009.S01E14.English.HDTV.XviD-LOL", LanguageType.Italian)] + [TestCase("Castle.2009.S01E14.Danish.HDTV.XviD-LOL", LanguageType.Danish)] + [TestCase("Castle.2009.S01E14.Dutch.HDTV.XviD-LOL", LanguageType.Dutch)] + [TestCase("Castle.2009.S01E14.Japanese.HDTV.XviD-LOL", LanguageType.Japanese)] + [TestCase("Castle.2009.S01E14.Cantonese.HDTV.XviD-LOL", LanguageType.Cantonese)] + [TestCase("Castle.2009.S01E14.Mandarin.HDTV.XviD-LOL", LanguageType.Mandarin)] + [TestCase("Castle.2009.S01E14.Korean.HDTV.XviD-LOL", LanguageType.Korean)] + [TestCase("Castle.2009.S01E14.Russian.HDTV.XviD-LOL", LanguageType.Russian)] + [TestCase("Castle.2009.S01E14.Polish.HDTV.XviD-LOL", LanguageType.Polish)] + [TestCase("Castle.2009.S01E14.Vietnamese.HDTV.XviD-LOL", LanguageType.Vietnamese)] + [TestCase("Castle.2009.S01E14.Swedish.HDTV.XviD-LOL", LanguageType.Swedish)] + [TestCase("Castle.2009.S01E14.Norwegian.HDTV.XviD-LOL", LanguageType.Norwegian)] + [TestCase("Castle.2009.S01E14.Finnish.HDTV.XviD-LOL", LanguageType.Finnish)] + [TestCase("Castle.2009.S01E14.Turkish.HDTV.XviD-LOL", LanguageType.Turkish)] + [TestCase("Castle.2009.S01E14.Portuguese.HDTV.XviD-LOL", LanguageType.Portuguese)] + public void parse_language(string postTitle, LanguageType language) + { + var result = Parser.ParseLanguage(postTitle); + Assert.AreEqual(language, result); + } + [Test] + [ExpectedException(typeof(ArgumentException), ExpectedMessage = "Path can not be null or empty")] + public void normalize_path_exception_empty() + { + Parser.NormalizePath(""); + } + + [Test] + [ExpectedException(typeof(ArgumentException), ExpectedMessage = "Path can not be null or empty")] + public void normalize_path_exception_null() + { + Parser.NormalizePath(null); + } + + [TestCase("Hawaii Five 0 S01E19 720p WEB DL DD5 1 H 264 NT", "Hawaii Five", 1)] + [TestCase("Chuck.4x05.HDTV.XviD-LOL", "Chuck", 4)] + [TestCase("S03E09 WS PDTV XviD FUtV", "", 3)] + [TestCase("5x10 WS PDTV XviD FUtV", "", 5)] + public void parse_season_info(string postTitle, string seriesName, int seasonNumber) + { + var result = Parser.ParseSeasonInfo(postTitle); + + Assert.AreEqual(Parser.NormalizeTitle(seriesName), result.SeriesTitle); + Assert.AreEqual(seasonNumber, result.SeasonNumber); + } } } \ No newline at end of file diff --git a/NzbDrone.Core/Parser.cs b/NzbDrone.Core/Parser.cs index 6079340af..9aa4028b9 100644 --- a/NzbDrone.Core/Parser.cs +++ b/NzbDrone.Core/Parser.cs @@ -313,65 +313,67 @@ namespace NzbDrone.Core internal static LanguageType ParseLanguage(string title) { - if (title.ToLower().Contains("english")) + var lowerTitle = title.ToLower(); + + if (lowerTitle.Contains("english")) return LanguageType.English; - if (title.ToLower().Contains("french")) + if (lowerTitle.Contains("french")) return LanguageType.French; - if (title.ToLower().Contains("spanish")) + if (lowerTitle.Contains("spanish")) return LanguageType.Spanish; - if (title.ToLower().Contains("german")) + if (lowerTitle.Contains("german")) { //Make sure it doesn't contain Germany (Since we're not using REGEX for all this) - if (!title.ToLower().Contains("germany")) + if (!lowerTitle.Contains("germany")) return LanguageType.German; } - if (title.ToLower().Contains("italian")) + if (lowerTitle.Contains("italian")) return LanguageType.Italian; - if (title.ToLower().Contains("danish")) + if (lowerTitle.Contains("danish")) return LanguageType.Danish; - if (title.ToLower().Contains("dutch")) + if (lowerTitle.Contains("dutch")) return LanguageType.Dutch; - if (title.ToLower().Contains("japanese")) + if (lowerTitle.Contains("japanese")) return LanguageType.Japanese; - if (title.ToLower().Contains("cantonese")) + if (lowerTitle.Contains("cantonese")) return LanguageType.Cantonese; - if (title.ToLower().Contains("mandarin")) + if (lowerTitle.Contains("mandarin")) return LanguageType.Mandarin; - if (title.ToLower().Contains("korean")) + if (lowerTitle.Contains("korean")) return LanguageType.Korean; - if (title.ToLower().Contains("russian")) + if (lowerTitle.Contains("russian")) return LanguageType.Russian; - if (title.ToLower().Contains("polish")) + if (lowerTitle.Contains("polish")) return LanguageType.Polish; - if (title.ToLower().Contains("vietnamese")) + if (lowerTitle.Contains("vietnamese")) return LanguageType.Vietnamese; - if (title.ToLower().Contains("swedish")) + if (lowerTitle.Contains("swedish")) return LanguageType.Swedish; - if (title.ToLower().Contains("norwegian")) + if (lowerTitle.Contains("norwegian")) return LanguageType.Norwegian; - if (title.ToLower().Contains("finnish")) + if (lowerTitle.Contains("finnish")) return LanguageType.Finnish; - if (title.ToLower().Contains("turkish")) + if (lowerTitle.Contains("turkish")) return LanguageType.Turkish; - if (title.ToLower().Contains("portuguese")) + if (lowerTitle.Contains("portuguese")) return LanguageType.Portuguese; return LanguageType.English;