Files

39 lines
1.7 KiB
C#

namespace MeetingAssistant.Tests;
internal static class PngTestFixture
{
private const string Solid2X2 =
"iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAAqADAAQAAAABAAAAAgAAAADO0J6QAAAAEklEQVQIHWP8DwQMQMAEIkAAAD34BACALvQ5AAAAAElFTkSuQmCC";
private const string Solid4X4 =
"iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAABKADAAQAAAABAAAABAAAAADmpNw4AAAAFUlEQVQIHWP8DwQMSIAJiQ1mEhYAAAZdBAQjjGwcAAAAAElFTkSuQmCC";
private const string Solid8X6 =
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAYAAAD+Bd/7AAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAACKADAAQAAAABAAAABgAAAAAJfOcJAAAAFklEQVQIHWP8DwQMeAATHjmw1GBQAAAQiQQIVmhjoQAAAABJRU5ErkJggg==";
public static byte[] Solid(int width, int height)
{
var encoded = (width, height) switch
{
(2, 2) => Solid2X2,
(4, 4) => Solid4X4,
(8, 6) => Solid8X6,
_ => throw new ArgumentOutOfRangeException(
nameof(width),
$"No deterministic PNG fixture exists for {width}x{height}.")
};
return Convert.FromBase64String(encoded);
}
public static (int Width, int Height) ReadDimensions(byte[] png)
{
if (!png.AsSpan(0, 8).SequenceEqual(
new byte[] { 137, 80, 78, 71, 13, 10, 26, 10 }))
{
throw new InvalidDataException("The fixture is not a PNG.");
}
return (
System.Buffers.Binary.BinaryPrimitives.ReadInt32BigEndian(png.AsSpan(16, 4)),
System.Buffers.Binary.BinaryPrimitives.ReadInt32BigEndian(png.AsSpan(20, 4)));
}
}