This commit is contained in:
2026-03-29 18:36:48 +03:00
parent 770dd629f5
commit 64ab493037
13 changed files with 816 additions and 19 deletions

View File

@@ -0,0 +1,68 @@
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
}
}