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)
{
DebugGuard.IsTrue(plane == -1, "Excepted Chunky planar.");
DebugGuard.IsTrue(plane == -1, "Expected Chunky planar.");
bitsPerPixel = this.BitsPerPixel;
}
else

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

@ -55,23 +55,38 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Writers
/// <inheritdoc />
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)
{
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();
int idx = 0;
for (int i = 0; i < rows4bit.Length; i++)
int idxPixels = 0;
int idx4bitRows = 0;
for (int row = 0; row < height; row++)
{
rows4bit[i] = (byte)((pixels[idx] << 4) | (pixels[idx + 1] & 0xF));
idx += 2;
for (int x = 0; x < halfWidth; x++)
{
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
{
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);
// 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,
// 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,
int clipLimit,
int numberOfTiles)
: base(luminanceLevels, clipHistogram, clipLimit)
{
this.NumberOfTiles = numberOfTiles;
}
: base(luminanceLevels, clipHistogram, clipLimit) => this.NumberOfTiles = numberOfTiles;
/// <summary>
/// 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 />
public override IImageProcessor<TPixel> CreatePixelSpecificProcessor<TPixel>(Configuration configuration, Image<TPixel> source, Rectangle sourceRectangle)
{
return new AdaptiveHistogramEqualizationProcessor<TPixel>(
=> new AdaptiveHistogramEqualizationProcessor<TPixel>(
configuration,
this.LuminanceLevels,
this.ClipHistogram,
@ -43,6 +39,5 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
this.NumberOfTiles,
source,
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 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;
// 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 int pixelsInTile;
private readonly int sourceWidth;
@ -596,6 +600,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
int y = this.tileYStartPositions[index].y;
int endY = Math.Min(y + this.tileHeight, this.sourceHeight);
Span<int> cdfMinSpan = this.cdfMinBuffer2D.GetRowSpan(cdfY);
cdfMinSpan.Clear();
using IMemoryOwner<int> histogramBuffer = this.allocator.Allocate<int>(this.luminanceLevels);
Span<int> histogram = histogramBuffer.GetSpan();

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

@ -49,44 +49,18 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// </summary>
/// <param name="options">The <see cref="HistogramEqualizationOptions"/>.</param>
/// <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)
{
case HistogramEqualizationMethod.Global:
processor = new GlobalHistogramEqualizationProcessor(
options.LuminanceLevels,
options.ClipHistogram,
options.ClipLimit);
break;
HistogramEqualizationMethod.AdaptiveTileInterpolation
=> new AdaptiveHistogramEqualizationProcessor(options.LuminanceLevels, options.ClipHistogram, options.ClipLimit, options.NumberOfTiles),
case HistogramEqualizationMethod.AdaptiveTileInterpolation:
processor = new AdaptiveHistogramEqualizationProcessor(
options.LuminanceLevels,
options.ClipHistogram,
options.ClipLimit,
options.NumberOfTiles);
break;
HistogramEqualizationMethod.AdaptiveSlidingWindow
=> new AdaptiveHistogramEqualizationSlidingWindowProcessor(options.LuminanceLevels, options.ClipHistogram, options.ClipLimit, options.NumberOfTiles),
case HistogramEqualizationMethod.AdaptiveSlidingWindow:
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;
}
_ => new GlobalHistogramEqualizationProcessor(options.LuminanceLevels, options.ClipHistogram, options.ClipLimit),
};
}
}

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

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

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

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

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

@ -176,7 +176,7 @@ namespace SixLabors.ImageSharp.Tests.Formats
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.
using SixLabors.ImageSharp.Formats.Gif;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Formats.Gif
namespace SixLabors.ImageSharp.Tests.Formats.Gif.Sections
{
public class GifGraphicControlExtensionTests
{
@ -18,4 +18,4 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
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.
using SixLabors.ImageSharp.Formats.Gif;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Formats.Gif
namespace SixLabors.ImageSharp.Tests.Formats.Gif.Sections
{
public class GifImageDescriptorTests
{
@ -21,4 +21,4 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
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.
using SixLabors.ImageSharp.Formats.Gif;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Formats.Gif
namespace SixLabors.ImageSharp.Tests.Formats.Gif.Sections
{
public class GifLogicalScreenDescriptorTests
{
@ -20,4 +20,4 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
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.PixelFormats;
using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils;
using SixLabors.ImageSharp.Tests.TestUtilities;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit;
@ -117,7 +118,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
[Theory]
[WithFile(TestImages.Jpeg.Baseline.Floorplan, 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>
{
provider.LimitAllocatorBufferCapacity().InBytesSqrt(10);
@ -127,60 +128,53 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
}
[Theory]
[InlineData(TestImages.Jpeg.Baseline.Jpeg420Small, 0)]
[InlineData(TestImages.Jpeg.Issues.ExifGetString750Transform, 1)]
[InlineData(TestImages.Jpeg.Issues.ExifGetString750Transform, 15)]
[InlineData(TestImages.Jpeg.Issues.ExifGetString750Transform, 30)]
[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)
[InlineData(0)]
[InlineData(0.5)]
[InlineData(0.9)]
public async Task Decode_IsCancellable(int percentageOfStreamReadToCancel)
{
// Decoding these huge files took 300ms on i7-8650U in 2020. 30ms should be safe for cancellation delay.
string hugeFile = Path.Combine(
TestEnvironment.InputImagesDirectoryFullPath,
fileName);
const int NumberOfRuns = 5;
for (int i = 0; i < NumberOfRuns; i++)
var cts = new CancellationTokenSource();
var file = Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, TestImages.Jpeg.Baseline.Jpeg420Small);
using var pausedStream = new PausedStream(file);
pausedStream.OnWaiting(s =>
{
var cts = new CancellationTokenSource();
if (cancellationDelayMs == 0)
if (s.Position >= s.Length * percentageOfStreamReadToCancel)
{
cts.Cancel();
pausedStream.Release();
}
else
{
cts.CancelAfter(cancellationDelayMs);
}
try
{
using var image = await Image.LoadAsync(hugeFile, cts.Token);
}
catch (TaskCanceledException)
{
// Succesfully observed a cancellation
return;
// allows this/next wait to unblock
pausedStream.Next();
}
}
});
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.")]
[InlineData(TestImages.Jpeg.Baseline.Exif)]
[InlineData(TestImages.Jpeg.Progressive.Bad.ExifUndefType)]
public async Task Identify_IsCancellable(string fileName)
[Fact]
public async Task Identify_IsCancellable()
{
string file = Path.Combine(
TestEnvironment.InputImagesDirectoryFullPath,
fileName);
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!

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.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit;
@ -310,28 +311,33 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
}
[Theory]
[InlineData(JpegSubsample.Ratio420, 0)]
[InlineData(JpegSubsample.Ratio420, 3)]
[InlineData(JpegSubsample.Ratio420, 10)]
[InlineData(JpegSubsample.Ratio444, 0)]
[InlineData(JpegSubsample.Ratio444, 3)]
[InlineData(JpegSubsample.Ratio444, 10)]
public async Task Encode_IsCancellable(JpegSubsample subsample, int cancellationDelayMs)
[InlineData(JpegSubsample.Ratio420)]
[InlineData(JpegSubsample.Ratio444)]
public async Task Encode_IsCancellable(JpegSubsample subsample)
{
using var image = new Image<Rgba32>(5000, 5000);
using var stream = new MemoryStream();
var cts = new CancellationTokenSource();
if (cancellationDelayMs == 0)
{
cts.Cancel();
}
else
using var pausedStream = new PausedStream(new MemoryStream());
pausedStream.OnWaiting(s =>
{
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 };
await Assert.ThrowsAsync<TaskCanceledException>(() => image.SaveAsync(stream, encoder, cts.Token));
using var image = new Image<Rgba32>(5000, 5000);
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.Filters;
using SixLabors.ImageSharp.Tests.Formats.Png.Utils;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit;
using Xunit.Abstractions;
@ -142,7 +141,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png
HwIntrinsics.DisableSIMD);
}
[Fact]
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()))
{
PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance);
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("leading space"));
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("trailing space"));
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("space"));
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("empty"));
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("invalid characters"));
Assert.DoesNotContain(meta.TextData, m => m.Value.Equals("too large"));
Assert.DoesNotContain(meta.TextData, m => m.Value is "leading space");
Assert.DoesNotContain(meta.TextData, m => m.Value is "trailing space");
Assert.DoesNotContain(meta.TextData, m => m.Value is "space");
Assert.DoesNotContain(meta.TextData, m => m.Value is "empty");
Assert.DoesNotContain(meta.TextData, m => m.Value is "invalid characters");
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)
{
Assert.NotNull(meta);
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") &&
m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") &&
m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") &&
m.LanguageTag.Equals("chinese"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoLang") && m.Value.Equals("this text chunk is missing a language tag"));
Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoTranslatedKeyword") && m.Value.Equals("dieser chunk hat kein übersetztes Schlüßelwort"));
Assert.Contains(meta.TextData, m => m.Keyword is "Comment" && m.Value is "comment");
Assert.Contains(meta.TextData, m => m.Keyword is "Author" && m.Value is "ImageSharp");
Assert.Contains(meta.TextData, m => m.Keyword is "Copyright" && m.Value is "ImageSharp");
Assert.Contains(meta.TextData, m => m.Keyword is "Title" && m.Value is "unittest");
Assert.Contains(meta.TextData, m => m.Keyword is "Description" && m.Value is "compressed-text");
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");
Assert.Contains(meta.TextData, m => m.Keyword is "International2" && m.Value is "ИМАГЕШАРП" && m.LanguageTag is "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 is "CompressedInternational2" && m.Value is "這是一個考驗" && m.LanguageTag is "chinese");
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 is "NoTranslatedKeyword" && m.Value is "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;
// ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests.Formats.Png.Utils
namespace SixLabors.ImageSharp.Tests.Formats.Png
{
/// <summary>
/// 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
using System;
using System.IO;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Tiff;
using SixLabors.ImageSharp.Metadata;
using SixLabors.ImageSharp.PixelFormats;
@ -37,6 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[InlineData(RgbUncompressed, 24, 256, 256, 300, 300, PixelResolutionUnit.PixelsPerInch)]
[InlineData(SmallRgbDeflate, 24, 32, 32, 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)
{
var testFile = TestFile.Create(imagePath);
@ -91,6 +92,19 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
public void TiffDecoder_CanDecode_WithPalette<TPixel>(TestImageProvider<TPixel> 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]
[WithFile(GrayscaleDeflateMultistrip, PixelTypes.Rgba32)]
[WithFile(RgbDeflateMultistrip, PixelTypes.Rgba32)]
@ -155,12 +169,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
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>
{
using Image<TPixel> image = provider.GetImage(TiffDecoder);
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]
[WithFile(Rgb4BitPalette, PixelTypes.Rgba32)]
[WithFile(Flower4BitPalette, PixelTypes.Rgba32)]
[WithFile(Flower4BitPaletteGray, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeColorPalette_With4Bit_Works<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> =>
//// 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]
[WithFile(Calliphora_PaletteUncompressed, PixelTypes.Rgba32)]
@ -460,7 +462,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
TiffCompression compression = TiffCompression.None,
TiffPredictor predictor = TiffPredictor.None,
bool useExactComparer = true,
float compareTolerance = 0.01f,
float compareTolerance = 0.001f,
IImageDecoder imageDecoder = null)
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>(
() =>
{
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);
@ -40,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests
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);
@ -54,7 +55,7 @@ namespace SixLabors.ImageSharp.Tests
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);
@ -66,7 +67,7 @@ namespace SixLabors.ImageSharp.Tests
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);
@ -78,7 +79,8 @@ namespace SixLabors.ImageSharp.Tests
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);
@ -90,7 +92,7 @@ namespace SixLabors.ImageSharp.Tests
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);
@ -102,9 +104,11 @@ namespace SixLabors.ImageSharp.Tests
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>(
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);
@ -113,24 +117,24 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void RemoveAtFrame_ThrowIfRemovingLastFrame()
{
using var imageFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
var collection = new ImageFrameCollection<Rgba32>(
this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10) });
new[] { imageFrame });
InvalidOperationException ex = Assert.Throws<InvalidOperationException>(
() =>
{
collection.RemoveFrame(0);
});
() => collection.RemoveFrame(0));
Assert.Equal("Cannot remove last frame.", ex.Message);
}
[Fact]
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>(
this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10), new ImageFrame<Rgba32>(Configuration.Default, 10, 10) });
new[] { imageFrame1, imageFrame2 });
collection.RemoveFrame(0);
Assert.Equal(1, collection.Count);
@ -139,9 +143,11 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
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>(
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]);
}
@ -149,9 +155,11 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
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>(
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);
}
@ -159,9 +167,11 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
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>(
this.Image,
new[] { new ImageFrame<Rgba32>(Configuration.Default, 10, 10), new ImageFrame<Rgba32>(Configuration.Default, 10, 10) });
new[] { imageFrame1, imageFrame2 });
collection.Dispose();
@ -171,9 +181,11 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
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>(
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();
collection.Dispose();
@ -194,7 +206,8 @@ namespace SixLabors.ImageSharp.Tests
{
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))
{
Assert.Equal(2, img.Frames.Count);
@ -215,7 +228,8 @@ namespace SixLabors.ImageSharp.Tests
Assert.True(img.TryGetSinglePixelSpan(out Span<TPixel> imgSpan));
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))
{
Assert.Equal(1, img.Frames.Count);
@ -227,35 +241,37 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void CreateFrame_Default()
{
this.Image.Frames.CreateFrame();
Assert.Equal(2, this.Image.Frames.Count);
this.Image.Frames[1].ComparePixelBufferTo(default(Rgba32));
using (this.Image.Frames.CreateFrame())
{
Assert.Equal(2, this.Image.Frames.Count);
this.Image.Frames[1].ComparePixelBufferTo(default(Rgba32));
}
}
[Fact]
public void CreateFrame_CustomFillColor()
{
this.Image.Frames.CreateFrame(Color.HotPink);
Assert.Equal(2, this.Image.Frames.Count);
this.Image.Frames[1].ComparePixelBufferTo(Color.HotPink);
using (this.Image.Frames.CreateFrame(Color.HotPink))
{
Assert.Equal(2, this.Image.Frames.Count);
this.Image.Frames[1].ComparePixelBufferTo(Color.HotPink);
}
}
[Fact]
public void AddFrameFromPixelData()
{
Assert.True(this.Image.Frames.RootFrame.TryGetSinglePixelSpan(out Span<Rgba32> imgSpan));
var pixelData = imgSpan.ToArray();
this.Image.Frames.AddFrame(pixelData);
Rgba32[] pixelData = imgSpan.ToArray();
using ImageFrame<Rgba32> addedFrame = this.Image.Frames.AddFrame(pixelData);
Assert.Equal(2, this.Image.Frames.Count);
}
[Fact]
public void AddFrame_clones_sourceFrame()
{
var otherFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
ImageFrame<Rgba32> addedFrame = this.Image.Frames.AddFrame(otherFrame);
using var otherFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using ImageFrame<Rgba32> addedFrame = this.Image.Frames.AddFrame(otherFrame);
Assert.True(otherFrame.TryGetSinglePixelSpan(out Span<Rgba32> otherFrameSpan));
addedFrame.ComparePixelBufferTo(otherFrameSpan);
@ -265,8 +281,8 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void InsertFrame_clones_sourceFrame()
{
var otherFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
ImageFrame<Rgba32> addedFrame = this.Image.Frames.InsertFrame(0, otherFrame);
using var otherFrame = new ImageFrame<Rgba32>(Configuration.Default, 10, 10);
using ImageFrame<Rgba32> addedFrame = this.Image.Frames.InsertFrame(0, otherFrame);
Assert.True(otherFrame.TryGetSinglePixelSpan(out Span<Rgba32> otherFrameSpan));
addedFrame.ComparePixelBufferTo(otherFrameSpan);
@ -276,51 +292,51 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void MoveFrame_LeavesFrameInCorrectLocation()
{
for (var i = 0; i < 9; i++)
for (int i = 0; i < 9; i++)
{
this.Image.Frames.CreateFrame();
}
var frame = this.Image.Frames[4];
ImageFrame<Rgba32> frame = this.Image.Frames[4];
this.Image.Frames.MoveFrame(4, 7);
var newIndex = this.Image.Frames.IndexOf(frame);
int newIndex = this.Image.Frames.IndexOf(frame);
Assert.Equal(7, newIndex);
}
[Fact]
public void IndexOf_ReturnsCorrectIndex()
{
for (var i = 0; i < 9; i++)
for (int i = 0; i < 9; i++)
{
this.Image.Frames.CreateFrame();
}
var frame = this.Image.Frames[4];
var index = this.Image.Frames.IndexOf(frame);
ImageFrame<Rgba32> frame = this.Image.Frames[4];
int index = this.Image.Frames.IndexOf(frame);
Assert.Equal(4, index);
}
[Fact]
public void Contains_TrueIfMember()
{
for (var i = 0; i < 9; i++)
for (int i = 0; i < 9; i++)
{
this.Image.Frames.CreateFrame();
}
var frame = this.Image.Frames[4];
ImageFrame<Rgba32> frame = this.Image.Frames[4];
Assert.True(this.Image.Frames.Contains(frame));
}
[Fact]
public void Contains_FalseIfNonMember()
{
for (var i = 0; i < 9; i++)
for (int i = 0; i < 9; i++)
{
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));
}
}

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

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

@ -3,9 +3,8 @@
using System;
using System.IO;
using Moq;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using Xunit;
@ -13,8 +12,6 @@ using Xunit;
// ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests
{
using SixLabors.ImageSharp.Formats;
public partial class ImageTests
{
public class Save
@ -23,7 +20,7 @@ namespace SixLabors.ImageSharp.Tests
public void DetectedEncoding()
{
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))
{
@ -40,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests
public void WhenExtensionIsUnknown_Throws()
{
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>(
() =>
@ -56,14 +53,14 @@ namespace SixLabors.ImageSharp.Tests
public void SetEncoding()
{
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))
{
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);
}
@ -72,7 +69,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void ThrowsWhenDisposed()
{
var image = new Image<Rgba32>(5, 5);
using var image = new Image<Rgba32>(5, 5);
image.Dispose();
IImageEncoder encoder = Mock.Of<IImageEncoder>();
using (var stream = new MemoryStream())

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

@ -4,20 +4,18 @@
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Moq;
using SixLabors.ImageSharp.Formats.Bmp;
using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit;
// ReSharper disable InconsistentNaming
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 class SaveAsync
@ -43,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests
public async Task WhenExtensionIsUnknown_Throws()
{
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>(
async () =>
@ -59,14 +57,14 @@ namespace SixLabors.ImageSharp.Tests
public async Task SetEncoding()
{
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))
{
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);
}
@ -142,10 +140,15 @@ namespace SixLabors.ImageSharp.Tests
using var stream = new MemoryStream();
var asyncStream = new AsyncStreamWrapper(stream, () => false);
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromTicks(1));
await Assert.ThrowsAnyAsync<TaskCanceledException>(() =>
image.SaveAsync(asyncStream, encoder, cts.Token));
var pausedStream = new PausedStream(asyncStream);
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]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void HasCorrectLength_byte(int desiredLength)
{
this.TestHasCorrectLength<byte>(desiredLength);
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void HasCorrectLength_float(int desiredLength)
{
this.TestHasCorrectLength<float>(desiredLength);
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void HasCorrectLength_CustomStruct(int desiredLength)
{
this.TestHasCorrectLength<CustomStruct>(desiredLength);
@ -93,7 +93,7 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void CanAllocateCleanBuffer_byte(int desiredLength)
{
this.TestCanAllocateCleanBuffer<byte>(desiredLength, false);
@ -101,14 +101,14 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void CanAllocateCleanBuffer_double(int desiredLength)
{
this.TestCanAllocateCleanBuffer<double>(desiredLength);
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void CanAllocateCleanBuffer_CustomStruct(int desiredLength)
{
this.TestCanAllocateCleanBuffer<CustomStruct>(desiredLength);
@ -145,14 +145,14 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void SpanPropertyIsAlwaysTheSame_int(int desiredLength)
{
this.TestSpanPropertyIsAlwaysTheSame<int>(desiredLength);
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void SpanPropertyIsAlwaysTheSame_byte(int desiredLength)
{
this.TestSpanPropertyIsAlwaysTheSame<byte>(desiredLength, false);
@ -174,18 +174,18 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void WriteAndReadElements_float(int desiredLength)
{
this.TestWriteAndReadElements<float>(desiredLength, x => x * 1.2f);
this.TestWriteAndReadElements(desiredLength, x => x * 1.2f);
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void WriteAndReadElements_byte(int desiredLength)
{
this.TestWriteAndReadElements<byte>(desiredLength, x => (byte)(x + 1), false);
this.TestWriteAndReadElements<byte>(desiredLength, x => (byte)(x + 1), true);
this.TestWriteAndReadElements(desiredLength, x => (byte)(x + 1), false);
this.TestWriteAndReadElements(desiredLength, x => (byte)(x + 1), true);
}
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))
{
T[] expectedVals = new T[buffer.Length()];
var expectedVals = new T[buffer.Length()];
for (int i = 0; i < buffer.Length(); i++)
{
@ -211,7 +211,7 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void IndexingSpan_WhenOutOfRange_Throws_byte(int desiredLength)
{
this.TestIndexOutOfRangeShouldThrow<byte>(desiredLength, false);
@ -219,14 +219,14 @@ namespace SixLabors.ImageSharp.Tests.Memory.Allocators
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void IndexingSpan_WhenOutOfRange_Throws_long(int desiredLength)
{
this.TestIndexOutOfRangeShouldThrow<long>(desiredLength);
}
[Theory]
[MemberData(nameof(LenthValues))]
[MemberData(nameof(LengthValues))]
public void IndexingSpan_WhenOutOfRange_Throws_CustomStruct(int 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;
namespace SixLabors.ImageSharp.Tests
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif
{
[Trait("Profile", "Exif")]
public class ExifProfileTests
@ -63,6 +63,7 @@ namespace SixLabors.ImageSharp.Tests
Assert.NotNull(value);
Assert.Equal(expected, value.Value);
image.Dispose();
}
[Fact]
@ -157,6 +158,8 @@ namespace SixLabors.ImageSharp.Tests
IExifValue<Rational> value2 = image.Metadata.ExifProfile.GetValue(ExifTag.FlashEnergy);
Assert.NotNull(value2);
Assert.Equal(new Rational(double.PositiveInfinity), value2.Value);
image.Dispose();
}
[Theory]
@ -231,6 +234,8 @@ namespace SixLabors.ImageSharp.Tests
latitude = image.Metadata.ExifProfile.GetValue(ExifTag.GPSLatitude);
Assert.Equal(expectedLatitude, latitude.Value);
image.Dispose();
}
[Theory]
@ -252,13 +257,15 @@ namespace SixLabors.ImageSharp.Tests
{
Assert.True(ExifTags.GetPart(exifProfileValue.Tag) == ExifParts.ExifTags);
}
image.Dispose();
}
[Fact]
public void RemoveEntry_Works()
{
// 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;
// Assert
@ -311,7 +318,7 @@ namespace SixLabors.ImageSharp.Tests
TestProfile(profile);
Image<Rgba32> thumbnail = profile.CreateThumbnail<Rgba32>();
using Image<Rgba32> thumbnail = profile.CreateThumbnail<Rgba32>();
Assert.NotNull(thumbnail);
Assert.Equal(256, thumbnail.Width);
Assert.Equal(170, thumbnail.Height);
@ -337,7 +344,7 @@ namespace SixLabors.ImageSharp.Tests
image.Metadata.ExifProfile = expectedProfile;
// Act
Image<Rgba32> reloadedImage = WriteAndRead(image, TestImageWriteFormat.Jpeg);
using Image<Rgba32> reloadedImage = WriteAndRead(image, TestImageWriteFormat.Jpeg);
// Assert
ExifProfile actualProfile = reloadedImage.Metadata.ExifProfile;
@ -361,7 +368,7 @@ namespace SixLabors.ImageSharp.Tests
{
// This image contains an 802 byte EXIF profile
// 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);
ExifProfile profile = image.Metadata.ExifProfile;
@ -381,7 +388,7 @@ namespace SixLabors.ImageSharp.Tests
public void TestArrayValueWithUnspecifiedSize()
{
// 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;
Assert.NotNull(profile);
@ -409,7 +416,7 @@ namespace SixLabors.ImageSharp.Tests
image.Metadata.ExifProfile = CreateExifProfile();
// Act
Image<Rgba32> reloadedImage = WriteAndRead(image, imageFormat);
using Image<Rgba32> reloadedImage = WriteAndRead(image, imageFormat);
// Assert
ExifProfile actual = reloadedImage.Metadata.ExifProfile;
@ -460,7 +467,7 @@ namespace SixLabors.ImageSharp.Tests
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;
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 Xunit;
namespace SixLabors.ImageSharp.Tests
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif
{
[Trait("Profile", "Exif")]
public class ExifReaderTests

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

@ -4,7 +4,7 @@
using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using Xunit;
namespace SixLabors.ImageSharp.Tests
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif
{
[Trait("Profile", "Exif")]
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 Xunit;
namespace SixLabors.ImageSharp.Tests
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif
{
[Trait("Profile", "Exif")]
public class ExifValueTests
{
private ExifProfile profile;
private readonly ExifProfile profile;
public ExifValueTests()
{

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

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{
[Trait("Profile", "Icc")]
public class IccDataReaderCurvesTests
{
[Theory]
[MemberData(nameof(IccTestDataCurves.OneDimensionalCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadOneDimensionalCurve(byte[] data, IccOneDimensionalCurve expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccOneDimensionalCurve output = reader.ReadOneDimensionalCurve();
@ -23,7 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.ResponseCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadResponseCurve(byte[] data, IccResponseCurve expected, int channelCount)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccResponseCurve output = reader.ReadResponseCurve(channelCount);
@ -34,7 +35,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.ParametricCurveTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadParametricCurve(byte[] data, IccParametricCurve expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccParametricCurve output = reader.ReadParametricCurve();
@ -45,7 +46,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.CurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadCurveSegment(byte[] data, IccCurveSegment expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccCurveSegment output = reader.ReadCurveSegment();
@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.FormulaCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadFormulaCurveElement(byte[] data, IccFormulaCurveElement expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccFormulaCurveElement output = reader.ReadFormulaCurveElement();
@ -67,14 +68,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataCurves.SampledCurveSegmentTestData), MemberType = typeof(IccTestDataCurves))]
internal void ReadSampledCurveElement(byte[] data, IccSampledCurveElement expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccSampledCurveElement output = reader.ReadSampledCurveElement();
Assert.Equal(expected, output);
}
private IccDataReader CreateReader(byte[] data)
private static IccDataReader CreateReader(byte[] 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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{
[Trait("Profile", "Icc")]
public class IccDataReaderLutTests
{
[Theory]
[MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))]
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);
@ -23,7 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))]
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);
@ -34,7 +35,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))]
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);
@ -45,7 +46,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))]
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);
@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))]
internal void ReadLut8(byte[] data, IccLut expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccLut output = reader.ReadLut8();
@ -67,14 +68,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))]
internal void ReadLut16(byte[] data, IccLut expected, int count)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccLut output = reader.ReadLut16(count);
Assert.Equal(expected, output);
}
private IccDataReader CreateReader(byte[] data)
private static IccDataReader CreateReader(byte[] 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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{
[Trait("Profile", "Icc")]
public class IccDataReaderMatrixTests
{
[Theory]
[MemberData(nameof(IccTestDataMatrix.Matrix2D_FloatArrayTestData), MemberType = typeof(IccTestDataMatrix))]
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);
@ -23,14 +24,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix1D_ArrayTestData), MemberType = typeof(IccTestDataMatrix))]
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);
Assert.Equal(expected, output);
}
private IccDataReader CreateReader(byte[] data)
private static IccDataReader CreateReader(byte[] 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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{
[Trait("Profile", "Icc")]
public class IccDataReaderMultiProcessElementTests
{
[Theory]
[MemberData(nameof(IccTestDataMultiProcessElements.MultiProcessElementTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void ReadMultiProcessElement(byte[] data, IccMultiProcessElement expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccMultiProcessElement output = reader.ReadMultiProcessElement();
@ -23,7 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.CurveSetTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
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);
@ -34,7 +35,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.MatrixTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
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);
@ -45,14 +46,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.ClutTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
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);
Assert.Equal(expected, output);
}
private IccDataReader CreateReader(byte[] data)
private static IccDataReader CreateReader(byte[] 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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{
[Trait("Profile", "Icc")]
public class IccDataReaderNonPrimitivesTests
{
[Theory]
[MemberData(nameof(IccTestDataNonPrimitives.DateTimeTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void ReadDateTime(byte[] data, DateTime expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
DateTime output = reader.ReadDateTime();
@ -25,7 +26,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.VersionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void ReadVersionNumber(byte[] data, IccVersion expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccVersion output = reader.ReadVersionNumber();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.XyzNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void ReadXyzNumber(byte[] data, Vector3 expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
Vector3 output = reader.ReadXyzNumber();
@ -47,7 +48,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ProfileIdTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadProfileId(byte[] data, IccProfileId expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccProfileId output = reader.ReadProfileId();
@ -58,7 +59,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.PositionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadPositionNumber(byte[] data, IccPositionNumber expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccPositionNumber output = reader.ReadPositionNumber();
@ -69,7 +70,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ResponseNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadResponseNumber(byte[] data, IccResponseNumber expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccResponseNumber output = reader.ReadResponseNumber();
@ -80,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.NamedColorTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadNamedColor(byte[] data, IccNamedColor expected, uint coordinateCount)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccNamedColor output = reader.ReadNamedColor(coordinateCount);
@ -91,7 +92,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ProfileDescriptionReadTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadProfileDescription(byte[] data, IccProfileDescription expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccProfileDescription output = reader.ReadProfileDescription();
@ -102,7 +103,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ColorantTableEntryTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadColorantTableEntry(byte[] data, IccColorantTableEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccColorantTableEntry output = reader.ReadColorantTableEntry();
@ -113,14 +114,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ScreeningChannelTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void ReadScreeningChannel(byte[] data, IccScreeningChannel expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccScreeningChannel output = reader.ReadScreeningChannel();
Assert.Equal(expected, output);
}
private IccDataReader CreateReader(byte[] data)
private static IccDataReader CreateReader(byte[] 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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{
[Trait("Profile", "Icc")]
public class IccDataReaderPrimitivesTests
{
[Theory]
[MemberData(nameof(IccTestDataPrimitives.AsciiTestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadAsciiString(byte[] textBytes, int length, string expected)
{
IccDataReader reader = this.CreateReader(textBytes);
IccDataReader reader = CreateReader(textBytes);
string output = reader.ReadAsciiString(length);
@ -23,7 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact]
public void ReadAsciiStringWithNegativeLengthThrowsArgumentException()
{
IccDataReader reader = this.CreateReader(new byte[4]);
IccDataReader reader = CreateReader(new byte[4]);
Assert.Throws<ArgumentOutOfRangeException>(() => reader.ReadAsciiString(-1));
}
@ -31,7 +32,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact]
public void ReadUnicodeStringWithNegativeLengthThrowsArgumentException()
{
IccDataReader reader = this.CreateReader(new byte[4]);
IccDataReader reader = CreateReader(new byte[4]);
Assert.Throws<ArgumentOutOfRangeException>(() => reader.ReadUnicodeString(-1));
}
@ -40,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.Fix16TestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadFix16(byte[] data, float expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
float output = reader.ReadFix16();
@ -51,7 +52,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.UFix16TestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadUFix16(byte[] data, float expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
float output = reader.ReadUFix16();
@ -62,7 +63,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.U1Fix15TestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadU1Fix15(byte[] data, float expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
float output = reader.ReadU1Fix15();
@ -73,14 +74,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.UFix8TestData), MemberType = typeof(IccTestDataPrimitives))]
public void ReadUFix8(byte[] data, float expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
float output = reader.ReadUFix8();
Assert.Equal(expected, output);
}
private IccDataReader CreateReader(byte[] data)
private static IccDataReader CreateReader(byte[] 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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{
[Trait("Profile", "Icc")]
public class IccDataReaderTagDataEntryTests
{
[Theory]
@ -14,7 +15,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUnknownTagDataEntry(byte[] data, IccUnknownTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccUnknownTagDataEntry output = reader.ReadUnknownTagDataEntry(size);
@ -27,7 +28,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadChromaticityTagDataEntry(byte[] data, IccChromaticityTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccChromaticityTagDataEntry output = reader.ReadChromaticityTagDataEntry();
@ -40,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadColorantOrderTagDataEntry(byte[] data, IccColorantOrderTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccColorantOrderTagDataEntry output = reader.ReadColorantOrderTagDataEntry();
@ -53,7 +54,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadColorantTableTagDataEntry(byte[] data, IccColorantTableTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccColorantTableTagDataEntry output = reader.ReadColorantTableTagDataEntry();
@ -66,7 +67,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadCurveTagDataEntry(byte[] data, IccCurveTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccCurveTagDataEntry output = reader.ReadCurveTagDataEntry();
@ -79,7 +80,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadDataTagDataEntry(byte[] data, IccDataTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccDataTagDataEntry output = reader.ReadDataTagDataEntry(size);
@ -92,7 +93,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadDateTimeTagDataEntry(byte[] data, IccDateTimeTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccDateTimeTagDataEntry output = reader.ReadDateTimeTagDataEntry();
@ -105,7 +106,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadLut16TagDataEntry(byte[] data, IccLut16TagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccLut16TagDataEntry output = reader.ReadLut16TagDataEntry();
@ -118,7 +119,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadLut8TagDataEntry(byte[] data, IccLut8TagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccLut8TagDataEntry output = reader.ReadLut8TagDataEntry();
@ -131,7 +132,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadLutAToBTagDataEntry(byte[] data, IccLutAToBTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccLutAToBTagDataEntry output = reader.ReadLutAtoBTagDataEntry();
@ -144,7 +145,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadLutBToATagDataEntry(byte[] data, IccLutBToATagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccLutBToATagDataEntry output = reader.ReadLutBtoATagDataEntry();
@ -157,7 +158,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadMeasurementTagDataEntry(byte[] data, IccMeasurementTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccMeasurementTagDataEntry output = reader.ReadMeasurementTagDataEntry();
@ -170,7 +171,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadMultiLocalizedUnicodeTagDataEntry(byte[] data, IccMultiLocalizedUnicodeTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccMultiLocalizedUnicodeTagDataEntry output = reader.ReadMultiLocalizedUnicodeTagDataEntry();
@ -183,7 +184,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadMultiProcessElementsTagDataEntry(byte[] data, IccMultiProcessElementsTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccMultiProcessElementsTagDataEntry output = reader.ReadMultiProcessElementsTagDataEntry();
@ -196,7 +197,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadNamedColor2TagDataEntry(byte[] data, IccNamedColor2TagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccNamedColor2TagDataEntry output = reader.ReadNamedColor2TagDataEntry();
@ -209,7 +210,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadParametricCurveTagDataEntry(byte[] data, IccParametricCurveTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccParametricCurveTagDataEntry output = reader.ReadParametricCurveTagDataEntry();
@ -222,7 +223,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadProfileSequenceDescTagDataEntry(byte[] data, IccProfileSequenceDescTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccProfileSequenceDescTagDataEntry output = reader.ReadProfileSequenceDescTagDataEntry();
@ -237,7 +238,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
byte[] data,
IccProfileSequenceIdentifierTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccProfileSequenceIdentifierTagDataEntry output = reader.ReadProfileSequenceIdentifierTagDataEntry();
@ -250,7 +251,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadResponseCurveSet16TagDataEntry(byte[] data, IccResponseCurveSet16TagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccResponseCurveSet16TagDataEntry output = reader.ReadResponseCurveSet16TagDataEntry();
@ -263,7 +264,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadFix16ArrayTagDataEntry(byte[] data, IccFix16ArrayTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccFix16ArrayTagDataEntry output = reader.ReadFix16ArrayTagDataEntry(size);
@ -276,7 +277,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadSignatureTagDataEntry(byte[] data, IccSignatureTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccSignatureTagDataEntry output = reader.ReadSignatureTagDataEntry();
@ -289,7 +290,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadTextTagDataEntry(byte[] data, IccTextTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccTextTagDataEntry output = reader.ReadTextTagDataEntry(size);
@ -302,7 +303,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUFix16ArrayTagDataEntry(byte[] data, IccUFix16ArrayTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccUFix16ArrayTagDataEntry output = reader.ReadUFix16ArrayTagDataEntry(size);
@ -315,7 +316,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUInt16ArrayTagDataEntry(byte[] data, IccUInt16ArrayTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccUInt16ArrayTagDataEntry output = reader.ReadUInt16ArrayTagDataEntry(size);
@ -328,7 +329,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUInt32ArrayTagDataEntry(byte[] data, IccUInt32ArrayTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccUInt32ArrayTagDataEntry output = reader.ReadUInt32ArrayTagDataEntry(size);
@ -341,7 +342,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUInt64ArrayTagDataEntry(byte[] data, IccUInt64ArrayTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccUInt64ArrayTagDataEntry output = reader.ReadUInt64ArrayTagDataEntry(size);
@ -354,7 +355,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUInt8ArrayTagDataEntry(byte[] data, IccUInt8ArrayTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccUInt8ArrayTagDataEntry output = reader.ReadUInt8ArrayTagDataEntry(size);
@ -367,7 +368,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadViewingConditionsTagDataEntry(byte[] data, IccViewingConditionsTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccViewingConditionsTagDataEntry output = reader.ReadViewingConditionsTagDataEntry();
@ -380,7 +381,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadXyzTagDataEntry(byte[] data, IccXyzTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccXyzTagDataEntry output = reader.ReadXyzTagDataEntry(size);
@ -393,7 +394,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadTextDescriptionTagDataEntry(byte[] data, IccTextDescriptionTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccTextDescriptionTagDataEntry output = reader.ReadTextDescriptionTagDataEntry();
@ -406,7 +407,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadCrdInfoTagDataEntry(byte[] data, IccCrdInfoTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccCrdInfoTagDataEntry output = reader.ReadCrdInfoTagDataEntry();
@ -419,7 +420,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadScreeningTagDataEntry(byte[] data, IccScreeningTagDataEntry expected)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccScreeningTagDataEntry output = reader.ReadScreeningTagDataEntry();
@ -432,14 +433,14 @@ namespace SixLabors.ImageSharp.Tests.Icc
MemberType = typeof(IccTestDataTagDataEntry))]
internal void ReadUcrBgTagDataEntry(byte[] data, IccUcrBgTagDataEntry expected, uint size)
{
IccDataReader reader = this.CreateReader(data);
IccDataReader reader = CreateReader(data);
IccUcrBgTagDataEntry output = reader.ReadUcrBgTagDataEntry(size);
Assert.Equal(expected, output);
}
private IccDataReader CreateReader(byte[] data)
private static IccDataReader CreateReader(byte[] 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.
using System;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataReader
{
[Trait("Profile", "Icc")]
public class IccDataReaderTests
{
[Fact]

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

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

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

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

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

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

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

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{
[Trait("Profile", "Icc")]
public class IccDataWriterLutTests2
{
[Theory]
[MemberData(nameof(IccTestDataLut.ClutTestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClutAll(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, bool isFloat)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteClut(data);
byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut8TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClut8(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteClut8(data);
byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Clut16TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClut16(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteClut16(data);
byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.ClutF32TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteClutF32(byte[] expected, IccClut data, int inChannelCount, int outChannelCount, byte[] gridPointCount)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteClutF32(data);
byte[] output = writer.GetData();
@ -60,7 +61,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut8TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteLut8(byte[] expected, IccLut data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteLut8(data);
byte[] output = writer.GetData();
@ -72,7 +73,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataLut.Lut16TestData), MemberType = typeof(IccTestDataLut))]
internal void WriteLut16(byte[] expected, IccLut data, int count)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteLut16(data);
byte[] output = writer.GetData();
@ -80,7 +81,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output);
}
private IccDataWriter CreateWriter()
private static IccDataWriter CreateWriter()
{
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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{
using SixLabors.ImageSharp;
[Trait("Profile", "Icc")]
public class IccDataWriterMatrixTests
{
[Theory]
[MemberData(nameof(IccTestDataMatrix.Matrix2D_FloatArrayTestData), MemberType = typeof(IccTestDataMatrix))]
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);
byte[] output = writer.GetData();
@ -28,7 +27,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix2D_Matrix4x4TestData), MemberType = typeof(IccTestDataMatrix))]
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);
byte[] output = writer.GetData();
@ -40,7 +39,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix2D_DenseMatrixTestData), MemberType = typeof(IccTestDataMatrix))]
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);
byte[] output = writer.GetData();
@ -52,7 +51,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix1D_ArrayTestData), MemberType = typeof(IccTestDataMatrix))]
public void WriteMatrix1D_Array(byte[] expected, int yCount, bool isSingle, float[] data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteMatrix(data, isSingle);
byte[] output = writer.GetData();
@ -64,7 +63,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMatrix.Matrix1D_Vector3TestData), MemberType = typeof(IccTestDataMatrix))]
public void WriteMatrix1D_Vector3(byte[] expected, int yCount, bool isSingle, Vector3 data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteMatrix(data, isSingle);
byte[] output = writer.GetData();
@ -72,7 +71,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output);
}
private IccDataWriter CreateWriter()
private static IccDataWriter CreateWriter()
{
return new IccDataWriter();
}

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

@ -4,15 +4,16 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{
[Trait("Profile", "Icc")]
public class IccDataWriterMultiProcessElementTests
{
[Theory]
[MemberData(nameof(IccTestDataMultiProcessElements.MultiProcessElementTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void WriteMultiProcessElement(byte[] expected, IccMultiProcessElement data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteMultiProcessElement(data);
byte[] output = writer.GetData();
@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.CurveSetTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void WriteCurveSetProcessElement(byte[] expected, IccCurveSetProcessElement data, int inChannelCount, int outChannelCount)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteCurveSetProcessElement(data);
byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.MatrixTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void WriteMatrixProcessElement(byte[] expected, IccMatrixProcessElement data, int inChannelCount, int outChannelCount)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteMatrixProcessElement(data);
byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataMultiProcessElements.ClutTestData), MemberType = typeof(IccTestDataMultiProcessElements))]
internal void WriteClutProcessElement(byte[] expected, IccClutProcessElement data, int inChannelCount, int outChannelCount)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteClutProcessElement(data);
byte[] output = writer.GetData();
@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output);
}
private IccDataWriter CreateWriter()
private static IccDataWriter CreateWriter()
{
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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{
[Trait("Profile", "Icc")]
public class IccDataWriterNonPrimitivesTests
{
[Theory]
[MemberData(nameof(IccTestDataNonPrimitives.DateTimeTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void WriteDateTime(byte[] expected, DateTime data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteDateTime(data);
byte[] output = writer.GetData();
@ -26,7 +27,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.VersionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void WriteVersionNumber(byte[] expected, IccVersion data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteVersionNumber(data);
byte[] output = writer.GetData();
@ -38,7 +39,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.XyzNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
public void WriteXyzNumber(byte[] expected, Vector3 data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteXyzNumber(data);
byte[] output = writer.GetData();
@ -50,7 +51,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ProfileIdTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteProfileId(byte[] expected, IccProfileId data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteProfileId(data);
byte[] output = writer.GetData();
@ -62,7 +63,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.PositionNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WritePositionNumber(byte[] expected, IccPositionNumber data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WritePositionNumber(data);
byte[] output = writer.GetData();
@ -74,7 +75,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ResponseNumberTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteResponseNumber(byte[] expected, IccResponseNumber data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteResponseNumber(data);
byte[] output = writer.GetData();
@ -86,7 +87,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.NamedColorTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteNamedColor(byte[] expected, IccNamedColor data, uint coordinateCount)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteNamedColor(data);
byte[] output = writer.GetData();
@ -98,7 +99,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ProfileDescriptionWriteTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteProfileDescription(byte[] expected, IccProfileDescription data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteProfileDescription(data);
byte[] output = writer.GetData();
@ -110,7 +111,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataNonPrimitives.ScreeningChannelTestData), MemberType = typeof(IccTestDataNonPrimitives))]
internal void WriteScreeningChannel(byte[] expected, IccScreeningChannel data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteScreeningChannel(data);
byte[] output = writer.GetData();
@ -118,7 +119,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output);
}
private IccDataWriter CreateWriter()
private static IccDataWriter CreateWriter()
{
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 Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.DataWriter
{
[Trait("Profile", "Icc")]
public class IccDataWriterPrimitivesTests
{
[Theory]
[MemberData(nameof(IccTestDataPrimitives.AsciiWriteTestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteAsciiString(byte[] expected, string data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteAsciiString(data);
byte[] output = writer.GetData();
@ -25,7 +26,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.AsciiPaddingTestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteAsciiStringPadded(byte[] expected, int length, string data, bool ensureNullTerminator)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteAsciiString(data, length, ensureNullTerminator);
byte[] output = writer.GetData();
@ -36,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact]
public void WriteAsciiStringWithNullWritesEmpty()
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
int count = writer.WriteAsciiString(null);
byte[] output = writer.GetData();
@ -48,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact]
public void WriteAsciiStringWithNegativeLengthThrowsArgumentException()
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
Assert.Throws<ArgumentOutOfRangeException>(() => writer.WriteAsciiString("abcd", -1, false));
}
@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[Fact]
public void WriteUnicodeStringWithNullWritesEmpty()
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
int count = writer.WriteUnicodeString(null);
byte[] output = writer.GetData();
@ -69,7 +70,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.Fix16TestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteFix16(byte[] expected, float data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteFix16(data);
byte[] output = writer.GetData();
@ -81,7 +82,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.UFix16TestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteUFix16(byte[] expected, float data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteUFix16(data);
byte[] output = writer.GetData();
@ -93,7 +94,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.U1Fix15TestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteU1Fix15(byte[] expected, float data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteU1Fix15(data);
byte[] output = writer.GetData();
@ -105,7 +106,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
[MemberData(nameof(IccTestDataPrimitives.UFix8TestData), MemberType = typeof(IccTestDataPrimitives))]
public void WriteUFix8(byte[] expected, float data)
{
IccDataWriter writer = this.CreateWriter();
using IccDataWriter writer = CreateWriter();
writer.WriteUFix8(data);
byte[] output = writer.GetData();
@ -113,7 +114,7 @@ namespace SixLabors.ImageSharp.Tests.Icc
Assert.Equal(expected, output);
}
private IccDataWriter CreateWriter()
private static IccDataWriter CreateWriter()
{
return new IccDataWriter();
}

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

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

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

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

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

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

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

@ -4,8 +4,9 @@
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Icc
{
[Trait("Profile", "Icc")]
public class IccWriterTests
{
[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.
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.ICC.Various
{
[Trait("Profile", "Icc")]
public class IccProfileIdTests
{
[Fact]
@ -29,4 +30,4 @@ namespace SixLabors.ImageSharp.Tests.Icc
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
var profile = new IptcProfile();
var value = new string('s', tag.MaxLength() + 1);
var expectedLength = tag.MaxLength();
int expectedLength = tag.MaxLength();
// act
profile.SetValue(tag, value);
@ -51,7 +51,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC
// arrange
var profile = new IptcProfile();
var value = new string('s', tag.MaxLength() + 1);
var expectedLength = value.Length;
int expectedLength = value.Length;
// act
profile.SetValue(tag, value, false);
@ -228,7 +228,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC
image.Metadata.IptcProfile.SetValue(IptcTag.Caption, expectedCaption);
// act
Image<Rgba32> reloadedImage = WriteAndReadJpeg(image);
using Image<Rgba32> reloadedImage = WriteAndReadJpeg(image);
// assert
IptcProfile actual = reloadedImage.Metadata.IptcProfile;

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

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

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

@ -1,7 +1,7 @@
// Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0.
using System.ComponentModel.DataAnnotations;
using System;
using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
@ -10,7 +10,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing
{
public abstract class BaseImageOperationsExtensionTest
public abstract class BaseImageOperationsExtensionTest : IDisposable
{
protected readonly IImageProcessingContext operations;
private readonly FakeImageOperationsProvider.FakeImageOperations<Rgba32> internalOperations;
@ -59,5 +59,7 @@ namespace SixLabors.ImageSharp.Tests.Processing
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
{
[Trait("Category", "Processors")]
public class AdaptiveThresholdTests : BaseImageOperationsExtensionTest
{
[Fact]
public void AdaptiveThreshold_UsesDefaults_Works()
{
// arrange
var expectedThresholdLimit = .85f;
float expectedThresholdLimit = .85f;
Color expectedUpper = Color.White;
Color expectedLower = Color.Black;
@ -33,7 +34,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Binarization
public void AdaptiveThreshold_SettingThresholdLimit_Works()
{
// arrange
var expectedThresholdLimit = .65f;
float expectedThresholdLimit = .65f;
// act
this.operations.AdaptiveThreshold(expectedThresholdLimit);
@ -65,7 +66,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Binarization
public void AdaptiveThreshold_SettingUpperLowerWithThresholdLimit_Works()
{
// arrange
var expectedThresholdLimit = .77f;
float expectedThresholdLimit = .77f;
Color expectedUpper = Color.HotPink;
Color expectedLower = Color.Yellow;
@ -83,7 +84,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Binarization
public void AdaptiveThreshold_SettingUpperLowerWithThresholdLimit_WithRectangle_Works()
{
// arrange
var expectedThresholdLimit = .77f;
float expectedThresholdLimit = .77f;
Color expectedUpper = Color.HotPink;
Color expectedLower = Color.Yellow;

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

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

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

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Binarization
{
[Trait("Category", "Processors")]
public class OrderedDitherFactoryTests
{
#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.
using SixLabors.ImageSharp.Processing;
@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Convolution
{
[Trait("Category", "Processors")]
public class BoxBlurTest : BaseImageOperationsExtensionTest
{
[Fact]
@ -36,4 +37,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Convolution
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
{
[Trait("Category", "Processors")]
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1313:Parameter names should begin with lower-case letter", Justification = "OK. Used for TheoryData compatibility.")]
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.
using SixLabors.ImageSharp.Processing;
@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Convolution
{
[Trait("Category", "Processors")]
public class GaussianBlurTest : BaseImageOperationsExtensionTest
{
[Fact]
@ -36,4 +37,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Convolution
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
{
[Trait("Category", "Processors")]
public class GaussianSharpenTest : BaseImageOperationsExtensionTest
{
[Fact]
@ -36,4 +37,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Convolution
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 Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
namespace SixLabors.ImageSharp.Tests.Processing.Convolution.Processors
{
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 Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Binarization
namespace SixLabors.ImageSharp.Tests.Processing.Dithering
{
[Trait("Category", "Processors")]
public class DitherTest : BaseImageOperationsExtensionTest
{
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.Processors.Overlays;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects
{
[Trait("Category", "Processors")]
public class BackgroundColorTest : BaseImageOperationsExtensionTest
{
[Fact]

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

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

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

@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects
{
[Trait("Category", "Processors")]
public class PixelateTest : BaseImageOperationsExtensionTest
{
[Fact]
@ -36,4 +37,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Effects
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
{
[Trait("Category", "Processors")]
public class BlackWhiteTest : BaseImageOperationsExtensionTest
{
[Fact]

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

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

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

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

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

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

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

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

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

@ -12,6 +12,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
[Trait("Category", "Processors")]
public class GrayscaleTest : BaseImageOperationsExtensionTest
{
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.
using SixLabors.ImageSharp.Processing;
@ -8,6 +8,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
[Trait("Category", "Processors")]
public class HueTest : BaseImageOperationsExtensionTest
{
[Fact]
@ -28,4 +29,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Filters
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 Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects
namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
[Trait("Category", "Processors")]
public class InvertTest : BaseImageOperationsExtensionTest
{
[Fact]

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

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

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

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

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

@ -1,15 +1,13 @@
// Copyright (c) Six Labors.
// 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;
namespace SixLabors.ImageSharp.Tests
namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters;
[Trait("Category", "Processors")]
public class LomographTest : BaseImageOperationsExtensionTest
{
[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.
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Filters;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Effects
namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
[Trait("Category", "Processors")]
public class OpacityTest : BaseImageOperationsExtensionTest
{
[Fact]
@ -27,4 +28,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Effects
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
{
[Trait("Category", "Processors")]
public class PolaroidTest : BaseImageOperationsExtensionTest
{
[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.
using SixLabors.ImageSharp.Processing;
@ -7,6 +7,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
[Trait("Category", "Processors")]
public class SaturateTest : BaseImageOperationsExtensionTest
{
[Fact]
@ -27,4 +28,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Filters
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
{
[Trait("Category", "Processors")]
public class SepiaTest : BaseImageOperationsExtensionTest
{
[Fact]

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

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

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

@ -1,6 +1,7 @@
// Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0.
using System;
using Moq;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
@ -12,7 +13,7 @@ namespace SixLabors.ImageSharp.Tests.Processing
/// <summary>
/// Contains test cases for default <see cref="IImageProcessingContext"/> implementation.
/// </summary>
public class ImageProcessingContextTests
public class ImageProcessingContextTests : IDisposable
{
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>()))
.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 Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Transforms
namespace SixLabors.ImageSharp.Tests.Processing
{
public class IntegralImageTests : BaseImageOperationsExtensionTest
{

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

@ -10,6 +10,7 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Normalization
{
// ReSharper disable InconsistentNaming
[Trait("Category", "Processors")]
public class HistogramEqualizationTests
{
private static readonly ImageComparer ValidatorComparer = ImageComparer.TolerantPercentage(0.0456F);
@ -17,10 +18,10 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization
[Theory]
[InlineData(256)]
[InlineData(65536)]
public void GlobalHistogramEqualization_WithDifferentLumanceLevels(int luminanceLevels)
public void GlobalHistogramEqualization_WithDifferentLuminanceLevels(int luminanceLevels)
{
// Arrange
var pixels = new byte[]
byte[] pixels =
{
52, 55, 61, 59, 70, 61, 76, 61,
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,
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
/// </summary>
/// <typeparam name="TPixel">The pixel type of the image.</typeparam>
/// <param name="provider">The test image provider.</param>
[Theory]
[WithTestPatternImages(110, 110, PixelTypes.Rgb24)]
[WithTestPatternImages(170, 170, PixelTypes.Rgb24)]
@ -149,17 +151,55 @@ namespace SixLabors.ImageSharp.Tests.Processing.Normalization
using (Image<TPixel> image = provider.GetImage())
{
var options = new HistogramEqualizationOptions()
{
Method = HistogramEqualizationMethod.AdaptiveTileInterpolation,
LuminanceLevels = 256,
ClipHistogram = true,
ClipLimit = 5,
NumberOfTiles = 10
};
{
Method = HistogramEqualizationMethod.AdaptiveTileInterpolation,
LuminanceLevels = 256,
ClipHistogram = true,
ClipLimit = 5,
NumberOfTiles = 10
};
image.Mutate(x => x.HistogramEqualization(options));
image.DebugSave(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.
// Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Overlays;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Overlays
{
[Trait("Category", "Processors")]
public class GlowTest : BaseImageOperationsExtensionTest
{
[Fact]

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

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

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

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

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

@ -4,12 +4,12 @@
using System.Globalization;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Binarization;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization
{
[Trait("Category", "Processors")]
public class BinaryThresholdTest
{
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
{
[Trait("Category", "Processors")]
public class BokehBlurTest
{
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.
using SixLabors.ImageSharp.Processing;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{
[Trait("Category", "Processors")]
[GroupOutput("Convolution")]
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) =>
ctx.BoxBlur(value, bounds);
}
}
}

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

@ -11,6 +11,7 @@ using Xunit;
// ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{
[Trait("Category", "Processors")]
[GroupOutput("Convolution")]
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1313:Parameter names should begin with lower-case letter", Justification = "OK. Used for TheoryData compatibility.")]
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.
using SixLabors.ImageSharp.Processing;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{
[Trait("Category", "Processors")]
[GroupOutput("Convolution")]
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) =>
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.
using SixLabors.ImageSharp.Processing;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
{
[Trait("Category", "Processors")]
[GroupOutput("Convolution")]
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) =>
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;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Binarization
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Dithering
{
[Trait("Category", "Processors")]
public class DitherTests
{
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
{
[Trait("Category", "Processors")]
[GroupOutput("Effects")]
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
{
[Trait("Category", "Processors")]
[GroupOutput("Effects")]
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
{
[Trait("Category", "Processors")]
[GroupOutput("Effects")]
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
{
[Trait("Category", "Processors")]
[GroupOutput("Effects")]
public class PixelateTest
{
@ -30,4 +31,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
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.
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
[Trait("Category", "Processors")]
[GroupOutput("Filters")]
public class BlackWhiteTest
{
@ -21,4 +20,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
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.
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
[Trait("Category", "Processors")]
[GroupOutput("Filters")]
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.
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
[Trait("Category", "Processors")]
[GroupOutput("Filters")]
public class ColorBlindnessTest
{
@ -33,4 +32,4 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyColorBlindnessFilter<TPixel>(TestImageProvider<TPixel> provider, ColorBlindnessMode colorBlindness)
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