Browse Source

Merge branch 'master' into pr/1632

pull/1632/head
James Jackson-South 5 years ago
parent
commit
17fcc89ae6
  1. 2
      src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
  2. 33
      src/ImageSharp/Formats/Tiff/Writers/TiffPaletteWriter{TPixel}.cs
  3. 9
      src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs
  4. 9
      src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs
  5. 44
      src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs
  6. 1
      src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs
  7. 1
      tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj
  8. 2
      tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs
  9. 6
      tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs
  10. 6
      tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs
  11. 6
      tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs
  12. 78
      tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs
  13. 42
      tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs
  14. 2
      tests/ImageSharp.Tests/Formats/Png/PngFilterTests.cs
  15. 37
      tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs
  16. 2
      tests/ImageSharp.Tests/Formats/Png/ReferenceImplementations.cs
  17. 23
      tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs
  18. 6
      tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs
  19. 102
      tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs
  20. 20
      tests/ImageSharp.Tests/Image/ImageTests.Identify.cs
  21. 15
      tests/ImageSharp.Tests/Image/ImageTests.Save.cs
  22. 27
      tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs
  23. 38
      tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs
  24. 23
      tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs
  25. 2
      tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs
  26. 2
      tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs
  27. 4
      tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs
  28. 17
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs
  29. 17
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs
  30. 9
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs
  31. 13
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs
  32. 25
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs
  33. 19
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs
  34. 71
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs
  35. 5
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs
  36. 17
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs
  37. 17
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs
  38. 17
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs
  39. 17
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs
  40. 17
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs
  41. 13
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs
  42. 23
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs
  43. 23
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs
  44. 71
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs
  45. 21
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs
  46. 3
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs
  47. 3
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs
  48. 3
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs
  49. 7
      tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs
  50. 6
      tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs
  51. 2
      tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs
  52. 6
      tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs
  53. 9
      tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs
  54. 1
      tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs
  55. 1
      tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs
  56. 5
      tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs
  57. 1
      tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs
  58. 5
      tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs
  59. 3
      tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs
  60. 2
      tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs
  61. 3
      tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs
  62. 2
      tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs
  63. 1
      tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs
  64. 3
      tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs
  65. 1
      tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs
  66. 3
      tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs
  67. 1
      tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs
  68. 8
      tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs
  69. 6
      tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs
  70. 1
      tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs
  71. 5
      tests/ImageSharp.Tests/Processing/Filters/HueTest.cs
  72. 3
      tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs
  73. 1
      tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs
  74. 3
      tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs
  75. 10
      tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs
  76. 7
      tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs
  77. 1
      tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs
  78. 5
      tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs
  79. 1
      tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs
  80. 2
      tests/ImageSharp.Tests/Processing/ImageOperationTests.cs
  81. 5
      tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs
  82. 2
      tests/ImageSharp.Tests/Processing/IntegralImageTests.cs
  83. 60
      tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs
  84. 3
      tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs
  85. 2
      tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs
  86. 1
      tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs
  87. 2
      tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs
  88. 1
      tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs
  89. 6
      tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs
  90. 1
      tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs
  91. 6
      tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs
  92. 4
      tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs
  93. 3
      tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs
  94. 1
      tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs
  95. 1
      tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs
  96. 1
      tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs
  97. 3
      tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs
  98. 11
      tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs
  99. 9
      tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs
  100. 11
      tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs

2
src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs

@ -202,7 +202,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
if (this.PlanarConfiguration == TiffPlanarConfiguration.Chunky) if (this.PlanarConfiguration == TiffPlanarConfiguration.Chunky)
{ {
DebugGuard.IsTrue(plane == -1, "Excepted Chunky planar."); DebugGuard.IsTrue(plane == -1, "Expected Chunky planar.");
bitsPerPixel = this.BitsPerPixel; bitsPerPixel = this.BitsPerPixel;
} }
else else

33
src/ImageSharp/Formats/Tiff/Writers/TiffPaletteWriter{TPixel}.cs

@ -55,23 +55,38 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Writers
/// <inheritdoc /> /// <inheritdoc />
protected override void EncodeStrip(int y, int height, TiffBaseCompressor compressor) protected override void EncodeStrip(int y, int height, TiffBaseCompressor compressor)
{ {
Span<byte> pixels = GetStripPixels(((IPixelSource)this.quantizedImage).PixelBuffer, y, height); Span<byte> indexedPixels = GetStripPixels(((IPixelSource)this.quantizedImage).PixelBuffer, y, height);
if (this.BitsPerPixel == 4) if (this.BitsPerPixel == 4)
{ {
using IMemoryOwner<byte> rows4bitBuffer = this.MemoryAllocator.Allocate<byte>(pixels.Length / 2); int width = this.Image.Width;
int halfWidth = width >> 1;
int excess = (width & 1) * height; // (width % 2) * height
int rows4BitBufferLength = (halfWidth * height) + excess;
using IMemoryOwner<byte> rows4bitBuffer = this.MemoryAllocator.Allocate<byte>(rows4BitBufferLength);
Span<byte> rows4bit = rows4bitBuffer.GetSpan(); Span<byte> rows4bit = rows4bitBuffer.GetSpan();
int idx = 0; int idxPixels = 0;
for (int i = 0; i < rows4bit.Length; i++) int idx4bitRows = 0;
for (int row = 0; row < height; row++)
{ {
rows4bit[i] = (byte)((pixels[idx] << 4) | (pixels[idx + 1] & 0xF)); for (int x = 0; x < halfWidth; x++)
idx += 2; {
rows4bit[idx4bitRows] = (byte)((indexedPixels[idxPixels] << 4) | (indexedPixels[idxPixels + 1] & 0xF));
idxPixels += 2;
idx4bitRows++;
}
// Make sure rows are byte-aligned.
if (width % 2 != 0)
{
rows4bit[idx4bitRows++] = (byte)(indexedPixels[idxPixels++] << 4);
}
} }
compressor.CompressStrip(rows4bit, height); compressor.CompressStrip(rows4bit.Slice(0, idx4bitRows), height);
} }
else else
{ {
compressor.CompressStrip(pixels, height); compressor.CompressStrip(indexedPixels, height);
} }
} }
@ -91,7 +106,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Writers
PixelOperations<TPixel>.Instance.ToRgb48(this.Configuration, quantizedColors, quantizedColorRgb48); PixelOperations<TPixel>.Instance.ToRgb48(this.Configuration, quantizedColors, quantizedColorRgb48);
// It can happen that the quantized colors are less than the expected maximum per channel. // It can happen that the quantized colors are less than the expected maximum per channel.
var diffToMaxColors = this.maxColors - quantizedColors.Length; int diffToMaxColors = this.maxColors - quantizedColors.Length;
// In a TIFF ColorMap, all the Red values come first, followed by the Green values, // In a TIFF ColorMap, all the Red values come first, followed by the Green values,
// then the Blue values. Convert the quantized palette to this format. // then the Blue values. Convert the quantized palette to this format.

9
src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs

@ -22,10 +22,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
bool clipHistogram, bool clipHistogram,
int clipLimit, int clipLimit,
int numberOfTiles) int numberOfTiles)
: base(luminanceLevels, clipHistogram, clipLimit) : base(luminanceLevels, clipHistogram, clipLimit) => this.NumberOfTiles = numberOfTiles;
{
this.NumberOfTiles = numberOfTiles;
}
/// <summary> /// <summary>
/// Gets the number of tiles the image is split into (horizontal and vertically) for the adaptive histogram equalization. /// Gets the number of tiles the image is split into (horizontal and vertically) for the adaptive histogram equalization.
@ -34,8 +31,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// <inheritdoc /> /// <inheritdoc />
public override IImageProcessor<TPixel> CreatePixelSpecificProcessor<TPixel>(Configuration configuration, Image<TPixel> source, Rectangle sourceRectangle) public override IImageProcessor<TPixel> CreatePixelSpecificProcessor<TPixel>(Configuration configuration, Image<TPixel> source, Rectangle sourceRectangle)
{ => new AdaptiveHistogramEqualizationProcessor<TPixel>(
return new AdaptiveHistogramEqualizationProcessor<TPixel>(
configuration, configuration,
this.LuminanceLevels, this.LuminanceLevels,
this.ClipHistogram, this.ClipHistogram,
@ -43,6 +39,5 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
this.NumberOfTiles, this.NumberOfTiles,
source, source,
sourceRectangle); sourceRectangle);
}
} }
} }

9
src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs

@ -459,10 +459,14 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
private readonly Configuration configuration; private readonly Configuration configuration;
private readonly MemoryAllocator memoryAllocator; private readonly MemoryAllocator memoryAllocator;
// Used for storing the minimum value for each CDF entry. /// <summary>
/// Used for storing the minimum value for each CDF entry.
/// </summary>
private readonly Buffer2D<int> cdfMinBuffer2D; private readonly Buffer2D<int> cdfMinBuffer2D;
// Used for storing the LUT for each CDF entry. /// <summary>
/// Used for storing the LUT for each CDF entry.
/// </summary>
private readonly Buffer2D<int> cdfLutBuffer2D; private readonly Buffer2D<int> cdfLutBuffer2D;
private readonly int pixelsInTile; private readonly int pixelsInTile;
private readonly int sourceWidth; private readonly int sourceWidth;
@ -596,6 +600,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
int y = this.tileYStartPositions[index].y; int y = this.tileYStartPositions[index].y;
int endY = Math.Min(y + this.tileHeight, this.sourceHeight); int endY = Math.Min(y + this.tileHeight, this.sourceHeight);
Span<int> cdfMinSpan = this.cdfMinBuffer2D.GetRowSpan(cdfY); Span<int> cdfMinSpan = this.cdfMinBuffer2D.GetRowSpan(cdfY);
cdfMinSpan.Clear();
using IMemoryOwner<int> histogramBuffer = this.allocator.Allocate<int>(this.luminanceLevels); using IMemoryOwner<int> histogramBuffer = this.allocator.Allocate<int>(this.luminanceLevels);
Span<int> histogram = histogramBuffer.GetSpan(); Span<int> histogram = histogramBuffer.GetSpan();

44
src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs

@ -49,44 +49,18 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// </summary> /// </summary>
/// <param name="options">The <see cref="HistogramEqualizationOptions"/>.</param> /// <param name="options">The <see cref="HistogramEqualizationOptions"/>.</param>
/// <returns>The <see cref="HistogramEqualizationProcessor"/>.</returns> /// <returns>The <see cref="HistogramEqualizationProcessor"/>.</returns>
public static HistogramEqualizationProcessor FromOptions(HistogramEqualizationOptions options) public static HistogramEqualizationProcessor FromOptions(HistogramEqualizationOptions options) => options.Method switch
{ {
HistogramEqualizationProcessor processor; HistogramEqualizationMethod.Global
=> new GlobalHistogramEqualizationProcessor(options.LuminanceLevels, options.ClipHistogram, options.ClipLimit),
switch (options.Method) HistogramEqualizationMethod.AdaptiveTileInterpolation
{ => new AdaptiveHistogramEqualizationProcessor(options.LuminanceLevels, options.ClipHistogram, options.ClipLimit, options.NumberOfTiles),
case HistogramEqualizationMethod.Global:
processor = new GlobalHistogramEqualizationProcessor(
options.LuminanceLevels,
options.ClipHistogram,
options.ClipLimit);
break;
case HistogramEqualizationMethod.AdaptiveTileInterpolation: HistogramEqualizationMethod.AdaptiveSlidingWindow
processor = new AdaptiveHistogramEqualizationProcessor( => new AdaptiveHistogramEqualizationSlidingWindowProcessor(options.LuminanceLevels, options.ClipHistogram, options.ClipLimit, options.NumberOfTiles),
options.LuminanceLevels,
options.ClipHistogram,
options.ClipLimit,
options.NumberOfTiles);
break;
case HistogramEqualizationMethod.AdaptiveSlidingWindow: _ => new GlobalHistogramEqualizationProcessor(options.LuminanceLevels, options.ClipHistogram, options.ClipLimit),
processor = new AdaptiveHistogramEqualizationSlidingWindowProcessor( };
options.LuminanceLevels,
options.ClipHistogram,
options.ClipLimit,
options.NumberOfTiles);
break;
default:
processor = new GlobalHistogramEqualizationProcessor(
options.LuminanceLevels,
options.ClipHistogram,
options.ClipLimit);
break;
}
return processor;
}
} }
} }

1
src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs

@ -142,6 +142,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
public static int GetLuminance(TPixel sourcePixel, int luminanceLevels) public static int GetLuminance(TPixel sourcePixel, int luminanceLevels)
{ {
// TODO: We need a bulk per span equivalent.
var vector = sourcePixel.ToVector4(); var vector = sourcePixel.ToVector4();
return ColorNumerics.GetBT709Luminance(ref vector, luminanceLevels); return ColorNumerics.GetBT709Luminance(ref vector, luminanceLevels);
} }

1
tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj

@ -13,6 +13,7 @@
<IsTestProject>false</IsTestProject> <IsTestProject>false</IsTestProject>
<EnsureNETCoreAppRuntime>false</EnsureNETCoreAppRuntime> <EnsureNETCoreAppRuntime>false</EnsureNETCoreAppRuntime>
<Configurations>Debug;Release;Release-InnerLoop;Debug-InnerLoop</Configurations> <Configurations>Debug;Release;Release-InnerLoop;Debug-InnerLoop</Configurations>
<ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
</PropertyGroup> </PropertyGroup>
<Choose> <Choose>

2
tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs

@ -176,7 +176,7 @@ namespace SixLabors.ImageSharp.Tests.Formats
using (var image2 = Image.Load<Rgba32>(serialized)) using (var image2 = Image.Load<Rgba32>(serialized))
{ {
image2.Save($"{path}/{file.FileName}"); image2.Save($"{path}{Path.DirectorySeparatorChar}{file.FileName}");
} }
} }
} }

6
tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs

@ -1,11 +1,11 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Formats.Gif;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Formats.Gif namespace SixLabors.ImageSharp.Tests.Formats.Gif.Sections
{ {
public class GifGraphicControlExtensionTests public class GifGraphicControlExtensionTests
{ {
@ -18,4 +18,4 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
Assert.Equal(14, GifGraphicControlExtension.GetPackedValue(GifDisposalMethod.RestoreToPrevious, true, false)); Assert.Equal(14, GifGraphicControlExtension.GetPackedValue(GifDisposalMethod.RestoreToPrevious, true, false));
} }
} }
} }

6
tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs

@ -1,11 +1,11 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Formats.Gif;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Formats.Gif namespace SixLabors.ImageSharp.Tests.Formats.Gif.Sections
{ {
public class GifImageDescriptorTests public class GifImageDescriptorTests
{ {
@ -21,4 +21,4 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
Assert.Equal(232, GifImageDescriptor.GetPackedValue(true, true, true, 8)); Assert.Equal(232, GifImageDescriptor.GetPackedValue(true, true, true, 8));
} }
} }
} }

6
tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs

@ -1,11 +1,11 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Formats.Gif;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Formats.Gif namespace SixLabors.ImageSharp.Tests.Formats.Gif.Sections
{ {
public class GifLogicalScreenDescriptorTests public class GifLogicalScreenDescriptorTests
{ {
@ -20,4 +20,4 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
Assert.Equal(55, GifLogicalScreenDescriptor.GetPackedValue(false, 3, false, 7)); Assert.Equal(55, GifLogicalScreenDescriptor.GetPackedValue(false, 3, false, 7));
} }
} }
} }

78
tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs

@ -12,6 +12,7 @@ using SixLabors.ImageSharp.IO;
using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils; using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils;
using SixLabors.ImageSharp.Tests.TestUtilities;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit; using Xunit;
@ -117,7 +118,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
[Theory] [Theory]
[WithFile(TestImages.Jpeg.Baseline.Floorplan, PixelTypes.Rgba32)] [WithFile(TestImages.Jpeg.Baseline.Floorplan, PixelTypes.Rgba32)]
[WithFile(TestImages.Jpeg.Progressive.Festzug, PixelTypes.Rgba32)] [WithFile(TestImages.Jpeg.Progressive.Festzug, PixelTypes.Rgba32)]
public async Task DecodeAsnc_DegenerateMemoryRequest_ShouldTranslateTo_ImageFormatException<TPixel>(TestImageProvider<TPixel> provider) public async Task DecodeAsync_DegenerateMemoryRequest_ShouldTranslateTo_ImageFormatException<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> where TPixel : unmanaged, IPixel<TPixel>
{ {
provider.LimitAllocatorBufferCapacity().InBytesSqrt(10); provider.LimitAllocatorBufferCapacity().InBytesSqrt(10);
@ -127,60 +128,53 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
} }
[Theory] [Theory]
[InlineData(TestImages.Jpeg.Baseline.Jpeg420Small, 0)] [InlineData(0)]
[InlineData(TestImages.Jpeg.Issues.ExifGetString750Transform, 1)] [InlineData(0.5)]
[InlineData(TestImages.Jpeg.Issues.ExifGetString750Transform, 15)] [InlineData(0.9)]
[InlineData(TestImages.Jpeg.Issues.ExifGetString750Transform, 30)] public async Task Decode_IsCancellable(int percentageOfStreamReadToCancel)
[InlineData(TestImages.Jpeg.Issues.BadRstProgressive518, 1)]
[InlineData(TestImages.Jpeg.Issues.BadRstProgressive518, 15)]
[InlineData(TestImages.Jpeg.Issues.BadRstProgressive518, 30)]
public async Task Decode_IsCancellable(string fileName, int cancellationDelayMs)
{ {
// Decoding these huge files took 300ms on i7-8650U in 2020. 30ms should be safe for cancellation delay. var cts = new CancellationTokenSource();
string hugeFile = Path.Combine( var file = Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, TestImages.Jpeg.Baseline.Jpeg420Small);
TestEnvironment.InputImagesDirectoryFullPath, using var pausedStream = new PausedStream(file);
fileName); pausedStream.OnWaiting(s =>
const int NumberOfRuns = 5;
for (int i = 0; i < NumberOfRuns; i++)
{ {
var cts = new CancellationTokenSource(); if (s.Position >= s.Length * percentageOfStreamReadToCancel)
if (cancellationDelayMs == 0)
{ {
cts.Cancel(); cts.Cancel();
pausedStream.Release();
} }
else else
{ {
cts.CancelAfter(cancellationDelayMs); // allows this/next wait to unblock
} pausedStream.Next();
try
{
using var image = await Image.LoadAsync(hugeFile, cts.Token);
}
catch (TaskCanceledException)
{
// Succesfully observed a cancellation
return;
} }
} });
throw new Exception($"No cancellation happened out of {NumberOfRuns} runs!"); var config = Configuration.CreateDefaultInstance();
config.FileSystem = new SingleStreamFileSystem(pausedStream);
await Assert.ThrowsAsync<TaskCanceledException>(async () =>
{
using Image image = await Image.LoadAsync(config, "someFakeFile", cts.Token);
});
} }
[Theory(Skip = "Identify is too fast, doesn't work reliably.")] [Fact]
[InlineData(TestImages.Jpeg.Baseline.Exif)] public async Task Identify_IsCancellable()
[InlineData(TestImages.Jpeg.Progressive.Bad.ExifUndefType)]
public async Task Identify_IsCancellable(string fileName)
{ {
string file = Path.Combine(
TestEnvironment.InputImagesDirectoryFullPath,
fileName);
var cts = new CancellationTokenSource(); var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromTicks(1));
await Assert.ThrowsAsync<TaskCanceledException>(() => Image.IdentifyAsync(file, cts.Token)); var file = Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, TestImages.Jpeg.Baseline.Jpeg420Small);
using var pausedStream = new PausedStream(file);
pausedStream.OnWaiting(s =>
{
cts.Cancel();
pausedStream.Release();
});
var config = Configuration.CreateDefaultInstance();
config.FileSystem = new SingleStreamFileSystem(pausedStream);
await Assert.ThrowsAsync<TaskCanceledException>(async () => await Image.IdentifyAsync(config, "someFakeFile", cts.Token));
} }
// DEBUG ONLY! // DEBUG ONLY!

