89 lines
2.4 KiB
C#
89 lines
2.4 KiB
C#
using AcDream.Core.Textures;
|
|
using DatReaderWriter.DBObjs;
|
|
using DatReaderWriter.Enums;
|
|
|
|
namespace AcDream.Core.Tests.Textures;
|
|
|
|
public class SurfaceDecoderTests
|
|
{
|
|
[Fact]
|
|
public void Decode_A8R8G8B8_ConvertsToRgba8()
|
|
{
|
|
// Source format is B, G, R, A in memory (little-endian ARGB).
|
|
// One 2x2 image: red, green, blue, white pixels.
|
|
var src = new byte[]
|
|
{
|
|
0x00, 0x00, 0xFF, 0xFF, // red (B=0, G=0, R=255, A=255)
|
|
0x00, 0xFF, 0x00, 0xFF, // green
|
|
0xFF, 0x00, 0x00, 0xFF, // blue
|
|
0xFF, 0xFF, 0xFF, 0xFF, // white
|
|
};
|
|
var rs = new RenderSurface
|
|
{
|
|
Width = 2,
|
|
Height = 2,
|
|
Format = PixelFormat.PFID_A8R8G8B8,
|
|
SourceData = src,
|
|
};
|
|
|
|
var decoded = SurfaceDecoder.DecodeRenderSurface(rs);
|
|
|
|
Assert.Equal(2, decoded.Width);
|
|
Assert.Equal(2, decoded.Height);
|
|
Assert.Equal(16, decoded.Rgba8.Length); // 2*2*4
|
|
// red pixel, in RGBA: 255, 0, 0, 255
|
|
Assert.Equal(0xFF, decoded.Rgba8[0]);
|
|
Assert.Equal(0x00, decoded.Rgba8[1]);
|
|
Assert.Equal(0x00, decoded.Rgba8[2]);
|
|
Assert.Equal(0xFF, decoded.Rgba8[3]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Decode_UnsupportedFormat_ReturnsMagenta()
|
|
{
|
|
var rs = new RenderSurface
|
|
{
|
|
Width = 4,
|
|
Height = 4,
|
|
Format = PixelFormat.PFID_INDEX16, // not implemented path
|
|
SourceData = new byte[32],
|
|
};
|
|
|
|
var decoded = SurfaceDecoder.DecodeRenderSurface(rs);
|
|
|
|
Assert.Same(DecodedTexture.Magenta, decoded);
|
|
}
|
|
|
|
[Fact]
|
|
public void Decode_NullSourceData_ReturnsMagenta()
|
|
{
|
|
var rs = new RenderSurface
|
|
{
|
|
Width = 4,
|
|
Height = 4,
|
|
Format = PixelFormat.PFID_A8R8G8B8,
|
|
SourceData = null!,
|
|
};
|
|
|
|
var decoded = SurfaceDecoder.DecodeRenderSurface(rs);
|
|
|
|
Assert.Same(DecodedTexture.Magenta, decoded);
|
|
}
|
|
|
|
[Fact]
|
|
public void Decode_TruncatedA8R8G8B8_ReturnsMagenta()
|
|
{
|
|
// Buffer too small for width*height*4.
|
|
var rs = new RenderSurface
|
|
{
|
|
Width = 2,
|
|
Height = 2,
|
|
Format = PixelFormat.PFID_A8R8G8B8,
|
|
SourceData = new byte[8], // should be 16
|
|
};
|
|
|
|
var decoded = SurfaceDecoder.DecodeRenderSurface(rs);
|
|
|
|
Assert.Same(DecodedTexture.Magenta, decoded);
|
|
}
|
|
}
|