package org.lodder.subtools.sublibrary.control; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; import java.io.File; import java.util.List; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.lodder.subtools.sublibrary.exception.ReleaseParseException; import org.lodder.subtools.sublibrary.model.MovieRelease; import org.lodder.subtools.sublibrary.model.Release; import org.lodder.subtools.sublibrary.model.TvRelease; import org.lodder.subtools.sublibrary.model.VideoType; public class ReleaseParserTest { protected ReleaseParser releaseparser; @Before public void setUp() throws Exception { releaseparser = null; } @Test public void testReleaseGroup() throws Exception { String releaseGroup = ReleaseParser.extractReleasegroup("The.Following.S03E01.HDTV.XviD-AFG", false); assertEquals(releaseGroup, "AFG"); releaseGroup = ReleaseParser.extractReleasegroup("The.Following.S03E01.HDTV.XviD-AFG", true); assertEquals(releaseGroup, "A"); releaseGroup = ReleaseParser.extractReleasegroup("The.Following.S03E01.HDTV.XviD-AFG.srt", false); assertEquals(releaseGroup, ""); releaseGroup = ReleaseParser.extractReleasegroup("The.Following.S03E01.HDTV.XviD-AFG.srt", true); assertEquals(releaseGroup, "AFG"); } @Test public void testListGetQualityKeyWords() throws Exception { releaseparser = new ReleaseParser(); File file = new File("Criminal.Minds.S10E12.720p.HDTV.X264-DIMENSION.mkv"); Release release = releaseparser.parse(file); List<String> q = ReleaseParser.getQualityKeyWords(release.getQuality()); assertEquals(q.get(0), "720p"); assertEquals(q.get(1), "hdtv"); assertEquals(q.get(2), "x264"); file = new File("The.Drop.2014.1080p.WEB-DL.DD5.1.H264-RARBG.mkv"); release = releaseparser.parse(file); q = ReleaseParser.getQualityKeyWords(release.getQuality()); assertEquals(q.get(0), "1080p"); assertEquals(q.get(1), "web-dl"); assertEquals(q.get(2), "dd5 1"); assertEquals(q.get(3), "h264"); } @Test public void testTV() throws Exception { releaseparser = new ReleaseParser(); File file = new File("Criminal.Minds.S10E12.720p.HDTV.X264-DIMENSION.mkv"); Release release = releaseparser.parse(file); assertSame(release.getVideoType(), VideoType.EPISODE); assertEquals(release.getExtension(), "mkv"); assertEquals(release.getFilename(), "Criminal.Minds.S10E12.720p.HDTV.X264-DIMENSION.mkv"); assertEquals(release.getReleasegroup(), "DIMENSION"); assertEquals(release.getQuality(), "720p HDTV X264"); TvRelease tvrelease = (TvRelease) release; assertEquals(tvrelease.getSeason(), 10); assertEquals(tvrelease.getEpisodeNumbers().size(), 1); assertEquals((int) tvrelease.getEpisodeNumbers().get(0), 12); file = new File("S04E02 - White Collar - Most Wanted.mkv"); release = releaseparser.parse(file); assertSame(release.getVideoType(), VideoType.EPISODE); assertEquals(release.getExtension(), "mkv"); assertEquals(release.getFilename(), "S04E02 - White Collar - Most Wanted.mkv"); assertEquals(release.getReleasegroup(), ""); assertEquals(release.getQuality(), ""); tvrelease = (TvRelease) release; assertEquals(tvrelease.getSeason(), 4); assertEquals(tvrelease.getEpisodeNumbers().size(), 1); assertEquals((int) tvrelease.getEpisodeNumbers().get(0), 2); file = new File("Spartacus.Gods.of.The.Arena.Pt.I.720p.HDTV.X264-DIMENSION.mkv"); release = releaseparser.parse(file); assertSame(release.getVideoType(), VideoType.EPISODE); assertEquals(release.getExtension(), "mkv"); assertEquals(release.getFilename(), "Spartacus.Gods.of.The.Arena.Pt.I.720p.HDTV.X264-DIMENSION.mkv"); assertEquals(release.getReleasegroup(), "DIMENSION"); assertEquals(release.getQuality(), "720p HDTV X264"); tvrelease = (TvRelease) release; assertEquals(tvrelease.getSeason(), 1); assertEquals(tvrelease.getEpisodeNumbers().size(), 1); assertEquals((int) tvrelease.getEpisodeNumbers().get(0), 1); file = new File("hawaii.five-0.2010.410.hdtv-lol.mp4"); release = releaseparser.parse(file); assertSame(release.getVideoType(), VideoType.EPISODE); assertEquals(release.getExtension(), "mp4"); assertEquals(release.getFilename(), "hawaii.five-0.2010.410.hdtv-lol.mp4"); assertEquals(release.getReleasegroup(), "lol"); assertEquals(release.getQuality(), "hdtv"); tvrelease = (TvRelease) release; assertEquals(tvrelease.getSeason(), 4); assertEquals(tvrelease.getEpisodeNumbers().size(), 1); assertEquals((int) tvrelease.getEpisodeNumbers().get(0), 10); file = new File("Greys.Anatomy.S10E01E02.720p.HDTV.X264-DIMENSION.mkv"); release = releaseparser.parse(file); assertSame(release.getVideoType(), VideoType.EPISODE); assertEquals(release.getExtension(), "mkv"); assertEquals(release.getFilename(), "Greys.Anatomy.S10E01E02.720p.HDTV.X264-DIMENSION.mkv"); assertEquals(release.getReleasegroup(), "DIMENSION"); assertEquals(release.getQuality(), "720p HDTV X264"); tvrelease = (TvRelease) release; assertEquals(tvrelease.getSeason(), 10); assertEquals(tvrelease.getEpisodeNumbers().size(), 2); assertEquals((int) tvrelease.getEpisodeNumbers().get(0), 1); assertEquals((int) tvrelease.getEpisodeNumbers().get(1), 2); } @Rule public ExpectedException thrown = ExpectedException.none(); @Test public void testReleaseParseExceptionMessage() throws ReleaseParseException { File file = new File("exceptiontesting.mkv"); releaseparser = new ReleaseParser(); thrown.expect(ReleaseParseException.class); thrown.expectMessage("Unknow format, can't be parsed: " + file.getAbsolutePath()); releaseparser.parse(file); fail("Expected an ReleaseParseException to be thrown"); } @Test public void testMovie() throws Exception { releaseparser = new ReleaseParser(); File file = new File("Back.to.the.Future.Part.II.1989.720p.BluRay.X264-AMIABLE.mkv"); Release release = releaseparser.parse(file); assertSame(release.getVideoType(), VideoType.MOVIE); assertEquals(release.getExtension(), "mkv"); assertEquals(release.getFilename(), "Back.to.the.Future.Part.II.1989.720p.BluRay.X264-AMIABLE.mkv"); assertEquals(release.getReleasegroup(), "AMIABLE"); assertEquals(release.getQuality(), "720p BluRay X264"); MovieRelease movieRelease = (MovieRelease) release; assertEquals(movieRelease.getYear(), 1989); assertEquals(movieRelease.getTitle(), "Back to the Future Part II"); file = new File("The.Equalizer.2014.720p.BluRay.x264-SPARKS.mkv"); release = releaseparser.parse(file); assertSame(release.getVideoType(), VideoType.MOVIE); assertEquals(release.getExtension(), "mkv"); assertEquals(release.getFilename(), "The.Equalizer.2014.720p.BluRay.x264-SPARKS.mkv"); assertEquals(release.getReleasegroup(), "SPARKS"); assertEquals(release.getQuality(), "720p BluRay x264"); movieRelease = (MovieRelease) release; assertEquals(movieRelease.getYear(), 2014); assertEquals(movieRelease.getTitle(), "The Equalizer"); file = new File("The.Trip.to.Italy.2014.LIMITED.720p.BluRay.x264-GECKOS.mkv"); release = releaseparser.parse(file); assertSame(release.getVideoType(), VideoType.MOVIE); assertEquals(release.getExtension(), "mkv"); assertEquals(release.getFilename(), "The.Trip.to.Italy.2014.LIMITED.720p.BluRay.x264-GECKOS.mkv"); assertEquals(release.getReleasegroup(), "GECKOS"); assertEquals(release.getQuality(), "720p BluRay x264"); movieRelease = (MovieRelease) release; assertEquals(movieRelease.getYear(), 2014); assertEquals(movieRelease.getTitle(), "The Trip to Italy"); } }