public async Task RunExiftoolGetImageSizeAndExposureTime() { // arrange var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); sut.Initialize(); // act var result = await sut.ExecuteAsync( new[] { "-s", "-ImageSize", "-ExposureTime", image, }) .ConfigureAwait(false); // assert result.Should().Be("ImageSize : 1712x2288" + Environment.NewLine); await sut.DisposeAsync().ConfigureAwait(false); // just for fun output.WriteLine(image); output.WriteLine(result); }
public async Task RunExiftool_ShouldReturnEmpty_WhenQueriedTagDoesNotExist() { // arrange var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); sut.Initialize(); // act var result = await sut.ExecuteAsync( new[] { "-ExposureTime", image, }) .ConfigureAwait(false); // assert result.Should().Be(string.Empty); await sut.DisposeAsync().ConfigureAwait(false); // just for fun output.WriteLine(image); output.WriteLine(result); }
public async Task RunExifToolWithThreeCommands() { // arrange var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); sut.Initialize(); // act var task1 = sut.ExecuteAsync(image); var task2 = sut.ExecuteAsync(image); var task3 = sut.ExecuteAsync(image); // assert var result3 = await task3.ConfigureAwait(false); result3.Should().NotBeNullOrEmpty(); var result2 = await task2.ConfigureAwait(false); result2.Should().NotBeNullOrEmpty(); var result1 = await task1.ConfigureAwait(false); result1.Should().NotBeNullOrEmpty(); await sut.DisposeAsync().ConfigureAwait(false); }
public async Task RunWithInputStreamTest() { // arrange var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); var sw = Stopwatch.StartNew(); sut.Initialize(); sw.Stop(); output.WriteLine($"It took {sw.Elapsed.ToString()} to Initialize exiftool"); // act sw.Reset(); sw.Start(); var version = string.Empty; for (var i = 0; i < Repeat; i++) { version = await sut.GetVersionAsync().ConfigureAwait(false); } sw.Stop(); await sut.DisposeAsync().ConfigureAwait(false); // assert output.WriteLine($"It took {sw.Elapsed.ToString()} to retrieve exiftool version {Repeat} times"); output.WriteLine($"Version: {version}"); version.Should().NotBeNullOrEmpty(); }
public async Task WriteCustomXmpTagsToImageTest() { // arrange #if NETCOREAPP3_0 await using var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.CreateWithCustomConfig()); #else using var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.CreateWithCustomConfig()); #endif sut.Initialize(); // act var @params = new[] { "-XMP-CoenmAsyncExifTool:MyCustomId=test123", "-XMP-CoenmAsyncExifTool:MyCustomTimestamp=2020:05:08 12:00:45+02:00", "-XMP-CoenmAsyncExifTool:MyCustomTags+=holidays", "-XMP-CoenmAsyncExifTool:MyCustomTags+=summer", image, }; var readResultBefore = await sut.ExecuteAsync(image).ConfigureAwait(false); var writeResult = await sut.ExecuteAsync(@params).ConfigureAwait(false); var readResultAfter = await sut.ExecuteAsync(image).ConfigureAwait(false); // assert writeResult.Trim().Should().Be("1 image files updated"); readResultBefore.Should().NotContain("My Custom Id : test123"); readResultBefore.Should().NotContain("My Custom Tags : holidays, summer"); readResultBefore.Should().NotContain("My Custom Timestamp : 2020:05:08 12:00:45"); readResultAfter.Should().Contain("My Custom Id : test123"); readResultAfter.Should().Contain("My Custom Tags : holidays, summer"); readResultAfter.Should().Contain("My Custom Timestamp : 2020:05:08 12:00:45+02:00"); // just for fun output.WriteLine(readResultAfter); }
public async Task WriteXmpSubjectsToImageTest() { // arrange #if NETCOREAPP3_0 await using var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); #else using var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); #endif sut.Initialize(); // act var @params = new[] { "-XMP-dc:Subject+=def", "-XMP-dc:Subject+=abc", "-XMP-dc:Subject=xyz", image, }; var readResultBefore = await sut.ExecuteAsync(image).ConfigureAwait(false); var writeResult = await sut.ExecuteAsync(@params).ConfigureAwait(false); var readResultAfter = await sut.ExecuteAsync(image).ConfigureAwait(false); // assert readResultBefore.Should().Contain("Subject : dog, new york, puppy"); readResultBefore.Should().NotContain("Subject : dog, new york, puppy, def, abc, xyz"); writeResult.Should().Be(" 1 image files updated" + Environment.NewLine); readResultAfter.Should().Contain("Subject : dog, new york, puppy, def, abc, xyz" + Environment.NewLine); // just for fun output.WriteLine(readResultAfter); }
public TestableAsyncFakeExifTool(IShell shell) : base(AsyncExifToolConfigurationFactory.Create()) { this.shell = shell; exiftoolControl = new ConcurrentDictionary <string, ExifToolCommandControlToken>(); CreateShellCalled = 0; }
public void Ctor_ShouldThrow_WhenLoggerIsNull() { // arrange ILogger logger = null; // act Action act = () => _ = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create(), logger); // assert act.Should().Throw <ArgumentNullException>(); }
public async Task InitAndDisposeTest() { // arrange var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); // act sut.Initialize(); await sut.DisposeAsync().ConfigureAwait(false); // assert // sut.IsClosed.Should().Be(true); }
public async Task RunExiftoolForVersionAndImageErrorTest() { // arrange var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); sut.Initialize(); // act var getMetadataNonExistingImageTask = sut.ExecuteAsync(image + "does not exist"); Func <Task> act = async() => await getMetadataNonExistingImageTask; var version = await sut.GetVersionAsync().ConfigureAwait(false); // assert act.Should().Throw <Exception>(); version.Should().NotBeNullOrEmpty(); await sut.DisposeAsync().ConfigureAwait(false); }
public async Task DisposeAsyncShouldCancelAllPendingRequestsTest() { // arrange var tasks = new Task <string> [Repeat]; Stopwatch sw; #if NETCOREAPP3_0 await using (var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create())) #else using (var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create())) #endif { sw = Stopwatch.StartNew(); sut.Initialize(); sw.Stop(); output.WriteLine($"It took {sw.Elapsed.ToString()} to Initialize exiftool"); // act sw.Reset(); sw.Start(); for (var i = 0; i < Repeat; i++) { tasks[i] = sut.GetVersionAsync(); } sw.Stop(); } // assert var countCancelled = 0; foreach (var t in tasks) { try { output.WriteLine(await t.ConfigureAwait(false)); } catch (TaskCanceledException) { countCancelled++; } } countCancelled.Should().BeGreaterOrEqualTo(Repeat / 2).And.NotBe(Repeat); output.WriteLine($"It took {sw.Elapsed.ToString()} to retrieve exiftool version {Repeat - countCancelled} times"); }
public async Task RunExiftoolForVersionAndImageTest() { // arrange var sut = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create()); sut.Initialize(); // act var version = await sut.GetVersionAsync().ConfigureAwait(false); var result = await sut.ExecuteAsync(image).ConfigureAwait(false); // assert version.Should().NotBeNullOrEmpty(); result.Should().NotBeNullOrEmpty(); await sut.DisposeAsync().ConfigureAwait(false); // just for fun output.WriteLine(version); output.WriteLine(result); }