123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- using System.Linq;
- using Emby.Naming.Common;
- using Emby.Naming.Video;
- using MediaBrowser.Model.IO;
- using Xunit;
- namespace Jellyfin.Naming.Tests.Video
- {
- public class StackTests
- {
- private readonly NamingOptions _namingOptions = new NamingOptions();
- [Fact]
- public void TestSimpleStack()
- {
- var files = new[]
- {
- "Bad Boys (2006) part1.mkv",
- "Bad Boys (2006) part2.mkv",
- "Bad Boys (2006) part3.mkv",
- "Bad Boys (2006) part4.mkv",
- "Bad Boys (2006)-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Single(result);
- TestStackInfo(result[0], "Bad Boys (2006)", 4);
- }
- [Fact]
- public void TestFalsePositives()
- {
- var files = new[]
- {
- "Bad Boys (2006).mkv",
- "Bad Boys (2007).mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Empty(result);
- }
- [Fact]
- public void TestFalsePositives2()
- {
- var files = new[]
- {
- "Bad Boys 2006.mkv",
- "Bad Boys 2007.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Empty(result);
- }
- [Fact]
- public void TestFalsePositives3()
- {
- var files = new[]
- {
- "300 (2006).mkv",
- "300 (2007).mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Empty(result);
- }
- [Fact]
- public void TestFalsePositives4()
- {
- var files = new[]
- {
- "300 2006.mkv",
- "300 2007.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Empty(result);
- }
- [Fact]
- public void TestFalsePositives5()
- {
- var files = new[]
- {
- "Star Trek 1 - The motion picture.mkv",
- "Star Trek 2- The wrath of khan.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Empty(result);
- }
- [Fact]
- public void TestFalsePositives6()
- {
- var files = new[]
- {
- "Red Riding in the Year of Our Lord 1983 (2009).mkv",
- "Red Riding in the Year of Our Lord 1980 (2009).mkv",
- "Red Riding in the Year of Our Lord 1974 (2009).mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Empty(result);
- }
- [Fact]
- public void TestStackName()
- {
- var files = new[]
- {
- "d:/movies/300 2006 part1.mkv",
- "d:/movies/300 2006 part2.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Single(result);
- TestStackInfo(result[0], "300 2006", 2);
- }
- [Fact]
- public void TestDirtyNames()
- {
- var files = new[]
- {
- "Bad Boys (2006).part1.stv.unrated.multi.1080p.bluray.x264-rough.mkv",
- "Bad Boys (2006).part2.stv.unrated.multi.1080p.bluray.x264-rough.mkv",
- "Bad Boys (2006).part3.stv.unrated.multi.1080p.bluray.x264-rough.mkv",
- "Bad Boys (2006).part4.stv.unrated.multi.1080p.bluray.x264-rough.mkv",
- "Bad Boys (2006)-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Single(result);
- TestStackInfo(result[0], "Bad Boys (2006).stv.unrated.multi.1080p.bluray.x264-rough", 4);
- }
- [Fact]
- public void TestNumberedFiles()
- {
- var files = new[]
- {
- "Bad Boys (2006).mkv",
- "Bad Boys (2006) 1.mkv",
- "Bad Boys (2006) 2.mkv",
- "Bad Boys (2006) 3.mkv",
- "Bad Boys (2006)-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Empty(result);
- }
- [Fact]
- public void TestSimpleStackWithNumericName()
- {
- var files = new[]
- {
- "300 (2006) part1.mkv",
- "300 (2006) part2.mkv",
- "300 (2006) part3.mkv",
- "300 (2006) part4.mkv",
- "300 (2006)-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Single(result);
- TestStackInfo(result[0], "300 (2006)", 4);
- }
- [Fact]
- public void TestMixedExpressionsNotAllowed()
- {
- var files = new[]
- {
- "Bad Boys (2006) part1.mkv",
- "Bad Boys (2006) part2.mkv",
- "Bad Boys (2006) part3.mkv",
- "Bad Boys (2006) parta.mkv",
- "Bad Boys (2006)-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Single(result);
- TestStackInfo(result[0], "Bad Boys (2006)", 3);
- }
- [Fact]
- public void TestDualStacks()
- {
- var files = new[]
- {
- "Bad Boys (2006) part1.mkv",
- "Bad Boys (2006) part2.mkv",
- "Bad Boys (2006) part3.mkv",
- "Bad Boys (2006) part4.mkv",
- "Bad Boys (2006)-trailer.mkv",
- "300 (2006) part1.mkv",
- "300 (2006) part2.mkv",
- "300 (2006) part3.mkv",
- "300 (2006)-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Equal(2, result.Count);
- TestStackInfo(result[1], "Bad Boys (2006)", 4);
- TestStackInfo(result[0], "300 (2006)", 3);
- }
- [Fact]
- public void TestDirectories()
- {
- var files = new[]
- {
- "blah blah - cd 1",
- "blah blah - cd 2"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveDirectories(files).ToList();
- Assert.Single(result);
- TestStackInfo(result[0], "blah blah", 2);
- }
- [Fact]
- public void TestFalsePositive()
- {
- var files = new[]
- {
- "300a.mkv",
- "300b.mkv",
- "300c.mkv",
- "300-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Single(result);
- TestStackInfo(result[0], "300", 3);
- }
- [Fact]
- public void TestFailSequence()
- {
- var files = new[]
- {
- "300 part1.mkv",
- "300 part2.mkv",
- "Avatar",
- "Avengers part1.mkv",
- "Avengers part2.mkv",
- "Avengers part3.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Equal(2, result.Count);
- TestStackInfo(result[0], "300", 2);
- TestStackInfo(result[1], "Avengers", 3);
- }
- [Fact]
- public void TestMixedExpressions()
- {
- var files = new[]
- {
- "Bad Boys (2006) part1.mkv",
- "Bad Boys (2006) part2.mkv",
- "Bad Boys (2006) part3.mkv",
- "Bad Boys (2006) part4.mkv",
- "Bad Boys (2006)-trailer.mkv",
- "300 (2006) parta.mkv",
- "300 (2006) partb.mkv",
- "300 (2006) partc.mkv",
- "300 (2006) partd.mkv",
- "300 (2006)-trailer.mkv",
- "300a.mkv",
- "300b.mkv",
- "300c.mkv",
- "300-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Equal(3, result.Count);
- TestStackInfo(result[0], "300 (2006)", 4);
- TestStackInfo(result[1], "300", 3);
- TestStackInfo(result[2], "Bad Boys (2006)", 4);
- }
- [Fact]
- public void TestAlphaLimitOfFour()
- {
- var files = new[]
- {
- "300 (2006) parta.mkv",
- "300 (2006) partb.mkv",
- "300 (2006) partc.mkv",
- "300 (2006) partd.mkv",
- "300 (2006) parte.mkv",
- "300 (2006) partf.mkv",
- "300 (2006) partg.mkv",
- "300 (2006)-trailer.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Single(result);
- TestStackInfo(result[0], "300 (2006)", 4);
- }
- [Fact]
- public void TestMixed()
- {
- var files = new[]
- {
- new FileSystemMetadata { FullName = "Bad Boys (2006) part1.mkv", IsDirectory = false },
- new FileSystemMetadata { FullName = "Bad Boys (2006) part2.mkv", IsDirectory = false },
- new FileSystemMetadata { FullName = "300 (2006) part2", IsDirectory = true },
- new FileSystemMetadata { FullName = "300 (2006) part3", IsDirectory = true },
- new FileSystemMetadata { FullName = "300 (2006) part1", IsDirectory = true }
- };
- var resolver = GetResolver();
- var result = resolver.Resolve(files).ToList();
- Assert.Equal(2, result.Count);
- TestStackInfo(result[0], "300 (2006)", 3);
- TestStackInfo(result[1], "Bad Boys (2006)", 2);
- }
- [Fact]
- public void TestNamesWithoutParts()
- {
- // No stacking here because there is no part/disc/etc
- var files = new[]
- {
- "Harry Potter and the Deathly Hallows.mkv",
- "Harry Potter and the Deathly Hallows 1.mkv",
- "Harry Potter and the Deathly Hallows 2.mkv",
- "Harry Potter and the Deathly Hallows 3.mkv",
- "Harry Potter and the Deathly Hallows 4.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Empty(result);
- }
- [Fact]
- public void TestNumbersAppearingBeforePartNumber()
- {
- // No stacking here because there is no part/disc/etc
- var files = new[]
- {
- "Neverland (2011)[720p][PG][Voted 6.5][Family-Fantasy]part1.mkv",
- "Neverland (2011)[720p][PG][Voted 6.5][Family-Fantasy]part2.mkv"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveFiles(files).ToList();
- Assert.Single(result);
- Assert.Equal(2, result[0].Files.Count);
- }
- [Fact]
- public void TestMultiDiscs()
- {
- // No stacking here because there is no part/disc/etc
- var files = new[]
- {
- @"M:/Movies (DVD)/Movies (Musical)/The Sound of Music/The Sound of Music (1965) (Disc 01)",
- @"M:/Movies (DVD)/Movies (Musical)/The Sound of Music/The Sound of Music (1965) (Disc 02)"
- };
- var resolver = GetResolver();
- var result = resolver.ResolveDirectories(files).ToList();
- Assert.Single(result);
- Assert.Equal(2, result[0].Files.Count);
- }
- private void TestStackInfo(FileStack stack, string name, int fileCount)
- {
- Assert.Equal(fileCount, stack.Files.Count);
- Assert.Equal(name, stack.Name);
- }
- private StackResolver GetResolver()
- {
- return new StackResolver(_namingOptions);
- }
- }
- }
|