feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
67
tests/Paca.Tests/App/MediaToolsMenuWiringGateTests.cs
Normal file
67
tests/Paca.Tests/App/MediaToolsMenuWiringGateTests.cs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
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");
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue