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

68 lines
2.2 KiB
C#

using System;
using Paca.Core;
using Xunit;
namespace Paca.Tests.Core;
public class SubtitleBurnInEngineGateTests
{
[Fact]
public void Gate357_SubtitleBurnInEngine_BuildsForceStyleString_Correctly()
{
var style = new SubtitleBurnInStyle
{
FontName = "Arial",
FontSize = 24,
PrimaryColor = "&H00FFFFFF",
OutlineColor = "&H00000000",
OutlineWidth = 2,
MarginV = 40,
Alignment = 2 // Bottom center
};
var forceStyle = SubtitleBurnInEngine.BuildForceStyleString(style);
Assert.Contains("FontName=Arial", forceStyle);
Assert.Contains("FontSize=24", forceStyle);
Assert.Contains("PrimaryColour=&H00FFFFFF", forceStyle);
Assert.Contains("Outline=2", forceStyle);
Assert.Contains("MarginV=40", forceStyle);
Assert.Contains("Alignment=2", forceStyle);
}
[Fact]
public void Gate358_SubtitleBurnInEngine_EscapesWindowsPath_ForFfmpegFilter()
{
var winPath = "C:\\subtitles\\video_track.srt";
var escaped = SubtitleBurnInEngine.EscapeSubtitlePathForFfmpeg(winPath);
// In ffmpeg filtergraph, colon must be escaped as '\:' and backslashes replaced with forward slashes
Assert.Equal("C\\:/subtitles/video_track.srt", escaped);
}
[Fact]
public void Gate359_SubtitleBurnInEngine_ProvidesDefaultReadableStyle()
{
var def = SubtitleBurnInStyle.Default;
Assert.Equal(22, def.FontSize);
Assert.Equal(2, def.Alignment); // Bottom center
Assert.True(def.OutlineWidth >= 2);
}
[Fact]
public void Gate360_SubtitleBurnInEngine_BuildsFullCommandLine_WithAudioCopy()
{
var cmd = SubtitleBurnInEngine.BuildBurnInCommandLine(
inputVideoPath: "C:\\videos\\clip.mp4",
subtitlePath: "C:\\videos\\clip.srt",
outputVideoPath: "C:\\videos\\clip_subbed.mp4"
);
Assert.Contains("-i \"C:\\videos\\clip.mp4\"", cmd);
Assert.Contains("-vf \"subtitles='C\\:/videos/clip.srt'", cmd);
Assert.Contains("force_style=", cmd);
Assert.Contains("-c:v libx264 -crf 20 -c:a copy", cmd);
Assert.EndsWith("\"C:\\videos\\clip_subbed.mp4\" -y", cmd);
}
}