42
tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs

@ -13,6 +13,7 @@ using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using SixLabors.ImageSharp.Metadata.Profiles.Iptc; using SixLabors.ImageSharp.Metadata.Profiles.Iptc;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit; using Xunit;
@ -310,28 +311,33 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
} }
[Theory] [Theory]
[InlineData(JpegSubsample.Ratio420, 0)] [InlineData(JpegSubsample.Ratio420)]
[InlineData(JpegSubsample.Ratio420, 3)] [InlineData(JpegSubsample.Ratio444)]
[InlineData(JpegSubsample.Ratio420, 10)] public async Task Encode_IsCancellable(JpegSubsample subsample)
[InlineData(JpegSubsample.Ratio444, 0)]
[InlineData(JpegSubsample.Ratio444, 3)]
[InlineData(JpegSubsample.Ratio444, 10)]
public async Task Encode_IsCancellable(JpegSubsample subsample, int cancellationDelayMs)
{ {
using var image = new Image<Rgba32>(5000, 5000);
using var stream = new MemoryStream();
var cts = new CancellationTokenSource(); var cts = new CancellationTokenSource();
if (cancellationDelayMs == 0) using var pausedStream = new PausedStream(new MemoryStream());
{ pausedStream.OnWaiting(s =>
cts.Cancel();
}
else
{ {
cts.CancelAfter(cancellationDelayMs); // after some writing
} if (s.Position >= 500)
{
cts.Cancel();
pausedStream.Release();
}
else
{
// allows this/next wait to unblock
pausedStream.Next();
}
});
var encoder = new JpegEncoder() { Subsample = subsample }; using var image = new Image<Rgba32>(5000, 5000);
await Assert.ThrowsAsync<TaskCanceledException>(() => image.SaveAsync(stream, encoder, cts.Token)); await Assert.ThrowsAsync<TaskCanceledException>(async () =>
{
var encoder = new JpegEncoder() { Subsample = subsample };
await image.SaveAsync(pausedStream, encoder, cts.Token);
});
} }
} }
} }

2
tests/ImageSharp.Tests/Formats/Png/PngFilterTests.cs

@ -7,7 +7,6 @@ using System;
using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.Formats.Png.Filters; using SixLabors.ImageSharp.Formats.Png.Filters;
using SixLabors.ImageSharp.Tests.Formats.Png.Utils;
using SixLabors.ImageSharp.Tests.TestUtilities; using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
@ -142,7 +141,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png
HwIntrinsics.DisableSIMD); HwIntrinsics.DisableSIMD);
} }
[Fact] [Fact]
public void UpAvx2() public void UpAvx2()
{ {

37
tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs

@ -90,12 +90,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png
using (Image<TPixel> image = provider.GetImage(new PngDecoder())) using (Image<TPixel> image = provider.GetImage(new PngDecoder()))
{ {
PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance);
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("leading space")); Assert.DoesNotContain(meta.TextData, m => m.Value is "leading space");
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("trailing space")); Assert.DoesNotContain(meta.TextData, m => m.Value is "trailing space");
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("space")); Assert.DoesNotContain(meta.TextData, m => m.Value is "space");
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("empty")); Assert.DoesNotContain(meta.TextData, m => m.Value is "empty");
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("invalid characters")); Assert.DoesNotContain(meta.TextData, m => m.Value is "invalid characters");
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("too large")); Assert.DoesNotContain(meta.TextData, m => m.Value is "too large");
} }
} }
@ -277,20 +277,17 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png
private static void VerifyTextDataIsPresent(PngMetadata meta) private static void VerifyTextDataIsPresent(PngMetadata meta)
{ {
Assert.NotNull(meta); Assert.NotNull(meta);
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment")); Assert.Contains(meta.TextData, m => m.Keyword is "Comment" && m.Value is "comment");
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp")); Assert.Contains(meta.TextData, m => m.Keyword is "Author" && m.Value is "ImageSharp");
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp")); Assert.Contains(meta.TextData, m => m.Keyword is "Copyright" && m.Value is "ImageSharp");
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest")); Assert.Contains(meta.TextData, m => m.Keyword is "Title" && m.Value is "unittest");
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text")); Assert.Contains(meta.TextData, m => m.Keyword is "Description" && m.Value is "compressed-text");
Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") && Assert.Contains(meta.TextData, m => m.Keyword is "International" && m.Value is "'e', mu'tlheghvam, ghaH yu'" && m.LanguageTag is "x-klingon" && m.TranslatedKeyword is "warning");
m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning")); Assert.Contains(meta.TextData, m => m.Keyword is "International2" && m.Value is "ИМАГЕШАРП" && m.LanguageTag is "rus");
Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus")); Assert.Contains(meta.TextData, m => m.Keyword is "CompressedInternational" && m.Value is "la plume de la mante" && m.LanguageTag is "fra" && m.TranslatedKeyword is "foobar");
Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") && Assert.Contains(meta.TextData, m => m.Keyword is "CompressedInternational2" && m.Value is "這是一個考驗" && m.LanguageTag is "chinese");
m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar")); Assert.Contains(meta.TextData, m => m.Keyword is "NoLang" && m.Value is "this text chunk is missing a language tag");
Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") && Assert.Contains(meta.TextData, m => m.Keyword is "NoTranslatedKeyword" && m.Value is "dieser chunk hat kein übersetztes Schlüßelwort");
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"));
} }
} }
} }

2
tests/ImageSharp.Tests/Formats/Png/ReferenceImplementations.cs

@ -6,7 +6,7 @@ using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests.Formats.Png.Utils namespace SixLabors.ImageSharp.Tests.Formats.Png
{ {
/// <summary> /// <summary>
/// This class contains reference implementations to produce verification data for unit tests /// This class contains reference implementations to produce verification data for unit tests

23
tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs

@ -4,7 +4,7 @@
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
using System; using System;
using System.IO; using System.IO;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Tiff; using SixLabors.ImageSharp.Formats.Tiff;
using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.Metadata;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
@ -37,6 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[InlineData(RgbUncompressed, 24, 256, 256, 300, 300, PixelResolutionUnit.PixelsPerInch)] [InlineData(RgbUncompressed, 24, 256, 256, 300, 300, PixelResolutionUnit.PixelsPerInch)]
[InlineData(SmallRgbDeflate, 24, 32, 32, 96, 96, PixelResolutionUnit.PixelsPerInch)] [InlineData(SmallRgbDeflate, 24, 32, 32, 96, 96, PixelResolutionUnit.PixelsPerInch)]
[InlineData(Calliphora_GrayscaleUncompressed, 8, 804, 1198, 96, 96, PixelResolutionUnit.PixelsPerInch)] [InlineData(Calliphora_GrayscaleUncompressed, 8, 804, 1198, 96, 96, PixelResolutionUnit.PixelsPerInch)]
[InlineData(Flower4BitPalette, 4, 73, 43, 72, 72, PixelResolutionUnit.PixelsPerInch)]
public void Identify(string imagePath, int expectedPixelSize, int expectedWidth, int expectedHeight, double expectedHResolution, double expectedVResolution, PixelResolutionUnit expectedResolutionUnit) public void Identify(string imagePath, int expectedPixelSize, int expectedWidth, int expectedHeight, double expectedHResolution, double expectedVResolution, PixelResolutionUnit expectedResolutionUnit)
{ {
var testFile = TestFile.Create(imagePath); var testFile = TestFile.Create(imagePath);
@ -91,6 +92,19 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
public void TiffDecoder_CanDecode_WithPalette<TPixel>(TestImageProvider<TPixel> provider) public void TiffDecoder_CanDecode_WithPalette<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> => TestTiffDecoder(provider); where TPixel : unmanaged, IPixel<TPixel> => TestTiffDecoder(provider);
[Theory]
[WithFile(Rgb4BitPalette, PixelTypes.Rgba32)]
[WithFile(Flower4BitPalette, PixelTypes.Rgba32)]
[WithFile(Flower4BitPaletteGray, PixelTypes.Rgba32)]
public void TiffDecoder_CanDecode_4Bit_WithPalette<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel>
{
if (TestEnvironment.IsWindows)
{
TestTiffDecoder(provider, new SystemDrawingReferenceDecoder(), useExactComparer: false, 0.01f);
}
}
[Theory] [Theory]
[WithFile(GrayscaleDeflateMultistrip, PixelTypes.Rgba32)] [WithFile(GrayscaleDeflateMultistrip, PixelTypes.Rgba32)]
[WithFile(RgbDeflateMultistrip, PixelTypes.Rgba32)] [WithFile(RgbDeflateMultistrip, PixelTypes.Rgba32)]
@ -155,12 +169,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
image.CompareToOriginalMultiFrame(provider, ImageComparer.Exact, ReferenceDecoder); image.CompareToOriginalMultiFrame(provider, ImageComparer.Exact, ReferenceDecoder);
} }
private static void TestTiffDecoder<TPixel>(TestImageProvider<TPixel> provider) private static void TestTiffDecoder<TPixel>(TestImageProvider<TPixel> provider, IImageDecoder referenceDecoder = null, bool useExactComparer = true, float compareTolerance = 0.001f)
where TPixel : unmanaged, IPixel<TPixel> where TPixel : unmanaged, IPixel<TPixel>
{ {
using Image<TPixel> image = provider.GetImage(TiffDecoder); using Image<TPixel> image = provider.GetImage(TiffDecoder);
image.DebugSave(provider); image.DebugSave(provider);
image.CompareToOriginal(provider, ImageComparer.Exact, ReferenceDecoder); image.CompareToOriginal(
provider,
useExactComparer ? ImageComparer.Exact : ImageComparer.Tolerant(compareTolerance),
referenceDecoder ?? ReferenceDecoder);
} }
} }
} }

6
tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs

