From 15a7a557f27f70209b66af8d36d669d46272d354 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 2 Feb 2020 14:27:32 +1100 Subject: [PATCH] Revert `using` declaration changes for until we establish guidelines. --- .../Advanced/AdvancedImageExtensionsTests.cs | 137 +++--- .../Common/StreamExtensionsTests.cs | 42 +- .../Drawing/DrawImageTests.cs | 192 +++++---- .../Formats/Bmp/BmpDecoderTests.cs | 346 +++++++++------ .../Formats/Bmp/BmpEncoderTests.cs | 113 +++-- .../Formats/Bmp/BmpMetadataTests.cs | 14 +- .../Formats/GeneralFormatTests.cs | 119 ++--- .../Formats/Gif/GifDecoderTests.cs | 74 ++-- .../Formats/Gif/GifEncoderTests.cs | 162 ++++--- .../Formats/Gif/GifMetadataTests.cs | 86 ++-- .../Formats/ImageFormatManagerTests.cs | 12 +- .../Jpg/Block8x8FTests.CopyToBufferArea.cs | 48 ++- .../Formats/Jpg/GenericBlock8x8Tests.cs | 80 ++-- .../Formats/Jpg/JpegDecoderTests.Metadata.cs | 88 ++-- .../Formats/Jpg/JpegDecoderTests.cs | 34 +- .../Formats/Jpg/JpegEncoderTests.cs | 107 +++-- .../Jpg/JpegImagePostProcessorTests.cs | 58 +-- .../Formats/Jpg/ParseStreamTests.cs | 60 +-- .../Formats/Jpg/SpectralJpegTests.cs | 20 +- .../Formats/Jpg/Utils/JpegFixture.cs | 10 +- .../Formats/Jpg/Utils/LibJpegTools.cs | 46 +- .../Formats/Jpg/Utils/VerifyJpeg.cs | 8 +- .../Formats/Png/PngDecoderTests.Chunks.cs | 18 +- .../Formats/Png/PngDecoderTests.cs | 102 +++-- .../Formats/Png/PngEncoderTests.cs | 224 +++++----- .../Formats/Png/PngMetadataTests.cs | 185 ++++---- .../Formats/Png/PngSmokeTests.cs | 44 +- .../Formats/Tga/TgaDecoderTests.cs | 120 ++++-- .../Formats/Tga/TgaEncoderTests.cs | 66 +-- .../Formats/Tga/TgaTestUtils.cs | 28 +- .../Helpers/ParallelHelperTests.cs | 60 +-- .../Helpers/RowIntervalTests.cs | 18 +- .../IO/DoubleBufferedStreamReaderTests.cs | 190 ++++---- .../ImageSharp.Tests/Image/ImageCloneTests.cs | 116 ++--- .../ImageFrameCollectionTests.Generic.cs | 30 +- .../ImageFrameCollectionTests.NonGeneric.cs | 81 ++-- .../Image/ImageRotationTests.cs | 12 +- .../Image/ImageTests.DetectFormat.cs | 8 +- .../Image/ImageTests.LoadPixelData.cs | 40 +- ..._FileSystemPath_UseDefaultConfiguration.cs | 40 +- ...s.Load_FromBytes_UseGlobalConfiguration.cs | 40 +- ...Load_FromStream_UseDefaultConfiguration.cs | 40 +- .../ImageSharp.Tests/Image/ImageTests.Save.cs | 28 +- .../Image/ImageTests.WrapMemory.cs | 88 ++-- tests/ImageSharp.Tests/Image/ImageTests.cs | 56 +-- .../ImageSharp.Tests/Memory/Buffer2DTests.cs | 106 +++-- .../Memory/BufferAreaTests.cs | 112 ++--- .../Metadata/ImageMetadataTests.cs | 16 +- .../Profiles/Exif/ExifProfileTests.cs | 70 +-- .../Metadata/Profiles/Exif/ExifValueTests.cs | 6 +- .../PorterDuffCompositorTests.cs | 32 +- ...elOperationsTests.Rgba32OperationsTests.cs | 22 +- .../PixelOperations/PixelOperationsTests.cs | 8 +- .../HistogramEqualizationTests.cs | 114 ++--- .../Binarization/BinaryDitherTests.cs | 60 +-- .../Binarization/BinaryThresholdTest.cs | 22 +- .../Processors/Convolution/BokehBlurTest.cs | 26 +- .../Processors/Convolution/DetectEdgesTest.cs | 40 +- .../Processors/Transforms/AutoOrientTests.cs | 28 +- .../Processors/Transforms/PadTest.cs | 36 +- .../Processors/Transforms/ResizeTests.cs | 407 ++++++++++-------- .../Processors/Transforms/RotateFlipTests.cs | 12 +- .../Transforms/AffineTransformTests.cs | 102 +++-- .../Transforms/ProjectiveTransformTests.cs | 68 +-- .../Transforms/TransformsHelpersTest.cs | 22 +- .../LoadResizeSaveProfilingBenchmarks.cs | 28 +- .../ResizeProfilingBenchmarks.cs | 10 +- .../Quantization/QuantizedImageTests.cs | 40 +- .../Quantization/WuQuantizerTests.cs | 176 ++++---- .../TestUtilities/ImagingTestCaseUtility.cs | 12 +- .../ReferenceCodecs/MagickReferenceDecoder.cs | 64 +-- .../ReferenceCodecs/SystemDrawingBridge.cs | 60 +-- .../SystemDrawingReferenceDecoder.cs | 48 ++- .../SystemDrawingReferenceEncoder.cs | 8 +- .../TestUtilities/TestImageExtensions.cs | 62 +-- .../TestUtilities/Tests/ImageComparerTests.cs | 104 +++-- .../Tests/MagickReferenceCodecTests.cs | 32 +- .../Tests/SystemDrawingReferenceCodecTests.cs | 78 ++-- .../Tests/TestImageExtensionsTests.cs | 60 ++- .../Tests/TestImageProviderTests.cs | 50 ++- 80 files changed, 3219 insertions(+), 2412 deletions(-) diff --git a/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs b/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs index 877e3a9f8e..f6b51e8c54 100644 --- a/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs @@ -20,20 +20,23 @@ namespace SixLabors.ImageSharp.Tests.Advanced public void WhenMemoryIsOwned(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image0 = provider.GetImage(); - var targetBuffer = new TPixel[image0.Width * image0.Height]; - - // Act: - Memory memory = image0.GetPixelMemory(); - - // Assert: - Assert.Equal(image0.Width * image0.Height, memory.Length); - memory.Span.CopyTo(targetBuffer); - - using Image image1 = provider.GetImage(); - - // We are using a copy of the original image for assertion - image1.ComparePixelBufferTo(targetBuffer); + using (Image image0 = provider.GetImage()) + { + var targetBuffer = new TPixel[image0.Width * image0.Height]; + + // Act: + Memory memory = image0.GetPixelMemory(); + + // Assert: + Assert.Equal(image0.Width * image0.Height, memory.Length); + memory.Span.CopyTo(targetBuffer); + + using (Image image1 = provider.GetImage()) + { + // We are using a copy of the original image for assertion + image1.ComparePixelBufferTo(targetBuffer); + } + } } [Theory] @@ -42,23 +45,27 @@ namespace SixLabors.ImageSharp.Tests.Advanced public void WhenMemoryIsConsumed(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image0 = provider.GetImage(); - var targetBuffer = new TPixel[image0.Width * image0.Height]; - image0.GetPixelSpan().CopyTo(targetBuffer); + using (Image image0 = provider.GetImage()) + { + var targetBuffer = new TPixel[image0.Width * image0.Height]; + image0.GetPixelSpan().CopyTo(targetBuffer); - var managerOfExternalMemory = new TestMemoryManager(targetBuffer); + var managerOfExternalMemory = new TestMemoryManager(targetBuffer); - Memory externalMemory = managerOfExternalMemory.Memory; + Memory externalMemory = managerOfExternalMemory.Memory; - using var image1 = Image.WrapMemory(externalMemory, image0.Width, image0.Height); - Memory internalMemory = image1.GetPixelMemory(); - Assert.Equal(targetBuffer.Length, internalMemory.Length); - Assert.True(Unsafe.AreSame(ref targetBuffer[0], ref internalMemory.Span[0])); + using (var image1 = Image.WrapMemory(externalMemory, image0.Width, image0.Height)) + { + Memory internalMemory = image1.GetPixelMemory(); + Assert.Equal(targetBuffer.Length, internalMemory.Length); + Assert.True(Unsafe.AreSame(ref targetBuffer[0], ref internalMemory.Span[0])); - image0.ComparePixelBufferTo(internalMemory.Span); + image0.ComparePixelBufferTo(internalMemory.Span); + } - // Make sure externalMemory works after destruction: - image0.ComparePixelBufferTo(externalMemory.Span); + // Make sure externalMemory works after destruction: + image0.ComparePixelBufferTo(externalMemory.Span); + } } } @@ -68,21 +75,24 @@ namespace SixLabors.ImageSharp.Tests.Advanced public void GetPixelRowMemory(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var targetBuffer = new TPixel[image.Width * image.Height]; - - // Act: - for (int y = 0; y < image.Height; y++) + using (Image image = provider.GetImage()) { - Memory rowMemory = image.GetPixelRowMemory(y); - rowMemory.Span.CopyTo(targetBuffer.AsSpan(image.Width * y)); - } + var targetBuffer = new TPixel[image.Width * image.Height]; - // Assert: - using Image image1 = provider.GetImage(); + // Act: + for (int y = 0; y < image.Height; y++) + { + Memory rowMemory = image.GetPixelRowMemory(y); + rowMemory.Span.CopyTo(targetBuffer.AsSpan(image.Width * y)); + } - // We are using a copy of the original image for assertion - image1.ComparePixelBufferTo(targetBuffer); + // Assert: + using (Image image1 = provider.GetImage()) + { + // We are using a copy of the original image for assertion + image1.ComparePixelBufferTo(targetBuffer); + } + } } [Theory] @@ -91,21 +101,24 @@ namespace SixLabors.ImageSharp.Tests.Advanced public void GetPixelRowSpan(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var targetBuffer = new TPixel[image.Width * image.Height]; - - // Act: - for (int y = 0; y < image.Height; y++) + using (Image image = provider.GetImage()) { - Span rowMemory = image.GetPixelRowSpan(y); - rowMemory.CopyTo(targetBuffer.AsSpan(image.Width * y)); - } + var targetBuffer = new TPixel[image.Width * image.Height]; - // Assert: - using Image image1 = provider.GetImage(); + // Act: + for (int y = 0; y < image.Height; y++) + { + Span rowMemory = image.GetPixelRowSpan(y); + rowMemory.CopyTo(targetBuffer.AsSpan(image.Width * y)); + } - // We are using a copy of the original image for assertion - image1.ComparePixelBufferTo(targetBuffer); + // Assert: + using (Image image1 = provider.GetImage()) + { + // We are using a copy of the original image for assertion + image1.ComparePixelBufferTo(targetBuffer); + } + } } #pragma warning disable 0618 @@ -115,19 +128,21 @@ namespace SixLabors.ImageSharp.Tests.Advanced public unsafe void DangerousGetPinnableReference_CopyToBuffer(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var targetBuffer = new TPixel[image.Width * image.Height]; - - ref byte source = ref Unsafe.As(ref targetBuffer[0]); - ref byte dest = ref Unsafe.As(ref image.DangerousGetPinnableReferenceToPixelBuffer()); - fixed (byte* targetPtr = &source) - fixed (byte* pixelBasePtr = &dest) + using (Image image = provider.GetImage()) { - uint dataSizeInBytes = (uint)(image.Width * image.Height * Unsafe.SizeOf()); - Unsafe.CopyBlock(targetPtr, pixelBasePtr, dataSizeInBytes); + var targetBuffer = new TPixel[image.Width * image.Height]; + + ref byte source = ref Unsafe.As(ref targetBuffer[0]); + ref byte dest = ref Unsafe.As(ref image.DangerousGetPinnableReferenceToPixelBuffer()); + fixed (byte* targetPtr = &source) + fixed (byte* pixelBasePtr = &dest) + { + uint dataSizeInBytes = (uint)(image.Width * image.Height * Unsafe.SizeOf()); + Unsafe.CopyBlock(targetPtr, pixelBasePtr, dataSizeInBytes); + } + + image.ComparePixelBufferTo(targetBuffer); } - - image.ComparePixelBufferTo(targetBuffer); } } } diff --git a/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs b/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs index eb0015c52b..d47d5da8ef 100644 --- a/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs @@ -15,43 +15,51 @@ namespace SixLabors.ImageSharp.Tests.Common [InlineData(-1)] public void Skip_CountZeroOrLower_PositionNotChanged(int count) { - using var memStream = new MemoryStream(5); - memStream.Position = 4; - memStream.Skip(count); + using (var memStream = new MemoryStream(5)) + { + memStream.Position = 4; + memStream.Skip(count); - Assert.Equal(4, memStream.Position); + Assert.Equal(4, memStream.Position); + } } [Fact] public void Skip_SeekableStream_SeekIsCalled() { - using var seekableStream = new SeekableStream(4); - seekableStream.Skip(4); + using (var seekableStream = new SeekableStream(4)) + { + seekableStream.Skip(4); - Assert.Equal(4, seekableStream.Offset); - Assert.Equal(SeekOrigin.Current, seekableStream.Loc); + Assert.Equal(4, seekableStream.Offset); + Assert.Equal(SeekOrigin.Current, seekableStream.Loc); + } } [Fact] public void Skip_NonSeekableStream_BytesAreRead() { - using var nonSeekableStream = new NonSeekableStream(); - nonSeekableStream.Skip(5); + using (var nonSeekableStream = new NonSeekableStream()) + { + nonSeekableStream.Skip(5); - Assert.Equal(3, nonSeekableStream.Counts.Count); + Assert.Equal(3, nonSeekableStream.Counts.Count); - Assert.Equal(5, nonSeekableStream.Counts[0]); - Assert.Equal(3, nonSeekableStream.Counts[1]); - Assert.Equal(1, nonSeekableStream.Counts[2]); + Assert.Equal(5, nonSeekableStream.Counts[0]); + Assert.Equal(3, nonSeekableStream.Counts[1]); + Assert.Equal(1, nonSeekableStream.Counts[2]); + } } [Fact] public void Skip_EofStream_NoExceptionIsThrown() { - using var eofStream = new EofStream(7); - eofStream.Skip(7); + using (var eofStream = new EofStream(7)) + { + eofStream.Skip(7); - Assert.Equal(0, eofStream.Position); + Assert.Equal(0, eofStream.Position); + } } private class SeekableStream : MemoryStream diff --git a/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs b/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs index e1ad5a0a84..31e63a2fd7 100644 --- a/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs +++ b/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs @@ -33,22 +33,24 @@ namespace SixLabors.ImageSharp.Tests.Drawing public void ImageBlendingMatchesSvgSpecExamples(TestImageProvider provider, PixelColorBlendingMode mode) where TPixel : struct, IPixel { - using Image background = provider.GetImage(); - using var source = Image.Load(TestFile.Create(TestImages.Png.Ducky).Bytes); - background.Mutate(x => x.DrawImage(source, mode, 1F)); - background.DebugSave( - provider, - new { mode = mode }, - appendPixelTypeToFileName: false, - appendSourceFileOrDescription: false); - - var comparer = ImageComparer.TolerantPercentage(0.01F); - background.CompareToReferenceOutput( - comparer, - provider, - new { mode = mode }, - appendPixelTypeToFileName: false, - appendSourceFileOrDescription: false); + using (Image background = provider.GetImage()) + using (var source = Image.Load(TestFile.Create(TestImages.Png.Ducky).Bytes)) + { + background.Mutate(x => x.DrawImage(source, mode, 1F)); + background.DebugSave( + provider, + new { mode = mode }, + appendPixelTypeToFileName: false, + appendSourceFileOrDescription: false); + + var comparer = ImageComparer.TolerantPercentage(0.01F); + background.CompareToReferenceOutput( + comparer, + provider, + new { mode = mode }, + appendPixelTypeToFileName: false, + appendSourceFileOrDescription: false); + } } [Theory] @@ -70,26 +72,28 @@ namespace SixLabors.ImageSharp.Tests.Drawing float opacity) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using var blend = Image.Load(TestFile.Create(brushImage).Bytes); - var size = new Size(image.Width * 3 / 4, image.Height * 3 / 4); - var position = new Point(image.Width / 8, image.Height / 8); - blend.Mutate(x => x.Resize(size.Width, size.Height, KnownResamplers.Bicubic)); - image.Mutate(x => x.DrawImage(blend, position, mode, opacity)); - FormattableString testInfo = $"{System.IO.Path.GetFileNameWithoutExtension(brushImage)}-{mode}-{opacity}"; - - var encoder = new PngEncoder(); - - if (provider.PixelType == PixelTypes.Rgba64) + using (Image image = provider.GetImage()) + using (var blend = Image.Load(TestFile.Create(brushImage).Bytes)) { - encoder.BitDepth = PngBitDepth.Bit16; + var size = new Size(image.Width * 3 / 4, image.Height * 3 / 4); + var position = new Point(image.Width / 8, image.Height / 8); + blend.Mutate(x => x.Resize(size.Width, size.Height, KnownResamplers.Bicubic)); + image.Mutate(x => x.DrawImage(blend, position, mode, opacity)); + FormattableString testInfo = $"{System.IO.Path.GetFileNameWithoutExtension(brushImage)}-{mode}-{opacity}"; + + var encoder = new PngEncoder(); + + if (provider.PixelType == PixelTypes.Rgba64) + { + encoder.BitDepth = PngBitDepth.Bit16; + } + + image.DebugSave(provider, testInfo, encoder: encoder); + image.CompareToReferenceOutput( + ImageComparer.TolerantPercentage(0.01f), + provider, + testInfo); } - - image.DebugSave(provider, testInfo, encoder: encoder); - image.CompareToReferenceOutput( - ImageComparer.TolerantPercentage(0.01f), - provider, - testInfo); } [Theory] @@ -99,17 +103,19 @@ namespace SixLabors.ImageSharp.Tests.Drawing { byte[] brushData = TestFile.Create(TestImages.Png.Ducky).Bytes; - using Image image = provider.GetImage(); - using Image brushImage = provider.PixelType == PixelTypes.Rgba32 - ? (Image)Image.Load(brushData) - : Image.Load(brushData); - image.Mutate(c => c.DrawImage(brushImage, 0.5f)); - - image.DebugSave(provider, appendSourceFileOrDescription: false); - image.CompareToReferenceOutput( - ImageComparer.TolerantPercentage(0.01f), - provider, - appendSourceFileOrDescription: false); + using (Image image = provider.GetImage()) + using (Image brushImage = provider.PixelType == PixelTypes.Rgba32 + ? (Image)Image.Load(brushData) + : Image.Load(brushData)) + { + image.Mutate(c => c.DrawImage(brushImage, 0.5f)); + + image.DebugSave(provider, appendSourceFileOrDescription: false); + image.CompareToReferenceOutput( + ImageComparer.TolerantPercentage(0.01f), + provider, + appendSourceFileOrDescription: false); + } } [Theory] @@ -119,23 +125,25 @@ namespace SixLabors.ImageSharp.Tests.Drawing [WithSolidFilledImages(100, 100, "White", PixelTypes.Rgba32, -25, -30)] public void WorksWithDifferentLocations(TestImageProvider provider, int x, int y) { - using Image background = provider.GetImage(); - using var overlay = new Image(50, 50); - overlay.GetPixelSpan().Fill(Rgba32.Black); - - background.Mutate(c => c.DrawImage(overlay, new Point(x, y), PixelColorBlendingMode.Normal, 1F)); - - background.DebugSave( - provider, - testOutputDetails: $"{x}_{y}", - appendPixelTypeToFileName: false, - appendSourceFileOrDescription: false); - - background.CompareToReferenceOutput( - provider, - testOutputDetails: $"{x}_{y}", - appendPixelTypeToFileName: false, - appendSourceFileOrDescription: false); + using (Image background = provider.GetImage()) + using (var overlay = new Image(50, 50)) + { + overlay.GetPixelSpan().Fill(Rgba32.Black); + + background.Mutate(c => c.DrawImage(overlay, new Point(x, y), PixelColorBlendingMode.Normal, 1F)); + + background.DebugSave( + provider, + testOutputDetails: $"{x}_{y}", + appendPixelTypeToFileName: false, + appendSourceFileOrDescription: false); + + background.CompareToReferenceOutput( + provider, + testOutputDetails: $"{x}_{y}", + appendPixelTypeToFileName: false, + appendSourceFileOrDescription: false); + } } [Theory] @@ -143,27 +151,29 @@ namespace SixLabors.ImageSharp.Tests.Drawing public void DrawTransformed(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using var blend = Image.Load(TestFile.Create(TestImages.Bmp.Car).Bytes); - AffineTransformBuilder builder = new AffineTransformBuilder() - .AppendRotationDegrees(45F) - .AppendScale(new SizeF(.25F, .25F)) - .AppendTranslation(new PointF(10, 10)); - - // Apply a background color so we can see the translation. - blend.Mutate(x => x.Transform(builder)); - blend.Mutate(x => x.BackgroundColor(Color.HotPink)); - - // Lets center the matrix so we can tell whether any cut-off issues we may have belong to the drawing processor - var position = new Point((image.Width - blend.Width) / 2, (image.Height - blend.Height) / 2); - image.Mutate(x => x.DrawImage(blend, position, .75F)); - - image.DebugSave(provider, appendSourceFileOrDescription: false, appendPixelTypeToFileName: false); - image.CompareToReferenceOutput( - ImageComparer.TolerantPercentage(0.002f), - provider, - appendSourceFileOrDescription: false, - appendPixelTypeToFileName: false); + using (Image image = provider.GetImage()) + using (var blend = Image.Load(TestFile.Create(TestImages.Bmp.Car).Bytes)) + { + AffineTransformBuilder builder = new AffineTransformBuilder() + .AppendRotationDegrees(45F) + .AppendScale(new SizeF(.25F, .25F)) + .AppendTranslation(new PointF(10, 10)); + + // Apply a background color so we can see the translation. + blend.Mutate(x => x.Transform(builder)); + blend.Mutate(x => x.BackgroundColor(Color.HotPink)); + + // Lets center the matrix so we can tell whether any cut-off issues we may have belong to the drawing processor + var position = new Point((image.Width - blend.Width) / 2, (image.Height - blend.Height) / 2); + image.Mutate(x => x.DrawImage(blend, position, .75F)); + + image.DebugSave(provider, appendSourceFileOrDescription: false, appendPixelTypeToFileName: false); + image.CompareToReferenceOutput( + ImageComparer.TolerantPercentage(0.002f), + provider, + appendSourceFileOrDescription: false, + appendPixelTypeToFileName: false); + } } [Theory] @@ -173,15 +183,17 @@ namespace SixLabors.ImageSharp.Tests.Drawing [WithSolidFilledImages(100, 100, 255, 255, 255, PixelTypes.Rgba32, -30, 130)] public void NonOverlappingImageThrows(TestImageProvider provider, int x, int y) { - using Image background = provider.GetImage(); - using var overlay = new Image(Configuration.Default, 10, 10, Rgba32.Black); - ImageProcessingException ex = Assert.Throws(Test); + using (Image background = provider.GetImage()) + using (var overlay = new Image(Configuration.Default, 10, 10, Rgba32.Black)) + { + ImageProcessingException ex = Assert.Throws(Test); - Assert.Contains("does not overlap", ex.ToString()); + Assert.Contains("does not overlap", ex.ToString()); - void Test() - { - background.Mutate(context => context.DrawImage(overlay, new Point(x, y), new GraphicsOptions())); + void Test() + { + background.Mutate(context => context.DrawImage(overlay, new Point(x, y), new GraphicsOptions())); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs index 9b98eca06e..fb3348be72 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs @@ -37,11 +37,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_MiscellaneousBitmaps(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - if (TestEnvironment.IsWindows) + using (Image image = provider.GetImage(new BmpDecoder())) { - image.CompareToOriginal(provider); + image.DebugSave(provider); + if (TestEnvironment.IsWindows) + { + image.CompareToOriginal(provider); + } } } @@ -50,9 +52,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeBitfields(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -61,9 +65,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_Inverted(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -72,9 +78,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_1Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, new SystemDrawingReferenceDecoder()); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, new SystemDrawingReferenceDecoder()); + } } [Theory] @@ -82,13 +90,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_4Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - - // The Magick Reference Decoder can not decode 4-Bit bitmaps, so only execute this on windows. - if (TestEnvironment.IsWindows) + using (Image image = provider.GetImage(new BmpDecoder())) { - image.CompareToOriginal(provider); + image.DebugSave(provider); + + // The Magick Reference Decoder can not decode 4-Bit bitmaps, so only execute this on windows. + if (TestEnvironment.IsWindows) + { + image.CompareToOriginal(provider); + } } } @@ -97,9 +107,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_8Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -107,9 +119,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_16Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -117,9 +131,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_32Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -127,9 +143,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_32BitV4Header_Fast(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -139,13 +157,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_RunLengthEncoded_4Bit_WithDelta(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black }); - image.DebugSave(provider); - - // The Magick Reference Decoder can not decode 4-Bit bitmaps, so only execute this on windows. - if (TestEnvironment.IsWindows) + using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black })) { - image.CompareToOriginal(provider); + image.DebugSave(provider); + + // The Magick Reference Decoder can not decode 4-Bit bitmaps, so only execute this on windows. + if (TestEnvironment.IsWindows) + { + image.CompareToOriginal(provider); + } } } @@ -154,13 +174,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_RunLengthEncoded_4Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black }); - image.DebugSave(provider); - - // The Magick Reference Decoder can not decode 4-Bit bitmaps, so only execute this on windows. - if (TestEnvironment.IsWindows) + using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black })) { - image.CompareToOriginal(provider); + image.DebugSave(provider); + + // The Magick Reference Decoder can not decode 4-Bit bitmaps, so only execute this on windows. + if (TestEnvironment.IsWindows) + { + image.CompareToOriginal(provider); + } } } @@ -172,11 +194,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_RunLengthEncoded_8Bit_WithDelta_SystemDrawingRefDecoder(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black }); - image.DebugSave(provider); - if (TestEnvironment.IsWindows) + using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black })) { - image.CompareToOriginal(provider, new SystemDrawingReferenceDecoder()); + image.DebugSave(provider); + if (TestEnvironment.IsWindows) + { + image.CompareToOriginal(provider, new SystemDrawingReferenceDecoder()); + } } } @@ -186,9 +210,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_RunLengthEncoded_8Bit_WithDelta_MagickRefDecoder(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.FirstColorOfPalette }); - image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.FirstColorOfPalette })) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, new MagickReferenceDecoder()); + } } [Theory] @@ -197,9 +223,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_RunLengthEncoded_8Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.FirstColorOfPalette }); - image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.FirstColorOfPalette })) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, new MagickReferenceDecoder()); + } } [Theory] @@ -209,11 +237,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_RunLengthEncoded_24Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black }); - image.DebugSave(provider); + using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black })) + { + image.DebugSave(provider); - // TODO: Neither System.Drawing nor MagickReferenceDecoder decode this file. - // image.CompareToOriginal(provider); + // TODO: Neither System.Drawing nor MagickReferenceDecoder decode this file. + // image.CompareToOriginal(provider); + } } [Theory] @@ -221,11 +251,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeAlphaBitfields(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); - // TODO: Neither System.Drawing nor MagickReferenceDecoder decode this file. - // image.CompareToOriginal(provider); + // TODO: Neither System.Drawing nor MagickReferenceDecoder decode this file. + // image.CompareToOriginal(provider); + } } [Theory] @@ -233,9 +265,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeBitmap_WithAlphaChannel(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, new MagickReferenceDecoder()); + } } [Theory] @@ -243,15 +277,17 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeBitfields_WithUnusualBitmasks(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - - // Choosing large tolerance of 6.1 here, because for some reason with the MagickReferenceDecoder the alpha channel - // seems to be wrong. This bitmap has an alpha channel of two bits. In many cases this alpha channel has a value of 3, - // which should be remapped to 255 for RGBA32, but the magick decoder has a value of 191 set. - // The total difference without the alpha channel is still: 0.0204% - // Exporting the image as PNG with GIMP yields to the same result as the ImageSharp implementation. - image.CompareToOriginal(provider, ImageComparer.TolerantPercentage(6.1f), new MagickReferenceDecoder()); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + + // Choosing large tolerance of 6.1 here, because for some reason with the MagickReferenceDecoder the alpha channel + // seems to be wrong. This bitmap has an alpha channel of two bits. In many cases this alpha channel has a value of 3, + // which should be remapped to 255 for RGBA32, but the magick decoder has a value of 191 set. + // The total difference without the alpha channel is still: 0.0204% + // Exporting the image as PNG with GIMP yields to the same result as the ImageSharp implementation. + image.CompareToOriginal(provider, ImageComparer.TolerantPercentage(6.1f), new MagickReferenceDecoder()); + } } [Theory] @@ -260,9 +296,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeBmpv2(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -270,9 +308,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeBmpv3(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -280,9 +320,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeLessThanFullPalette(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, new MagickReferenceDecoder()); + } } [Theory] @@ -291,11 +333,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeOversizedPalette(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - if (TestEnvironment.IsWindows) + using (Image image = provider.GetImage(new BmpDecoder())) { - image.CompareToOriginal(provider); + image.DebugSave(provider); + if (TestEnvironment.IsWindows) + { + image.CompareToOriginal(provider); + } } } @@ -331,9 +375,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeAdobeBmpv3(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, new MagickReferenceDecoder()); + } } [Theory] @@ -341,9 +387,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeAdobeBmpv3_WithAlpha(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, new MagickReferenceDecoder()); + } } [Theory] @@ -351,9 +399,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeBmpv4(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -362,9 +412,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecodeBmpv5(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -372,9 +424,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_RespectsFileHeaderOffset(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -382,9 +436,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_IsNotBoundToSinglePixelType(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -392,9 +448,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode4BytePerEntryPalette(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider); + } } [Theory] @@ -413,10 +471,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void Identify_DetectsCorrectPixelType(string imagePath, int expectedPixelSize) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - IImageInfo imageInfo = Image.Identify(stream); - Assert.NotNull(imageInfo); - Assert.Equal(expectedPixelSize, imageInfo.PixelType?.BitsPerPixel); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + IImageInfo imageInfo = Image.Identify(stream); + Assert.NotNull(imageInfo); + Assert.Equal(expectedPixelSize, imageInfo.PixelType?.BitsPerPixel); + } } [Theory] @@ -431,11 +491,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void Identify_DetectsCorrectWidthAndHeight(string imagePath, int expectedWidth, int expectedHeight) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - IImageInfo imageInfo = Image.Identify(stream); - Assert.NotNull(imageInfo); - Assert.Equal(expectedWidth, imageInfo.Width); - Assert.Equal(expectedHeight, imageInfo.Height); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + IImageInfo imageInfo = Image.Identify(stream); + Assert.NotNull(imageInfo); + Assert.Equal(expectedWidth, imageInfo.Width); + Assert.Equal(expectedHeight, imageInfo.Height); + } } [Theory] @@ -443,13 +505,17 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void Decode_VerifyRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new BmpDecoder(); - using Image image = decoder.Decode(Configuration.Default, stream); - ImageMetadata meta = image.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new BmpDecoder(); + using (Image image = decoder.Decode(Configuration.Default, stream)) + { + ImageMetadata meta = image.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } + } } [Theory] @@ -457,11 +523,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_Os2v2XShortHeader(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); - // TODO: Neither System.Drawing or MagickReferenceDecoder can correctly decode this file. - // image.CompareToOriginal(provider); + // TODO: Neither System.Drawing or MagickReferenceDecoder can correctly decode this file. + // image.CompareToOriginal(provider); + } } [Theory] @@ -469,13 +537,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_Os2v2Header(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); - // TODO: System.Drawing can not decode this image. MagickReferenceDecoder can decode it, - // but i think incorrectly. I have loaded the image with GIMP and exported as PNG. - // The results are the same as the image sharp implementation. - // image.CompareToOriginal(provider, new MagickReferenceDecoder()); + // TODO: System.Drawing can not decode this image. MagickReferenceDecoder can decode it, + // but i think incorrectly. I have loaded the image with GIMP and exported as PNG. + // The results are the same as the image sharp implementation. + // image.CompareToOriginal(provider, new MagickReferenceDecoder()); + } } [Theory] @@ -491,11 +561,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void BmpDecoder_CanDecode_Os2BitmapArray(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new BmpDecoder()); - image.DebugSave(provider); + using (Image image = provider.GetImage(new BmpDecoder())) + { + image.DebugSave(provider); - // TODO: Neither System.Drawing or MagickReferenceDecoder can correctly decode this file. - // image.CompareToOriginal(provider); + // TODO: Neither System.Drawing or MagickReferenceDecoder can correctly decode this file. + // image.CompareToOriginal(provider); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs index 743248b5d4..55d31b5a38 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs @@ -54,16 +54,22 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp var options = new BmpEncoder(); var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - - memStream.Position = 0; - using var output = Image.Load(memStream); - ImageMetadata meta = output.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + ImageMetadata meta = output.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } + } + } } [Theory] @@ -73,15 +79,21 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp var options = new BmpEncoder(); var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - - memStream.Position = 0; - using var output = Image.Load(memStream); - BmpMetadata meta = output.Metadata.GetBmpMetadata(); - - Assert.Equal(bmpBitsPerPixel, meta.BitsPerPixel); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + BmpMetadata meta = output.Metadata.GetBmpMetadata(); + + Assert.Equal(bmpBitsPerPixel, meta.BitsPerPixel); + } + } + } } [Theory] @@ -180,16 +192,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp return; } - using Image image = provider.GetImage(); - var encoder = new BmpEncoder + using (Image image = provider.GetImage()) { - BitsPerPixel = BmpBitsPerPixel.Pixel8, - Quantizer = new WuQuantizer(256) - }; - string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "bmp", encoder, appendPixelTypeToFileName: false); - IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile); - using var referenceImage = Image.Load(actualOutputFile, referenceDecoder); - referenceImage.CompareToReferenceOutput(ImageComparer.TolerantPercentage(0.01f), provider, extension: "bmp", appendPixelTypeToFileName: false); + var encoder = new BmpEncoder + { + BitsPerPixel = BmpBitsPerPixel.Pixel8, + Quantizer = new WuQuantizer(256) + }; + string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "bmp", encoder, appendPixelTypeToFileName: false); + IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile); + using (var referenceImage = Image.Load(actualOutputFile, referenceDecoder)) + { + referenceImage.CompareToReferenceOutput(ImageComparer.TolerantPercentage(0.01f), provider, extension: "bmp", appendPixelTypeToFileName: false); + } + } } [Theory] @@ -202,16 +218,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp return; } - using Image image = provider.GetImage(); - var encoder = new BmpEncoder + using (Image image = provider.GetImage()) { - BitsPerPixel = BmpBitsPerPixel.Pixel8, - Quantizer = new OctreeQuantizer(256) - }; - string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "bmp", encoder, appendPixelTypeToFileName: false); - IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile); - using var referenceImage = Image.Load(actualOutputFile, referenceDecoder); - referenceImage.CompareToReferenceOutput(ImageComparer.TolerantPercentage(0.01f), provider, extension: "bmp", appendPixelTypeToFileName: false); + var encoder = new BmpEncoder + { + BitsPerPixel = BmpBitsPerPixel.Pixel8, + Quantizer = new OctreeQuantizer(256) + }; + string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "bmp", encoder, appendPixelTypeToFileName: false); + IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile); + using (var referenceImage = Image.Load(actualOutputFile, referenceDecoder)) + { + referenceImage.CompareToReferenceOutput(ImageComparer.TolerantPercentage(0.01f), provider, extension: "bmp", appendPixelTypeToFileName: false); + } + } } [Theory] @@ -227,18 +247,19 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp ImageComparer customComparer = null) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - - // There is no alpha in bmp with less then 32 bits per pixels, so the reference image will be made opaque. - if (bitsPerPixel != BmpBitsPerPixel.Pixel32) + using (Image image = provider.GetImage()) { - image.Mutate(c => c.MakeOpaque()); - } + // There is no alpha in bmp with less then 32 bits per pixels, so the reference image will be made opaque. + if (bitsPerPixel != BmpBitsPerPixel.Pixel32) + { + image.Mutate(c => c.MakeOpaque()); + } - var encoder = new BmpEncoder { BitsPerPixel = bitsPerPixel, SupportTransparency = supportTransparency }; + var encoder = new BmpEncoder { BitsPerPixel = bitsPerPixel, SupportTransparency = supportTransparency }; - // Does DebugSave & load reference CompareToReferenceInput(): - image.VerifyEncoder(provider, "bmp", bitsPerPixel, encoder, customComparer); + // Does DebugSave & load reference CompareToReferenceInput(): + image.VerifyEncoder(provider, "bmp", bitsPerPixel, encoder, customComparer); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs index c0e04a6def..9818f9d41f 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs @@ -36,12 +36,14 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp public void Identify_DetectsCorrectBitmapInfoHeaderType(string imagePath, BmpInfoHeaderType expectedInfoHeaderType) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - IImageInfo imageInfo = Image.Identify(stream); - Assert.NotNull(imageInfo); - BmpMetadata bitmapMetadata = imageInfo.Metadata.GetBmpMetadata(); - Assert.NotNull(bitmapMetadata); - Assert.Equal(expectedInfoHeaderType, bitmapMetadata.InfoHeaderType); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + IImageInfo imageInfo = Image.Identify(stream); + Assert.NotNull(imageInfo); + BmpMetadata bitmapMetadata = imageInfo.Metadata.GetBmpMetadata(); + Assert.NotNull(bitmapMetadata); + Assert.Equal(expectedInfoHeaderType, bitmapMetadata.InfoHeaderType); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs b/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs index 61130d13f4..95389511bb 100644 --- a/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs +++ b/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs @@ -23,10 +23,12 @@ namespace SixLabors.ImageSharp.Tests public void ResolutionShouldChange(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Metadata.VerticalResolution = 150; - image.Metadata.HorizontalResolution = 150; - image.DebugSave(provider); + using (Image image = provider.GetImage()) + { + image.Metadata.VerticalResolution = 150; + image.Metadata.HorizontalResolution = 150; + image.DebugSave(provider); + } } [Fact] @@ -36,9 +38,11 @@ namespace SixLabors.ImageSharp.Tests foreach (TestFile file in Files) { - using Image image = file.CreateRgba32Image(); - string filename = path + "/" + file.FileNameWithoutExtension + ".txt"; - File.WriteAllText(filename, image.ToBase64String(PngFormat.Instance)); + using (Image image = file.CreateRgba32Image()) + { + string filename = path + "/" + file.FileNameWithoutExtension + ".txt"; + File.WriteAllText(filename, image.ToBase64String(PngFormat.Instance)); + } } } @@ -49,8 +53,10 @@ namespace SixLabors.ImageSharp.Tests foreach (TestFile file in Files) { - using Image image = file.CreateRgba32Image(); - image.Save($"{path}/{file.FileName}"); + using (Image image = file.CreateRgba32Image()) + { + image.Save($"{path}/{file.FileName}"); + } } } @@ -94,25 +100,27 @@ namespace SixLabors.ImageSharp.Tests foreach (TestFile file in Files) { - using Image image = file.CreateRgba32Image(); - using (FileStream output = File.OpenWrite($"{path}/{file.FileNameWithoutExtension}.bmp")) + using (Image image = file.CreateRgba32Image()) { - image.SaveAsBmp(output); - } - - using (FileStream output = File.OpenWrite($"{path}/{file.FileNameWithoutExtension}.jpg")) - { - image.SaveAsJpeg(output); - } - - using (FileStream output = File.OpenWrite($"{path}/{file.FileNameWithoutExtension}.png")) - { - image.SaveAsPng(output); - } - - using (FileStream output = File.OpenWrite($"{path}/{file.FileNameWithoutExtension}.gif")) - { - image.SaveAsGif(output); + using (FileStream output = File.OpenWrite($"{path}/{file.FileNameWithoutExtension}.bmp")) + { + image.SaveAsBmp(output); + } + + using (FileStream output = File.OpenWrite($"{path}/{file.FileNameWithoutExtension}.jpg")) + { + image.SaveAsJpeg(output); + } + + using (FileStream output = File.OpenWrite($"{path}/{file.FileNameWithoutExtension}.png")) + { + image.SaveAsPng(output); + } + + using (FileStream output = File.OpenWrite($"{path}/{file.FileNameWithoutExtension}.gif")) + { + image.SaveAsGif(output); + } } } } @@ -124,14 +132,19 @@ namespace SixLabors.ImageSharp.Tests foreach (TestFile file in Files) { - using var image = Image.Load(file.Bytes, out IImageFormat mimeType); - using var memoryStream = new MemoryStream(); - image.Save(memoryStream, mimeType); - memoryStream.Flush(); - byte[] serialized = memoryStream.ToArray(); - - using var image2 = Image.Load(serialized); - image2.Save($"{path}/{file.FileName}"); + byte[] serialized; + using (var image = Image.Load(file.Bytes, out IImageFormat mimeType)) + using (var memoryStream = new MemoryStream()) + { + image.Save(memoryStream, mimeType); + memoryStream.Flush(); + serialized = memoryStream.ToArray(); + } + + using (var image2 = Image.Load(serialized)) + { + image2.Save($"{path}/{file.FileName}"); + } } } @@ -157,21 +170,25 @@ namespace SixLabors.ImageSharp.Tests [InlineData(10, 100, "tga")] public void CanIdentifyImageLoadedFromBytes(int width, int height, string extension) { - using var image = Image.LoadPixelData(new Rgba32[width * height], width, height); - using var memoryStream = new MemoryStream(); - IImageFormat format = GetFormat(extension); - image.Save(memoryStream, format); - memoryStream.Position = 0; + using (var image = Image.LoadPixelData(new Rgba32[width * height], width, height)) + { + using (var memoryStream = new MemoryStream()) + { + IImageFormat format = GetFormat(extension); + image.Save(memoryStream, format); + memoryStream.Position = 0; - IImageInfo imageInfo = Image.Identify(memoryStream); + IImageInfo imageInfo = Image.Identify(memoryStream); - Assert.Equal(imageInfo.Width, width); - Assert.Equal(imageInfo.Height, height); - memoryStream.Position = 0; + Assert.Equal(imageInfo.Width, width); + Assert.Equal(imageInfo.Height, height); + memoryStream.Position = 0; - imageInfo = Image.Identify(memoryStream, out IImageFormat detectedFormat); + imageInfo = Image.Identify(memoryStream, out IImageFormat detectedFormat); - Assert.Equal(format, detectedFormat); + Assert.Equal(format, detectedFormat); + } + } } [Fact] @@ -179,11 +196,13 @@ namespace SixLabors.ImageSharp.Tests { byte[] invalid = new byte[10]; - using var memoryStream = new MemoryStream(invalid); - IImageInfo imageInfo = Image.Identify(memoryStream, out IImageFormat format); + using (var memoryStream = new MemoryStream(invalid)) + { + IImageInfo imageInfo = Image.Identify(memoryStream, out IImageFormat format); - Assert.Null(imageInfo); - Assert.Null(format); + Assert.Null(imageInfo); + Assert.Null(format); + } } private static IImageFormat GetFormat(string format) diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs index ea6135ab10..99dc2d06da 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs @@ -54,9 +54,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void Decode_VerifyAllFrames(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.DebugSaveMultiFrame(provider); - image.CompareToReferenceOutputMultiFrame(provider, ImageComparer.Exact); + using (Image image = provider.GetImage()) + { + image.DebugSaveMultiFrame(provider); + image.CompareToReferenceOutputMultiFrame(provider, ImageComparer.Exact); + } } [Fact] @@ -68,11 +70,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif fixed (byte* data = testFile.Bytes.AsSpan(0, length)) { - using var stream = new UnmanagedMemoryStream(data, length); - var decoder = new GifDecoder(); - - using Image image = decoder.Decode(Configuration.Default, stream); - Assert.Equal((200, 200), (image.Width, image.Height)); + using (var stream = new UnmanagedMemoryStream(data, length)) + { + var decoder = new GifDecoder(); + + using (Image image = decoder.Decode(Configuration.Default, stream)) + { + Assert.Equal((200, 200), (image.Width, image.Height)); + } + } } } @@ -81,9 +87,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void GifDecoder_IsNotBoundToSinglePixelType(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.DebugSave(provider); - image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider); + using (Image image = provider.GetImage()) + { + image.DebugSave(provider); + image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider); + } } [Theory] @@ -96,10 +104,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif expectedFrameCount = 1; } - using Image image = provider.GetImage(); - Assert.Equal(expectedFrameCount, image.Frames.Count); - image.DebugSave(provider); - image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider); + using (Image image = provider.GetImage()) + { + Assert.Equal(expectedFrameCount, image.Frames.Count); + image.DebugSave(provider); + image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider); + } } [Theory] @@ -107,8 +117,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void CanDecodeJustOneFrame(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new GifDecoder { DecodingMode = FrameDecodingMode.First }); - Assert.Equal(1, image.Frames.Count); + using (Image image = provider.GetImage(new GifDecoder { DecodingMode = FrameDecodingMode.First })) + { + Assert.Equal(1, image.Frames.Count); + } } [Theory] @@ -116,8 +128,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void CanDecodeAllFrames(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new GifDecoder { DecodingMode = FrameDecodingMode.All }); - Assert.True(image.Frames.Count > 1); + using (Image image = provider.GetImage(new GifDecoder { DecodingMode = FrameDecodingMode.All })) + { + Assert.True(image.Frames.Count > 1); + } } [Theory] @@ -128,21 +142,25 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void DetectPixelSize(string imagePath, int expectedPixelSize) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - Assert.Equal(expectedPixelSize, Image.Identify(stream)?.PixelType?.BitsPerPixel); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + Assert.Equal(expectedPixelSize, Image.Identify(stream)?.PixelType?.BitsPerPixel); + } } [Fact] public void CanDecodeIntermingledImages() { - using var kumin1 = Image.Load(TestFile.Create(TestImages.Gif.Kumin).Bytes); - using var load = Image.Load(TestFile.Create(TestImages.Png.Icon).Bytes); - using var kumin2 = Image.Load(TestFile.Create(TestImages.Gif.Kumin).Bytes); - for (int i = 0; i < kumin1.Frames.Count; i++) + using (var kumin1 = Image.Load(TestFile.Create(TestImages.Gif.Kumin).Bytes)) + using (Image.Load(TestFile.Create(TestImages.Png.Icon).Bytes)) + using (var kumin2 = Image.Load(TestFile.Create(TestImages.Gif.Kumin).Bytes)) { - ImageFrame first = kumin1.Frames[i]; - ImageFrame second = kumin2.Frames[i]; - first.ComparePixelBufferTo(second.GetPixelSpan()); + for (int i = 0; i < kumin1.Frames.Count; i++) + { + ImageFrame first = kumin1.Frames[i]; + ImageFrame second = kumin2.Frames[i]; + first.ComparePixelBufferTo(second.GetPixelSpan()); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs index 711cd89908..fe1faa5aed 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs @@ -30,21 +30,25 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void EncodeGeneratedPatterns(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var encoder = new GifEncoder + using (Image image = provider.GetImage()) { - // Use the palette quantizer without dithering to ensure results - // are consistent - Quantizer = new WebSafePaletteQuantizer(false) - }; - - // Always save as we need to compare the encoded output. - provider.Utility.SaveTestOutputFile(image, "gif", encoder); + var encoder = new GifEncoder + { + // Use the palette quantizer without dithering to ensure results + // are consistent + Quantizer = new WebSafePaletteQuantizer(false) + }; + + // Always save as we need to compare the encoded output. + provider.Utility.SaveTestOutputFile(image, "gif", encoder); + } // Compare encoded result string path = provider.Utility.GetTestOutputFileName("gif", null, true); - using var encoded = Image.Load(path); - encoded.CompareToReferenceOutput(ValidatorComparer, provider, null, "gif"); + using (var encoded = Image.Load(path)) + { + encoded.CompareToReferenceOutput(ValidatorComparer, provider, null, "gif"); + } } [Theory] @@ -54,16 +58,22 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif var options = new GifEncoder(); var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - - memStream.Position = 0; - using var output = Image.Load(memStream); - ImageMetadata meta = output.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + ImageMetadata meta = output.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } + } + } } [Fact] @@ -73,15 +83,21 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif var testFile = TestFile.Create(TestImages.Gif.Rings); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - - memStream.Position = 0; - using var output = Image.Load(memStream); - GifMetadata metadata = output.Metadata.GetGifMetadata(); - Assert.Equal(1, metadata.Comments.Count); - Assert.Equal("ImageSharp", metadata.Comments[0]); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + GifMetadata metadata = output.Metadata.GetGifMetadata(); + Assert.Equal(1, metadata.Comments.Count); + Assert.Equal("ImageSharp", metadata.Comments[0]); + } + } + } } [Theory] @@ -89,65 +105,69 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void EncodeGlobalPaletteReturnsSmallerFile(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var encoder = new GifEncoder + using (Image image = provider.GetImage()) { - ColorTableMode = GifColorTableMode.Global, - Quantizer = new OctreeQuantizer(false) - }; + var encoder = new GifEncoder + { + ColorTableMode = GifColorTableMode.Global, + Quantizer = new OctreeQuantizer(false) + }; - // Always save as we need to compare the encoded output. - provider.Utility.SaveTestOutputFile(image, "gif", encoder, "global"); + // Always save as we need to compare the encoded output. + provider.Utility.SaveTestOutputFile(image, "gif", encoder, "global"); - encoder.ColorTableMode = GifColorTableMode.Local; - provider.Utility.SaveTestOutputFile(image, "gif", encoder, "local"); + encoder.ColorTableMode = GifColorTableMode.Local; + provider.Utility.SaveTestOutputFile(image, "gif", encoder, "local"); - var fileInfoGlobal = new FileInfo(provider.Utility.GetTestOutputFileName("gif", "global")); - var fileInfoLocal = new FileInfo(provider.Utility.GetTestOutputFileName("gif", "local")); + var fileInfoGlobal = new FileInfo(provider.Utility.GetTestOutputFileName("gif", "global")); + var fileInfoLocal = new FileInfo(provider.Utility.GetTestOutputFileName("gif", "local")); - Assert.True(fileInfoGlobal.Length < fileInfoLocal.Length); + Assert.True(fileInfoGlobal.Length < fileInfoLocal.Length); + } } [Fact] public void NonMutatingEncodePreservesPaletteCount() { - using var inStream = new MemoryStream(TestFile.Create(TestImages.Gif.Leo).Bytes); - using var outStream = new MemoryStream(); - inStream.Position = 0; - - var image = Image.Load(inStream); - GifMetadata metaData = image.Metadata.GetGifMetadata(); - GifFrameMetadata frameMetadata = image.Frames.RootFrame.Metadata.GetGifMetadata(); - GifColorTableMode colorMode = metaData.ColorTableMode; - var encoder = new GifEncoder + using (var inStream = new MemoryStream(TestFile.Create(TestImages.Gif.Leo).Bytes)) + using (var outStream = new MemoryStream()) { - ColorTableMode = colorMode, - Quantizer = new OctreeQuantizer(frameMetadata.ColorTableLength) - }; + inStream.Position = 0; - image.Save(outStream, encoder); - outStream.Position = 0; + var image = Image.Load(inStream); + GifMetadata metaData = image.Metadata.GetGifMetadata(); + GifFrameMetadata frameMetadata = image.Frames.RootFrame.Metadata.GetGifMetadata(); + GifColorTableMode colorMode = metaData.ColorTableMode; + var encoder = new GifEncoder + { + ColorTableMode = colorMode, + Quantizer = new OctreeQuantizer(frameMetadata.ColorTableLength) + }; - outStream.Position = 0; - var clone = Image.Load(outStream); + image.Save(outStream, encoder); + outStream.Position = 0; - GifMetadata cloneMetadata = clone.Metadata.GetGifMetadata(); - Assert.Equal(metaData.ColorTableMode, cloneMetadata.ColorTableMode); + outStream.Position = 0; + var clone = Image.Load(outStream); - // Gifiddle and Cyotek GifInfo say this image has 64 colors. - Assert.Equal(64, frameMetadata.ColorTableLength); + GifMetadata cloneMetadata = clone.Metadata.GetGifMetadata(); + Assert.Equal(metaData.ColorTableMode, cloneMetadata.ColorTableMode); - for (int i = 0; i < image.Frames.Count; i++) - { - GifFrameMetadata ifm = image.Frames[i].Metadata.GetGifMetadata(); - GifFrameMetadata cifm = clone.Frames[i].Metadata.GetGifMetadata(); + // Gifiddle and Cyotek GifInfo say this image has 64 colors. + Assert.Equal(64, frameMetadata.ColorTableLength); - Assert.Equal(ifm.ColorTableLength, cifm.ColorTableLength); - Assert.Equal(ifm.FrameDelay, cifm.FrameDelay); - } + for (int i = 0; i < image.Frames.Count; i++) + { + GifFrameMetadata ifm = image.Frames[i].Metadata.GetGifMetadata(); + GifFrameMetadata cifm = clone.Frames[i].Metadata.GetGifMetadata(); + + Assert.Equal(ifm.ColorTableLength, cifm.ColorTableLength); + Assert.Equal(ifm.FrameDelay, cifm.FrameDelay); + } - image.Dispose(); - clone.Dispose(); + image.Dispose(); + clone.Dispose(); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs index 578dca0ce0..ddb5608daf 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs @@ -65,10 +65,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif var testFile = TestFile.Create(TestImages.Gif.Rings); - using Image image = testFile.CreateRgba32Image(options); - GifMetadata metadata = image.Metadata.GetGifMetadata(); - Assert.Equal(1, metadata.Comments.Count); - Assert.Equal("ImageSharp", metadata.Comments[0]); + using (Image image = testFile.CreateRgba32Image(options)) + { + GifMetadata metadata = image.Metadata.GetGifMetadata(); + Assert.Equal(1, metadata.Comments.Count); + Assert.Equal("ImageSharp", metadata.Comments[0]); + } } [Fact] @@ -81,9 +83,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif var testFile = TestFile.Create(TestImages.Gif.Rings); - using Image image = testFile.CreateRgba32Image(options); - GifMetadata metadata = image.Metadata.GetGifMetadata(); - Assert.Equal(0, metadata.Comments.Count); + using (Image image = testFile.CreateRgba32Image(options)) + { + GifMetadata metadata = image.Metadata.GetGifMetadata(); + Assert.Equal(0, metadata.Comments.Count); + } } [Fact] @@ -92,11 +96,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif var options = new GifDecoder(); var testFile = TestFile.Create(TestImages.Gif.LargeComment); - using Image image = testFile.CreateRgba32Image(options); - GifMetadata metadata = image.Metadata.GetGifMetadata(); - Assert.Equal(2, metadata.Comments.Count); - Assert.Equal(new string('c', 349), metadata.Comments[0]); - Assert.Equal("ImageSharp", metadata.Comments[1]); + using (Image image = testFile.CreateRgba32Image(options)) + { + GifMetadata metadata = image.Metadata.GetGifMetadata(); + Assert.Equal(2, metadata.Comments.Count); + Assert.Equal(new string('c', 349), metadata.Comments[0]); + Assert.Equal("ImageSharp", metadata.Comments[1]); + } } [Fact] @@ -105,16 +111,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif var decoder = new GifDecoder(); var testFile = TestFile.Create(TestImages.Gif.LargeComment); - using Image input = testFile.CreateRgba32Image(decoder); - using var memoryStream = new MemoryStream(); - input.Save(memoryStream, new GifEncoder()); - memoryStream.Position = 0; + using (Image input = testFile.CreateRgba32Image(decoder)) + using (var memoryStream = new MemoryStream()) + { + input.Save(memoryStream, new GifEncoder()); + memoryStream.Position = 0; - using Image image = decoder.Decode(Configuration.Default, memoryStream); - GifMetadata metadata = image.Metadata.GetGifMetadata(); - Assert.Equal(2, metadata.Comments.Count); - Assert.Equal(new string('c', 349), metadata.Comments[0]); - Assert.Equal("ImageSharp", metadata.Comments[1]); + using (Image image = decoder.Decode(Configuration.Default, memoryStream)) + { + GifMetadata metadata = image.Metadata.GetGifMetadata(); + Assert.Equal(2, metadata.Comments.Count); + Assert.Equal(new string('c', 349), metadata.Comments[0]); + Assert.Equal("ImageSharp", metadata.Comments[1]); + } + } } [Theory] @@ -122,13 +132,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void Identify_VerifyRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new GifDecoder(); - IImageInfo image = decoder.Identify(Configuration.Default, stream); - ImageMetadata meta = image.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new GifDecoder(); + IImageInfo image = decoder.Identify(Configuration.Default, stream); + ImageMetadata meta = image.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } } [Theory] @@ -136,13 +148,17 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif public void Decode_VerifyRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new GifDecoder(); - using Image image = decoder.Decode(Configuration.Default, stream); - ImageMetadata meta = image.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new GifDecoder(); + using (Image image = decoder.Decode(Configuration.Default, stream)) + { + ImageMetadata meta = image.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } + } } [Theory] diff --git a/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs b/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs index 54030955ae..d011a63301 100644 --- a/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs +++ b/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs @@ -128,10 +128,14 @@ namespace SixLabors.ImageSharp.Tests public void DetectFormatAllocatesCleanBuffer() { byte[] jpegImage; - using var buffer = new MemoryStream(); - using var image = new Image(100, 100); - image.SaveAsJpeg(buffer); - jpegImage = buffer.ToArray(); + using (var buffer = new MemoryStream()) + { + using (var image = new Image(100, 100)) + { + image.SaveAsJpeg(buffer); + jpegImage = buffer.ToArray(); + } + } byte[] invalidImage = { 1, 2, 3 }; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs index aa85ae1b23..ea2fc7ab80 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs @@ -41,17 +41,19 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg { Block8x8F block = CreateRandomFloatBlock(0, 100); - using Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(20, 20, AllocationOptions.Clean); - BufferArea area = buffer.GetArea(5, 10, 8, 8); - block.Copy1x1Scale(area); + using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(20, 20, AllocationOptions.Clean)) + { + BufferArea area = buffer.GetArea(5, 10, 8, 8); + block.Copy1x1Scale(area); - Assert.Equal(block[0, 0], buffer[5, 10]); - Assert.Equal(block[1, 0], buffer[6, 10]); - Assert.Equal(block[0, 1], buffer[5, 11]); - Assert.Equal(block[0, 7], buffer[5, 17]); - Assert.Equal(block[63], buffer[12, 17]); + Assert.Equal(block[0, 0], buffer[5, 10]); + Assert.Equal(block[1, 0], buffer[6, 10]); + Assert.Equal(block[0, 1], buffer[5, 11]); + Assert.Equal(block[0, 7], buffer[5, 17]); + Assert.Equal(block[63], buffer[12, 17]); - VerifyAllZeroOutsideSubArea(buffer, 5, 10); + VerifyAllZeroOutsideSubArea(buffer, 5, 10); + } } [Theory] @@ -67,25 +69,27 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg var start = new Point(50, 50); - using Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(100, 100, AllocationOptions.Clean); - BufferArea area = buffer.GetArea(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor); - block.CopyTo(area, horizontalFactor, verticalFactor); - - for (int y = 0; y < 8 * verticalFactor; y++) + using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(100, 100, AllocationOptions.Clean)) { - for (int x = 0; x < 8 * horizontalFactor; x++) + BufferArea area = buffer.GetArea(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor); + block.CopyTo(area, horizontalFactor, verticalFactor); + + for (int y = 0; y < 8 * verticalFactor; y++) { - int yy = y / verticalFactor; - int xx = x / horizontalFactor; + for (int x = 0; x < 8 * horizontalFactor; x++) + { + int yy = y / verticalFactor; + int xx = x / horizontalFactor; - float expected = block[xx, yy]; - float actual = area[x, y]; + float expected = block[xx, yy]; + float actual = area[x, y]; - Assert.Equal(expected, actual); + Assert.Equal(expected, actual); + } } - } - VerifyAllZeroOutsideSubArea(buffer, start.X, start.Y, horizontalFactor, verticalFactor); + VerifyAllZeroOutsideSubArea(buffer, start.X, start.Y, horizontalFactor, verticalFactor); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs b/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs index 4fb7757097..7c42af5961 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs @@ -38,21 +38,23 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg public void LoadAndStretchCorners_FromOrigo(TestImageProvider provider) where TPixel : struct, IPixel { - using Image s = provider.GetImage(); - var d = default(GenericBlock8x8); - d.LoadAndStretchEdges(s.Frames.RootFrame, 0, 0); - - TPixel a = s.Frames.RootFrame[0, 0]; - TPixel b = d[0, 0]; - - Assert.Equal(s[0, 0], d[0, 0]); - Assert.Equal(s[1, 0], d[1, 0]); - Assert.Equal(s[7, 0], d[7, 0]); - Assert.Equal(s[0, 1], d[0, 1]); - Assert.Equal(s[1, 1], d[1, 1]); - Assert.Equal(s[7, 0], d[7, 0]); - Assert.Equal(s[0, 7], d[0, 7]); - Assert.Equal(s[7, 7], d[7, 7]); + using (Image s = provider.GetImage()) + { + var d = default(GenericBlock8x8); + d.LoadAndStretchEdges(s.Frames.RootFrame, 0, 0); + + TPixel a = s.Frames.RootFrame[0, 0]; + TPixel b = d[0, 0]; + + Assert.Equal(s[0, 0], d[0, 0]); + Assert.Equal(s[1, 0], d[1, 0]); + Assert.Equal(s[7, 0], d[7, 0]); + Assert.Equal(s[0, 1], d[0, 1]); + Assert.Equal(s[1, 1], d[1, 1]); + Assert.Equal(s[7, 0], d[7, 0]); + Assert.Equal(s[0, 7], d[0, 7]); + Assert.Equal(s[7, 7], d[7, 7]); + } } [Theory] @@ -60,36 +62,38 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg public void LoadAndStretchCorners_WithOffset(TestImageProvider provider) where TPixel : struct, IPixel { - using Image s = provider.GetImage(); - var d = default(GenericBlock8x8); - d.LoadAndStretchEdges(s.Frames.RootFrame, 6, 7); + using (Image s = provider.GetImage()) + { + var d = default(GenericBlock8x8); + d.LoadAndStretchEdges(s.Frames.RootFrame, 6, 7); - Assert.Equal(s[6, 7], d[0, 0]); - Assert.Equal(s[6, 8], d[0, 1]); - Assert.Equal(s[7, 8], d[1, 1]); + Assert.Equal(s[6, 7], d[0, 0]); + Assert.Equal(s[6, 8], d[0, 1]); + Assert.Equal(s[7, 8], d[1, 1]); - Assert.Equal(s[6, 9], d[0, 2]); - Assert.Equal(s[6, 9], d[0, 3]); - Assert.Equal(s[6, 9], d[0, 7]); + Assert.Equal(s[6, 9], d[0, 2]); + Assert.Equal(s[6, 9], d[0, 3]); + Assert.Equal(s[6, 9], d[0, 7]); - Assert.Equal(s[7, 9], d[1, 2]); - Assert.Equal(s[7, 9], d[1, 3]); - Assert.Equal(s[7, 9], d[1, 7]); + Assert.Equal(s[7, 9], d[1, 2]); + Assert.Equal(s[7, 9], d[1, 3]); + Assert.Equal(s[7, 9], d[1, 7]); - Assert.Equal(s[9, 9], d[3, 2]); - Assert.Equal(s[9, 9], d[3, 3]); - Assert.Equal(s[9, 9], d[3, 7]); + Assert.Equal(s[9, 9], d[3, 2]); + Assert.Equal(s[9, 9], d[3, 3]); + Assert.Equal(s[9, 9], d[3, 7]); - Assert.Equal(s[9, 7], d[3, 0]); - Assert.Equal(s[9, 7], d[4, 0]); - Assert.Equal(s[9, 7], d[7, 0]); + Assert.Equal(s[9, 7], d[3, 0]); + Assert.Equal(s[9, 7], d[4, 0]); + Assert.Equal(s[9, 7], d[7, 0]); - Assert.Equal(s[9, 9], d[3, 2]); - Assert.Equal(s[9, 9], d[4, 2]); - Assert.Equal(s[9, 9], d[7, 2]); + Assert.Equal(s[9, 9], d[3, 2]); + Assert.Equal(s[9, 9], d[4, 2]); + Assert.Equal(s[9, 9], d[7, 2]); - Assert.Equal(s[9, 9], d[4, 3]); - Assert.Equal(s[9, 9], d[7, 7]); + Assert.Equal(s[9, 9], d[4, 3]); + Assert.Equal(s[9, 9], d[7, 7]); + } } [Fact] diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs index 8bebd73043..c2fc320aff 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs @@ -79,13 +79,17 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg public void Decode_VerifyRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new JpegDecoder(); - using Image image = decoder.Decode(Configuration.Default, stream); - ImageMetadata meta = image.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new JpegDecoder(); + using (Image image = decoder.Decode(Configuration.Default, stream)) + { + ImageMetadata meta = image.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } + } } [Theory] @@ -93,13 +97,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg public void Identify_VerifyRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new JpegDecoder(); - IImageInfo image = decoder.Identify(Configuration.Default, stream); - ImageMetadata meta = image.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new JpegDecoder(); + IImageInfo image = decoder.Identify(Configuration.Default, stream); + ImageMetadata meta = image.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } } [Theory] @@ -107,11 +113,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg public void Identify_VerifyQuality(string imagePath, int quality) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new JpegDecoder(); - IImageInfo image = decoder.Identify(Configuration.Default, stream); - JpegMetadata meta = image.Metadata.GetJpegMetadata(); - Assert.Equal(quality, meta.Quality); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new JpegDecoder(); + IImageInfo image = decoder.Identify(Configuration.Default, stream); + JpegMetadata meta = image.Metadata.GetJpegMetadata(); + Assert.Equal(quality, meta.Quality); + } } [Theory] @@ -119,22 +127,28 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg public void Decode_VerifyQuality(string imagePath, int quality) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new JpegDecoder(); - using Image image = decoder.Decode(Configuration.Default, stream); - JpegMetadata meta = image.Metadata.GetJpegMetadata(); - Assert.Equal(quality, meta.Quality); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new JpegDecoder(); + using (Image image = decoder.Decode(Configuration.Default, stream)) + { + JpegMetadata meta = image.Metadata.GetJpegMetadata(); + Assert.Equal(quality, meta.Quality); + } + } } private static void TestImageInfo(string imagePath, IImageDecoder decoder, bool useIdentify, Action test) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - IImageInfo imageInfo = useIdentify + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + IImageInfo imageInfo = useIdentify ? ((IImageInfoDetector)decoder).Identify(Configuration.Default, stream) : decoder.Decode(Configuration.Default, stream); - test(imageInfo); + test(imageInfo); + } } private static void TestMetadataImpl( @@ -201,16 +215,18 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg // Snake.jpg has both Exif and ICC profiles defined: var testFile = TestFile.Create(TestImages.Jpeg.Baseline.Snake); - using Image image = testFile.CreateRgba32Image(decoder); - if (ignoreMetadata) + using (Image image = testFile.CreateRgba32Image(decoder)) { - Assert.Null(image.Metadata.ExifProfile); - Assert.Null(image.Metadata.IccProfile); - } - else - { - Assert.NotNull(image.Metadata.ExifProfile); - Assert.NotNull(image.Metadata.IccProfile); + if (ignoreMetadata) + { + Assert.Null(image.Metadata.ExifProfile); + Assert.Null(image.Metadata.IccProfile); + } + else + { + Assert.NotNull(image.Metadata.ExifProfile); + Assert.NotNull(image.Metadata.IccProfile); + } } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs index 4d8b512c8e..09e98b5c4b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs @@ -76,14 +76,16 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg public void ParseStream_BasicPropertiesAreCorrect() { byte[] bytes = TestFile.Create(TestImages.Jpeg.Progressive.Progress).Bytes; - using var ms = new MemoryStream(bytes); - var decoder = new JpegDecoderCore(Configuration.Default, new JpegDecoder()); - decoder.ParseStream(ms); - - // I don't know why these numbers are different. All I know is that the decoder works - // and spectral data is exactly correct also. - // VerifyJpeg.VerifyComponentSizes3(decoder.Frame.Components, 43, 61, 22, 31, 22, 31); - VerifyJpeg.VerifyComponentSizes3(decoder.Frame.Components, 44, 62, 22, 31, 22, 31); + using (var ms = new MemoryStream(bytes)) + { + var decoder = new JpegDecoderCore(Configuration.Default, new JpegDecoder()); + decoder.ParseStream(ms); + + // I don't know why these numbers are different. All I know is that the decoder works + // and spectral data is exactly correct also. + // VerifyJpeg.VerifyComponentSizes3(decoder.Frame.Components, 43, 61, 22, 31, 22, 31); + VerifyJpeg.VerifyComponentSizes3(decoder.Frame.Components, 44, 62, 22, 31, 22, 31); + } } public const string DecodeBaselineJpegOutputName = "DecodeBaselineJpeg"; @@ -129,14 +131,16 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg var comparer = ImageComparer.Tolerant(0, 0); - using Image expectedImage = provider.GetReferenceOutputImage(appendPixelTypeToFileName: false); - using var pdfJsOriginalResult = Image.Load(pdfJsOriginalResultPath); - using var pdfJsPortResult = Image.Load(sourceBytes, JpegDecoder); - ImageSimilarityReport originalReport = comparer.CompareImagesOrFrames(expectedImage, pdfJsOriginalResult); - ImageSimilarityReport portReport = comparer.CompareImagesOrFrames(expectedImage, pdfJsPortResult); + using (Image expectedImage = provider.GetReferenceOutputImage(appendPixelTypeToFileName: false)) + using (var pdfJsOriginalResult = Image.Load(pdfJsOriginalResultPath)) + using (var pdfJsPortResult = Image.Load(sourceBytes, JpegDecoder)) + { + ImageSimilarityReport originalReport = comparer.CompareImagesOrFrames(expectedImage, pdfJsOriginalResult); + ImageSimilarityReport portReport = comparer.CompareImagesOrFrames(expectedImage, pdfJsPortResult); - this.Output.WriteLine($"Difference for PDF.js ORIGINAL: {originalReport.DifferencePercentageString}"); - this.Output.WriteLine($"Difference for PORT: {portReport.DifferencePercentageString}"); + this.Output.WriteLine($"Difference for PDF.js ORIGINAL: {originalReport.DifferencePercentageString}"); + this.Output.WriteLine($"Difference for PORT: {portReport.DifferencePercentageString}"); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs index 01a428b62b..f7acb9fca5 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs @@ -47,14 +47,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg var options = new JpegEncoder(); var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - - memStream.Position = 0; - using var output = Image.Load(memStream); - JpegMetadata meta = output.Metadata.GetJpegMetadata(); - Assert.Equal(quality, meta.Quality); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + JpegMetadata meta = output.Metadata.GetJpegMetadata(); + Assert.Equal(quality, meta.Quality); + } + } + } } [Theory] @@ -102,21 +108,22 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg int quality = 100) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - - // There is no alpha in Jpeg! - image.Mutate(c => c.MakeOpaque()); - - var encoder = new JpegEncoder + using (Image image = provider.GetImage()) { - Subsample = subsample, - Quality = quality - }; - string info = $"{subsample}-Q{quality}"; - ImageComparer comparer = GetComparer(quality, subsample); + // There is no alpha in Jpeg! + image.Mutate(c => c.MakeOpaque()); - // Does DebugSave & load reference CompareToReferenceInput(): - image.VerifyEncoder(provider, "jpeg", info, encoder, comparer, referenceImageExtension: "png"); + var encoder = new JpegEncoder + { + Subsample = subsample, + Quality = quality + }; + string info = $"{subsample}-Q{quality}"; + ImageComparer comparer = GetComparer(quality, subsample); + + // Does DebugSave & load reference CompareToReferenceInput(): + image.VerifyEncoder(provider, "jpeg", info, encoder, comparer, referenceImageExtension: "png"); + } } [Fact] @@ -129,15 +136,17 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg var testFile = TestFile.Create(TestImages.Jpeg.Baseline.Calliphora); - using Image input = testFile.CreateRgba32Image(); - using var memStream0 = new MemoryStream(); - using var memStream1 = new MemoryStream(); - input.SaveAsJpeg(memStream0, options); + using (Image input = testFile.CreateRgba32Image()) + using (var memStream0 = new MemoryStream()) + using (var memStream1 = new MemoryStream()) + { + input.SaveAsJpeg(memStream0, options); - options.Quality = 1; - input.SaveAsJpeg(memStream1, options); + options.Quality = 1; + input.SaveAsJpeg(memStream1, options); - Assert.Equal(memStream0.ToArray(), memStream1.ToArray()); + Assert.Equal(memStream0.ToArray(), memStream1.ToArray()); + } } [Fact] @@ -150,15 +159,17 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg var testFile = TestFile.Create(TestImages.Jpeg.Baseline.Calliphora); - using Image input = testFile.CreateRgba32Image(); - using var memStream0 = new MemoryStream(); - using var memStream1 = new MemoryStream(); - input.SaveAsJpeg(memStream0, options); + using (Image input = testFile.CreateRgba32Image()) + using (var memStream0 = new MemoryStream()) + using (var memStream1 = new MemoryStream()) + { + input.SaveAsJpeg(memStream0, options); - options.Quality = 100; - input.SaveAsJpeg(memStream1, options); + options.Quality = 100; + input.SaveAsJpeg(memStream1, options); - Assert.NotEqual(memStream0.ToArray(), memStream1.ToArray()); + Assert.NotEqual(memStream0.ToArray(), memStream1.ToArray()); + } } [Theory] @@ -168,16 +179,22 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg var options = new JpegEncoder(); var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - - memStream.Position = 0; - using var output = Image.Load(memStream); - ImageMetadata meta = output.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + ImageMetadata meta = output.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } + } + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs index e478621580..86128e0020 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs @@ -34,8 +34,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg private static void SaveBuffer(JpegComponentPostProcessor cp, TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = cp.ColorBuffer.ToGrayscaleImage(1f / 255f); - image.DebugSave(provider, $"-C{cp.Component.Index}-"); + using (Image image = cp.ColorBuffer.ToGrayscaleImage(1f / 255f)) + { + image.DebugSave(provider, $"-C{cp.Component.Index}-"); + } } [Theory] @@ -45,16 +47,18 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg where TPixel : struct, IPixel { string imageFile = provider.SourceFileOrDescription; - using JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile); - using var pp = new JpegImagePostProcessor(Configuration.Default, decoder); - using var imageFrame = new ImageFrame(Configuration.Default, decoder.ImageWidth, decoder.ImageHeight); - pp.DoPostProcessorStep(imageFrame); + using (JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile)) + using (var pp = new JpegImagePostProcessor(Configuration.Default, decoder)) + using (var imageFrame = new ImageFrame(Configuration.Default, decoder.ImageWidth, decoder.ImageHeight)) + { + pp.DoPostProcessorStep(imageFrame); - JpegComponentPostProcessor[] cp = pp.ComponentProcessors; + JpegComponentPostProcessor[] cp = pp.ComponentProcessors; - SaveBuffer(cp[0], provider); - SaveBuffer(cp[1], provider); - SaveBuffer(cp[2], provider); + SaveBuffer(cp[0], provider); + SaveBuffer(cp[1], provider); + SaveBuffer(cp[2], provider); + } } [Theory] @@ -63,26 +67,30 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg where TPixel : struct, IPixel { string imageFile = provider.SourceFileOrDescription; - using JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile); - using var pp = new JpegImagePostProcessor(Configuration.Default, decoder); - using var image = new Image(decoder.ImageWidth, decoder.ImageHeight); - pp.PostProcess(image.Frames.RootFrame); + using (JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile)) + using (var pp = new JpegImagePostProcessor(Configuration.Default, decoder)) + using (var image = new Image(decoder.ImageWidth, decoder.ImageHeight)) + { + pp.PostProcess(image.Frames.RootFrame); - image.DebugSave(provider); + image.DebugSave(provider); - ImagingTestCaseUtility testUtil = provider.Utility; - testUtil.TestGroupName = nameof(JpegDecoderTests); - testUtil.TestName = JpegDecoderTests.DecodeBaselineJpegOutputName; + ImagingTestCaseUtility testUtil = provider.Utility; + testUtil.TestGroupName = nameof(JpegDecoderTests); + testUtil.TestName = JpegDecoderTests.DecodeBaselineJpegOutputName; - using Image referenceImage = - provider.GetReferenceOutputImage(appendPixelTypeToFileName: false); - ImageSimilarityReport report = ImageComparer.Exact.CompareImagesOrFrames(referenceImage, image); + using (Image referenceImage = + provider.GetReferenceOutputImage(appendPixelTypeToFileName: false)) + { + ImageSimilarityReport report = ImageComparer.Exact.CompareImagesOrFrames(referenceImage, image); - this.Output.WriteLine($"*** {imageFile} ***"); - this.Output.WriteLine($"Difference: {report.DifferencePercentageString}"); + this.Output.WriteLine($"*** {imageFile} ***"); + this.Output.WriteLine($"Difference: {report.DifferencePercentageString}"); - // ReSharper disable once PossibleInvalidOperationException - Assert.True(report.TotalNormalizedDifference.Value < 0.005f); + // ReSharper disable once PossibleInvalidOperationException + Assert.True(report.TotalNormalizedDifference.Value < 0.005f); + } + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs index c42483ca40..6e04610d5a 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs @@ -31,24 +31,28 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg { var expectedColorSpace = (JpegColorSpace)expectedColorSpaceValue; - using JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile); - Assert.Equal(expectedColorSpace, decoder.ColorSpace); + using (JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile)) + { + Assert.Equal(expectedColorSpace, decoder.ColorSpace); + } } [Fact] public void ComponentScalingIsCorrect_1ChannelJpeg() { - using JpegDecoderCore decoder = JpegFixture.ParseJpegStream(TestImages.Jpeg.Baseline.Jpeg400); - Assert.Equal(1, decoder.ComponentCount); - Assert.Equal(1, decoder.Components.Length); + using (JpegDecoderCore decoder = JpegFixture.ParseJpegStream(TestImages.Jpeg.Baseline.Jpeg400)) + { + Assert.Equal(1, decoder.ComponentCount); + Assert.Equal(1, decoder.Components.Length); - Size expectedSizeInBlocks = decoder.ImageSizeInPixels.DivideRoundUp(8); + Size expectedSizeInBlocks = decoder.ImageSizeInPixels.DivideRoundUp(8); - Assert.Equal(expectedSizeInBlocks, decoder.ImageSizeInMCU); + Assert.Equal(expectedSizeInBlocks, decoder.ImageSizeInMCU); - var uniform1 = new Size(1, 1); - JpegComponent c0 = decoder.Components[0]; - VerifyJpeg.VerifyComponent(c0, expectedSizeInBlocks, uniform1, uniform1); + var uniform1 = new Size(1, 1); + JpegComponent c0 = decoder.Components[0]; + VerifyJpeg.VerifyComponent(c0, expectedSizeInBlocks, uniform1, uniform1); + } } [Theory] @@ -99,30 +103,32 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg var fLuma = (Size)expectedLumaFactors; var fChroma = (Size)expectedChromaFactors; - using JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile); - Assert.Equal(componentCount, decoder.ComponentCount); - Assert.Equal(componentCount, decoder.Components.Length); + using (JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile)) + { + Assert.Equal(componentCount, decoder.ComponentCount); + Assert.Equal(componentCount, decoder.Components.Length); - JpegComponent c0 = decoder.Components[0]; - JpegComponent c1 = decoder.Components[1]; - JpegComponent c2 = decoder.Components[2]; + JpegComponent c0 = decoder.Components[0]; + JpegComponent c1 = decoder.Components[1]; + JpegComponent c2 = decoder.Components[2]; - var uniform1 = new Size(1, 1); + var uniform1 = new Size(1, 1); - Size expectedLumaSizeInBlocks = decoder.ImageSizeInMCU.MultiplyBy(fLuma); + Size expectedLumaSizeInBlocks = decoder.ImageSizeInMCU.MultiplyBy(fLuma); - Size divisor = fLuma.DivideBy(fChroma); + Size divisor = fLuma.DivideBy(fChroma); - Size expectedChromaSizeInBlocks = expectedLumaSizeInBlocks.DivideRoundUp(divisor); + Size expectedChromaSizeInBlocks = expectedLumaSizeInBlocks.DivideRoundUp(divisor); - VerifyJpeg.VerifyComponent(c0, expectedLumaSizeInBlocks, fLuma, uniform1); - VerifyJpeg.VerifyComponent(c1, expectedChromaSizeInBlocks, fChroma, divisor); - VerifyJpeg.VerifyComponent(c2, expectedChromaSizeInBlocks, fChroma, divisor); + VerifyJpeg.VerifyComponent(c0, expectedLumaSizeInBlocks, fLuma, uniform1); + VerifyJpeg.VerifyComponent(c1, expectedChromaSizeInBlocks, fChroma, divisor); + VerifyJpeg.VerifyComponent(c2, expectedChromaSizeInBlocks, fChroma, divisor); - if (componentCount == 4) - { - JpegComponent c3 = decoder.Components[2]; - VerifyJpeg.VerifyComponent(c3, expectedLumaSizeInBlocks, fLuma, uniform1); + if (componentCount == 4) + { + JpegComponent c3 = decoder.Components[2]; + VerifyJpeg.VerifyComponent(c3, expectedLumaSizeInBlocks, fLuma, uniform1); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs index d6e69925b2..8d7dda2fed 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs @@ -50,11 +50,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg byte[] sourceBytes = TestFile.Create(provider.SourceFileOrDescription).Bytes; - using var ms = new MemoryStream(sourceBytes); - decoder.ParseStream(ms); + using (var ms = new MemoryStream(sourceBytes)) + { + decoder.ParseStream(ms); - var data = LibJpegTools.SpectralData.LoadFromImageSharpDecoder(decoder); - VerifyJpeg.SaveSpectralImage(provider, data); + var data = LibJpegTools.SpectralData.LoadFromImageSharpDecoder(decoder); + VerifyJpeg.SaveSpectralImage(provider, data); + } } [Theory] @@ -71,11 +73,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg byte[] sourceBytes = TestFile.Create(provider.SourceFileOrDescription).Bytes; - using var ms = new MemoryStream(sourceBytes); - decoder.ParseStream(ms); - var imageSharpData = LibJpegTools.SpectralData.LoadFromImageSharpDecoder(decoder); + using (var ms = new MemoryStream(sourceBytes)) + { + decoder.ParseStream(ms); + var imageSharpData = LibJpegTools.SpectralData.LoadFromImageSharpDecoder(decoder); - this.VerifySpectralCorrectnessImpl(provider, imageSharpData); + this.VerifySpectralCorrectnessImpl(provider, imageSharpData); + } } private void VerifySpectralCorrectnessImpl( diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs index 9be449f122..b7cf6a8406 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs @@ -192,10 +192,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg.Utils internal static JpegDecoderCore ParseJpegStream(string testFileName, bool metaDataOnly = false) { byte[] bytes = TestFile.Create(testFileName).Bytes; - using var ms = new MemoryStream(bytes); - var decoder = new JpegDecoderCore(Configuration.Default, new JpegDecoder()); - decoder.ParseStream(ms, metaDataOnly); - return decoder; + using (var ms = new MemoryStream(bytes)) + { + var decoder = new JpegDecoderCore(Configuration.Default, new JpegDecoder()); + decoder.ParseStream(ms, metaDataOnly); + return decoder; + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs index e1d1e7f5d5..826335b652 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs @@ -98,38 +98,40 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg.Utils { RunDumpJpegCoeffsTool(testFile.FullPath, coeffFileFullPath); - using var dumpStream = new FileStream(coeffFileFullPath, FileMode.Open); - using var rdr = new BinaryReader(dumpStream); - int componentCount = rdr.ReadInt16(); - var result = new ComponentData[componentCount]; - - for (int i = 0; i < componentCount; i++) + using (var dumpStream = new FileStream(coeffFileFullPath, FileMode.Open)) + using (var rdr = new BinaryReader(dumpStream)) { - int widthInBlocks = rdr.ReadInt16(); - int heightInBlocks = rdr.ReadInt16(); - var resultComponent = new ComponentData(widthInBlocks, heightInBlocks, i); - result[i] = resultComponent; - } + int componentCount = rdr.ReadInt16(); + var result = new ComponentData[componentCount]; - var buffer = new byte[64 * sizeof(short)]; + for (int i = 0; i < componentCount; i++) + { + int widthInBlocks = rdr.ReadInt16(); + int heightInBlocks = rdr.ReadInt16(); + var resultComponent = new ComponentData(widthInBlocks, heightInBlocks, i); + result[i] = resultComponent; + } - for (int i = 0; i < result.Length; i++) - { - ComponentData c = result[i]; + var buffer = new byte[64 * sizeof(short)]; - for (int y = 0; y < c.HeightInBlocks; y++) + for (int i = 0; i < result.Length; i++) { - for (int x = 0; x < c.WidthInBlocks; x++) + ComponentData c = result[i]; + + for (int y = 0; y < c.HeightInBlocks; y++) { - rdr.Read(buffer, 0, buffer.Length); + for (int x = 0; x < c.WidthInBlocks; x++) + { + rdr.Read(buffer, 0, buffer.Length); - short[] block = MemoryMarshal.Cast(buffer.AsSpan()).ToArray(); - c.MakeBlock(block, y, x); + short[] block = MemoryMarshal.Cast(buffer.AsSpan()).ToArray(); + c.MakeBlock(block, y, x); + } } } - } - return new SpectralData(result); + return new SpectralData(result); + } } finally { diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs index 27431a923b..9f22a7cb84 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs @@ -58,9 +58,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg.Utils output?.WriteLine("Min: " + comp.MinVal); output?.WriteLine("Max: " + comp.MaxVal); - using Image image = comp.CreateGrayScaleImage(); - string details = $"C{comp.Index}"; - image.DebugSave(provider, details, appendPixelTypeToFileName: false); + using (Image image = comp.CreateGrayScaleImage()) + { + string details = $"C{comp.Index}"; + image.DebugSave(provider, details, appendPixelTypeToFileName: false); + } } Image fullImage = data.TryCreateRGBSpectralImage(); diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs index ba93d6a7e0..ee4001c203 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs @@ -63,17 +63,19 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png { string chunkName = GetChunkTypeName(chunkType); - using var memStream = new MemoryStream(); - WriteHeaderChunk(memStream); - WriteChunk(memStream, chunkName); - WriteDataChunk(memStream); + using (var memStream = new MemoryStream()) + { + WriteHeaderChunk(memStream); + WriteChunk(memStream, chunkName); + WriteDataChunk(memStream); - var decoder = new PngDecoder(); + var decoder = new PngDecoder(); - ImageFormatException exception = - Assert.Throws(() => decoder.Decode(null, memStream)); + ImageFormatException exception = + Assert.Throws(() => decoder.Decode(null, memStream)); - Assert.Equal($"CRC Error. PNG {chunkName} chunk is corrupt!", exception.Message); + Assert.Equal($"CRC Error. PNG {chunkName} chunk is corrupt!", exception.Message); + } } private static string GetChunkTypeName(uint value) diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs index a749b8af9d..a88962e5f8 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs @@ -87,20 +87,22 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - - // We don't have another x-plat reference decoder that can be compared for this image. - if (provider.Utility.SourceFileOrDescription == TestImages.Png.Bad.Issue1047_BadEndChunk) + using (Image image = provider.GetImage(new PngDecoder())) { - if (TestEnvironment.IsWindows) + image.DebugSave(provider); + + // We don't have another x-plat reference decoder that can be compared for this image. + if (provider.Utility.SourceFileOrDescription == TestImages.Png.Bad.Issue1047_BadEndChunk) { - image.CompareToOriginal(provider, ImageComparer.Exact, (IImageDecoder)SystemDrawingReferenceDecoder.Instance); + if (TestEnvironment.IsWindows) + { + image.CompareToOriginal(provider, ImageComparer.Exact, (IImageDecoder)SystemDrawingReferenceDecoder.Instance); + } + } + else + { + image.CompareToOriginal(provider, ImageComparer.Exact); } - } - else - { - image.CompareToOriginal(provider, ImageComparer.Exact); } } @@ -109,9 +111,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decode_Interlaced_ImageIsCorrect(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } } [Theory] @@ -119,9 +123,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decode_48Bpp(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } } [Theory] @@ -129,9 +135,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decode_64Bpp(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } } [Theory] @@ -139,9 +147,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decoder_L8bitInterlaced(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } } [Theory] @@ -149,9 +159,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decode_L16Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } } [Theory] @@ -159,9 +171,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decode_GrayAlpha16Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } } [Theory] @@ -169,9 +183,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decoder_CanDecodeGrey8bitWithAlpha(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } } [Theory] @@ -179,9 +195,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decoder_IsNotBoundToSinglePixelType(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } } [Theory] @@ -195,8 +213,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Identify(string imagePath, int expectedPixelSize) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - Assert.Equal(expectedPixelSize, Image.Identify(stream)?.PixelType?.BitsPerPixel); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + Assert.Equal(expectedPixelSize, Image.Identify(stream)?.PixelType?.BitsPerPixel); + } } [Theory] @@ -207,9 +227,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png System.Exception ex = Record.Exception( () => { - using Image image = provider.GetImage(new PngDecoder()); - image.DebugSave(provider); - image.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage(new PngDecoder())) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ImageComparer.Exact); + } }); Assert.Null(ex); } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 4562311b0a..f5b06eb6c3 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -278,24 +278,26 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void WritesFileMarker(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using var ms = new MemoryStream(); - image.Save(ms, new PngEncoder()); - - byte[] data = ms.ToArray().Take(8).ToArray(); - byte[] expected = + using (Image image = provider.GetImage()) + using (var ms = new MemoryStream()) { - 0x89, // Set the high bit. - 0x50, // P - 0x4E, // N - 0x47, // G - 0x0D, // Line ending CRLF - 0x0A, // Line ending CRLF - 0x1A, // EOF - 0x0A // LF - }; - - Assert.Equal(expected, data); + image.Save(ms, new PngEncoder()); + + byte[] data = ms.ToArray().Take(8).ToArray(); + byte[] expected = + { + 0x89, // Set the high bit. + 0x50, // P + 0x4E, // N + 0x47, // G + 0x0D, // Line ending CRLF + 0x0A, // Line ending CRLF + 0x1A, // EOF + 0x0A // LF + }; + + Assert.Equal(expected, data); + } } [Theory] @@ -305,16 +307,22 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png var options = new PngEncoder(); var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - - memStream.Position = 0; - using var output = Image.Load(memStream); - ImageMetadata meta = output.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + ImageMetadata meta = output.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } + } + } } [Theory] @@ -324,15 +332,21 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png var options = new PngEncoder(); var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); - memStream.Position = 0; - using var output = Image.Load(memStream); - PngMetadata meta = output.Metadata.GetPngMetadata(); + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + PngMetadata meta = output.Metadata.GetPngMetadata(); - Assert.Equal(pngBitDepth, meta.BitDepth); + Assert.Equal(pngBitDepth, meta.BitDepth); + } + } + } } [Theory] @@ -342,45 +356,51 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png var options = new PngEncoder(); var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - PngMetadata inMeta = input.Metadata.GetPngMetadata(); - Assert.True(inMeta.HasTransparency); - - using var memStream = new MemoryStream(); - input.Save(memStream, options); - memStream.Position = 0; - using var output = Image.Load(memStream); - PngMetadata outMeta = output.Metadata.GetPngMetadata(); - Assert.True(outMeta.HasTransparency); - - switch (pngColorType) + using (Image input = testFile.CreateRgba32Image()) { - case PngColorType.Grayscale: - if (pngBitDepth.Equals(PngBitDepth.Bit16)) - { - Assert.True(outMeta.TransparentL16.HasValue); - Assert.Equal(inMeta.TransparentL16, outMeta.TransparentL16); - } - else - { - Assert.True(outMeta.TransparentL8.HasValue); - Assert.Equal(inMeta.TransparentL8, outMeta.TransparentL8); - } - - break; - case PngColorType.Rgb: - if (pngBitDepth.Equals(PngBitDepth.Bit16)) - { - Assert.True(outMeta.TransparentRgb48.HasValue); - Assert.Equal(inMeta.TransparentRgb48, outMeta.TransparentRgb48); - } - else + PngMetadata inMeta = input.Metadata.GetPngMetadata(); + Assert.True(inMeta.HasTransparency); + + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + memStream.Position = 0; + using (var output = Image.Load(memStream)) { - Assert.True(outMeta.TransparentRgb24.HasValue); - Assert.Equal(inMeta.TransparentRgb24, outMeta.TransparentRgb24); + PngMetadata outMeta = output.Metadata.GetPngMetadata(); + Assert.True(outMeta.HasTransparency); + + switch (pngColorType) + { + case PngColorType.Grayscale: + if (pngBitDepth.Equals(PngBitDepth.Bit16)) + { + Assert.True(outMeta.TransparentL16.HasValue); + Assert.Equal(inMeta.TransparentL16, outMeta.TransparentL16); + } + else + { + Assert.True(outMeta.TransparentL8.HasValue); + Assert.Equal(inMeta.TransparentL8, outMeta.TransparentL8); + } + + break; + case PngColorType.Rgb: + if (pngBitDepth.Equals(PngBitDepth.Bit16)) + { + Assert.True(outMeta.TransparentRgb48.HasValue); + Assert.Equal(inMeta.TransparentRgb48, outMeta.TransparentRgb48); + } + else + { + Assert.True(outMeta.TransparentRgb24.HasValue); + Assert.Equal(inMeta.TransparentRgb24, outMeta.TransparentRgb24); + } + + break; + } } - - break; + } } } @@ -400,37 +420,41 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png bool appendPngBitDepth = false) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var encoder = new PngEncoder + using (Image image = provider.GetImage()) { - ColorType = pngColorType, - FilterMethod = pngFilterMethod, - CompressionLevel = compressionLevel, - BitDepth = bitDepth, - Quantizer = new WuQuantizer(paletteSize), - InterlaceMethod = interlaceMode - }; - - string pngColorTypeInfo = appendPngColorType ? pngColorType.ToString() : string.Empty; - string pngFilterMethodInfo = appendPngFilterMethod ? pngFilterMethod.ToString() : string.Empty; - string compressionLevelInfo = appendCompressionLevel ? $"_C{compressionLevel}" : string.Empty; - string paletteSizeInfo = appendPaletteSize ? $"_PaletteSize-{paletteSize}" : string.Empty; - string pngBitDepthInfo = appendPngBitDepth ? bitDepth.ToString() : string.Empty; - string pngInterlaceModeInfo = interlaceMode != PngInterlaceMode.None ? $"_{interlaceMode}" : string.Empty; - - string debugInfo = $"{pngColorTypeInfo}{pngFilterMethodInfo}{compressionLevelInfo}{paletteSizeInfo}{pngBitDepthInfo}{pngInterlaceModeInfo}"; - - string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "png", encoder, debugInfo, appendPixelType); - - // Compare to the Magick reference decoder. - IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile); - - // We compare using both our decoder and the reference decoder as pixel transformation - // occurs within the encoder itself leaving the input image unaffected. - // This means we are benefiting from testing our decoder also. - using var imageSharpImage = Image.Load(actualOutputFile, new PngDecoder()); - using var referenceImage = Image.Load(actualOutputFile, referenceDecoder); - ImageComparer.Exact.VerifySimilarity(referenceImage, imageSharpImage); + var encoder = new PngEncoder + { + ColorType = pngColorType, + FilterMethod = pngFilterMethod, + CompressionLevel = compressionLevel, + BitDepth = bitDepth, + Quantizer = new WuQuantizer(paletteSize), + InterlaceMethod = interlaceMode + }; + + string pngColorTypeInfo = appendPngColorType ? pngColorType.ToString() : string.Empty; + string pngFilterMethodInfo = appendPngFilterMethod ? pngFilterMethod.ToString() : string.Empty; + string compressionLevelInfo = appendCompressionLevel ? $"_C{compressionLevel}" : string.Empty; + string paletteSizeInfo = appendPaletteSize ? $"_PaletteSize-{paletteSize}" : string.Empty; + string pngBitDepthInfo = appendPngBitDepth ? bitDepth.ToString() : string.Empty; + string pngInterlaceModeInfo = interlaceMode != PngInterlaceMode.None ? $"_{interlaceMode}" : string.Empty; + + string debugInfo = $"{pngColorTypeInfo}{pngFilterMethodInfo}{compressionLevelInfo}{paletteSizeInfo}{pngBitDepthInfo}{pngInterlaceModeInfo}"; + + string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "png", encoder, debugInfo, appendPixelType); + + // Compare to the Magick reference decoder. + IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile); + + // We compare using both our decoder and the reference decoder as pixel transformation + // occurs within the encoder itself leaving the input image unaffected. + // This means we are benefiting from testing our decoder also. + using (var imageSharpImage = Image.Load(actualOutputFile, new PngDecoder())) + using (var referenceImage = Image.Load(actualOutputFile, referenceDecoder)) + { + ImageComparer.Exact.VerifySimilarity(referenceImage, imageSharpImage); + } + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs index 7ebd4c1aab..fe25497247 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs @@ -53,19 +53,21 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decoder_CanReadTextData(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") && m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") && m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") && m.LanguageTag.Equals("chinese")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoLang") && m.Value.Equals("this text chunk is missing a language tag")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoTranslatedKeyword") && m.Value.Equals("dieser chunk hat kein übersetztes Schlüßelwort")); + using (Image image = provider.GetImage(new PngDecoder())) + { + PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") && m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") && m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") && m.LanguageTag.Equals("chinese")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoLang") && m.Value.Equals("this text chunk is missing a language tag")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoTranslatedKeyword") && m.Value.Equals("dieser chunk hat kein übersetztes Schlüßelwort")); + } } [Theory] @@ -74,24 +76,28 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png where TPixel : struct, IPixel { var decoder = new PngDecoder(); - using Image input = provider.GetImage(decoder); - using var memoryStream = new MemoryStream(); - input.Save(memoryStream, new PngEncoder()); - - memoryStream.Position = 0; - using Image image = decoder.Decode(Configuration.Default, memoryStream); - PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") && m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") && m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") && m.LanguageTag.Equals("chinese")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoLang") && m.Value.Equals("this text chunk is missing a language tag")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoTranslatedKeyword") && m.Value.Equals("dieser chunk hat kein übersetztes Schlüßelwort")); + using (Image input = provider.GetImage(decoder)) + using (var memoryStream = new MemoryStream()) + { + input.Save(memoryStream, new PngEncoder()); + + memoryStream.Position = 0; + using (Image image = decoder.Decode(Configuration.Default, memoryStream)) + { + PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") && m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") && m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") && m.LanguageTag.Equals("chinese")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoLang") && m.Value.Equals("this text chunk is missing a language tag")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoTranslatedKeyword") && m.Value.Equals("dieser chunk hat kein übersetztes Schlüßelwort")); + } + } } [Theory] @@ -99,14 +105,16 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decoder_IgnoresInvalidTextData(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new PngDecoder()); - PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); - Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("leading space")); - Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("trailing space")); - Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("space")); - Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("empty")); - Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("invalid characters")); - Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("too large")); + using (Image image = provider.GetImage(new PngDecoder())) + { + PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); + Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("leading space")); + Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("trailing space")); + Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("space")); + Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("empty")); + Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("invalid characters")); + Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("too large")); + } } [Theory] @@ -115,27 +123,30 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png where TPixel : struct, IPixel { var decoder = new PngDecoder(); - using Image input = provider.GetImage(decoder); - using var memoryStream = new MemoryStream(); - - // This will be a zTXt chunk. - var expectedText = new PngTextData("large-text", new string('c', 100), string.Empty, string.Empty); - - // This will be a iTXt chunk. - var expectedTextNoneLatin = new PngTextData("large-text-non-latin", new string('Ф', 100), "language-tag", "translated-keyword"); - PngMetadata inputMetadata = input.Metadata.GetFormatMetadata(PngFormat.Instance); - inputMetadata.TextData.Add(expectedText); - inputMetadata.TextData.Add(expectedTextNoneLatin); - input.Save(memoryStream, new PngEncoder + using (Image input = provider.GetImage(decoder)) + using (var memoryStream = new MemoryStream()) { - TextCompressionThreshold = 50 - }); - - memoryStream.Position = 0; - using Image image = decoder.Decode(Configuration.Default, memoryStream); - PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); - Assert.Contains(meta.TextData, m => m.Equals(expectedText)); - Assert.Contains(meta.TextData, m => m.Equals(expectedTextNoneLatin)); + // This will be a zTXt chunk. + var expectedText = new PngTextData("large-text", new string('c', 100), string.Empty, string.Empty); + + // This will be a iTXt chunk. + var expectedTextNoneLatin = new PngTextData("large-text-non-latin", new string('Ф', 100), "language-tag", "translated-keyword"); + PngMetadata inputMetadata = input.Metadata.GetFormatMetadata(PngFormat.Instance); + inputMetadata.TextData.Add(expectedText); + inputMetadata.TextData.Add(expectedTextNoneLatin); + input.Save(memoryStream, new PngEncoder + { + TextCompressionThreshold = 50 + }); + + memoryStream.Position = 0; + using (Image image = decoder.Decode(Configuration.Default, memoryStream)) + { + PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); + Assert.Contains(meta.TextData, m => m.Equals(expectedText)); + Assert.Contains(meta.TextData, m => m.Equals(expectedTextNoneLatin)); + } + } } [Fact] @@ -148,13 +159,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png var testFile = TestFile.Create(TestImages.Png.Blur); - using Image image = testFile.CreateRgba32Image(options); - PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); + using (Image image = testFile.CreateRgba32Image(options)) + { + PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); - Assert.Equal(1, meta.TextData.Count); - Assert.Equal("Software", meta.TextData[0].Keyword); - Assert.Equal("paint.net 4.0.6", meta.TextData[0].Value); - Assert.Equal(0.4545d, meta.Gamma, precision: 4); + Assert.Equal(1, meta.TextData.Count); + Assert.Equal("Software", meta.TextData[0].Keyword); + Assert.Equal("paint.net 4.0.6", meta.TextData[0].Value); + Assert.Equal(0.4545d, meta.Gamma, precision: 4); + } } [Fact] @@ -167,9 +180,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png var testFile = TestFile.Create(TestImages.Png.Blur); - using Image image = testFile.CreateRgba32Image(options); - PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); - Assert.Equal(0, meta.TextData.Count); + using (Image image = testFile.CreateRgba32Image(options)) + { + PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); + Assert.Equal(0, meta.TextData.Count); + } } [Theory] @@ -177,13 +192,17 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Decode_VerifyRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new PngDecoder(); - using Image image = decoder.Decode(Configuration.Default, stream); - ImageMetadata meta = image.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new PngDecoder(); + using (Image image = decoder.Decode(Configuration.Default, stream)) + { + ImageMetadata meta = image.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } + } } [Theory] @@ -191,13 +210,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void Identify_VerifyRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit) { var testFile = TestFile.Create(imagePath); - using var stream = new MemoryStream(testFile.Bytes, false); - var decoder = new PngDecoder(); - IImageInfo image = decoder.Identify(Configuration.Default, stream); - ImageMetadata meta = image.Metadata; - Assert.Equal(xResolution, meta.HorizontalResolution); - Assert.Equal(yResolution, meta.VerticalResolution); - Assert.Equal(resolutionUnit, meta.ResolutionUnits); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + var decoder = new PngDecoder(); + IImageInfo image = decoder.Identify(Configuration.Default, stream); + ImageMetadata meta = image.Metadata; + Assert.Equal(xResolution, meta.HorizontalResolution); + Assert.Equal(yResolution, meta.VerticalResolution); + Assert.Equal(resolutionUnit, meta.ResolutionUnits); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs index 645ee08bf5..0233e0a098 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs @@ -18,16 +18,19 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png where TPixel : struct, IPixel { // does saving a file then reopening mean both files are identical??? - using Image image = provider.GetImage(); - using var ms = new MemoryStream(); - - // image.Save(provider.Utility.GetTestOutputFileName("bmp")); - image.Save(ms, new PngEncoder()); - ms.Position = 0; - using var img2 = Image.Load(ms, new PngDecoder()); - ImageComparer.Tolerant().VerifySimilarity(image, img2); + using (Image image = provider.GetImage()) + using (var ms = new MemoryStream()) + { + // image.Save(provider.Utility.GetTestOutputFileName("bmp")); + image.Save(ms, new PngEncoder()); + ms.Position = 0; + using (var img2 = Image.Load(ms, new PngDecoder())) + { + ImageComparer.Tolerant().VerifySimilarity(image, img2); - // img2.Save(provider.Utility.GetTestOutputFileName("bmp", "_loaded"), new BmpEncoder()); + // img2.Save(provider.Utility.GetTestOutputFileName("bmp", "_loaded"), new BmpEncoder()); + } + } } /* JJS: Disabled for now as the decoder now correctly decodes the full pixel components if the @@ -100,17 +103,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png where TPixel : struct, IPixel { // does saving a file then reopening mean both files are identical??? - using Image image = provider.GetImage(); - using var ms = new MemoryStream(); - - // image.Save(provider.Utility.GetTestOutputFileName("png")); - image.Mutate(x => x.Resize(100, 100)); + using (Image image = provider.GetImage()) + using (var ms = new MemoryStream()) + { + // image.Save(provider.Utility.GetTestOutputFileName("png")); + image.Mutate(x => x.Resize(100, 100)); - // image.Save(provider.Utility.GetTestOutputFileName("png", "resize")); - image.Save(ms, new PngEncoder()); - ms.Position = 0; - using var img2 = Image.Load(ms, new PngDecoder()); - ImageComparer.Tolerant().VerifySimilarity(image, img2); + // image.Save(provider.Utility.GetTestOutputFileName("png", "resize")); + image.Save(ms, new PngEncoder()); + ms.Position = 0; + using (var img2 = Image.Load(ms, new PngDecoder())) + { + ImageComparer.Tolerant().VerifySimilarity(image, img2); + } + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs index df3ddc216c..1f8cbd6a9b 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs @@ -18,9 +18,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_Uncompressed_MonoChrome(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -28,9 +30,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_Uncompressed_15Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -38,9 +42,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_RunLengthEncoded_15Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -48,9 +54,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_Uncompressed_16Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -58,9 +66,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_RunLengthEncoded_WithPalette_16Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -68,9 +78,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_Uncompressed_24Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -78,9 +90,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_RunLengthEncoded_WithTopLeftOrigin_24Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -88,9 +102,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_Palette_WithTopLeftOrigin_24Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -98,9 +114,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_Uncompressed_32Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -108,9 +126,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_RunLengthEncoded_MonoChrome(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -118,9 +138,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_RunLengthEncoded_16Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -128,9 +150,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_RunLengthEncoded_24Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -138,9 +162,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_RunLengthEncoded_32Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -148,9 +174,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_WithPalette_16Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } [Theory] @@ -158,9 +186,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public void TgaDecoder_CanDecode_WithPalette_24Bit(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(new TgaDecoder()); - image.DebugSave(provider); - TgaTestUtils.CompareWithReferenceDecoder(provider, image); + using (Image image = provider.GetImage(new TgaDecoder())) + { + image.DebugSave(provider); + TgaTestUtils.CompareWithReferenceDecoder(provider, image); + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs index 562088620a..26fe7cbdad 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs @@ -37,14 +37,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga { var options = new TgaEncoder(); - var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - memStream.Position = 0; - using var output = Image.Load(memStream); - TgaMetadata meta = output.Metadata.GetTgaMetadata(); - Assert.Equal(bmpBitsPerPixel, meta.BitsPerPixel); + TestFile testFile = TestFile.Create(imagePath); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + memStream.Position = 0; + using (Image output = Image.Load(memStream)) + { + TgaMetadata meta = output.Metadata.GetTgaMetadata(); + Assert.Equal(bmpBitsPerPixel, meta.BitsPerPixel); + } + } + } } [Theory] @@ -56,14 +62,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga Compression = TgaCompression.RunLength }; - var testFile = TestFile.Create(imagePath); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, options); - memStream.Position = 0; - using var output = Image.Load(memStream); - TgaMetadata meta = output.Metadata.GetTgaMetadata(); - Assert.Equal(bmpBitsPerPixel, meta.BitsPerPixel); + TestFile testFile = TestFile.Create(imagePath); + using (Image input = testFile.CreateRgba32Image()) + { + using (var memStream = new MemoryStream()) + { + input.Save(memStream, options); + memStream.Position = 0; + using (var output = Image.Load(memStream)) + { + TgaMetadata meta = output.Metadata.GetTgaMetadata(); + Assert.Equal(bmpBitsPerPixel, meta.BitsPerPixel); + } + } + } } [Theory] @@ -118,14 +130,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga float compareTolerance = 0.01f) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var encoder = new TgaEncoder { BitsPerPixel = bitsPerPixel, Compression = compression }; - - using var memStream = new MemoryStream(); - image.Save(memStream, encoder); - memStream.Position = 0; - using var encodedImage = (Image)Image.Load(memStream); - TgaTestUtils.CompareWithReferenceDecoder(provider, encodedImage, useExactComparer, compareTolerance); + using (Image image = provider.GetImage()) + { + var encoder = new TgaEncoder { BitsPerPixel = bitsPerPixel, Compression = compression }; + + using (var memStream = new MemoryStream()) + { + image.Save(memStream, encoder); + memStream.Position = 0; + using (var encodedImage = (Image)Image.Load(memStream)) + { + TgaTestUtils.CompareWithReferenceDecoder(provider, encodedImage, useExactComparer, compareTolerance); + } + } + } } } } diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs index 500de56066..090aecb797 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs @@ -42,22 +42,24 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga public static Image DecodeWithMagick(Configuration configuration, FileInfo fileInfo) where TPixel : struct, IPixel { - using var magickImage = new MagickImage(fileInfo); - var result = new Image(configuration, magickImage.Width, magickImage.Height); - Span resultPixels = result.GetPixelSpan(); - - using (IPixelCollection pixels = magickImage.GetPixelsUnsafe()) + using (var magickImage = new MagickImage(fileInfo)) { - byte[] data = pixels.ToByteArray(PixelMapping.RGBA); + var result = new Image(configuration, magickImage.Width, magickImage.Height); + Span resultPixels = result.GetPixelSpan(); - PixelOperations.Instance.FromRgba32Bytes( - configuration, - data, - resultPixels, - resultPixels.Length); - } + using (IPixelCollection pixels = magickImage.GetPixelsUnsafe()) + { + byte[] data = pixels.ToByteArray(PixelMapping.RGBA); - return result; + PixelOperations.Instance.FromRgba32Bytes( + configuration, + data, + resultPixels, + resultPixels.Length); + } + + return result; + } } } } diff --git a/tests/ImageSharp.Tests/Helpers/ParallelHelperTests.cs b/tests/ImageSharp.Tests/Helpers/ParallelHelperTests.cs index 2de4b6e322..5914aba400 100644 --- a/tests/ImageSharp.Tests/Helpers/ParallelHelperTests.cs +++ b/tests/ImageSharp.Tests/Helpers/ParallelHelperTests.cs @@ -295,41 +295,43 @@ namespace SixLabors.ImageSharp.Tests.Helpers { MemoryAllocator memoryAllocator = Configuration.Default.MemoryAllocator; - using Buffer2D expected = memoryAllocator.Allocate2D(bufferWidth, bufferHeight, AllocationOptions.Clean); - using Buffer2D actual = memoryAllocator.Allocate2D(bufferWidth, bufferHeight, AllocationOptions.Clean); - var rect = new Rectangle(rectX, rectY, rectWidth, rectHeight); - - void FillRow(int y, Buffer2D buffer) + using (Buffer2D expected = memoryAllocator.Allocate2D(bufferWidth, bufferHeight, AllocationOptions.Clean)) + using (Buffer2D actual = memoryAllocator.Allocate2D(bufferWidth, bufferHeight, AllocationOptions.Clean)) { - for (int x = rect.Left; x < rect.Right; x++) - { - buffer[x, y] = new Point(x, y); - } - } + var rect = new Rectangle(rectX, rectY, rectWidth, rectHeight); - // Fill Expected data: - for (int y = rectY; y < rect.Bottom; y++) - { - FillRow(y, expected); - } - - // Fill actual data using IterateRows: - var settings = new ParallelExecutionSettings(maxDegreeOfParallelism, memoryAllocator); - - ParallelHelper.IterateRows( - rect, - settings, - rows => + void FillRow(int y, Buffer2D buffer) { - this.output.WriteLine(rows.ToString()); - for (int y = rows.Min; y < rows.Max; y++) + for (int x = rect.Left; x < rect.Right; x++) { - FillRow(y, actual); + buffer[x, y] = new Point(x, y); } - }); + } + + // Fill Expected data: + for (int y = rectY; y < rect.Bottom; y++) + { + FillRow(y, expected); + } + + // Fill actual data using IterateRows: + var settings = new ParallelExecutionSettings(maxDegreeOfParallelism, memoryAllocator); - // Assert: - TestImageExtensions.CompareBuffers(expected.GetSpan(), actual.GetSpan()); + ParallelHelper.IterateRows( + rect, + settings, + rows => + { + this.output.WriteLine(rows.ToString()); + for (int y = rows.Min; y < rows.Max; y++) + { + FillRow(y, actual); + } + }); + + // Assert: + TestImageExtensions.CompareBuffers(expected.GetSpan(), actual.GetSpan()); + } } [Theory] diff --git a/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs b/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs index ff1010927c..0bb3f49d64 100644 --- a/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs +++ b/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs @@ -19,18 +19,20 @@ namespace SixLabors.ImageSharp.Tests.Helpers [InlineData(10, 20, 0, 1)] public void GetMultiRowSpan(int width, int height, int min, int max) { - using Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(width, height); - var rows = new RowInterval(min, max); + using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(width, height)) + { + var rows = new RowInterval(min, max); - Span span = buffer.GetMultiRowSpan(rows); + Span span = buffer.GetMultiRowSpan(rows); - ref int expected0 = ref buffer.GetSpan()[min * width]; - int expectedLength = (max - min) * width; + ref int expected0 = ref buffer.GetSpan()[min * width]; + int expectedLength = (max - min) * width; - ref int actual0 = ref span[0]; + ref int actual0 = ref span[0]; - Assert.Equal(span.Length, expectedLength); - Assert.True(Unsafe.AreSame(ref expected0, ref actual0)); + Assert.Equal(span.Length, expectedLength); + Assert.True(Unsafe.AreSame(ref expected0, ref actual0)); + } } [Fact] diff --git a/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs b/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs index 107fb28649..62e2048431 100644 --- a/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs +++ b/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs @@ -16,58 +16,64 @@ namespace SixLabors.ImageSharp.Tests.IO [Fact] public void DoubleBufferedStreamReaderCanReadSingleByteFromOrigin() { - using MemoryStream stream = this.CreateTestStream(); - byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(this.allocator, stream); + using (MemoryStream stream = this.CreateTestStream()) + { + byte[] expected = stream.ToArray(); + var reader = new DoubleBufferedStreamReader(this.allocator, stream); - Assert.Equal(expected[0], reader.ReadByte()); + Assert.Equal(expected[0], reader.ReadByte()); - // We've read a whole chunk but increment by 1 in our reader. - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength); - Assert.Equal(1, reader.Position); + // We've read a whole chunk but increment by 1 in our reader. + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength); + Assert.Equal(1, reader.Position); + } } [Fact] public void DoubleBufferedStreamReaderCanReadSingleByteFromOffset() { - using MemoryStream stream = this.CreateTestStream(); - byte[] expected = stream.ToArray(); - const int offset = 5; - var reader = new DoubleBufferedStreamReader(this.allocator, stream); - reader.Position = offset; + using (MemoryStream stream = this.CreateTestStream()) + { + byte[] expected = stream.ToArray(); + const int offset = 5; + var reader = new DoubleBufferedStreamReader(this.allocator, stream); + reader.Position = offset; - Assert.Equal(expected[offset], reader.ReadByte()); + Assert.Equal(expected[offset], reader.ReadByte()); - // We've read a whole chunk but increment by 1 in our reader. - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength + offset); - Assert.Equal(offset + 1, reader.Position); + // We've read a whole chunk but increment by 1 in our reader. + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength + offset); + Assert.Equal(offset + 1, reader.Position); + } } [Fact] public void DoubleBufferedStreamReaderCanReadSubsequentSingleByteCorrectly() { - using MemoryStream stream = this.CreateTestStream(); - byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(this.allocator, stream); - - for (int i = 0; i < expected.Length; i++) + using (MemoryStream stream = this.CreateTestStream()) { - Assert.Equal(expected[i], reader.ReadByte()); - Assert.Equal(i + 1, reader.Position); + byte[] expected = stream.ToArray(); + var reader = new DoubleBufferedStreamReader(this.allocator, stream); - if (i < DoubleBufferedStreamReader.ChunkLength) + for (int i = 0; i < expected.Length; i++) { - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength); - } - else if (i >= DoubleBufferedStreamReader.ChunkLength && i < DoubleBufferedStreamReader.ChunkLength * 2) - { - // We should have advanced to the second chunk now. - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength * 2); - } - else - { - // We should have advanced to the third chunk now. - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength * 3); + Assert.Equal(expected[i], reader.ReadByte()); + Assert.Equal(i + 1, reader.Position); + + if (i < DoubleBufferedStreamReader.ChunkLength) + { + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength); + } + else if (i >= DoubleBufferedStreamReader.ChunkLength && i < DoubleBufferedStreamReader.ChunkLength * 2) + { + // We should have advanced to the second chunk now. + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength * 2); + } + else + { + // We should have advanced to the third chunk now. + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength * 3); + } } } } @@ -75,49 +81,53 @@ namespace SixLabors.ImageSharp.Tests.IO [Fact] public void DoubleBufferedStreamReaderCanReadMultipleBytesFromOrigin() { - using MemoryStream stream = this.CreateTestStream(); - var buffer = new byte[2]; - byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(this.allocator, stream); - - Assert.Equal(2, reader.Read(buffer, 0, 2)); - Assert.Equal(expected[0], buffer[0]); - Assert.Equal(expected[1], buffer[1]); - - // We've read a whole chunk but increment by the buffer length in our reader. - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength); - Assert.Equal(buffer.Length, reader.Position); + using (MemoryStream stream = this.CreateTestStream()) + { + var buffer = new byte[2]; + byte[] expected = stream.ToArray(); + var reader = new DoubleBufferedStreamReader(this.allocator, stream); + + Assert.Equal(2, reader.Read(buffer, 0, 2)); + Assert.Equal(expected[0], buffer[0]); + Assert.Equal(expected[1], buffer[1]); + + // We've read a whole chunk but increment by the buffer length in our reader. + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength); + Assert.Equal(buffer.Length, reader.Position); + } } [Fact] public void DoubleBufferedStreamReaderCanReadSubsequentMultipleByteCorrectly() { - using MemoryStream stream = this.CreateTestStream(); - var buffer = new byte[2]; - byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(this.allocator, stream); - - for (int i = 0, o = 0; i < expected.Length / 2; i++, o += 2) + using (MemoryStream stream = this.CreateTestStream()) { - Assert.Equal(2, reader.Read(buffer, 0, 2)); - Assert.Equal(expected[o], buffer[0]); - Assert.Equal(expected[o + 1], buffer[1]); - Assert.Equal(o + 2, reader.Position); + var buffer = new byte[2]; + byte[] expected = stream.ToArray(); + var reader = new DoubleBufferedStreamReader(this.allocator, stream); - int offset = i * 2; - if (offset < DoubleBufferedStreamReader.ChunkLength) + for (int i = 0, o = 0; i < expected.Length / 2; i++, o += 2) { - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength); - } - else if (offset >= DoubleBufferedStreamReader.ChunkLength && offset < DoubleBufferedStreamReader.ChunkLength * 2) - { - // We should have advanced to the second chunk now. - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength * 2); - } - else - { - // We should have advanced to the third chunk now. - Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength * 3); + Assert.Equal(2, reader.Read(buffer, 0, 2)); + Assert.Equal(expected[o], buffer[0]); + Assert.Equal(expected[o + 1], buffer[1]); + Assert.Equal(o + 2, reader.Position); + + int offset = i * 2; + if (offset < DoubleBufferedStreamReader.ChunkLength) + { + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength); + } + else if (offset >= DoubleBufferedStreamReader.ChunkLength && offset < DoubleBufferedStreamReader.ChunkLength * 2) + { + // We should have advanced to the second chunk now. + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength * 2); + } + else + { + // We should have advanced to the third chunk now. + Assert.Equal(stream.Position, DoubleBufferedStreamReader.ChunkLength * 3); + } } } } @@ -125,31 +135,33 @@ namespace SixLabors.ImageSharp.Tests.IO [Fact] public void DoubleBufferedStreamReaderCanSkip() { - using MemoryStream stream = this.CreateTestStream(); - byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(this.allocator, stream); + using (MemoryStream stream = this.CreateTestStream()) + { + byte[] expected = stream.ToArray(); + var reader = new DoubleBufferedStreamReader(this.allocator, stream); - int skip = 50; - int plusOne = 1; - int skip2 = DoubleBufferedStreamReader.ChunkLength; + int skip = 50; + int plusOne = 1; + int skip2 = DoubleBufferedStreamReader.ChunkLength; - // Skip - reader.Skip(skip); - Assert.Equal(skip, reader.Position); - Assert.Equal(stream.Position, reader.Position); + // Skip + reader.Skip(skip); + Assert.Equal(skip, reader.Position); + Assert.Equal(stream.Position, reader.Position); - // Read - Assert.Equal(expected[skip], reader.ReadByte()); + // Read + Assert.Equal(expected[skip], reader.ReadByte()); - // Skip Again - reader.Skip(skip2); + // Skip Again + reader.Skip(skip2); - // First Skip + First Read + Second Skip - int position = skip + plusOne + skip2; + // First Skip + First Read + Second Skip + int position = skip + plusOne + skip2; - Assert.Equal(position, reader.Position); - Assert.Equal(stream.Position, reader.Position); - Assert.Equal(expected[position], reader.ReadByte()); + Assert.Equal(position, reader.Position); + Assert.Equal(stream.Position, reader.Position); + Assert.Equal(expected[position], reader.ReadByte()); + } } private MemoryStream CreateTestStream() diff --git a/tests/ImageSharp.Tests/Image/ImageCloneTests.cs b/tests/ImageSharp.Tests/Image/ImageCloneTests.cs index fb3fdf2b0b..bc2eec79d1 100644 --- a/tests/ImageSharp.Tests/Image/ImageCloneTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageCloneTests.cs @@ -32,22 +32,24 @@ namespace SixLabors.ImageSharp.Tests [WithTestPatternImages(9, 9, PixelTypes.Rgba32)] public void CloneAs_ToBgra32(TestImageProvider provider) { - using Image image = provider.GetImage(); - using Image clone = image.CloneAs(); - for (int y = 0; y < image.Height; y++) + using (Image image = provider.GetImage()) + using (Image clone = image.CloneAs()) { - Span row = image.GetPixelRowSpan(y); - Span rowClone = clone.GetPixelRowSpan(y); - - for (int x = 0; x < image.Width; x++) + for (int y = 0; y < image.Height; y++) { - Rgba32 expected = row[x]; - Bgra32 actual = rowClone[x]; - - Assert.Equal(expected.R, actual.R); - Assert.Equal(expected.G, actual.G); - Assert.Equal(expected.B, actual.B); - Assert.Equal(expected.A, actual.A); + Span row = image.GetPixelRowSpan(y); + Span rowClone = clone.GetPixelRowSpan(y); + + for (int x = 0; x < image.Width; x++) + { + Rgba32 expected = row[x]; + Bgra32 actual = rowClone[x]; + + Assert.Equal(expected.R, actual.R); + Assert.Equal(expected.G, actual.G); + Assert.Equal(expected.B, actual.B); + Assert.Equal(expected.A, actual.A); + } } } } @@ -56,21 +58,23 @@ namespace SixLabors.ImageSharp.Tests [WithTestPatternImages(9, 9, PixelTypes.Rgba32)] public void CloneAs_ToBgr24(TestImageProvider provider) { - using Image image = provider.GetImage(); - using Image clone = image.CloneAs(); - for (int y = 0; y < image.Height; y++) + using (Image image = provider.GetImage()) + using (Image clone = image.CloneAs()) { - Span row = image.GetPixelRowSpan(y); - Span rowClone = clone.GetPixelRowSpan(y); - - for (int x = 0; x < image.Width; x++) + for (int y = 0; y < image.Height; y++) { - Rgba32 expected = row[x]; - Bgr24 actual = rowClone[x]; - - Assert.Equal(expected.R, actual.R); - Assert.Equal(expected.G, actual.G); - Assert.Equal(expected.B, actual.B); + Span row = image.GetPixelRowSpan(y); + Span rowClone = clone.GetPixelRowSpan(y); + + for (int x = 0; x < image.Width; x++) + { + Rgba32 expected = row[x]; + Bgr24 actual = rowClone[x]; + + Assert.Equal(expected.R, actual.R); + Assert.Equal(expected.G, actual.G); + Assert.Equal(expected.B, actual.B); + } } } } @@ -79,22 +83,24 @@ namespace SixLabors.ImageSharp.Tests [WithTestPatternImages(9, 9, PixelTypes.Rgba32)] public void CloneAs_ToArgb32(TestImageProvider provider) { - using Image image = provider.GetImage(); - using Image clone = image.CloneAs(); - for (int y = 0; y < image.Height; y++) + using (Image image = provider.GetImage()) + using (Image clone = image.CloneAs()) { - Span row = image.GetPixelRowSpan(y); - Span rowClone = clone.GetPixelRowSpan(y); - - for (int x = 0; x < image.Width; x++) + for (int y = 0; y < image.Height; y++) { - Rgba32 expected = row[x]; - Argb32 actual = rowClone[x]; - - Assert.Equal(expected.R, actual.R); - Assert.Equal(expected.G, actual.G); - Assert.Equal(expected.B, actual.B); - Assert.Equal(expected.A, actual.A); + Span row = image.GetPixelRowSpan(y); + Span rowClone = clone.GetPixelRowSpan(y); + + for (int x = 0; x < image.Width; x++) + { + Rgba32 expected = row[x]; + Argb32 actual = rowClone[x]; + + Assert.Equal(expected.R, actual.R); + Assert.Equal(expected.G, actual.G); + Assert.Equal(expected.B, actual.B); + Assert.Equal(expected.A, actual.A); + } } } } @@ -103,21 +109,23 @@ namespace SixLabors.ImageSharp.Tests [WithTestPatternImages(9, 9, PixelTypes.Rgba32)] public void CloneAs_ToRgb24(TestImageProvider provider) { - using Image image = provider.GetImage(); - using Image clone = image.CloneAs(); - for (int y = 0; y < image.Height; y++) + using (Image image = provider.GetImage()) + using (Image clone = image.CloneAs()) { - Span row = image.GetPixelRowSpan(y); - Span rowClone = clone.GetPixelRowSpan(y); - - for (int x = 0; x < image.Width; x++) + for (int y = 0; y < image.Height; y++) { - Rgba32 expected = row[x]; - Rgb24 actual = rowClone[x]; - - Assert.Equal(expected.R, actual.R); - Assert.Equal(expected.G, actual.G); - Assert.Equal(expected.B, actual.B); + Span row = image.GetPixelRowSpan(y); + Span rowClone = clone.GetPixelRowSpan(y); + + for (int x = 0; x < image.Width; x++) + { + Rgba32 expected = row[x]; + Rgb24 actual = rowClone[x]; + + Assert.Equal(expected.R, actual.R); + Assert.Equal(expected.G, actual.G); + Assert.Equal(expected.B, actual.B); + } } } } diff --git a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs index 0ead18c765..ea1afa5b62 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs @@ -192,11 +192,15 @@ namespace SixLabors.ImageSharp.Tests public void CloneFrame(TestImageProvider provider) where TPixel : struct, IPixel { - using Image img = provider.GetImage(); - img.Frames.AddFrame(new ImageFrame(Configuration.Default, 10, 10)); // add a frame anyway - using Image cloned = img.Frames.CloneFrame(0); - Assert.Equal(2, img.Frames.Count); - cloned.ComparePixelBufferTo(img.GetPixelSpan()); + using (Image img = provider.GetImage()) + { + img.Frames.AddFrame(new ImageFrame(Configuration.Default, 10, 10)); // add a frame anyway + using (Image cloned = img.Frames.CloneFrame(0)) + { + Assert.Equal(2, img.Frames.Count); + cloned.ComparePixelBufferTo(img.GetPixelSpan()); + } + } } [Theory] @@ -204,13 +208,17 @@ namespace SixLabors.ImageSharp.Tests public void ExtractFrame(TestImageProvider provider) where TPixel : struct, IPixel { - using Image img = provider.GetImage(); - var sourcePixelData = img.GetPixelSpan().ToArray(); + using (Image img = provider.GetImage()) + { + var sourcePixelData = img.GetPixelSpan().ToArray(); - img.Frames.AddFrame(new ImageFrame(Configuration.Default, 10, 10)); - using Image cloned = img.Frames.ExportFrame(0); - Assert.Equal(1, img.Frames.Count); - cloned.ComparePixelBufferTo(sourcePixelData); + img.Frames.AddFrame(new ImageFrame(Configuration.Default, 10, 10)); + using (Image cloned = img.Frames.ExportFrame(0)) + { + Assert.Equal(1, img.Frames.Count); + cloned.ComparePixelBufferTo(sourcePixelData); + } + } } [Fact] diff --git a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs index 92945f6f50..415c1af19f 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs @@ -148,16 +148,20 @@ namespace SixLabors.ImageSharp.Tests public void CloneFrame(TestImageProvider provider) where TPixel : struct, IPixel { - using Image img = provider.GetImage(); - ImageFrameCollection nonGenericFrameCollection = img.Frames; + using (Image img = provider.GetImage()) + { + ImageFrameCollection nonGenericFrameCollection = img.Frames; - nonGenericFrameCollection.AddFrame(new ImageFrame(Configuration.Default, 10, 10)); // add a frame anyway - using Image cloned = nonGenericFrameCollection.CloneFrame(0); - Assert.Equal(2, img.Frames.Count); + nonGenericFrameCollection.AddFrame(new ImageFrame(Configuration.Default, 10, 10)); // add a frame anyway + using (Image cloned = nonGenericFrameCollection.CloneFrame(0)) + { + Assert.Equal(2, img.Frames.Count); - var expectedClone = (Image)cloned; + var expectedClone = (Image)cloned; - expectedClone.ComparePixelBufferTo(img.GetPixelSpan()); + expectedClone.ComparePixelBufferTo(img.GetPixelSpan()); + } + } } [Theory] @@ -165,17 +169,21 @@ namespace SixLabors.ImageSharp.Tests public void ExtractFrame(TestImageProvider provider) where TPixel : struct, IPixel { - using Image img = provider.GetImage(); - var sourcePixelData = img.GetPixelSpan().ToArray(); + using (Image img = provider.GetImage()) + { + var sourcePixelData = img.GetPixelSpan().ToArray(); - ImageFrameCollection nonGenericFrameCollection = img.Frames; + ImageFrameCollection nonGenericFrameCollection = img.Frames; - nonGenericFrameCollection.AddFrame(new ImageFrame(Configuration.Default, 10, 10)); - using Image cloned = nonGenericFrameCollection.ExportFrame(0); - Assert.Equal(1, img.Frames.Count); + nonGenericFrameCollection.AddFrame(new ImageFrame(Configuration.Default, 10, 10)); + using (Image cloned = nonGenericFrameCollection.ExportFrame(0)) + { + Assert.Equal(1, img.Frames.Count); - var expectedClone = (Image)cloned; - expectedClone.ComparePixelBufferTo(sourcePixelData); + var expectedClone = (Image)cloned; + expectedClone.ComparePixelBufferTo(sourcePixelData); + } + } } [Fact] @@ -262,34 +270,39 @@ namespace SixLabors.ImageSharp.Tests public void ConstructGif_FromDifferentPixelTypes(TestImageProvider provider) where TPixel : struct, IPixel { - using Image source = provider.GetImage(); - using var dest = new Image(source.GetConfiguration(), source.Width, source.Height); - - // Giphy.gif has 5 frames - ImportFrameAs(source.Frames, dest.Frames, 0); - ImportFrameAs(source.Frames, dest.Frames, 1); - ImportFrameAs(source.Frames, dest.Frames, 2); - ImportFrameAs(source.Frames, dest.Frames, 3); - ImportFrameAs(source.Frames, dest.Frames, 4); + using (Image source = provider.GetImage()) + using (var dest = new Image(source.GetConfiguration(), source.Width, source.Height)) + { + // Giphy.gif has 5 frames + ImportFrameAs(source.Frames, dest.Frames, 0); + ImportFrameAs(source.Frames, dest.Frames, 1); + ImportFrameAs(source.Frames, dest.Frames, 2); + ImportFrameAs(source.Frames, dest.Frames, 3); + ImportFrameAs(source.Frames, dest.Frames, 4); - // Drop the original empty root frame: - dest.Frames.RemoveFrame(0); + // Drop the original empty root frame: + dest.Frames.RemoveFrame(0); - dest.DebugSave(provider, appendSourceFileOrDescription: false, extension: "gif"); - dest.CompareToOriginal(provider); + dest.DebugSave(provider, appendSourceFileOrDescription: false, extension: "gif"); + dest.CompareToOriginal(provider); - for (int i = 0; i < 5; i++) - { - CompareGifMetadata(source.Frames[i], dest.Frames[i]); + for (int i = 0; i < 5; i++) + { + CompareGifMetadata(source.Frames[i], dest.Frames[i]); + } } } private static void ImportFrameAs(ImageFrameCollection source, ImageFrameCollection destination, int index) where TPixel : struct, IPixel { - using Image temp = source.CloneFrame(index); - using Image temp2 = temp.CloneAs(); - destination.AddFrame(temp2.Frames.RootFrame); + using (Image temp = source.CloneFrame(index)) + { + using (Image temp2 = temp.CloneAs()) + { + destination.AddFrame(temp2.Frames.RootFrame); + } + } } private static void CompareGifMetadata(ImageFrame a, ImageFrame b) diff --git a/tests/ImageSharp.Tests/Image/ImageRotationTests.cs b/tests/ImageSharp.Tests/Image/ImageRotationTests.cs index 6e17407ca1..28196c0da1 100644 --- a/tests/ImageSharp.Tests/Image/ImageRotationTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageRotationTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; @@ -47,10 +47,12 @@ namespace SixLabors.ImageSharp.Tests private static (Size original, Size rotated) Rotate(int angle) { var file = TestFile.Create(TestImages.Bmp.Car); - using var image = Image.Load(file.FullPath); - Size original = image.Size(); - image.Mutate(x => x.Rotate(angle)); - return (original, image.Size()); + using (var image = Image.Load(file.FullPath)) + { + Size original = image.Size(); + image.Mutate(x => x.Rotate(angle)); + return (original, image.Size()); + } } } } diff --git a/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs b/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs index c639f37cd2..dcf4dcfe84 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs @@ -71,9 +71,11 @@ namespace SixLabors.ImageSharp.Tests [Fact] public void FromStream_GlobalConfiguration() { - using var stream = new MemoryStream(this.ActualImageBytes); - IImageFormat type = Image.DetectFormat(stream); - Assert.Equal(ExpectedGlobalFormat, type); + using (var stream = new MemoryStream(this.ActualImageBytes)) + { + IImageFormat type = Image.DetectFormat(stream); + Assert.Equal(ExpectedGlobalFormat, type); + } } [Fact] diff --git a/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs b/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs index 7d75bd0b02..7a5fa87290 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs @@ -1,4 +1,4 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using System; @@ -18,15 +18,17 @@ namespace SixLabors.ImageSharp.Tests { Rgba32[] data = { Rgba32.Black, Rgba32.White, Rgba32.White, Rgba32.Black, }; - using Image img = useSpan - ? Image.LoadPixelData(data.AsSpan(), 2, 2) - : Image.LoadPixelData(data, 2, 2); - Assert.NotNull(img); - Assert.Equal(Rgba32.Black, img[0, 0]); - Assert.Equal(Rgba32.White, img[0, 1]); + using (Image img = useSpan + ? Image.LoadPixelData(data.AsSpan(), 2, 2) + : Image.LoadPixelData(data, 2, 2)) + { + Assert.NotNull(img); + Assert.Equal(Rgba32.Black, img[0, 0]); + Assert.Equal(Rgba32.White, img[0, 1]); - Assert.Equal(Rgba32.White, img[1, 0]); - Assert.Equal(Rgba32.Black, img[1, 1]); + Assert.Equal(Rgba32.White, img[1, 0]); + Assert.Equal(Rgba32.Black, img[1, 1]); + } } [Theory] @@ -41,16 +43,18 @@ namespace SixLabors.ImageSharp.Tests 255, 255, 255, 255, // 1,0 0, 0, 0, 255, // 1,1 }; - using Image img = useSpan - ? Image.LoadPixelData(data.AsSpan(), 2, 2) - : Image.LoadPixelData(data, 2, 2); - Assert.NotNull(img); - Assert.Equal(Rgba32.Black, img[0, 0]); - Assert.Equal(Rgba32.White, img[0, 1]); + using (Image img = useSpan + ? Image.LoadPixelData(data.AsSpan(), 2, 2) + : Image.LoadPixelData(data, 2, 2)) + { + Assert.NotNull(img); + Assert.Equal(Rgba32.Black, img[0, 0]); + Assert.Equal(Rgba32.White, img[0, 1]); - Assert.Equal(Rgba32.White, img[1, 0]); - Assert.Equal(Rgba32.Black, img[1, 1]); + Assert.Equal(Rgba32.White, img[1, 0]); + Assert.Equal(Rgba32.Black, img[1, 1]); + } } } } -} +} \ No newline at end of file diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs index 006ec2226a..4c6b92100e 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs @@ -25,45 +25,57 @@ namespace SixLabors.ImageSharp.Tests [Fact] public void Path_Specific() { - using var img = Image.Load(this.Path); - VerifyDecodedImage(img); + using (var img = Image.Load(this.Path)) + { + VerifyDecodedImage(img); + } } [Fact] public void Path_Agnostic() { - using var img = Image.Load(this.Path); - VerifyDecodedImage(img); + using (var img = Image.Load(this.Path)) + { + VerifyDecodedImage(img); + } } [Fact] public void Path_Decoder_Specific() { - using var img = Image.Load(this.Path, new BmpDecoder()); - VerifyDecodedImage(img); + using (var img = Image.Load(this.Path, new BmpDecoder())) + { + VerifyDecodedImage(img); + } } [Fact] public void Path_Decoder_Agnostic() { - using var img = Image.Load(this.Path, new BmpDecoder()); - VerifyDecodedImage(img); + using (var img = Image.Load(this.Path, new BmpDecoder())) + { + VerifyDecodedImage(img); + } } [Fact] public void Path_OutFormat_Specific() { - using var img = Image.Load(this.Path, out IImageFormat format); - VerifyDecodedImage(img); - Assert.IsType(format); + using (var img = Image.Load(this.Path, out IImageFormat format)) + { + VerifyDecodedImage(img); + Assert.IsType(format); + } } [Fact] public void Path_OutFormat_Agnostic() { - using var img = Image.Load(this.Path, out IImageFormat format); - VerifyDecodedImage(img); - Assert.IsType(format); + using (var img = Image.Load(this.Path, out IImageFormat format)) + { + VerifyDecodedImage(img); + Assert.IsType(format); + } } [Fact] diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs index b7c4d27fa3..b8ed6e75b5 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs @@ -29,8 +29,10 @@ namespace SixLabors.ImageSharp.Tests [InlineData(true)] public void Bytes_Specific(bool useSpan) { - using var img = useSpan ? Image.Load(ByteSpan) : Image.Load(ByteArray); - VerifyDecodedImage(img); + using (var img = useSpan ? Image.Load(ByteSpan) : Image.Load(ByteArray)) + { + VerifyDecodedImage(img); + } } [Theory] @@ -38,8 +40,10 @@ namespace SixLabors.ImageSharp.Tests [InlineData(true)] public void Bytes_Agnostic(bool useSpan) { - using var img = useSpan ? Image.Load(ByteSpan) : Image.Load(ByteArray); - VerifyDecodedImage(img); + using (var img = useSpan ? Image.Load(ByteSpan) : Image.Load(ByteArray)) + { + VerifyDecodedImage(img); + } } [Theory] @@ -47,8 +51,10 @@ namespace SixLabors.ImageSharp.Tests [InlineData(true)] public void Bytes_Decoder_Specific(bool useSpan) { - using var img = useSpan ? Image.Load(ByteSpan, new BmpDecoder()) : Image.Load(ByteArray, new BmpDecoder()); - VerifyDecodedImage(img); + using (var img = useSpan ? Image.Load(ByteSpan, new BmpDecoder()) : Image.Load(ByteArray, new BmpDecoder())) + { + VerifyDecodedImage(img); + } } [Theory] @@ -56,8 +62,10 @@ namespace SixLabors.ImageSharp.Tests [InlineData(true)] public void Bytes_Decoder_Agnostic(bool useSpan) { - using var img = useSpan ? Image.Load(ByteSpan, new BmpDecoder()) : Image.Load(ByteArray, new BmpDecoder()); - VerifyDecodedImage(img); + using (var img = useSpan ? Image.Load(ByteSpan, new BmpDecoder()) : Image.Load(ByteArray, new BmpDecoder())) + { + VerifyDecodedImage(img); + } } [Theory] @@ -66,9 +74,11 @@ namespace SixLabors.ImageSharp.Tests public void Bytes_OutFormat_Specific(bool useSpan) { IImageFormat format; - using var img = useSpan ? Image.Load(ByteSpan, out format) : Image.Load(ByteArray, out format); - VerifyDecodedImage(img); - Assert.IsType(format); + using (var img = useSpan ? Image.Load(ByteSpan, out format) : Image.Load(ByteArray, out format)) + { + VerifyDecodedImage(img); + Assert.IsType(format); + } } [Theory] @@ -77,9 +87,11 @@ namespace SixLabors.ImageSharp.Tests public void Bytes_OutFormat_Agnostic(bool useSpan) { IImageFormat format; - using var img = useSpan ? Image.Load(ByteSpan, out format) : Image.Load(ByteArray, out format); - VerifyDecodedImage(img); - Assert.IsType(format); + using (var img = useSpan ? Image.Load(ByteSpan, out format) : Image.Load(ByteArray, out format)) + { + VerifyDecodedImage(img); + Assert.IsType(format); + } } } } diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs index 74d4bf4db9..0c722b4d66 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs @@ -28,45 +28,57 @@ namespace SixLabors.ImageSharp.Tests [Fact] public void Stream_Specific() { - using var img = Image.Load(this.Stream); - VerifyDecodedImage(img); + using (var img = Image.Load(this.Stream)) + { + VerifyDecodedImage(img); + } } [Fact] public void Stream_Agnostic() { - using var img = Image.Load(this.Stream); - VerifyDecodedImage(img); + using (var img = Image.Load(this.Stream)) + { + VerifyDecodedImage(img); + } } [Fact] public void Stream_OutFormat_Specific() { - using var img = Image.Load(this.Stream, out IImageFormat format); - VerifyDecodedImage(img); - Assert.IsType(format); + using (var img = Image.Load(this.Stream, out IImageFormat format)) + { + VerifyDecodedImage(img); + Assert.IsType(format); + } } [Fact] public void Stream_Decoder_Specific() { - using var img = Image.Load(this.Stream, new BmpDecoder()); - VerifyDecodedImage(img); + using (var img = Image.Load(this.Stream, new BmpDecoder())) + { + VerifyDecodedImage(img); + } } [Fact] public void Stream_Decoder_Agnostic() { - using var img = Image.Load(this.Stream, new BmpDecoder()); - VerifyDecodedImage(img); + using (var img = Image.Load(this.Stream, new BmpDecoder())) + { + VerifyDecodedImage(img); + } } [Fact] public void Stream_OutFormat_Agnostic() { - using var img = Image.Load(this.Stream, out IImageFormat format); - VerifyDecodedImage(img); - Assert.IsType(format); + using (var img = Image.Load(this.Stream, out IImageFormat format)) + { + VerifyDecodedImage(img); + Assert.IsType(format); + } } public void Dispose() diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Save.cs b/tests/ImageSharp.Tests/Image/ImageTests.Save.cs index 597f32b666..dc65ecfef9 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Save.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Save.cs @@ -44,10 +44,12 @@ namespace SixLabors.ImageSharp.Tests Assert.Throws( () => - { - using var image = new Image(10, 10); - image.Save(file); - }); + { + using (var image = new Image(10, 10)) + { + image.Save(file); + } + }); } [Fact] @@ -56,11 +58,15 @@ namespace SixLabors.ImageSharp.Tests string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); string file = System.IO.Path.Combine(dir, "SetEncoding.dat"); - using var image = new Image(10, 10); - image.Save(file, new PngEncoder()); + using (var image = new Image(10, 10)) + { + image.Save(file, new PngEncoder()); + } - using var load = Image.Load(file, out var mime); - Assert.Equal("image/png", mime.DefaultMimeType); + using (Image.Load(file, out var mime)) + { + Assert.Equal("image/png", mime.DefaultMimeType); + } } [Fact] @@ -69,8 +75,10 @@ namespace SixLabors.ImageSharp.Tests var image = new Image(5, 5); image.Dispose(); IImageEncoder encoder = Mock.Of(); - using var stream = new MemoryStream(); - Assert.Throws(() => image.Save(stream, encoder)); + using (var stream = new MemoryStream()) + { + Assert.Throws(() => image.Save(stream, encoder)); + } } } } diff --git a/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs b/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs index 047ad0fbce..0cf3071a0f 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs @@ -88,12 +88,14 @@ namespace SixLabors.ImageSharp.Tests var array = new Rgba32[25]; var memory = new Memory(array); - using var image = Image.WrapMemory(cfg, memory, 5, 5, metaData); - ref Rgba32 pixel0 = ref image.GetPixelSpan()[0]; - Assert.True(Unsafe.AreSame(ref array[0], ref pixel0)); + using (var image = Image.WrapMemory(cfg, memory, 5, 5, metaData)) + { + ref Rgba32 pixel0 = ref image.GetPixelSpan()[0]; + Assert.True(Unsafe.AreSame(ref array[0], ref pixel0)); - Assert.Equal(cfg, image.GetConfiguration()); - Assert.Equal(metaData, image.Metadata); + Assert.Equal(cfg, image.GetConfiguration()); + Assert.Equal(metaData, image.Metadata); + } } [Fact] @@ -104,27 +106,33 @@ namespace SixLabors.ImageSharp.Tests return; } - using var bmp = new Bitmap(51, 23); - using var memoryManager = new BitmapMemoryManager(bmp); - Memory memory = memoryManager.Memory; - Bgra32 bg = Color.Red; - Bgra32 fg = Color.Green; - - using var image = Image.WrapMemory(memory, bmp.Width, bmp.Height); - Assert.Equal(memory, image.GetPixelMemory()); - image.GetPixelSpan().Fill(bg); - for (var i = 10; i < 20; i++) + using (var bmp = new Bitmap(51, 23)) { - image.GetPixelRowSpan(i).Slice(10, 10).Fill(fg); - } - - Assert.False(memoryManager.IsDisposed); + using (var memoryManager = new BitmapMemoryManager(bmp)) + { + Memory memory = memoryManager.Memory; + Bgra32 bg = Color.Red; + Bgra32 fg = Color.Green; + + using (var image = Image.WrapMemory(memory, bmp.Width, bmp.Height)) + { + Assert.Equal(memory, image.GetPixelMemory()); + image.GetPixelSpan().Fill(bg); + for (var i = 10; i < 20; i++) + { + image.GetPixelRowSpan(i).Slice(10, 10).Fill(fg); + } + } + + Assert.False(memoryManager.IsDisposed); + } - string fn = System.IO.Path.Combine( - TestEnvironment.ActualOutputDirectoryFullPath, - $"{nameof(this.WrapSystemDrawingBitmap_WhenObserved)}.bmp"); + string fn = System.IO.Path.Combine( + TestEnvironment.ActualOutputDirectoryFullPath, + $"{nameof(this.WrapSystemDrawingBitmap_WhenObserved)}.bmp"); - bmp.Save(fn, ImageFormat.Bmp); + bmp.Save(fn, ImageFormat.Bmp); + } } [Fact] @@ -135,29 +143,31 @@ namespace SixLabors.ImageSharp.Tests return; } - using var bmp = new Bitmap(51, 23); - var memoryManager = new BitmapMemoryManager(bmp); - Bgra32 bg = Color.Red; - Bgra32 fg = Color.Green; - - using (var image = Image.WrapMemory(memoryManager, bmp.Width, bmp.Height)) + using (var bmp = new Bitmap(51, 23)) { - Assert.Equal(memoryManager.Memory, image.GetPixelMemory()); + var memoryManager = new BitmapMemoryManager(bmp); + Bgra32 bg = Color.Red; + Bgra32 fg = Color.Green; - image.GetPixelSpan().Fill(bg); - for (var i = 10; i < 20; i++) + using (var image = Image.WrapMemory(memoryManager, bmp.Width, bmp.Height)) { - image.GetPixelRowSpan(i).Slice(10, 10).Fill(fg); + Assert.Equal(memoryManager.Memory, image.GetPixelMemory()); + + image.GetPixelSpan().Fill(bg); + for (var i = 10; i < 20; i++) + { + image.GetPixelRowSpan(i).Slice(10, 10).Fill(fg); + } } - } - Assert.True(memoryManager.IsDisposed); + Assert.True(memoryManager.IsDisposed); - string fn = System.IO.Path.Combine( - TestEnvironment.ActualOutputDirectoryFullPath, - $"{nameof(this.WrapSystemDrawingBitmap_WhenOwned)}.bmp"); + string fn = System.IO.Path.Combine( + TestEnvironment.ActualOutputDirectoryFullPath, + $"{nameof(this.WrapSystemDrawingBitmap_WhenOwned)}.bmp"); - bmp.Save(fn, ImageFormat.Bmp); + bmp.Save(fn, ImageFormat.Bmp); + } } private static bool ShouldSkipBitmapTest => diff --git a/tests/ImageSharp.Tests/Image/ImageTests.cs b/tests/ImageSharp.Tests/Image/ImageTests.cs index d1f6dae114..99bdfceccb 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.cs @@ -21,13 +21,15 @@ namespace SixLabors.ImageSharp.Tests [Fact] public void Width_Height() { - using var image = new Image(11, 23); - Assert.Equal(11, image.Width); - Assert.Equal(23, image.Height); - Assert.Equal(11 * 23, image.GetPixelSpan().Length); - image.ComparePixelBufferTo(default(Rgba32)); + using (var image = new Image(11, 23)) + { + Assert.Equal(11, image.Width); + Assert.Equal(23, image.Height); + Assert.Equal(11 * 23, image.GetPixelSpan().Length); + image.ComparePixelBufferTo(default(Rgba32)); - Assert.Equal(Configuration.Default, image.GetConfiguration()); + Assert.Equal(Configuration.Default, image.GetConfiguration()); + } } [Fact] @@ -35,13 +37,15 @@ namespace SixLabors.ImageSharp.Tests { Configuration configuration = Configuration.Default.Clone(); - using var image = new Image(configuration, 11, 23); - Assert.Equal(11, image.Width); - Assert.Equal(23, image.Height); - Assert.Equal(11 * 23, image.GetPixelSpan().Length); - image.ComparePixelBufferTo(default(Rgba32)); + using (var image = new Image(configuration, 11, 23)) + { + Assert.Equal(11, image.Width); + Assert.Equal(23, image.Height); + Assert.Equal(11 * 23, image.GetPixelSpan().Length); + image.ComparePixelBufferTo(default(Rgba32)); - Assert.Equal(configuration, image.GetConfiguration()); + Assert.Equal(configuration, image.GetConfiguration()); + } } [Fact] @@ -50,13 +54,15 @@ namespace SixLabors.ImageSharp.Tests Configuration configuration = Configuration.Default.Clone(); Rgba32 color = Rgba32.Aquamarine; - using var image = new Image(configuration, 11, 23, color); - Assert.Equal(11, image.Width); - Assert.Equal(23, image.Height); - Assert.Equal(11 * 23, image.GetPixelSpan().Length); - image.ComparePixelBufferTo(color); + using (var image = new Image(configuration, 11, 23, color)) + { + Assert.Equal(11, image.Width); + Assert.Equal(23, image.Height); + Assert.Equal(11 * 23, image.GetPixelSpan().Length); + image.ComparePixelBufferTo(color); - Assert.Equal(configuration, image.GetConfiguration()); + Assert.Equal(configuration, image.GetConfiguration()); + } } [Fact] @@ -68,13 +74,15 @@ namespace SixLabors.ImageSharp.Tests configuration.MemoryAllocator = new TestMemoryAllocator(dirtyValue); var metadata = new ImageMetadata(); - using var image = Image.CreateUninitialized(configuration, 21, 22, metadata); - Assert.Equal(21, image.Width); - Assert.Equal(22, image.Height); - Assert.Same(configuration, image.GetConfiguration()); - Assert.Same(metadata, image.Metadata); + using (var image = Image.CreateUninitialized(configuration, 21, 22, metadata)) + { + Assert.Equal(21, image.Width); + Assert.Equal(22, image.Height); + Assert.Same(configuration, image.GetConfiguration()); + Assert.Same(metadata, image.Metadata); - Assert.Equal(dirtyValue, image[5, 5].PackedValue); + Assert.Equal(dirtyValue, image[5, 5].PackedValue); + } } } } diff --git a/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs b/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs index 159b458848..02b59825b7 100644 --- a/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs +++ b/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs @@ -35,20 +35,24 @@ namespace SixLabors.ImageSharp.Tests.Memory [InlineData(1025, 17)] public void Construct(int width, int height) { - using Buffer2D buffer = this.MemoryAllocator.Allocate2D(width, height); - Assert.Equal(width, buffer.Width); - Assert.Equal(height, buffer.Height); - Assert.Equal(width * height, buffer.GetMemory().Length); + using (Buffer2D buffer = this.MemoryAllocator.Allocate2D(width, height)) + { + Assert.Equal(width, buffer.Width); + Assert.Equal(height, buffer.Height); + Assert.Equal(width * height, buffer.GetMemory().Length); + } } [Fact] public void CreateClean() { - using Buffer2D buffer = this.MemoryAllocator.Allocate2D(42, 42, AllocationOptions.Clean); - Span span = buffer.GetSpan(); - for (int j = 0; j < span.Length; j++) + using (Buffer2D buffer = this.MemoryAllocator.Allocate2D(42, 42, AllocationOptions.Clean)) { - Assert.Equal(0, span[j]); + Span span = buffer.GetSpan(); + for (int j = 0; j < span.Length; j++) + { + Assert.Equal(0, span[j]); + } } } @@ -58,12 +62,14 @@ namespace SixLabors.ImageSharp.Tests.Memory [InlineData(17, 42, 41)] public void GetRowSpanY(int width, int height, int y) { - using Buffer2D buffer = this.MemoryAllocator.Allocate2D(width, height); - Span span = buffer.GetRowSpan(y); + using (Buffer2D buffer = this.MemoryAllocator.Allocate2D(width, height)) + { + Span span = buffer.GetRowSpan(y); - // Assert.Equal(width * y, span.Start); - Assert.Equal(width, span.Length); - Assert.SpanPointsTo(span, buffer.MemorySource.MemoryOwner, width * y); + // Assert.Equal(width * y, span.Start); + Assert.Equal(width, span.Length); + Assert.SpanPointsTo(span, buffer.MemorySource.MemoryOwner, width * y); + } } [Theory] @@ -72,31 +78,35 @@ namespace SixLabors.ImageSharp.Tests.Memory [InlineData(99, 88, 98, 87)] public void Indexer(int width, int height, int x, int y) { - using Buffer2D buffer = this.MemoryAllocator.Allocate2D(width, height); - Span span = buffer.MemorySource.GetSpan(); + using (Buffer2D buffer = this.MemoryAllocator.Allocate2D(width, height)) + { + Span span = buffer.MemorySource.GetSpan(); - ref TestStructs.Foo actual = ref buffer[x, y]; + ref TestStructs.Foo actual = ref buffer[x, y]; - ref TestStructs.Foo expected = ref span[(y * width) + x]; + ref TestStructs.Foo expected = ref span[(y * width) + x]; - Assert.True(Unsafe.AreSame(ref expected, ref actual)); + Assert.True(Unsafe.AreSame(ref expected, ref actual)); + } } [Fact] public void SwapOrCopyContent() { - using Buffer2D a = this.MemoryAllocator.Allocate2D(10, 5); - using Buffer2D b = this.MemoryAllocator.Allocate2D(3, 7); - IMemoryOwner aa = a.MemorySource.MemoryOwner; - IMemoryOwner bb = b.MemorySource.MemoryOwner; + using (Buffer2D a = this.MemoryAllocator.Allocate2D(10, 5)) + using (Buffer2D b = this.MemoryAllocator.Allocate2D(3, 7)) + { + IMemoryOwner aa = a.MemorySource.MemoryOwner; + IMemoryOwner bb = b.MemorySource.MemoryOwner; - Buffer2D.SwapOrCopyContent(a, b); + Buffer2D.SwapOrCopyContent(a, b); - Assert.Equal(bb, a.MemorySource.MemoryOwner); - Assert.Equal(aa, b.MemorySource.MemoryOwner); + Assert.Equal(bb, a.MemorySource.MemoryOwner); + Assert.Equal(aa, b.MemorySource.MemoryOwner); - Assert.Equal(new Size(3, 7), a.Size()); - Assert.Equal(new Size(10, 5), b.Size()); + Assert.Equal(new Size(3, 7), a.Size()); + Assert.Equal(new Size(10, 5), b.Size()); + } } [Theory] @@ -109,19 +119,21 @@ namespace SixLabors.ImageSharp.Tests.Memory public void CopyColumns(int width, int height, int startIndex, int destIndex, int columnCount) { var rnd = new Random(123); - using Buffer2D b = this.MemoryAllocator.Allocate2D(width, height); - rnd.RandomFill(b.GetSpan(), 0, 1); + using (Buffer2D b = this.MemoryAllocator.Allocate2D(width, height)) + { + rnd.RandomFill(b.GetSpan(), 0, 1); - b.CopyColumns(startIndex, destIndex, columnCount); + b.CopyColumns(startIndex, destIndex, columnCount); - for (int y = 0; y < b.Height; y++) - { - Span row = b.GetRowSpan(y); + for (int y = 0; y < b.Height; y++) + { + Span row = b.GetRowSpan(y); - Span s = row.Slice(startIndex, columnCount); - Span d = row.Slice(destIndex, columnCount); + Span s = row.Slice(startIndex, columnCount); + Span d = row.Slice(destIndex, columnCount); - Xunit.Assert.True(s.SequenceEqual(d)); + Xunit.Assert.True(s.SequenceEqual(d)); + } } } @@ -129,20 +141,22 @@ namespace SixLabors.ImageSharp.Tests.Memory public void CopyColumns_InvokeMultipleTimes() { var rnd = new Random(123); - using Buffer2D b = this.MemoryAllocator.Allocate2D(100, 100); - rnd.RandomFill(b.GetSpan(), 0, 1); + using (Buffer2D b = this.MemoryAllocator.Allocate2D(100, 100)) + { + rnd.RandomFill(b.GetSpan(), 0, 1); - b.CopyColumns(0, 50, 22); - b.CopyColumns(0, 50, 22); + b.CopyColumns(0, 50, 22); + b.CopyColumns(0, 50, 22); - for (int y = 0; y < b.Height; y++) - { - Span row = b.GetRowSpan(y); + for (int y = 0; y < b.Height; y++) + { + Span row = b.GetRowSpan(y); - Span s = row.Slice(0, 22); - Span d = row.Slice(50, 22); + Span s = row.Slice(0, 22); + Span d = row.Slice(50, 22); - Xunit.Assert.True(s.SequenceEqual(d)); + Xunit.Assert.True(s.SequenceEqual(d)); + } } } } diff --git a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs index 72e6305c74..9f523156f5 100644 --- a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs +++ b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs @@ -12,12 +12,14 @@ namespace SixLabors.ImageSharp.Tests.Memory [Fact] public void Construct() { - using var buffer = Configuration.Default.MemoryAllocator.Allocate2D(10, 20); - var rectangle = new Rectangle(3, 2, 5, 6); - var area = new BufferArea(buffer, rectangle); + using (var buffer = Configuration.Default.MemoryAllocator.Allocate2D(10, 20)) + { + var rectangle = new Rectangle(3, 2, 5, 6); + var area = new BufferArea(buffer, rectangle); - Assert.Equal(buffer, area.DestinationBuffer); - Assert.Equal(rectangle, area.Rectangle); + Assert.Equal(buffer, area.DestinationBuffer); + Assert.Equal(rectangle, area.Rectangle); + } } private static Buffer2D CreateTestBuffer(int w, int h) @@ -39,14 +41,16 @@ namespace SixLabors.ImageSharp.Tests.Memory [InlineData(5, 4, 3, 2)] public void Indexer(int rx, int ry, int x, int y) { - using Buffer2D buffer = CreateTestBuffer(20, 30); - var r = new Rectangle(rx, ry, 5, 6); + using (Buffer2D buffer = CreateTestBuffer(20, 30)) + { + var r = new Rectangle(rx, ry, 5, 6); - BufferArea area = buffer.GetArea(r); + BufferArea area = buffer.GetArea(r); - int value = area[x, y]; - int expected = ((ry + y) * 100) + rx + x; - Assert.Equal(expected, value); + int value = area[x, y]; + int expected = ((ry + y) * 100) + rx + x; + Assert.Equal(expected, value); + } } [Theory] @@ -54,79 +58,89 @@ namespace SixLabors.ImageSharp.Tests.Memory [InlineData(5, 4, 3, 6, 5)] public void GetRowSpan(int rx, int ry, int y, int w, int h) { - using Buffer2D buffer = CreateTestBuffer(20, 30); - var r = new Rectangle(rx, ry, w, h); + using (Buffer2D buffer = CreateTestBuffer(20, 30)) + { + var r = new Rectangle(rx, ry, w, h); - BufferArea area = buffer.GetArea(r); + BufferArea area = buffer.GetArea(r); - Span span = area.GetRowSpan(y); + Span span = area.GetRowSpan(y); - Assert.Equal(w, span.Length); + Assert.Equal(w, span.Length); - for (int i = 0; i < w; i++) - { - int expected = ((ry + y) * 100) + rx + i; - int value = span[i]; + for (int i = 0; i < w; i++) + { + int expected = ((ry + y) * 100) + rx + i; + int value = span[i]; - Assert.Equal(expected, value); + Assert.Equal(expected, value); + } } } [Fact] public void GetSubArea() { - using Buffer2D buffer = CreateTestBuffer(20, 30); - BufferArea area0 = buffer.GetArea(6, 8, 10, 10); + using (Buffer2D buffer = CreateTestBuffer(20, 30)) + { + BufferArea area0 = buffer.GetArea(6, 8, 10, 10); - BufferArea area1 = area0.GetSubArea(4, 4, 5, 5); + BufferArea area1 = area0.GetSubArea(4, 4, 5, 5); - var expectedRect = new Rectangle(10, 12, 5, 5); + var expectedRect = new Rectangle(10, 12, 5, 5); - Assert.Equal(buffer, area1.DestinationBuffer); - Assert.Equal(expectedRect, area1.Rectangle); + Assert.Equal(buffer, area1.DestinationBuffer); + Assert.Equal(expectedRect, area1.Rectangle); - int value00 = (12 * 100) + 10; - Assert.Equal(value00, area1[0, 0]); + int value00 = (12 * 100) + 10; + Assert.Equal(value00, area1[0, 0]); + } } [Fact] public void DangerousGetPinnableReference() { - using Buffer2D buffer = CreateTestBuffer(20, 30); - BufferArea area0 = buffer.GetArea(6, 8, 10, 10); + using (Buffer2D buffer = CreateTestBuffer(20, 30)) + { + BufferArea area0 = buffer.GetArea(6, 8, 10, 10); - ref int r = ref area0.GetReferenceToOrigin(); + ref int r = ref area0.GetReferenceToOrigin(); - int expected = buffer[6, 8]; - Assert.Equal(expected, r); + int expected = buffer[6, 8]; + Assert.Equal(expected, r); + } } [Fact] public void Clear_FullArea() { - using Buffer2D buffer = CreateTestBuffer(22, 13); - buffer.GetArea().Clear(); - Span fullSpan = buffer.GetSpan(); - Assert.True(fullSpan.SequenceEqual(new int[fullSpan.Length])); + using (Buffer2D buffer = CreateTestBuffer(22, 13)) + { + buffer.GetArea().Clear(); + Span fullSpan = buffer.GetSpan(); + Assert.True(fullSpan.SequenceEqual(new int[fullSpan.Length])); + } } [Fact] public void Clear_SubArea() { - using Buffer2D buffer = CreateTestBuffer(20, 30); - BufferArea area = buffer.GetArea(5, 5, 10, 10); - area.Clear(); + using (Buffer2D buffer = CreateTestBuffer(20, 30)) + { + BufferArea area = buffer.GetArea(5, 5, 10, 10); + area.Clear(); - Assert.NotEqual(0, buffer[4, 4]); - Assert.NotEqual(0, buffer[15, 15]); + Assert.NotEqual(0, buffer[4, 4]); + Assert.NotEqual(0, buffer[15, 15]); - Assert.Equal(0, buffer[5, 5]); - Assert.Equal(0, buffer[14, 14]); + Assert.Equal(0, buffer[5, 5]); + Assert.Equal(0, buffer[14, 14]); - for (int y = area.Rectangle.Y; y < area.Rectangle.Bottom; y++) - { - Span span = buffer.GetRowSpan(y).Slice(area.Rectangle.X, area.Width); - Assert.True(span.SequenceEqual(new int[area.Width])); + for (int y = area.Rectangle.Y; y < area.Rectangle.Bottom; y++) + { + Span span = buffer.GetRowSpan(y).Slice(area.Rectangle.X, area.Width); + Assert.True(span.SequenceEqual(new int[area.Width])); + } } } } diff --git a/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs b/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs index 8f8cb016a5..60d791e91e 100644 --- a/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs +++ b/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs @@ -90,15 +90,17 @@ namespace SixLabors.ImageSharp.Tests.Metadata exifProfile.SetValue(ExifTag.XResolution, new Rational(200)); exifProfile.SetValue(ExifTag.YResolution, new Rational(300)); - using var image = new Image(1, 1); - image.Metadata.ExifProfile = exifProfile; - image.Metadata.HorizontalResolution = 400; - image.Metadata.VerticalResolution = 500; + using (var image = new Image(1, 1)) + { + image.Metadata.ExifProfile = exifProfile; + image.Metadata.HorizontalResolution = 400; + image.Metadata.VerticalResolution = 500; - image.Metadata.SyncProfiles(); + image.Metadata.SyncProfiles(); - Assert.Equal(400, ((Rational)image.Metadata.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); - Assert.Equal(500, ((Rational)image.Metadata.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); + Assert.Equal(400, ((Rational)image.Metadata.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); + Assert.Equal(500, ((Rational)image.Metadata.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); + } } } } diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs index d14f1027c9..79bf765455 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs @@ -92,40 +92,42 @@ namespace SixLabors.ImageSharp.Tests [InlineData(TestImageWriteFormat.Png)] public void WriteFraction(TestImageWriteFormat imageFormat) { - using var memStream = new MemoryStream(); - double exposureTime = 1.0 / 1600; + using (var memStream = new MemoryStream()) + { + double exposureTime = 1.0 / 1600; - ExifProfile profile = GetExifProfile(); + ExifProfile profile = GetExifProfile(); - profile.SetValue(ExifTag.ExposureTime, new Rational(exposureTime)); + profile.SetValue(ExifTag.ExposureTime, new Rational(exposureTime)); - var image = new Image(1, 1); - image.Metadata.ExifProfile = profile; + var image = new Image(1, 1); + image.Metadata.ExifProfile = profile; - image = WriteAndRead(image, imageFormat); + image = WriteAndRead(image, imageFormat); - profile = image.Metadata.ExifProfile; - Assert.NotNull(profile); + profile = image.Metadata.ExifProfile; + Assert.NotNull(profile); - IExifValue value = profile.GetValue(ExifTag.ExposureTime); - Assert.NotNull(value); - Assert.NotEqual(exposureTime, value.Value.ToDouble()); + IExifValue value = profile.GetValue(ExifTag.ExposureTime); + Assert.NotNull(value); + Assert.NotEqual(exposureTime, value.Value.ToDouble()); - memStream.Position = 0; - profile = GetExifProfile(); + memStream.Position = 0; + profile = GetExifProfile(); - profile.SetValue(ExifTag.ExposureTime, new Rational(exposureTime, true)); - image.Metadata.ExifProfile = profile; + profile.SetValue(ExifTag.ExposureTime, new Rational(exposureTime, true)); + image.Metadata.ExifProfile = profile; - image = WriteAndRead(image, imageFormat); + image = WriteAndRead(image, imageFormat); - profile = image.Metadata.ExifProfile; - Assert.NotNull(profile); + profile = image.Metadata.ExifProfile; + Assert.NotNull(profile); - value = profile.GetValue(ExifTag.ExposureTime); - Assert.Equal(exposureTime, value.Value.ToDouble()); + value = profile.GetValue(ExifTag.ExposureTime); + Assert.Equal(exposureTime, value.Value.ToDouble()); - image.Dispose(); + image.Dispose(); + } } [Theory] @@ -449,22 +451,26 @@ namespace SixLabors.ImageSharp.Tests private static Image WriteAndReadJpeg(Image image) { - using var memStream = new MemoryStream(); - image.SaveAsJpeg(memStream); - image.Dispose(); + using (var memStream = new MemoryStream()) + { + image.SaveAsJpeg(memStream); + image.Dispose(); - memStream.Position = 0; - return Image.Load(memStream); + memStream.Position = 0; + return Image.Load(memStream); + } } private static Image WriteAndReadPng(Image image) { - using var memStream = new MemoryStream(); - image.SaveAsPng(memStream); - image.Dispose(); + using (var memStream = new MemoryStream()) + { + image.SaveAsPng(memStream); + image.Dispose(); - memStream.Position = 0; - return Image.Load(memStream); + memStream.Position = 0; + return Image.Load(memStream); + } } private static void TestProfile(ExifProfile profile) diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs index 47b5dbbd2e..7f52fb6cae 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs @@ -13,8 +13,10 @@ namespace SixLabors.ImageSharp.Tests public ExifValueTests() { - using Image image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image(); - this.profile = image.Metadata.ExifProfile; + using (Image image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image()) + { + this.profile = image.Metadata.ExifProfile; + } } private IExifValue GetExifValue() diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs index d57abb4996..a91ea09776 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs @@ -33,24 +33,28 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelBlenders public void PorterDuffOutputIsCorrect(TestImageProvider provider, PixelAlphaCompositionMode mode) { var srcFile = TestFile.Create(TestImages.Png.PDSrc); - using Image src = srcFile.CreateRgba32Image(); - using Image dest = provider.GetImage(); - var options = new GraphicsOptions + using (Image src = srcFile.CreateRgba32Image()) + using (Image dest = provider.GetImage()) { - Antialias = false, - AlphaCompositionMode = mode - }; + var options = new GraphicsOptions + { + Antialias = false, + AlphaCompositionMode = mode + }; + + using (Image res = dest.Clone(x => x.DrawImage(src, options))) + { + string combinedMode = mode.ToString(); - using Image res = dest.Clone(x => x.DrawImage(src, options)); - string combinedMode = mode.ToString(); + if (combinedMode != "Src" && combinedMode.StartsWith("Src")) + { + combinedMode = combinedMode.Substring(3); + } - if (combinedMode != "Src" && combinedMode.StartsWith("Src")) - { - combinedMode = combinedMode.Substring(3); + res.DebugSave(provider, combinedMode); + res.CompareToReferenceOutput(provider, combinedMode); + } } - - res.DebugSave(provider, combinedMode); - res.CompareToReferenceOutput(provider, combinedMode); } } } diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs index 98a657950d..1ecbaf3615 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using System.Buffers; @@ -30,15 +30,17 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelOperations const int times = 200000; const int count = 1024; - using IMemoryOwner source = Configuration.Default.MemoryAllocator.Allocate(count); - using IMemoryOwner dest = Configuration.Default.MemoryAllocator.Allocate(count); - this.Measure( - times, - () => PixelOperations.Instance.ToVector4( - this.Configuration, - source.GetSpan(), - dest.GetSpan())); + using (IMemoryOwner source = Configuration.Default.MemoryAllocator.Allocate(count)) + using (IMemoryOwner dest = Configuration.Default.MemoryAllocator.Allocate(count)) + { + this.Measure( + times, + () => PixelOperations.Instance.ToVector4( + this.Configuration, + source.GetSpan(), + dest.GetSpan())); + } } } } -} +} \ No newline at end of file diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs index b572baa834..40b8122793 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs @@ -997,9 +997,11 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelOperations where TSource : struct where TDest : struct { - using var buffers = new TestBuffers(source, expected); - action(buffers.SourceBuffer, buffers.ActualDestBuffer); - buffers.Verify(); + using (var buffers = new TestBuffers(source, expected)) + { + action(buffers.SourceBuffer, buffers.ActualDestBuffer); + buffers.Verify(); + } } internal static Vector4[] CreateVector4TestData(int length, RefAction vectorModifier = null) diff --git a/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs b/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs index d543d03934..b07545a364 100644 --- a/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs +++ b/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs @@ -32,18 +32,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization 70, 87, 69, 68, 65, 73, 78, 90 }; - using var image = new Image(8, 8); - for (int y = 0; y < 8; y++) + using (var image = new Image(8, 8)) { - for (int x = 0; x < 8; x++) + for (int y = 0; y < 8; y++) { - byte luminance = pixels[(y * 8) + x]; - image[x, y] = new Rgba32(luminance, luminance, luminance); + for (int x = 0; x < 8; x++) + { + byte luminance = pixels[(y * 8) + x]; + image[x, y] = new Rgba32(luminance, luminance, luminance); + } } - } - var expected = new byte[] - { + var expected = new byte[] + { 0, 12, 53, 32, 146, 53, 174, 53, 57, 32, 12, 227, 219, 202, 32, 154, 65, 85, 93, 239, 251, 227, 65, 158, @@ -52,23 +53,24 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization 117, 190, 36, 190, 178, 93, 20, 170, 130, 202, 73, 20, 12, 53, 85, 194, 146, 206, 130, 117, 85, 166, 182, 215 - }; + }; - // Act - image.Mutate(x => x.HistogramEqualization(new HistogramEqualizationOptions - { - LuminanceLevels = luminanceLevels - })); + // Act + image.Mutate(x => x.HistogramEqualization(new HistogramEqualizationOptions + { + LuminanceLevels = luminanceLevels + })); - // Assert - for (int y = 0; y < 8; y++) - { - for (int x = 0; x < 8; x++) + // Assert + for (int y = 0; y < 8; y++) { - Rgba32 actual = image[x, y]; - Assert.Equal(expected[(y * 8) + x], actual.R); - Assert.Equal(expected[(y * 8) + x], actual.G); - Assert.Equal(expected[(y * 8) + x], actual.B); + for (int x = 0; x < 8; x++) + { + Rgba32 actual = image[x, y]; + Assert.Equal(expected[(y * 8) + x], actual.R); + Assert.Equal(expected[(y * 8) + x], actual.G); + Assert.Equal(expected[(y * 8) + x], actual.B); + } } } } @@ -78,17 +80,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization public void Adaptive_SlidingWindow_15Tiles_WithClipping(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new HistogramEqualizationOptions + using (Image image = provider.GetImage()) { - Method = HistogramEqualizationMethod.AdaptiveSlidingWindow, - LuminanceLevels = 256, - ClipHistogram = true, - NumberOfTiles = 15 - }; - image.Mutate(x => x.HistogramEqualization(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + var options = new HistogramEqualizationOptions + { + Method = HistogramEqualizationMethod.AdaptiveSlidingWindow, + LuminanceLevels = 256, + ClipHistogram = true, + NumberOfTiles = 15 + }; + image.Mutate(x => x.HistogramEqualization(options)); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -96,17 +100,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization public void Adaptive_TileInterpolation_10Tiles_WithClipping(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new HistogramEqualizationOptions + using (Image image = provider.GetImage()) { - Method = HistogramEqualizationMethod.AdaptiveTileInterpolation, - LuminanceLevels = 256, - ClipHistogram = true, - NumberOfTiles = 10 - }; - image.Mutate(x => x.HistogramEqualization(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + var options = new HistogramEqualizationOptions + { + Method = HistogramEqualizationMethod.AdaptiveTileInterpolation, + LuminanceLevels = 256, + ClipHistogram = true, + NumberOfTiles = 10 + }; + image.Mutate(x => x.HistogramEqualization(options)); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } /// @@ -121,18 +127,20 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization public void Issue984(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new HistogramEqualizationOptions() + using (Image image = provider.GetImage()) { - Method = HistogramEqualizationMethod.AdaptiveTileInterpolation, - LuminanceLevels = 256, - ClipHistogram = true, - ClipLimit = 5, - NumberOfTiles = 10 - }; - image.Mutate(x => x.HistogramEqualization(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + var options = new HistogramEqualizationOptions() + { + Method = HistogramEqualizationMethod.AdaptiveTileInterpolation, + LuminanceLevels = 256, + ClipHistogram = true, + ClipLimit = 5, + NumberOfTiles = 10 + }; + image.Mutate(x => x.HistogramEqualization(options)); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs index 4f69e55b6f..7d9e0f04b4 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs @@ -51,9 +51,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization public void BinaryDitherFilter_WorksWithAllDitherers(TestImageProvider provider, string name, IOrderedDither ditherer) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.BinaryDither(ditherer)); - image.DebugSave(provider, name); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.BinaryDither(ditherer)); + image.DebugSave(provider, name); + } } [Theory] @@ -62,9 +64,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization public void DiffusionFilter_WorksWithAllErrorDiffusers(TestImageProvider provider, string name, IErrorDiffuser diffuser) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.BinaryDiffuse(diffuser, .5F)); - image.DebugSave(provider, name); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.BinaryDiffuse(diffuser, .5F)); + image.DebugSave(provider, name); + } } [Theory] @@ -72,9 +76,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization public void BinaryDitherFilter_ShouldNotDependOnSinglePixelType(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.BinaryDither(DefaultDitherer)); - image.DebugSave(provider); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.BinaryDither(DefaultDitherer)); + image.DebugSave(provider); + } } [Theory] @@ -82,9 +88,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization public void DiffusionFilter_ShouldNotDependOnSinglePixelType(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.BinaryDiffuse(DefaultErrorDiffuser, 0.5f)); - image.DebugSave(provider); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.BinaryDiffuse(DefaultErrorDiffuser, 0.5f)); + image.DebugSave(provider); + } } [Theory] @@ -92,14 +100,16 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization public void ApplyDitherFilterInBox(TestImageProvider provider) where TPixel : struct, IPixel { - using Image source = provider.GetImage(); - using Image image = source.Clone(); - var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2); + using (Image source = provider.GetImage()) + using (Image image = source.Clone()) + { + var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2); - image.Mutate(x => x.BinaryDither(DefaultDitherer, bounds)); - image.DebugSave(provider); + image.Mutate(x => x.BinaryDither(DefaultDitherer, bounds)); + image.DebugSave(provider); - ImageComparer.Tolerant().VerifySimilarityIgnoreRegion(source, image, bounds); + ImageComparer.Tolerant().VerifySimilarityIgnoreRegion(source, image, bounds); + } } [Theory] @@ -107,14 +117,16 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization public void ApplyDiffusionFilterInBox(TestImageProvider provider) where TPixel : struct, IPixel { - using Image source = provider.GetImage(); - using Image image = source.Clone(); - var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2); + using (Image source = provider.GetImage()) + using (Image image = source.Clone()) + { + var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2); - image.Mutate(x => x.BinaryDiffuse(DefaultErrorDiffuser, .5F, bounds)); - image.DebugSave(provider); + image.Mutate(x => x.BinaryDiffuse(DefaultErrorDiffuser, .5F, bounds)); + image.DebugSave(provider); - ImageComparer.Tolerant().VerifySimilarityIgnoreRegion(source, image, bounds); + ImageComparer.Tolerant().VerifySimilarityIgnoreRegion(source, image, bounds); + } } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs index 047e5fdc1b..54ff77f935 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs @@ -30,9 +30,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization public void ImageShouldApplyBinaryThresholdFilter(TestImageProvider provider, float value) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.BinaryThreshold(value)); - image.DebugSave(provider, value); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.BinaryThreshold(value)); + image.DebugSave(provider, value); + } } [Theory] @@ -40,14 +42,16 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization public void ImageShouldApplyBinaryThresholdInBox(TestImageProvider provider, float value) where TPixel : struct, IPixel { - using Image source = provider.GetImage(); - using var image = source.Clone(); - var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2); + using (Image source = provider.GetImage()) + using (var image = source.Clone()) + { + var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2); - image.Mutate(x => x.BinaryThreshold(value, bounds)); - image.DebugSave(provider, value); + image.Mutate(x => x.BinaryThreshold(value, bounds)); + image.DebugSave(provider, value); - ImageComparer.Tolerant().VerifySimilarityIgnoreRegion(source, image, bounds); + ImageComparer.Tolerant().VerifySimilarityIgnoreRegion(source, image, bounds); + } } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs index b68278747b..fcd9eb3cdd 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs @@ -60,19 +60,23 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution } // Make sure the kernel components are the same - using var image = new Image(1, 1); - Configuration configuration = image.GetConfiguration(); - var definition = new BokehBlurProcessor(10, BokehBlurProcessor.DefaultComponents, BokehBlurProcessor.DefaultGamma); - using var processor = (BokehBlurProcessor)definition.CreatePixelSpecificProcessor(configuration, image, image.Bounds()); - Assert.Equal(components.Count, processor.Kernels.Count); - foreach ((Complex64[] a, Complex64[] b) in components.Zip(processor.Kernels, (a, b) => (a, b))) + using (var image = new Image(1, 1)) { - Span spanA = a.AsSpan(), spanB = b.AsSpan(); - Assert.Equal(spanA.Length, spanB.Length); - for (int i = 0; i < spanA.Length; i++) + Configuration configuration = image.GetConfiguration(); + var definition = new BokehBlurProcessor(10, BokehBlurProcessor.DefaultComponents, BokehBlurProcessor.DefaultGamma); + using (var processor = (BokehBlurProcessor)definition.CreatePixelSpecificProcessor(configuration, image, image.Bounds())) { - Assert.True(Math.Abs(Math.Abs(spanA[i].Real) - Math.Abs(spanB[i].Real)) < 0.0001f); - Assert.True(Math.Abs(Math.Abs(spanA[i].Imaginary) - Math.Abs(spanB[i].Imaginary)) < 0.0001f); + Assert.Equal(components.Count, processor.Kernels.Count); + foreach ((Complex64[] a, Complex64[] b) in components.Zip(processor.Kernels, (a, b) => (a, b))) + { + Span spanA = a.AsSpan(), spanB = b.AsSpan(); + Assert.Equal(spanA.Length, spanB.Length); + for (int i = 0; i < spanA.Length; i++) + { + Assert.True(Math.Abs(Math.Abs(spanA[i].Real) - Math.Abs(spanB[i].Real)) < 0.0001f); + Assert.True(Math.Abs(Math.Abs(spanA[i].Imaginary) - Math.Abs(spanB[i].Imaginary)) < 0.0001f); + } + } } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs index 80cd4158c9..a1f34856e5 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs @@ -56,10 +56,12 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution public void DetectEdges_WorksWithAllFilters(TestImageProvider provider, EdgeDetectionOperators detector) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.DetectEdges(detector)); - image.DebugSave(provider, detector.ToString()); - image.CompareToReferenceOutput(ValidatorComparer, provider, detector.ToString()); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.DetectEdges(detector)); + image.DebugSave(provider, detector.ToString()); + image.CompareToReferenceOutput(ValidatorComparer, provider, detector.ToString()); + } } [Theory] @@ -67,10 +69,12 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution public void DetectEdges_IsNotBoundToSinglePixelType(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.DetectEdges()); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.DetectEdges()); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -78,9 +82,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution public void DetectEdges_IsAppliedToAllFrames(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.DetectEdges()); - image.DebugSave(provider, extension: "gif"); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.DetectEdges()); + image.DebugSave(provider, extension: "gif"); + } } [Theory] @@ -88,12 +94,14 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution public void DetectEdges_InBox(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2); + using (Image image = provider.GetImage()) + { + var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2); - image.Mutate(x => x.DetectEdges(bounds)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.Mutate(x => x.DetectEdges(bounds)); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs index 8cca265477..68852a939a 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs @@ -44,13 +44,15 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void AutoOrient_WorksForAllExifOrientations(TestImageProvider provider, ushort orientation) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Metadata.ExifProfile = new ExifProfile(); - image.Metadata.ExifProfile.SetValue(ExifTag.Orientation, orientation); + using (Image image = provider.GetImage()) + { + image.Metadata.ExifProfile = new ExifProfile(); + image.Metadata.ExifProfile.SetValue(ExifTag.Orientation, orientation); - image.Mutate(x => x.AutoOrient()); - image.DebugSave(provider, orientation, appendPixelTypeToFileName: false); - image.CompareToReferenceOutput(provider, orientation, appendPixelTypeToFileName: false); + image.Mutate(x => x.AutoOrient()); + image.DebugSave(provider, orientation, appendPixelTypeToFileName: false); + image.CompareToReferenceOutput(provider, orientation, appendPixelTypeToFileName: false); + } } [Theory] @@ -78,12 +80,14 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms ulong orientationCode = BitConverter.ToUInt64(orientationCodeData, 0); - using Image image = provider.GetImage(); - using Image reference = image.Clone(); - image.Metadata.ExifProfile = new ExifProfile(bytes); - image.Mutate(x => x.AutoOrient()); - image.DebugSave(provider, $"{dataType}-{orientationCode}", appendPixelTypeToFileName: false); - ImageComparer.Exact.VerifySimilarity(image, reference); + using (Image image = provider.GetImage()) + using (Image reference = image.Clone()) + { + image.Metadata.ExifProfile = new ExifProfile(bytes); + image.Mutate(x => x.AutoOrient()); + image.DebugSave(provider, $"{dataType}-{orientationCode}", appendPixelTypeToFileName: false); + ImageComparer.Exact.VerifySimilarity(image, reference); + } } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs index edaccb7534..dbaff43f0c 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs @@ -19,16 +19,18 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ImageShouldPad(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.Pad(image.Width + 50, image.Height + 50)); - image.DebugSave(provider); - - // Check pixels are empty - for (int y = 0; y < 25; y++) + using (Image image = provider.GetImage()) { - for (int x = 0; x < 25; x++) + image.Mutate(x => x.Pad(image.Width + 50, image.Height + 50)); + image.DebugSave(provider); + + // Check pixels are empty + for (int y = 0; y < 25; y++) { - Assert.Equal(default, image[x, y]); + for (int x = 0; x < 25; x++) + { + Assert.Equal(default, image[x, y]); + } } } } @@ -40,16 +42,18 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms { var color = Color.Red; TPixel expected = color.ToPixel(); - using Image image = provider.GetImage(); - image.Mutate(x => x.Pad(image.Width + 50, image.Height + 50, color)); - image.DebugSave(provider); - - // Check pixels are filled - for (int y = 0; y < 25; y++) + using (Image image = provider.GetImage()) { - for (int x = 0; x < 25; x++) + image.Mutate(x => x.Pad(image.Width + 50, image.Height + 50, color)); + image.DebugSave(provider); + + // Check pixels are filled + for (int y = 0; y < 25; y++) { - Assert.Equal(expected, image[x, y]); + for (int x = 0; x < 25; x++) + { + Assert.Equal(expected, image[x, y]); + } } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs index 4e5ffbfab2..fa23962517 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs @@ -5,14 +5,12 @@ using System; using System.Linq; using System.Numerics; using System.Runtime.CompilerServices; - using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; using SixLabors.ImageSharp.Tests.Memory; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; - using Xunit; // ReSharper disable InconsistentNaming @@ -44,13 +42,15 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms { string filePath = TestFile.GetInputFileFullPath(TestImages.Jpeg.Baseline.Calliphora); - using var image = Image.Load(filePath); - image.Mutate(x => x.Resize(image.Size() / 2)); - string path = System.IO.Path.Combine( - TestEnvironment.CreateOutputDirectory(nameof(ResizeTests)), - nameof(this.Resize_PixelAgnostic) + ".png"); + using (var image = Image.Load(filePath)) + { + image.Mutate(x => x.Resize(image.Size() / 2)); + string path = System.IO.Path.Combine( + TestEnvironment.CreateOutputDirectory(nameof(ResizeTests)), + nameof(this.Resize_PixelAgnostic) + ".png"); - image.Save(path); + image.Save(path); + } } [Theory(Skip = "Debug only, enable manually")] @@ -67,9 +67,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms provider.Configuration.WorkingBufferSizeHintInBytes = workingBufferSizeHintInKilobytes * 1024; - using Image image = provider.GetImage(); - image.Mutate(x => x.Resize(destSize, destSize)); - image.DebugSave(provider, appendPixelTypeToFileName: false); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.Resize(destSize, destSize)); + image.DebugSave(provider, appendPixelTypeToFileName: false); + } } [Theory] @@ -83,12 +85,14 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms // [WithBasicTestPatternImages(15, 12, PixelTypes.Rgba32, 2, 3, 1, 2)] means: // resizing: (15, 12) -> (10, 6) // kernel dimensions: (3, 4) - using Image image = provider.GetImage(); - var destSize = new Size(image.Width * wN / wD, image.Height * hN / hD); - image.Mutate(x => x.Resize(destSize, KnownResamplers.Bicubic, false)); - FormattableString outputInfo = $"({wN}÷{wD},{hN}÷{hD})"; - image.DebugSave(provider, outputInfo, appendPixelTypeToFileName: false); - image.CompareToReferenceOutput(provider, outputInfo, appendPixelTypeToFileName: false); + using (Image image = provider.GetImage()) + { + var destSize = new Size(image.Width * wN / wD, image.Height * hN / hD); + image.Mutate(x => x.Resize(destSize, KnownResamplers.Bicubic, false)); + FormattableString outputInfo = $"({wN}÷{wD},{hN}÷{hD})"; + image.DebugSave(provider, outputInfo, appendPixelTypeToFileName: false); + image.CompareToReferenceOutput(provider, outputInfo, appendPixelTypeToFileName: false); + } } private static readonly int SizeOfVector4 = Unsafe.SizeOf(); @@ -106,43 +110,47 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms int workingBufferLimitInRows) where TPixel : struct, IPixel { - using Image image0 = provider.GetImage(); - Size destSize = image0.Size() / 4; - - var configuration = Configuration.CreateDefaultInstance(); - - int workingBufferSizeHintInBytes = workingBufferLimitInRows * destSize.Width * SizeOfVector4; - var allocator = new TestMemoryAllocator(); - configuration.MemoryAllocator = allocator; - configuration.WorkingBufferSizeHintInBytes = workingBufferSizeHintInBytes; - - var verticalKernelMap = ResizeKernelMap.Calculate( - KnownResamplers.Bicubic, - destSize.Height, - image0.Height, - Configuration.Default.MemoryAllocator); - int minimumWorkerAllocationInBytes = verticalKernelMap.MaxDiameter * 2 * destSize.Width * SizeOfVector4; - verticalKernelMap.Dispose(); - - using Image image = image0.Clone(configuration); - image.Mutate(x => x.Resize(destSize, KnownResamplers.Bicubic, false)); - - image.DebugSave( - provider, - testOutputDetails: workingBufferLimitInRows, - appendPixelTypeToFileName: false); - image.CompareToReferenceOutput( - ImageComparer.TolerantPercentage(0.001f), - provider, - testOutputDetails: workingBufferLimitInRows, - appendPixelTypeToFileName: false); + using (Image image0 = provider.GetImage()) + { + Size destSize = image0.Size() / 4; - Assert.NotEmpty(allocator.AllocationLog); + var configuration = Configuration.CreateDefaultInstance(); - int maxAllocationSize = allocator.AllocationLog.Where( - e => e.ElementType == typeof(Vector4)).Max(e => e.LengthInBytes); + int workingBufferSizeHintInBytes = workingBufferLimitInRows * destSize.Width * SizeOfVector4; + var allocator = new TestMemoryAllocator(); + configuration.MemoryAllocator = allocator; + configuration.WorkingBufferSizeHintInBytes = workingBufferSizeHintInBytes; - Assert.True(maxAllocationSize <= Math.Max(workingBufferSizeHintInBytes, minimumWorkerAllocationInBytes)); + var verticalKernelMap = ResizeKernelMap.Calculate( + KnownResamplers.Bicubic, + destSize.Height, + image0.Height, + Configuration.Default.MemoryAllocator); + int minimumWorkerAllocationInBytes = verticalKernelMap.MaxDiameter * 2 * destSize.Width * SizeOfVector4; + verticalKernelMap.Dispose(); + + using (Image image = image0.Clone(configuration)) + { + image.Mutate(x => x.Resize(destSize, KnownResamplers.Bicubic, false)); + + image.DebugSave( + provider, + testOutputDetails: workingBufferLimitInRows, + appendPixelTypeToFileName: false); + image.CompareToReferenceOutput( + ImageComparer.TolerantPercentage(0.001f), + provider, + testOutputDetails: workingBufferLimitInRows, + appendPixelTypeToFileName: false); + + Assert.NotEmpty(allocator.AllocationLog); + + int maxAllocationSize = allocator.AllocationLog.Where( + e => e.ElementType == typeof(Vector4)).Max(e => e.LengthInBytes); + + Assert.True(maxAllocationSize <= Math.Max(workingBufferSizeHintInBytes, minimumWorkerAllocationInBytes)); + } + } } [Theory] @@ -150,11 +158,13 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void Resize_Compand(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.Resize(image.Size() / 2, true)); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.Resize(image.Size() / 2, true)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -177,11 +187,13 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void Resize_IsAppliedToAllFrames(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2, KnownResamplers.Bicubic)); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2, KnownResamplers.Bicubic)); - // Comparer fights decoder with gif-s. Could not use CompareToReferenceOutput here :( - image.DebugSave(provider, extension: "gif"); + // Comparer fights decoder with gif-s. Could not use CompareToReferenceOutput here :( + image.DebugSave(provider, extension: "gif"); + } } [Theory] @@ -197,12 +209,16 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void Resize_ThrowsForWrappedMemoryImage(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image0 = provider.GetImage(); - var mmg = TestMemoryManager.CreateAsCopyOf(image0.GetPixelSpan()); + using (Image image0 = provider.GetImage()) + { + var mmg = TestMemoryManager.CreateAsCopyOf(image0.GetPixelSpan()); - using var image1 = Image.WrapMemory(mmg.Memory, image0.Width, image0.Height); - Assert.ThrowsAny( - () => { image1.Mutate(x => x.Resize(image0.Width / 2, image0.Height / 2, true)); }); + using (var image1 = Image.WrapMemory(mmg.Memory, image0.Width, image0.Height)) + { + Assert.ThrowsAny( + () => { image1.Mutate(x => x.Resize(image0.Width / 2, image0.Height / 2, true)); }); + } + } } [Theory] @@ -275,31 +291,31 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms provider.RunValidatingProcessorTest( ctx => + { + SizeF newSize; + string destSizeInfo; + if (ratio.HasValue) { - SizeF newSize; - string destSizeInfo; - if (ratio.HasValue) - { - newSize = ctx.GetCurrentSize() * ratio.Value; - destSizeInfo = ratio.Value.ToString(System.Globalization.CultureInfo.InvariantCulture); - } - else + newSize = ctx.GetCurrentSize() * ratio.Value; + destSizeInfo = ratio.Value.ToString(System.Globalization.CultureInfo.InvariantCulture); + } + else + { + if (!specificDestWidth.HasValue || !specificDestHeight.HasValue) { - if (!specificDestWidth.HasValue || !specificDestHeight.HasValue) - { - throw new InvalidOperationException( - "invalid dimensional input for Resize_WorksWithAllResamplers!"); - } - - newSize = new SizeF(specificDestWidth.Value, specificDestHeight.Value); - destSizeInfo = $"{newSize.Width}x{newSize.Height}"; + throw new InvalidOperationException( + "invalid dimensional input for Resize_WorksWithAllResamplers!"); } - FormattableString testOutputDetails = $"{samplerName}-{destSizeInfo}"; + newSize = new SizeF(specificDestWidth.Value, specificDestHeight.Value); + destSizeInfo = $"{newSize.Width}x{newSize.Height}"; + } + + FormattableString testOutputDetails = $"{samplerName}-{destSizeInfo}"; - ctx.Resize((Size)newSize, sampler, false); - return testOutputDetails; - }, + ctx.Resize((Size)newSize, sampler, false); + return testOutputDetails; + }, comparer, appendPixelTypeToFileName: false); } @@ -309,25 +325,27 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeFromSourceRectangle(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var sourceRectangle = new Rectangle( - image.Width / 8, - image.Height / 8, - image.Width / 4, - image.Height / 4); - 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, - KnownResamplers.Bicubic, - sourceRectangle, - destRectangle, - false)); - - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + using (Image image = provider.GetImage()) + { + var sourceRectangle = new Rectangle( + image.Width / 8, + image.Height / 8, + image.Width / 4, + image.Height / 4); + 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, + KnownResamplers.Bicubic, + sourceRectangle, + destRectangle, + false)); + + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -335,11 +353,13 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeHeightAndKeepAspect(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.Resize(0, image.Height / 3, false)); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.Resize(0, image.Height / 3, false)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -347,10 +367,12 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeHeightCannotKeepAspectKeepsOnePixel(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.Resize(0, 5)); - Assert.Equal(1, image.Width); - Assert.Equal(5, image.Height); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.Resize(0, 5)); + Assert.Equal(1, image.Width); + Assert.Equal(5, image.Height); + } } [Theory] @@ -358,11 +380,13 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWidthAndKeepAspect(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.Resize(image.Width / 3, 0, false)); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.Resize(image.Width / 3, 0, false)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -370,10 +394,12 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWidthCannotKeepAspectKeepsOnePixel(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.Resize(5, 0)); - Assert.Equal(5, image.Width); - Assert.Equal(1, image.Height); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.Resize(5, 0)); + Assert.Equal(5, image.Width); + Assert.Equal(1, image.Height); + } } [Theory] @@ -381,17 +407,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWithBoxPadMode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new ResizeOptions + using (Image image = provider.GetImage()) { - Size = new Size(image.Width + 200, image.Height + 200), - Mode = ResizeMode.BoxPad - }; + var options = new ResizeOptions + { + Size = new Size(image.Width + 200, image.Height + 200), + Mode = ResizeMode.BoxPad + }; - image.Mutate(x => x.Resize(options)); + image.Mutate(x => x.Resize(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -399,13 +427,15 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWithCropHeightMode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new ResizeOptions { Size = new Size(image.Width, image.Height / 2) }; + using (Image image = provider.GetImage()) + { + var options = new ResizeOptions { Size = new Size(image.Width, image.Height / 2) }; - image.Mutate(x => x.Resize(options)); + image.Mutate(x => x.Resize(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -413,13 +443,15 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWithCropWidthMode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new ResizeOptions { Size = new Size(image.Width / 2, image.Height) }; + using (Image image = provider.GetImage()) + { + var options = new ResizeOptions { Size = new Size(image.Width / 2, image.Height) }; - image.Mutate(x => x.Resize(options)); + image.Mutate(x => x.Resize(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -427,17 +459,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void CanResizeLargeImageWithCropMode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new ResizeOptions + using (Image image = provider.GetImage()) { - Size = new Size(480, 600), - Mode = ResizeMode.Crop - }; + var options = new ResizeOptions + { + Size = new Size(480, 600), + Mode = ResizeMode.Crop + }; - image.Mutate(x => x.Resize(options)); + image.Mutate(x => x.Resize(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -445,13 +479,15 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWithMaxMode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new ResizeOptions { Size = new Size(300, 300), Mode = ResizeMode.Max }; + using (Image image = provider.GetImage()) + { + var options = new ResizeOptions { Size = new Size(300, 300), Mode = ResizeMode.Max }; - image.Mutate(x => x.Resize(options)); + image.Mutate(x => x.Resize(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -459,19 +495,21 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWithMinMode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new ResizeOptions + using (Image image = provider.GetImage()) { - Size = new Size( - (int)Math.Round(image.Width * .75F), - (int)Math.Round(image.Height * .95F)), - Mode = ResizeMode.Min - }; - - image.Mutate(x => x.Resize(options)); - - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + var options = new ResizeOptions + { + Size = new Size( + (int)Math.Round(image.Width * .75F), + (int)Math.Round(image.Height * .95F)), + Mode = ResizeMode.Min + }; + + image.Mutate(x => x.Resize(options)); + + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -479,17 +517,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWithPadMode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new ResizeOptions + using (Image image = provider.GetImage()) { - Size = new Size(image.Width + 200, image.Height), - Mode = ResizeMode.Pad - }; + var options = new ResizeOptions + { + Size = new Size(image.Width + 200, image.Height), + Mode = ResizeMode.Pad + }; - image.Mutate(x => x.Resize(options)); + image.Mutate(x => x.Resize(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -497,17 +537,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void ResizeWithStretchMode(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - var options = new ResizeOptions + using (Image image = provider.GetImage()) { - Size = new Size(image.Width / 2, image.Height), - Mode = ResizeMode.Stretch - }; + var options = new ResizeOptions + { + Size = new Size(image.Width / 2, image.Height), + Mode = ResizeMode.Stretch + }; - image.Mutate(x => x.Resize(options)); + image.Mutate(x => x.Resize(options)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -523,10 +565,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms return; } - using Image image = provider.GetImage(); - - // Don't bother saving, we're testing the EXIF metadata updates. - image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); + using (Image image = provider.GetImage()) + { + // Don't bother saving, we're testing the EXIF metadata updates. + image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); + } } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs index a1c03a3d3b..1e08836c13 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; @@ -29,9 +29,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms public void RotateFlip(TestImageProvider provider, RotateMode rotateType, FlipMode flipType) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.Mutate(x => x.RotateFlip(rotateType, flipType)); - image.DebugSave(provider, string.Join("_", rotateType, flipType)); + using (Image image = provider.GetImage()) + { + image.Mutate(x => x.RotateFlip(rotateType, flipType)); + image.DebugSave(provider, string.Join("_", rotateType, flipType)); + } } } -} +} \ No newline at end of file diff --git a/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformTests.cs index 016a77fd0c..399f1665ff 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformTests.cs @@ -80,14 +80,16 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms where TPixel : struct, IPixel { IResampler resampler = GetResampler(resamplerName); - using Image image = provider.GetImage(); - AffineTransformBuilder builder = new AffineTransformBuilder() - .AppendRotationDegrees(30); + using (Image image = provider.GetImage()) + { + AffineTransformBuilder builder = new AffineTransformBuilder() + .AppendRotationDegrees(30); - image.Mutate(c => c.Transform(builder, resampler)); - image.DebugSave(provider, resamplerName); + image.Mutate(c => c.Transform(builder, resampler)); + image.DebugSave(provider, resamplerName); - VerifyAllPixelsAreWhiteOrTransparent(image); + VerifyAllPixelsAreWhiteOrTransparent(image); + } } [Theory] @@ -101,20 +103,22 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms float ty) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.DebugSave(provider, $"_original"); - AffineTransformBuilder builder = new AffineTransformBuilder() - .AppendRotationDegrees(angleDeg) - .AppendScale(new SizeF(sx, sy)) - .AppendTranslation(new PointF(tx, ty)); + using (Image image = provider.GetImage()) + { + image.DebugSave(provider, $"_original"); + AffineTransformBuilder builder = new AffineTransformBuilder() + .AppendRotationDegrees(angleDeg) + .AppendScale(new SizeF(sx, sy)) + .AppendTranslation(new PointF(tx, ty)); - this.PrintMatrix(builder.BuildMatrix(image.Size())); + this.PrintMatrix(builder.BuildMatrix(image.Size())); - image.Mutate(i => i.Transform(builder, KnownResamplers.Bicubic)); + image.Mutate(i => i.Transform(builder, KnownResamplers.Bicubic)); - FormattableString testOutputDetails = $"R({angleDeg})_S({sx},{sy})_T({tx},{ty})"; - image.DebugSave(provider, testOutputDetails); - image.CompareToReferenceOutput(ValidatorComparer, provider, testOutputDetails); + FormattableString testOutputDetails = $"R({angleDeg})_S({sx},{sy})_T({tx},{ty})"; + image.DebugSave(provider, testOutputDetails); + image.CompareToReferenceOutput(ValidatorComparer, provider, testOutputDetails); + } } [Theory] @@ -122,16 +126,18 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms public void Transform_RotateScale_ManuallyCentered(TestImageProvider provider, float angleDeg, float s) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - AffineTransformBuilder builder = new AffineTransformBuilder() - .AppendRotationDegrees(angleDeg) - .AppendScale(new SizeF(s, s)); + using (Image image = provider.GetImage()) + { + AffineTransformBuilder builder = new AffineTransformBuilder() + .AppendRotationDegrees(angleDeg) + .AppendScale(new SizeF(s, s)); - image.Mutate(i => i.Transform(builder, KnownResamplers.Bicubic)); + image.Mutate(i => i.Transform(builder, KnownResamplers.Bicubic)); - FormattableString testOutputDetails = $"R({angleDeg})_S({s})"; - image.DebugSave(provider, testOutputDetails); - image.CompareToReferenceOutput(ValidatorComparer, provider, testOutputDetails); + FormattableString testOutputDetails = $"R({angleDeg})_S({s})"; + image.DebugSave(provider, testOutputDetails); + image.CompareToReferenceOutput(ValidatorComparer, provider, testOutputDetails); + } } public static readonly TheoryData Transform_IntoRectangle_Data = @@ -156,15 +162,17 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms { var rectangle = new Rectangle(48, 0, 48, 24); - using Image image = provider.GetImage(); - image.DebugSave(provider, $"_original"); - AffineTransformBuilder builder = new AffineTransformBuilder() - .AppendScale(new SizeF(2, 1.5F)); + using (Image image = provider.GetImage()) + { + image.DebugSave(provider, $"_original"); + AffineTransformBuilder builder = new AffineTransformBuilder() + .AppendScale(new SizeF(2, 1.5F)); - image.Mutate(i => i.Transform(rectangle, builder, KnownResamplers.Spline)); + image.Mutate(i => i.Transform(rectangle, builder, KnownResamplers.Spline)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -174,14 +182,16 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms { var rectangle = new Rectangle(0, 24, 48, 24); - using Image image = provider.GetImage(); - AffineTransformBuilder builder = new AffineTransformBuilder() - .AppendScale(new SizeF(1F, 2F)); + using (Image image = provider.GetImage()) + { + AffineTransformBuilder builder = new AffineTransformBuilder() + .AppendScale(new SizeF(1F, 2F)); - image.Mutate(i => i.Transform(rectangle, builder, KnownResamplers.Spline)); + image.Mutate(i => i.Transform(rectangle, builder, KnownResamplers.Spline)); - image.DebugSave(provider); - image.CompareToReferenceOutput(ValidatorComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(ValidatorComparer, provider); + } } [Theory] @@ -190,15 +200,17 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms where TPixel : struct, IPixel { IResampler sampler = GetResampler(resamplerName); - using Image image = provider.GetImage(); - AffineTransformBuilder builder = new AffineTransformBuilder() - .AppendRotationDegrees(50) - .AppendScale(new SizeF(.6F, .6F)); + using (Image image = provider.GetImage()) + { + AffineTransformBuilder builder = new AffineTransformBuilder() + .AppendRotationDegrees(50) + .AppendScale(new SizeF(.6F, .6F)); - image.Mutate(i => i.Transform(builder, sampler)); + image.Mutate(i => i.Transform(builder, sampler)); - image.DebugSave(provider, resamplerName); - image.CompareToReferenceOutput(ValidatorComparer, provider, resamplerName); + image.DebugSave(provider, resamplerName); + image.CompareToReferenceOutput(ValidatorComparer, provider, resamplerName); + } } private static IResampler GetResampler(string name) diff --git a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs index 8b0cc02b1f..ad592f9712 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs @@ -64,14 +64,16 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms where TPixel : struct, IPixel { IResampler sampler = GetResampler(resamplerName); - using Image image = provider.GetImage(); - ProjectiveTransformBuilder builder = new ProjectiveTransformBuilder() - .AppendTaper(TaperSide.Right, TaperCorner.Both, .5F); + using (Image image = provider.GetImage()) + { + ProjectiveTransformBuilder builder = new ProjectiveTransformBuilder() + .AppendTaper(TaperSide.Right, TaperCorner.Both, .5F); - image.Mutate(i => i.Transform(builder, sampler)); + image.Mutate(i => i.Transform(builder, sampler)); - image.DebugSave(provider, resamplerName); - image.CompareToReferenceOutput(ValidatorComparer, provider, resamplerName); + image.DebugSave(provider, resamplerName); + image.CompareToReferenceOutput(ValidatorComparer, provider, resamplerName); + } } [Theory] @@ -79,15 +81,17 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms public void Transform_WithTaperMatrix(TestImageProvider provider, TaperSide taperSide, TaperCorner taperCorner) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - ProjectiveTransformBuilder builder = new ProjectiveTransformBuilder() - .AppendTaper(taperSide, taperCorner, .5F); + using (Image image = provider.GetImage()) + { + ProjectiveTransformBuilder builder = new ProjectiveTransformBuilder() + .AppendTaper(taperSide, taperCorner, .5F); - image.Mutate(i => i.Transform(builder)); + image.Mutate(i => i.Transform(builder)); - FormattableString testOutputDetails = $"{taperSide}-{taperCorner}"; - image.DebugSave(provider, testOutputDetails); - image.CompareFirstFrameToReferenceOutput(TolerantComparer, provider, testOutputDetails); + FormattableString testOutputDetails = $"{taperSide}-{taperCorner}"; + image.DebugSave(provider, testOutputDetails); + image.CompareFirstFrameToReferenceOutput(TolerantComparer, provider, testOutputDetails); + } } [Theory] @@ -100,17 +104,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms // This test matches the output described in the example at // https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/transforms/non-affine - using Image image = provider.GetImage(); - Matrix4x4 matrix = Matrix4x4.Identity; - matrix.M14 = 0.01F; + using (Image image = provider.GetImage()) + { + Matrix4x4 matrix = Matrix4x4.Identity; + matrix.M14 = 0.01F; - ProjectiveTransformBuilder builder = new ProjectiveTransformBuilder() + ProjectiveTransformBuilder builder = new ProjectiveTransformBuilder() .AppendMatrix(matrix); - image.Mutate(i => i.Transform(builder)); + image.Mutate(i => i.Transform(builder)); - image.DebugSave(provider); - image.CompareToReferenceOutput(TolerantComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(TolerantComparer, provider); + } } [Theory] @@ -120,22 +126,24 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms { // https://jsfiddle.net/dFrHS/545/ // https://github.com/SixLabors/ImageSharp/issues/787 - using Image image = provider.GetImage(); + using (Image image = provider.GetImage()) + { #pragma warning disable SA1117 // Parameters should be on same line or separate lines - var matrix = new Matrix4x4( - 0.260987f, -0.434909f, 0, -0.0022184f, - 0.373196f, 0.949882f, 0, -0.000312129f, - 0, 0, 1, 0, - 52, 165, 0, 1); + var matrix = new Matrix4x4( + 0.260987f, -0.434909f, 0, -0.0022184f, + 0.373196f, 0.949882f, 0, -0.000312129f, + 0, 0, 1, 0, + 52, 165, 0, 1); #pragma warning restore SA1117 // Parameters should be on same line or separate lines - ProjectiveTransformBuilder builder = new ProjectiveTransformBuilder() + ProjectiveTransformBuilder builder = new ProjectiveTransformBuilder() .AppendMatrix(matrix); - image.Mutate(i => i.Transform(builder)); + image.Mutate(i => i.Transform(builder)); - image.DebugSave(provider); - image.CompareToReferenceOutput(TolerantComparer, provider); + image.DebugSave(provider); + image.CompareToReferenceOutput(TolerantComparer, provider); + } } private static IResampler GetResampler(string name) diff --git a/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs index d964a7d15e..9f8034fa37 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs @@ -15,19 +15,21 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms { int xy = 1; - using var img = new Image(xy, xy); - var profile = new ExifProfile(); - img.Metadata.ExifProfile = profile; - profile.SetValue(ExifTag.PixelXDimension, xy + ushort.MaxValue); - profile.SetValue(ExifTag.PixelYDimension, xy + ushort.MaxValue); + using (var img = new Image(xy, xy)) + { + var profile = new ExifProfile(); + img.Metadata.ExifProfile = profile; + profile.SetValue(ExifTag.PixelXDimension, xy + ushort.MaxValue); + profile.SetValue(ExifTag.PixelYDimension, xy + ushort.MaxValue); - Assert.Equal(ExifDataType.Long, profile.GetValue(ExifTag.PixelXDimension).DataType); - Assert.Equal(ExifDataType.Long, profile.GetValue(ExifTag.PixelYDimension).DataType); + Assert.Equal(ExifDataType.Long, profile.GetValue(ExifTag.PixelXDimension).DataType); + Assert.Equal(ExifDataType.Long, profile.GetValue(ExifTag.PixelYDimension).DataType); - TransformProcessorHelpers.UpdateDimensionalMetadata(img); + TransformProcessorHelpers.UpdateDimensionalMetadata(img); - Assert.Equal(ExifDataType.Short, profile.GetValue(ExifTag.PixelXDimension).DataType); - Assert.Equal(ExifDataType.Short, profile.GetValue(ExifTag.PixelYDimension).DataType); + Assert.Equal(ExifDataType.Short, profile.GetValue(ExifTag.PixelXDimension).DataType); + Assert.Equal(ExifDataType.Short, profile.GetValue(ExifTag.PixelYDimension).DataType); + } } } } diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs index df61d06ade..858607a02f 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs @@ -26,19 +26,21 @@ namespace SixLabors.ImageSharp.Tests.ProfilingBenchmarks byte[] imageBytes = TestFile.Create(imagePath).Bytes; - using var ms = new MemoryStream(); - this.Measure( - 30, - () => - { - using (var image = Image.Load(configuration, imageBytes)) - { - image.Mutate(x => x.Resize(image.Size() / 4)); - image.SaveAsJpeg(ms); - } - - ms.Seek(0, SeekOrigin.Begin); - }); + using (var ms = new MemoryStream()) + { + this.Measure( + 30, + () => + { + using (var image = Image.Load(configuration, imageBytes)) + { + image.Mutate(x => x.Resize(image.Size() / 4)); + image.SaveAsJpeg(ms); + } + + ms.Seek(0, SeekOrigin.Begin); + }); + } } } } diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs index c38e3234cf..ba5eb532b2 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs @@ -29,10 +29,12 @@ namespace SixLabors.ImageSharp.Tests.ProfilingBenchmarks this.Measure( this.ExecutionCount, () => - { - using var image = new Image(this.configuration, width, height); - image.Mutate(x => x.Resize(width / 5, height / 5)); - }); + { + using (var image = new Image(this.configuration, width, height)) + { + image.Mutate(x => x.Resize(width / 5, height / 5)); + } + }); } } } diff --git a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs index ddf2a5752d..7750017095 100644 --- a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs +++ b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs @@ -41,18 +41,20 @@ namespace SixLabors.ImageSharp.Tests bool dither) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - Assert.True(image[0, 0].Equals(default(TPixel))); + using (Image image = provider.GetImage()) + { + Assert.True(image[0, 0].Equals(default(TPixel))); - var quantizer = new OctreeQuantizer(dither); + var quantizer = new OctreeQuantizer(dither); - foreach (ImageFrame frame in image.Frames) - { - IQuantizedFrame quantized = - quantizer.CreateFrameQuantizer(this.Configuration).QuantizeFrame(frame); + foreach (ImageFrame frame in image.Frames) + { + IQuantizedFrame quantized = + quantizer.CreateFrameQuantizer(this.Configuration).QuantizeFrame(frame); - int index = this.GetTransparentIndex(quantized); - Assert.Equal(index, quantized.GetPixelSpan()[0]); + int index = this.GetTransparentIndex(quantized); + Assert.Equal(index, quantized.GetPixelSpan()[0]); + } } } @@ -62,18 +64,20 @@ namespace SixLabors.ImageSharp.Tests public void WuQuantizerYieldsCorrectTransparentPixel(TestImageProvider provider, bool dither) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - Assert.True(image[0, 0].Equals(default(TPixel))); + using (Image image = provider.GetImage()) + { + Assert.True(image[0, 0].Equals(default(TPixel))); - var quantizer = new WuQuantizer(dither); + var quantizer = new WuQuantizer(dither); - foreach (ImageFrame frame in image.Frames) - { - IQuantizedFrame quantized = - quantizer.CreateFrameQuantizer(this.Configuration).QuantizeFrame(frame); + foreach (ImageFrame frame in image.Frames) + { + IQuantizedFrame quantized = + quantizer.CreateFrameQuantizer(this.Configuration).QuantizeFrame(frame); - int index = this.GetTransparentIndex(quantized); - Assert.Equal(index, quantized.GetPixelSpan()[0]); + int index = this.GetTransparentIndex(quantized); + Assert.Equal(index, quantized.GetPixelSpan()[0]); + } } } diff --git a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs index 32c5586b57..1b0253147a 100644 --- a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs @@ -17,13 +17,15 @@ namespace SixLabors.ImageSharp.Tests.Quantization Configuration config = Configuration.Default; var quantizer = new WuQuantizer(false); - using var image = new Image(config, 1, 1, Rgba32.Black); - using IQuantizedFrame result = quantizer.CreateFrameQuantizer(config).QuantizeFrame(image.Frames[0]); - Assert.Equal(1, result.Palette.Length); - Assert.Equal(1, result.GetPixelSpan().Length); + using (var image = new Image(config, 1, 1, Rgba32.Black)) + using (IQuantizedFrame result = quantizer.CreateFrameQuantizer(config).QuantizeFrame(image.Frames[0])) + { + Assert.Equal(1, result.Palette.Length); + Assert.Equal(1, result.GetPixelSpan().Length); - Assert.Equal(Rgba32.Black, result.Palette.Span[0]); - Assert.Equal(0, result.GetPixelSpan()[0]); + Assert.Equal(Rgba32.Black, result.Palette.Span[0]); + Assert.Equal(0, result.GetPixelSpan()[0]); + } } [Fact] @@ -32,13 +34,15 @@ namespace SixLabors.ImageSharp.Tests.Quantization Configuration config = Configuration.Default; var quantizer = new WuQuantizer(false); - using var image = new Image(config, 1, 1, default(Rgba32)); - using IQuantizedFrame result = quantizer.CreateFrameQuantizer(config).QuantizeFrame(image.Frames[0]); - Assert.Equal(1, result.Palette.Length); - Assert.Equal(1, result.GetPixelSpan().Length); + using (var image = new Image(config, 1, 1, default(Rgba32))) + using (IQuantizedFrame result = quantizer.CreateFrameQuantizer(config).QuantizeFrame(image.Frames[0])) + { + Assert.Equal(1, result.Palette.Length); + Assert.Equal(1, result.GetPixelSpan().Length); - Assert.Equal(default, result.Palette.Span[0]); - Assert.Equal(0, result.GetPixelSpan()[0]); + Assert.Equal(default, result.Palette.Span[0]); + Assert.Equal(0, result.GetPixelSpan()[0]); + } } [Fact] @@ -59,42 +63,46 @@ namespace SixLabors.ImageSharp.Tests.Quantization [Fact] public void Palette256() { - using var image = new Image(1, 256); - for (int i = 0; i < 256; i++) + using (var image = new Image(1, 256)) { - byte r = (byte)((i % 4) * 85); - byte g = (byte)(((i / 4) % 4) * 85); - byte b = (byte)(((i / 16) % 4) * 85); - byte a = (byte)((i / 64) * 85); - - image[0, i] = new Rgba32(r, g, b, a); - } - - Configuration config = Configuration.Default; - var quantizer = new WuQuantizer(false); - using IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config); - using IQuantizedFrame result = frameQuantizer.QuantizeFrame(image.Frames[0]); - Assert.Equal(256, result.Palette.Length); - Assert.Equal(256, result.GetPixelSpan().Length); - - var actualImage = new Image(1, 256); + for (int i = 0; i < 256; i++) + { + byte r = (byte)((i % 4) * 85); + byte g = (byte)(((i / 4) % 4) * 85); + byte b = (byte)(((i / 16) % 4) * 85); + byte a = (byte)((i / 64) * 85); - ReadOnlySpan paletteSpan = result.Palette.Span; - int paletteCount = result.Palette.Length - 1; - for (int y = 0; y < actualImage.Height; y++) - { - Span row = actualImage.GetPixelRowSpan(y); - ReadOnlySpan quantizedPixelSpan = result.GetPixelSpan(); - int yy = y * actualImage.Width; + image[0, i] = new Rgba32(r, g, b, a); + } - for (int x = 0; x < actualImage.Width; x++) + Configuration config = Configuration.Default; + var quantizer = new WuQuantizer(false); + using (IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config)) + using (IQuantizedFrame result = frameQuantizer.QuantizeFrame(image.Frames[0])) { - int i = x + yy; - row[x] = paletteSpan[Math.Min(paletteCount, quantizedPixelSpan[i])]; + Assert.Equal(256, result.Palette.Length); + Assert.Equal(256, result.GetPixelSpan().Length); + + var actualImage = new Image(1, 256); + + ReadOnlySpan paletteSpan = result.Palette.Span; + int paletteCount = result.Palette.Length - 1; + for (int y = 0; y < actualImage.Height; y++) + { + Span row = actualImage.GetPixelRowSpan(y); + ReadOnlySpan quantizedPixelSpan = result.GetPixelSpan(); + int yy = y * actualImage.Width; + + for (int x = 0; x < actualImage.Width; x++) + { + int i = x + yy; + row[x] = paletteSpan[Math.Min(paletteCount, quantizedPixelSpan[i])]; + } + } + + Assert.True(image.GetPixelSpan().SequenceEqual(actualImage.GetPixelSpan())); } } - - Assert.True(image.GetPixelSpan().SequenceEqual(actualImage.GetPixelSpan())); } [Theory] @@ -103,55 +111,63 @@ namespace SixLabors.ImageSharp.Tests.Quantization where TPixel : struct, IPixel { // See https://github.com/SixLabors/ImageSharp/issues/866 - using Image image = provider.GetImage(); - Configuration config = Configuration.Default; - var quantizer = new WuQuantizer(false); - using IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config); - using IQuantizedFrame result = frameQuantizer.QuantizeFrame(image.Frames[0]); - Assert.Equal(48, result.Palette.Length); + using (Image image = provider.GetImage()) + { + Configuration config = Configuration.Default; + var quantizer = new WuQuantizer(false); + using (IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config)) + using (IQuantizedFrame result = frameQuantizer.QuantizeFrame(image.Frames[0])) + { + Assert.Equal(48, result.Palette.Length); + } + } } private static void TestScale(Func pixelBuilder) { - using var image = new Image(1, 256); - using var expectedImage = new Image(1, 256); - using var actualImage = new Image(1, 256); - for (int i = 0; i < 256; i++) + using (var image = new Image(1, 256)) + using (var expectedImage = new Image(1, 256)) + using (var actualImage = new Image(1, 256)) { - byte c = (byte)i; - image[0, i] = pixelBuilder.Invoke(c); - } - - for (int i = 0; i < 256; i++) - { - byte c = (byte)((i & ~7) + 4); - expectedImage[0, i] = pixelBuilder.Invoke(c); - } - - Configuration config = Configuration.Default; - var quantizer = new WuQuantizer(false); + for (int i = 0; i < 256; i++) + { + byte c = (byte)i; + image[0, i] = pixelBuilder.Invoke(c); + } - using IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config); - using IQuantizedFrame result = frameQuantizer.QuantizeFrame(image.Frames[0]); - Assert.Equal(4 * 8, result.Palette.Length); - Assert.Equal(256, result.GetPixelSpan().Length); + for (int i = 0; i < 256; i++) + { + byte c = (byte)((i & ~7) + 4); + expectedImage[0, i] = pixelBuilder.Invoke(c); + } - ReadOnlySpan paletteSpan = result.Palette.Span; - int paletteCount = result.Palette.Length - 1; - for (int y = 0; y < actualImage.Height; y++) - { - Span row = actualImage.GetPixelRowSpan(y); - ReadOnlySpan quantizedPixelSpan = result.GetPixelSpan(); - int yy = y * actualImage.Width; + Configuration config = Configuration.Default; + var quantizer = new WuQuantizer(false); - for (int x = 0; x < actualImage.Width; x++) + using (IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config)) + using (IQuantizedFrame result = frameQuantizer.QuantizeFrame(image.Frames[0])) { - int i = x + yy; - row[x] = paletteSpan[Math.Min(paletteCount, quantizedPixelSpan[i])]; + Assert.Equal(4 * 8, result.Palette.Length); + Assert.Equal(256, result.GetPixelSpan().Length); + + ReadOnlySpan paletteSpan = result.Palette.Span; + int paletteCount = result.Palette.Length - 1; + for (int y = 0; y < actualImage.Height; y++) + { + Span row = actualImage.GetPixelRowSpan(y); + ReadOnlySpan quantizedPixelSpan = result.GetPixelSpan(); + int yy = y * actualImage.Width; + + for (int x = 0; x < actualImage.Width; x++) + { + int i = x + yy; + row[x] = paletteSpan[Math.Min(paletteCount, quantizedPixelSpan[i])]; + } + } } - } - Assert.True(expectedImage.GetPixelSpan().SequenceEqual(actualImage.GetPixelSpan())); + Assert.True(expectedImage.GetPixelSpan().SequenceEqual(actualImage.GetPixelSpan())); + } } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs b/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs index afd66e8ce4..cce0c87126 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs @@ -223,10 +223,14 @@ namespace SixLabors.ImageSharp.Tests for (int i = 0; i < image.Frames.Count; i++) { - using Image frameImage = image.Frames.CloneFrame(i); - string filePath = files[i]; - using FileStream stream = File.OpenWrite(filePath); - frameImage.Save(stream, encoder); + using (Image frameImage = image.Frames.CloneFrame(i)) + { + string filePath = files[i]; + using (FileStream stream = File.OpenWrite(filePath)) + { + frameImage.Save(stream, encoder); + } + } } return files; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs index 413717d362..58afd48a7e 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs @@ -20,38 +20,42 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs public Image Decode(Configuration configuration, Stream stream) where TPixel : struct, IPixel { - using var magickImage = new MagickImage(stream); - var result = new Image(configuration, magickImage.Width, magickImage.Height); - Span resultPixels = result.GetPixelSpan(); - - using IPixelCollection pixels = magickImage.GetPixelsUnsafe(); - if (magickImage.Depth == 8) - { - byte[] data = pixels.ToByteArray(PixelMapping.RGBA); - - PixelOperations.Instance.FromRgba32Bytes( - configuration, - data, - resultPixels, - resultPixels.Length); - } - else if (magickImage.Depth == 16) + using (var magickImage = new MagickImage(stream)) { - ushort[] data = pixels.ToShortArray(PixelMapping.RGBA); - Span bytes = MemoryMarshal.Cast(data.AsSpan()); - - PixelOperations.Instance.FromRgba64Bytes( - configuration, - bytes, - resultPixels, - resultPixels.Length); + var result = new Image(configuration, magickImage.Width, magickImage.Height); + Span resultPixels = result.GetPixelSpan(); + + using (IPixelCollection pixels = magickImage.GetPixelsUnsafe()) + { + if (magickImage.Depth == 8) + { + byte[] data = pixels.ToByteArray(PixelMapping.RGBA); + + PixelOperations.Instance.FromRgba32Bytes( + configuration, + data, + resultPixels, + resultPixels.Length); + } + else if (magickImage.Depth == 16) + { + ushort[] data = pixels.ToShortArray(PixelMapping.RGBA); + Span bytes = MemoryMarshal.Cast(data.AsSpan()); + + PixelOperations.Instance.FromRgba64Bytes( + configuration, + bytes, + resultPixels, + resultPixels.Length); + } + else + { + throw new InvalidOperationException(); + } + } + + return result; } - else - { - throw new InvalidOperationException(); - } - - return result; } public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs index baeb785222..590233420c 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs @@ -49,20 +49,22 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs Configuration configuration = image.GetConfiguration(); - using IMemoryOwner workBuffer = Configuration.Default.MemoryAllocator.Allocate(w); - fixed (Bgra32* destPtr = &workBuffer.GetReference()) + using (IMemoryOwner workBuffer = Configuration.Default.MemoryAllocator.Allocate(w)) { - for (int y = 0; y < h; y++) + fixed (Bgra32* destPtr = &workBuffer.GetReference()) { - Span row = image.Frames.RootFrame.GetPixelRowSpan(y); - - byte* sourcePtr = sourcePtrBase + (data.Stride * y); - - Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); - PixelOperations.Instance.FromBgra32( - configuration, - workBuffer.GetSpan().Slice(0, w), - row); + for (int y = 0; y < h; y++) + { + Span row = image.Frames.RootFrame.GetPixelRowSpan(y); + + byte* sourcePtr = sourcePtrBase + (data.Stride * y); + + Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); + PixelOperations.Instance.FromBgra32( + configuration, + workBuffer.GetSpan().Slice(0, w), + row); + } } } } @@ -106,17 +108,19 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs Configuration configuration = image.GetConfiguration(); - using IMemoryOwner workBuffer = Configuration.Default.MemoryAllocator.Allocate(w); - fixed (Bgr24* destPtr = &workBuffer.GetReference()) + using (IMemoryOwner workBuffer = Configuration.Default.MemoryAllocator.Allocate(w)) { - for (int y = 0; y < h; y++) + fixed (Bgr24* destPtr = &workBuffer.GetReference()) { - Span row = image.Frames.RootFrame.GetPixelRowSpan(y); + for (int y = 0; y < h; y++) + { + Span row = image.Frames.RootFrame.GetPixelRowSpan(y); - byte* sourcePtr = sourcePtrBase + (data.Stride * y); + byte* sourcePtr = sourcePtrBase + (data.Stride * y); - Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); - PixelOperations.Instance.FromBgr24(configuration, workBuffer.GetSpan().Slice(0, w), row); + Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); + PixelOperations.Instance.FromBgr24(configuration, workBuffer.GetSpan().Slice(0, w), row); + } } } } @@ -145,16 +149,18 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs long destRowByteCount = data.Stride; long sourceRowByteCount = w * sizeof(Bgra32); - using IMemoryOwner workBuffer = image.GetConfiguration().MemoryAllocator.Allocate(w); - fixed (Bgra32* sourcePtr = &workBuffer.GetReference()) + using (IMemoryOwner workBuffer = image.GetConfiguration().MemoryAllocator.Allocate(w)) { - for (int y = 0; y < h; y++) + fixed (Bgra32* sourcePtr = &workBuffer.GetReference()) { - Span row = image.Frames.RootFrame.GetPixelRowSpan(y); - PixelOperations.Instance.ToBgra32(configuration, row, workBuffer.GetSpan()); - byte* destPtr = destPtrBase + (data.Stride * y); - - Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); + for (int y = 0; y < h; y++) + { + Span row = image.Frames.RootFrame.GetPixelRowSpan(y); + PixelOperations.Instance.ToBgra32(configuration, row, workBuffer.GetSpan()); + byte* destPtr = destPtrBase + (data.Stride * y); + + Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); + } } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs index dcd1c2bbbf..286ab9caee 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs @@ -16,32 +16,40 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs public Image Decode(Configuration configuration, Stream stream) where TPixel : struct, IPixel { - using var sourceBitmap = new System.Drawing.Bitmap(stream); - if (sourceBitmap.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppArgb) + using (var sourceBitmap = new System.Drawing.Bitmap(stream)) { - return SystemDrawingBridge.From32bppArgbSystemDrawingBitmap(sourceBitmap); + if (sourceBitmap.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppArgb) + { + return SystemDrawingBridge.From32bppArgbSystemDrawingBitmap(sourceBitmap); + } + + using (var convertedBitmap = new System.Drawing.Bitmap( + sourceBitmap.Width, + sourceBitmap.Height, + System.Drawing.Imaging.PixelFormat.Format32bppArgb)) + { + using (var g = System.Drawing.Graphics.FromImage(convertedBitmap)) + { + g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; + g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; + + g.DrawImage(sourceBitmap, 0, 0, sourceBitmap.Width, sourceBitmap.Height); + } + + return SystemDrawingBridge.From32bppArgbSystemDrawingBitmap(convertedBitmap); + } } - - using var convertedBitmap = new System.Drawing.Bitmap( - sourceBitmap.Width, - sourceBitmap.Height, - System.Drawing.Imaging.PixelFormat.Format32bppArgb); - using var g = System.Drawing.Graphics.FromImage(convertedBitmap); - g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; - g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; - g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; - g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; - - g.DrawImage(sourceBitmap, 0, 0, sourceBitmap.Width, sourceBitmap.Height); - - return SystemDrawingBridge.From32bppArgbSystemDrawingBitmap(convertedBitmap); } public IImageInfo Identify(Configuration configuration, Stream stream) { - using var sourceBitmap = new System.Drawing.Bitmap(stream); - var pixelType = new PixelTypeInfo(System.Drawing.Image.GetPixelFormatSize(sourceBitmap.PixelFormat)); - return new ImageInfo(pixelType, sourceBitmap.Width, sourceBitmap.Height, new ImageMetadata()); + using (var sourceBitmap = new System.Drawing.Bitmap(stream)) + { + var pixelType = new PixelTypeInfo(System.Drawing.Image.GetPixelFormatSize(sourceBitmap.PixelFormat)); + return new ImageInfo(pixelType, sourceBitmap.Width, sourceBitmap.Height, new ImageMetadata()); + } } public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs index bfad7414ea..46dae17a11 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs @@ -1,4 +1,4 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using System.Drawing.Imaging; @@ -25,8 +25,10 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs public void Encode(Image image, Stream stream) where TPixel : struct, IPixel { - using System.Drawing.Bitmap sdBitmap = SystemDrawingBridge.To32bppArgbSystemDrawingBitmap(image); - sdBitmap.Save(stream, this.imageFormat); + using (System.Drawing.Bitmap sdBitmap = SystemDrawingBridge.To32bppArgbSystemDrawingBitmap(image)) + { + sdBitmap.Save(stream, this.imageFormat); + } } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs index d8a611ca84..70d39024e4 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs @@ -286,17 +286,19 @@ namespace SixLabors.ImageSharp.Tests bool appendSourceFileOrDescription = true) where TPixel : struct, IPixel { - using var firstFrameOnlyImage = new Image(image.Width, image.Height); - using Image referenceImage = GetReferenceOutputImage( + using (var firstFrameOnlyImage = new Image(image.Width, image.Height)) + using (Image referenceImage = GetReferenceOutputImage( provider, testOutputDetails, extension, appendPixelTypeToFileName, - appendSourceFileOrDescription); - firstFrameOnlyImage.Frames.AddFrame(image.Frames.RootFrame); - firstFrameOnlyImage.Frames.RemoveFrame(0); + appendSourceFileOrDescription)) + { + firstFrameOnlyImage.Frames.AddFrame(image.Frames.RootFrame); + firstFrameOnlyImage.Frames.RemoveFrame(0); - comparer.VerifySimilarity(referenceImage, firstFrameOnlyImage); + comparer.VerifySimilarity(referenceImage, firstFrameOnlyImage); + } return image; } @@ -402,11 +404,13 @@ namespace SixLabors.ImageSharp.Tests bool appendPixelTypeToFileName = true) where TPixel : struct, IPixel { - using Image referenceImage = provider.GetReferenceOutputImage( + using (Image referenceImage = provider.GetReferenceOutputImage( testOutputDetails, extension, - appendPixelTypeToFileName); - return comparer.CompareImages(referenceImage, image); + appendPixelTypeToFileName)) + { + return comparer.CompareImages(referenceImage, image); + } } public static Image ComparePixelBufferTo( @@ -551,21 +555,23 @@ namespace SixLabors.ImageSharp.Tests bool appendSourceFileOrDescription = true) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - operation(image); - - image.DebugSave( - provider, - testOutputDetails, - appendPixelTypeToFileName: appendPixelTypeToFileName, - appendSourceFileOrDescription: appendSourceFileOrDescription); - - image.CompareToReferenceOutput( - comparer, - provider, - testOutputDetails, - appendPixelTypeToFileName: appendPixelTypeToFileName, - appendSourceFileOrDescription: appendSourceFileOrDescription); + using (Image image = provider.GetImage()) + { + operation(image); + + image.DebugSave( + provider, + testOutputDetails, + appendPixelTypeToFileName: appendPixelTypeToFileName, + appendSourceFileOrDescription: appendSourceFileOrDescription); + + image.CompareToReferenceOutput( + comparer, + provider, + testOutputDetails, + appendPixelTypeToFileName: appendPixelTypeToFileName, + appendSourceFileOrDescription: appendSourceFileOrDescription); + } } /// @@ -653,9 +659,11 @@ namespace SixLabors.ImageSharp.Tests referenceDecoder = referenceDecoder ?? TestEnvironment.GetReferenceDecoder(actualOutputFile); - using var actualImage = Image.Load(actualOutputFile, referenceDecoder); - ImageComparer comparer = customComparer ?? ImageComparer.Exact; - comparer.VerifySimilarity(actualImage, image); + using (var actualImage = Image.Load(actualOutputFile, referenceDecoder)) + { + ImageComparer comparer = customComparer ?? ImageComparer.Exact; + comparer.VerifySimilarity(actualImage, image); + } } internal static Image ToGrayscaleImage(this Buffer2D buffer, float scale) diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs index de7b5f84a5..24c4d1b476 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs @@ -33,10 +33,14 @@ namespace SixLabors.ImageSharp.Tests int pixelThreshold) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using Image clone = image.Clone(); - var comparer = ImageComparer.Tolerant(imageThreshold, pixelThreshold); - comparer.VerifySimilarity(image, clone); + using (Image image = provider.GetImage()) + { + using (Image clone = image.Clone()) + { + var comparer = ImageComparer.Tolerant(imageThreshold, pixelThreshold); + comparer.VerifySimilarity(image, clone); + } + } } [Theory] @@ -44,12 +48,16 @@ namespace SixLabors.ImageSharp.Tests public void TolerantImageComparer_ApprovesSimilarityBelowTolerance(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using Image clone = image.Clone(); - ImagingTestCaseUtility.ModifyPixel(clone, 0, 0, 1); + using (Image image = provider.GetImage()) + { + using (Image clone = image.Clone()) + { + ImagingTestCaseUtility.ModifyPixel(clone, 0, 0, 1); - var comparer = ImageComparer.Tolerant(); - comparer.VerifySimilarity(image, clone); + var comparer = ImageComparer.Tolerant(); + comparer.VerifySimilarity(image, clone); + } + } } [Theory] @@ -57,18 +65,22 @@ namespace SixLabors.ImageSharp.Tests public void TolerantImageComparer_DoesNotApproveSimilarityAboveTolerance(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using Image clone = image.Clone(); - byte perChannelChange = 20; - ImagingTestCaseUtility.ModifyPixel(clone, 3, 1, perChannelChange); + using (Image image = provider.GetImage()) + { + using (Image clone = image.Clone()) + { + byte perChannelChange = 20; + ImagingTestCaseUtility.ModifyPixel(clone, 3, 1, perChannelChange); - var comparer = ImageComparer.Tolerant(); + var comparer = ImageComparer.Tolerant(); - ImageDifferenceIsOverThresholdException ex = Assert.ThrowsAny( - () => comparer.VerifySimilarity(image, clone)); + ImageDifferenceIsOverThresholdException ex = Assert.ThrowsAny( + () => comparer.VerifySimilarity(image, clone)); - PixelDifference diff = ex.Reports.Single().Differences.Single(); - Assert.Equal(new Point(3, 1), diff.Position); + PixelDifference diff = ex.Reports.Single().Differences.Single(); + Assert.Equal(new Point(3, 1), diff.Position); + } + } } [Theory] @@ -76,14 +88,18 @@ namespace SixLabors.ImageSharp.Tests public void TolerantImageComparer_TestPerPixelThreshold(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using Image clone = image.Clone(); - ImagingTestCaseUtility.ModifyPixel(clone, 0, 0, 1); - ImagingTestCaseUtility.ModifyPixel(clone, 1, 0, 1); - ImagingTestCaseUtility.ModifyPixel(clone, 2, 0, 1); - - var comparer = ImageComparer.Tolerant(perPixelManhattanThreshold: 257 * 3); - comparer.VerifySimilarity(image, clone); + using (Image image = provider.GetImage()) + { + using (Image clone = image.Clone()) + { + ImagingTestCaseUtility.ModifyPixel(clone, 0, 0, 1); + ImagingTestCaseUtility.ModifyPixel(clone, 1, 0, 1); + ImagingTestCaseUtility.ModifyPixel(clone, 2, 0, 1); + + var comparer = ImageComparer.Tolerant(perPixelManhattanThreshold: 257 * 3); + comparer.VerifySimilarity(image, clone); + } + } } [Theory] @@ -92,15 +108,19 @@ namespace SixLabors.ImageSharp.Tests public void VerifySimilarity_ThrowsOnSizeMismatch(TestImageProvider provider, int w, int h) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using Image clone = image.Clone(ctx => ctx.Resize(w, h)); - ImageDimensionsMismatchException ex = Assert.ThrowsAny( - () => + using (Image image = provider.GetImage()) + { + using (Image clone = image.Clone(ctx => ctx.Resize(w, h))) { - ImageComparer comparer = Mock.Of(); - comparer.VerifySimilarity(image, clone); - }); - this.Output.WriteLine(ex.Message); + ImageDimensionsMismatchException ex = Assert.ThrowsAny( + () => + { + ImageComparer comparer = Mock.Of(); + comparer.VerifySimilarity(image, clone); + }); + this.Output.WriteLine(ex.Message); + } + } } [Theory] @@ -108,14 +128,18 @@ namespace SixLabors.ImageSharp.Tests public void VerifySimilarity_WhenAnImageFrameIsDifferent_Reports(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using Image clone = image.Clone(); - ImagingTestCaseUtility.ModifyPixel(clone.Frames[0], 42, 43, 1); + using (Image image = provider.GetImage()) + { + using (Image clone = image.Clone()) + { + ImagingTestCaseUtility.ModifyPixel(clone.Frames[0], 42, 43, 1); - IEnumerable reports = ImageComparer.Exact.CompareImages(image, clone); + IEnumerable reports = ImageComparer.Exact.CompareImages(image, clone); - PixelDifference difference = reports.Single().Differences.Single(); - Assert.Equal(new Point(42, 43), difference.Position); + PixelDifference difference = reports.Single().Differences.Single(); + Assert.Equal(new Point(42, 43), difference.Position); + } + } } [Theory] diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs index 4d7981fb03..e9843b2b72 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs @@ -39,15 +39,17 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests ImageComparer comparer = ImageComparer.Exact; - using var mImage = Image.Load(path, magickDecoder); - using var sdImage = Image.Load(path, sdDecoder); - ImageSimilarityReport report = comparer.CompareImagesOrFrames(mImage, sdImage); + using (var mImage = Image.Load(path, magickDecoder)) + using (var sdImage = Image.Load(path, sdDecoder)) + { + ImageSimilarityReport report = comparer.CompareImagesOrFrames(mImage, sdImage); - mImage.DebugSave(dummyProvider); + mImage.DebugSave(dummyProvider); - if (TestEnvironment.IsWindows) - { - Assert.True(report.IsEmpty); + if (TestEnvironment.IsWindows) + { + Assert.True(report.IsEmpty); + } } } @@ -68,15 +70,17 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests // 1020 == 4 * 255 (Equivalent to manhattan distance of 1+1+1+1=4 in Rgba32 space) var comparer = ImageComparer.TolerantPercentage(1, 1020); - using var mImage = Image.Load(path, magickDecoder); - using var sdImage = Image.Load(path, sdDecoder); - ImageSimilarityReport report = comparer.CompareImagesOrFrames(mImage, sdImage); + using (var mImage = Image.Load(path, magickDecoder)) + using (var sdImage = Image.Load(path, sdDecoder)) + { + ImageSimilarityReport report = comparer.CompareImagesOrFrames(mImage, sdImage); - mImage.DebugSave(dummyProvider); + mImage.DebugSave(dummyProvider); - if (TestEnvironment.IsWindows) - { - Assert.True(report.IsEmpty); + if (TestEnvironment.IsWindows) + { + Assert.True(report.IsEmpty); + } } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs index 98f02f6ebd..4a02d280e5 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs @@ -26,10 +26,14 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests public void To32bppArgbSystemDrawingBitmap(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using System.Drawing.Bitmap sdBitmap = SystemDrawingBridge.To32bppArgbSystemDrawingBitmap(image); - string fileName = provider.Utility.GetTestOutputFileName("png"); - sdBitmap.Save(fileName, System.Drawing.Imaging.ImageFormat.Png); + using (Image image = provider.GetImage()) + { + using (System.Drawing.Bitmap sdBitmap = SystemDrawingBridge.To32bppArgbSystemDrawingBitmap(image)) + { + string fileName = provider.Utility.GetTestOutputFileName("png"); + sdBitmap.Save(fileName, System.Drawing.Imaging.ImageFormat.Png); + } + } } [Theory] @@ -39,22 +43,28 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests { string path = TestFile.GetInputFileFullPath(TestImages.Png.Splash); - using var sdBitmap = new System.Drawing.Bitmap(path); - using Image image = SystemDrawingBridge.From32bppArgbSystemDrawingBitmap(sdBitmap); - image.DebugSave(dummyProvider); + using (var sdBitmap = new System.Drawing.Bitmap(path)) + { + using (Image image = SystemDrawingBridge.From32bppArgbSystemDrawingBitmap(sdBitmap)) + { + image.DebugSave(dummyProvider); + } + } } private static string SavePng(TestImageProvider provider, PngColorType pngColorType) where TPixel : struct, IPixel { - using Image sourceImage = provider.GetImage(); - if (pngColorType != PngColorType.RgbWithAlpha) + using (Image sourceImage = provider.GetImage()) { - sourceImage.Mutate(c => c.MakeOpaque()); - } + if (pngColorType != PngColorType.RgbWithAlpha) + { + sourceImage.Mutate(c => c.MakeOpaque()); + } - var encoder = new PngEncoder { ColorType = pngColorType }; - return provider.Utility.SaveTestOutputFile(sourceImage, "png", encoder); + var encoder = new PngEncoder { ColorType = pngColorType }; + return provider.Utility.SaveTestOutputFile(sourceImage, "png", encoder); + } } [Theory] @@ -69,11 +79,15 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests string path = SavePng(provider, PngColorType.RgbWithAlpha); - using var sdBitmap = new System.Drawing.Bitmap(path); - using Image original = provider.GetImage(); - using Image resaved = SystemDrawingBridge.From32bppArgbSystemDrawingBitmap(sdBitmap); - ImageComparer comparer = ImageComparer.Exact; - comparer.VerifySimilarity(original, resaved); + using (var sdBitmap = new System.Drawing.Bitmap(path)) + { + using (Image original = provider.GetImage()) + using (Image resaved = SystemDrawingBridge.From32bppArgbSystemDrawingBitmap(sdBitmap)) + { + ImageComparer comparer = ImageComparer.Exact; + comparer.VerifySimilarity(original, resaved); + } + } } [Theory] @@ -83,11 +97,17 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests { string path = SavePng(provider, PngColorType.Rgb); - using Image original = provider.GetImage(); - using var sdBitmap = new System.Drawing.Bitmap(path); - using Image resaved = SystemDrawingBridge.From24bppRgbSystemDrawingBitmap(sdBitmap); - ImageComparer comparer = ImageComparer.Exact; - comparer.VerifySimilarity(original, resaved); + using (Image original = provider.GetImage()) + { + using (var sdBitmap = new System.Drawing.Bitmap(path)) + { + using (Image resaved = SystemDrawingBridge.From24bppRgbSystemDrawingBitmap(sdBitmap)) + { + ImageComparer comparer = ImageComparer.Exact; + comparer.VerifySimilarity(original, resaved); + } + } + } } [Theory] @@ -96,8 +116,10 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests where TPixel : struct, IPixel { string path = TestFile.GetInputFileFullPath(TestImages.Png.Splash); - using var image = Image.Load(path, SystemDrawingReferenceDecoder.Instance); - image.DebugSave(dummyProvider); + using (var image = Image.Load(path, SystemDrawingReferenceDecoder.Instance)) + { + image.DebugSave(dummyProvider); + } } [Theory] @@ -105,8 +127,10 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests public void SaveWithReferenceEncoder(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - provider.Utility.SaveTestOutputFile(image, "png", SystemDrawingReferenceEncoder.Png); + using (Image image = provider.GetImage()) + { + provider.Utility.SaveTestOutputFile(image, "png", SystemDrawingReferenceEncoder.Png); + } } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs index e4043b4b5d..adb51e723f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs @@ -20,8 +20,10 @@ namespace SixLabors.ImageSharp.Tests TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.CompareToReferenceOutput(provider); + using (Image image = provider.GetImage()) + { + image.CompareToReferenceOutput(provider); + } } [Theory] @@ -30,8 +32,10 @@ namespace SixLabors.ImageSharp.Tests TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - Assert.ThrowsAny(() => image.CompareToReferenceOutput(provider)); + using (Image image = provider.GetImage()) + { + Assert.ThrowsAny(() => image.CompareToReferenceOutput(provider)); + } } [Theory] @@ -40,9 +44,11 @@ namespace SixLabors.ImageSharp.Tests TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - image.DebugSave(provider, appendPixelTypeToFileName: false); - image.CompareToReferenceOutput(provider, appendPixelTypeToFileName: false); + using (Image image = provider.GetImage()) + { + image.DebugSave(provider, appendPixelTypeToFileName: false); + image.CompareToReferenceOutput(provider, appendPixelTypeToFileName: false); + } } [Theory] @@ -50,8 +56,10 @@ namespace SixLabors.ImageSharp.Tests public void CompareToReferenceOutput_WhenReferenceFileMissing_Throws(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - Assert.ThrowsAny(() => image.CompareToReferenceOutput(provider)); + using (Image image = provider.GetImage()) + { + Assert.ThrowsAny(() => image.CompareToReferenceOutput(provider)); + } } [Theory] @@ -59,9 +67,13 @@ namespace SixLabors.ImageSharp.Tests public void CompareToOriginal_WhenSimilar(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - using Image clone = image.Clone(); - clone.CompareToOriginal(provider, ImageComparer.Exact); + using (Image image = provider.GetImage()) + { + using (Image clone = image.Clone()) + { + clone.CompareToOriginal(provider, ImageComparer.Exact); + } + } } [Theory] @@ -69,13 +81,15 @@ namespace SixLabors.ImageSharp.Tests public void CompareToOriginal_WhenDifferent_Throws(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - ImagingTestCaseUtility.ModifyPixel(image, 3, 1, 1); - - Assert.ThrowsAny(() => + using (Image image = provider.GetImage()) { - image.CompareToOriginal(provider, ImageComparer.Exact); - }); + ImagingTestCaseUtility.ModifyPixel(image, 3, 1, 1); + + Assert.ThrowsAny(() => + { + image.CompareToOriginal(provider, ImageComparer.Exact); + }); + } } [Theory] @@ -83,11 +97,13 @@ namespace SixLabors.ImageSharp.Tests public void CompareToOriginal_WhenInputIsNotFromFile_Throws(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - Assert.ThrowsAny(() => + using (Image image = provider.GetImage()) { - image.CompareToOriginal(provider, Mock.Of()); - }); + Assert.ThrowsAny(() => + { + image.CompareToOriginal(provider, Mock.Of()); + }); + } } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs index a33b0750b1..bcd5e844a8 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs @@ -179,14 +179,16 @@ namespace SixLabors.ImageSharp.Tests public void SaveTestOutputFileMultiFrame(TestImageProvider provider) where TPixel : struct, IPixel { - using Image image = provider.GetImage(); - string[] files = provider.Utility.SaveTestOutputFileMultiFrame(image); - - Assert.True(files.Length > 2); - foreach (string path in files) + using (Image image = provider.GetImage()) { - this.Output.WriteLine(path); - Assert.True(File.Exists(path)); + string[] files = provider.Utility.SaveTestOutputFileMultiFrame(image); + + Assert.True(files.Length > 2); + foreach (string path in files) + { + this.Output.WriteLine(path); + Assert.True(File.Exists(path)); + } } } @@ -197,8 +199,10 @@ namespace SixLabors.ImageSharp.Tests public void Use_WithBasicTestPatternImages(TestImageProvider provider) where TPixel : struct, IPixel { - using Image img = provider.GetImage(); - img.DebugSave(provider); + using (Image img = provider.GetImage()) + { + img.DebugSave(provider); + } } [Theory] @@ -234,13 +238,15 @@ namespace SixLabors.ImageSharp.Tests where TPixel : struct, IPixel { Assert.NotNull(provider.Utility.SourceFileOrDescription); - using Image img = provider.GetImage(); - Assert.True(img.Width * img.Height > 0); + using (Image img = provider.GetImage()) + { + Assert.True(img.Width * img.Height > 0); - Assert.Equal(123, yo); + Assert.Equal(123, yo); - string fn = provider.Utility.GetTestOutputFileName("jpg"); - this.Output.WriteLine(fn); + string fn = provider.Utility.GetTestOutputFileName("jpg"); + this.Output.WriteLine(fn); + } } [Theory] @@ -257,8 +263,10 @@ namespace SixLabors.ImageSharp.Tests where TPixel : struct, IPixel { Assert.NotNull(provider.Utility.SourceFileOrDescription); - using Image image = provider.GetImage(); - provider.Utility.SaveTestOutputFile(image, "png"); + using (Image image = provider.GetImage()) + { + provider.Utility.SaveTestOutputFile(image, "png"); + } } [Theory] @@ -326,10 +334,12 @@ namespace SixLabors.ImageSharp.Tests var customConfiguration = Configuration.CreateDefaultInstance(); provider.Configuration = customConfiguration; - using Image image2 = provider.GetImage(); - using Image image3 = provider.GetImage(); - Assert.Same(customConfiguration, image2.GetConfiguration()); - Assert.Same(customConfiguration, image3.GetConfiguration()); + using (Image image2 = provider.GetImage()) + using (Image image3 = provider.GetImage()) + { + Assert.Same(customConfiguration, image2.GetConfiguration()); + Assert.Same(customConfiguration, image3.GetConfiguration()); + } } }