package com.miz.test;/*
* Copyright (C) 2014 Michell Bak
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import android.test.AndroidTestCase;
import com.miz.identification.ShowStructure;
public class TvShowFilenameTests extends AndroidTestCase {
public void testCase1() {
ShowStructure ss = new ShowStructure("/2 Broke Girls/Season 1/2 Broke Girls - S01E01 - Reboot in Brooklyn.avi");
assertEquals("2 Broke Girls", ss.getShowFolderName());
assertEquals("2 Broke Girls - S01E01 - Reboot in Brooklyn.avi", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season 1", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("2 Broke Girls", ss.getDecryptedShowFolderName());
assertEquals("2 Broke Girls", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase2() {
ShowStructure ss = new ShowStructure("/Lost/Lost S01E01.mp4");
assertEquals("Lost", ss.getShowFolderName());
assertEquals("Lost S01E01.mp4", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(false, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("Lost", ss.getDecryptedShowFolderName());
assertEquals("Lost", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase3() {
ShowStructure ss = new ShowStructure("/The.British.Empire.in.Colour/Season1 /The British Empire in Colour Part 1.mkv");
assertEquals("The.British.Empire.in.Colour", ss.getShowFolderName());
assertEquals("The British Empire in Colour Part 1.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season1", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("The British Empire in Colour", ss.getDecryptedShowFolderName());
assertEquals("The British Empire in Colour", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase4() {
ShowStructure ss = new ShowStructure("/An Idiot Abroad s02e02.thebox.hannibal-LF.mkv");
assertEquals(false, ss.hasShowFolder());
assertEquals("An Idiot Abroad s02e02.thebox.hannibal-LF.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(false, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(2, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
assertEquals("An Idiot Abroad", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase5() {
ShowStructure ss = new ShowStructure("/Lost.306.m720p-FReeLOVE.mkv");
assertEquals(false, ss.hasShowFolder());
assertEquals("Lost.306.m720p-FReeLOVE.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(false, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(3, ss.getEpisodes().get(0).getSeason());
assertEquals(6, ss.getEpisodes().get(0).getEpisode());
assertEquals("Lost", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase6() {
ShowStructure ss = new ShowStructure("/The_Office_S02E09_720p_h264-CtrlHD.mkv");
assertEquals(false, ss.hasShowFolder());
assertEquals("The_Office_S02E09_720p_h264-CtrlHD.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(false, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(2, ss.getEpisodes().get(0).getSeason());
assertEquals(9, ss.getEpisodes().get(0).getEpisode());
assertEquals("The Office", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase7() {
ShowStructure ss = new ShowStructure("/Serien/Falling Skies/Staffel 1/Falling Skies - 1x05 - Die Rettung - 2011-07-10 - Sci-Fi-Serie.avi");
assertEquals("Falling Skies", ss.getShowFolderName());
assertEquals("Falling Skies - 1x05 - Die Rettung - 2011-07-10 - Sci-Fi-Serie.avi", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Staffel 1", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(5, ss.getEpisodes().get(0).getEpisode());
assertEquals("Falling Skies", ss.getDecryptedShowFolderName());
assertEquals("Falling Skies", ss.getDecryptedFilename());
assertEquals(true, ss.hasReleaseYear());
assertEquals(2011, ss.getReleaseYear());
}
public void testCase8() {
ShowStructure ss = new ShowStructure("/Looney Tunes/Season 1960/Looney Tunes S1960E05 episodename.avi");
assertEquals("Looney Tunes", ss.getShowFolderName());
assertEquals("Looney Tunes S1960E05 episodename.avi", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season 1960", ss.getSeasonFolderName());
assertEquals(1960, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1960, ss.getEpisodes().get(0).getSeason());
assertEquals(5, ss.getEpisodes().get(0).getEpisode());
assertEquals("Looney Tunes", ss.getDecryptedShowFolderName());
assertEquals("Looney Tunes", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase9() {
ShowStructure ss = new ShowStructure("/Talespin V1-2 DVDRip x264-panos/1/1e16-Her Chance to Dream.mkv");
assertEquals("Talespin V1-2 DVDRip x264-panos", ss.getShowFolderName());
assertEquals("1e16-Her Chance to Dream.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("1", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(16, ss.getEpisodes().get(0).getEpisode());
assertEquals("Talespin V12 panos", ss.getDecryptedShowFolderName());
assertEquals("", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase10() {
ShowStructure ss = new ShowStructure("/The.Corner/Season 1/The Corner - Episode 1 -Gary's Blues.avi");
assertEquals("The.Corner", ss.getShowFolderName());
assertEquals("The Corner - Episode 1 -Gary's Blues.avi", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season 1", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("The Corner", ss.getDecryptedShowFolderName());
assertEquals("The Corner", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase11() {
ShowStructure ss = new ShowStructure("/Doctor.Who.2005.S07.720p.BluRay.DTS.x264/trips-doctor.who.s07e06.mkv");
assertEquals("Doctor.Who.2005.S07.720p.BluRay.DTS.x264", ss.getShowFolderName());
assertEquals("trips-doctor.who.s07e06.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(false, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(7, ss.getEpisodes().get(0).getSeason());
assertEquals(6, ss.getEpisodes().get(0).getEpisode());
assertEquals("Doctor Who", ss.getDecryptedShowFolderName());
assertEquals("tripsdoctor who", ss.getDecryptedFilename());
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
}
public void testCase12() {
ShowStructure ss = new ShowStructure("/Doctor.Who.2005.S07.720p.BluRay.DTS.x264/doctor.who.2005.s07e01.720p.bluray.x264-bia.mkv");
assertEquals("Doctor.Who.2005.S07.720p.BluRay.DTS.x264", ss.getShowFolderName());
assertEquals("doctor.who.2005.s07e01.720p.bluray.x264-bia.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(false, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(7, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("Doctor Who", ss.getDecryptedShowFolderName());
assertEquals("doctor who", ss.getDecryptedFilename());
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
}
public void testCase13() {
ShowStructure ss = new ShowStructure("/Serier/The Fresh Prince of Bel-Air/S01/The Fresh Prince of Bel-Air - 101 - The Fresh Prince Project.avi");
assertEquals("The Fresh Prince of Bel-Air", ss.getShowFolderName());
assertEquals("The Fresh Prince of Bel-Air - 101 - The Fresh Prince Project.avi", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("S01", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("The Fresh Prince of BelAir", ss.getDecryptedShowFolderName());
assertEquals("The Fresh Prince of BelAir", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase14() {
ShowStructure ss = new ShowStructure("/TV/It's Always Sunny in Philadelphia/Season 2/01 - Charlie Gets Crippled.mkv");
assertEquals("It's Always Sunny in Philadelphia", ss.getShowFolderName());
assertEquals("01 - Charlie Gets Crippled.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season 2", ss.getSeasonFolderName());
assertEquals(2, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(2, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("Its Always Sunny in Philadelphia", ss.getDecryptedShowFolderName());
assertEquals("", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase15() {
ShowStructure ss = new ShowStructure("/TV Shows/Battlestar Galactica (2003)/Season 0/S00E03 - The Story So Far.mkv");
assertEquals("Battlestar Galactica (2003)", ss.getShowFolderName());
assertEquals("S00E03 - The Story So Far.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season 0", ss.getSeasonFolderName());
assertEquals(0, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(0, ss.getEpisodes().get(0).getSeason());
assertEquals(3, ss.getEpisodes().get(0).getEpisode());
assertEquals("Battlestar Galactica", ss.getDecryptedShowFolderName());
assertEquals("", ss.getDecryptedFilename());
assertEquals(true, ss.hasReleaseYear());
assertEquals(2003, ss.getReleaseYear());
}
public void testCase16() {
ShowStructure ss = new ShowStructure("/Curb Your Enthusiasm/Season 1/Curb Your Enthusiasm Season 1 Episode 04 - The Bracelet.mkv");
assertEquals("Curb Your Enthusiasm", ss.getShowFolderName());
assertEquals("Curb Your Enthusiasm Season 1 Episode 04 - The Bracelet.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season 1", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(4, ss.getEpisodes().get(0).getEpisode());
assertEquals("Curb Your Enthusiasm", ss.getDecryptedShowFolderName());
assertEquals("Curb Your Enthusiasm", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase17() {
ShowStructure ss = new ShowStructure("/World War II in HD/Season 1/World War II in HD 01 Darkness Falls.mkv");
assertEquals("World War II in HD", ss.getShowFolderName());
assertEquals("World War II in HD 01 Darkness Falls.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season 1", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("World War II in HD", ss.getDecryptedShowFolderName());
assertEquals("World War II in HD", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase18() {
ShowStructure ss = new ShowStructure("/I.Claudius,Season 1/I.Claudius.E01.A.Touch.Of.Murder-ZOXX.mkv");
assertEquals("I.Claudius,Season 1", ss.getShowFolderName());
assertEquals("I.Claudius.E01.A.Touch.Of.Murder-ZOXX.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(false, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("I Claudius", ss.getDecryptedShowFolderName());
assertEquals("I Claudius E", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase19() {
ShowStructure ss = new ShowStructure("/House MD Season 1,2,3,4,5,6,7 + Extras (Deleted Scenes etc) DVDR/Season 1/House MD Season 1 Episode 01 - Pilot.avi");
assertEquals("House MD Season 1,2,3,4,5,6,7 + Extras (Deleted Scenes etc) DVDR", ss.getShowFolderName());
assertEquals("House MD Season 1 Episode 01 - Pilot.avi", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals("Season 1", ss.getSeasonFolderName());
assertEquals(1, ss.getSeasonFolderNumber());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("House MD", ss.getDecryptedShowFolderName());
assertEquals("House MD", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase20() {
ShowStructure ss = new ShowStructure("/Skins.S01.COMPLETE.ENGLISH.HDTVRip.720p.x264-TvR/Skins.S01E01.Tony.ENGLISH.HDTVRip.720p.x264-TvR/tvr-skins-s01e01-720p.mkv");
assertEquals("Skins.S01E01.Tony.ENGLISH.HDTVRip.720p.x264-TvR", ss.getShowFolderName());
assertEquals("tvr-skins-s01e01-720p.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(false, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals("Skins", ss.getDecryptedShowFolderName());
assertEquals("skins", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testCase21() {
ShowStructure ss = new ShowStructure("Music/iTunes/iTunes Media/TV Shows/One Piece/Season 1/11 Expose the Plot! Pirate Butler, C.mkv");
assertEquals("One Piece", ss.getShowFolderName());
assertEquals("Season 1", ss.getSeasonFolderName());
assertEquals("11 Expose the Plot! Pirate Butler, C.mkv", ss.getFilename());
assertEquals(false, ss.hasImdbId());
assertEquals(true, ss.hasSeasonFolder());
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(11, ss.getEpisodes().get(0).getEpisode());
assertEquals("One Piece", ss.getDecryptedShowFolderName());
assertEquals("", ss.getDecryptedFilename());
assertEquals(false, ss.hasReleaseYear());
}
public void testSpecialsSeasonFolder() {
ShowStructure ss = new ShowStructure("/2 Broke Girls/Special/2 Broke Girls - S01E01 - Reboot in Brooklyn.avi");
assertEquals(0, ss.getSeasonFolderNumber());
ss = new ShowStructure("/2 Broke Girls/Specials/2 Broke Girls - S01E01 - Reboot in Brooklyn.avi");
assertEquals(0, ss.getSeasonFolderNumber());
ss = new ShowStructure("/2 Broke Girls/Special episode/2 Broke Girls - S01E01 - Reboot in Brooklyn.avi");
assertEquals(0, ss.getSeasonFolderNumber());
ss = new ShowStructure("/2 Broke Girls/Special episodes/2 Broke Girls - S01E01 - Reboot in Brooklyn.avi");
assertEquals(0, ss.getSeasonFolderNumber());
ss = new ShowStructure("/2 Broke Girls/extra/2 Broke Girls - S01E01 - Reboot in Brooklyn.avi");
assertEquals(0, ss.getSeasonFolderNumber());
ss = new ShowStructure("/2 Broke Girls/extras/2 Broke Girls - S01E01 - Reboot in Brooklyn.avi");
assertEquals(0, ss.getSeasonFolderNumber());
}
public void testCustomTags() {
ShowStructure ss = new ShowStructure("/2 Broke Girls/Season 1/2 Broke Girls - S01E01 - Reboot in Brooklyn.avi");
// Decrypted without custom tags
assertEquals("2 Broke Girls", ss.getDecryptedShowFolderName());
assertEquals("2 Broke Girls", ss.getDecryptedFilename());
// Decrypted with custom tags
ss.setCustomTags("Girls");
assertEquals("2 Broke", ss.getDecryptedShowFolderName());
assertEquals("2 Broke", ss.getDecryptedFilename());
}
/**
* Names like S##E## with information about a single episode
*/
public void testNamingConvention1Single() {
String testFilename = "foo.s01.e02.mkv";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "foo.s01_e02.mkv";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "S01E02 foo.mkv";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "S01 - E02.mkv";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_s01e02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_s1e2.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_s01.e02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_s01_e02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
}
/**
* Names like S##E##E## or S##E##_S##E## with information about multiple episodes
*/
public void testNamingConvention1Multi() {
String testFilename = "anything_s01e01_s01e02.ext";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.s01e01.episode1.title.s01e02.episode2.title.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.s01e01.s01e02.s01e03.ext";
ss = new ShowStructure(testFilename);
assertEquals(3, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
testFilename = "anything.s01e01e02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.s01e01-02-03.ext";
ss = new ShowStructure(testFilename);
assertEquals(3, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
}
/**
* Names like ##x## with information about a single episode
*/
public void testNamingConvention2Single() {
String testFilename = "anything_1x02.ext";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "foo.1x09";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(9, ss.getEpisodes().get(0).getEpisode());
testFilename = "1x09";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(9, ss.getEpisodes().get(0).getEpisode());
}
/**
* Names like #x##x## or ##x##_##x## with information about multiple episodes
*/
public void testNamingConvention2Multi() {
String testFilename = "anything.1x01_1x02.ext";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.1x01x02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.1x01_1x02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "name.1x01e02_03-04.ext";
ss = new ShowStructure(testFilename);
assertEquals(4, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
assertEquals(1, ss.getEpisodes().get(3).getSeason());
assertEquals(4, ss.getEpisodes().get(3).getEpisode());
}
/**
* Names like ep## or episode## with information about a single episode
*/
public void testNamingConvention3Single() {
String testFilename = "anything_ep02.ext";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_episode02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_ep_02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_episode_02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
}
/**
* Names like ep##.ep## or episode##_## with information about multiple episodes
*/
public void testNamingConvention3Multi() {
String testFilename = "anything.ep01.ep02.ext";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.episode01.episode02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.ep01_02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.episode01_02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.ep01_02_03.ext";
ss = new ShowStructure(testFilename);
assertEquals(3, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
testFilename = "anything.episode01_02_03.ext";
ss = new ShowStructure(testFilename);
assertEquals(3, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
testFilename = "anything.ep01_02x03e04-5.ext";
ss = new ShowStructure(testFilename);
assertEquals(5, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
assertEquals(1, ss.getEpisodes().get(3).getSeason());
assertEquals(4, ss.getEpisodes().get(3).getEpisode());
assertEquals(1, ss.getEpisodes().get(4).getSeason());
assertEquals(5, ss.getEpisodes().get(4).getEpisode());
testFilename = "anything.episode01_02x03e04-5.ext";
ss = new ShowStructure(testFilename);
assertEquals(5, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
assertEquals(1, ss.getEpisodes().get(3).getSeason());
assertEquals(4, ss.getEpisodes().get(3).getEpisode());
assertEquals(1, ss.getEpisodes().get(4).getSeason());
assertEquals(5, ss.getEpisodes().get(4).getEpisode());
// Let's try to fool it!
testFilename = "anything.ep01_02 - 2011-07-10.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size()); // Hah, we failed!
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
}
/**
* Names like ### with information about a single episode
*/
public void testNamingConvention4Single() {
String testFilename = "anything_102.ext";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_1021.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(10, ss.getEpisodes().get(0).getSeason());
assertEquals(21, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_25123.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(25, ss.getEpisodes().get(0).getSeason());
assertEquals(123, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_025123.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(25, ss.getEpisodes().get(0).getSeason());
assertEquals(123, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_2014023.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(2014, ss.getEpisodes().get(0).getSeason());
assertEquals(23, ss.getEpisodes().get(0).getEpisode());
}
/**
* Names like pt## / part## with information about a single episode
*/
public void testNamingConvention5Single() {
String testFilename = "anything_part02.ext";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_pt02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_part_02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
testFilename = "anything_pt_02.ext";
ss = new ShowStructure(testFilename);
assertEquals(1, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(2, ss.getEpisodes().get(0).getEpisode());
}
/**
* Names like part##.part## or pt##_## with information about multiple episodes
*/
public void testNamingConvention5Multi() {
String testFilename = "anything.pt01.pt02.ext";
ShowStructure ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.part01.pt02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.pt01_02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.part01_02.ext";
ss = new ShowStructure(testFilename);
assertEquals(2, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
testFilename = "anything.pt01_02_03.ext";
ss = new ShowStructure(testFilename);
assertEquals(3, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
testFilename = "anything.part01_02_03.ext";
ss = new ShowStructure(testFilename);
assertEquals(3, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
testFilename = "anything.pt01_02x03e04-5.ext";
ss = new ShowStructure(testFilename);
assertEquals(5, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
assertEquals(1, ss.getEpisodes().get(3).getSeason());
assertEquals(4, ss.getEpisodes().get(3).getEpisode());
assertEquals(1, ss.getEpisodes().get(4).getSeason());
assertEquals(5, ss.getEpisodes().get(4).getEpisode());
testFilename = "anything.part01_02x03e04-5.ext";
ss = new ShowStructure(testFilename);
assertEquals(5, ss.getEpisodes().size());
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
assertEquals(1, ss.getEpisodes().get(1).getSeason());
assertEquals(2, ss.getEpisodes().get(1).getEpisode());
assertEquals(1, ss.getEpisodes().get(2).getSeason());
assertEquals(3, ss.getEpisodes().get(2).getEpisode());
assertEquals(1, ss.getEpisodes().get(3).getSeason());
assertEquals(4, ss.getEpisodes().get(3).getEpisode());
assertEquals(1, ss.getEpisodes().get(4).getSeason());
assertEquals(5, ss.getEpisodes().get(4).getEpisode());
}
/**
* Mizuu should prioritize certain naming conventions over others in order
* to avoid using any release years as a naming convention.
*/
public void testPrioritizing() {
ShowStructure ss = new ShowStructure("Doctor Who (2005) S01E01.mkv");
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
ss = new ShowStructure("Doctor Who (2005) 01x01.mkv");
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
ss = new ShowStructure("Doctor Who (2005) ep01.mkv");
assertEquals(1, ss.getEpisodes().get(0).getSeason());
assertEquals(1, ss.getEpisodes().get(0).getEpisode());
}
public void testSlashSplitting() {
ShowStructure ss = new ShowStructure("/TV Shows/Chuck/Season 5/S05E01.mkv");
assertEquals("S05E01.mkv", ss.getFilename());
assertEquals("Season 5", ss.getSeasonFolderName());
assertEquals("Chuck", ss.getShowFolderName());
ss = new ShowStructure("/Chuck/Season05/S05E01.mkv");
assertEquals("S05E01.mkv", ss.getFilename());
assertEquals("Season05", ss.getSeasonFolderName());
assertEquals("Chuck", ss.getShowFolderName());
ss = new ShowStructure("/Chuck/S05/S05E01.mkv");
assertEquals("S05E01.mkv", ss.getFilename());
assertEquals("S05", ss.getSeasonFolderName());
assertEquals("Chuck", ss.getShowFolderName());
ss = new ShowStructure("Chuck/05/S05E01.mkv");
assertEquals("S05E01.mkv", ss.getFilename());
assertEquals("05", ss.getSeasonFolderName());
assertEquals("Chuck", ss.getShowFolderName());
ss = new ShowStructure("Chuck/05 lulz/S05E01.mkv");
assertEquals("S05E01.mkv", ss.getFilename());
assertEquals("", ss.getSeasonFolderName());
assertEquals("05 lulz", ss.getShowFolderName());
ss = new ShowStructure("Chuck/S05E01.mkv");
assertEquals("S05E01.mkv", ss.getFilename());
assertEquals("", ss.getSeasonFolderName());
assertEquals("Chuck", ss.getShowFolderName());
ss = new ShowStructure("/S05E01.mkv");
assertEquals("S05E01.mkv", ss.getFilename());
assertEquals("", ss.getSeasonFolderName());
assertEquals("", ss.getShowFolderName());
ss = new ShowStructure("S05E01.mkv");
assertEquals("S05E01.mkv", ss.getFilename());
assertEquals("", ss.getSeasonFolderName());
assertEquals("", ss.getShowFolderName());
}
public void testReleaseYear() {
ShowStructure ss = new ShowStructure("/TBBT/S01E05.mkv");
assertEquals(false, ss.hasReleaseYear());
ss = new ShowStructure("/TBBT (2005)/S01E05.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
ss = new ShowStructure("/TBBT (2005)/S01/S01E05.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
// 2012 is a valid season number (for some daily TV shows, etc.)
// so even if there is a 2012 season, it should use the show name release year (2005)
ss = new ShowStructure("/TBBT (2005)/2012/S01E05.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
// Disregard filename year if show folder contains it
ss = new ShowStructure("/TBBT (2005)/2004 S01E05.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
// Disregard filename year if show folder contains it
ss = new ShowStructure("/TBBT (2005)/S01E05 2004.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
// Use filename year if show folder doesn't contains it
ss = new ShowStructure("/TBBT/2004 S01E05.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2004, ss.getReleaseYear());
// Use filename year if show folder doesn't contains it
ss = new ShowStructure("/TBBT/S01E05 2004.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2004, ss.getReleaseYear());
// Use filename year if show folder doesn't contains it
ss = new ShowStructure("/TBBT/TBBT (2004) S01E05.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2004, ss.getReleaseYear());
// Use filename year if show folder doesn't contains it
ss = new ShowStructure("/TBBT/TBBT S01E05 (2004).mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2004, ss.getReleaseYear());
// Handle multi-episode files as well
ss = new ShowStructure("/TBBT/TBBT.1x01_1x02.mkv");
assertEquals(false, ss.hasReleaseYear());
// Handle multi-episode files as well
ss = new ShowStructure("/TBBT/TBBT.2005.1x01_1x02.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
// Handle multi-episode files as well
ss = new ShowStructure("/TBBT/TBBT.s05e01_s05e02 (2005).mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
// Handle multi-episode files as well
ss = new ShowStructure("/TBBT/TBBT.1x01_1x02 (2005).mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
// Handle multi-episode files as well
ss = new ShowStructure("/TBBT/TBBT.1x01_1x02.2005.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
// Handle multi-episode files as well
ss = new ShowStructure("/TBBT/TBBT.1x01x02.2005.mkv");
assertEquals(true, ss.hasReleaseYear());
assertEquals(2005, ss.getReleaseYear());
}
public void testImdb() {
ShowStructure ss = new ShowStructure("/The Big Bang Theory tt0898266/S05E01.mkv");
assertEquals("tt0898266", ss.getImdbId());
ss = new ShowStructure("/The Big Bang Theory/S05E01 tt0898266.mkv");
assertEquals("tt0898266", ss.getImdbId());
ss = new ShowStructure("/The Big Bang Theory tt0898266/S05E01 tt0898265.mkv"); // prioritize the show folder one
assertEquals("tt0898266", ss.getImdbId());
}
}