@ -296,10 +296,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[Theory] [Theory]
[WithFile(Rgb4BitPalette, PixelTypes.Rgba32)] [WithFile(Rgb4BitPalette, PixelTypes.Rgba32)]
[WithFile(Flower4BitPalette, PixelTypes.Rgba32)]
[WithFile(Flower4BitPaletteGray, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeColorPalette_With4Bit_Works<TPixel>(TestImageProvider<TPixel> provider) public void TiffEncoder_EncodeColorPalette_With4Bit_Works<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> => where TPixel : unmanaged, IPixel<TPixel> =>
//// Note: The magick reference decoder does not support 4 bit tiff's, so we use our TIFF decoder instead. //// Note: The magick reference decoder does not support 4 bit tiff's, so we use our TIFF decoder instead.
TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit4, TiffPhotometricInterpretation.PaletteColor, useExactComparer: false, compareTolerance: 0.001f, imageDecoder: new TiffDecoder()); TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit4, TiffPhotometricInterpretation.PaletteColor, useExactComparer: false, compareTolerance: 0.003f, imageDecoder: new TiffDecoder());
[Theory] [Theory]
[WithFile(Calliphora_PaletteUncompressed, PixelTypes.Rgba32)] [WithFile(Calliphora_PaletteUncompressed, PixelTypes.Rgba32)]
@ -460,7 +462,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
TiffCompression compression = TiffCompression.None, TiffCompression compression = TiffCompression.None,
TiffPredictor predictor = TiffPredictor.None, TiffPredictor predictor = TiffPredictor.None,
bool useExactComparer = true, bool useExactComparer = true,
float compareTolerance = 0.01f, float compareTolerance = 0.001f,
IImageDecoder imageDecoder = null) IImageDecoder imageDecoder = null)
where TPixel : unmanaged, IPixel<TPixel> where TPixel : unmanaged, IPixel<TPixel>
{ {

102
tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs

@ -28,7 +28,8 @@ namespace SixLabors.ImageSharp.Tests
ArgumentException ex = Assert.Throws<ArgumentException>( ArgumentException ex = Assert.Throws<ArgumentException>(
() => () =>
{ {
this.Collection.AddFrame(new ImageFrame<Rgba32>(Configuration.Default, 1, 1)); using var frame = new ImageFrame<Rgba32>(Configuration.Default, 1, 1);
using ImageFrame<Rgba32> addedFrame = this.Collection.AddFrame(frame);
}); });
Assert.StartsWith("Frame must have the same dimensions as the image.", ex.Message); Assert.StartsWith("Frame must have the same dimensions as the image.", ex.Message);
@ -40,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests
ArgumentNullException ex = Assert.Throws<ArgumentNullException>( ArgumentNullException ex = Assert.Throws<ArgumentNullException>(
() => () =>
{ {
this.Collection.AddFrame((ImageFrame<Rgba32>)null); using ImageFrame<Rgba32> addedFrame = this.Collection.AddFrame((ImageFrame<Rgba32>)null);
}); });
Assert.StartsWith("Parameter \"frame\" must be not null.", ex.Message); Assert.StartsWith("Parameter \"frame\" must be not null.", ex.Message);
@ -54,7 +55,7 @@ namespace SixLabors.ImageSharp.Tests
ArgumentNullException ex = Assert.Throws<ArgumentNullException>( ArgumentNullException ex = Assert.Throws<ArgumentNullException>(
() => () =>
{ {
this.Collection.AddFrame(data); using ImageFrame<Rgba32> addedFrame = this.Collection.AddFrame(data);
}); });
Assert.StartsWith("Parameter \"source\" must be not null.", ex.Message); Assert.StartsWith("Parameter \"source\" must be not null.", ex.Message);
@ -66,7 +67,7 @@ namespace SixLabors.ImageSharp.Tests
ArgumentOutOfRangeException ex = Assert.Throws<ArgumentOutOfRangeException>( ArgumentOutOfRangeException ex = Assert.Throws<ArgumentOutOfRangeException>(
() => () =>
{ {
this.Collection.AddFrame(new Rgba32[0]); using ImageFrame<Rgba32> addedFrame = this.Collection.AddFrame(Array.Empty<Rgba32>());
}); });
Assert.StartsWith($"Parameter \"data\" ({typeof(int)}) must be greater than or equal to {100}, was {0}", ex.Message); Assert.StartsWith($"Parameter \"data\" ({typeof(int)}) must be greater than or equal to {100}, was {0}", ex.Message);
@ -78,7 +79,8 @@ namespace SixLabors.ImageSharp.Tests
ArgumentException ex = Assert.Throws<ArgumentException>( ArgumentException ex = Assert.Throws<ArgumentException>(
() => () =>
{ {
this.Collection.InsertFrame(1, new ImageFrame<Rgba32>(Configuration.Default, 1, 1)); using var frame = new ImageFrame<Rgba32>(Configuration.Default, 1, 1);
using ImageFrame<Rgba32> insertedFrame = this.Collection.InsertFrame(1, frame);
}); });
Assert.StartsWith("Frame must have the same dimensions as the image.", ex.Message); Assert.StartsWith("Frame must have the same dimensions as the image.", ex.Message);
@ -90,7 +92,7 @@ namespace SixLabors.ImageSharp.Tests
ArgumentNullException ex = Assert.Throws<ArgumentNullException>( ArgumentNullException ex = Assert.Throws<ArgumentNullException>(
() => () =>
{ {
this.Collection.InsertFrame(1, null); using ImageFrame<Rgba32> insertedFrame = this.Collection.InsertFrame(1, null);
}); });
Assert.StartsWith("Parameter \"frame\" must be not null.", ex.Message); Assert.StartsWith("Parameter \"frame\" must be not null.", ex.Message);
@ -102,9 +104,11 @@ namespace SixLabors.ImageSharp.Tests
ArgumentException ex = Assert.Throws<ArgumentException>( ArgumentException ex = Assert.Throws<ArgumentException>(
() => () =>
{ {
using var imageFrame1 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using var imageFrame2 = new ImageFrame<Rgba32>(Configuration.Default, 1, 1);
new ImageFrameCollection<Rgba32>( new ImageFrameCollection<Rgba32>(
this.Image, this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10), new ImageFrame<Rgba32>(Configuration.Default, 1, 1) }); new[] { imageFrame1, imageFrame2 });
}); });
Assert.StartsWith("Frame must have the same dimensions as the image.", ex.Message); Assert.StartsWith("Frame must have the same dimensions as the image.", ex.Message);
@ -113,24 +117,24 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void RemoveAtFrame_ThrowIfRemovingLastFrame() public void RemoveAtFrame_ThrowIfRemovingLastFrame()
{ {
using var imageFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
var collection = new ImageFrameCollection<Rgba32>( var collection = new ImageFrameCollection<Rgba32>(
this.Image, this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10) }); new[] { imageFrame });
InvalidOperationException ex = Assert.Throws<InvalidOperationException>( InvalidOperationException ex = Assert.Throws<InvalidOperationException>(
() => () => collection.RemoveFrame(0));
{
collection.RemoveFrame(0);
});
Assert.Equal("Cannot remove last frame.", ex.Message); Assert.Equal("Cannot remove last frame.", ex.Message);
} }
[Fact] [Fact]
public void RemoveAtFrame_CanRemoveFrameZeroIfMultipleFramesExist() public void RemoveAtFrame_CanRemoveFrameZeroIfMultipleFramesExist()
{ {
using var imageFrame1 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using var imageFrame2 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
var collection = new ImageFrameCollection<Rgba32>( var collection = new ImageFrameCollection<Rgba32>(
this.Image, this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10), new ImageFrame<Rgba32>(Configuration.Default, 10, 10) }); new[] { imageFrame1, imageFrame2 });
collection.RemoveFrame(0); collection.RemoveFrame(0);
Assert.Equal(1, collection.Count); Assert.Equal(1, collection.Count);
@ -139,9 +143,11 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void RootFrameIsFrameAtIndexZero() public void RootFrameIsFrameAtIndexZero()
{ {
using var imageFrame1 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using var imageFrame2 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
var collection = new ImageFrameCollection<Rgba32>( var collection = new ImageFrameCollection<Rgba32>(
this.Image, this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10), new ImageFrame<Rgba32>(Configuration.Default, 10, 10) }); new[] { imageFrame1, imageFrame2 });
Assert.Equal(collection.RootFrame, collection[0]); Assert.Equal(collection.RootFrame, collection[0]);
} }
@ -149,9 +155,11 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void ConstructorPopulatesFrames() public void ConstructorPopulatesFrames()
{ {
using var imageFrame1 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using var imageFrame2 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
var collection = new ImageFrameCollection<Rgba32>( var collection = new ImageFrameCollection<Rgba32>(
this.Image, this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10), new ImageFrame<Rgba32>(Configuration.Default, 10, 10) }); new[] { imageFrame1, imageFrame2 });
Assert.Equal(2, collection.Count); Assert.Equal(2, collection.Count);
} }
@ -159,9 +167,11 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void DisposeClearsCollection() public void DisposeClearsCollection()
{ {
using var imageFrame1 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using var imageFrame2 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
var collection = new ImageFrameCollection<Rgba32>( var collection = new ImageFrameCollection<Rgba32>(
this.Image, this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10), new ImageFrame<Rgba32>(Configuration.Default, 10, 10) }); new[] { imageFrame1, imageFrame2 });
collection.Dispose(); collection.Dispose();
@ -171,9 +181,11 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void Dispose_DisposesAllInnerFrames() public void Dispose_DisposesAllInnerFrames()
{ {
using var imageFrame1 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using var imageFrame2 = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
var collection = new ImageFrameCollection<Rgba32>( var collection = new ImageFrameCollection<Rgba32>(
this.Image, this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10), new ImageFrame<Rgba32>(Configuration.Default, 10, 10) }); new[] { imageFrame1, imageFrame2 });
IPixelSource<Rgba32>[] framesSnapShot = collection.OfType<IPixelSource<Rgba32>>().ToArray(); IPixelSource<Rgba32>[] framesSnapShot = collection.OfType<IPixelSource<Rgba32>>().ToArray();
collection.Dispose(); collection.Dispose();
@ -194,7 +206,8 @@ namespace SixLabors.ImageSharp.Tests
{ {
using (Image<TPixel> img = provider.GetImage()) using (Image<TPixel> img = provider.GetImage())
{ {
img.Frames.AddFrame(new ImageFrame<TPixel>(Configuration.Default, 10, 10)); // add a frame anyway using var imageFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using ImageFrame addedFrame = img.Frames.AddFrame(imageFrame); // add a frame anyway
using (Image<TPixel> cloned = img.Frames.CloneFrame(0)) using (Image<TPixel> cloned = img.Frames.CloneFrame(0))
{ {
Assert.Equal(2, img.Frames.Count); Assert.Equal(2, img.Frames.Count);
@ -215,7 +228,8 @@ namespace SixLabors.ImageSharp.Tests
Assert.True(img.TryGetSinglePixelSpan(out Span<TPixel> imgSpan)); Assert.True(img.TryGetSinglePixelSpan(out Span<TPixel> imgSpan));
TPixel[] sourcePixelData = imgSpan.ToArray(); TPixel[] sourcePixelData = imgSpan.ToArray();
img.Frames.AddFrame(new ImageFrame<TPixel>(Configuration.Default, 10, 10)); using var imageFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using ImageFrame addedFrame = img.Frames.AddFrame(imageFrame);
using (Image<TPixel> cloned = img.Frames.ExportFrame(0)) using (Image<TPixel> cloned = img.Frames.ExportFrame(0))
{ {
Assert.Equal(1, img.Frames.Count); Assert.Equal(1, img.Frames.Count);
@ -227,35 +241,37 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void CreateFrame_Default() public void CreateFrame_Default()
{ {
this.Image.Frames.CreateFrame(); using (this.Image.Frames.CreateFrame())
{
Assert.Equal(2, this.Image.Frames.Count); Assert.Equal(2, this.Image.Frames.Count);
this.Image.Frames[1].ComparePixelBufferTo(default(Rgba32)); this.Image.Frames[1].ComparePixelBufferTo(default(Rgba32));
}
} }
[Fact] [Fact]
public void CreateFrame_CustomFillColor() public void CreateFrame_CustomFillColor()
{ {
this.Image.Frames.CreateFrame(Color.HotPink); using (this.Image.Frames.CreateFrame(Color.HotPink))
{
Assert.Equal(2, this.Image.Frames.Count); Assert.Equal(2, this.Image.Frames.Count);
this.Image.Frames[1].ComparePixelBufferTo(Color.HotPink); this.Image.Frames[1].ComparePixelBufferTo(Color.HotPink);
}
} }
[Fact] [Fact]
public void AddFrameFromPixelData() public void AddFrameFromPixelData()
{ {
Assert.True(this.Image.Frames.RootFrame.TryGetSinglePixelSpan(out Span<Rgba32> imgSpan)); Assert.True(this.Image.Frames.RootFrame.TryGetSinglePixelSpan(out Span<Rgba32> imgSpan));
var pixelData = imgSpan.ToArray(); Rgba32[] pixelData = imgSpan.ToArray();
this.Image.Frames.AddFrame(pixelData); using ImageFrame<Rgba32> addedFrame = this.Image.Frames.AddFrame(pixelData);
Assert.Equal(2, this.Image.Frames.Count); Assert.Equal(2, this.Image.Frames.Count);
} }
[Fact] [Fact]
public void AddFrame_clones_sourceFrame() public void AddFrame_clones_sourceFrame()
{ {
var otherFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10); using var otherFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
ImageFrame<Rgba32> addedFrame = this.Image.Frames.AddFrame(otherFrame); using ImageFrame<Rgba32> addedFrame = this.Image.Frames.AddFrame(otherFrame);
Assert.True(otherFrame.TryGetSinglePixelSpan(out Span<Rgba32> otherFrameSpan)); Assert.True(otherFrame.TryGetSinglePixelSpan(out Span<Rgba32> otherFrameSpan));
addedFrame.ComparePixelBufferTo(otherFrameSpan); addedFrame.ComparePixelBufferTo(otherFrameSpan);
@ -265,8 +281,8 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void InsertFrame_clones_sourceFrame() public void InsertFrame_clones_sourceFrame()
{ {
var otherFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10); using var otherFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
ImageFrame<Rgba32> addedFrame = this.Image.Frames.InsertFrame(0, otherFrame); using ImageFrame<Rgba32> addedFrame = this.Image.Frames.InsertFrame(0, otherFrame);
Assert.True(otherFrame.TryGetSinglePixelSpan(out Span<Rgba32> otherFrameSpan)); Assert.True(otherFrame.TryGetSinglePixelSpan(out Span<Rgba32> otherFrameSpan));
addedFrame.ComparePixelBufferTo(otherFrameSpan); addedFrame.ComparePixelBufferTo(otherFrameSpan);
@ -276,51 +292,51 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void MoveFrame_LeavesFrameInCorrectLocation() public void MoveFrame_LeavesFrameInCorrectLocation()
{ {
for (var i = 0; i < 9; i++) for (int i = 0; i < 9; i++)
{ {
this.Image.Frames.CreateFrame(); this.Image.Frames.CreateFrame();
} }
var frame = this.Image.Frames[4]; ImageFrame<Rgba32> frame = this.Image.Frames[4];
this.Image.Frames.MoveFrame(4, 7); this.Image.Frames.MoveFrame(4, 7);
var newIndex = this.Image.Frames.IndexOf(frame); int newIndex = this.Image.Frames.IndexOf(frame);
Assert.Equal(7, newIndex); Assert.Equal(7, newIndex);
} }
[Fact] [Fact]
public void IndexOf_ReturnsCorrectIndex() public void IndexOf_ReturnsCorrectIndex()
{ {
for (var i = 0; i < 9; i++) for (int i = 0; i < 9; i++)
{ {
this.Image.Frames.CreateFrame(); this.Image.Frames.CreateFrame();
} }
var frame = this.Image.Frames[4]; ImageFrame<Rgba32> frame = this.Image.Frames[4];
var index = this.Image.Frames.IndexOf(frame); int index = this.Image.Frames.IndexOf(frame);
Assert.Equal(4, index); Assert.Equal(4, index);
} }
[Fact] [Fact]
public void Contains_TrueIfMember() public void Contains_TrueIfMember()
{ {
for (var i = 0; i < 9; i++) for (int i = 0; i < 9; i++)
{ {
this.Image.Frames.CreateFrame(); this.Image.Frames.CreateFrame();
} }
var frame = this.Image.Frames[4]; ImageFrame<Rgba32> frame = this.Image.Frames[4];
Assert.True(this.Image.Frames.Contains(frame)); Assert.True(this.Image.Frames.Contains(frame));
} }
[Fact] [Fact]
public void Contains_FalseIfNonMember() public void Contains_FalseIfNonMember()
{ {
for (var i = 0; i < 9; i++) for (int i = 0; i < 9; i++)
{ {
this.Image.Frames.CreateFrame(); this.Image.Frames.CreateFrame();
} }
var frame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10); using var frame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
Assert.False(this.Image.Frames.Contains(frame)); Assert.False(this.Image.Frames.Contains(frame));
} }
} }

20
tests/ImageSharp.Tests/Image/ImageTests.Identify.cs

@ -21,7 +21,7 @@ namespace SixLabors.ImageSharp.Tests
private static readonly Size ExpectedImageSize = new Size(108, 202); private static readonly Size ExpectedImageSize = new Size(108, 202);
private byte[] ActualImageBytes => TestFile.Create(TestImages.Bmp.F).Bytes; private static byte[] ActualImageBytes => TestFile.Create(TestImages.Bmp.F).Bytes;
private IImageInfo LocalImageInfo => this.localImageInfoMock.Object; private IImageInfo LocalImageInfo => this.localImageInfoMock.Object;
@ -33,7 +33,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void FromBytes_GlobalConfiguration() public void FromBytes_GlobalConfiguration()
{ {
IImageInfo info = Image.Identify(this.ActualImageBytes, out IImageFormat type); IImageInfo info = Image.Identify(ActualImageBytes, out IImageFormat type);
Assert.Equal(ExpectedImageSize, info.Size()); Assert.Equal(ExpectedImageSize, info.Size());
Assert.Equal(ExpectedGlobalFormat, type); Assert.Equal(ExpectedGlobalFormat, type);
@ -69,7 +69,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void FromStream_GlobalConfiguration() public void FromStream_GlobalConfiguration()
{ {
using (var stream = new MemoryStream(this.ActualImageBytes)) using (var stream = new MemoryStream(ActualImageBytes))
{ {
IImageInfo info = Image.Identify(stream, out IImageFormat type); IImageInfo info = Image.Identify(stream, out IImageFormat type);
@ -81,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void FromStream_GlobalConfiguration_NoFormat() public void FromStream_GlobalConfiguration_NoFormat()
{ {
using (var stream = new MemoryStream(this.ActualImageBytes)) using (var stream = new MemoryStream(ActualImageBytes))
{ {
IImageInfo info = Image.Identify(stream); IImageInfo info = Image.Identify(stream);
@ -92,7 +92,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void FromNonSeekableStream_GlobalConfiguration() public void FromNonSeekableStream_GlobalConfiguration()
{ {
using var stream = new MemoryStream(this.ActualImageBytes); using var stream = new MemoryStream(ActualImageBytes);
using var nonSeekableStream = new NonSeekableStream(stream); using var nonSeekableStream = new NonSeekableStream(stream);
IImageInfo info = Image.Identify(nonSeekableStream, out IImageFormat type); IImageInfo info = Image.Identify(nonSeekableStream, out IImageFormat type);
@ -104,7 +104,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void FromNonSeekableStream_GlobalConfiguration_NoFormat() public void FromNonSeekableStream_GlobalConfiguration_NoFormat()
{ {
using var stream = new MemoryStream(this.ActualImageBytes); using var stream = new MemoryStream(ActualImageBytes);
using var nonSeekableStream = new NonSeekableStream(stream); using var nonSeekableStream = new NonSeekableStream(stream);
IImageInfo info = Image.Identify(nonSeekableStream); IImageInfo info = Image.Identify(nonSeekableStream);
@ -141,7 +141,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public async Task FromStreamAsync_GlobalConfiguration_NoFormat() public async Task FromStreamAsync_GlobalConfiguration_NoFormat()
{ {
using (var stream = new MemoryStream(this.ActualImageBytes)) using (var stream = new MemoryStream(ActualImageBytes))
{ {
var asyncStream = new AsyncStreamWrapper(stream, () => false); var asyncStream = new AsyncStreamWrapper(stream, () => false);
IImageInfo info = await Image.IdentifyAsync(asyncStream); IImageInfo info = await Image.IdentifyAsync(asyncStream);
@ -153,7 +153,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public async Task FromStreamAsync_GlobalConfiguration() public async Task FromStreamAsync_GlobalConfiguration()
{ {
using (var stream = new MemoryStream(this.ActualImageBytes)) using (var stream = new MemoryStream(ActualImageBytes))
{ {
var asyncStream = new AsyncStreamWrapper(stream, () => false); var asyncStream = new AsyncStreamWrapper(stream, () => false);
(IImageInfo ImageInfo, IImageFormat Format) res = await Image.IdentifyWithFormatAsync(asyncStream); (IImageInfo ImageInfo, IImageFormat Format) res = await Image.IdentifyWithFormatAsync(asyncStream);
@ -166,7 +166,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public async Task FromNonSeekableStreamAsync_GlobalConfiguration_NoFormat() public async Task FromNonSeekableStreamAsync_GlobalConfiguration_NoFormat()
{ {
using var stream = new MemoryStream(this.ActualImageBytes); using var stream = new MemoryStream(ActualImageBytes);
using var nonSeekableStream = new NonSeekableStream(stream); using var nonSeekableStream = new NonSeekableStream(stream);
var asyncStream = new AsyncStreamWrapper(nonSeekableStream, () => false); var asyncStream = new AsyncStreamWrapper(nonSeekableStream, () => false);
@ -178,7 +178,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public async Task FromNonSeekableStreamAsync_GlobalConfiguration() public async Task FromNonSeekableStreamAsync_GlobalConfiguration()
{ {
using var stream = new MemoryStream(this.ActualImageBytes); using var stream = new MemoryStream(ActualImageBytes);
using var nonSeekableStream = new NonSeekableStream(stream); using var nonSeekableStream = new NonSeekableStream(stream);
var asyncStream = new AsyncStreamWrapper(nonSeekableStream, () => false); var asyncStream = new AsyncStreamWrapper(nonSeekableStream, () => false);

15
tests/ImageSharp.Tests/Image/ImageTests.Save.cs

@ -3,9 +3,8 @@
using System; using System;
using System.IO; using System.IO;
using Moq; using Moq;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using Xunit; using Xunit;
@ -13,8 +12,6 @@ using Xunit;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests
{ {
using SixLabors.ImageSharp.Formats;
public partial class ImageTests public partial class ImageTests
{ {
public class Save public class Save
@ -23,7 +20,7 @@ namespace SixLabors.ImageSharp.Tests
public void DetectedEncoding() public void DetectedEncoding()
{ {
string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests));
string file = System.IO.Path.Combine(dir, "DetectedEncoding.png"); string file = Path.Combine(dir, "DetectedEncoding.png");
using (var image = new Image<Rgba32>(10, 10)) using (var image = new Image<Rgba32>(10, 10))
{ {
@ -40,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests
public void WhenExtensionIsUnknown_Throws() public void WhenExtensionIsUnknown_Throws()
{ {
string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests));
string file = System.IO.Path.Combine(dir, "UnknownExtensionsEncoding_Throws.tmp"); string file = Path.Combine(dir, "UnknownExtensionsEncoding_Throws.tmp");
Assert.Throws<NotSupportedException>( Assert.Throws<NotSupportedException>(
() => () =>
@ -56,14 +53,14 @@ namespace SixLabors.ImageSharp.Tests
public void SetEncoding() public void SetEncoding()
{ {
string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests));
string file = System.IO.Path.Combine(dir, "SetEncoding.dat"); string file = Path.Combine(dir, "SetEncoding.dat");
using (var image = new Image<Rgba32>(10, 10)) using (var image = new Image<Rgba32>(10, 10))
{ {
image.Save(file, new PngEncoder()); image.Save(file, new PngEncoder());
} }
using (Image.Load(file, out var mime)) using (Image.Load(file, out IImageFormat mime))
{ {
Assert.Equal("image/png", mime.DefaultMimeType); Assert.Equal("image/png", mime.DefaultMimeType);
} }
@ -72,7 +69,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void ThrowsWhenDisposed() public void ThrowsWhenDisposed()
{ {
var image = new Image<Rgba32>(5, 5); using var image = new Image<Rgba32>(5, 5);
image.Dispose(); image.Dispose();
IImageEncoder encoder = Mock.Of<IImageEncoder>(); IImageEncoder encoder = Mock.Of<IImageEncoder>();
using (var stream = new MemoryStream()) using (var stream = new MemoryStream())

27
tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs

@ -4,20 +4,18 @@
using System; using System;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
using Moq; using Moq;
using SixLabors.ImageSharp.Formats.Bmp; using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit; using Xunit;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests
{ {
using System.Threading.Tasks;
using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Tests.TestUtilities;
public partial class ImageTests public partial class ImageTests
{ {
public class SaveAsync public class SaveAsync
@ -43,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests
public async Task WhenExtensionIsUnknown_Throws() public async Task WhenExtensionIsUnknown_Throws()
{ {
string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests));
string file = System.IO.Path.Combine(dir, "UnknownExtensionsEncoding_Throws.tmp"); string file = Path.Combine(dir, "UnknownExtensionsEncoding_Throws.tmp");
await Assert.ThrowsAsync<NotSupportedException>( await Assert.ThrowsAsync<NotSupportedException>(
async () => async () =>
@ -59,14 +57,14 @@ namespace SixLabors.ImageSharp.Tests
public async Task SetEncoding() public async Task SetEncoding()
{ {
string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests));
string file = System.IO.Path.Combine(dir, "SetEncoding.dat"); string file = Path.Combine(dir, "SetEncoding.dat");
using (var image = new Image<Rgba32>(10, 10)) using (var image = new Image<Rgba32>(10, 10))
{ {
await image.SaveAsync(file, new PngEncoder()); await image.SaveAsync(file, new PngEncoder());
} }
using (Image.Load(file, out var mime)) using (Image.Load(file, out IImageFormat mime))
{ {
Assert.Equal("image/png", mime.DefaultMimeType); Assert.Equal("image/png", mime.DefaultMimeType);
} }
@ -142,10 +140,15 @@ namespace SixLabors.ImageSharp.Tests
using var stream = new MemoryStream(); using var stream = new MemoryStream();
var asyncStream = new AsyncStreamWrapper(stream, () => false); var asyncStream = new AsyncStreamWrapper(stream, () => false);
var cts = new CancellationTokenSource(); var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromTicks(1));
await Assert.ThrowsAnyAsync<TaskCanceledException>(() => var pausedStream = new PausedStream(asyncStream);
image.SaveAsync(asyncStream, encoder, cts.Token)); pausedStream.OnWaiting(s =>
{
cts.Cancel();
pausedStream.Release();
});
await Assert.ThrowsAsync<TaskCanceledException>(async () => await image.SaveAsync(pausedStream, encoder, cts.Token));
} }
} }
} }

38
tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs

@ -60,24 +60,24 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
} }
} }
public static readonly TheoryData<int> LenthValues = new TheoryData<int> { 0, 1, 7, 1023, 1024 }; public static readonly TheoryData<int> LengthValues = new TheoryData<int> { 0, 1, 7, 1023, 1024 };
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void HasCorrectLength_byte(int desiredLength) public void HasCorrectLength_byte(int desiredLength)
{ {
this.TestHasCorrectLength<byte>(desiredLength); this.TestHasCorrectLength<byte>(desiredLength);
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void HasCorrectLength_float(int desiredLength) public void HasCorrectLength_float(int desiredLength)
{ {
this.TestHasCorrectLength<float>(desiredLength); this.TestHasCorrectLength<float>(desiredLength);
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void HasCorrectLength_CustomStruct(int desiredLength) public void HasCorrectLength_CustomStruct(int desiredLength)
{ {
this.TestHasCorrectLength<CustomStruct>(desiredLength); this.TestHasCorrectLength<CustomStruct>(desiredLength);
@ -93,7 +93,7 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void CanAllocateCleanBuffer_byte(int desiredLength) public void CanAllocateCleanBuffer_byte(int desiredLength)
{ {
this.TestCanAllocateCleanBuffer<byte>(desiredLength, false); this.TestCanAllocateCleanBuffer<byte>(desiredLength, false);
@ -101,14 +101,14 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void CanAllocateCleanBuffer_double(int desiredLength) public void CanAllocateCleanBuffer_double(int desiredLength)
{ {
this.TestCanAllocateCleanBuffer<double>(desiredLength); this.TestCanAllocateCleanBuffer<double>(desiredLength);
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void CanAllocateCleanBuffer_CustomStruct(int desiredLength) public void CanAllocateCleanBuffer_CustomStruct(int desiredLength)
{ {
this.TestCanAllocateCleanBuffer<CustomStruct>(desiredLength); this.TestCanAllocateCleanBuffer<CustomStruct>(desiredLength);
@ -145,14 +145,14 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void SpanPropertyIsAlwaysTheSame_int(int desiredLength) public void SpanPropertyIsAlwaysTheSame_int(int desiredLength)
{ {
this.TestSpanPropertyIsAlwaysTheSame<int>(desiredLength); this.TestSpanPropertyIsAlwaysTheSame<int>(desiredLength);
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void SpanPropertyIsAlwaysTheSame_byte(int desiredLength) public void SpanPropertyIsAlwaysTheSame_byte(int desiredLength)
{ {
this.TestSpanPropertyIsAlwaysTheSame<byte>(desiredLength, false); this.TestSpanPropertyIsAlwaysTheSame<byte>(desiredLength, false);
@ -174,18 +174,18 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void WriteAndReadElements_float(int desiredLength) public void WriteAndReadElements_float(int desiredLength)
{ {
this.TestWriteAndReadElements<float>(desiredLength, x => x * 1.2f); this.TestWriteAndReadElements(desiredLength, x => x * 1.2f);
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void WriteAndReadElements_byte(int desiredLength) public void WriteAndReadElements_byte(int desiredLength)
{ {
this.TestWriteAndReadElements<byte>(desiredLength, x => (byte)(x + 1), false); this.TestWriteAndReadElements(desiredLength, x => (byte)(x + 1), false);
this.TestWriteAndReadElements<byte>(desiredLength, x => (byte)(x + 1), true); this.TestWriteAndReadElements(desiredLength, x => (byte)(x + 1), true);
} }
private void TestWriteAndReadElements<T>(int desiredLength, Func<int, T> getExpectedValue, bool testManagedByteBuffer = false) private void TestWriteAndReadElements<T>(int desiredLength, Func<int, T> getExpectedValue, bool testManagedByteBuffer = false)
@ -193,7 +193,7 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
{ {
using (IMemoryOwner<T> buffer = this.Allocate<T>(desiredLength, AllocationOptions.None, testManagedByteBuffer)) using (IMemoryOwner<T> buffer = this.Allocate<T>(desiredLength, AllocationOptions.None, testManagedByteBuffer))
{ {
T[] expectedVals = new T[buffer.Length()]; var expectedVals = new T[buffer.Length()];
for (int i = 0; i < buffer.Length(); i++) for (int i = 0; i < buffer.Length(); i++)
{ {
@ -211,7 +211,7 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void IndexingSpan_WhenOutOfRange_Throws_byte(int desiredLength) public void IndexingSpan_WhenOutOfRange_Throws_byte(int desiredLength)
{ {
this.TestIndexOutOfRangeShouldThrow<byte>(desiredLength, false); this.TestIndexOutOfRangeShouldThrow<byte>(desiredLength, false);
@ -219,14 +219,14 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void IndexingSpan_WhenOutOfRange_Throws_long(int desiredLength) public void IndexingSpan_WhenOutOfRange_Throws_long(int desiredLength)
{ {
this.TestIndexOutOfRangeShouldThrow<long>(desiredLength); this.TestIndexOutOfRangeShouldThrow<long>(desiredLength);
} }
[Theory] [Theory]
[MemberData(nameof(LenthValues))] [MemberData(nameof(LengthValues))]
public void IndexingSpan_WhenOutOfRange_Throws_CustomStruct(int desiredLength) public void IndexingSpan_WhenOutOfRange_Throws_CustomStruct(int desiredLength)
{ {
this.TestIndexOutOfRangeShouldThrow<CustomStruct>(desiredLength); this.TestIndexOutOfRangeShouldThrow<CustomStruct>(desiredLength);
@ -316,4 +316,4 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
} }
} }
} }
} }

23
tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs

@ -12,7 +12,7 @@ using SixLabors.ImageSharp.PixelFormats;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif
{ {
[Trait("Profile", "Exif")] [Trait("Profile", "Exif")]
public class ExifProfileTests public class ExifProfileTests
@ -63,6 +63,7 @@ namespace SixLabors.ImageSharp.Tests
Assert.NotNull(value); Assert.NotNull(value);
Assert.Equal(expected, value.Value); Assert.Equal(expected, value.Value);
image.Dispose();
} }
[Fact] [Fact]
@ -157,6 +158,8 @@ namespace SixLabors.ImageSharp.Tests
IExifValue<Rational> value2 = image.Metadata.ExifProfile.GetValue(ExifTag.FlashEnergy); IExifValue<Rational> value2 = image.Metadata.ExifProfile.GetValue(ExifTag.FlashEnergy);
Assert.NotNull(value2); Assert.NotNull(value2);
Assert.Equal(new Rational(double.PositiveInfinity), value2.Value); Assert.Equal(new Rational(double.PositiveInfinity), value2.Value);
image.Dispose();
} }
[Theory] [Theory]
@ -231,6 +234,8 @@ namespace SixLabors.ImageSharp.Tests
latitude = image.Metadata.ExifProfile.GetValue(ExifTag.GPSLatitude); latitude = image.Metadata.ExifProfile.GetValue(ExifTag.GPSLatitude);
Assert.Equal(expectedLatitude, latitude.Value); Assert.Equal(expectedLatitude, latitude.Value);
image.Dispose();
} }
[Theory] [Theory]
@ -252,13 +257,15 @@ namespace SixLabors.ImageSharp.Tests
{ {
Assert.True(ExifTags.GetPart(exifProfileValue.Tag) == ExifParts.ExifTags); Assert.True(ExifTags.GetPart(exifProfileValue.Tag) == ExifParts.ExifTags);
} }
image.Dispose();
} }
[Fact] [Fact]
public void RemoveEntry_Works() public void RemoveEntry_Works()
{ {
// Arrange // Arrange
Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image(); using Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image();
int profileCount = image.Metadata.ExifProfile.Values.Count; int profileCount = image.Metadata.ExifProfile.Values.Count;
// Assert // Assert
@ -311,7 +318,7 @@ namespace SixLabors.ImageSharp.Tests
TestProfile(profile); TestProfile(profile);
Image<Rgba32> thumbnail = profile.CreateThumbnail<Rgba32>(); using Image<Rgba32> thumbnail = profile.CreateThumbnail<Rgba32>();
Assert.NotNull(thumbnail); Assert.NotNull(thumbnail);
Assert.Equal(256, thumbnail.Width); Assert.Equal(256, thumbnail.Width);
Assert.Equal(170, thumbnail.Height); Assert.Equal(170, thumbnail.Height);
@ -337,7 +344,7 @@ namespace SixLabors.ImageSharp.Tests
image.Metadata.ExifProfile = expectedProfile; image.Metadata.ExifProfile = expectedProfile;
// Act // Act
Image<Rgba32> reloadedImage = WriteAndRead(image, TestImageWriteFormat.Jpeg); using Image<Rgba32> reloadedImage = WriteAndRead(image, TestImageWriteFormat.Jpeg);
// Assert // Assert
ExifProfile actualProfile = reloadedImage.Metadata.ExifProfile; ExifProfile actualProfile = reloadedImage.Metadata.ExifProfile;
@ -361,7 +368,7 @@ namespace SixLabors.ImageSharp.Tests
{ {
// This image contains an 802 byte EXIF profile // This image contains an 802 byte EXIF profile
// It has a tag with an index offset of 18,481,152 bytes (overrunning the data) // It has a tag with an index offset of 18,481,152 bytes (overrunning the data)
Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Progressive.Bad.ExifUndefType).CreateRgba32Image(); using Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Progressive.Bad.ExifUndefType).CreateRgba32Image();
Assert.NotNull(image); Assert.NotNull(image);
ExifProfile profile = image.Metadata.ExifProfile; ExifProfile profile = image.Metadata.ExifProfile;
@ -381,7 +388,7 @@ namespace SixLabors.ImageSharp.Tests
public void TestArrayValueWithUnspecifiedSize() public void TestArrayValueWithUnspecifiedSize()
{ {
// This images contains array in the exif profile that has zero components. // This images contains array in the exif profile that has zero components.
Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Issues.InvalidCast520).CreateRgba32Image(); using Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Issues.InvalidCast520).CreateRgba32Image();
ExifProfile profile = image.Metadata.ExifProfile; ExifProfile profile = image.Metadata.ExifProfile;
Assert.NotNull(profile); Assert.NotNull(profile);
@ -409,7 +416,7 @@ namespace SixLabors.ImageSharp.Tests
image.Metadata.ExifProfile = CreateExifProfile(); image.Metadata.ExifProfile = CreateExifProfile();
// Act // Act
Image<Rgba32> reloadedImage = WriteAndRead(image, imageFormat); using Image<Rgba32> reloadedImage = WriteAndRead(image, imageFormat);
// Assert // Assert
ExifProfile actual = reloadedImage.Metadata.ExifProfile; ExifProfile actual = reloadedImage.Metadata.ExifProfile;
@ -460,7 +467,7 @@ namespace SixLabors.ImageSharp.Tests
internal static ExifProfile GetExifProfile() internal static ExifProfile GetExifProfile()
{ {
Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image(); using Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image();
ExifProfile profile = image.Metadata.ExifProfile; ExifProfile profile = image.Metadata.ExifProfile;
Assert.NotNull(profile); Assert.NotNull(profile);

2
tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs

@ -6,7 +6,7 @@ using System.Collections.Generic;
using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif
{ {
[Trait("Profile", "Exif")] [Trait("Profile", "Exif")]
public class ExifReaderTests public class ExifReaderTests

2
tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs

@ -4,7 +4,7 @@
using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif
{ {
[Trait("Profile", "Exif")] [Trait("Profile", "Exif")]
public class ExifTagDescriptionAttributeTests public class ExifTagDescriptionAttributeTests

4
tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs

@ -5,12 +5,12 @@ using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif
{ {
[Trait("Profile", "Exif")] [Trait("Profile", "Exif")]
public class ExifValueTests public class ExifValueTests
{ {
private ExifProfile profile; private readonly ExifProfile profile;
public ExifValueTests() public ExifValueTests()
{ {

17
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{ {
[Trait("Profile", "Icc")]
public class IccDataReaderCurvesTests public class IccDataReaderCurvesTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataCurves.OneDimensionalCurveTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.OneDimensionalCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadOneDimensionalCurve(byte[] data, IccOneDimensionalCurve expected) internal void ReadOneDimensionalCurve(byte[] data, IccOneDimensionalCurve expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccOneDimensionalCurve output = reader.ReadOneDimensionalCurve(); IccOneDimensionalCurve output = reader.ReadOneDimensionalCurve();
@ -23,7 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.ResponseCurveTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.ResponseCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadResponseCurve(byte[] data, IccResponseCurve expected, int channelCount) internal void ReadResponseCurve(byte[] data, IccResponseCurve expected, int channelCount)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccResponseCurve output = reader.ReadResponseCurve(channelCount); IccResponseCurve output = reader.ReadResponseCurve(channelCount);
@ -34,7 +35,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.ParametricCurveTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.ParametricCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadParametricCurve(byte[] data, IccParametricCurve expected) internal void ReadParametricCurve(byte[] data, IccParametricCurve expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccParametricCurve output = reader.ReadParametricCurve(); IccParametricCurve output = reader.ReadParametricCurve();
@ -45,7 +46,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.CurveSegmentTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.CurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadCurveSegment(byte[] data, IccCurveSegment expected) internal void ReadCurveSegment(byte[] data, IccCurveSegment expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccCurveSegment output = reader.ReadCurveSegment(); IccCurveSegment output = reader.ReadCurveSegment();
@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.FormulaCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.FormulaCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadFormulaCurveElement(byte[] data, IccFormulaCurveElement expected) internal void ReadFormulaCurveElement(byte[] data, IccFormulaCurveElement expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccFormulaCurveElement output = reader.ReadFormulaCurveElement(); IccFormulaCurveElement output = reader.ReadFormulaCurveElement();
@ -67,14 +68,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.SampledCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.SampledCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadSampledCurveElement(byte[] data, IccSampledCurveElement expected) internal void ReadSampledCurveElement(byte[] data, IccSampledCurveElement expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccSampledCurveElement output = reader.ReadSampledCurveElement(); IccSampledCurveElement output = reader.ReadSampledCurveElement();
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataReader CreateReader(byte[] data) private static IccDataReader CreateReader(byte[] data)
{ {
return new IccDataReader(data); return new IccDataReader(data);
} }

17
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{ {
[Trait("Profile", "Icc")]
public class IccDataReaderLutTests public class IccDataReaderLutTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))]
internal void ReadClut(byte[] data, IccClut expected, int inChannelCount, int outChannelCount, bool isFloat) internal void ReadClut(byte[] data, IccClut expected, int inChannelCount, int outChannelCount, bool isFloat)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccClut output = reader.ReadClut(inChannelCount, outChannelCount, isFloat); IccClut output = reader.ReadClut(inChannelCount, outChannelCount, isFloat);
@ -23,7 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))]
internal void ReadClut8(byte[] data, IccClut expected, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void ReadClut8(byte[] data, IccClut expected, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccClut output = reader.ReadClut8(inChannelCount, outChannelCount, gridPointCount); IccClut output = reader.ReadClut8(inChannelCount, outChannelCount, gridPointCount);
@ -34,7 +35,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))]
internal void ReadClut16(byte[] data, IccClut expected, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void ReadClut16(byte[] data, IccClut expected, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccClut output = reader.ReadClut16(inChannelCount, outChannelCount, gridPointCount); IccClut output = reader.ReadClut16(inChannelCount, outChannelCount, gridPointCount);
@ -45,7 +46,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))]
internal void ReadClutF32(byte[] data, IccClut expected, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void ReadClutF32(byte[] data, IccClut expected, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccClut output = reader.ReadClutF32(inChannelCount, outChannelCount, gridPointCount); IccClut output = reader.ReadClutF32(inChannelCount, outChannelCount, gridPointCount);
@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))]
internal void ReadLut8(byte[] data, IccLut expected) internal void ReadLut8(byte[] data, IccLut expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccLut output = reader.ReadLut8(); IccLut output = reader.ReadLut8();
@ -67,14 +68,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))]
internal void ReadLut16(byte[] data, IccLut expected, int count) internal void ReadLut16(byte[] data, IccLut expected, int count)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccLut output = reader.ReadLut16(count); IccLut output = reader.ReadLut16(count);
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataReader CreateReader(byte[] data) private static IccDataReader CreateReader(byte[] data)
{ {
return new IccDataReader(data); return new IccDataReader(data);
} }

9
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{ {
[Trait("Profile", "Icc")]
public class IccDataReaderMatrixTests public class IccDataReaderMatrixTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataMatrix.Matrix2D_FloatArrayTestData), MemberType = typeof(IccTestDataMatrix))] [MemberData(nameof(IccTestDataMatrix.Matrix2D_FloatArrayTestData), MemberType = typeof(IccTestDataMatrix))]
public void ReadMatrix2D(byte[] data, int xCount, int yCount, bool isSingle, float[,] expected) public void ReadMatrix2D(byte[] data, int xCount, int yCount, bool isSingle, float[,] expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
float[,] output = reader.ReadMatrix(xCount, yCount, isSingle); float[,] output = reader.ReadMatrix(xCount, yCount, isSingle);
@ -23,14 +24,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix1D_ArrayTestData), MemberType = typeof(IccTestDataMatrix))] [MemberData(nameof(IccTestDataMatrix.Matrix1D_ArrayTestData), MemberType = typeof(IccTestDataMatrix))]
public void ReadMatrix1D(byte[] data, int yCount, bool isSingle, float[] expected) public void ReadMatrix1D(byte[] data, int yCount, bool isSingle, float[] expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
float[] output = reader.ReadMatrix(yCount, isSingle); float[] output = reader.ReadMatrix(yCount, isSingle);
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataReader CreateReader(byte[] data) private static IccDataReader CreateReader(byte[] data)
{ {
return new IccDataReader(data); return new IccDataReader(data);
} }

13
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{ {
[Trait("Profile", "Icc")]
public class IccDataReaderMultiProcessElementTests public class IccDataReaderMultiProcessElementTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataMultiProcessElements.MultiProcessElementTestData), MemberType = typeof(IccTestDataMultiProcessElements))] [MemberData(nameof(IccTestDataMultiProcessElements.MultiProcessElementTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void ReadMultiProcessElement(byte[] data, IccMultiProcessElement expected) internal void ReadMultiProcessElement(byte[] data, IccMultiProcessElement expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccMultiProcessElement output = reader.ReadMultiProcessElement(); IccMultiProcessElement output = reader.ReadMultiProcessElement();
@ -23,7 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.CurveSetTestData), MemberType = typeof(IccTestDataMultiProcessElements))] [MemberData(nameof(IccTestDataMultiProcessElements.CurveSetTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void ReadCurveSetProcessElement(byte[] data, IccCurveSetProcessElement expected, int inChannelCount, int outChannelCount) internal void ReadCurveSetProcessElement(byte[] data, IccCurveSetProcessElement expected, int inChannelCount, int outChannelCount)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccCurveSetProcessElement output = reader.ReadCurveSetProcessElement(inChannelCount, outChannelCount); IccCurveSetProcessElement output = reader.ReadCurveSetProcessElement(inChannelCount, outChannelCount);
@ -34,7 +35,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.MatrixTestData), MemberType = typeof(IccTestDataMultiProcessElements))] [MemberData(nameof(IccTestDataMultiProcessElements.MatrixTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void ReadMatrixProcessElement(byte[] data, IccMatrixProcessElement expected, int inChannelCount, int outChannelCount) internal void ReadMatrixProcessElement(byte[] data, IccMatrixProcessElement expected, int inChannelCount, int outChannelCount)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccMatrixProcessElement output = reader.ReadMatrixProcessElement(inChannelCount, outChannelCount); IccMatrixProcessElement output = reader.ReadMatrixProcessElement(inChannelCount, outChannelCount);
@ -45,14 +46,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.ClutTestData), MemberType = typeof(IccTestDataMultiProcessElements))] [MemberData(nameof(IccTestDataMultiProcessElements.ClutTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void ReadClutProcessElement(byte[] data, IccClutProcessElement expected, int inChannelCount, int outChannelCount) internal void ReadClutProcessElement(byte[] data, IccClutProcessElement expected, int inChannelCount, int outChannelCount)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccClutProcessElement output = reader.ReadClutProcessElement(inChannelCount, outChannelCount); IccClutProcessElement output = reader.ReadClutProcessElement(inChannelCount, outChannelCount);
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataReader CreateReader(byte[] data) private static IccDataReader CreateReader(byte[] data)
{ {
return new IccDataReader(data); return new IccDataReader(data);
} }

25
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs

@ -6,15 +6,16 @@ using System.Numerics;
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{ {
[Trait("Profile", "Icc")]
public class IccDataReaderNonPrimitivesTests public class IccDataReaderNonPrimitivesTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataNonPrimitives.DateTimeTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.DateTimeTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void ReadDateTime(byte[] data, DateTime expected) public void ReadDateTime(byte[] data, DateTime expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
DateTime output = reader.ReadDateTime(); DateTime output = reader.ReadDateTime();
@ -25,7 +26,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.VersionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.VersionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void ReadVersionNumber(byte[] data, IccVersion expected) public void ReadVersionNumber(byte[] data, IccVersion expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccVersion output = reader.ReadVersionNumber(); IccVersion output = reader.ReadVersionNumber();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.XyzNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.XyzNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void ReadXyzNumber(byte[] data, Vector3 expected) public void ReadXyzNumber(byte[] data, Vector3 expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
Vector3 output = reader.ReadXyzNumber(); Vector3 output = reader.ReadXyzNumber();
@ -47,7 +48,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ProfileIdTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ProfileIdTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadProfileId(byte[] data, IccProfileId expected) internal void ReadProfileId(byte[] data, IccProfileId expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccProfileId output = reader.ReadProfileId(); IccProfileId output = reader.ReadProfileId();
@ -58,7 +59,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.PositionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.PositionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadPositionNumber(byte[] data, IccPositionNumber expected) internal void ReadPositionNumber(byte[] data, IccPositionNumber expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccPositionNumber output = reader.ReadPositionNumber(); IccPositionNumber output = reader.ReadPositionNumber();
@ -69,7 +70,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ResponseNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ResponseNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadResponseNumber(byte[] data, IccResponseNumber expected) internal void ReadResponseNumber(byte[] data, IccResponseNumber expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccResponseNumber output = reader.ReadResponseNumber(); IccResponseNumber output = reader.ReadResponseNumber();
@ -80,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.NamedColorTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.NamedColorTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadNamedColor(byte[] data, IccNamedColor expected, uint coordinateCount) internal void ReadNamedColor(byte[] data, IccNamedColor expected, uint coordinateCount)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccNamedColor output = reader.ReadNamedColor(coordinateCount); IccNamedColor output = reader.ReadNamedColor(coordinateCount);
@ -91,7 +92,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ProfileDescriptionReadTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ProfileDescriptionReadTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadProfileDescription(byte[] data, IccProfileDescription expected) internal void ReadProfileDescription(byte[] data, IccProfileDescription expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccProfileDescription output = reader.ReadProfileDescription(); IccProfileDescription output = reader.ReadProfileDescription();
@ -102,7 +103,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ColorantTableEntryTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ColorantTableEntryTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadColorantTableEntry(byte[] data, IccColorantTableEntry expected) internal void ReadColorantTableEntry(byte[] data, IccColorantTableEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccColorantTableEntry output = reader.ReadColorantTableEntry(); IccColorantTableEntry output = reader.ReadColorantTableEntry();
@ -113,14 +114,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ScreeningChannelTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ScreeningChannelTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadScreeningChannel(byte[] data, IccScreeningChannel expected) internal void ReadScreeningChannel(byte[] data, IccScreeningChannel expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccScreeningChannel output = reader.ReadScreeningChannel(); IccScreeningChannel output = reader.ReadScreeningChannel();
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataReader CreateReader(byte[] data) private static IccDataReader CreateReader(byte[] data)
{ {
return new IccDataReader(data); return new IccDataReader(data);
} }

19
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs

@ -5,15 +5,16 @@ using System;
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{ {
[Trait("Profile", "Icc")]
public class IccDataReaderPrimitivesTests public class IccDataReaderPrimitivesTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataPrimitives.AsciiTestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.AsciiTestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadAsciiString(byte[] textBytes, int length, string expected) public void ReadAsciiString(byte[] textBytes, int length, string expected)
{ {
IccDataReader reader = this.CreateReader(textBytes); IccDataReader reader = CreateReader(textBytes);
string output = reader.ReadAsciiString(length); string output = reader.ReadAsciiString(length);
@ -23,7 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact] [Fact]
public void ReadAsciiStringWithNegativeLengthThrowsArgumentException() public void ReadAsciiStringWithNegativeLengthThrowsArgumentException()
{ {
IccDataReader reader = this.CreateReader(new byte[4]); IccDataReader reader = CreateReader(new byte[4]);
Assert.Throws<ArgumentOutOfRangeException>(() => reader.ReadAsciiString(-1)); Assert.Throws<ArgumentOutOfRangeException>(() => reader.ReadAsciiString(-1));
} }
@ -31,7 +32,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact] [Fact]
public void ReadUnicodeStringWithNegativeLengthThrowsArgumentException() public void ReadUnicodeStringWithNegativeLengthThrowsArgumentException()
{ {
IccDataReader reader = this.CreateReader(new byte[4]); IccDataReader reader = CreateReader(new byte[4]);
Assert.Throws<ArgumentOutOfRangeException>(() => reader.ReadUnicodeString(-1)); Assert.Throws<ArgumentOutOfRangeException>(() => reader.ReadUnicodeString(-1));
} }
@ -40,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.Fix16TestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.Fix16TestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadFix16(byte[] data, float expected) public void ReadFix16(byte[] data, float expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
float output = reader.ReadFix16(); float output = reader.ReadFix16();
@ -51,7 +52,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.UFix16TestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.UFix16TestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadUFix16(byte[] data, float expected) public void ReadUFix16(byte[] data, float expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
float output = reader.ReadUFix16(); float output = reader.ReadUFix16();
@ -62,7 +63,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.U1Fix15TestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.U1Fix15TestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadU1Fix15(byte[] data, float expected) public void ReadU1Fix15(byte[] data, float expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
float output = reader.ReadU1Fix15(); float output = reader.ReadU1Fix15();
@ -73,14 +74,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.UFix8TestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.UFix8TestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadUFix8(byte[] data, float expected) public void ReadUFix8(byte[] data, float expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
float output = reader.ReadUFix8(); float output = reader.ReadUFix8();
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataReader CreateReader(byte[] data) private static IccDataReader CreateReader(byte[] data)
{ {
return new IccDataReader(data); return new IccDataReader(data);
} }

71
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs

@ -4,8 +4,9 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{ {
[Trait("Profile", "Icc")]
public class IccDataReaderTagDataEntryTests public class IccDataReaderTagDataEntryTests
{ {
[Theory] [Theory]
@ -14,7 +15,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUnknownTagDataEntry(byte[] data, IccUnknownTagDataEntry expected, uint size) internal void ReadUnknownTagDataEntry(byte[] data, IccUnknownTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccUnknownTagDataEntry output = reader.ReadUnknownTagDataEntry(size); IccUnknownTagDataEntry output = reader.ReadUnknownTagDataEntry(size);
@ -27,7 +28,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadChromaticityTagDataEntry(byte[] data, IccChromaticityTagDataEntry expected) internal void ReadChromaticityTagDataEntry(byte[] data, IccChromaticityTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccChromaticityTagDataEntry output = reader.ReadChromaticityTagDataEntry(); IccChromaticityTagDataEntry output = reader.ReadChromaticityTagDataEntry();
@ -40,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadColorantOrderTagDataEntry(byte[] data, IccColorantOrderTagDataEntry expected) internal void ReadColorantOrderTagDataEntry(byte[] data, IccColorantOrderTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccColorantOrderTagDataEntry output = reader.ReadColorantOrderTagDataEntry(); IccColorantOrderTagDataEntry output = reader.ReadColorantOrderTagDataEntry();
@ -53,7 +54,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadColorantTableTagDataEntry(byte[] data, IccColorantTableTagDataEntry expected) internal void ReadColorantTableTagDataEntry(byte[] data, IccColorantTableTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccColorantTableTagDataEntry output = reader.ReadColorantTableTagDataEntry(); IccColorantTableTagDataEntry output = reader.ReadColorantTableTagDataEntry();
@ -66,7 +67,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadCurveTagDataEntry(byte[] data, IccCurveTagDataEntry expected) internal void ReadCurveTagDataEntry(byte[] data, IccCurveTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccCurveTagDataEntry output = reader.ReadCurveTagDataEntry(); IccCurveTagDataEntry output = reader.ReadCurveTagDataEntry();
@ -79,7 +80,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadDataTagDataEntry(byte[] data, IccDataTagDataEntry expected, uint size) internal void ReadDataTagDataEntry(byte[] data, IccDataTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccDataTagDataEntry output = reader.ReadDataTagDataEntry(size); IccDataTagDataEntry output = reader.ReadDataTagDataEntry(size);
@ -92,7 +93,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadDateTimeTagDataEntry(byte[] data, IccDateTimeTagDataEntry expected) internal void ReadDateTimeTagDataEntry(byte[] data, IccDateTimeTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccDateTimeTagDataEntry output = reader.ReadDateTimeTagDataEntry(); IccDateTimeTagDataEntry output = reader.ReadDateTimeTagDataEntry();
@ -105,7 +106,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadLut16TagDataEntry(byte[] data, IccLut16TagDataEntry expected) internal void ReadLut16TagDataEntry(byte[] data, IccLut16TagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccLut16TagDataEntry output = reader.ReadLut16TagDataEntry(); IccLut16TagDataEntry output = reader.ReadLut16TagDataEntry();
@ -118,7 +119,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadLut8TagDataEntry(byte[] data, IccLut8TagDataEntry expected) internal void ReadLut8TagDataEntry(byte[] data, IccLut8TagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccLut8TagDataEntry output = reader.ReadLut8TagDataEntry(); IccLut8TagDataEntry output = reader.ReadLut8TagDataEntry();
@ -131,7 +132,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadLutAToBTagDataEntry(byte[] data, IccLutAToBTagDataEntry expected) internal void ReadLutAToBTagDataEntry(byte[] data, IccLutAToBTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccLutAToBTagDataEntry output = reader.ReadLutAtoBTagDataEntry(); IccLutAToBTagDataEntry output = reader.ReadLutAtoBTagDataEntry();
@ -144,7 +145,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadLutBToATagDataEntry(byte[] data, IccLutBToATagDataEntry expected) internal void ReadLutBToATagDataEntry(byte[] data, IccLutBToATagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccLutBToATagDataEntry output = reader.ReadLutBtoATagDataEntry(); IccLutBToATagDataEntry output = reader.ReadLutBtoATagDataEntry();
@ -157,7 +158,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadMeasurementTagDataEntry(byte[] data, IccMeasurementTagDataEntry expected) internal void ReadMeasurementTagDataEntry(byte[] data, IccMeasurementTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccMeasurementTagDataEntry output = reader.ReadMeasurementTagDataEntry(); IccMeasurementTagDataEntry output = reader.ReadMeasurementTagDataEntry();
@ -170,7 +171,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadMultiLocalizedUnicodeTagDataEntry(byte[] data, IccMultiLocalizedUnicodeTagDataEntry expected) internal void ReadMultiLocalizedUnicodeTagDataEntry(byte[] data, IccMultiLocalizedUnicodeTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccMultiLocalizedUnicodeTagDataEntry output = reader.ReadMultiLocalizedUnicodeTagDataEntry(); IccMultiLocalizedUnicodeTagDataEntry output = reader.ReadMultiLocalizedUnicodeTagDataEntry();
@ -183,7 +184,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadMultiProcessElementsTagDataEntry(byte[] data, IccMultiProcessElementsTagDataEntry expected) internal void ReadMultiProcessElementsTagDataEntry(byte[] data, IccMultiProcessElementsTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccMultiProcessElementsTagDataEntry output = reader.ReadMultiProcessElementsTagDataEntry(); IccMultiProcessElementsTagDataEntry output = reader.ReadMultiProcessElementsTagDataEntry();
@ -196,7 +197,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadNamedColor2TagDataEntry(byte[] data, IccNamedColor2TagDataEntry expected) internal void ReadNamedColor2TagDataEntry(byte[] data, IccNamedColor2TagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccNamedColor2TagDataEntry output = reader.ReadNamedColor2TagDataEntry(); IccNamedColor2TagDataEntry output = reader.ReadNamedColor2TagDataEntry();
@ -209,7 +210,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadParametricCurveTagDataEntry(byte[] data, IccParametricCurveTagDataEntry expected) internal void ReadParametricCurveTagDataEntry(byte[] data, IccParametricCurveTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccParametricCurveTagDataEntry output = reader.ReadParametricCurveTagDataEntry(); IccParametricCurveTagDataEntry output = reader.ReadParametricCurveTagDataEntry();
@ -222,7 +223,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadProfileSequenceDescTagDataEntry(byte[] data, IccProfileSequenceDescTagDataEntry expected) internal void ReadProfileSequenceDescTagDataEntry(byte[] data, IccProfileSequenceDescTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccProfileSequenceDescTagDataEntry output = reader.ReadProfileSequenceDescTagDataEntry(); IccProfileSequenceDescTagDataEntry output = reader.ReadProfileSequenceDescTagDataEntry();
@ -237,7 +238,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
byte[] data, byte[] data,
IccProfileSequenceIdentifierTagDataEntry expected) IccProfileSequenceIdentifierTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccProfileSequenceIdentifierTagDataEntry output = reader.ReadProfileSequenceIdentifierTagDataEntry(); IccProfileSequenceIdentifierTagDataEntry output = reader.ReadProfileSequenceIdentifierTagDataEntry();
@ -250,7 +251,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadResponseCurveSet16TagDataEntry(byte[] data, IccResponseCurveSet16TagDataEntry expected) internal void ReadResponseCurveSet16TagDataEntry(byte[] data, IccResponseCurveSet16TagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccResponseCurveSet16TagDataEntry output = reader.ReadResponseCurveSet16TagDataEntry(); IccResponseCurveSet16TagDataEntry output = reader.ReadResponseCurveSet16TagDataEntry();
@ -263,7 +264,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadFix16ArrayTagDataEntry(byte[] data, IccFix16ArrayTagDataEntry expected, uint size) internal void ReadFix16ArrayTagDataEntry(byte[] data, IccFix16ArrayTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccFix16ArrayTagDataEntry output = reader.ReadFix16ArrayTagDataEntry(size); IccFix16ArrayTagDataEntry output = reader.ReadFix16ArrayTagDataEntry(size);
@ -276,7 +277,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadSignatureTagDataEntry(byte[] data, IccSignatureTagDataEntry expected) internal void ReadSignatureTagDataEntry(byte[] data, IccSignatureTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccSignatureTagDataEntry output = reader.ReadSignatureTagDataEntry(); IccSignatureTagDataEntry output = reader.ReadSignatureTagDataEntry();
@ -289,7 +290,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadTextTagDataEntry(byte[] data, IccTextTagDataEntry expected, uint size) internal void ReadTextTagDataEntry(byte[] data, IccTextTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccTextTagDataEntry output = reader.ReadTextTagDataEntry(size); IccTextTagDataEntry output = reader.ReadTextTagDataEntry(size);
@ -302,7 +303,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUFix16ArrayTagDataEntry(byte[] data, IccUFix16ArrayTagDataEntry expected, uint size) internal void ReadUFix16ArrayTagDataEntry(byte[] data, IccUFix16ArrayTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccUFix16ArrayTagDataEntry output = reader.ReadUFix16ArrayTagDataEntry(size); IccUFix16ArrayTagDataEntry output = reader.ReadUFix16ArrayTagDataEntry(size);
@ -315,7 +316,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUInt16ArrayTagDataEntry(byte[] data, IccUInt16ArrayTagDataEntry expected, uint size) internal void ReadUInt16ArrayTagDataEntry(byte[] data, IccUInt16ArrayTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccUInt16ArrayTagDataEntry output = reader.ReadUInt16ArrayTagDataEntry(size); IccUInt16ArrayTagDataEntry output = reader.ReadUInt16ArrayTagDataEntry(size);
@ -328,7 +329,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUInt32ArrayTagDataEntry(byte[] data, IccUInt32ArrayTagDataEntry expected, uint size) internal void ReadUInt32ArrayTagDataEntry(byte[] data, IccUInt32ArrayTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccUInt32ArrayTagDataEntry output = reader.ReadUInt32ArrayTagDataEntry(size); IccUInt32ArrayTagDataEntry output = reader.ReadUInt32ArrayTagDataEntry(size);
@ -341,7 +342,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUInt64ArrayTagDataEntry(byte[] data, IccUInt64ArrayTagDataEntry expected, uint size) internal void ReadUInt64ArrayTagDataEntry(byte[] data, IccUInt64ArrayTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccUInt64ArrayTagDataEntry output = reader.ReadUInt64ArrayTagDataEntry(size); IccUInt64ArrayTagDataEntry output = reader.ReadUInt64ArrayTagDataEntry(size);
@ -354,7 +355,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUInt8ArrayTagDataEntry(byte[] data, IccUInt8ArrayTagDataEntry expected, uint size) internal void ReadUInt8ArrayTagDataEntry(byte[] data, IccUInt8ArrayTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccUInt8ArrayTagDataEntry output = reader.ReadUInt8ArrayTagDataEntry(size); IccUInt8ArrayTagDataEntry output = reader.ReadUInt8ArrayTagDataEntry(size);
@ -367,7 +368,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadViewingConditionsTagDataEntry(byte[] data, IccViewingConditionsTagDataEntry expected) internal void ReadViewingConditionsTagDataEntry(byte[] data, IccViewingConditionsTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccViewingConditionsTagDataEntry output = reader.ReadViewingConditionsTagDataEntry(); IccViewingConditionsTagDataEntry output = reader.ReadViewingConditionsTagDataEntry();
@ -380,7 +381,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadXyzTagDataEntry(byte[] data, IccXyzTagDataEntry expected, uint size) internal void ReadXyzTagDataEntry(byte[] data, IccXyzTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccXyzTagDataEntry output = reader.ReadXyzTagDataEntry(size); IccXyzTagDataEntry output = reader.ReadXyzTagDataEntry(size);
@ -393,7 +394,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadTextDescriptionTagDataEntry(byte[] data, IccTextDescriptionTagDataEntry expected) internal void ReadTextDescriptionTagDataEntry(byte[] data, IccTextDescriptionTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccTextDescriptionTagDataEntry output = reader.ReadTextDescriptionTagDataEntry(); IccTextDescriptionTagDataEntry output = reader.ReadTextDescriptionTagDataEntry();
@ -406,7 +407,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadCrdInfoTagDataEntry(byte[] data, IccCrdInfoTagDataEntry expected) internal void ReadCrdInfoTagDataEntry(byte[] data, IccCrdInfoTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccCrdInfoTagDataEntry output = reader.ReadCrdInfoTagDataEntry(); IccCrdInfoTagDataEntry output = reader.ReadCrdInfoTagDataEntry();
@ -419,7 +420,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadScreeningTagDataEntry(byte[] data, IccScreeningTagDataEntry expected) internal void ReadScreeningTagDataEntry(byte[] data, IccScreeningTagDataEntry expected)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccScreeningTagDataEntry output = reader.ReadScreeningTagDataEntry(); IccScreeningTagDataEntry output = reader.ReadScreeningTagDataEntry();
@ -432,14 +433,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))] MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUcrBgTagDataEntry(byte[] data, IccUcrBgTagDataEntry expected, uint size) internal void ReadUcrBgTagDataEntry(byte[] data, IccUcrBgTagDataEntry expected, uint size)
{ {
IccDataReader reader = this.CreateReader(data); IccDataReader reader = CreateReader(data);
IccUcrBgTagDataEntry output = reader.ReadUcrBgTagDataEntry(size); IccUcrBgTagDataEntry output = reader.ReadUcrBgTagDataEntry(size);
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataReader CreateReader(byte[] data) private static IccDataReader CreateReader(byte[] data)
{ {
return new IccDataReader(data); return new IccDataReader(data);
} }

5
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs

@ -1,12 +1,13 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{ {
[Trait("Profile", "Icc")]
public class IccDataReaderTests public class IccDataReaderTests
{ {
[Fact] [Fact]

17
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterCurvesTests public class IccDataWriterCurvesTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataCurves.OneDimensionalCurveTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.OneDimensionalCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void WriteOneDimensionalCurve(byte[] expected, IccOneDimensionalCurve data) internal void WriteOneDimensionalCurve(byte[] expected, IccOneDimensionalCurve data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteOneDimensionalCurve(data); writer.WriteOneDimensionalCurve(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.ResponseCurveTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.ResponseCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void WriteResponseCurve(byte[] expected, IccResponseCurve data, int channelCount) internal void WriteResponseCurve(byte[] expected, IccResponseCurve data, int channelCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteResponseCurve(data); writer.WriteResponseCurve(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.ParametricCurveTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.ParametricCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void WriteParametricCurve(byte[] expected, IccParametricCurve data) internal void WriteParametricCurve(byte[] expected, IccParametricCurve data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteParametricCurve(data); writer.WriteParametricCurve(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.CurveSegmentTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.CurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void WriteCurveSegment(byte[] expected, IccCurveSegment data) internal void WriteCurveSegment(byte[] expected, IccCurveSegment data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteCurveSegment(data); writer.WriteCurveSegment(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -60,7 +61,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.FormulaCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.FormulaCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void WriteFormulaCurveElement(byte[] expected, IccFormulaCurveElement data) internal void WriteFormulaCurveElement(byte[] expected, IccFormulaCurveElement data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteFormulaCurveElement(data); writer.WriteFormulaCurveElement(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -72,7 +73,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.SampledCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))] [MemberData(nameof(IccTestDataCurves.SampledCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void WriteSampledCurveElement(byte[] expected, IccSampledCurveElement data) internal void WriteSampledCurveElement(byte[] expected, IccSampledCurveElement data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteSampledCurveElement(data); writer.WriteSampledCurveElement(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -80,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

17
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterLutTests public class IccDataWriterLutTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClutAll(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, bool isFloat) internal void WriteClutAll(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, bool isFloat)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut(data); writer.WriteClut(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClut8(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClut8(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut8(data); writer.WriteClut8(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClut16(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClut16(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut16(data); writer.WriteClut16(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClutF32(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClutF32(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClutF32(data); writer.WriteClutF32(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -60,7 +61,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteLut8(byte[] expected, IccLut data) internal void WriteLut8(byte[] expected, IccLut data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLut8(data); writer.WriteLut8(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -72,7 +73,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteLut16(byte[] expected, IccLut data, int count) internal void WriteLut16(byte[] expected, IccLut data, int count)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLut16(data); writer.WriteLut16(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -80,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

17
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterLutTests1 public class IccDataWriterLutTests1
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClutAll(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, bool isFloat) internal void WriteClutAll(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, bool isFloat)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut(data); writer.WriteClut(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClut8(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClut8(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut8(data); writer.WriteClut8(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClut16(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClut16(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut16(data); writer.WriteClut16(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClutF32(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClutF32(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClutF32(data); writer.WriteClutF32(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -60,7 +61,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteLut8(byte[] expected, IccLut data) internal void WriteLut8(byte[] expected, IccLut data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLut8(data); writer.WriteLut8(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -72,7 +73,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteLut16(byte[] expected, IccLut data, int count) internal void WriteLut16(byte[] expected, IccLut data, int count)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLut16(data); writer.WriteLut16(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -80,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

17
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterLutTests2 public class IccDataWriterLutTests2
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClutAll(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, bool isFloat) internal void WriteClutAll(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, bool isFloat)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut(data); writer.WriteClut(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClut8(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClut8(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut8(data); writer.WriteClut8(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClut16(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClut16(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClut16(data); writer.WriteClut16(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClutF32(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount) internal void WriteClutF32(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClutF32(data); writer.WriteClutF32(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -60,7 +61,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteLut8(byte[] expected, IccLut data) internal void WriteLut8(byte[] expected, IccLut data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLut8(data); writer.WriteLut8(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -72,7 +73,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))] [MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteLut16(byte[] expected, IccLut data, int count) internal void WriteLut16(byte[] expected, IccLut data, int count)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLut16(data); writer.WriteLut16(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -80,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

17
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs

@ -6,17 +6,16 @@ using System.Numerics;
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
using SixLabors.ImageSharp; [Trait("Profile", "Icc")]
public class IccDataWriterMatrixTests public class IccDataWriterMatrixTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataMatrix.Matrix2D_FloatArrayTestData), MemberType = typeof(IccTestDataMatrix))] [MemberData(nameof(IccTestDataMatrix.Matrix2D_FloatArrayTestData), MemberType = typeof(IccTestDataMatrix))]
public void WriteMatrix2D_Array(byte[] expected, int xCount, int yCount, bool isSingle, float[,] data) public void WriteMatrix2D_Array(byte[] expected, int xCount, int yCount, bool isSingle, float[,] data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMatrix(data, isSingle); writer.WriteMatrix(data, isSingle);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -28,7 +27,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix2D_Matrix4x4TestData), MemberType = typeof(IccTestDataMatrix))] [MemberData(nameof(IccTestDataMatrix.Matrix2D_Matrix4x4TestData), MemberType = typeof(IccTestDataMatrix))]
public void WriteMatrix2D_Matrix4x4(byte[] expected, int xCount, int yCount, bool isSingle, Matrix4x4 data) public void WriteMatrix2D_Matrix4x4(byte[] expected, int xCount, int yCount, bool isSingle, Matrix4x4 data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMatrix(data, isSingle); writer.WriteMatrix(data, isSingle);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -40,7 +39,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix2D_DenseMatrixTestData), MemberType = typeof(IccTestDataMatrix))] [MemberData(nameof(IccTestDataMatrix.Matrix2D_DenseMatrixTestData), MemberType = typeof(IccTestDataMatrix))]
internal void WriteMatrix2D_DenseMatrix(byte[] expected, int xCount, int yCount, bool isSingle, in DenseMatrix<float> data) internal void WriteMatrix2D_DenseMatrix(byte[] expected, int xCount, int yCount, bool isSingle, in DenseMatrix<float> data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMatrix(data, isSingle); writer.WriteMatrix(data, isSingle);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -52,7 +51,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix1D_ArrayTestData), MemberType = typeof(IccTestDataMatrix))] [MemberData(nameof(IccTestDataMatrix.Matrix1D_ArrayTestData), MemberType = typeof(IccTestDataMatrix))]
public void WriteMatrix1D_Array(byte[] expected, int yCount, bool isSingle, float[] data) public void WriteMatrix1D_Array(byte[] expected, int yCount, bool isSingle, float[] data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMatrix(data, isSingle); writer.WriteMatrix(data, isSingle);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -64,7 +63,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix1D_Vector3TestData), MemberType = typeof(IccTestDataMatrix))] [MemberData(nameof(IccTestDataMatrix.Matrix1D_Vector3TestData), MemberType = typeof(IccTestDataMatrix))]
public void WriteMatrix1D_Vector3(byte[] expected, int yCount, bool isSingle, Vector3 data) public void WriteMatrix1D_Vector3(byte[] expected, int yCount, bool isSingle, Vector3 data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMatrix(data, isSingle); writer.WriteMatrix(data, isSingle);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -72,7 +71,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

13
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterMultiProcessElementTests public class IccDataWriterMultiProcessElementTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataMultiProcessElements.MultiProcessElementTestData), MemberType = typeof(IccTestDataMultiProcessElements))] [MemberData(nameof(IccTestDataMultiProcessElements.MultiProcessElementTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void WriteMultiProcessElement(byte[] expected, IccMultiProcessElement data) internal void WriteMultiProcessElement(byte[] expected, IccMultiProcessElement data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMultiProcessElement(data); writer.WriteMultiProcessElement(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.CurveSetTestData), MemberType = typeof(IccTestDataMultiProcessElements))] [MemberData(nameof(IccTestDataMultiProcessElements.CurveSetTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void WriteCurveSetProcessElement(byte[] expected, IccCurveSetProcessElement data, int inChannelCount, int outChannelCount) internal void WriteCurveSetProcessElement(byte[] expected, IccCurveSetProcessElement data, int inChannelCount, int outChannelCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteCurveSetProcessElement(data); writer.WriteCurveSetProcessElement(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.MatrixTestData), MemberType = typeof(IccTestDataMultiProcessElements))] [MemberData(nameof(IccTestDataMultiProcessElements.MatrixTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void WriteMatrixProcessElement(byte[] expected, IccMatrixProcessElement data, int inChannelCount, int outChannelCount) internal void WriteMatrixProcessElement(byte[] expected, IccMatrixProcessElement data, int inChannelCount, int outChannelCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMatrixProcessElement(data); writer.WriteMatrixProcessElement(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.ClutTestData), MemberType = typeof(IccTestDataMultiProcessElements))] [MemberData(nameof(IccTestDataMultiProcessElements.ClutTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void WriteClutProcessElement(byte[] expected, IccClutProcessElement data, int inChannelCount, int outChannelCount) internal void WriteClutProcessElement(byte[] expected, IccClutProcessElement data, int inChannelCount, int outChannelCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteClutProcessElement(data); writer.WriteClutProcessElement(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

23
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs

@ -6,15 +6,16 @@ using System.Numerics;
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterNonPrimitivesTests public class IccDataWriterNonPrimitivesTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataNonPrimitives.DateTimeTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.DateTimeTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void WriteDateTime(byte[] expected, DateTime data) public void WriteDateTime(byte[] expected, DateTime data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteDateTime(data); writer.WriteDateTime(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -26,7 +27,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.VersionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.VersionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void WriteVersionNumber(byte[] expected, IccVersion data) public void WriteVersionNumber(byte[] expected, IccVersion data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteVersionNumber(data); writer.WriteVersionNumber(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -38,7 +39,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.XyzNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.XyzNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void WriteXyzNumber(byte[] expected, Vector3 data) public void WriteXyzNumber(byte[] expected, Vector3 data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteXyzNumber(data); writer.WriteXyzNumber(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -50,7 +51,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ProfileIdTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ProfileIdTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteProfileId(byte[] expected, IccProfileId data) internal void WriteProfileId(byte[] expected, IccProfileId data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteProfileId(data); writer.WriteProfileId(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -62,7 +63,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.PositionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.PositionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WritePositionNumber(byte[] expected, IccPositionNumber data) internal void WritePositionNumber(byte[] expected, IccPositionNumber data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WritePositionNumber(data); writer.WritePositionNumber(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -74,7 +75,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ResponseNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ResponseNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteResponseNumber(byte[] expected, IccResponseNumber data) internal void WriteResponseNumber(byte[] expected, IccResponseNumber data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteResponseNumber(data); writer.WriteResponseNumber(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -86,7 +87,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.NamedColorTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.NamedColorTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteNamedColor(byte[] expected, IccNamedColor data, uint coordinateCount) internal void WriteNamedColor(byte[] expected, IccNamedColor data, uint coordinateCount)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteNamedColor(data); writer.WriteNamedColor(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -98,7 +99,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ProfileDescriptionWriteTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ProfileDescriptionWriteTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteProfileDescription(byte[] expected, IccProfileDescription data) internal void WriteProfileDescription(byte[] expected, IccProfileDescription data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteProfileDescription(data); writer.WriteProfileDescription(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -110,7 +111,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ScreeningChannelTestData), MemberType = typeof(IccTestDataNonPrimitives))] [MemberData(nameof(IccTestDataNonPrimitives.ScreeningChannelTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteScreeningChannel(byte[] expected, IccScreeningChannel data) internal void WriteScreeningChannel(byte[] expected, IccScreeningChannel data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteScreeningChannel(data); writer.WriteScreeningChannel(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -118,7 +119,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

23
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs

@ -5,15 +5,16 @@ using System;
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterPrimitivesTests public class IccDataWriterPrimitivesTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataPrimitives.AsciiWriteTestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.AsciiWriteTestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteAsciiString(byte[] expected, string data) public void WriteAsciiString(byte[] expected, string data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteAsciiString(data); writer.WriteAsciiString(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -25,7 +26,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.AsciiPaddingTestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.AsciiPaddingTestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteAsciiStringPadded(byte[] expected, int length, string data, bool ensureNullTerminator) public void WriteAsciiStringPadded(byte[] expected, int length, string data, bool ensureNullTerminator)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteAsciiString(data, length, ensureNullTerminator); writer.WriteAsciiString(data, length, ensureNullTerminator);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact] [Fact]
public void WriteAsciiStringWithNullWritesEmpty() public void WriteAsciiStringWithNullWritesEmpty()
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
int count = writer.WriteAsciiString(null); int count = writer.WriteAsciiString(null);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact] [Fact]
public void WriteAsciiStringWithNegativeLengthThrowsArgumentException() public void WriteAsciiStringWithNegativeLengthThrowsArgumentException()
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
Assert.Throws<ArgumentOutOfRangeException>(() => writer.WriteAsciiString("abcd", -1, false)); Assert.Throws<ArgumentOutOfRangeException>(() => writer.WriteAsciiString("abcd", -1, false));
} }
@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact] [Fact]
public void WriteUnicodeStringWithNullWritesEmpty() public void WriteUnicodeStringWithNullWritesEmpty()
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
int count = writer.WriteUnicodeString(null); int count = writer.WriteUnicodeString(null);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -69,7 +70,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.Fix16TestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.Fix16TestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteFix16(byte[] expected, float data) public void WriteFix16(byte[] expected, float data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteFix16(data); writer.WriteFix16(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -81,7 +82,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.UFix16TestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.UFix16TestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteUFix16(byte[] expected, float data) public void WriteUFix16(byte[] expected, float data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUFix16(data); writer.WriteUFix16(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -93,7 +94,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.U1Fix15TestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.U1Fix15TestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteU1Fix15(byte[] expected, float data) public void WriteU1Fix15(byte[] expected, float data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteU1Fix15(data); writer.WriteU1Fix15(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -105,7 +106,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.UFix8TestData), MemberType = typeof(IccTestDataPrimitives))] [MemberData(nameof(IccTestDataPrimitives.UFix8TestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteUFix8(byte[] expected, float data) public void WriteUFix8(byte[] expected, float data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUFix8(data); writer.WriteUFix8(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -113,7 +114,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

71
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterTagDataEntryTests public class IccDataWriterTagDataEntryTests
{ {
[Theory] [Theory]
[MemberData(nameof(IccTestDataTagDataEntry.UnknownTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.UnknownTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteUnknownTagDataEntry(byte[] expected, IccUnknownTagDataEntry data, uint size) internal void WriteUnknownTagDataEntry(byte[] expected, IccUnknownTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUnknownTagDataEntry(data); writer.WriteUnknownTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ChromaticityTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ChromaticityTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteChromaticityTagDataEntry(byte[] expected, IccChromaticityTagDataEntry data) internal void WriteChromaticityTagDataEntry(byte[] expected, IccChromaticityTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteChromaticityTagDataEntry(data); writer.WriteChromaticityTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ColorantOrderTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ColorantOrderTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteColorantOrderTagDataEntry(byte[] expected, IccColorantOrderTagDataEntry data) internal void WriteColorantOrderTagDataEntry(byte[] expected, IccColorantOrderTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteColorantOrderTagDataEntry(data); writer.WriteColorantOrderTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ColorantTableTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ColorantTableTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteColorantTableTagDataEntry(byte[] expected, IccColorantTableTagDataEntry data) internal void WriteColorantTableTagDataEntry(byte[] expected, IccColorantTableTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteColorantTableTagDataEntry(data); writer.WriteColorantTableTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -60,7 +61,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.CurveTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.CurveTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteCurveTagDataEntry(byte[] expected, IccCurveTagDataEntry data) internal void WriteCurveTagDataEntry(byte[] expected, IccCurveTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteCurveTagDataEntry(data); writer.WriteCurveTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -72,7 +73,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.DataTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.DataTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteDataTagDataEntry(byte[] expected, IccDataTagDataEntry data, uint size) internal void WriteDataTagDataEntry(byte[] expected, IccDataTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteDataTagDataEntry(data); writer.WriteDataTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -84,7 +85,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.DateTimeTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.DateTimeTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteDateTimeTagDataEntry(byte[] expected, IccDateTimeTagDataEntry data) internal void WriteDateTimeTagDataEntry(byte[] expected, IccDateTimeTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteDateTimeTagDataEntry(data); writer.WriteDateTimeTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -96,7 +97,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.Lut16TagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.Lut16TagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteLut16TagDataEntry(byte[] expected, IccLut16TagDataEntry data) internal void WriteLut16TagDataEntry(byte[] expected, IccLut16TagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLut16TagDataEntry(data); writer.WriteLut16TagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -108,7 +109,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.Lut8TagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.Lut8TagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteLut8TagDataEntry(byte[] expected, IccLut8TagDataEntry data) internal void WriteLut8TagDataEntry(byte[] expected, IccLut8TagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLut8TagDataEntry(data); writer.WriteLut8TagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -120,7 +121,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.LutAToBTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.LutAToBTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteLutAToBTagDataEntry(byte[] expected, IccLutAToBTagDataEntry data) internal void WriteLutAToBTagDataEntry(byte[] expected, IccLutAToBTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLutAtoBTagDataEntry(data); writer.WriteLutAtoBTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -132,7 +133,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.LutBToATagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.LutBToATagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteLutBToATagDataEntry(byte[] expected, IccLutBToATagDataEntry data) internal void WriteLutBToATagDataEntry(byte[] expected, IccLutBToATagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteLutBtoATagDataEntry(data); writer.WriteLutBtoATagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -144,7 +145,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.MeasurementTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.MeasurementTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteMeasurementTagDataEntry(byte[] expected, IccMeasurementTagDataEntry data) internal void WriteMeasurementTagDataEntry(byte[] expected, IccMeasurementTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMeasurementTagDataEntry(data); writer.WriteMeasurementTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -156,7 +157,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.MultiLocalizedUnicodeTagDataEntryTestData_Write), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.MultiLocalizedUnicodeTagDataEntryTestData_Write), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteMultiLocalizedUnicodeTagDataEntry(byte[] expected, IccMultiLocalizedUnicodeTagDataEntry data) internal void WriteMultiLocalizedUnicodeTagDataEntry(byte[] expected, IccMultiLocalizedUnicodeTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMultiLocalizedUnicodeTagDataEntry(data); writer.WriteMultiLocalizedUnicodeTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -168,7 +169,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.MultiProcessElementsTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.MultiProcessElementsTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteMultiProcessElementsTagDataEntry(byte[] expected, IccMultiProcessElementsTagDataEntry data) internal void WriteMultiProcessElementsTagDataEntry(byte[] expected, IccMultiProcessElementsTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteMultiProcessElementsTagDataEntry(data); writer.WriteMultiProcessElementsTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -180,7 +181,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.NamedColor2TagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.NamedColor2TagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteNamedColor2TagDataEntry(byte[] expected, IccNamedColor2TagDataEntry data) internal void WriteNamedColor2TagDataEntry(byte[] expected, IccNamedColor2TagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteNamedColor2TagDataEntry(data); writer.WriteNamedColor2TagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -192,7 +193,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ParametricCurveTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ParametricCurveTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteParametricCurveTagDataEntry(byte[] expected, IccParametricCurveTagDataEntry data) internal void WriteParametricCurveTagDataEntry(byte[] expected, IccParametricCurveTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteParametricCurveTagDataEntry(data); writer.WriteParametricCurveTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -204,7 +205,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ProfileSequenceDescTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ProfileSequenceDescTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteProfileSequenceDescTagDataEntry(byte[] expected, IccProfileSequenceDescTagDataEntry data) internal void WriteProfileSequenceDescTagDataEntry(byte[] expected, IccProfileSequenceDescTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteProfileSequenceDescTagDataEntry(data); writer.WriteProfileSequenceDescTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -216,7 +217,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ProfileSequenceIdentifierTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ProfileSequenceIdentifierTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteProfileSequenceIdentifierTagDataEntry(byte[] expected, IccProfileSequenceIdentifierTagDataEntry data) internal void WriteProfileSequenceIdentifierTagDataEntry(byte[] expected, IccProfileSequenceIdentifierTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteProfileSequenceIdentifierTagDataEntry(data); writer.WriteProfileSequenceIdentifierTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -228,7 +229,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ResponseCurveSet16TagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ResponseCurveSet16TagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteResponseCurveSet16TagDataEntry(byte[] expected, IccResponseCurveSet16TagDataEntry data) internal void WriteResponseCurveSet16TagDataEntry(byte[] expected, IccResponseCurveSet16TagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteResponseCurveSet16TagDataEntry(data); writer.WriteResponseCurveSet16TagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -240,7 +241,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.Fix16ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.Fix16ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteFix16ArrayTagDataEntry(byte[] expected, IccFix16ArrayTagDataEntry data, uint size) internal void WriteFix16ArrayTagDataEntry(byte[] expected, IccFix16ArrayTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteFix16ArrayTagDataEntry(data); writer.WriteFix16ArrayTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -252,7 +253,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.SignatureTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.SignatureTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteSignatureTagDataEntry(byte[] expected, IccSignatureTagDataEntry data) internal void WriteSignatureTagDataEntry(byte[] expected, IccSignatureTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteSignatureTagDataEntry(data); writer.WriteSignatureTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -264,7 +265,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.TextTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.TextTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteTextTagDataEntry(byte[] expected, IccTextTagDataEntry data, uint size) internal void WriteTextTagDataEntry(byte[] expected, IccTextTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteTextTagDataEntry(data); writer.WriteTextTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -276,7 +277,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.UFix16ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.UFix16ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteUFix16ArrayTagDataEntry(byte[] expected, IccUFix16ArrayTagDataEntry data, uint size) internal void WriteUFix16ArrayTagDataEntry(byte[] expected, IccUFix16ArrayTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUFix16ArrayTagDataEntry(data); writer.WriteUFix16ArrayTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -288,7 +289,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.UInt16ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.UInt16ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteUInt16ArrayTagDataEntry(byte[] expected, IccUInt16ArrayTagDataEntry data, uint size) internal void WriteUInt16ArrayTagDataEntry(byte[] expected, IccUInt16ArrayTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUInt16ArrayTagDataEntry(data); writer.WriteUInt16ArrayTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -300,7 +301,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.UInt32ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.UInt32ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteUInt32ArrayTagDataEntry(byte[] expected, IccUInt32ArrayTagDataEntry data, uint size) internal void WriteUInt32ArrayTagDataEntry(byte[] expected, IccUInt32ArrayTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUInt32ArrayTagDataEntry(data); writer.WriteUInt32ArrayTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -312,7 +313,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.UInt64ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.UInt64ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteUInt64ArrayTagDataEntry(byte[] expected, IccUInt64ArrayTagDataEntry data, uint size) internal void WriteUInt64ArrayTagDataEntry(byte[] expected, IccUInt64ArrayTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUInt64ArrayTagDataEntry(data); writer.WriteUInt64ArrayTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -324,7 +325,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.UInt8ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.UInt8ArrayTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteUInt8ArrayTagDataEntry(byte[] expected, IccUInt8ArrayTagDataEntry data, uint size) internal void WriteUInt8ArrayTagDataEntry(byte[] expected, IccUInt8ArrayTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUInt8ArrayTagDataEntry(data); writer.WriteUInt8ArrayTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -336,7 +337,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ViewingConditionsTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ViewingConditionsTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteViewingConditionsTagDataEntry(byte[] expected, IccViewingConditionsTagDataEntry data) internal void WriteViewingConditionsTagDataEntry(byte[] expected, IccViewingConditionsTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteViewingConditionsTagDataEntry(data); writer.WriteViewingConditionsTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -348,7 +349,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.XYZTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.XYZTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteXyzTagDataEntry(byte[] expected, IccXyzTagDataEntry data, uint size) internal void WriteXyzTagDataEntry(byte[] expected, IccXyzTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteXyzTagDataEntry(data); writer.WriteXyzTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -360,7 +361,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.TextDescriptionTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.TextDescriptionTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteTextDescriptionTagDataEntry(byte[] expected, IccTextDescriptionTagDataEntry data) internal void WriteTextDescriptionTagDataEntry(byte[] expected, IccTextDescriptionTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteTextDescriptionTagDataEntry(data); writer.WriteTextDescriptionTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -372,7 +373,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.CrdInfoTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.CrdInfoTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteCrdInfoTagDataEntry(byte[] expected, IccCrdInfoTagDataEntry data) internal void WriteCrdInfoTagDataEntry(byte[] expected, IccCrdInfoTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteCrdInfoTagDataEntry(data); writer.WriteCrdInfoTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -384,7 +385,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.ScreeningTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.ScreeningTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteScreeningTagDataEntry(byte[] expected, IccScreeningTagDataEntry data) internal void WriteScreeningTagDataEntry(byte[] expected, IccScreeningTagDataEntry data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteScreeningTagDataEntry(data); writer.WriteScreeningTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -396,7 +397,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataTagDataEntry.UcrBgTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))] [MemberData(nameof(IccTestDataTagDataEntry.UcrBgTagDataEntryTestData), MemberType = typeof(IccTestDataTagDataEntry))]
internal void WriteUcrBgTagDataEntry(byte[] expected, IccUcrBgTagDataEntry data, uint size) internal void WriteUcrBgTagDataEntry(byte[] expected, IccUcrBgTagDataEntry data, uint size)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteUcrBgTagDataEntry(data); writer.WriteUcrBgTagDataEntry(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -404,7 +405,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

21
tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs

@ -4,14 +4,15 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{ {
[Trait("Profile", "Icc")]
public class IccDataWriterTests public class IccDataWriterTests
{ {
[Fact] [Fact]
public void WriteEmpty() public void WriteEmpty()
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteEmpty(4); writer.WriteEmpty(4);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[InlineData(4, 4)] [InlineData(4, 4)]
public void WritePadding(int writePosition, int expectedLength) public void WritePadding(int writePosition, int expectedLength)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteEmpty(writePosition); writer.WriteEmpty(writePosition);
writer.WritePadding(); writer.WritePadding();
@ -37,7 +38,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataArray.UInt8TestData), MemberType = typeof(IccTestDataArray))] [MemberData(nameof(IccTestDataArray.UInt8TestData), MemberType = typeof(IccTestDataArray))]
public void WriteArrayUInt8(byte[] data, byte[] expected) public void WriteArrayUInt8(byte[] data, byte[] expected)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteArray(data); writer.WriteArray(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -49,7 +50,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataArray.UInt16TestData), MemberType = typeof(IccTestDataArray))] [MemberData(nameof(IccTestDataArray.UInt16TestData), MemberType = typeof(IccTestDataArray))]
public void WriteArrayUInt16(byte[] expected, ushort[] data) public void WriteArrayUInt16(byte[] expected, ushort[] data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteArray(data); writer.WriteArray(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -61,7 +62,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataArray.Int16TestData), MemberType = typeof(IccTestDataArray))] [MemberData(nameof(IccTestDataArray.Int16TestData), MemberType = typeof(IccTestDataArray))]
public void WriteArrayInt16(byte[] expected, short[] data) public void WriteArrayInt16(byte[] expected, short[] data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteArray(data); writer.WriteArray(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -73,7 +74,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataArray.UInt32TestData), MemberType = typeof(IccTestDataArray))] [MemberData(nameof(IccTestDataArray.UInt32TestData), MemberType = typeof(IccTestDataArray))]
public void WriteArrayUInt32(byte[] expected, uint[] data) public void WriteArrayUInt32(byte[] expected, uint[] data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteArray(data); writer.WriteArray(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -85,7 +86,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataArray.Int32TestData), MemberType = typeof(IccTestDataArray))] [MemberData(nameof(IccTestDataArray.Int32TestData), MemberType = typeof(IccTestDataArray))]
public void WriteArrayInt32(byte[] expected, int[] data) public void WriteArrayInt32(byte[] expected, int[] data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteArray(data); writer.WriteArray(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -97,7 +98,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataArray.UInt64TestData), MemberType = typeof(IccTestDataArray))] [MemberData(nameof(IccTestDataArray.UInt64TestData), MemberType = typeof(IccTestDataArray))]
public void WriteArrayUInt64(byte[] expected, ulong[] data) public void WriteArrayUInt64(byte[] expected, ulong[] data)
{ {
IccDataWriter writer = this.CreateWriter(); using IccDataWriter writer = CreateWriter();
writer.WriteArray(data); writer.WriteArray(data);
byte[] output = writer.GetData(); byte[] output = writer.GetData();
@ -105,7 +106,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output); Assert.Equal(expected, output);
} }
private IccDataWriter CreateWriter() private static IccDataWriter CreateWriter()
{ {
return new IccDataWriter(); return new IccDataWriter();
} }

3
tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs

@ -5,8 +5,9 @@ using System;
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Icc
{ {
[Trait("Profile", "Icc")]
public class IccProfileTests public class IccProfileTests
{ {
[Theory] [Theory]

3
tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs

@ -4,8 +4,9 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Icc
{ {
[Trait("Profile", "Icc")]
public class IccReaderTests public class IccReaderTests
{ {
[Fact] [Fact]

3
tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs

@ -4,8 +4,9 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Icc
{ {
[Trait("Profile", "Icc")]
public class IccWriterTests public class IccWriterTests
{ {
[Fact] [Fact]

7
tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs

@ -1,11 +1,12 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.Various
{ {
[Trait("Profile", "Icc")]
public class IccProfileIdTests public class IccProfileIdTests
{ {
[Fact] [Fact]
@ -29,4 +30,4 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(4u, id.Part4); Assert.Equal(4u, id.Part4);
} }
} }
} }

6
tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs

@ -34,7 +34,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC
// arrange // arrange
var profile = new IptcProfile(); var profile = new IptcProfile();
var value = new string('s', tag.MaxLength() + 1); var value = new string('s', tag.MaxLength() + 1);
var expectedLength = tag.MaxLength(); int expectedLength = tag.MaxLength();
// act // act
profile.SetValue(tag, value); profile.SetValue(tag, value);
@ -51,7 +51,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC
// arrange // arrange
var profile = new IptcProfile(); var profile = new IptcProfile();
var value = new string('s', tag.MaxLength() + 1); var value = new string('s', tag.MaxLength() + 1);
var expectedLength = value.Length; int expectedLength = value.Length;
// act // act
profile.SetValue(tag, value, false); profile.SetValue(tag, value, false);
@ -228,7 +228,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC
image.Metadata.IptcProfile.SetValue(IptcTag.Caption, expectedCaption); image.Metadata.IptcProfile.SetValue(IptcTag.Caption, expectedCaption);
// act // act
Image<Rgba32> reloadedImage = WriteAndReadJpeg(image); using Image<Rgba32> reloadedImage = WriteAndReadJpeg(image);
// assert // assert
IptcProfile actual = reloadedImage.Metadata.IptcProfile; IptcProfile actual = reloadedImage.Metadata.IptcProfile;

2
tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs

@ -110,7 +110,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelOperations
[Fact] [Fact]
public void PixelTypeInfoHasCorrectBitsPerPixel() public void PixelTypeInfoHasCorrectBitsPerPixel()
{ {
var bits = this.Operations.GetPixelTypeInfo().BitsPerPixel; int bits = this.Operations.GetPixelTypeInfo().BitsPerPixel;
Assert.Equal(Unsafe.SizeOf<TPixel>() * 8, bits); Assert.Equal(Unsafe.SizeOf<TPixel>() * 8, bits);
} }

6
tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs

@ -1,7 +1,7 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System.ComponentModel.DataAnnotations; using System;
using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
@ -10,7 +10,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing namespace SixLabors.ImageSharp.Tests.Processing
{ {
public abstract class BaseImageOperationsExtensionTest public abstract class BaseImageOperationsExtensionTest : IDisposable
{ {
protected readonly IImageProcessingContext operations; protected readonly IImageProcessingContext operations;
private readonly FakeImageOperationsProvider.FakeImageOperations<Rgba32> internalOperations; private readonly FakeImageOperationsProvider.FakeImageOperations<Rgba32> internalOperations;
@ -59,5 +59,7 @@ namespace SixLabors.ImageSharp.Tests.Processing
return Assert.IsType<T>(operation.GenericProcessor); return Assert.IsType<T>(operation.GenericProcessor);
} }
public void Dispose() => this.source?.Dispose();
} }
} }

9
tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs

@ -9,13 +9,14 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Binarization namespace SixLabors.ImageSharp.Tests.Processing.Binarization
{ {
[Trait("Category", "Processors")]
public class AdaptiveThresholdTests : BaseImageOperationsExtensionTest public class AdaptiveThresholdTests : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]
public void AdaptiveThreshold_UsesDefaults_Works() public void AdaptiveThreshold_UsesDefaults_Works()
{ {
// arrange // arrange
var expectedThresholdLimit = .85f; float expectedThresholdLimit = .85f;
Color expectedUpper = Color.White; Color expectedUpper = Color.White;
Color expectedLower = Color.Black; Color expectedLower = Color.Black;
@ -33,7 +34,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Binarization
public void AdaptiveThreshold_SettingThresholdLimit_Works() public void AdaptiveThreshold_SettingThresholdLimit_Works()
{ {
// arrange // arrange
var expectedThresholdLimit = .65f; float expectedThresholdLimit = .65f;
// act // act
this.operations.AdaptiveThreshold(expectedThresholdLimit); this.operations.AdaptiveThreshold(expectedThresholdLimit);
@ -65,7 +66,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Binarization
public void AdaptiveThreshold_SettingUpperLowerWithThresholdLimit_Works() public void AdaptiveThreshold_SettingUpperLowerWithThresholdLimit_Works()
{ {
// arrange // arrange
var expectedThresholdLimit = .77f; float expectedThresholdLimit = .77f;
Color expectedUpper = Color.HotPink; Color expectedUpper = Color.HotPink;
Color expectedLower = Color.Yellow; Color expectedLower = Color.Yellow;
@ -83,7 +84,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Binarization
public void AdaptiveThreshold_SettingUpperLowerWithThresholdLimit_WithRectangle_Works() public void AdaptiveThreshold_SettingUpperLowerWithThresholdLimit_WithRectangle_Works()
{ {
// arrange // arrange
var expectedThresholdLimit = .77f; float expectedThresholdLimit = .77f;
Color expectedUpper = Color.HotPink; Color expectedUpper = Color.HotPink;
Color expectedLower = Color.Yellow; Color expectedLower = Color.Yellow;

1
tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs

@ -8,6 +8,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Binarization namespace SixLabors.ImageSharp.Tests.Processing.Binarization
{ {
[Trait("Category", "Processors")]
public class BinaryThresholdTest : BaseImageOperationsExtensionTest public class BinaryThresholdTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

1
tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Binarization namespace SixLabors.ImageSharp.Tests.Processing.Binarization
{ {
[Trait("Category", "Processors")]
public class OrderedDitherFactoryTests public class OrderedDitherFactoryTests
{ {
#pragma warning disable SA1025 // Code should not contain multiple whitespace in a row #pragma warning disable SA1025 // Code should not contain multiple whitespace in a row

5
tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs

@ -1,4 +1,4 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Convolution
{ {
[Trait("Category", "Processors")]
public class BoxBlurTest : BaseImageOperationsExtensionTest public class BoxBlurTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]
@ -36,4 +37,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Convolution
Assert.Equal(5, processor.Radius); Assert.Equal(5, processor.Radius);
} }
} }
} }

1
tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs

@ -8,6 +8,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Convolution
{ {
[Trait("Category", "Processors")]
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1313:Parameter names should begin with lower-case letter", Justification = "OK. Used for TheoryData compatibility.")] [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1313:Parameter names should begin with lower-case letter", Justification = "OK. Used for TheoryData compatibility.")]
public class DetectEdgesTest : BaseImageOperationsExtensionTest public class DetectEdgesTest : BaseImageOperationsExtensionTest
{ {

5
tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs

@ -1,4 +1,4 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Convolution
{ {
[Trait("Category", "Processors")]
public class GaussianBlurTest : BaseImageOperationsExtensionTest public class GaussianBlurTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]
@ -36,4 +37,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Convolution
Assert.Equal(.6f, processor.Sigma); Assert.Equal(.6f, processor.Sigma);
} }
} }
} }

3
tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Convolution
{ {
[Trait("Category", "Processors")]
public class GaussianSharpenTest : BaseImageOperationsExtensionTest public class GaussianSharpenTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]
@ -36,4 +37,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Convolution
Assert.Equal(.6f, processor.Sigma); Assert.Equal(.6f, processor.Sigma);
} }
} }
} }

2
tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs

@ -5,7 +5,7 @@ using System;
using SixLabors.ImageSharp.Processing.Processors.Convolution; using SixLabors.ImageSharp.Processing.Processors.Convolution;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Convolution.Processors
{ {
public class LaplacianKernelFactoryTests public class LaplacianKernelFactoryTests
{ {

3
tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs

@ -6,8 +6,9 @@ using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Dithering; using SixLabors.ImageSharp.Processing.Processors.Dithering;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Binarization namespace SixLabors.ImageSharp.Tests.Processing.Dithering
{ {
[Trait("Category", "Processors")]
public class DitherTest : BaseImageOperationsExtensionTest public class DitherTest : BaseImageOperationsExtensionTest
{ {
private class Assert : Xunit.Assert private class Assert : Xunit.Assert

2
tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs

@ -3,11 +3,11 @@
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Overlays; using SixLabors.ImageSharp.Processing.Processors.Overlays;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects namespace SixLabors.ImageSharp.Tests.Processing.Effects
{ {
[Trait("Category", "Processors")]
public class BackgroundColorTest : BaseImageOperationsExtensionTest public class BackgroundColorTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

1
tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects namespace SixLabors.ImageSharp.Tests.Processing.Effects
{ {
[Trait("Category", "Processors")]
public class OilPaintTest : BaseImageOperationsExtensionTest public class OilPaintTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

3
tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects namespace SixLabors.ImageSharp.Tests.Processing.Effects
{ {
[Trait("Category", "Processors")]
public class PixelateTest : BaseImageOperationsExtensionTest public class PixelateTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]
@ -36,4 +37,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Effects
Assert.Equal(23, processor.Size); Assert.Equal(23, processor.Size);
} }
} }
} }

1
tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class BlackWhiteTest : BaseImageOperationsExtensionTest public class BlackWhiteTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

3
tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs

@ -6,8 +6,9 @@ using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters; using SixLabors.ImageSharp.Processing.Processors.Filters;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class BrightnessTest : BaseImageOperationsExtensionTest public class BrightnessTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

1
tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs

@ -12,6 +12,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class ColorBlindnessTest : BaseImageOperationsExtensionTest public class ColorBlindnessTest : BaseImageOperationsExtensionTest
{ {
public static IEnumerable<object[]> TheoryData = new[] public static IEnumerable<object[]> TheoryData = new[]

8
tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs

@ -1,13 +1,13 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
using SixLabors.ImageSharp.Processing; [Trait("Category", "Processors")]
using SixLabors.ImageSharp.Processing.Processors.Filters;
public class ContrastTest : BaseImageOperationsExtensionTest public class ContrastTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

6
tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs

@ -1,13 +1,13 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
using SixLabors.ImageSharp.Processing; [Trait("Category", "Processors")]
using SixLabors.ImageSharp.Processing.Processors.Filters;
public class FilterTest : BaseImageOperationsExtensionTest public class FilterTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

1
tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs

@ -12,6 +12,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class GrayscaleTest : BaseImageOperationsExtensionTest public class GrayscaleTest : BaseImageOperationsExtensionTest
{ {
public static IEnumerable<object[]> ModeTheoryData = new[] public static IEnumerable<object[]> ModeTheoryData = new[]

5
tests/ImageSharp.Tests/Processing/Filters/HueTest.cs

@ -1,4 +1,4 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
@ -8,6 +8,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class HueTest : BaseImageOperationsExtensionTest public class HueTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]
@ -28,4 +29,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Filters
Assert.Equal(5f, processor.Degrees); Assert.Equal(5f, processor.Degrees);
} }
} }
} }

3
tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs

@ -5,8 +5,9 @@ using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters; using SixLabors.ImageSharp.Processing.Processors.Filters;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class InvertTest : BaseImageOperationsExtensionTest public class InvertTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

1
tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class KodachromeTest : BaseImageOperationsExtensionTest public class KodachromeTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

3
tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs

@ -5,8 +5,9 @@ using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters; using SixLabors.ImageSharp.Processing.Processors.Filters;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class LightnessTest : BaseImageOperationsExtensionTest public class LightnessTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

10
tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs

@ -1,15 +1,13 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Tests.Processing; using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
using SixLabors.ImageSharp.Processing; [Trait("Category", "Processors")]
using SixLabors.ImageSharp.Processing.Processors.Filters;
public class LomographTest : BaseImageOperationsExtensionTest public class LomographTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

7
tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs

@ -1,12 +1,13 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters; using SixLabors.ImageSharp.Processing.Processors.Filters;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class OpacityTest : BaseImageOperationsExtensionTest public class OpacityTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]
@ -27,4 +28,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Effects
Assert.Equal(.6f, processor.Amount); Assert.Equal(.6f, processor.Amount);
} }
} }
} }

1
tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs

@ -8,6 +8,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class PolaroidTest : BaseImageOperationsExtensionTest public class PolaroidTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

5
tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs

@ -1,4 +1,4 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class SaturateTest : BaseImageOperationsExtensionTest public class SaturateTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]
@ -27,4 +28,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Filters
Assert.Equal(5, processor.Amount); Assert.Equal(5, processor.Amount);
} }
} }
} }

1
tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters namespace SixLabors.ImageSharp.Tests.Processing.Filters
{ {
[Trait("Category", "Processors")]
public class SepiaTest : BaseImageOperationsExtensionTest public class SepiaTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

2
tests/ImageSharp.Tests/Processing/ImageOperationTests.cs

@ -171,7 +171,7 @@ namespace SixLabors.ImageSharp.Tests.Processing
private static void CheckThrowsCorrectObjectDisposedException(Action action) private static void CheckThrowsCorrectObjectDisposedException(Action action)
{ {
var ex = Assert.Throws<ObjectDisposedException>(action); ObjectDisposedException ex = Assert.Throws<ObjectDisposedException>(action);
Assert.Equal(ExpectedExceptionMessage, ex.Message); Assert.Equal(ExpectedExceptionMessage, ex.Message);
} }
} }

5
tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs

@ -1,6 +1,7 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System;
using Moq; using Moq;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
@ -12,7 +13,7 @@ namespace SixLabors.ImageSharp.Tests.Processing
/// <summary> /// <summary>
/// Contains test cases for default <see cref="IImageProcessingContext"/> implementation. /// Contains test cases for default <see cref="IImageProcessingContext"/> implementation.
/// </summary> /// </summary>
public class ImageProcessingContextTests public class ImageProcessingContextTests : IDisposable
{ {
private readonly Image image = new Image<Rgba32>(10, 10); private readonly Image image = new Image<Rgba32>(10, 10);
@ -195,5 +196,7 @@ namespace SixLabors.ImageSharp.Tests.Processing
.Setup(p => p.CreatePixelSpecificProcessor(Configuration.Default, It.IsAny<Image<Rgba32>>(), It.IsAny<Rectangle>())) .Setup(p => p.CreatePixelSpecificProcessor(Configuration.Default, It.IsAny<Image<Rgba32>>(), It.IsAny<Rectangle>()))
.Returns(this.cloningProcessorImpl.Object); .Returns(this.cloningProcessorImpl.Object);
} }
public void Dispose() => this.image?.Dispose();
} }
} }

2
tests/ImageSharp.Tests/Processing/IntegralImageTests.cs

@ -6,7 +6,7 @@ using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Transforms namespace SixLabors.ImageSharp.Tests.Processing
{ {
public class IntegralImageTests : BaseImageOperationsExtensionTest public class IntegralImageTests : BaseImageOperationsExtensionTest
{ {

60
tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs

@ -10,6 +10,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Normalization namespace SixLabors.ImageSharp.Tests.Processing.Normalization
{ {
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
[Trait("Category", "Processors")]
public class HistogramEqualizationTests public class HistogramEqualizationTests
{ {
private static readonly ImageComparer ValidatorComparer = ImageComparer.TolerantPercentage(0.0456F); private static readonly ImageComparer ValidatorComparer = ImageComparer.TolerantPercentage(0.0456F);
@ -17,10 +18,10 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization
[Theory] [Theory]
[InlineData(256)] [InlineData(256)]
[InlineData(65536)] [InlineData(65536)]
public void GlobalHistogramEqualization_WithDifferentLumanceLevels(int luminanceLevels) public void GlobalHistogramEqualization_WithDifferentLuminanceLevels(int luminanceLevels)
{ {
// Arrange // Arrange
var pixels = new byte[] byte[] pixels =
{ {
52, 55, 61, 59, 70, 61, 76, 61, 52, 55, 61, 59, 70, 61, 76, 61,
62, 59, 55, 104, 94, 85, 59, 71, 62, 59, 55, 104, 94, 85, 59, 71,
@ -43,7 +44,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization
} }
} }
var expected = new byte[] byte[] expected =
{ {
0, 12, 53, 32, 146, 53, 174, 53, 0, 12, 53, 32, 146, 53, 174, 53,
57, 32, 12, 227, 219, 202, 32, 154, 57, 32, 12, 227, 219, 202, 32, 154,
@ -140,6 +141,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization
/// See: https://github.com/SixLabors/ImageSharp/pull/984 /// See: https://github.com/SixLabors/ImageSharp/pull/984
/// </summary> /// </summary>
/// <typeparam name="TPixel">The pixel type of the image.</typeparam> /// <typeparam name="TPixel">The pixel type of the image.</typeparam>
/// <param name="provider">The test image provider.</param>
[Theory] [Theory]
[WithTestPatternImages(110, 110, PixelTypes.Rgb24)] [WithTestPatternImages(110, 110, PixelTypes.Rgb24)]
[WithTestPatternImages(170, 170, PixelTypes.Rgb24)] [WithTestPatternImages(170, 170, PixelTypes.Rgb24)]
@ -149,17 +151,55 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization
using (Image<TPixel> image = provider.GetImage()) using (Image<TPixel> image = provider.GetImage())
{ {
var options = new HistogramEqualizationOptions() var options = new HistogramEqualizationOptions()
{ {
Method = HistogramEqualizationMethod.AdaptiveTileInterpolation, Method = HistogramEqualizationMethod.AdaptiveTileInterpolation,
LuminanceLevels = 256, LuminanceLevels = 256,
ClipHistogram = true, ClipHistogram = true,
ClipLimit = 5, ClipLimit = 5,
NumberOfTiles = 10 NumberOfTiles = 10
}; };
image.Mutate(x => x.HistogramEqualization(options)); image.Mutate(x => x.HistogramEqualization(options));
image.DebugSave(provider); image.DebugSave(provider);
image.CompareToReferenceOutput(ValidatorComparer, provider); image.CompareToReferenceOutput(ValidatorComparer, provider);
} }
} }
[Theory]
[WithTestPatternImages(5120, 9234, PixelTypes.L16)]
public unsafe void Issue1640<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel>
{
if (!TestEnvironment.Is64BitProcess)
{
return;
}
// https://github.com/SixLabors/ImageSharp/discussions/1640
// Test using isolated memory to ensure clean buffers for reference
provider.Configuration = Configuration.CreateDefaultInstance();
var options = new HistogramEqualizationOptions
{
Method = HistogramEqualizationMethod.AdaptiveTileInterpolation,
LuminanceLevels = 4096,
ClipHistogram = false,
ClipLimit = 350,
NumberOfTiles = 8
};
using Image<TPixel> image = provider.GetImage();
using Image<TPixel> referenceResult = image.Clone(ctx =>
{
ctx.HistogramEqualization(options);
ctx.Resize(image.Width / 4, image.Height / 4, KnownResamplers.Bicubic);
});
using Image<TPixel> processed = image.Clone(ctx =>
{
ctx.HistogramEqualization(options);
ctx.Resize(image.Width / 4, image.Height / 4, KnownResamplers.Bicubic);
});
ValidatorComparer.VerifySimilarity(referenceResult, processed);
}
} }
} }

3
tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs

@ -1,14 +1,13 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Overlays; using SixLabors.ImageSharp.Processing.Processors.Overlays;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Overlays namespace SixLabors.ImageSharp.Tests.Processing.Overlays
{ {
[Trait("Category", "Processors")]
public class GlowTest : BaseImageOperationsExtensionTest public class GlowTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

2
tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs

@ -3,11 +3,11 @@
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Overlays; using SixLabors.ImageSharp.Processing.Processors.Overlays;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Overlays namespace SixLabors.ImageSharp.Tests.Processing.Overlays
{ {
[Trait("Category", "Processors")]
public class VignetteTest : BaseImageOperationsExtensionTest public class VignetteTest : BaseImageOperationsExtensionTest
{ {
[Fact] [Fact]

1
tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs

@ -11,6 +11,7 @@ using Xunit;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization
{ {
[Trait("Category", "Processors")]
public class BinaryDitherTests public class BinaryDitherTests
{ {
public static readonly string[] CommonTestImages = public static readonly string[] CommonTestImages =

2
tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs

@ -4,12 +4,12 @@
using System.Globalization; using System.Globalization;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Binarization;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization
{ {
[Trait("Category", "Processors")]
public class BinaryThresholdTest public class BinaryThresholdTest
{ {
public static readonly TheoryData<float> BinaryThresholdValues public static readonly TheoryData<float> BinaryThresholdValues

1
tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs

@ -16,6 +16,7 @@ using Xunit.Abstractions;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{ {
[Trait("Category", "Processors")]
public class BokehBlurTest public class BokehBlurTest
{ {
private static readonly string Components10x2 = @" private static readonly string Components10x2 = @"

6
tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs

@ -1,10 +1,12 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{ {
[Trait("Category", "Processors")]
[GroupOutput("Convolution")] [GroupOutput("Convolution")]
public class BoxBlurTest : Basic1ParameterConvolutionTests public class BoxBlurTest : Basic1ParameterConvolutionTests
{ {
@ -13,4 +15,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
protected override void Apply(IImageProcessingContext ctx, int value, Rectangle bounds) => protected override void Apply(IImageProcessingContext ctx, int value, Rectangle bounds) =>
ctx.BoxBlur(value, bounds); ctx.BoxBlur(value, bounds);
} }
} }

1
tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs

@ -11,6 +11,7 @@ using Xunit;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{ {
[Trait("Category", "Processors")]
[GroupOutput("Convolution")] [GroupOutput("Convolution")]
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1313:Parameter names should begin with lower-case letter", Justification = "OK. Used for TheoryData compatibility.")] [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1313:Parameter names should begin with lower-case letter", Justification = "OK. Used for TheoryData compatibility.")]
public class DetectEdgesTest public class DetectEdgesTest

6
tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs

@ -1,10 +1,12 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{ {
[Trait("Category", "Processors")]
[GroupOutput("Convolution")] [GroupOutput("Convolution")]
public class GaussianBlurTest : Basic1ParameterConvolutionTests public class GaussianBlurTest : Basic1ParameterConvolutionTests
{ {
@ -13,4 +15,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
protected override void Apply(IImageProcessingContext ctx, int value, Rectangle bounds) => protected override void Apply(IImageProcessingContext ctx, int value, Rectangle bounds) =>
ctx.GaussianBlur(value, bounds); ctx.GaussianBlur(value, bounds);
} }
} }

4
tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs

@ -2,9 +2,11 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{ {
[Trait("Category", "Processors")]
[GroupOutput("Convolution")] [GroupOutput("Convolution")]
public class GaussianSharpenTest : Basic1ParameterConvolutionTests public class GaussianSharpenTest : Basic1ParameterConvolutionTests
{ {
@ -13,4 +15,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
protected override void Apply(IImageProcessingContext ctx, int value, Rectangle bounds) => protected override void Apply(IImageProcessingContext ctx, int value, Rectangle bounds) =>
ctx.GaussianSharpen(value, bounds); ctx.GaussianSharpen(value, bounds);
} }
} }

3
tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs

@ -8,8 +8,9 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization namespace SixLabors.ImageSharp.Tests.Processing.Processors.Dithering
{ {
[Trait("Category", "Processors")]
public class DitherTests public class DitherTests
{ {
public const PixelTypes CommonNonDefaultPixelTypes = public const PixelTypes CommonNonDefaultPixelTypes =

1
tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs

@ -8,6 +8,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
{ {
[Trait("Category", "Processors")]
[GroupOutput("Effects")] [GroupOutput("Effects")]
public class BackgroundColorTest public class BackgroundColorTest
{ {

1
tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs

@ -8,6 +8,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
{ {
[Trait("Category", "Processors")]
[GroupOutput("Effects")] [GroupOutput("Effects")]
public class OilPaintTest public class OilPaintTest
{ {

1
tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs

@ -11,6 +11,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
{ {
[Trait("Category", "Processors")]
[GroupOutput("Effects")] [GroupOutput("Effects")]
public class PixelShaderTest public class PixelShaderTest
{ {

3
tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs

@ -8,6 +8,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
{ {
[Trait("Category", "Processors")]
[GroupOutput("Effects")] [GroupOutput("Effects")]
public class PixelateTest public class PixelateTest
{ {
@ -30,4 +31,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
provider.RunRectangleConstrainedValidatingProcessorTest((x, rect) => x.Pixelate(value, rect), value); provider.RunRectangleConstrainedValidatingProcessorTest((x, rect) => x.Pixelate(value, rect), value);
} }
} }
} }

11
tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs

@ -1,15 +1,14 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{ {
using SixLabors.ImageSharp.Processing; [Trait("Category", "Processors")]
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
[GroupOutput("Filters")] [GroupOutput("Filters")]
public class BlackWhiteTest public class BlackWhiteTest
{ {
@ -21,4 +20,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
provider.RunValidatingProcessorTest(ctx => ctx.BlackWhite(), comparer: ImageComparer.TolerantPercentage(0.002f)); provider.RunValidatingProcessorTest(ctx => ctx.BlackWhite(), comparer: ImageComparer.TolerantPercentage(0.002f));
} }
} }
} }

9
tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs

@ -2,14 +2,13 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{ {
using SixLabors.ImageSharp.Processing; [Trait("Category", "Processors")]
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
[GroupOutput("Filters")] [GroupOutput("Filters")]
public class BrightnessTest public class BrightnessTest
{ {

11
tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs

@ -1,15 +1,14 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{ {
using SixLabors.ImageSharp.Processing; [Trait("Category", "Processors")]
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
[GroupOutput("Filters")] [GroupOutput("Filters")]
public class ColorBlindnessTest public class ColorBlindnessTest
{ {
@ -33,4 +32,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyColorBlindnessFilter<TPixel>(TestImageProvider<TPixel> provider, ColorBlindnessMode colorBlindness) public void ApplyColorBlindnessFilter<TPixel>(TestImageProvider<TPixel> provider, ColorBlindnessMode colorBlindness)
where TPixel : unmanaged, IPixel<TPixel> => provider.RunValidatingProcessorTest(x => x.ColorBlindness(colorBlindness), colorBlindness.ToString(), this.imageComparer); where TPixel : unmanaged, IPixel<TPixel> => provider.RunValidatingProcessorTest(x => x.ColorBlindness(colorBlindness), colorBlindness.ToString(), this.imageComparer);
} }
} }

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save