// 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), PixelBlenderMode.Normal }, { new TestPixel(), typeof(DefaultPixelBlenders.Screen), PixelBlenderMode.Screen }, { new TestPixel(), typeof(DefaultPixelBlenders.HardLight), PixelBlenderMode.HardLight }, { new TestPixel(), typeof(DefaultPixelBlenders.Overlay), PixelBlenderMode.Overlay }, { new TestPixel(), typeof(DefaultPixelBlenders.Darken), PixelBlenderMode.Darken }, { new TestPixel(), typeof(DefaultPixelBlenders.Lighten), PixelBlenderMode.Lighten }, { new TestPixel(), typeof(DefaultPixelBlenders.Add), PixelBlenderMode.Add }, { new TestPixel(), typeof(DefaultPixelBlenders.Subtract), PixelBlenderMode.Subtract }, { new TestPixel(), typeof(DefaultPixelBlenders.Multiply), PixelBlenderMode.Multiply }, { new TestPixel(), typeof(DefaultPixelBlenders.Src), PixelBlenderMode.Src }, { new TestPixel(), typeof(DefaultPixelBlenders.Atop), PixelBlenderMode.Atop }, { new TestPixel(), typeof(DefaultPixelBlenders.Over), PixelBlenderMode.Over }, { new TestPixel(), typeof(DefaultPixelBlenders.In), PixelBlenderMode.In }, { new TestPixel(), typeof(DefaultPixelBlenders.Out), PixelBlenderMode.Out }, { new TestPixel(), typeof(DefaultPixelBlenders.Dest), PixelBlenderMode.Dest }, { new TestPixel(), typeof(DefaultPixelBlenders.DestAtop), PixelBlenderMode.DestAtop }, { new TestPixel(), typeof(DefaultPixelBlenders.DestOver), PixelBlenderMode.DestOver }, { new TestPixel(), typeof(DefaultPixelBlenders.DestIn), PixelBlenderMode.DestIn }, { new TestPixel(), typeof(DefaultPixelBlenders.DestOut), PixelBlenderMode.DestOut }, { new TestPixel(), typeof(DefaultPixelBlenders.Clear), PixelBlenderMode.Clear }, { new TestPixel(), typeof(DefaultPixelBlenders.Xor), PixelBlenderMode.Xor }, { new TestPixel(), typeof(DefaultPixelBlenders.Normal), PixelBlenderMode.Normal }, { new TestPixel(), typeof(DefaultPixelBlenders.Screen), PixelBlenderMode.Screen }, { new TestPixel(), typeof(DefaultPixelBlenders.HardLight), PixelBlenderMode.HardLight }, { new TestPixel(), typeof(DefaultPixelBlenders.Overlay), PixelBlenderMode.Overlay }, { new TestPixel(), typeof(DefaultPixelBlenders.Darken), PixelBlenderMode.Darken }, { new TestPixel(), typeof(DefaultPixelBlenders.Lighten), PixelBlenderMode.Lighten }, { new TestPixel(), typeof(DefaultPixelBlenders.Add), PixelBlenderMode.Add }, { new TestPixel(), typeof(DefaultPixelBlenders.Subtract), PixelBlenderMode.Subtract }, { new TestPixel(), typeof(DefaultPixelBlenders.Multiply), PixelBlenderMode.Multiply }, { new TestPixel(), typeof(DefaultPixelBlenders.Src), PixelBlenderMode.Src }, { new TestPixel(), typeof(DefaultPixelBlenders.Atop), PixelBlenderMode.Atop }, { new TestPixel(), typeof(DefaultPixelBlenders.Over), PixelBlenderMode.Over }, { new TestPixel(), typeof(DefaultPixelBlenders.In), PixelBlenderMode.In }, { new TestPixel(), typeof(DefaultPixelBlenders.Out), PixelBlenderMode.Out }, { new TestPixel(), typeof(DefaultPixelBlenders.Dest), PixelBlenderMode.Dest }, { new TestPixel(), typeof(DefaultPixelBlenders.DestAtop), PixelBlenderMode.DestAtop }, { new TestPixel(), typeof(DefaultPixelBlenders.DestOver), PixelBlenderMode.DestOver }, { new TestPixel(), typeof(DefaultPixelBlenders.DestIn), PixelBlenderMode.DestIn }, { new TestPixel(), typeof(DefaultPixelBlenders.DestOut), PixelBlenderMode.DestOut }, { new TestPixel(), typeof(DefaultPixelBlenders.Clear), PixelBlenderMode.Clear }, { new TestPixel(), typeof(DefaultPixelBlenders.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); } } }