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 GetReadableFile_Valid_TestData() { var data = new TheoryData(); 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(); var result = await subtitleEncoder.GetReadableFile(mediaSource, subtitleStream, CancellationToken.None).ConfigureAwait(false); Assert.Equal(subtitleInfo.Path, result.Path); Assert.Equal(subtitleInfo.Protocol, result.Protocol); Assert.Equal(subtitleInfo.Format, result.Format); Assert.Equal(subtitleInfo.IsExternal, result.IsExternal); } } }