import { describe, expect, it } from 'vitest';
import { remap, parseColor } from '../recolor.mjs';

/** Спрайт 2×2: два пикселя цвета from (alpha 255), один прозрачный, один другой. */
const sprite = (from) => {
    const rgba = new Uint8Array(2 * 2 * 4);
    rgba.set([...from, 255], 0);
    rgba.set([1, 2, 3, 255], 8);
    return rgba;
};

describe('remap', () => {
    it('точная замена RGB, alpha и прочие цвета не тронуты', () => {
        const out = remap(sprite([58, 40, 34]), [[[58, 40, 34], [58, 67, 86]]]);
        expect([...out.slice(0, 4)]).toEqual([58, 67, 86, 255]);
        expect([...out.slice(8, 12)]).toEqual([1, 2, 3, 255]); // чужой цвет не тронут
        expect(out[4 + 3]).toBe(0); // прозрачный остался прозрачным
    });
});

describe('parseColor', () => {
    it('ключ палитры и #hex дают один и тот же RGB', () => {
        expect(parseColor('C0')).toEqual([0x3a, 0x43, 0x56]);
        expect(parseColor('#3a4356')).toEqual([0x3a, 0x43, 0x56]);
    });
    it('неизвестный ключ — ошибка', () => {
        expect(() => parseColor('Z9')).toThrow();
    });
});