Fix VideoResolver and tests

pull/2950/head
Bond_009 5 years ago
parent 07143bcb68
commit 735e7c3f7d

@ -89,14 +89,14 @@ namespace Emby.Naming.Video
if (parseName) if (parseName)
{ {
var cleanDateTimeResult = CleanDateTime(name); var cleanDateTimeResult = CleanDateTime(name);
name = cleanDateTimeResult.Name;
year = cleanDateTimeResult.Year;
if (extraResult.ExtraType == null if (extraResult.ExtraType == null
&& TryCleanString(cleanDateTimeResult.Name, out ReadOnlySpan<char> newName)) && TryCleanString(cleanDateTimeResult.Name, out ReadOnlySpan<char> newName))
{ {
name = newName.ToString(); name = newName.ToString();
} }
year = cleanDateTimeResult.Year;
} }
return new VideoFileInfo return new VideoFileInfo

@ -1,7 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using Emby.Server.Implementations.HttpServer; using Emby.Server.Implementations.HttpServer;
using Emby.Server.Implementations.Updates; using Emby.Server.Implementations.Updates;
using MediaBrowser.Providers.Music;
using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; using static MediaBrowser.Controller.Extensions.ConfigurationExtensions;
namespace Emby.Server.Implementations namespace Emby.Server.Implementations

