using System; using Paca.Core; using Xunit; namespace Paca.Tests.Core; public class AudioDynamicRangeCompressorGateTests { [Fact] public void Gate429_AudioDynamicRangeCompressor_BuildsPresetFilter_Accurately() { var filter = AudioDynamicRangeCompressor.BuildFilter(CompressorPreset.NightListening); Assert.Contains("threshold=-24dB", filter); Assert.Contains("ratio=6", filter); Assert.Contains("alimiter=limit=-1dB", filter); } [Fact] public void Gate430_AudioDynamicRangeCompressor_BuildsCustomCompressorFilter() { var filter = AudioDynamicRangeCompressor.BuildCustomFilter( thresholdDb: -22.0, ratio: 5.0, attackMs: 8.0, releaseMs: 120.0, makeupDb: 5.0, limitPeakDb: -0.5 ); Assert.Contains("threshold=-22dB", filter); Assert.Contains("ratio=5", filter); Assert.Contains("attack=8", filter); Assert.Contains("release=120", filter); Assert.Contains("makeup=5dB", filter); Assert.Contains("alimiter=limit=-0.5dB", filter); } [Fact] public void Gate431_AudioDynamicRangeCompressor_HandlesPassthrough() { var filter = AudioDynamicRangeCompressor.BuildFilter(CompressorPreset.None); Assert.Equal("anull", filter); } [Fact] public void Gate432_AudioDynamicRangeCompressor_BuildsFfmpegArgs_Properly() { var args = AudioDynamicRangeCompressor.BuildFfmpegArgs("in.mp4", "out.mp4", CompressorPreset.NightListening, copyVideo: true); Assert.Contains("-i \"in.mp4\"", args); Assert.Contains("-c:v copy", args); Assert.Contains("-af \"acompressor=", args); Assert.Contains("-c:a aac -b:a 192k", args); Assert.Contains("\"out.mp4\"", args); } }