releases/tests/Paca.Tests/Core/StreamHighlightClipperGateTests.cs

51 lines
1.9 KiB
C#

using System;
using Paca.Mobile.Core;
using Xunit;
namespace Paca.Tests.Core;
public class StreamHighlightClipperGateTests
{
[Fact]
public void Gate281_StreamHighlightClipper_BuildsLosslessCutArgs()
{
var args = StreamHighlightClipper.BuildFfmpegArgs("input.mp4", "output_clip.mp4", startSec: 10.5, durationSec: 30.0, ClipOutputFormat.Mp4Lossless);
Assert.Contains("-ss 10.5", args);
Assert.Contains("-t 30", args);
Assert.Contains("-c copy", args);
}
[Fact]
public void Gate282_StreamHighlightClipper_BuildsHighQualityGifArgs()
{
var args = StreamHighlightClipper.BuildFfmpegArgs("input.mp4", "output.gif", startSec: 5.0, durationSec: 8.0, ClipOutputFormat.AnimatedGif);
Assert.Contains("-ss 5", args);
Assert.Contains("-t 8", args);
Assert.Contains("palettegen", args);
Assert.Contains("paletteuse", args);
}
[Fact]
public void Gate283_StreamHighlightClipper_ValidatesClipBounds()
{
// Negative start clamped to 0
var args = StreamHighlightClipper.BuildFfmpegArgs("input.mp4", "out.mp4", startSec: -5.0, durationSec: 10.0, ClipOutputFormat.Mp4Lossless);
Assert.Contains("-ss 0", args);
// Zero or negative duration throws
Assert.Throws<ArgumentOutOfRangeException>(() =>
StreamHighlightClipper.BuildFfmpegArgs("input.mp4", "out.mp4", startSec: 10, durationSec: 0, ClipOutputFormat.Mp4Lossless));
}
[Fact]
public void Gate284_StreamHighlightClipper_CalculatesOutputName()
{
var outMp4 = StreamHighlightClipper.GenerateOutputFileName("MyStream.mp4", startSec: 45.0, durationSec: 15.0, ClipOutputFormat.Mp4Lossless);
Assert.Equal("MyStream_clip_45s_15s.mp4", outMp4);
var outGif = StreamHighlightClipper.GenerateOutputFileName("MyStream.mp4", startSec: 120.0, durationSec: 5.0, ClipOutputFormat.AnimatedGif);
Assert.Equal("MyStream_clip_120s_5s.gif", outGif);
}
}