@ -46,6 +46,7 @@ namespace Jellyfin.Naming.Tests.Video
[InlineData("Maximum Ride - 2016 - WEBDL-1080p - x264 AC3.mkv", "Maximum Ride", 2016)] [InlineData("Maximum Ride - 2016 - WEBDL-1080p - x264 AC3.mkv", "Maximum Ride", 2016)]
// FIXME: [InlineData("Robin Hood [Multi-Subs] [2018].mkv", "Robin Hood", 2018)] // FIXME: [InlineData("Robin Hood [Multi-Subs] [2018].mkv", "Robin Hood", 2018)]
[InlineData(@"3.Days.to.Kill.2014.720p.BluRay.x264.YIFY.mkv", "3.Days.to.Kill", 2014)] // In this test case, running CleanDateTime first produces no date, so it will attempt to run CleanString first and then CleanDateTime again [InlineData(@"3.Days.to.Kill.2014.720p.BluRay.x264.YIFY.mkv", "3.Days.to.Kill", 2014)] // In this test case, running CleanDateTime first produces no date, so it will attempt to run CleanString first and then CleanDateTime again
[InlineData("3 days to kill (2005).mkv", "3 days to kill", 2005)]
public void CleanDateTimeTest(string input, string expectedName, int? expectedYear) public void CleanDateTimeTest(string input, string expectedName, int? expectedYear)
{ {
input = Path.GetFileName(input); input = Path.GetFileName(input);

@ -5,7 +5,7 @@ using Xunit;
namespace Jellyfin.Naming.Tests.Video namespace Jellyfin.Naming.Tests.Video
{ {
public class ExtraTests : BaseVideoTest public class ExtraTests
{ {
private readonly NamingOptions _videoOptions = new NamingOptions(); private readonly NamingOptions _videoOptions = new NamingOptions();

@ -4,26 +4,26 @@ using Xunit;
namespace Jellyfin.Naming.Tests.Video namespace Jellyfin.Naming.Tests.Video
{ {
public class Format3DTests : BaseVideoTest public class Format3DTests
{ {
private readonly NamingOptions _namingOptions = new NamingOptions();
[Fact] [Fact]
public void TestKodiFormat3D() public void TestKodiFormat3D()
{ {
var options = new NamingOptions(); Test("Super movie.3d.mp4", false, null);
Test("Super movie.3d.hsbs.mp4", true, "hsbs");
Test("Super movie.3d.mp4", false, null, options); Test("Super movie.3d.sbs.mp4", true, "sbs");
Test("Super movie.3d.hsbs.mp4", true, "hsbs", options); Test("Super movie.3d.htab.mp4", true, "htab");
Test("Super movie.3d.sbs.mp4", true, "sbs", options); Test("Super movie.3d.tab.mp4", true, "tab");
Test("Super movie.3d.htab.mp4", true, "htab", options); Test("Super movie 3d hsbs.mp4", true, "hsbs");
Test("Super movie.3d.tab.mp4", true, "tab", options);
Test("Super movie 3d hsbs.mp4", true, "hsbs", options);
} }
[Fact] [Fact]
public void Test3DName() public void Test3DName()
{ {
var result = var result =
GetParser().ResolveFile(@"C:/Users/media/Desktop/Video Test/Movies/Oblivion/Oblivion.3d.hsbs.mkv"); new VideoResolver(_namingOptions).ResolveFile(@"C:/Users/media/Desktop/Video Test/Movies/Oblivion/Oblivion.3d.hsbs.mkv");
Assert.Equal("hsbs", result.Format3D); Assert.Equal("hsbs", result.Format3D);
Assert.Equal("Oblivion", result.Name); Assert.Equal("Oblivion", result.Name);
@ -34,32 +34,31 @@ namespace Jellyfin.Naming.Tests.Video
{ {
// These were introduced for Media Browser 3 // These were introduced for Media Browser 3
// Kodi conventions are preferred but these still need to be supported // Kodi conventions are preferred but these still need to be supported
var options = new NamingOptions();
Test("Super movie.3d.mp4", false, null, options); Test("Super movie.3d.mp4", false, null);
Test("Super movie.3d.hsbs.mp4", true, "hsbs", options); Test("Super movie.3d.hsbs.mp4", true, "hsbs");
Test("Super movie.3d.sbs.mp4", true, "sbs", options); Test("Super movie.3d.sbs.mp4", true, "sbs");
Test("Super movie.3d.htab.mp4", true, "htab", options); Test("Super movie.3d.htab.mp4", true, "htab");
Test("Super movie.3d.tab.mp4", true, "tab", options); Test("Super movie.3d.tab.mp4", true, "tab");
Test("Super movie.hsbs.mp4", true, "hsbs", options); Test("Super movie.hsbs.mp4", true, "hsbs");
Test("Super movie.sbs.mp4", true, "sbs", options); Test("Super movie.sbs.mp4", true, "sbs");
Test("Super movie.htab.mp4", true, "htab", options); Test("Super movie.htab.mp4", true, "htab");
Test("Super movie.tab.mp4", true, "tab", options); Test("Super movie.tab.mp4", true, "tab");
Test("Super movie.sbs3d.mp4", true, "sbs3d", options); Test("Super movie.sbs3d.mp4", true, "sbs3d");
Test("Super movie.3d.mvc.mp4", true, "mvc", options); Test("Super movie.3d.mvc.mp4", true, "mvc");
Test("Super movie [3d].mp4", false, null, options); Test("Super movie [3d].mp4", false, null);
Test("Super movie [hsbs].mp4", true, "hsbs", options); Test("Super movie [hsbs].mp4", true, "hsbs");
Test("Super movie [fsbs].mp4", true, "fsbs", options); Test("Super movie [fsbs].mp4", true, "fsbs");
Test("Super movie [ftab].mp4", true, "ftab", options); Test("Super movie [ftab].mp4", true, "ftab");
Test("Super movie [htab].mp4", true, "htab", options); Test("Super movie [htab].mp4", true, "htab");
Test("Super movie [sbs3d].mp4", true, "sbs3d", options); Test("Super movie [sbs3d].mp4", true, "sbs3d");
} }
private void Test(string input, bool is3D, string format3D, NamingOptions options) private void Test(string input, bool is3D, string format3D)
{ {
var parser = new Format3DParser(options); var parser = new Format3DParser(_namingOptions);
var result = parser.Parse(input); var result = parser.Parse(input);

@ -8,6 +8,8 @@ namespace Jellyfin.Naming.Tests.Video
{ {
public class MultiVersionTests public class MultiVersionTests
{ {
private readonly NamingOptions _namingOptions = new NamingOptions();
// FIXME // FIXME
// [Fact] // [Fact]
public void TestMultiEdition1() public void TestMultiEdition1()
@ -430,8 +432,7 @@ namespace Jellyfin.Naming.Tests.Video
private VideoListResolver GetResolver() private VideoListResolver GetResolver()
{ {
var options = new NamingOptions(); return new VideoListResolver(_namingOptions);
return new VideoListResolver(options);
} }
} }
} }

@ -6,8 +6,10 @@ using Xunit;
namespace Jellyfin.Naming.Tests.Video namespace Jellyfin.Naming.Tests.Video
{ {
public class StackTests : BaseVideoTest public class StackTests
{ {
private readonly NamingOptions _namingOptions = new NamingOptions();
[Fact] [Fact]
public void TestSimpleStack() public void TestSimpleStack()
{ {
@ -446,7 +448,7 @@ namespace Jellyfin.Naming.Tests.Video
private StackResolver GetResolver() private StackResolver GetResolver()
{ {
return new StackResolver(new NamingOptions()); return new StackResolver(_namingOptions);
} }
} }
} }

@ -4,8 +4,10 @@ using Xunit;
namespace Jellyfin.Naming.Tests.Video namespace Jellyfin.Naming.Tests.Video
{ {
public class StubTests : BaseVideoTest public class StubTests
{ {
private readonly NamingOptions _namingOptions = new NamingOptions();
[Fact] [Fact]
public void TestStubs() public void TestStubs()
{ {
@ -27,16 +29,14 @@ namespace Jellyfin.Naming.Tests.Video
public void TestStubName() public void TestStubName()
{ {
var result = var result =
GetParser().ResolveFile(@"C:/Users/media/Desktop/Video Test/Movies/Oblivion/Oblivion.dvd.disc"); new VideoResolver(_namingOptions).ResolveFile(@"C:/Users/media/Desktop/Video Test/Movies/Oblivion/Oblivion.dvd.disc");
Assert.Equal("Oblivion", result.Name); Assert.Equal("Oblivion", result.Name);
} }
private void Test(string path, bool isStub, string stubType) private void Test(string path, bool isStub, string stubType)
{ {
var options = new NamingOptions(); var isStubResult = StubResolver.TryResolveFile(path, _namingOptions, out var stubTypeResult);
var isStubResult = StubResolver.TryResolveFile(path, options, out var stubTypeResult);
Assert.Equal(isStub, isStubResult); Assert.Equal(isStub, isStubResult);

@ -8,6 +8,7 @@ namespace Jellyfin.Naming.Tests.Video
{ {
public class VideoListResolverTests public class VideoListResolverTests
{ {
private readonly NamingOptions _namingOptions = new NamingOptions();
// FIXME // FIXME
// [Fact] // [Fact]
public void TestStackAndExtras() public void TestStackAndExtras()
@ -450,8 +451,7 @@ namespace Jellyfin.Naming.Tests.Video
private VideoListResolver GetResolver() private VideoListResolver GetResolver()
{ {
var options = new NamingOptions(); return new VideoListResolver(_namingOptions);
return new VideoListResolver(options);
} }
} }
} }

@ -1,275 +1,204 @@
using MediaBrowser.Model.Entities; using System.Collections;
using System.Collections.Generic;
using Emby.Naming.Common;
using Emby.Naming.Video;
using MediaBrowser.Model.Entities;
using Xunit; using Xunit;
namespace Jellyfin.Naming.Tests.Video namespace Jellyfin.Naming.Tests.Video
{ {
public class VideoResolverTests : BaseVideoTest public class VideoResolverTests : BaseVideoTest
{ {
// FIXME private readonly NamingOptions _namingOptions = new NamingOptions();
// [Fact]
public void TestSimpleFile() private class ResolveFileTestData : IEnumerable<object?[]>
{ {
var parser = GetParser(); public IEnumerator<object?[]> GetEnumerator()
{
var result = yield return new object?[]
parser.ResolveFile(@"/server/Movies/Brave (2007)/Brave (2006).mkv"); {
new VideoFileInfo()
Assert.Equal(2006, result.Year); {
Assert.False(result.IsStub); Path = @"/server/Movies/7 Psychos.mkv/7 Psychos.mkv",
Assert.False(result.Is3D); Container = "mkv",
Assert.Equal("Brave", result.Name); Name = "7 Psychos"
Assert.Null(result.ExtraType); }
} };
yield return new object?[]
// FIXME {
// [Fact] new VideoFileInfo()
public void TestSimpleFile2() {
{ Path = @"/server/Movies/3 days to kill (2005)/3 days to kill (2005).mkv",
var parser = GetParser(); Container = "mkv",
Name = "3 days to kill",
var result = Year = 2005
parser.ResolveFile(@"/server/Movies/Bad Boys (1995)/Bad Boys (1995).mkv"); }
};
Assert.Equal(1995, result.Year); yield return new object?[]
Assert.False(result.IsStub); {
Assert.False(result.Is3D); new VideoFileInfo()
Assert.Equal("Bad Boys", result.Name); {
Assert.Null(result.ExtraType); Path = @"/server/Movies/American Psycho/American.Psycho.mkv",
} Container = "mkv",
Name = "American.Psycho",
// FIXME }
// [Fact] };
public void TestSimpleFileWithNumericName() yield return new object?[]
{ {
var parser = GetParser(); new VideoFileInfo()
{
var result = Path = @"/server/Movies/brave (2007)/brave (2006).3d.sbs.mkv",
parser.ResolveFile(@"/server/Movies/300 (2007)/300 (2006).mkv"); Container = "mkv",
Name = "brave",
Assert.Equal(2006, result.Year); Year = 2006,
Assert.False(result.IsStub); Is3D = true,
Assert.False(result.Is3D); Format3D = "sbs",
Assert.Equal("300", result.Name); }
Assert.Null(result.ExtraType); };
} yield return new object?[]
{
// FIXME new VideoFileInfo()
// [Fact] {
public void TestExtra() Path = @"/server/Movies/300 (2007)/300 (2006).3d1.sbas.mkv",
{ Container = "mkv",
var parser = GetParser(); Name = "300",
Year = 2006
var result = }
parser.ResolveFile(@"/server/Movies/Brave (2007)/Brave (2006)-trailer.mkv"); };
yield return new object?[]
Assert.Equal(2006, result.Year); {
Assert.False(result.IsStub); new VideoFileInfo()
Assert.False(result.Is3D); {
Assert.Equal(ExtraType.Trailer, result.ExtraType); Path = @"/server/Movies/300 (2007)/300 (2006).3d.sbs.mkv",
Assert.Equal("Brave (2006)-trailer", result.Name); Container = "mkv",
} Name = "300",
Year = 2006,
// FIXME Is3D = true,
// [Fact] Format3D = "sbs",
public void TestExtraWithNumericName() }
{ };
var parser = GetParser(); yield return new object?[]
{
var result = new VideoFileInfo()
parser.ResolveFile(@"/server/Movies/300 (2007)/300 (2006)-trailer.mkv"); {
Path = @"/server/Movies/brave (2007)/brave (2006)-trailer.bluray.disc",
Assert.Equal(2006, result.Year); Container = "disc",
Assert.False(result.IsStub); Name = "brave",
Assert.False(result.Is3D); Year = 2006,
Assert.Equal("300 (2006)-trailer", result.Name); IsStub = true,
Assert.Equal(ExtraType.Trailer, result.ExtraType); StubType = "bluray",
} }
};
// FIXME yield return new object?[]
// [Fact] {
public void TestStubFileWithNumericName() new VideoFileInfo()
{ {
var parser = GetParser(); Path = @"/server/Movies/300 (2007)/300 (2006)-trailer.bluray.disc",
Container = "disc",
var result = Name = "300",
parser.ResolveFile(@"/server/Movies/300 (2007)/300 (2006).bluray.disc"); Year = 2006,
IsStub = true,
Assert.Equal(2006, result.Year); StubType = "bluray",
Assert.True(result.IsStub); }
Assert.Equal("bluray", result.StubType); };
Assert.False(result.Is3D); yield return new object?[]
Assert.Equal("300", result.Name); {
Assert.Null(result.ExtraType); new VideoFileInfo()
} {
Path = @"/server/Movies/Brave (2007)/Brave (2006).bluray.disc",
// FIXME Container = "disc",
// [Fact] Name = "Brave",
public void TestStubFile() Year = 2006,
{ IsStub = true,
var parser = GetParser(); StubType = "bluray",
}
var result = };
parser.ResolveFile(@"/server/Movies/Brave (2007)/Brave (2006).bluray.disc"); yield return new object?[]
{
Assert.Equal(2006, result.Year); new VideoFileInfo()
Assert.True(result.IsStub); {
Assert.Equal("bluray", result.StubType); Path = @"/server/Movies/300 (2007)/300 (2006).bluray.disc",
Assert.False(result.Is3D); Container = "disc",
Assert.Equal("Brave", result.Name); Name = "300",
Assert.Null(result.ExtraType); Year = 2006,
} IsStub = true,
StubType = "bluray",
// FIXME }
// [Fact] };
public void TestExtraStubWithNumericNameNotSupported() yield return new object?[]
{ {
var parser = GetParser(); new VideoFileInfo()
{
var result = Path = @"/server/Movies/300 (2007)/300 (2006)-trailer.mkv",
parser.ResolveFile(@"/server/Movies/300 (2007)/300 (2006)-trailer.bluray.disc"); Container = "mkv",
Name = "300",
Assert.Equal(2006, result.Year); Year = 2006,
Assert.True(result.IsStub); ExtraType = ExtraType.Trailer,
Assert.Equal("bluray", result.StubType); }
Assert.False(result.Is3D); };
Assert.Equal("300", result.Name); yield return new object?[]
Assert.Null(result.ExtraType); {
} new VideoFileInfo()
{
// FIXME Path = @"/server/Movies/Brave (2007)/Brave (2006)-trailer.mkv",
// [Fact] Container = "mkv",
public void TestExtraStubNotSupported() Name = "Brave",
{ Year = 2006,
// Using a stub for an extra is currently not supported ExtraType = ExtraType.Trailer,
var parser = GetParser(); }
};
var result = yield return new object?[]
parser.ResolveFile(@"/server/Movies/brave (2007)/brave (2006)-trailer.bluray.disc"); {
new VideoFileInfo()
Assert.Equal(2006, result.Year); {
Assert.True(result.IsStub); Path = @"/server/Movies/300 (2007)/300 (2006).mkv",
Assert.Equal("bluray", result.StubType); Container = "mkv",
Assert.False(result.Is3D); Name = "300",
Assert.Equal("brave", result.Name); Year = 2006
Assert.Null(result.ExtraType); }
} };
yield return new object?[]
// FIXME {
// [Fact] new VideoFileInfo()
public void Test3DFileWithNumericName() {
{ Path = @"/server/Movies/Bad Boys (1995)/Bad Boys (1995).mkv",
var parser = GetParser(); Container = "mkv",
Name = "Bad Boys",
var result = Year = 1995,
parser.ResolveFile(@"/server/Movies/300 (2007)/300 (2006).3d.sbs.mkv"); }
};
Assert.Equal(2006, result.Year); yield return new object?[]
Assert.False(result.IsStub); {
Assert.True(result.Is3D); new VideoFileInfo()
Assert.Equal("sbs", result.Format3D); {
Assert.Equal("300", result.Name); Path = @"/server/Movies/Brave (2007)/Brave (2006).mkv",
Assert.Null(result.ExtraType); Container = "mkv",
} Name = "Brave",
Year = 2006,
// FIXME }
// [Fact] };
public void TestBad3DFileWithNumericName() }
{
var parser = GetParser(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
var result =
parser.ResolveFile(@"/server/Movies/300 (2007)/300 (2006).3d1.sbas.mkv"); [Theory]
[ClassData(typeof(ResolveFileTestData))]
Assert.Equal(2006, result.Year); public void ResolveFile_ValidFileName_Success(VideoFileInfo? expectedResult)
Assert.False(result.IsStub); {
Assert.False(result.Is3D); var result = new VideoResolver(_namingOptions).ResolveFile(expectedResult.Path);
Assert.Equal("300", result.Name);
Assert.Null(result.ExtraType); Assert.Equal(result.Path, expectedResult.Path);
Assert.Null(result.Format3D); Assert.Equal(result.Container, expectedResult.Container);
} Assert.Equal(result.Name, expectedResult.Name);
Assert.Equal(result.Year, expectedResult.Year);
// FIXME Assert.Equal(result.ExtraType, expectedResult.ExtraType);
// [Fact] Assert.Equal(result.Format3D, expectedResult.Format3D);
public void Test3DFile() Assert.Equal(result.Is3D, expectedResult.Is3D);
{ Assert.Equal(result.IsStub, expectedResult.IsStub);
var parser = GetParser(); Assert.Equal(result.StubType, expectedResult.StubType);
Assert.Equal(result.IsDirectory, expectedResult.IsDirectory);
var result = Assert.Equal(result.FileNameWithoutExtension, expectedResult.FileNameWithoutExtension);
parser.ResolveFile(@"/server/Movies/brave (2007)/brave (2006).3d.sbs.mkv");
Assert.Equal(2006, result.Year);
Assert.False(result.IsStub);
Assert.True(result.Is3D);
Assert.Equal("sbs", result.Format3D);
Assert.Equal("brave", result.Name);
Assert.Null(result.ExtraType);
}
[Fact]
public void TestNameWithoutDate()
{
var parser = GetParser();
var result =
parser.ResolveFile(@"/server/Movies/American Psycho/American.Psycho.mkv");
Assert.Null(result.Year);
Assert.False(result.IsStub);
Assert.False(result.Is3D);
Assert.Null(result.Format3D);
Assert.Equal("American.Psycho", result.Name);
Assert.Null(result.ExtraType);
}
// FIXME
// [Fact]
public void TestCleanDateAndStringsSequence()
{
var parser = GetParser();
// In this test case, running CleanDateTime first produces no date, so it will attempt to run CleanString first and then CleanDateTime again
var result =
parser.ResolveFile(@"/server/Movies/3.Days.to.Kill/3.Days.to.Kill.2014.720p.BluRay.x264.YIFY.mkv");
Assert.Equal(2014, result.Year);
Assert.False(result.IsStub);
Assert.False(result.Is3D);
Assert.Null(result.Format3D);
Assert.Equal("3.Days.to.Kill", result.Name);
Assert.Null(result.ExtraType);
}
// FIXME
// [Fact]
public void TestCleanDateAndStringsSequence1()
{
var parser = GetParser();
// In this test case, running CleanDateTime first produces no date, so it will attempt to run CleanString first and then CleanDateTime again
var result =
parser.ResolveFile(@"/server/Movies/3 days to kill (2005)/3 days to kill (2005).mkv");
Assert.Equal(2005, result.Year);
Assert.False(result.IsStub);
Assert.False(result.Is3D);
Assert.Null(result.Format3D);
Assert.Equal("3 days to kill", result.Name);
Assert.Null(result.ExtraType);
}
[Fact]
public void TestFolderNameWithExtension()
{
var parser = GetParser();
var result =
parser.ResolveFile(@"/server/Movies/7 Psychos.mkv/7 Psychos.mkv");
Assert.Null(result.Year);
Assert.False(result.IsStub);
Assert.False(result.Is3D);
Assert.Equal("7 Psychos", result.Name);
Assert.Null(result.ExtraType);
} }
} }
} }

Loading…
Cancel
Save