104 lines
3.7 KiB
C#
104 lines
3.7 KiB
C#
using System;
|
|
using Paca.Core.Platform;
|
|
using Paca.Core.QuickActions;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class ClipboardAndEncoderSecurityExtremeRedTests
|
|
{
|
|
private readonly QuickActionClipboardDetector _detector = new();
|
|
|
|
[Theory]
|
|
[InlineData("---")]
|
|
[InlineData("----")]
|
|
[InlineData("+++")]
|
|
[InlineData("***")]
|
|
[InlineData("///")]
|
|
[InlineData("+ - * /")]
|
|
[InlineData("(+)")]
|
|
[InlineData("====")]
|
|
public void QuickActionClipboardDetector_NonMathSymbols_DoesNotDetectAsMathExpression(string input)
|
|
{
|
|
var result = _detector.DetectIntent(input);
|
|
Assert.NotEqual(ClipboardIntentType.Expression, result.IntentType);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("12 + 34")]
|
|
[InlineData("100 / 5")]
|
|
[InlineData("(3 + 4) * 2")]
|
|
[InlineData("2 ^ 8")]
|
|
[InlineData("50 * 1.1")]
|
|
public void QuickActionClipboardDetector_ValidArithmetic_DetectsAsExpression(string input)
|
|
{
|
|
var result = _detector.DetectIntent(input);
|
|
Assert.Equal(ClipboardIntentType.Expression, result.IntentType);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("https://evil.com/login?ref=youtube.com")]
|
|
[InlineData("https://phishing.org/index.html?redirect=twitter.com")]
|
|
[InlineData("https://attacker.site/steal?feed=tiktok.com")]
|
|
[InlineData("https://notyoutube.com/watch?v=123")]
|
|
public void QuickActionClipboardDetector_PhishingDomainQuery_DoesNotDetectAsMediaDownload(string input)
|
|
{
|
|
var result = _detector.DetectIntent(input);
|
|
Assert.NotEqual(ClipboardIntentType.MediaDownload, result.IntentType);
|
|
Assert.Equal(ClipboardIntentType.BrowseUrl, result.IntentType);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("https://www.youtube.com/watch?v=dQw4w9WgXcQ")]
|
|
[InlineData("https://x.com/user/status/123456")]
|
|
[InlineData("https://stream.example.com/playlist.m3u8")]
|
|
[InlineData("https://video.example.com/movie.mp4")]
|
|
public void QuickActionClipboardDetector_RealMediaUrls_DetectsAsMediaDownload(string input)
|
|
{
|
|
var result = _detector.DetectIntent(input);
|
|
Assert.Equal(ClipboardIntentType.MediaDownload, result.IntentType);
|
|
}
|
|
|
|
private sealed class LocalMockRunner : IProcessRunner
|
|
{
|
|
public Task<ProcessResult> RunAsync(ProcessSpec spec, Action<string, string>? onLine, System.Threading.CancellationToken ct) =>
|
|
Task.FromResult(new ProcessResult(0, "", ""));
|
|
}
|
|
|
|
[Fact]
|
|
public void HardwareEncoderDetector_NullCapabilities_SafelyFallsBackToSoftwareCodecs()
|
|
{
|
|
var detector = new HardwareEncoderDetector(new LocalMockRunner());
|
|
|
|
Assert.Equal("libx264", detector.GetBestH264Encoder(null!));
|
|
Assert.Equal("libx265", detector.GetBestHevcEncoder(null!));
|
|
Assert.Equal("libsvtav1", detector.GetBestAv1Encoder(null!));
|
|
}
|
|
|
|
[Fact]
|
|
public void HardwareEncoderDetector_BuildEncodingArgs_NullOrWhitespaceEncoder_DefaultsToLibx264()
|
|
{
|
|
var args = HardwareEncoderDetector.BuildEncodingArgs(null!, 23, "fast");
|
|
Assert.Contains("-c:v", args);
|
|
Assert.Contains("libx264", args);
|
|
}
|
|
|
|
[Fact]
|
|
public void HardwareEncoderDetector_BuildEncodingArgs_NullPreset_DefaultsToFast()
|
|
{
|
|
var args = HardwareEncoderDetector.BuildEncodingArgs("libx264", 23, null!);
|
|
Assert.Contains("-preset", args);
|
|
Assert.Contains("fast", args);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(-10, 0)]
|
|
[InlineData(100, 63)]
|
|
public void HardwareEncoderDetector_BuildEncodingArgs_CrfClamping_ClampsBetweenZeroAnd63(int inputCrf, int expectedCrf)
|
|
{
|
|
var args = HardwareEncoderDetector.BuildEncodingArgs("libx264", inputCrf, "fast");
|
|
var crfIdx = Array.IndexOf(args, "-crf");
|
|
Assert.True(crfIdx >= 0);
|
|
Assert.Equal(expectedCrf.ToString(), args[crfIdx + 1]);
|
|
}
|
|
}
|