From 3b8e4b024d301a10710d974c5f7155fc85316afa Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 16 Aug 2017 15:54:45 +0200 Subject: [PATCH 1/4] TestImageProvider can use custom decoder now --- .../Formats/Jpg/JpegDecoderTests.cs | 4 +-- .../TestUtilities/Factories/GenericFactory.cs | 2 ++ .../TestUtilities/Factories/ImageFactory.cs | 3 ++ .../ImageProviders/FileProvider.cs | 28 ++++++++++++--- .../ImageProviders/TestImageProvider.cs | 6 ++++ .../Tests/TestImageProviderTests.cs | 36 ++++++++++++++++++- 6 files changed, 71 insertions(+), 8 deletions(-) diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs index ff78f12e6f..e14375aabc 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs @@ -15,7 +15,7 @@ namespace ImageSharp.Tests using Xunit; - public class JpegDecoderTests : TestBase + public class JpegDecoderTests { public static string[] BaselineTestJpegs = { @@ -29,7 +29,7 @@ namespace ImageSharp.Tests // TODO: We should make this comparer less tolerant ... private static readonly ImageComparer VeryTolerantJpegComparer = ImageComparer.Tolerant(0.005f, pixelThresholdInPixelByteSum: 4); - + [Theory] [WithFileCollection(nameof(BaselineTestJpegs), PixelTypes.Rgba32 | PixelTypes.Rgba32 | PixelTypes.Argb32)] public void DecodeBaselineJpeg(TestImageProvider provider) diff --git a/tests/ImageSharp.Tests/TestUtilities/Factories/GenericFactory.cs b/tests/ImageSharp.Tests/TestUtilities/Factories/GenericFactory.cs index bfa70a2a50..efe548ee88 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Factories/GenericFactory.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Factories/GenericFactory.cs @@ -10,6 +10,8 @@ namespace ImageSharp.Tests using ImageSharp.PixelFormats; /// + /// TODO: Non-generic 'Image' class has been removed. We no longer need the factory pattern here! + /// /// Utility class to create specialized subclasses of generic classes (eg. ) /// Used as parameter for -based factory methods /// diff --git a/tests/ImageSharp.Tests/TestUtilities/Factories/ImageFactory.cs b/tests/ImageSharp.Tests/TestUtilities/Factories/ImageFactory.cs index 052a4c774f..efa08c736f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Factories/ImageFactory.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Factories/ImageFactory.cs @@ -7,6 +7,9 @@ namespace ImageSharp.Tests { using ImageSharp.PixelFormats; + /// + /// TODO: Non-generic 'Image' class has been removed. We no longer need the factory pattern here! + /// public class ImageFactory : GenericFactory { public override Image CreateImage(byte[] bytes) => Image.Load(bytes); diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs index 362924de59..7ae103cd29 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs @@ -8,6 +8,7 @@ namespace ImageSharp.Tests using System; using System.Collections.Concurrent; + using ImageSharp.Formats; using ImageSharp.PixelFormats; using Xunit.Abstractions; @@ -19,10 +20,10 @@ namespace ImageSharp.Tests { // Need PixelTypes in the dictionary key, because result images of TestImageProvider.FileProvider // are shared between PixelTypes.Color & PixelTypes.Rgba32 - private class Key : Tuple + private class Key : Tuple { - public Key(PixelTypes item1, string item2) - : base(item1, item2) + public Key(PixelTypes pixelType, string filePath, Type customDecoderType = null) + : base(pixelType, filePath, customDecoderType) { } } @@ -51,10 +52,27 @@ namespace ImageSharp.Tests fn => { TestFile testFile = TestFile.Create(this.FilePath); - return this.Factory.CreateImage(testFile.Bytes); + return Image.Load(testFile.Bytes); }); - return this.Factory.CreateImage(cachedImage); + return cachedImage.Clone(); + } + + public override Image GetImage(IImageDecoder decoder) + { + Guard.NotNull(decoder, nameof(decoder)); + + Key key = new Key(this.PixelType, this.FilePath, decoder.GetType()); + + Image cachedImage = cache.GetOrAdd( + key, + fn => + { + TestFile testFile = TestFile.Create(this.FilePath); + return Image.Load(testFile.Bytes, decoder); + }); + + return cachedImage.Clone(); } public override void Deserialize(IXunitSerializationInfo info) diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs index 8681bb334a..99d1125d72 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs @@ -8,6 +8,7 @@ namespace ImageSharp.Tests using System; using System.Reflection; + using ImageSharp.Formats; using ImageSharp.PixelFormats; using Xunit.Abstractions; @@ -82,6 +83,11 @@ namespace ImageSharp.Tests /// public abstract Image GetImage(); + public virtual Image GetImage(IImageDecoder decoder) + { + throw new NotSupportedException($"Decoder specific GetImage() is not supported with {this.GetType().Name}!"); + } + /// /// Returns an instance to the test case with the necessary traits. /// diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs index c01babb632..e9c4fc3d3d 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs @@ -3,12 +3,17 @@ // Licensed under the Apache License, Version 2.0. // +// ReSharper disable InconsistentNaming namespace ImageSharp.Tests { using System; + using System.IO; + using ImageSharp.Formats; using ImageSharp.PixelFormats; + using Moq; + using Xunit; using Xunit.Abstractions; @@ -85,6 +90,35 @@ namespace ImageSharp.Tests this.Output.WriteLine(fn); } + private class TestDecoder : IImageDecoder + { + public int InvocationCount { get; private set; } = 0; + + public Image Decode(Configuration configuration, Stream stream) + where TPixel : struct, IPixel + { + this.InvocationCount++; + return new Image(42, 42); + } + } + + + [Theory] + [WithFile(TestImages.Bmp.F, PixelTypes.Rgba32)] + public void GetImage_WithCustomDecoder_ShouldUtilizeCache(TestImageProvider provider) + where TPixel : struct, IPixel + { + Assert.NotNull(provider.Utility.SourceFileOrDescription); + + var decoder = new TestDecoder(); + + provider.GetImage(decoder); + Assert.Equal(1, decoder.InvocationCount); + + provider.GetImage(decoder); + Assert.Equal(1, decoder.InvocationCount); + } + public static string[] AllBmpFiles => TestImages.Bmp.All; [Theory] @@ -96,7 +130,7 @@ namespace ImageSharp.Tests Image image = provider.GetImage(); provider.Utility.SaveTestOutputFile(image, "png"); } - + [Theory] [WithSolidFilledImages(10, 20, 255, 100, 50, 200, PixelTypes.Rgba32 | PixelTypes.Argb32)] public void Use_WithSolidFilledImagesAttribute(TestImageProvider provider) From 6d41974f10eeaa610e4ede24d0b7a2e790af49b3 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 16 Aug 2017 17:47:43 +0200 Subject: [PATCH 2/4] introducing the "doNotAppendPixelType" feature --- .../Formats/Jpg/JpegDecoderTests.cs | 3 +- .../TestUtilities/ImagingTestCaseUtility.cs | 82 +++++++++++-------- .../TestUtilities/TestImageExtensions.cs | 35 ++++---- .../Tests/TestImageExtensionsTests.cs | 13 +++ tests/Images/External | 2 +- 5 files changed, 80 insertions(+), 55 deletions(-) diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs index e14375aabc..141105c487 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs @@ -37,7 +37,8 @@ namespace ImageSharp.Tests { using (Image image = provider.GetImage()) { - image.CompareToReferenceOutput(provider, VeryTolerantJpegComparer); + image.DebugSave(provider); + image.CompareToReferenceOutput(provider, VeryTolerantJpegComparer, appendPixelTypeToFileName: false); } } diff --git a/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs b/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs index 30cb1bac84..edb8bafac5 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs @@ -23,100 +23,106 @@ namespace ImageSharp.Tests /// /// Name of the TPixel in the owner /// - public string PixelTypeName { get; set; } = String.Empty; + public string PixelTypeName { get; set; } = string.Empty; /// /// The name of the file which is provided by /// Or a short string describing the image in the case of a non-file based image provider. /// - public string SourceFileOrDescription { get; set; } = String.Empty; + public string SourceFileOrDescription { get; set; } = string.Empty; /// /// By default this is the name of the test class, but it's possible to change it /// - public string TestGroupName { get; set; } = String.Empty; + public string TestGroupName { get; set; } = string.Empty; /// /// The name of the test case (by default) /// - public string TestName { get; set; } = String.Empty; - + public string TestName { get; set; } = string.Empty; - private string GetTestOutputFileNameImpl(string extension, string tag) + private string GetTestOutputFileNameImpl(string extension, string details, bool appendPixelTypeToFileName) { - string fn = String.Empty; + string fn = string.Empty; - if (String.IsNullOrWhiteSpace(extension)) + if (string.IsNullOrWhiteSpace(extension)) { extension = null; } fn = Path.GetFileNameWithoutExtension(this.SourceFileOrDescription); - if (String.IsNullOrWhiteSpace(extension)) + if (string.IsNullOrWhiteSpace(extension)) { extension = Path.GetExtension(this.SourceFileOrDescription); } - if (String.IsNullOrWhiteSpace(extension)) + if (string.IsNullOrWhiteSpace(extension)) { extension = ".bmp"; } + extension = extension.ToLower(); if (extension[0] != '.') { extension = '.' + extension; } - if (fn != String.Empty) fn = '_' + fn; + if (fn != string.Empty) fn = '_' + fn; + + string pixName = ""; - string pixName = this.PixelTypeName; - if (pixName != String.Empty) + if (appendPixelTypeToFileName) { - pixName = '_' + pixName; + pixName = this.PixelTypeName; + + if (pixName != string.Empty) + { + pixName = '_' + pixName; + } } - tag = tag ?? String.Empty; - if (tag != String.Empty) + details = details ?? string.Empty; + if (details != string.Empty) { - tag = '_' + tag; + details = '_' + details; } - - return $"{this.GetTestOutputDir()}/{this.TestName}{pixName}{fn}{tag}{extension}"; + return $"{this.GetTestOutputDir()}/{this.TestName}{pixName}{fn}{details}{extension}"; } /// /// Gets the recommended file name for the output of the test /// /// The required extension - /// The settings modifying the output path + /// The settings modifying the output path + /// A boolean indicating whether to append the pixel type to output file name. /// The file test name - public string GetTestOutputFileName(string extension = null, object settings = null) + public string GetTestOutputFileName(string extension = null, object testOutputDetails = null, bool appendPixelTypeToFileName = true) { - string tag = null; - string s = settings as string; + string detailsString = null; + string s = testOutputDetails as string; if (s != null) { - tag = s; + detailsString = s; } - else if (settings != null) + else if (testOutputDetails != null) { - Type type = settings.GetType(); + Type type = testOutputDetails.GetType(); TypeInfo info = type.GetTypeInfo(); if (info.IsPrimitive || info.IsEnum || type == typeof(decimal)) { - tag = settings.ToString(); + detailsString = testOutputDetails.ToString(); } else { - IEnumerable properties = settings.GetType().GetRuntimeProperties(); + IEnumerable properties = testOutputDetails.GetType().GetRuntimeProperties(); - tag = String.Join("_", properties.ToDictionary(x => x.Name, x => x.GetValue(settings)).Select(x => $"{x.Key}-{x.Value}")); + detailsString = String.Join("_", properties.ToDictionary(x => x.Name, x => x.GetValue(testOutputDetails)).Select(x => $"{x.Key}-{x.Value}")); } } - return this.GetTestOutputFileNameImpl(extension, tag); + return this.GetTestOutputFileNameImpl(extension, detailsString, appendPixelTypeToFileName); } @@ -132,10 +138,11 @@ namespace ImageSharp.Tests string extension = null, IImageEncoder encoder = null, object testOutputDetails = null, - bool grayscale = false) + bool grayscale = false, + bool appendPixelTypeToFileName = true) where TPixel : struct, IPixel { - string path = this.GetTestOutputFileName(extension: extension, settings: testOutputDetails); + string path = this.GetTestOutputFileName(extension, testOutputDetails, appendPixelTypeToFileName); string extension1 = Path.GetExtension(path); encoder = encoder ?? GetImageFormatByExtension(extension1, grayscale); @@ -145,8 +152,15 @@ namespace ImageSharp.Tests } } - internal string GetReferenceOutputFileName(string extension = null, object settings = null) => - TestEnvironment.GetReferenceOutputFileName(this.GetTestOutputFileName(extension, settings)); + internal string GetReferenceOutputFileName( + string extension, + object settings, + bool appendPixelTypeToFileName) + { + return TestEnvironment.GetReferenceOutputFileName( + this.GetTestOutputFileName(extension, settings, appendPixelTypeToFileName) + ); + } internal void Init(string typeName, string methodName) { diff --git a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs index 74fa16ad5f..35a7d17d40 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs @@ -22,13 +22,15 @@ namespace ImageSharp.Tests /// The image provider /// Details to be concatenated to the test output file, describing the parameters of the test. /// The extension - /// /// A boolean indicating whether we should save a smaller in size. + /// A boolean indicating whether we should save a smaller in size. + /// A boolean indicating whether to append the pixel type to the output file name. public static Image DebugSave( this Image image, ITestImageProvider provider, object testOutputDetails = null, string extension = "png", - bool grayscale = false) + bool grayscale = false, + bool appendPixelTypeToFileName = true) where TPixel : struct, IPixel { if (TestEnvironment.RunsOnCI) @@ -41,7 +43,8 @@ namespace ImageSharp.Tests image, extension, testOutputDetails: testOutputDetails, - grayscale: grayscale); + grayscale: grayscale, + appendPixelTypeToFileName: appendPixelTypeToFileName); return image; } @@ -52,17 +55,18 @@ namespace ImageSharp.Tests /// The pixel format /// The image /// The image provider - /// The to use /// Details to be concatenated to the test output file, describing the parameters of the test. /// The extension /// A boolean indicating whether we should debug save + compare against a grayscale image, smaller in size. + /// A boolean indicating whether to append the pixel type to the output file name. /// public static Image CompareToReferenceOutput( this Image image, ITestImageProvider provider, object testOutputDetails = null, string extension = "png", - bool grayscale = false) + bool grayscale = false, + bool appendPixelTypeToFileName = true) where TPixel : struct, IPixel { return CompareToReferenceOutput( @@ -71,7 +75,8 @@ namespace ImageSharp.Tests ImageComparer.Tolerant(), testOutputDetails, extension, - grayscale); + grayscale, + appendPixelTypeToFileName); } /// @@ -85,6 +90,7 @@ namespace ImageSharp.Tests /// Details to be concatenated to the test output file, describing the parameters of the test. /// The extension /// A boolean indicating whether we should debug save + compare against a grayscale image, smaller in size. + /// A boolean indicating whether to append the pixel type to the output file name. /// public static Image CompareToReferenceOutput( this Image image, @@ -92,21 +98,12 @@ namespace ImageSharp.Tests ImageComparer comparer, object testOutputDetails = null, string extension = "png", - bool grayscale = false) + bool grayscale = false, + bool appendPixelTypeToFileName = true) where TPixel : struct, IPixel { - string referenceOutputFile = provider.Utility.GetReferenceOutputFileName(extension, testOutputDetails); - extension = extension.ToLower(); - - if (!TestEnvironment.RunsOnCI) - { - provider.Utility.SaveTestOutputFile( - image, - extension, - testOutputDetails: testOutputDetails, - grayscale: grayscale); - } - + string referenceOutputFile = provider.Utility.GetReferenceOutputFileName(extension, testOutputDetails, appendPixelTypeToFileName); + if (!File.Exists(referenceOutputFile)) { throw new Exception("Reference output file missing: " + referenceOutputFile); diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs index 46cd86b5e5..9796c3dc6b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs @@ -36,6 +36,19 @@ namespace ImageSharp.Tests } } + [Theory] + [WithSolidFilledImages(10, 10, 0, 0, 255, PixelTypes.Rgba32)] + public void CompareToReferenceOutput_DoNotAppendPixelType( + TestImageProvider provider) + where TPixel : struct, IPixel + { + using (Image image = provider.GetImage()) + { + image.DebugSave(provider, appendPixelTypeToFileName: false); + image.CompareToReferenceOutput(provider, appendPixelTypeToFileName: false); + } + } + [Theory] [WithSolidFilledImages(10, 10, 0, 0, 255, PixelTypes.Rgba32)] public void CompareToReferenceOutput_WhenReferenceFileMissing_Throws(TestImageProvider provider) diff --git a/tests/Images/External b/tests/Images/External index f01bd8ace6..d5a93a6e27 160000 --- a/tests/Images/External +++ b/tests/Images/External @@ -1 +1 @@ -Subproject commit f01bd8ace62e69aa9be9fcdf8bc00789d8d75a53 +Subproject commit d5a93a6e271c05a6549730acafa7092ac2dc7f03 From 0661c03c848b31f2e764e5f65f1eb941565614e5 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 16 Aug 2017 17:56:04 +0200 Subject: [PATCH 3/4] CompareToReferenceOutput() no longer triggers DebugSave(). Need to be explicit in tests. --- .../Processors/Transforms/ResizeTests.cs | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs index 455cf55e65..61c73abd4d 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs @@ -16,7 +16,7 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms public class ResizeTests : FileTestBase { public static readonly string[] CommonTestImages = { TestImages.Png.CalliphoraPartial }; - + public static readonly TheoryData AllReSamplers = new TheoryData { @@ -47,6 +47,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms SizeF newSize = image.Size() * ratio; image.Mutate(x => x.Resize((Size)newSize, sampler, false)); string details = $"{name}-{ratio}"; + + image.DebugSave(provider, details); image.CompareToReferenceOutput(provider, details); } } @@ -59,6 +61,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms using (Image image = provider.GetImage()) { image.Mutate(x => x.Resize(image.Size() / 2, true)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -71,6 +75,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms using (Image image = provider.GetImage()) { image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2, true)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -100,6 +106,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms var destRectangle = new Rectangle(image.Width / 4, image.Height / 4, image.Width / 2, image.Height / 2); image.Mutate(x => x.Resize(image.Width, image.Height, new BicubicResampler(), sourceRectangle, destRectangle, false)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -112,6 +120,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms using (Image image = provider.GetImage()) { image.Mutate(x => x.Resize(image.Width / 3, 0, false)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -124,6 +134,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms using (Image image = provider.GetImage()) { image.Mutate(x => x.Resize(0, image.Height / 3, false)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -141,6 +153,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms }; image.Mutate(x => x.Resize(options)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -158,6 +172,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms }; image.Mutate(x => x.Resize(options)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -176,6 +192,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms }; image.Mutate(x => x.Resize(options)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -194,6 +212,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms }; image.Mutate(x => x.Resize(options)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -212,6 +232,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms }; image.Mutate(x => x.Resize(options)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -230,6 +252,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms }; image.Mutate(x => x.Resize(options)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } @@ -248,6 +272,8 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms }; image.Mutate(x => x.Resize(options)); + + image.DebugSave(provider); image.CompareToReferenceOutput(provider); } } From bfcf0e9e971a76bddc1f9510ca97d7cfa5261d18 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 16 Aug 2017 18:00:07 +0200 Subject: [PATCH 4/4] with 'appendPixelTypeToFileName: false' there is no need to duplicate Jpegs --- tests/Images/External | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Images/External b/tests/Images/External index d5a93a6e27..6996009ff5 160000 --- a/tests/Images/External +++ b/tests/Images/External @@ -1 +1 @@ -Subproject commit d5a93a6e271c05a6549730acafa7092ac2dc7f03 +Subproject commit 6996009ff537d1c9cbc2b93d692cd89bf8f2a5c7