|
|
|
using System.Threading;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using AutoFixture;
|
|
|
|
using AutoFixture.AutoMoq;
|
|
|
|
using MediaBrowser.MediaEncoding.Subtitles;
|
|
|
|
using MediaBrowser.Model.Dto;
|
|
|
|
using MediaBrowser.Model.Entities;
|
|
|
|
using MediaBrowser.Model.MediaInfo;
|
|
|
|
using Xunit;
|
|
|
|
|
|
|
|
namespace Jellyfin.MediaEncoding.Subtitles.Tests
|
|
|
|
{
|
|
|
|
public class SubtitleEncoderTests
|
|
|
|
{
|
|
|
|
public static TheoryData<MediaSourceInfo, MediaStream, SubtitleEncoder.SubtitleInfo> GetReadableFile_Valid_TestData()
|
|
|
|
{
|
|
|
|
var data = new TheoryData<MediaSourceInfo, MediaStream, SubtitleEncoder.SubtitleInfo>();
|
|
|
|
|
|
|
|
data.Add(
|
|
|
|
new MediaSourceInfo()
|
|
|
|
{
|
|
|
|
Protocol = MediaProtocol.File
|
|
|
|
},
|
|
|
|
new MediaStream()
|
|
|
|
{
|
|
|
|
Path = "/media/sub.ass",
|
|
|
|
IsExternal = true
|
|
|
|
},
|
|
|
|
new SubtitleEncoder.SubtitleInfo()
|
|
|
|
{
|
|
|
|
Path = "/media/sub.ass",
|
|
|
|
Protocol = MediaProtocol.File,
|
|
|
|
Format = "ass",
|
|
|
|
IsExternal = true
|
|
|
|
});
|
|
|
|
|
|
|
|
data.Add(
|
|
|
|
new MediaSourceInfo()
|
|
|
|
{
|
|
|
|
Protocol = MediaProtocol.File
|
|
|
|
},
|
|
|
|
new MediaStream()
|
|
|
|
{
|
|
|
|
Path = "/media/sub.ssa",
|
|
|
|
IsExternal = true
|
|
|
|
},
|
|
|
|
new SubtitleEncoder.SubtitleInfo()
|
|
|
|
{
|
|
|
|
Path = "/media/sub.ssa",
|
|
|
|
Protocol = MediaProtocol.File,
|
|
|
|
Format = "ssa",
|
|
|
|
IsExternal = true
|
|
|
|
});
|
|
|
|
|
|
|
|
data.Add(
|
|
|
|
new MediaSourceInfo()
|
|
|
|
{
|
|
|
|
Protocol = MediaProtocol.File
|
|
|
|
},
|
|
|
|
new MediaStream()
|
|
|
|
{
|
|
|
|
Path = "/media/sub.srt",
|
|
|
|
IsExternal = true
|
|
|
|
},
|
|
|
|
new SubtitleEncoder.SubtitleInfo()
|
|
|
|
{
|
|
|
|
Path = "/media/sub.srt",
|
|
|
|
Protocol = MediaProtocol.File,
|
|
|
|
Format = "srt",
|
|
|
|
IsExternal = true
|
|
|
|
});
|
|
|
|
|
|
|
|
data.Add(
|
|
|
|
new MediaSourceInfo()
|
|
|
|
{
|
|
|
|
Protocol = MediaProtocol.Http
|
|
|
|
},
|
|
|
|
new MediaStream()
|
|
|
|
{
|
|
|
|
Path = "/media/sub.ass",
|
|
|
|
IsExternal = true
|
|
|
|
},
|
|
|
|
new SubtitleEncoder.SubtitleInfo()
|
|
|
|
{
|
|
|
|
Path = "/media/sub.ass",
|
|
|
|
Protocol = MediaProtocol.File,
|
|
|
|
Format = "ass",
|
|
|
|
IsExternal = true
|
|
|
|
});
|
|
|
|
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
|
|
|
[Theory]
|
|
|
|
[MemberData(nameof(GetReadableFile_Valid_TestData))]
|
|
|
|
public async Task GetReadableFile_Valid_Success(MediaSourceInfo mediaSource, MediaStream subtitleStream, SubtitleEncoder.SubtitleInfo subtitleInfo)
|
|
|
|
{
|
|
|
|
var fixture = new Fixture().Customize(new AutoMoqCustomization { ConfigureMembers = true });
|
|
|
|
var subtitleEncoder = fixture.Create<SubtitleEncoder>();
|
|
|
|
var result = await subtitleEncoder.GetReadableFile(mediaSource, subtitleStream, CancellationToken.None);
|
|
|
|
Assert.Equal(subtitleInfo.Path, result.Path);
|
|
|
|
Assert.Equal(subtitleInfo.Protocol, result.Protocol);
|
|
|
|
Assert.Equal(subtitleInfo.Format, result.Format);
|
|
|
|
Assert.Equal(subtitleInfo.IsExternal, result.IsExternal);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|