releases/tests/Paca.Tests/App/MediaToolsMenuWiringGateTests.cs

67 lines
3 KiB
C#

using System.IO;
using Paca.Core;
using Paca.Core.Platform;
using Paca.Tests.Infrastructure;
using Xunit;
namespace Paca.Tests.App;
public class MediaToolsMenuWiringGateTests
{
private static string AppProjectDir => Directory.Exists(Path.Combine(SourceTree.Root, "src", "Paca.App"))
? Path.Combine(SourceTree.Root, "src", "Paca.App")
: Path.Combine(SourceTree.Root, "Paca.App");
[Fact]
public void Gate_Core_Six_MediaEngines_Build_Filters_Accurately()
{
// 1. AudioVocalStemExtractor
var karaokeFilter = AudioVocalStemExtractor.BuildFfmpegStemFilter(AudioStemMode.VocalRemovalKaraoke);
Assert.Contains("pan=stereo", karaokeFilter);
// 2. VideoAspectAutoCropper
var cropFilter = VideoAspectAutoCropper.BuildReframingFilterArgs(ReframingMode.CenterCrop, 1080, 1920);
Assert.Contains("crop=", cropFilter);
Assert.Contains("1080:1920", cropFilter);
// 3. SubtitleBurnInEngine
var burnInCmd = SubtitleBurnInEngine.BuildBurnInCommandLine("in.mp4", "sub.srt", "out.mp4");
Assert.Contains("subtitles=", burnInCmd);
// 4. VideoTonemapEnhancer
var toneFilter = VideoTonemapEnhancer.BuildHdrToSdrFilter(TonemapAlgorithm.Mobius);
Assert.Contains("tonemap=", toneFilter);
// 5. VideoSpriteSheetGenerator
var spriteConfig = new SpriteSheetConfig(5, 5, 160, 90, 5);
var spriteCmd = VideoSpriteSheetGenerator.BuildFfmpegSpriteCommandLine("in.mp4", "sprite.jpg", spriteConfig);
Assert.Contains("tile=5x5", spriteCmd);
// 6. VideoIntroOutroTrimmer
var window = VideoIntroOutroTrimmer.CalculateTrimWindow(60.0, 5.0, 10.0);
var trimArgs = VideoIntroOutroTrimmer.BuildLosslessTrimCommandLine("in.mp4", "out.mp4", window.StartSec, window.DurationSec);
Assert.Contains("-ss 5.00", trimArgs);
Assert.Contains("-t 45.00", trimArgs);
}
[Fact]
public void Gate_MainWindow_Xaml_And_Usecases_Contain_MediaToolsWiring()
{
var xamlPath = Path.Combine(AppProjectDir, "MainWindow.xaml");
var usecasesPath = Path.Combine(AppProjectDir, "MainWindow.Usecases.cs");
Assert.True(File.Exists(xamlPath), $"MainWindow.xaml not found at {xamlPath}");
Assert.True(File.Exists(usecasesPath), $"MainWindow.Usecases.cs not found at {usecasesPath}");
var xaml = File.ReadAllText(xamlPath);
var usecases = File.ReadAllText(usecasesPath);
// XAML에 6대 미디어 도구 컨텍스트 메뉴 또는 헤더 항목 존재 검증
Assert.True(xaml.Contains("MediaTools") || xaml.Contains("미디어 도구") || xaml.Contains("MediaToolsMenu"),
"MainWindow.xaml must declare Media Tools context menu or action entry");
// Usecases에 미디어 도구 핸들러 배선 검증
Assert.True(usecases.Contains("ExecuteMediaTool") || usecases.Contains("AudioVocalStemExtractor") || usecases.Contains("HandleMediaToolAction"),
"MainWindow.Usecases.cs must implement media tools handler");
}
}