コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 public TestableAsyncFakeExifTool(IShell shell)
     : base(AsyncExifToolConfigurationFactory.Create())
 {
     this.shell        = shell;
     exiftoolControl   = new ConcurrentDictionary <string, ExifToolCommandControlToken>();
     CreateShellCalled = 0;
 }
コード例 #8
0
        public void Ctor_ShouldThrow_WhenLoggerIsNull()
        {
            // arrange
            ILogger logger = null;

            // act
            Action act = () => _ = new AsyncExifTool(AsyncExifToolConfigurationFactory.Create(), logger);

            // assert
            act.Should().Throw <ArgumentNullException>();
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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");
        }
コード例 #12
0
        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);
        }