finally
This commit is contained in:
68
Minint.Tests/FragmentServiceTests.cs
Normal file
68
Minint.Tests/FragmentServiceTests.cs
Normal 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user