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:
Yun Chan 2026-09-14 00:39:44 +09:00
parent a88aafa1e5
commit 0e568f1f0a
975 changed files with 130593 additions and 16783 deletions

View file

@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using Paca.Core;
using Xunit;
namespace Paca.Tests.Core;
public class AudioAlbumTrackSplitterGateTests
{
[Fact]
public void Gate409_AudioAlbumTrackSplitter_BuildsSilenceDetectArgs_Properly()
{
var args = AudioAlbumTrackSplitter.BuildSilenceDetectArgs("album.mp3", noiseDb: -35.0, durationSec: 2.0);
Assert.Contains("-i \"album.mp3\"", args);
Assert.Contains("silencedetect=noise=-35dB:d=2.0", args);
Assert.Contains("-f null -", args);
}
[Fact]
public void Gate410_AudioAlbumTrackSplitter_ParsesSilenceSegments_IntoTracks_WithMinDurationFilter()
{
var log = "[silence_detect @ 0x1234] silence_start: 177.5\n[silence_detect @ 0x1234] silence_end: 180.0 | silence_duration: 2.5\n[silence_detect @ 0x1234] silence_start: 357.0\n[silence_detect @ 0x1234] silence_end: 360.0 | silence_duration: 3.0";
var tracks = AudioAlbumTrackSplitter.ParseSilenceToTracks(log, totalDurationSec: 600.0, minTrackDurationSec: 30.0);
Assert.Equal(3, tracks.Count);
Assert.Equal(1, tracks[0].Index);
Assert.Equal(0.0, tracks[0].StartSec, 1);
Assert.Equal(177.5, tracks[0].EndSec, 1);
Assert.Equal(2, tracks[1].Index);
Assert.Equal(180.0, tracks[1].StartSec, 1);
Assert.Equal(357.0, tracks[1].EndSec, 1);
Assert.Equal(3, tracks[2].Index);
Assert.Equal(360.0, tracks[2].StartSec, 1);
Assert.Equal(600.0, tracks[2].EndSec, 1);
}
[Fact]
public void Gate411_AudioAlbumTrackSplitter_BuildsLosslessSplitCommand_PerTrack()
{
var track = new AlbumTrackSegment(1, 0.0, 177.5, "Track 01");
var cmd = AudioAlbumTrackSplitter.BuildSplitCommand("album.mp3", track, "out_01.mp3");
Assert.Contains("-ss 0.000", cmd);
Assert.Contains("-to 177.500", cmd);
Assert.Contains("-i \"album.mp3\"", cmd);
Assert.Contains("-c copy", cmd);
Assert.Contains("\"out_01.mp3\"", cmd);
}
[Fact]
public void Gate412_AudioAlbumTrackSplitter_GeneratesM3uPlaylist_Accurately()
{
var tracks = new List<AlbumTrackSegment>
{
new(1, 0.0, 180.0, "Intro Jam"),
new(2, 180.0, 420.0, "Main Song")
};
var m3u = AudioAlbumTrackSplitter.GenerateM3uPlaylist("My Album", tracks, "track_{0:D2}.mp3");
Assert.StartsWith("#EXTM3U", m3u.TrimStart());
Assert.Contains("#EXTINF:180,My Album - Intro Jam", m3u);
Assert.Contains("track_01.mp3", m3u);
Assert.Contains("#EXTINF:240,My Album - Main Song", m3u);
Assert.Contains("track_02.mp3", m3u);
}
}