12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.IO;
- using System.Text;
- using System.Threading;
- using MediaBrowser.MediaEncoding.Subtitles;
- using MediaBrowser.Model.MediaInfo;
- using Microsoft.Extensions.Logging.Abstractions;
- using Xunit;
- namespace Jellyfin.MediaEncoding.Subtitles.Tests
- {
- public class SsaParserTests
- {
- private readonly SsaParser _parser = new SsaParser(new NullLogger<AssParser>());
- [Theory]
- [MemberData(nameof(Parse_MultipleDialogues_TestData))]
- public void Parse_MultipleDialogues_Success(string ssa, IReadOnlyList<SubtitleTrackEvent> expectedSubtitleTrackEvents)
- {
- using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(ssa)))
- {
- SubtitleTrackInfo subtitleTrackInfo = _parser.Parse(stream, CancellationToken.None);
- Assert.Equal(expectedSubtitleTrackEvents.Count, subtitleTrackInfo.TrackEvents.Count);
- for (int i = 0; i < expectedSubtitleTrackEvents.Count; ++i)
- {
- SubtitleTrackEvent expected = expectedSubtitleTrackEvents[i];
- SubtitleTrackEvent actual = subtitleTrackInfo.TrackEvents[i];
- Assert.Equal(expected.Id, actual.Id);
- Assert.Equal(expected.Text, actual.Text);
- Assert.Equal(expected.StartPositionTicks, actual.StartPositionTicks);
- Assert.Equal(expected.EndPositionTicks, actual.EndPositionTicks);
- }
- }
- }
- public static IEnumerable<object[]> Parse_MultipleDialogues_TestData()
- {
- yield return new object[]
- {
- @"[Events]
- Format: Layer, Start, End, Text
- Dialogue: ,0:00:01.18,0:00:01.85,dialogue1
- Dialogue: ,0:00:02.18,0:00:02.85,dialogue2
- Dialogue: ,0:00:03.18,0:00:03.85,dialogue3
- ",
- new List<SubtitleTrackEvent>
- {
- new SubtitleTrackEvent("1", "dialogue1")
- {
- StartPositionTicks = 11800000,
- EndPositionTicks = 18500000
- },
- new SubtitleTrackEvent("2", "dialogue2")
- {
- StartPositionTicks = 21800000,
- EndPositionTicks = 28500000
- },
- new SubtitleTrackEvent("3", "dialogue3")
- {
- StartPositionTicks = 31800000,
- EndPositionTicks = 38500000
- }
- }
- };
- }
- [Fact]
- public void Parse_Valid_Success()
- {
- using (var stream = File.OpenRead("Test Data/example.ssa"))
- {
- var parsed = _parser.Parse(stream, CancellationToken.None);
- Assert.Single(parsed.TrackEvents);
- var trackEvent = parsed.TrackEvents[0];
- Assert.Equal("1", trackEvent.Id);
- Assert.Equal(TimeSpan.Parse("00:00:01.18", CultureInfo.InvariantCulture).Ticks, trackEvent.StartPositionTicks);
- Assert.Equal(TimeSpan.Parse("00:00:06.85", CultureInfo.InvariantCulture).Ticks, trackEvent.EndPositionTicks);
- Assert.Equal("{\\pos(400,570)}Like an angel with pity on nobody", trackEvent.Text);
- }
- }
- }
- }
|