67 lines
3 KiB
C#
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");
|
|
}
|
|
}
|