51 lines
1.9 KiB
C#
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);
|
|
}
|
|
}
|