Browse Source

reference images for filter tests + DRY out repeated code

af/merge-core
Anton Firszov 8 years ago
parent
commit
31f82ac349
  1. 7
      tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs
  2. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs
  3. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs
  4. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs
  5. 14
      tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs
  6. 15
      tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs
  7. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs
  8. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs
  9. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs
  10. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs
  11. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs
  12. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs
  13. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs
  14. 6
      tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs
  15. 53
      tests/ImageSharp.Tests/TestUtilities/TestUtils.cs
  16. 2
      tests/Images/External

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

@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyBlackWhiteFilter<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.BlackWhite());
image.DebugSave(provider);
}
provider.RunValidatingProcessorTest(ctx => ctx.BlackWhite());
}
[Theory]
@ -29,6 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyBlackWhiteFilterInBox<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : struct, IPixel<TPixel>
{
// TODO: We need a DRY-refactor on these tests for all Filter tests!
using (Image<TPixel> source = provider.GetImage())
using (Image<TPixel> image = source.Clone())
{

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

@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
public void ApplyBrightnessFilter<TPixel>(TestImageProvider<TPixel> provider, float value)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Brightness(value));
image.DebugSave(provider, value);
}
provider.RunValidatingProcessorTest(ctx => ctx.Brightness(value), value);
}
[Theory]

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

@ -31,11 +31,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyColorBlindnessFilter<TPixel>(TestImageProvider<TPixel> provider, ColorBlindness colorBlindness)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.ColorBlindness(colorBlindness));
image.DebugSave(provider, colorBlindness.ToString());
}
provider.RunValidatingProcessorTest(x => x.ColorBlindness(colorBlindness), colorBlindness.ToString());
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs

@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
public void ApplyContrastFilter<TPixel>(TestImageProvider<TPixel> provider, float value)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Contrast(value));
image.DebugSave(provider, value);
}
provider.RunValidatingProcessorTest(x => x.Contrast(value), value);
}
[Theory]

14
tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs

@ -21,14 +21,12 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyFilter<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
Matrix4x4 brightness = MatrixFilters.CreateBrightnessFilter(0.9F);
Matrix4x4 hue = MatrixFilters.CreateHueFilter(180F);
Matrix4x4 saturation = MatrixFilters.CreateSaturateFilter(1.5F);
image.Mutate(x => x.Filter(brightness * hue * saturation));
image.DebugSave(provider);
}
Matrix4x4 brightness = MatrixFilters.CreateBrightnessFilter(0.9F);
Matrix4x4 hue = MatrixFilters.CreateHueFilter(180F);
Matrix4x4 saturation = MatrixFilters.CreateSaturateFilter(1.5F);
Matrix4x4 m = brightness * hue * saturation;
provider.RunValidatingProcessorTest(x => x.Filter(m));
}
[Theory]

15
tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs

@ -29,20 +29,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyGrayscaleFilter<TPixel>(TestImageProvider<TPixel> provider, GrayscaleMode value)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Grayscale(value));
var rgb = default(Rgb24);
System.Span<TPixel> span = image.Frames.RootFrame.GetPixelSpan();
for (int i = 0; i < span.Length; i++)
{
span[i].ToRgb24(ref rgb);
Assert.Equal(rgb.R, rgb.B);
Assert.Equal(rgb.B, rgb.G);
}
image.DebugSave(provider, value.ToString());
}
provider.RunValidatingProcessorTest(x => x.Grayscale(value), value);
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs

@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyHueFilter<TPixel>(TestImageProvider<TPixel> provider, int value)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Hue(value));
image.DebugSave(provider, value);
}
provider.RunValidatingProcessorTest(x => x.Hue(value), value);
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs

@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
public void ApplyInvertFilter<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Invert());
image.DebugSave(provider);
}
provider.RunValidatingProcessorTest(x => x.Invert());
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs

@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyKodachromeFilter<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Kodachrome());
image.DebugSave(provider);
}
provider.RunValidatingProcessorTest(x => x.Kodachrome());
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs

@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyLomographFilter<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Lomograph());
image.DebugSave(provider);
}
provider.RunValidatingProcessorTest(x => x.Lomograph());
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs

@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects
public void ApplyAlphaFilter<TPixel>(TestImageProvider<TPixel> provider, float value)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Opacity(value));
image.DebugSave(provider, value);
}
provider.RunValidatingProcessorTest(x => x.Opacity(value), value);
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs

@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplyPolaroidFilter<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Polaroid());
image.DebugSave(provider);
}
provider.RunValidatingProcessorTest(x => x.Polaroid());
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs

@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplySaturationFilter<TPixel>(TestImageProvider<TPixel> provider, float value)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Saturate(value));
image.DebugSave(provider, value);
}
provider.RunValidatingProcessorTest(x => x.Saturate(value), value);
}
[Theory]

6
tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs

@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
public void ApplySepiaFilter<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(x => x.Sepia());
image.DebugSave(provider);
}
provider.RunValidatingProcessorTest(x => x.Sepia());
}
[Theory]

53
tests/ImageSharp.Tests/TestUtilities/TestUtils.cs

@ -10,6 +10,8 @@ using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Tests
{
using SixLabors.Primitives;
/// <summary>
/// Various utility and extension methods.
/// </summary>
@ -142,5 +144,56 @@ namespace SixLabors.ImageSharp.Tests
/// </summary>
/// <returns>The pixel types</returns>
internal static PixelTypes[] GetAllPixelTypes() => (PixelTypes[])Enum.GetValues(typeof(PixelTypes));
/// <summary>
/// Utility for testing image processor extension methods:
/// 1. Run a processor defined by 'process'
/// 2. Run 'DebugSave()' to save the output locally
/// 3. Run 'CompareToReferenceOutput()' to compare the results to the expected output
/// </summary>
internal static void RunValidatingProcessorTest<TPixel>(
this TestImageProvider<TPixel> provider,
Action<IImageProcessingContext<TPixel>> process,
object testOutputDetails = null)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(process);
image.DebugSave(provider, testOutputDetails);
image.CompareToReferenceOutput(provider, testOutputDetails);
}
}
internal static void RunRectangleConstrainedValidatingProcessorTest<TPixel>(
this TestImageProvider<TPixel> provider,
Action<IImageProcessingContext<TPixel>, Rectangle> process,
object testOutputDetails = null)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
var bounds = new Rectangle(image.Width / 4, image.Width / 4, image.Width / 2, image.Height / 2);
image.Mutate(x => process(x, bounds));
image.DebugSave(provider, testOutputDetails);
image.CompareToReferenceOutput(provider, testOutputDetails);
}
}
/// <summary>
/// Same as <see cref="RunValidatingProcessorTest{TPixel}"/> but without the 'CompareToReferenceOutput()' step.
/// </summary>
internal static void RunProcessorTest<TPixel>(
this TestImageProvider<TPixel> provider,
Action<IImageProcessingContext<TPixel>> process,
object testOutputDetails = null)
where TPixel : struct, IPixel<TPixel>
{
using (Image<TPixel> image = provider.GetImage())
{
image.Mutate(process);
image.DebugSave(provider, testOutputDetails);
}
}
}
}

2
tests/Images/External

@ -1 +1 @@
Subproject commit dc5479d00b2312f691e6249b9f7765e2316d4a30
Subproject commit e12e75f12925de1b88dc7e564c509ee896aa5f53
Loading…
Cancel
Save