From 31f82ac3495e2cea4bcc715ba4b4637c518a404a Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Sun, 21 Jan 2018 18:31:42 +0100 Subject: [PATCH] reference images for filter tests + DRY out repeated code --- .../Processors/Filters/BlackWhiteTest.cs | 7 +-- .../Processors/Filters/BrightnessTest.cs | 6 +-- .../Processors/Filters/ColorBlindnessTest.cs | 6 +-- .../Processors/Filters/ContrastTest.cs | 6 +-- .../Processors/Filters/FilterTest.cs | 14 +++-- .../Processors/Filters/GrayscaleTest.cs | 15 +----- .../Processing/Processors/Filters/HueTest.cs | 6 +-- .../Processors/Filters/InvertTest.cs | 6 +-- .../Processors/Filters/KodachromeTest.cs | 6 +-- .../Processors/Filters/LomographTest.cs | 6 +-- .../Processors/Filters/OpacityTest.cs | 6 +-- .../Processors/Filters/PolaroidTest.cs | 6 +-- .../Processors/Filters/SaturateTest.cs | 6 +-- .../Processors/Filters/SepiaTest.cs | 6 +-- .../TestUtilities/TestUtils.cs | 53 +++++++++++++++++++ tests/Images/External | 2 +- 16 files changed, 74 insertions(+), 83 deletions(-) diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs index b0b9aaa492..4174e9b3ab 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs @@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplyBlackWhiteFilter(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image 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(TestImageProvider provider) where TPixel : struct, IPixel { + // TODO: We need a DRY-refactor on these tests for all Filter tests! using (Image source = provider.GetImage()) using (Image image = source.Clone()) { diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs index eccf27899a..ced0a3ca72 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs @@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects public void ApplyBrightnessFilter(TestImageProvider provider, float value) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Brightness(value)); - image.DebugSave(provider, value); - } + provider.RunValidatingProcessorTest(ctx => ctx.Brightness(value), value); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs index 6c51afd003..06519931e8 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs @@ -31,11 +31,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplyColorBlindnessFilter(TestImageProvider provider, ColorBlindness colorBlindness) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.ColorBlindness(colorBlindness)); - image.DebugSave(provider, colorBlindness.ToString()); - } + provider.RunValidatingProcessorTest(x => x.ColorBlindness(colorBlindness), colorBlindness.ToString()); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs index 337b810181..0154f8a674 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs @@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects public void ApplyContrastFilter(TestImageProvider provider, float value) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Contrast(value)); - image.DebugSave(provider, value); - } + provider.RunValidatingProcessorTest(x => x.Contrast(value), value); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs index a98153087b..bd66a29eec 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs @@ -21,14 +21,12 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplyFilter(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image 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] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs index 711c8e10af..1991663916 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs @@ -29,20 +29,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplyGrayscaleFilter(TestImageProvider provider, GrayscaleMode value) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Grayscale(value)); - var rgb = default(Rgb24); - System.Span 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] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs index 98dd95515d..0cf42a8d57 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs @@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplyHueFilter(TestImageProvider provider, int value) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Hue(value)); - image.DebugSave(provider, value); - } + provider.RunValidatingProcessorTest(x => x.Hue(value), value); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs index 69df033f01..b075a059de 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs @@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects public void ApplyInvertFilter(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Invert()); - image.DebugSave(provider); - } + provider.RunValidatingProcessorTest(x => x.Invert()); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs index 6daef29aac..f133da34a0 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs @@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplyKodachromeFilter(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Kodachrome()); - image.DebugSave(provider); - } + provider.RunValidatingProcessorTest(x => x.Kodachrome()); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs index 4e54828a67..08a4e6ff9f 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs @@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplyLomographFilter(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Lomograph()); - image.DebugSave(provider); - } + provider.RunValidatingProcessorTest(x => x.Lomograph()); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs index 9ba77b9836..9f888c09f5 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs @@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects public void ApplyAlphaFilter(TestImageProvider provider, float value) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Opacity(value)); - image.DebugSave(provider, value); - } + provider.RunValidatingProcessorTest(x => x.Opacity(value), value); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs index 42bd859dc6..aa5b773cd9 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs @@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplyPolaroidFilter(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Polaroid()); - image.DebugSave(provider); - } + provider.RunValidatingProcessorTest(x => x.Polaroid()); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs index 8cfbb198c8..440564c26f 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs @@ -24,11 +24,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplySaturationFilter(TestImageProvider provider, float value) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Saturate(value)); - image.DebugSave(provider, value); - } + provider.RunValidatingProcessorTest(x => x.Saturate(value), value); } [Theory] diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs index 9947d21d05..71b8f311f3 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs @@ -17,11 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters public void ApplySepiaFilter(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage()) - { - image.Mutate(x => x.Sepia()); - image.DebugSave(provider); - } + provider.RunValidatingProcessorTest(x => x.Sepia()); } [Theory] diff --git a/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs b/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs index a468c21165..9050db15cb 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs @@ -10,6 +10,8 @@ using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Tests { + using SixLabors.Primitives; + /// /// Various utility and extension methods. /// @@ -142,5 +144,56 @@ namespace SixLabors.ImageSharp.Tests /// /// The pixel types internal static PixelTypes[] GetAllPixelTypes() => (PixelTypes[])Enum.GetValues(typeof(PixelTypes)); + + /// + /// 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 + /// + internal static void RunValidatingProcessorTest( + this TestImageProvider provider, + Action> process, + object testOutputDetails = null) + where TPixel : struct, IPixel + { + using (Image image = provider.GetImage()) + { + image.Mutate(process); + image.DebugSave(provider, testOutputDetails); + image.CompareToReferenceOutput(provider, testOutputDetails); + } + } + + internal static void RunRectangleConstrainedValidatingProcessorTest( + this TestImageProvider provider, + Action, Rectangle> process, + object testOutputDetails = null) + where TPixel : struct, IPixel + { + using (Image 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); + } + } + + /// + /// Same as but without the 'CompareToReferenceOutput()' step. + /// + internal static void RunProcessorTest( + this TestImageProvider provider, + Action> process, + object testOutputDetails = null) + where TPixel : struct, IPixel + { + using (Image image = provider.GetImage()) + { + image.Mutate(process); + image.DebugSave(provider, testOutputDetails); + } + } } } \ No newline at end of file diff --git a/tests/Images/External b/tests/Images/External index dc5479d00b..e12e75f129 160000 --- a/tests/Images/External +++ b/tests/Images/External @@ -1 +1 @@ -Subproject commit dc5479d00b2312f691e6249b9f7765e2316d4a30 +Subproject commit e12e75f12925de1b88dc7e564c509ee896aa5f53