releases/tests/Paca.Tests/Core/DualSubtitleComposerGateTests.cs

84 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using Paca.Mobile.Core;
using Xunit;
namespace Paca.Tests.Core;
public class DualSubtitleComposerGateTests
{
[Fact]
public void Gate289_DualSubtitleComposer_AlignsOverlappingCues_Simultaneously()
{
var primaryCues = new List<SubtitleCue>
{
new(10.0, 15.0, "Hello world")
};
var secondaryCues = new List<SubtitleCue>
{
new(11.0, 14.0, "안녕하세요")
};
var composer = new DualSubtitleComposer(primaryCues, secondaryCues);
// At 12.0s, both are active
var active = composer.GetActiveDualCue(currentPosSec: 12.0);
Assert.NotNull(active);
Assert.Equal("Hello world", active!.PrimaryText);
Assert.Equal("안녕하세요", active.SecondaryText);
Assert.True(active.HasDual);
}
[Fact]
public void Gate290_DualSubtitleComposer_HandlesMissingSecondary_Gracefully()
{
var primaryCues = new List<SubtitleCue>
{
new(10.0, 15.0, "Hello world")
};
var secondaryCues = new List<SubtitleCue>
{
new(11.0, 14.0, "안녕하세요")
};
var composer = new DualSubtitleComposer(primaryCues, secondaryCues);
// At 10.5s, only primary is active
var active = composer.GetActiveDualCue(currentPosSec: 10.5);
Assert.NotNull(active);
Assert.Equal("Hello world", active!.PrimaryText);
Assert.Null(active.SecondaryText);
Assert.False(active.HasDual);
}
[Fact]
public void Gate291_DualSubtitleComposer_StylesSecondarySubtitle_WithSmallerFontToken()
{
var style = DualSubtitleComposer.DefaultSecondaryStyle;
Assert.True(style.FontScale < 1.0, "Secondary subtitle should be slightly smaller (e.g. 0.8x)");
Assert.False(string.IsNullOrEmpty(style.TextColorHex));
}
[Fact]
public void Gate292_AudioTrackSelector_SelectsPreferredLanguage()
{
var tracks = new List<MobileAudioTrack>
{
new(0, "ja", "Japanese (Original)"),
new(1, "en", "English (Dub)"),
new(2, "ko", "Korean (Dub)")
};
var selected = AudioTrackSelector.PickPreferredTrack(tracks, preferredLangCode: "ko");
Assert.NotNull(selected);
Assert.Equal(2, selected!.Index);
Assert.Equal("ko", selected.LanguageCode);
// Fallback to first if preferred not found
var fallback = AudioTrackSelector.PickPreferredTrack(tracks, preferredLangCode: "fr");
Assert.NotNull(fallback);
Assert.Equal(0, fallback!.Index);
}
}