// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; using System.Text; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats.PixelBlenders; using SixLabors.ImageSharp.Tests.TestUtilities; using Xunit; namespace SixLabors.ImageSharp.Tests.PixelFormats { public class PixelBlenderTests { public static TheoryData BlenderMappings = new TheoryData() { { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcOver), PixelBlenderMode.Normal }, { new TestPixel(), typeof(DefaultPixelBlenders.Screen_SrcOver), PixelBlenderMode.Screen }, { new TestPixel(), typeof(DefaultPixelBlenders.HardLight_SrcOver), PixelBlenderMode.HardLight }, { new TestPixel(), typeof(DefaultPixelBlenders.Overlay_SrcOver), PixelBlenderMode.Overlay }, { new TestPixel(), typeof(DefaultPixelBlenders.Darken_SrcOver), PixelBlenderMode.Darken }, { new TestPixel(), typeof(DefaultPixelBlenders.Lighten_SrcOver), PixelBlenderMode.Lighten }, { new TestPixel(), typeof(DefaultPixelBlenders.Add_SrcOver), PixelBlenderMode.Add }, { new TestPixel(), typeof(DefaultPixelBlenders.Subtract_SrcOver), PixelBlenderMode.Subtract }, { new TestPixel(), typeof(DefaultPixelBlenders.Multiply_SrcOver), PixelBlenderMode.Multiply }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_Src), PixelBlenderMode.Src }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcAtop), PixelBlenderMode.Atop }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcOver), PixelBlenderMode.Over }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcIn), PixelBlenderMode.In }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcOut), PixelBlenderMode.Out }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_Dest), PixelBlenderMode.Dest }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_DestAtop), PixelBlenderMode.DestAtop }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_DestOver), PixelBlenderMode.DestOver }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_DestIn), PixelBlenderMode.DestIn }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_DestOut), PixelBlenderMode.DestOut }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_Clear), PixelBlenderMode.Clear }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_Xor), PixelBlenderMode.Xor }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcOver), PixelBlenderMode.Normal }, { new TestPixel(), typeof(DefaultPixelBlenders.Screen_SrcOver), PixelBlenderMode.Screen }, { new TestPixel(), typeof(DefaultPixelBlenders.HardLight_SrcOver), PixelBlenderMode.HardLight }, { new TestPixel(), typeof(DefaultPixelBlenders.Overlay_SrcOver), PixelBlenderMode.Overlay }, { new TestPixel(), typeof(DefaultPixelBlenders.Darken_SrcOver), PixelBlenderMode.Darken }, { new TestPixel(), typeof(DefaultPixelBlenders.Lighten_SrcOver), PixelBlenderMode.Lighten }, { new TestPixel(), typeof(DefaultPixelBlenders.Add_SrcOver), PixelBlenderMode.Add }, { new TestPixel(), typeof(DefaultPixelBlenders.Subtract_SrcOver), PixelBlenderMode.Subtract }, { new TestPixel(), typeof(DefaultPixelBlenders.Multiply_SrcOver), PixelBlenderMode.Multiply }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_Src), PixelBlenderMode.Src }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcAtop), PixelBlenderMode.Atop }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcOver), PixelBlenderMode.Over }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcIn), PixelBlenderMode.In }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_SrcOut), PixelBlenderMode.Out }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_Dest), PixelBlenderMode.Dest }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_DestAtop), PixelBlenderMode.DestAtop }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_DestOver), PixelBlenderMode.DestOver }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_DestIn), PixelBlenderMode.DestIn }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_DestOut), PixelBlenderMode.DestOut }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_Clear), PixelBlenderMode.Clear }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal_Xor), PixelBlenderMode.Xor }, }; [Theory] [MemberData(nameof(BlenderMappings))] public void ReturnsCorrectBlender(TestPixel pixel, Type type, PixelBlenderMode mode) where TPixel : struct, IPixel { PixelBlender blender = PixelOperations.Instance.GetPixelBlender(mode); Assert.IsType(type, blender); } } }