diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs index d02c2d76e..d9dafe81c 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs @@ -26,7 +26,7 @@ namespace ImageSharp.Tests.Formats.Jpg // TODO: Turned off PixelTypes.All to be CI-friendly, what should be the practice? [Theory] //[WithFileCollection(nameof(AllJpegFiles), PixelTypes.All)] - [WithFileCollection(nameof(AllJpegFiles), PixelTypes.Color | PixelTypes.Argb)] + [WithFileCollection(nameof(AllJpegFiles), PixelTypes.Color | PixelTypes.ColorWithDefaultImageClass | PixelTypes.Argb)] public void OpenJpeg_SaveBmp(TestImageProvider provider) where TColor : struct, IPackedPixel, IEquatable { @@ -39,8 +39,8 @@ namespace ImageSharp.Tests.Formats.Jpg public static IEnumerable AllBmpFiles => TestImages.Bmp.All; [Theory] - [WithFileCollection(nameof(AllBmpFiles), PixelTypes.Color | PixelTypes.Argb, JpegSubsample.Ratio420, 75)] - [WithFileCollection(nameof(AllBmpFiles), PixelTypes.Color | PixelTypes.Argb, JpegSubsample.Ratio444, 75)] + [WithFileCollection(nameof(AllBmpFiles), PixelTypes.Color | PixelTypes.ColorWithDefaultImageClass | PixelTypes.Argb, JpegSubsample.Ratio420, 75)] + [WithFileCollection(nameof(AllBmpFiles), PixelTypes.Color | PixelTypes.ColorWithDefaultImageClass | PixelTypes.Argb, JpegSubsample.Ratio444, 75)] public void OpenBmp_SaveJpeg(TestImageProvider provider, JpegSubsample subSample, int quality) where TColor : struct, IPackedPixel, IEquatable { diff --git a/tests/ImageSharp.Tests/Image/PixelAccessorTests.cs b/tests/ImageSharp.Tests/Image/PixelAccessorTests.cs index 409184303..70573e4f6 100644 --- a/tests/ImageSharp.Tests/Image/PixelAccessorTests.cs +++ b/tests/ImageSharp.Tests/Image/PixelAccessorTests.cs @@ -17,10 +17,10 @@ namespace ImageSharp.Tests /// public class PixelAccessorTests { - public static Image CreateTestImage() + public static Image CreateTestImage(GenericFactory factory) where TColor : struct, IPackedPixel, IEquatable { - Image image = new Image(10, 10); + Image image = factory.CreateImage(10, 10); using (var pixels = image.Lock()) { diff --git a/tests/ImageSharp.Tests/TestFile.cs b/tests/ImageSharp.Tests/TestFile.cs index 5325f7db5..aab7c2620 100644 --- a/tests/ImageSharp.Tests/TestFile.cs +++ b/tests/ImageSharp.Tests/TestFile.cs @@ -27,28 +27,19 @@ namespace ImageSharp.Tests private readonly Image image; private readonly string file; - private TestFile(string file, bool decodeImage) + private TestFile(string file) { this.file = file; this.Bytes = File.ReadAllBytes(file); - if (decodeImage) - { - this.image = new Image(this.Bytes); - } - + this.image = new Image(this.Bytes); } - - public static TestFile Create(string file) => CreateImpl(file, true); - - // No need to decode the image when used by TestImageProvider! - internal static TestFile CreateWithoutImage(string file) => CreateImpl(file, false); - private static TestFile CreateImpl(string file, bool decodeImage) + public static TestFile Create(string file) { return cache.GetOrAdd(file, (string fileName) => { - return new TestFile(FormatsDirectory + fileName, decodeImage); + return new TestFile(FormatsDirectory + fileName); }); } @@ -82,10 +73,6 @@ namespace ImageSharp.Tests public Image CreateImage() { - if (this.image == null) - { - throw new InvalidOperationException("TestFile.CreateImage() is invalid because instance has been created with decodeImage = false!"); - } return new Image(this.image); } } diff --git a/tests/ImageSharp.Tests/TestUtilities/GenericFactory.cs b/tests/ImageSharp.Tests/TestUtilities/GenericFactory.cs new file mode 100644 index 000000000..6b4d8ecc7 --- /dev/null +++ b/tests/ImageSharp.Tests/TestUtilities/GenericFactory.cs @@ -0,0 +1,41 @@ +// +// Copyright (c) James Jackson-South and contributors. +// Licensed under the Apache License, Version 2.0. +// + +namespace ImageSharp.Tests.TestUtilities +{ + using System; + + /// + /// Utility class to create specialized subclasses generic classes (eg. ) + /// + public class GenericFactory + where TColor : struct, IPackedPixel, IEquatable + { + public virtual Image CreateImage(int width, int height) + { + return new Image(width, height); + } + + public virtual Image CreateImage(byte[] bytes) + { + return new Image(bytes); + } + + public virtual PixelArea CreatePixelArea(int width, int height, ComponentOrder componentOrder) + { + return new PixelArea(width, height, componentOrder); + } + } + + public class DefaultImageClassSpecificFactory : GenericFactory + { + public override Image CreateImage(byte[] bytes) => new Image(bytes); + + public override Image CreateImage(int width, int height) => new Image(width, height); + + public override PixelArea CreatePixelArea(int width, int height, ComponentOrder componentOrder) + => new PixelArea(width, height, componentOrder); + } +} \ No newline at end of file diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageDataAttributeBase.cs b/tests/ImageSharp.Tests/TestUtilities/ImageDataAttributeBase.cs index fc27f32a0..094a66149 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageDataAttributeBase.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageDataAttributeBase.cs @@ -6,6 +6,7 @@ namespace ImageSharp.Tests.TestUtilities { using System; using System.Collections.Generic; + using System.Diagnostics; using System.Linq; using System.Reflection; @@ -35,15 +36,16 @@ namespace ImageSharp.Tests.TestUtilities } else { - foreach (var pixelType in this.PixelTypes.ToTypes()) + foreach (var kv in this.PixelTypes.ExpandAllTypes()) { - var factoryType = typeof(TestImageProvider<>).MakeGenericType(pixelType); + var factoryType = typeof(TestImageProvider<>).MakeGenericType(kv.Value); foreach (object[] originalFacoryMethodArgs in this.GetAllFactoryMethodArgs(testMethod, factoryType)) { - var actualFactoryMethodArgs = new object[originalFacoryMethodArgs.Length + 1]; + var actualFactoryMethodArgs = new object[originalFacoryMethodArgs.Length + 2]; Array.Copy(originalFacoryMethodArgs, actualFactoryMethodArgs, originalFacoryMethodArgs.Length); - actualFactoryMethodArgs[actualFactoryMethodArgs.Length - 1] = testMethod; + actualFactoryMethodArgs[actualFactoryMethodArgs.Length - 2] = testMethod; + actualFactoryMethodArgs[actualFactoryMethodArgs.Length - 1] = kv.Key; var factory = factoryType.GetMethod(this.GetFactoryMethodName(testMethod)) .Invoke(null, actualFactoryMethodArgs); diff --git a/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs b/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs index 627715679..5ddc8cbcc 100644 --- a/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs +++ b/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Tests.TestUtilities [Flags] public enum PixelTypes : uint { - None = 0, + Undefined = 0, Alpha8 = 1 << 0, @@ -48,6 +48,11 @@ namespace ImageSharp.Tests.TestUtilities Short2 = 1 << 15, Short4 = 1 << 16, + + /// + /// Triggers instantiating the subclass of + /// + ColorWithDefaultImageClass = 1 << 29, // TODO: Add multi-flag entries by rules defined in PackedPixelConverterHelper diff --git a/tests/ImageSharp.Tests/TestUtilities/TestImageProvider.cs b/tests/ImageSharp.Tests/TestUtilities/TestImageProvider.cs index 5664c7595..5c58751ea 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestImageProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestImageProvider.cs @@ -16,10 +16,7 @@ namespace ImageSharp.Tests.TestUtilities public abstract class TestImageProvider : ITestImageFactory where TColor : struct, IPackedPixel, IEquatable { - /// - /// Returns an instance to the test case with the necessary traits. - /// - public abstract Image GetImage(); + public PixelTypes PixelType { get; private set; } = typeof(TColor).GetPixelType(); public virtual string SourceFileOrDescription => ""; @@ -28,8 +25,60 @@ namespace ImageSharp.Tests.TestUtilities /// public ImagingTestCaseUtility Utility { get; private set; } - protected virtual TestImageProvider InitUtility(MethodInfo testMethod) + public GenericFactory Factory { get; private set; } = new GenericFactory(); + + public static TestImageProvider Blank( + int width, + int height, + MethodInfo testMethod = null, + PixelTypes pixelTypeOverride = PixelTypes.Undefined) + => new BlankProvider(width, height).Init(testMethod, pixelTypeOverride); + + public static TestImageProvider File( + string filePath, + MethodInfo testMethod = null, + PixelTypes pixelTypeOverride = PixelTypes.Undefined) + { + return new FileProvider(filePath).Init(testMethod, pixelTypeOverride); + } + + public static TestImageProvider Lambda( + Func, Image> func, + MethodInfo testMethod = null, + PixelTypes pixelTypeOverride = PixelTypes.Undefined) + => new LambdaProvider(func).Init(testMethod, pixelTypeOverride); + + public static TestImageProvider Solid( + int width, + int height, + byte r, + byte g, + byte b, + byte a = 255, + MethodInfo testMethod = null, + PixelTypes pixelTypeOverride = PixelTypes.Undefined) + { + return new SolidProvider(width, height, r, g, b, a).Init(testMethod, pixelTypeOverride); + } + + /// + /// Returns an instance to the test case with the necessary traits. + /// + public abstract Image GetImage(); + + protected TestImageProvider Init(MethodInfo testMethod, PixelTypes pixelTypeOverride) { + if (pixelTypeOverride != PixelTypes.Undefined) + { + this.PixelType = pixelTypeOverride; + } + + if (pixelTypeOverride == PixelTypes.ColorWithDefaultImageClass) + { + this.Factory = new DefaultImageClassSpecificFactory() as GenericFactory; + } + + this.Utility = new ImagingTestCaseUtility() { SourceFileOrDescription = this.SourceFileOrDescription, @@ -46,10 +95,6 @@ namespace ImageSharp.Tests.TestUtilities private class BlankProvider : TestImageProvider { - protected int Width { get; } - - protected int Height { get; } - public BlankProvider(int width, int height) { this.Width = width; @@ -58,28 +103,13 @@ namespace ImageSharp.Tests.TestUtilities public override string SourceFileOrDescription => $"Blank{this.Width}x{this.Height}"; - public override Image GetImage() => new Image(this.Width, this.Height); - } - - public static TestImageProvider Blank(int width, int height, MethodInfo testMethod = null) - => new BlankProvider(width, height).InitUtility(testMethod); - - private class LambdaProvider : TestImageProvider - { - private readonly Func> creator; + protected int Height { get; } - public LambdaProvider(Func> creator) - { - this.creator = creator; - } + protected int Width { get; } - public override Image GetImage() => this.creator(); + public override Image GetImage() => this.Factory.CreateImage(this.Width, this.Height); } - public static TestImageProvider Lambda( - Func> func, - MethodInfo testMethod = null) => new LambdaProvider(func).InitUtility(testMethod); - private class FileProvider : TestImageProvider { private static ConcurrentDictionary> cache = @@ -100,37 +130,35 @@ namespace ImageSharp.Tests.TestUtilities this.filePath, fn => { - var testFile = TestFile.CreateWithoutImage(this.filePath); - return new Image(testFile.Bytes); + var testFile = TestFile.Create(this.filePath); + return this.Factory.CreateImage(testFile.Bytes); }); return new Image(cachedImage); } } - public static TestImageProvider File(string filePath, MethodInfo testMethod = null) + private class LambdaProvider : TestImageProvider { - return new FileProvider(filePath).InitUtility(testMethod); + private readonly Func, Image> creator; + + public LambdaProvider(Func, Image> creator) + { + this.creator = creator; + } + + public override Image GetImage() => this.creator(this.Factory); } private class SolidProvider : BlankProvider { - private readonly byte r; - - private readonly byte g; + private readonly byte a; private readonly byte b; - private readonly byte a; - - public override Image GetImage() - { - var image = base.GetImage(); - TColor color = default(TColor); - color.PackFromBytes(this.r, this.g, this.b, this.a); + private readonly byte g; - return image.Fill(color); - } + private readonly byte r; public SolidProvider(int width, int height, byte r, byte g, byte b, byte a) : base(width, height) @@ -140,18 +168,18 @@ namespace ImageSharp.Tests.TestUtilities this.b = b; this.a = a; } - } - public static TestImageProvider Solid( - int width, - int height, - byte r, - byte g, - byte b, - byte a = 255, - MethodInfo testMethod = null) - { - return new SolidProvider(width, height, r, g, b, a).InitUtility(testMethod); + public override string SourceFileOrDescription + => $"Solid{this.Width}x{this.Height}_({this.r},{this.g},{this.b},{this.a})"; + + public override Image GetImage() + { + var image = base.GetImage(); + TColor color = default(TColor); + color.PackFromBytes(this.r, this.g, this.b, this.a); + + return image.Fill(color); + } } } @@ -161,4 +189,4 @@ namespace ImageSharp.Tests.TestUtilities public interface ITestImageFactory { } -} +} \ No newline at end of file diff --git a/tests/ImageSharp.Tests/TestUtilities/TestUtilityExtensions.cs b/tests/ImageSharp.Tests/TestUtilities/TestUtilityExtensions.cs index b4d8bcb32..670db96d9 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestUtilityExtensions.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestUtilityExtensions.cs @@ -2,6 +2,7 @@ // Copyright (c) James Jackson-South and contributors. // Licensed under the Apache License, Version 2.0. // + namespace ImageSharp.Tests.TestUtilities { using System; @@ -15,27 +16,32 @@ namespace ImageSharp.Tests.TestUtilities /// public static class TestUtilityExtensions { + private static readonly Dictionary ClrTypes2PixelTypes = new Dictionary(); + private static readonly Assembly ImageSharpAssembly = typeof(Color).GetTypeInfo().Assembly; private static readonly Dictionary PixelTypes2ClrTypes = new Dictionary(); - - private static readonly PixelTypes[] PixelTypesExpanded = - FlagsHelper.GetSortedValues().Where(t => t != PixelTypes.All && t != PixelTypes.None).ToArray(); + + private static readonly PixelTypes[] AllConcretePixelTypes = FlagsHelper + .GetSortedValues() + .Except(new [] {PixelTypes.Undefined, PixelTypes.All }) + .ToArray(); static TestUtilityExtensions() { - Assembly assembly = typeof(Color).GetTypeInfo().Assembly; string nameSpace = typeof(Color).FullName; nameSpace = nameSpace.Substring(0, nameSpace.Length - typeof(Color).Name.Length - 1); - foreach (PixelTypes pt in PixelTypesExpanded) + foreach (PixelTypes pt in AllConcretePixelTypes.Where(pt => pt != PixelTypes.ColorWithDefaultImageClass)) { string typeName = $"{nameSpace}.{FlagsHelper.ToString(pt)}"; - var t = assembly.GetType(typeName); + var t = ImageSharpAssembly.GetType(typeName); if (t != null) { PixelTypes2ClrTypes[pt] = t; + ClrTypes2PixelTypes[t] = pt; } } + PixelTypes2ClrTypes[PixelTypes.ColorWithDefaultImageClass] = typeof(Color); } public static Type GetPackedType(Type pixelType) @@ -46,13 +52,10 @@ namespace ImageSharp.Tests.TestUtilities return intrfcType.GetGenericArguments().Single(); } - + public static bool HasFlag(this PixelTypes pixelTypes, PixelTypes flag) => (pixelTypes & flag) == flag; - public static bool IsEquivalentTo( - this Image a, - Image b, - bool compareAlpha = true) + public static bool IsEquivalentTo(this Image a, Image b, bool compareAlpha = true) where TColor : struct, IPackedPixel, IEquatable { if (a.Width != b.Width || a.Height != b.Height) @@ -101,19 +104,23 @@ namespace ImageSharp.Tests.TestUtilities public static Type ToType(this PixelTypes pixelType) => PixelTypes2ClrTypes[pixelType]; - public static IEnumerable ToTypes(this PixelTypes pixelTypes) + public static PixelTypes GetPixelType(this Type colorStructClrType) => ClrTypes2PixelTypes[colorStructClrType]; + + public static IEnumerable> ExpandAllTypes(this PixelTypes pixelTypes) { - if (pixelTypes == PixelTypes.None) + if (pixelTypes == PixelTypes.Undefined) { - return Enumerable.Empty(); + return Enumerable.Empty>(); } else if (pixelTypes == PixelTypes.All) { // TODO: Need to return unknown types here without forcing CLR to load all types in ImageSharp assembly - return PixelTypes2ClrTypes.Values; + return PixelTypes2ClrTypes; } - return PixelTypesExpanded.Where(pt => pixelTypes.HasFlag(pt)).Select(pt => pt.ToType()); + return AllConcretePixelTypes + .Where(pt => pixelTypes.HasFlag(pt)) + .Select(pt => new KeyValuePair(pt, pt.ToType())); } } } \ No newline at end of file diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageFactoryTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs similarity index 77% rename from tests/ImageSharp.Tests/TestUtilities/Tests/TestImageFactoryTests.cs rename to tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs index 1cc8ac35b..8a7985b38 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageFactoryTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs @@ -4,6 +4,7 @@ // // ReSharper disable InconsistentNaming + namespace ImageSharp.Tests.TestUtilities.Tests { using System; @@ -11,22 +12,18 @@ namespace ImageSharp.Tests.TestUtilities.Tests using Xunit; using Xunit.Abstractions; - public class TestImageFactoryTests + public class TestImageProviderTests { - - public TestImageFactoryTests(ITestOutputHelper output) + public TestImageProviderTests(ITestOutputHelper output) { this.Output = output; } private ITestOutputHelper Output { get; } - [Theory] [WithBlankImages(42, 666, PixelTypes.Color | PixelTypes.Argb | PixelTypes.HalfSingle, "hello")] - public void Use_WithEmptyImageAttribute( - TestImageProvider provider, - string message) + public void Use_WithEmptyImageAttribute(TestImageProvider provider, string message) where TColor : struct, IPackedPixel, IEquatable { var img = provider.GetImage(); @@ -50,6 +47,27 @@ namespace ImageSharp.Tests.TestUtilities.Tests Assert.Equal("hello", message); } + [Theory] + [WithBlankImages(1, 1, PixelTypes.Color, PixelTypes.Color)] + [WithBlankImages(1, 1, PixelTypes.Alpha8, PixelTypes.Alpha8)] + [WithBlankImages(1, 1, PixelTypes.ColorWithDefaultImageClass, PixelTypes.ColorWithDefaultImageClass)] + public void PixelType_PropertyValueIsCorrect(TestImageProvider provider, PixelTypes expected) + where TColor : struct, IPackedPixel, IEquatable + { + Assert.Equal(expected, provider.PixelType); + } + + [Theory] + [WithBlankImages(1, 1, PixelTypes.ColorWithDefaultImageClass)] + public void PixelTypes_ColorWithDefaultImageClass_TriggersCreatingTheNonGenericDerivedImageClass( + TestImageProvider provider) + where TColor : struct, IPackedPixel, IEquatable + { + var img = provider.GetImage(); + + Assert.IsType(img); + } + // TODO: @dlemstra this works only with constant strings! [Theory] [WithFile(TestImages.Bmp.Car, PixelTypes.All, 88)] @@ -78,7 +96,7 @@ namespace ImageSharp.Tests.TestUtilities.Tests var image = provider.GetImage(); provider.Utility.SaveTestOutputFile(image, "png"); } - + [Theory] [WithSolidFilledImages(10, 20, 255, 100, 50, 200, PixelTypes.Color | PixelTypes.Argb)] public void Use_WithSolidFilledImagesAttribute(TestImageProvider provider) @@ -107,21 +125,31 @@ namespace ImageSharp.Tests.TestUtilities.Tests } } - public static Image TestMemberFactory() + /// + /// Need to us to create instance of when pixelType is ColorWithDefaultImageClass + /// + /// + /// + /// + public static Image CreateTestImage(GenericFactory factory) where TColor : struct, IPackedPixel, IEquatable { - return new Image(3, 3); + return factory.CreateImage(3, 3); } [Theory] - [WithMemberFactory(nameof(TestMemberFactory), PixelTypes.All)] + [WithMemberFactory(nameof(CreateTestImage), PixelTypes.All)] public void Use_WithMemberFactoryAttribute(TestImageProvider provider) where TColor : struct, IPackedPixel, IEquatable { var img = provider.GetImage(); Assert.Equal(img.Width, 3); - } + if (provider.PixelType == PixelTypes.ColorWithDefaultImageClass) + { + Assert.IsType(img); + } + } public static readonly TheoryData BasicData = new TheoryData() { @@ -131,7 +159,6 @@ namespace ImageSharp.Tests.TestUtilities.Tests 20) }; - [Theory] [MemberData(nameof(BasicData))] public void Blank_MemberData(TestImageProvider provider) diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs index 948479d7a..7d8d0cc6b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs @@ -7,6 +7,7 @@ namespace ImageSharp.Tests.TestUtilities.Tests { using System; + using System.Collections.Generic; using System.Linq; using System.Numerics; using System.Reflection; @@ -23,10 +24,10 @@ namespace ImageSharp.Tests.TestUtilities.Tests private ITestOutputHelper Output { get; } - public static Image CreateTestImage() + public static Image CreateTestImage(GenericFactory factory) where TColor : struct, IPackedPixel, IEquatable { - Image image = new Image(10, 10); + Image image = factory.CreateImage(10, 10); using (var pixels = image.Lock()) { @@ -93,31 +94,52 @@ namespace ImageSharp.Tests.TestUtilities.Tests [InlineData(PixelTypes.Color, typeof(Color))] [InlineData(PixelTypes.Argb, typeof(Argb))] [InlineData(PixelTypes.HalfVector4, typeof(HalfVector4))] + [InlineData(PixelTypes.ColorWithDefaultImageClass, typeof(Color))] public void ToType(PixelTypes pt, Type expectedType) { Assert.Equal(pt.ToType(), expectedType); } + [Theory] + [InlineData(typeof(Color), PixelTypes.Color)] + [InlineData(typeof(Argb), PixelTypes.Argb)] + public void GetPixelType(Type clrType, PixelTypes expectedPixelType) + { + Assert.Equal(expectedPixelType, clrType.GetPixelType()); + } + + private static void AssertContainsPixelType( + PixelTypes pt, + IEnumerable> pixelTypesExp) + { + Assert.Contains(new KeyValuePair(pt, typeof(T)), pixelTypesExp); + + } + [Fact] public void ToTypes() { - PixelTypes pixelTypes = PixelTypes.Alpha8 | PixelTypes.Bgr565 | PixelTypes.Color | PixelTypes.HalfVector2; + PixelTypes pixelTypes = PixelTypes.Alpha8 | PixelTypes.Bgr565 | PixelTypes.Color | PixelTypes.HalfVector2 | PixelTypes.ColorWithDefaultImageClass; - var clrTypes = pixelTypes.ToTypes().ToArray(); + var expanded = pixelTypes.ExpandAllTypes(); - Assert.Equal(clrTypes.Length, 4); - Assert.Contains(typeof(Alpha8), clrTypes); - Assert.Contains(typeof(Bgr565), clrTypes); - Assert.Contains(typeof(Color), clrTypes); - Assert.Contains(typeof(HalfVector2), clrTypes); + Assert.Equal(expanded.Count(), 5); + + AssertContainsPixelType(PixelTypes.Alpha8, expanded); + AssertContainsPixelType(PixelTypes.Bgr565, expanded); + AssertContainsPixelType(PixelTypes.Color, expanded); + AssertContainsPixelType(PixelTypes.HalfVector2, expanded); + AssertContainsPixelType(PixelTypes.ColorWithDefaultImageClass, expanded); } [Fact] public void ToTypes_All() { - var clrTypes = PixelTypes.All.ToTypes().ToArray(); + var expanded = PixelTypes.All.ExpandAllTypes().ToArray(); - Assert.True(clrTypes.Length >= FlagsHelper.GetSortedValues().Length - 2); + Assert.True(expanded.Length >= FlagsHelper.GetSortedValues().Length - 2); + AssertContainsPixelType(PixelTypes.Color, expanded); + AssertContainsPixelType(PixelTypes.ColorWithDefaultImageClass, expanded); } } } \ No newline at end of file diff --git a/tests/ImageSharp.Tests/TestUtilities/WithMemberFactoryAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/WithMemberFactoryAttribute.cs index 3860880c3..598b01b45 100644 --- a/tests/ImageSharp.Tests/TestUtilities/WithMemberFactoryAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/WithMemberFactoryAttribute.cs @@ -6,6 +6,7 @@ namespace ImageSharp.Tests.TestUtilities { using System; + using System.Linq; using System.Reflection; /// @@ -34,8 +35,12 @@ namespace ImageSharp.Tests.TestUtilities var m = testMethod.DeclaringType.GetMethod(this.memberMethodName); var args = factoryType.GetGenericArguments(); - var imgType = typeof(Image<>).MakeGenericType(args); - var funcType = typeof(Func<>).MakeGenericType(imgType); + var colorType = args.Single(); + + var imgType = typeof(Image<>).MakeGenericType(colorType); + var genericFactoryType = (typeof(GenericFactory<>)).MakeGenericType(colorType); + + var funcType = typeof(Func<,>).MakeGenericType(genericFactoryType, imgType); var genericMethod = m.MakeGenericMethod(args);