Files
OpenMaidEngine/engine/Age.Engine.Tests/MovieMaskSurfaceTests.cs
2026-07-29 16:01:00 -04:00

56 lines
1.6 KiB
C#

using Age.Engine.Model;
using Age.Engine.Sys4;
using Xunit;
public class MovieMaskSurfaceTests
{
[Fact]
public void ExtractGreenUsesLogicalRowsAndRequestedMaskDimensions()
{
var frame = new RgbaImage(2, 2,
[
1, 10, 2, 255, 3, 20, 4, 255,
5, 30, 6, 255, 7, 40, 8, 255,
]);
Assert.Equal(new byte[] { 10, 20, 99, 30, 40, 99 },
MovieMaskSurface.ExtractGreen(frame, 3, 2, 99));
}
[Fact]
public void ApplyPreservesRgbAndUsesExactPackedCarryAlpha()
{
var captured = new RgbaImage(2, 1,
[
0, 0, 0, 128,
255, 0, 0, 128,
]);
RgbaImage result = MovieMaskSurface.Apply(captured, [255, 255], 2, 1, 0, 0);
Assert.Equal(new byte[]
{
0, 0, 0, 127, // packed 0x80000000: native differs from alpha*255/255
255, 0, 0, 128, // packed red carry reaches the output alpha byte
}, result.Pixels);
Assert.Equal(new byte[] { 0, 0, 0, 128, 255, 0, 0, 128 }, captured.Pixels);
}
[Fact]
public void ApplyClipsSignedRectangleAndLeavesOutsidePixelsUnchanged()
{
var captured = new RgbaImage(3, 1,
[
1, 2, 3, 255,
4, 5, 6, 255,
7, 8, 9, 255,
]);
RgbaImage result = MovieMaskSurface.Apply(captured, [0, 64, 128], 3, 1, -1, 0);
Assert.Equal((byte)63, result.Pixels[3]); // mask column 1
Assert.Equal((byte)127, result.Pixels[7]); // mask column 2
Assert.Equal((byte)255, result.Pixels[11]);
}
}