Files
easy-png-tools2/web/src/lib/core/bmp.test.ts
T

50 lines
1.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { encodeBmpBytes } from "./bmp";
import { makeImage } from "./test-helpers";
describe("encodeBmpBytes", () => {
it("пишет заголовки BM и размеры для 2x1 без паддинга-неопределённости", () => {
const bytes = encodeBmpBytes(
makeImage(2, 1, [
[255, 0, 0, 255],
[0, 255, 0, 255],
]),
);
expect([bytes[0], bytes[1]]).toEqual([0x42, 0x4d]);
const view = new DataView(bytes.buffer);
expect(view.getUint32(2, true)).toBe(54 + 8);
expect(view.getInt32(18, true)).toBe(2);
expect(view.getInt32(22, true)).toBe(1);
expect(view.getUint16(28, true)).toBe(24);
});
it("хранит пиксели в BGR снизу-вверх с паддингом строки", () => {
const bytes = encodeBmpBytes(
makeImage(2, 1, [
[255, 0, 0, 255],
[0, 255, 0, 255],
]),
);
expect([...bytes.slice(54, 60)]).toEqual([0, 0, 255, 0, 255, 0]);
expect(bytes[60]).toBe(0);
expect(bytes[61]).toBe(0);
});
it("нижняя строка изображения идёт первой в файле", () => {
const bytes = encodeBmpBytes(
makeImage(4, 2, [
[10, 10, 10, 255],
[20, 20, 20, 255],
[30, 30, 30, 255],
[40, 40, 40, 255],
[50, 50, 50, 255],
[60, 60, 60, 255],
[70, 70, 70, 255],
[80, 80, 80, 255],
]),
);
expect(bytes[54]).toBe(50);
expect(bytes[54 + 12]).toBe(10);
});
});