69 lines
2.0 KiB
C#
69 lines
2.0 KiB
C#
using Minint.Core.Models;
|
|
using Minint.Core.Services.Impl;
|
|
|
|
namespace Minint.Tests;
|
|
|
|
public class FragmentServiceTests
|
|
{
|
|
private readonly FragmentService _fragment = new();
|
|
|
|
[Fact]
|
|
public void CopyFragment_SameDocument_CopiesPixels()
|
|
{
|
|
var doc = new MinintDocument("test");
|
|
var red = new RgbaColor(255, 0, 0, 255);
|
|
doc.EnsureColorCached(red);
|
|
|
|
var src = new MinintLayer("src", 16);
|
|
src.Pixels[0] = 1; // (0,0) = red
|
|
src.Pixels[1] = 1; // (1,0) = red
|
|
doc.Layers.Add(src);
|
|
|
|
var dst = new MinintLayer("dst", 16);
|
|
doc.Layers.Add(dst);
|
|
|
|
_fragment.CopyFragment(doc, 0, 0, 0, 2, 1, doc, 1, 2, 2, 4, 4);
|
|
|
|
Assert.Equal(1, dst.Pixels[2 * 4 + 2]); // (2,2)
|
|
Assert.Equal(1, dst.Pixels[2 * 4 + 3]); // (3,2)
|
|
}
|
|
|
|
[Fact]
|
|
public void CopyFragment_DifferentDocuments_MergesPalette()
|
|
{
|
|
var srcDoc = new MinintDocument("src");
|
|
var blue = new RgbaColor(0, 0, 255, 255);
|
|
int blueIdx = srcDoc.EnsureColorCached(blue);
|
|
var srcLayer = new MinintLayer("L1", 4);
|
|
srcLayer.Pixels[0] = blueIdx;
|
|
srcDoc.Layers.Add(srcLayer);
|
|
|
|
var dstDoc = new MinintDocument("dst");
|
|
var dstLayer = new MinintLayer("L1", 4);
|
|
dstDoc.Layers.Add(dstLayer);
|
|
|
|
_fragment.CopyFragment(srcDoc, 0, 0, 0, 1, 1, dstDoc, 0, 0, 0, 2, 2);
|
|
|
|
int dstBlueIdx = dstDoc.FindColorCached(blue);
|
|
Assert.True(dstBlueIdx > 0);
|
|
Assert.Equal(dstBlueIdx, dstLayer.Pixels[0]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CopyFragment_TransparentPixels_Skipped()
|
|
{
|
|
var doc = new MinintDocument("test");
|
|
var src = new MinintLayer("src", 4); // all zeros (transparent)
|
|
doc.Layers.Add(src);
|
|
|
|
var dst = new MinintLayer("dst", 4);
|
|
Array.Fill(dst.Pixels, 0);
|
|
dst.Pixels[0] = 0; // explicitly 0
|
|
doc.Layers.Add(dst);
|
|
|
|
_fragment.CopyFragment(doc, 0, 0, 0, 2, 2, doc, 1, 0, 0, 2, 2);
|
|
|
|
Assert.Equal(0, dst.Pixels[0]); // stays transparent
|
|
}
|
|
}
|