mirror of
https://github.com/rosenbjerg/FFMpegCore.git
synced 2025-12-14 18:15:44 +00:00
Merge pull request #578 from rosenbjerg/clean-up-unit-tests
Clean up unit tests
This commit is contained in:
commit
70668ce623
4 changed files with 61 additions and 44 deletions
|
|
@ -1,20 +1,10 @@
|
||||||
using System.Reflection;
|
using FFMpegCore.Arguments;
|
||||||
using FFMpegCore.Arguments;
|
|
||||||
using FluentAssertions;
|
|
||||||
|
|
||||||
namespace FFMpegCore.Test;
|
namespace FFMpegCore.Test;
|
||||||
|
|
||||||
[TestClass]
|
[TestClass]
|
||||||
public class FFMpegArgumentProcessorTest
|
public class FFMpegArgumentProcessorTest
|
||||||
{
|
{
|
||||||
[TestCleanup]
|
|
||||||
public void TestInitialize()
|
|
||||||
|
|
||||||
{
|
|
||||||
// After testing reset global configuration to null, to be not wrong for other test relying on configuration
|
|
||||||
typeof(GlobalFFOptions).GetField("_current", BindingFlags.NonPublic | BindingFlags.Static)!.SetValue(GlobalFFOptions.Current, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static FFMpegArgumentProcessor CreateArgumentProcessor()
|
private static FFMpegArgumentProcessor CreateArgumentProcessor()
|
||||||
{
|
{
|
||||||
return FFMpegArguments
|
return FFMpegArguments
|
||||||
|
|
@ -26,11 +16,20 @@ public class FFMpegArgumentProcessorTest
|
||||||
public void Processor_GlobalOptions_GetUsed()
|
public void Processor_GlobalOptions_GetUsed()
|
||||||
{
|
{
|
||||||
var globalWorkingDir = "Whatever";
|
var globalWorkingDir = "Whatever";
|
||||||
|
var processor = CreateArgumentProcessor();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir });
|
GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir });
|
||||||
|
|
||||||
var processor = CreateArgumentProcessor();
|
var options = processor.GetConfiguredOptions(null);
|
||||||
var options2 = processor.GetConfiguredOptions(null);
|
|
||||||
options2.WorkingDirectory.Should().Be(globalWorkingDir);
|
Assert.AreEqual(globalWorkingDir, options.WorkingDirectory);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
GlobalFFOptions.Configure(new FFOptions());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
|
|
@ -42,63 +41,81 @@ public class FFMpegArgumentProcessorTest
|
||||||
processor.Configure(options => options.WorkingDirectory = sessionWorkingDir);
|
processor.Configure(options => options.WorkingDirectory = sessionWorkingDir);
|
||||||
var options = processor.GetConfiguredOptions(null);
|
var options = processor.GetConfiguredOptions(null);
|
||||||
|
|
||||||
options.WorkingDirectory.Should().Be(sessionWorkingDir);
|
Assert.AreEqual(sessionWorkingDir, options.WorkingDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void Processor_Options_CanBeOverridden_And_Configured()
|
public void Processor_Options_CanBeOverridden_And_Configured()
|
||||||
{
|
{
|
||||||
var globalConfig = "Whatever";
|
var globalConfig = "Whatever";
|
||||||
GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalConfig, TemporaryFilesFolder = globalConfig, BinaryFolder = globalConfig });
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
var processor = CreateArgumentProcessor();
|
var processor = CreateArgumentProcessor();
|
||||||
|
|
||||||
var sessionTempDir = "./CurrentRunWorkingDir";
|
var sessionTempDir = "./CurrentRunWorkingDir";
|
||||||
processor.Configure(options => options.TemporaryFilesFolder = sessionTempDir);
|
processor.Configure(options => options.TemporaryFilesFolder = sessionTempDir);
|
||||||
|
|
||||||
var overrideOptions = new FFOptions { WorkingDirectory = "override" };
|
var overrideOptions = new FFOptions { WorkingDirectory = "override" };
|
||||||
|
|
||||||
|
GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalConfig, TemporaryFilesFolder = globalConfig, BinaryFolder = globalConfig });
|
||||||
var options = processor.GetConfiguredOptions(overrideOptions);
|
var options = processor.GetConfiguredOptions(overrideOptions);
|
||||||
|
|
||||||
options.Should().BeEquivalentTo(overrideOptions);
|
Assert.AreEqual(options.WorkingDirectory, overrideOptions.WorkingDirectory);
|
||||||
options.TemporaryFilesFolder.Should().BeEquivalentTo(sessionTempDir);
|
Assert.AreEqual(options.TemporaryFilesFolder, overrideOptions.TemporaryFilesFolder);
|
||||||
options.BinaryFolder.Should().NotBeEquivalentTo(globalConfig);
|
Assert.AreEqual(options.BinaryFolder, overrideOptions.BinaryFolder);
|
||||||
|
|
||||||
|
Assert.AreEqual(sessionTempDir, options.TemporaryFilesFolder);
|
||||||
|
Assert.AreNotEqual(globalConfig, options.BinaryFolder);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
GlobalFFOptions.Configure(new FFOptions());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void Options_Global_And_Session_Options_Can_Differ()
|
public void Options_Global_And_Session_Options_Can_Differ()
|
||||||
{
|
{
|
||||||
var globalWorkingDir = "Whatever";
|
var globalWorkingDir = "Whatever";
|
||||||
GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir });
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
var processor1 = CreateArgumentProcessor();
|
var processor1 = CreateArgumentProcessor();
|
||||||
var sessionWorkingDir = "./CurrentRunWorkingDir";
|
var sessionWorkingDir = "./CurrentRunWorkingDir";
|
||||||
processor1.Configure(options => options.WorkingDirectory = sessionWorkingDir);
|
processor1.Configure(options => options.WorkingDirectory = sessionWorkingDir);
|
||||||
var options1 = processor1.GetConfiguredOptions(null);
|
var options1 = processor1.GetConfiguredOptions(null);
|
||||||
options1.WorkingDirectory.Should().Be(sessionWorkingDir);
|
Assert.AreEqual(sessionWorkingDir, options1.WorkingDirectory);
|
||||||
|
|
||||||
var processor2 = CreateArgumentProcessor();
|
var processor2 = CreateArgumentProcessor();
|
||||||
|
GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir });
|
||||||
var options2 = processor2.GetConfiguredOptions(null);
|
var options2 = processor2.GetConfiguredOptions(null);
|
||||||
options2.WorkingDirectory.Should().Be(globalWorkingDir);
|
Assert.AreEqual(globalWorkingDir, options2.WorkingDirectory);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
GlobalFFOptions.Configure(new FFOptions());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void Concat_Escape()
|
public void Concat_Escape()
|
||||||
{
|
{
|
||||||
var arg = new DemuxConcatArgument(new[] { @"Heaven's River\05 - Investigation.m4b" });
|
var arg = new DemuxConcatArgument([@"Heaven's River\05 - Investigation.m4b"]);
|
||||||
arg.Values.Should().BeEquivalentTo(@"file 'Heaven'\''s River\05 - Investigation.m4b'");
|
CollectionAssert.AreEquivalent(new[] { @"file 'Heaven'\''s River\05 - Investigation.m4b'" }, arg.Values.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void Audible_Aaxc_Test()
|
public void Audible_Aaxc_Test()
|
||||||
{
|
{
|
||||||
var arg = new AudibleEncryptionKeyArgument("123", "456");
|
var arg = new AudibleEncryptionKeyArgument("123", "456");
|
||||||
arg.Text.Should().Be("-audible_key 123 -audible_iv 456");
|
Assert.AreEqual("-audible_key 123 -audible_iv 456", arg.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void Audible_Aax_Test()
|
public void Audible_Aax_Test()
|
||||||
{
|
{
|
||||||
var arg = new AudibleEncryptionKeyArgument("62689101");
|
var arg = new AudibleEncryptionKeyArgument("62689101");
|
||||||
arg.Text.Should().Be("-activation_bytes 62689101");
|
Assert.AreEqual("-activation_bytes 62689101", arg.Text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="FluentAssertions" Version="8.7.1"/>
|
|
||||||
<PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
|
<PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ namespace FFMpegCore.Test;
|
||||||
[TestClass]
|
[TestClass]
|
||||||
public class FFProbeTests
|
public class FFProbeTests
|
||||||
{
|
{
|
||||||
|
public TestContext TestContext { get; set; }
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public async Task Audio_FromStream_Duration()
|
public async Task Audio_FromStream_Duration()
|
||||||
{
|
{
|
||||||
|
|
@ -97,7 +99,8 @@ public class FFProbeTests
|
||||||
[Ignore("Consistently fails on GitHub Workflow ubuntu agents")]
|
[Ignore("Consistently fails on GitHub Workflow ubuntu agents")]
|
||||||
public async Task Uri_Duration()
|
public async Task Uri_Duration()
|
||||||
{
|
{
|
||||||
var fileAnalysis = await FFProbe.AnalyseAsync(new Uri("https://github.com/rosenbjerg/FFMpegCore/raw/master/FFMpegCore.Test/Resources/input_3sec.webm"), cancellationToken: TestContext.CancellationToken);
|
var fileAnalysis = await FFProbe.AnalyseAsync(new Uri("https://github.com/rosenbjerg/FFMpegCore/raw/master/FFMpegCore.Test/Resources/input_3sec.webm"),
|
||||||
|
cancellationToken: TestContext.CancellationToken);
|
||||||
Assert.IsNotNull(fileAnalysis);
|
Assert.IsNotNull(fileAnalysis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -282,6 +285,4 @@ public class FFProbeTests
|
||||||
var info = FFProbe.Analyse(TestResources.Mp4Video, customArguments: "-headers \"Hello: World\"");
|
var info = FFProbe.Analyse(TestResources.Mp4Video, customArguments: "-headers \"Hello: World\"");
|
||||||
Assert.AreEqual(3, info.Duration.Seconds);
|
Assert.AreEqual(3, info.Duration.Seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TestContext TestContext { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ public class VideoTest
|
||||||
{
|
{
|
||||||
private const int BaseTimeoutMilliseconds = 15_000;
|
private const int BaseTimeoutMilliseconds = 15_000;
|
||||||
|
|
||||||
|
public TestContext TestContext { get; set; }
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
[Timeout(BaseTimeoutMilliseconds, CooperativeCancellation = true)]
|
[Timeout(BaseTimeoutMilliseconds, CooperativeCancellation = true)]
|
||||||
public void Video_ToOGV()
|
public void Video_ToOGV()
|
||||||
|
|
@ -1072,6 +1074,4 @@ public class VideoTest
|
||||||
Assert.AreEqual("h264", outputInfo.PrimaryVideoStream.CodecName);
|
Assert.AreEqual("h264", outputInfo.PrimaryVideoStream.CodecName);
|
||||||
Assert.AreEqual("aac", outputInfo.PrimaryAudioStream!.CodecName);
|
Assert.AreEqual("aac", outputInfo.PrimaryAudioStream!.CodecName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TestContext TestContext { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue