From 4aa580e5f4d3481629944bc31c9bb9d3900dbb6d Mon Sep 17 00:00:00 2001 From: Malte Rosenbjerg Date: Thu, 16 Oct 2025 13:31:32 +0200 Subject: [PATCH 1/4] Remove FluentAssertions and update usages --- .../FFMpegArgumentProcessorTest.cs | 55 ++++++++++++------- FFMpegCore.Test/FFMpegCore.Test.csproj | 1 - 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs b/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs index 7607b04..253659c 100644 --- a/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs +++ b/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs @@ -1,6 +1,5 @@ using System.Reflection; using FFMpegCore.Arguments; -using FluentAssertions; namespace FFMpegCore.Test; @@ -26,11 +25,20 @@ public class FFMpegArgumentProcessorTest public void Processor_GlobalOptions_GetUsed() { var globalWorkingDir = "Whatever"; - GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir }); - var processor = CreateArgumentProcessor(); - var options2 = processor.GetConfiguredOptions(null); - options2.WorkingDirectory.Should().Be(globalWorkingDir); + try + { + GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir }); + + var processor = CreateArgumentProcessor(); + var options = processor.GetConfiguredOptions(null); + + Assert.AreEqual(globalWorkingDir, options.WorkingDirectory); + } + finally + { + GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = string.Empty }); + } } [TestMethod] @@ -42,7 +50,7 @@ public class FFMpegArgumentProcessorTest processor.Configure(options => options.WorkingDirectory = sessionWorkingDir); var options = processor.GetConfiguredOptions(null); - options.WorkingDirectory.Should().Be(sessionWorkingDir); + Assert.AreEqual(sessionWorkingDir, options.WorkingDirectory); } [TestMethod] @@ -51,17 +59,24 @@ public class FFMpegArgumentProcessorTest var globalConfig = "Whatever"; GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalConfig, TemporaryFilesFolder = globalConfig, BinaryFolder = globalConfig }); - var processor = CreateArgumentProcessor(); + try + { + var processor = CreateArgumentProcessor(); - var sessionTempDir = "./CurrentRunWorkingDir"; - processor.Configure(options => options.TemporaryFilesFolder = sessionTempDir); + var sessionTempDir = "./CurrentRunWorkingDir"; + processor.Configure(options => options.TemporaryFilesFolder = sessionTempDir); - var overrideOptions = new FFOptions { WorkingDirectory = "override" }; - var options = processor.GetConfiguredOptions(overrideOptions); + var overrideOptions = new FFOptions { WorkingDirectory = "override" }; + var options = processor.GetConfiguredOptions(overrideOptions); - options.Should().BeEquivalentTo(overrideOptions); - options.TemporaryFilesFolder.Should().BeEquivalentTo(sessionTempDir); - options.BinaryFolder.Should().NotBeEquivalentTo(globalConfig); + Assert.AreSame(options, overrideOptions); + Assert.AreEqual(sessionTempDir, options.TemporaryFilesFolder); + Assert.AreNotEqual(globalConfig, options.BinaryFolder); + } + finally + { + GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = string.Empty }); + } } [TestMethod] @@ -74,31 +89,31 @@ public class FFMpegArgumentProcessorTest var sessionWorkingDir = "./CurrentRunWorkingDir"; processor1.Configure(options => options.WorkingDirectory = sessionWorkingDir); var options1 = processor1.GetConfiguredOptions(null); - options1.WorkingDirectory.Should().Be(sessionWorkingDir); + Assert.AreEqual(sessionWorkingDir, options1.WorkingDirectory); var processor2 = CreateArgumentProcessor(); var options2 = processor2.GetConfiguredOptions(null); - options2.WorkingDirectory.Should().Be(globalWorkingDir); + Assert.AreEqual(globalWorkingDir, options2.WorkingDirectory); } [TestMethod] public void Concat_Escape() { - var arg = new DemuxConcatArgument(new[] { @"Heaven's River\05 - Investigation.m4b" }); - arg.Values.Should().BeEquivalentTo(@"file 'Heaven'\''s River\05 - Investigation.m4b'"); + var arg = new DemuxConcatArgument([@"Heaven's River\05 - Investigation.m4b"]); + CollectionAssert.AreEquivalent(new[] { @"file 'Heaven'\''s River\05 - Investigation.m4b'" }, arg.Values.ToArray()); } [TestMethod] public void Audible_Aaxc_Test() { 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] public void Audible_Aax_Test() { var arg = new AudibleEncryptionKeyArgument("62689101"); - arg.Text.Should().Be("-activation_bytes 62689101"); + Assert.AreEqual("-activation_bytes 62689101", arg.Text); } } diff --git a/FFMpegCore.Test/FFMpegCore.Test.csproj b/FFMpegCore.Test/FFMpegCore.Test.csproj index cc839aa..a4061ed 100644 --- a/FFMpegCore.Test/FFMpegCore.Test.csproj +++ b/FFMpegCore.Test/FFMpegCore.Test.csproj @@ -12,7 +12,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - all runtime; build; native; contentfiles; analyzers; buildtransitive From 671829b501e5568902beddf88f835a24a73221b2 Mon Sep 17 00:00:00 2001 From: Malte Rosenbjerg Date: Thu, 16 Oct 2025 13:32:25 +0200 Subject: [PATCH 2/4] Run code cleanup --- FFMpegCore.Test/FFProbeTests.cs | 7 ++++--- FFMpegCore.Test/VideoTest.cs | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/FFMpegCore.Test/FFProbeTests.cs b/FFMpegCore.Test/FFProbeTests.cs index 049fc2e..a702eed 100644 --- a/FFMpegCore.Test/FFProbeTests.cs +++ b/FFMpegCore.Test/FFProbeTests.cs @@ -5,6 +5,8 @@ namespace FFMpegCore.Test; [TestClass] public class FFProbeTests { + public TestContext TestContext { get; set; } + [TestMethod] public async Task Audio_FromStream_Duration() { @@ -97,7 +99,8 @@ public class FFProbeTests [Ignore("Consistently fails on GitHub Workflow ubuntu agents")] 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); } @@ -282,6 +285,4 @@ public class FFProbeTests var info = FFProbe.Analyse(TestResources.Mp4Video, customArguments: "-headers \"Hello: World\""); Assert.AreEqual(3, info.Duration.Seconds); } - - public TestContext TestContext { get; set; } } diff --git a/FFMpegCore.Test/VideoTest.cs b/FFMpegCore.Test/VideoTest.cs index dadb26e..9bcca7c 100644 --- a/FFMpegCore.Test/VideoTest.cs +++ b/FFMpegCore.Test/VideoTest.cs @@ -19,6 +19,8 @@ public class VideoTest { private const int BaseTimeoutMilliseconds = 15_000; + public TestContext TestContext { get; set; } + [TestMethod] [Timeout(BaseTimeoutMilliseconds, CooperativeCancellation = true)] public void Video_ToOGV() @@ -1072,6 +1074,4 @@ public class VideoTest Assert.AreEqual("h264", outputInfo.PrimaryVideoStream.CodecName); Assert.AreEqual("aac", outputInfo.PrimaryAudioStream!.CodecName); } - - public TestContext TestContext { get; set; } } From 9765b78d48bb1273a29514d19f09a8a5a0a92149 Mon Sep 17 00:00:00 2001 From: Malte Rosenbjerg Date: Thu, 16 Oct 2025 13:41:06 +0200 Subject: [PATCH 3/4] Add missing reset of GlobalOptions and reorder --- .../FFMpegArgumentProcessorTest.cs | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs b/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs index 253659c..eba37b3 100644 --- a/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs +++ b/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs @@ -25,12 +25,12 @@ public class FFMpegArgumentProcessorTest public void Processor_GlobalOptions_GetUsed() { var globalWorkingDir = "Whatever"; + var processor = CreateArgumentProcessor(); try { GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir }); - var processor = CreateArgumentProcessor(); var options = processor.GetConfiguredOptions(null); Assert.AreEqual(globalWorkingDir, options.WorkingDirectory); @@ -57,7 +57,6 @@ public class FFMpegArgumentProcessorTest public void Processor_Options_CanBeOverridden_And_Configured() { var globalConfig = "Whatever"; - GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalConfig, TemporaryFilesFolder = globalConfig, BinaryFolder = globalConfig }); try { @@ -67,6 +66,8 @@ public class FFMpegArgumentProcessorTest processor.Configure(options => options.TemporaryFilesFolder = sessionTempDir); var overrideOptions = new FFOptions { WorkingDirectory = "override" }; + + GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalConfig, TemporaryFilesFolder = globalConfig, BinaryFolder = globalConfig }); var options = processor.GetConfiguredOptions(overrideOptions); Assert.AreSame(options, overrideOptions); @@ -83,17 +84,24 @@ public class FFMpegArgumentProcessorTest public void Options_Global_And_Session_Options_Can_Differ() { var globalWorkingDir = "Whatever"; - GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir }); - var processor1 = CreateArgumentProcessor(); - var sessionWorkingDir = "./CurrentRunWorkingDir"; - processor1.Configure(options => options.WorkingDirectory = sessionWorkingDir); - var options1 = processor1.GetConfiguredOptions(null); - Assert.AreEqual(sessionWorkingDir, options1.WorkingDirectory); + try + { + var processor1 = CreateArgumentProcessor(); + var sessionWorkingDir = "./CurrentRunWorkingDir"; + processor1.Configure(options => options.WorkingDirectory = sessionWorkingDir); + var options1 = processor1.GetConfiguredOptions(null); + Assert.AreEqual(sessionWorkingDir, options1.WorkingDirectory); - var processor2 = CreateArgumentProcessor(); - var options2 = processor2.GetConfiguredOptions(null); - Assert.AreEqual(globalWorkingDir, options2.WorkingDirectory); + var processor2 = CreateArgumentProcessor(); + GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalWorkingDir }); + var options2 = processor2.GetConfiguredOptions(null); + Assert.AreEqual(globalWorkingDir, options2.WorkingDirectory); + } + finally + { + GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = string.Empty }); + } } [TestMethod] From 012a5ca74aa3098a0531524bf6902cc78a7624cc Mon Sep 17 00:00:00 2001 From: Malte Rosenbjerg Date: Thu, 16 Oct 2025 13:46:08 +0200 Subject: [PATCH 4/4] Improve reset of GlobalOptions --- .../FFMpegArgumentProcessorTest.cs | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs b/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs index eba37b3..1820b9b 100644 --- a/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs +++ b/FFMpegCore.Test/FFMpegArgumentProcessorTest.cs @@ -1,19 +1,10 @@ -using System.Reflection; -using FFMpegCore.Arguments; +using FFMpegCore.Arguments; namespace FFMpegCore.Test; [TestClass] 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() { return FFMpegArguments @@ -37,7 +28,7 @@ public class FFMpegArgumentProcessorTest } finally { - GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = string.Empty }); + GlobalFFOptions.Configure(new FFOptions()); } } @@ -70,13 +61,16 @@ public class FFMpegArgumentProcessorTest GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = globalConfig, TemporaryFilesFolder = globalConfig, BinaryFolder = globalConfig }); var options = processor.GetConfiguredOptions(overrideOptions); - Assert.AreSame(options, overrideOptions); + Assert.AreEqual(options.WorkingDirectory, overrideOptions.WorkingDirectory); + Assert.AreEqual(options.TemporaryFilesFolder, overrideOptions.TemporaryFilesFolder); + Assert.AreEqual(options.BinaryFolder, overrideOptions.BinaryFolder); + Assert.AreEqual(sessionTempDir, options.TemporaryFilesFolder); Assert.AreNotEqual(globalConfig, options.BinaryFolder); } finally { - GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = string.Empty }); + GlobalFFOptions.Configure(new FFOptions()); } } @@ -100,7 +94,7 @@ public class FFMpegArgumentProcessorTest } finally { - GlobalFFOptions.Configure(new FFOptions { WorkingDirectory = string.Empty }); + GlobalFFOptions.Configure(new FFOptions()); } }